Blame view
net/batman-adv/originator.h
4.47 KB
ac79cbb96 batman-adv: updat... |
1 |
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: |
c6c8fea29 net: Add batman-a... |
2 3 4 5 6 7 8 9 10 11 12 13 14 |
* * Marek Lindner, Simon Wunderlich * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License |
ebf38fb7a batman-adv: remov... |
15 |
* along with this program; if not, see <http://www.gnu.org/licenses/>. |
c6c8fea29 net: Add batman-a... |
16 17 18 19 |
*/ #ifndef _NET_BATMAN_ADV_ORIGINATOR_H_ #define _NET_BATMAN_ADV_ORIGINATOR_H_ |
1e2c2a4fe batman-adv: Add r... |
20 |
#include "main.h" |
1e2c2a4fe batman-adv: Add r... |
21 22 23 |
#include <linux/compiler.h> #include <linux/if_ether.h> #include <linux/jhash.h> |
7c1243911 batman-adv: Conve... |
24 |
#include <linux/kref.h> |
1e2c2a4fe batman-adv: Add r... |
25 26 27 28 |
#include <linux/rculist.h> #include <linux/rcupdate.h> #include <linux/stddef.h> #include <linux/types.h> |
7aadf889e batman-adv: remov... |
29 |
#include "hash.h" |
85cf8c859 batman-adv: netli... |
30 |
struct netlink_callback; |
1e2c2a4fe batman-adv: Add r... |
31 |
struct seq_file; |
85cf8c859 batman-adv: netli... |
32 |
struct sk_buff; |
1e2c2a4fe batman-adv: Add r... |
33 |
|
4b426b108 batman-adv: Use b... |
34 |
bool batadv_compare_orig(const struct hlist_node *node, const void *data2); |
56303d34a batman-adv: Prefi... |
35 36 37 |
int batadv_originator_init(struct batadv_priv *bat_priv); void batadv_originator_free(struct batadv_priv *bat_priv); void batadv_purge_orig_ref(struct batadv_priv *bat_priv); |
5d9673109 batman-adv: Renam... |
38 |
void batadv_orig_node_put(struct batadv_orig_node *orig_node); |
bbad0a5e3 batman-adv: make ... |
39 |
struct batadv_orig_node *batadv_orig_node_new(struct batadv_priv *bat_priv, |
6b5e971a2 batman-adv: Repla... |
40 |
const u8 *addr); |
cef63419f batman-adv: add l... |
41 42 43 44 |
struct batadv_hardif_neigh_node * batadv_hardif_neigh_get(const struct batadv_hard_iface *hard_iface, const u8 *neigh_addr); void |
accadc35a batman-adv: Renam... |
45 |
batadv_hardif_neigh_put(struct batadv_hardif_neigh_node *hardif_neigh); |
56303d34a batman-adv: Prefi... |
46 |
struct batadv_neigh_node * |
6f0a6b5ee batman-adv: refac... |
47 48 49 |
batadv_neigh_node_get_or_create(struct batadv_orig_node *orig_node, struct batadv_hard_iface *hard_iface, const u8 *neigh_addr); |
25bb25099 batman-adv: Renam... |
50 |
void batadv_neigh_node_put(struct batadv_neigh_node *neigh_node); |
56303d34a batman-adv: Prefi... |
51 |
struct batadv_neigh_node * |
7351a4822 batman-adv: split... |
52 53 |
batadv_orig_router_get(struct batadv_orig_node *orig_node, const struct batadv_hard_iface *if_outgoing); |
89652331c batman-adv: split... |
54 55 56 57 58 59 |
struct batadv_neigh_ifinfo * batadv_neigh_ifinfo_new(struct batadv_neigh_node *neigh, struct batadv_hard_iface *if_outgoing); struct batadv_neigh_ifinfo * batadv_neigh_ifinfo_get(struct batadv_neigh_node *neigh, struct batadv_hard_iface *if_outgoing); |
044fa3ae1 batman-adv: Renam... |
60 |
void batadv_neigh_ifinfo_put(struct batadv_neigh_ifinfo *neigh_ifinfo); |
7351a4822 batman-adv: split... |
61 |
|
85cf8c859 batman-adv: netli... |
62 |
int batadv_hardif_neigh_dump(struct sk_buff *msg, struct netlink_callback *cb); |
7587405ab batman-adv: expor... |
63 |
int batadv_hardif_neigh_seq_print_text(struct seq_file *seq, void *offset); |
7351a4822 batman-adv: split... |
64 65 66 67 68 69 |
struct batadv_orig_ifinfo * batadv_orig_ifinfo_get(struct batadv_orig_node *orig_node, struct batadv_hard_iface *if_outgoing); struct batadv_orig_ifinfo * batadv_orig_ifinfo_new(struct batadv_orig_node *orig_node, struct batadv_hard_iface *if_outgoing); |
35f94779c batman-adv: Renam... |
70 |
void batadv_orig_ifinfo_put(struct batadv_orig_ifinfo *orig_ifinfo); |
7351a4822 batman-adv: split... |
71 |
|
7d211efc5 batman-adv: Prefi... |
72 |
int batadv_orig_seq_print_text(struct seq_file *seq, void *offset); |
85cf8c859 batman-adv: netli... |
73 |
int batadv_orig_dump(struct sk_buff *msg, struct netlink_callback *cb); |
cb1c92ec3 batman-adv: add d... |
74 |
int batadv_orig_hardif_seq_print_text(struct seq_file *seq, void *offset); |
56303d34a batman-adv: Prefi... |
75 76 77 78 |
int batadv_orig_hash_add_if(struct batadv_hard_iface *hard_iface, int max_if_num); int batadv_orig_hash_del_if(struct batadv_hard_iface *hard_iface, int max_if_num); |
7ea7b4a14 batman-adv: make ... |
79 80 81 82 83 84 |
struct batadv_orig_node_vlan * batadv_orig_node_vlan_new(struct batadv_orig_node *orig_node, unsigned short vid); struct batadv_orig_node_vlan * batadv_orig_node_vlan_get(struct batadv_orig_node *orig_node, unsigned short vid); |
21754e250 batman-adv: Renam... |
85 |
void batadv_orig_node_vlan_put(struct batadv_orig_node_vlan *orig_vlan); |
c6c8fea29 net: Add batman-a... |
86 |
|
9cfc7bd60 batman-adv: Refor... |
87 88 89 |
/* hashfunction to choose an entry in a hash table of given size * hash algorithm from http://en.wikipedia.org/wiki/Hash_table */ |
6b5e971a2 batman-adv: Repla... |
90 |
static inline u32 batadv_choose_orig(const void *data, u32 size) |
c6c8fea29 net: Add batman-a... |
91 |
{ |
6b5e971a2 batman-adv: Repla... |
92 |
u32 hash = 0; |
c6c8fea29 net: Add batman-a... |
93 |
|
36fd61cb8 batman-adv: Use c... |
94 |
hash = jhash(data, ETH_ALEN, hash); |
c6c8fea29 net: Add batman-a... |
95 96 |
return hash % size; } |
56303d34a batman-adv: Prefi... |
97 98 |
static inline struct batadv_orig_node * batadv_orig_hash_find(struct batadv_priv *bat_priv, const void *data) |
7aadf889e batman-adv: remov... |
99 |
{ |
5bf74e9ca batman-adv: Prefi... |
100 |
struct batadv_hashtable *hash = bat_priv->orig_hash; |
7aadf889e batman-adv: remov... |
101 |
struct hlist_head *head; |
56303d34a batman-adv: Prefi... |
102 |
struct batadv_orig_node *orig_node, *orig_node_tmp = NULL; |
7aadf889e batman-adv: remov... |
103 104 105 106 |
int index; if (!hash) return NULL; |
da641193d batman-adv: Prefi... |
107 |
index = batadv_choose_orig(data, hash->size); |
7aadf889e batman-adv: remov... |
108 109 110 |
head = &hash->table[index]; rcu_read_lock(); |
b67bfe0d4 hlist: drop the n... |
111 |
hlist_for_each_entry_rcu(orig_node, head, hash_entry) { |
1eda58bfc batman-adv: Prefi... |
112 |
if (!batadv_compare_eth(orig_node, data)) |
7aadf889e batman-adv: remov... |
113 |
continue; |
7c1243911 batman-adv: Conve... |
114 |
if (!kref_get_unless_zero(&orig_node->refcount)) |
7b36e8eef batman-adv: Corre... |
115 |
continue; |
7aadf889e batman-adv: remov... |
116 |
orig_node_tmp = orig_node; |
7aadf889e batman-adv: remov... |
117 118 119 120 121 122 |
break; } rcu_read_unlock(); return orig_node_tmp; } |
c6c8fea29 net: Add batman-a... |
123 |
#endif /* _NET_BATMAN_ADV_ORIGINATOR_H_ */ |