+++ /dev/null
-From c506b113c82319c43478ff31c933c4e98f0084d7 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sasha.levin@oracle.com>
-Date: Wed, 27 Feb 2013 17:06:00 -0800
-Subject: [PATCH 2/3] hlist: drop the node parameter from iterators
-
-I'm not sure why, but the hlist for each entry iterators were conceived
-
- list_for_each_entry(pos, head, member)
-
-The hlist ones were greedy and wanted an extra parameter:
-
- hlist_for_each_entry(tpos, pos, head, member)
-
-Why did they need an extra pos parameter? I'm not quite sure. Not only
-they don't really need it, it also prevents the iterator from looking
-exactly like the list iterator, which is unfortunate.
-
-Besides the semantic patch, there was some manual work required:
-
- - Fix up the actual hlist iterators in linux/list.h
- - Fix up the declaration of other iterators based on the hlist ones.
- - A very small amount of places were using the 'node' parameter, this
- was modified to use 'obj->member' instead.
- - Coccinelle didn't handle the hlist_for_each_entry_safe iterator
- properly, so those had to be fixed up manually.
-
-The semantic patch which is mostly the work of Peter Senna Tschudin is here:
-
-@@
-iterator name hlist_for_each_entry, hlist_for_each_entry_continue, hlist_for_each_entry_from, hlist_for_each_entry_rcu, hlist_for_each_entry_rcu_bh, hlist_for_each_entry_continue_rcu_bh, for_each_busy_worker, ax25_uid_for_each, ax25_for_each, inet_bind_bucket_for_each, sctp_for_each_hentry, sk_for_each, sk_for_each_rcu, sk_for_each_from, sk_for_each_safe, sk_for_each_bound, hlist_for_each_entry_safe, hlist_for_each_entry_continue_rcu, nr_neigh_for_each, nr_neigh_for_each_safe, nr_node_for_each, nr_node_for_each_safe, for_each_gfn_indirect_valid_sp, for_each_gfn_sp, for_each_host;
-
-type T;
-expression a,c,d,e;
-identifier b;
-statement S;
-@@
-
--T b;
- <+... when != b
-(
-hlist_for_each_entry(a,
-- b,
-c, d) S
-|
-hlist_for_each_entry_continue(a,
-- b,
-c) S
-|
-hlist_for_each_entry_from(a,
-- b,
-c) S
-|
-hlist_for_each_entry_rcu(a,
-- b,
-c, d) S
-|
-hlist_for_each_entry_rcu_bh(a,
-- b,
-c, d) S
-|
-hlist_for_each_entry_continue_rcu_bh(a,
-- b,
-c) S
-|
-for_each_busy_worker(a, c,
-- b,
-d) S
-|
-ax25_uid_for_each(a,
-- b,
-c) S
-|
-ax25_for_each(a,
-- b,
-c) S
-|
-inet_bind_bucket_for_each(a,
-- b,
-c) S
-|
-sctp_for_each_hentry(a,
-- b,
-c) S
-|
-sk_for_each(a,
-- b,
-c) S
-|
-sk_for_each_rcu(a,
-- b,
-c) S
-|
-sk_for_each_from
--(a, b)
-+(a)
-S
-+ sk_for_each_from(a) S
-|
-sk_for_each_safe(a,
-- b,
-c, d) S
-|
-sk_for_each_bound(a,
-- b,
-c) S
-|
-hlist_for_each_entry_safe(a,
-- b,
-c, d, e) S
-|
-hlist_for_each_entry_continue_rcu(a,
-- b,
-c) S
-|
-nr_neigh_for_each(a,
-- b,
-c) S
-|
-nr_neigh_for_each_safe(a,
-- b,
-c, d) S
-|
-nr_node_for_each(a,
-- b,
-c) S
-|
-nr_node_for_each_safe(a,
-- b,
-c, d) S
-|
-- for_each_gfn_sp(a, c, d, b) S
-+ for_each_gfn_sp(a, c, d) S
-|
-- for_each_gfn_indirect_valid_sp(a, c, d, b) S
-+ for_each_gfn_indirect_valid_sp(a, c, d) S
-|
-for_each_host(a,
-- b,
-c) S
-|
-for_each_host_safe(a,
-- b,
-c, d) S
-|
-for_each_mesh_entry(a,
-- b,
-c, d) S
-)
- ...+>
-
-[akpm@linux-foundation.org: drop bogus change from net/ipv4/raw.c]
-[akpm@linux-foundation.org: drop bogus hunk from net/ipv6/raw.c]
-[akpm@linux-foundation.org: checkpatch fixes]
-[akpm@linux-foundation.org: fix warnings]
-[akpm@linux-foudnation.org: redo intrusive kvm changes]
-Tested-by: Peter Senna Tschudin <peter.senna@gmail.com>
-Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
-Cc: Wu Fengguang <fengguang.wu@intel.com>
-Cc: Marcelo Tosatti <mtosatti@redhat.com>
-Cc: Gleb Natapov <gleb@redhat.com>
-Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
----
- bat_iv_ogm.c | 12 +++----
- bridge_loop_avoidance.c | 39 +++++++++-------------
- compat.h | 23 +++++++++++++
- distributed-arp-table.c | 15 ++++-----
- gateway_client.c | 13 +++-----
- main.c | 6 ++--
- originator.c | 31 ++++++++----------
- originator.h | 3 +-
- routing.c | 6 ++--
- send.c | 6 ++--
- translation-table.c | 82 ++++++++++++++++++++---------------------------
- vis.c | 38 +++++++++-------------
- 12 files changed, 125 insertions(+), 149 deletions(-)
-
-diff --git a/bat_iv_ogm.c b/bat_iv_ogm.c
-index d5be889..a5bb0a7 100644
---- a/bat_iv_ogm.c
-+++ b/bat_iv_ogm.c
-@@ -487,7 +487,6 @@ static void batadv_iv_ogm_queue_add(struct batadv_priv *bat_priv,
- */
- struct batadv_forw_packet *forw_packet_aggr = NULL;
- struct batadv_forw_packet *forw_packet_pos = NULL;
-- struct hlist_node *tmp_node;
- struct batadv_ogm_packet *batadv_ogm_packet;
- bool direct_link;
- unsigned long max_aggregation_jiffies;
-@@ -500,7 +499,7 @@ static void batadv_iv_ogm_queue_add(struct batadv_priv *bat_priv,
- spin_lock_bh(&bat_priv->forw_bat_list_lock);
- /* own packets are not to be aggregated */
- if ((atomic_read(&bat_priv->aggregated_ogms)) && (!own_packet)) {
-- hlist_for_each_entry(forw_packet_pos, tmp_node,
-+ hlist_for_each_entry(forw_packet_pos,
- &bat_priv->forw_bat_list, list) {
- if (batadv_iv_ogm_can_aggregate(batadv_ogm_packet,
- bat_priv, packet_len,
-@@ -655,7 +654,6 @@ batadv_iv_ogm_orig_update(struct batadv_priv *bat_priv,
- struct batadv_neigh_node *neigh_node = NULL, *tmp_neigh_node = NULL;
- struct batadv_neigh_node *router = NULL;
- struct batadv_orig_node *orig_node_tmp;
-- struct hlist_node *node;
- int if_num;
- uint8_t sum_orig, sum_neigh;
- uint8_t *neigh_addr;
-@@ -665,7 +663,7 @@ batadv_iv_ogm_orig_update(struct batadv_priv *bat_priv,
- "update_originator(): Searching and updating originator entry of received packet\n");
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(tmp_neigh_node, node,
-+ hlist_for_each_entry_rcu(tmp_neigh_node,
- &orig_node->neigh_list, list) {
- neigh_addr = tmp_neigh_node->addr;
- if (batadv_compare_eth(neigh_addr, ethhdr->h_source) &&
-@@ -801,7 +799,6 @@ static int batadv_iv_ogm_calc_tq(struct batadv_orig_node *orig_node,
- {
- struct batadv_priv *bat_priv = netdev_priv(if_incoming->soft_iface);
- struct batadv_neigh_node *neigh_node = NULL, *tmp_neigh_node;
-- struct hlist_node *node;
- uint8_t total_count;
- uint8_t orig_eq_count, neigh_rq_count, neigh_rq_inv, tq_own;
- unsigned int neigh_rq_inv_cube, neigh_rq_max_cube;
-@@ -810,7 +807,7 @@ static int batadv_iv_ogm_calc_tq(struct batadv_orig_node *orig_node,
-
- /* find corresponding one hop neighbor */
- rcu_read_lock();
-- hlist_for_each_entry_rcu(tmp_neigh_node, node,
-+ hlist_for_each_entry_rcu(tmp_neigh_node,
- &orig_neigh_node->neigh_list, list) {
- if (!batadv_compare_eth(tmp_neigh_node->addr,
- orig_neigh_node->orig))
-@@ -920,7 +917,6 @@ batadv_iv_ogm_update_seqnos(const struct ethhdr *ethhdr,
- struct batadv_priv *bat_priv = netdev_priv(if_incoming->soft_iface);
- struct batadv_orig_node *orig_node;
- struct batadv_neigh_node *tmp_neigh_node;
-- struct hlist_node *node;
- int is_duplicate = 0;
- int32_t seq_diff;
- int need_update = 0;
-@@ -943,7 +939,7 @@ batadv_iv_ogm_update_seqnos(const struct ethhdr *ethhdr,
- goto out;
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(tmp_neigh_node, node,
-+ hlist_for_each_entry_rcu(tmp_neigh_node,
- &orig_node->neigh_list, list) {
- is_duplicate |= batadv_test_bit(tmp_neigh_node->real_bits,
- orig_node->last_real_seqno,
-diff --git a/bridge_loop_avoidance.c b/bridge_loop_avoidance.c
-index 30f4652..6a4f728 100644
---- a/bridge_loop_avoidance.c
-+++ b/bridge_loop_avoidance.c
-@@ -144,7 +144,6 @@ static struct batadv_bla_claim
- {
- struct batadv_hashtable *hash = bat_priv->bla.claim_hash;
- struct hlist_head *head;
-- struct hlist_node *node;
- struct batadv_bla_claim *claim;
- struct batadv_bla_claim *claim_tmp = NULL;
- int index;
-@@ -156,7 +155,7 @@ static struct batadv_bla_claim
- head = &hash->table[index];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(claim, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(claim, head, hash_entry) {
- if (!batadv_compare_claim(&claim->hash_entry, data))
- continue;
-
-@@ -185,7 +184,6 @@ batadv_backbone_hash_find(struct batadv_priv *bat_priv,
- {
- struct batadv_hashtable *hash = bat_priv->bla.backbone_hash;
- struct hlist_head *head;
-- struct hlist_node *node;
- struct batadv_bla_backbone_gw search_entry, *backbone_gw;
- struct batadv_bla_backbone_gw *backbone_gw_tmp = NULL;
- int index;
-@@ -200,7 +198,7 @@ batadv_backbone_hash_find(struct batadv_priv *bat_priv,
- head = &hash->table[index];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(backbone_gw, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(backbone_gw, head, hash_entry) {
- if (!batadv_compare_backbone_gw(&backbone_gw->hash_entry,
- &search_entry))
- continue;
-@@ -221,7 +219,7 @@ static void
- batadv_bla_del_backbone_claims(struct batadv_bla_backbone_gw *backbone_gw)
- {
- struct batadv_hashtable *hash;
-- struct hlist_node *node, *node_tmp;
-+ struct hlist_node *node_tmp;
- struct hlist_head *head;
- struct batadv_bla_claim *claim;
- int i;
-@@ -236,13 +234,13 @@ batadv_bla_del_backbone_claims(struct batadv_bla_backbone_gw *backbone_gw)
- list_lock = &hash->list_locks[i];
-
- spin_lock_bh(list_lock);
-- hlist_for_each_entry_safe(claim, node, node_tmp,
-+ hlist_for_each_entry_safe(claim, node_tmp,
- head, hash_entry) {
- if (claim->backbone_gw != backbone_gw)
- continue;
-
- batadv_claim_free_ref(claim);
-- hlist_del_rcu(node);
-+ hlist_del_rcu(&claim->hash_entry);
- }
- spin_unlock_bh(list_lock);
- }
-@@ -460,7 +458,6 @@ static void batadv_bla_answer_request(struct batadv_priv *bat_priv,
- struct batadv_hard_iface *primary_if,
- short vid)
- {
-- struct hlist_node *node;
- struct hlist_head *head;
- struct batadv_hashtable *hash;
- struct batadv_bla_claim *claim;
-@@ -481,7 +478,7 @@ static void batadv_bla_answer_request(struct batadv_priv *bat_priv,
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(claim, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(claim, head, hash_entry) {
- /* only own claims are interesting */
- if (claim->backbone_gw != backbone_gw)
- continue;
-@@ -958,7 +955,7 @@ static int batadv_bla_process_claim(struct batadv_priv *bat_priv,
- static void batadv_bla_purge_backbone_gw(struct batadv_priv *bat_priv, int now)
- {
- struct batadv_bla_backbone_gw *backbone_gw;
-- struct hlist_node *node, *node_tmp;
-+ struct hlist_node *node_tmp;
- struct hlist_head *head;
- struct batadv_hashtable *hash;
- spinlock_t *list_lock; /* protects write access to the hash lists */
-@@ -973,7 +970,7 @@ static void batadv_bla_purge_backbone_gw(struct batadv_priv *bat_priv, int now)
- list_lock = &hash->list_locks[i];
-
- spin_lock_bh(list_lock);
-- hlist_for_each_entry_safe(backbone_gw, node, node_tmp,
-+ hlist_for_each_entry_safe(backbone_gw, node_tmp,
- head, hash_entry) {
- if (now)
- goto purge_now;
-@@ -992,7 +989,7 @@ purge_now:
-
- batadv_bla_del_backbone_claims(backbone_gw);
-
-- hlist_del_rcu(node);
-+ hlist_del_rcu(&backbone_gw->hash_entry);
- batadv_backbone_gw_free_ref(backbone_gw);
- }
- spin_unlock_bh(list_lock);
-@@ -1013,7 +1010,6 @@ static void batadv_bla_purge_claims(struct batadv_priv *bat_priv,
- int now)
- {
- struct batadv_bla_claim *claim;
-- struct hlist_node *node;
- struct hlist_head *head;
- struct batadv_hashtable *hash;
- int i;
-@@ -1026,7 +1022,7 @@ static void batadv_bla_purge_claims(struct batadv_priv *bat_priv,
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(claim, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(claim, head, hash_entry) {
- if (now)
- goto purge_now;
- if (!batadv_compare_eth(claim->backbone_gw->orig,
-@@ -1062,7 +1058,6 @@ void batadv_bla_update_orig_address(struct batadv_priv *bat_priv,
- struct batadv_hard_iface *oldif)
- {
- struct batadv_bla_backbone_gw *backbone_gw;
-- struct hlist_node *node;
- struct hlist_head *head;
- struct batadv_hashtable *hash;
- __be16 group;
-@@ -1086,7 +1081,7 @@ void batadv_bla_update_orig_address(struct batadv_priv *bat_priv,
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(backbone_gw, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(backbone_gw, head, hash_entry) {
- /* own orig still holds the old value. */
- if (!batadv_compare_eth(backbone_gw->orig,
- oldif->net_dev->dev_addr))
-@@ -1112,7 +1107,6 @@ static void batadv_bla_periodic_work(struct work_struct *work)
- struct delayed_work *delayed_work;
- struct batadv_priv *bat_priv;
- struct batadv_priv_bla *priv_bla;
-- struct hlist_node *node;
- struct hlist_head *head;
- struct batadv_bla_backbone_gw *backbone_gw;
- struct batadv_hashtable *hash;
-@@ -1140,7 +1134,7 @@ static void batadv_bla_periodic_work(struct work_struct *work)
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(backbone_gw, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(backbone_gw, head, hash_entry) {
- if (!batadv_compare_eth(backbone_gw->orig,
- primary_if->net_dev->dev_addr))
- continue;
-@@ -1322,7 +1316,6 @@ int batadv_bla_is_backbone_gw_orig(struct batadv_priv *bat_priv, uint8_t *orig)
- {
- struct batadv_hashtable *hash = bat_priv->bla.backbone_hash;
- struct hlist_head *head;
-- struct hlist_node *node;
- struct batadv_bla_backbone_gw *backbone_gw;
- int i;
-
-@@ -1336,7 +1329,7 @@ int batadv_bla_is_backbone_gw_orig(struct batadv_priv *bat_priv, uint8_t *orig)
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(backbone_gw, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(backbone_gw, head, hash_entry) {
- if (batadv_compare_eth(backbone_gw->orig, orig)) {
- rcu_read_unlock();
- return 1;
-@@ -1607,7 +1600,6 @@ int batadv_bla_claim_table_seq_print_text(struct seq_file *seq, void *offset)
- struct batadv_hashtable *hash = bat_priv->bla.claim_hash;
- struct batadv_bla_claim *claim;
- struct batadv_hard_iface *primary_if;
-- struct hlist_node *node;
- struct hlist_head *head;
- uint32_t i;
- bool is_own;
-@@ -1628,7 +1620,7 @@ int batadv_bla_claim_table_seq_print_text(struct seq_file *seq, void *offset)
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(claim, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(claim, head, hash_entry) {
- is_own = batadv_compare_eth(claim->backbone_gw->orig,
- primary_addr);
- seq_printf(seq, " * %pM on % 5d by %pM [%c] (%#.4x)\n",
-@@ -1652,7 +1644,6 @@ int batadv_bla_backbone_table_seq_print_text(struct seq_file *seq, void *offset)
- struct batadv_hashtable *hash = bat_priv->bla.backbone_hash;
- struct batadv_bla_backbone_gw *backbone_gw;
- struct batadv_hard_iface *primary_if;
-- struct hlist_node *node;
- struct hlist_head *head;
- int secs, msecs;
- uint32_t i;
-@@ -1674,7 +1665,7 @@ int batadv_bla_backbone_table_seq_print_text(struct seq_file *seq, void *offset)
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(backbone_gw, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(backbone_gw, head, hash_entry) {
- msecs = jiffies_to_msecs(jiffies -
- backbone_gw->lasttime);
- secs = msecs / 1000;
-diff --git a/compat.h b/compat.h
-index e21b310..22ab781 100644
---- a/compat.h
-+++ b/compat.h
-@@ -211,6 +211,29 @@ static int batadv_interface_set_mac_addr(struct net_device *dev, void *p) \
- }\
- static int __batadv_interface_set_mac_addr(x, y)
-
-+#define hlist_entry_safe(ptr, type, member) \
-+ (ptr) ? hlist_entry(ptr, type, member) : NULL
-+
-+#undef hlist_for_each_entry
-+#define hlist_for_each_entry(pos, head, member) \
-+ for (pos = hlist_entry_safe((head)->first, typeof(*(pos)), member);\
-+ pos; \
-+ pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member))
-+
-+#undef hlist_for_each_entry_rcu
-+#define hlist_for_each_entry_rcu(pos, head, member) \
-+ for (pos = hlist_entry_safe (rcu_dereference_raw(hlist_first_rcu(head)),\
-+ typeof(*(pos)), member); \
-+ pos; \
-+ pos = hlist_entry_safe(rcu_dereference_raw(hlist_next_rcu(\
-+ &(pos)->member)), typeof(*(pos)), member))
-+
-+#undef hlist_for_each_entry_safe
-+#define hlist_for_each_entry_safe(pos, n, head, member) \
-+ for (pos = hlist_entry_safe((head)->first, typeof(*pos), member);\
-+ pos && ({ n = pos->member.next; 1; }); \
-+ pos = hlist_entry_safe(n, typeof(*pos), member))
-+
- #endif /* < KERNEL_VERSION(3, 9, 0) */
-
- #endif /* _NET_BATMAN_ADV_COMPAT_H_ */
-diff --git a/distributed-arp-table.c b/distributed-arp-table.c
-index 761a590..d54188a 100644
---- a/distributed-arp-table.c
-+++ b/distributed-arp-table.c
-@@ -83,7 +83,7 @@ static void __batadv_dat_purge(struct batadv_priv *bat_priv,
- {
- spinlock_t *list_lock; /* protects write access to the hash lists */
- struct batadv_dat_entry *dat_entry;
-- struct hlist_node *node, *node_tmp;
-+ struct hlist_node *node_tmp;
- struct hlist_head *head;
- uint32_t i;
-
-@@ -95,7 +95,7 @@ static void __batadv_dat_purge(struct batadv_priv *bat_priv,
- list_lock = &bat_priv->dat.hash->list_locks[i];
-
- spin_lock_bh(list_lock);
-- hlist_for_each_entry_safe(dat_entry, node, node_tmp, head,
-+ hlist_for_each_entry_safe(dat_entry, node_tmp, head,
- hash_entry) {
- /* if an helper function has been passed as parameter,
- * ask it if the entry has to be purged or not
-@@ -103,7 +103,7 @@ static void __batadv_dat_purge(struct batadv_priv *bat_priv,
- if (to_purge && !to_purge(dat_entry))
- continue;
-
-- hlist_del_rcu(node);
-+ hlist_del_rcu(&dat_entry->hash_entry);
- batadv_dat_entry_free_ref(dat_entry);
- }
- spin_unlock_bh(list_lock);
-@@ -235,7 +235,6 @@ static struct batadv_dat_entry *
- batadv_dat_entry_hash_find(struct batadv_priv *bat_priv, __be32 ip)
- {
- struct hlist_head *head;
-- struct hlist_node *node;
- struct batadv_dat_entry *dat_entry, *dat_entry_tmp = NULL;
- struct batadv_hashtable *hash = bat_priv->dat.hash;
- uint32_t index;
-@@ -247,7 +246,7 @@ batadv_dat_entry_hash_find(struct batadv_priv *bat_priv, __be32 ip)
- head = &hash->table[index];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(dat_entry, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(dat_entry, head, hash_entry) {
- if (dat_entry->ip != ip)
- continue;
-
-@@ -465,7 +464,6 @@ static void batadv_choose_next_candidate(struct batadv_priv *bat_priv,
- batadv_dat_addr_t max = 0, tmp_max = 0;
- struct batadv_orig_node *orig_node, *max_orig_node = NULL;
- struct batadv_hashtable *hash = bat_priv->orig_hash;
-- struct hlist_node *node;
- struct hlist_head *head;
- int i;
-
-@@ -481,7 +479,7 @@ static void batadv_choose_next_candidate(struct batadv_priv *bat_priv,
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(orig_node, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(orig_node, head, hash_entry) {
- /* the dht space is a ring and addresses are unsigned */
- tmp_max = BATADV_DAT_ADDR_MAX - orig_node->dat_addr +
- ip_key;
-@@ -686,7 +684,6 @@ int batadv_dat_cache_seq_print_text(struct seq_file *seq, void *offset)
- struct batadv_hashtable *hash = bat_priv->dat.hash;
- struct batadv_dat_entry *dat_entry;
- struct batadv_hard_iface *primary_if;
-- struct hlist_node *node;
- struct hlist_head *head;
- unsigned long last_seen_jiffies;
- int last_seen_msecs, last_seen_secs, last_seen_mins;
-@@ -704,7 +701,7 @@ int batadv_dat_cache_seq_print_text(struct seq_file *seq, void *offset)
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(dat_entry, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(dat_entry, head, hash_entry) {
- last_seen_jiffies = jiffies - dat_entry->last_update;
- last_seen_msecs = jiffies_to_msecs(last_seen_jiffies);
- last_seen_mins = last_seen_msecs / 60000;
-diff --git a/gateway_client.c b/gateway_client.c
-index 074107f..34f99a4 100644
---- a/gateway_client.c
-+++ b/gateway_client.c
-@@ -114,7 +114,6 @@ static struct batadv_gw_node *
- batadv_gw_get_best_gw_node(struct batadv_priv *bat_priv)
- {
- struct batadv_neigh_node *router;
-- struct hlist_node *node;
- struct batadv_gw_node *gw_node, *curr_gw = NULL;
- uint32_t max_gw_factor = 0, tmp_gw_factor = 0;
- uint32_t gw_divisor;
-@@ -127,7 +126,7 @@ batadv_gw_get_best_gw_node(struct batadv_priv *bat_priv)
- gw_divisor *= 64;
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(gw_node, node, &bat_priv->gw.list, list) {
-+ hlist_for_each_entry_rcu(gw_node, &bat_priv->gw.list, list) {
- if (gw_node->deleted)
- continue;
-
-@@ -344,7 +343,6 @@ void batadv_gw_node_update(struct batadv_priv *bat_priv,
- struct batadv_orig_node *orig_node,
- uint8_t new_gwflags)
- {
-- struct hlist_node *node;
- struct batadv_gw_node *gw_node, *curr_gw;
-
- /* Note: We don't need a NULL check here, since curr_gw never gets
-@@ -355,7 +353,7 @@ void batadv_gw_node_update(struct batadv_priv *bat_priv,
- curr_gw = batadv_gw_get_selected_gw_node(bat_priv);
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(gw_node, node, &bat_priv->gw.list, list) {
-+ hlist_for_each_entry_rcu(gw_node, &bat_priv->gw.list, list) {
- if (gw_node->orig_node != orig_node)
- continue;
-
-@@ -403,7 +401,7 @@ void batadv_gw_node_delete(struct batadv_priv *bat_priv,
- void batadv_gw_node_purge(struct batadv_priv *bat_priv)
- {
- struct batadv_gw_node *gw_node, *curr_gw;
-- struct hlist_node *node, *node_tmp;
-+ struct hlist_node *node_tmp;
- unsigned long timeout = msecs_to_jiffies(2 * BATADV_PURGE_TIMEOUT);
- int do_deselect = 0;
-
-@@ -411,7 +409,7 @@ void batadv_gw_node_purge(struct batadv_priv *bat_priv)
-
- spin_lock_bh(&bat_priv->gw.list_lock);
-
-- hlist_for_each_entry_safe(gw_node, node, node_tmp,
-+ hlist_for_each_entry_safe(gw_node, node_tmp,
- &bat_priv->gw.list, list) {
- if (((!gw_node->deleted) ||
- (time_before(jiffies, gw_node->deleted + timeout))) &&
-@@ -476,7 +474,6 @@ int batadv_gw_client_seq_print_text(struct seq_file *seq, void *offset)
- struct batadv_priv *bat_priv = netdev_priv(net_dev);
- struct batadv_hard_iface *primary_if;
- struct batadv_gw_node *gw_node;
-- struct hlist_node *node;
- int gw_count = 0;
-
- primary_if = batadv_seq_print_text_primary_if_get(seq);
-@@ -490,7 +487,7 @@ int batadv_gw_client_seq_print_text(struct seq_file *seq, void *offset)
- primary_if->net_dev->dev_addr, net_dev->name);
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(gw_node, node, &bat_priv->gw.list, list) {
-+ hlist_for_each_entry_rcu(gw_node, &bat_priv->gw.list, list) {
- if (gw_node->deleted)
- continue;
-
-diff --git a/main.c b/main.c
-index 21fe698..0488d70 100644
---- a/main.c
-+++ b/main.c
-@@ -345,9 +345,8 @@ void batadv_recv_handler_unregister(uint8_t packet_type)
- static struct batadv_algo_ops *batadv_algo_get(char *name)
- {
- struct batadv_algo_ops *bat_algo_ops = NULL, *bat_algo_ops_tmp;
-- struct hlist_node *node;
-
-- hlist_for_each_entry(bat_algo_ops_tmp, node, &batadv_algo_list, list) {
-+ hlist_for_each_entry(bat_algo_ops_tmp, &batadv_algo_list, list) {
- if (strcmp(bat_algo_ops_tmp->name, name) != 0)
- continue;
-
-@@ -411,11 +410,10 @@ out:
- int batadv_algo_seq_print_text(struct seq_file *seq, void *offset)
- {
- struct batadv_algo_ops *bat_algo_ops;
-- struct hlist_node *node;
-
- seq_printf(seq, "Available routing algorithms:\n");
-
-- hlist_for_each_entry(bat_algo_ops, node, &batadv_algo_list, list) {
-+ hlist_for_each_entry(bat_algo_ops, &batadv_algo_list, list) {
- seq_printf(seq, "%s\n", bat_algo_ops->name);
- }
-
-diff --git a/originator.c b/originator.c
-index 457ea44..96fb80b 100644
---- a/originator.c
-+++ b/originator.c
-@@ -118,7 +118,7 @@ out:
-
- static void batadv_orig_node_free_rcu(struct rcu_head *rcu)
- {
-- struct hlist_node *node, *node_tmp;
-+ struct hlist_node *node_tmp;
- struct batadv_neigh_node *neigh_node, *tmp_neigh_node;
- struct batadv_orig_node *orig_node;
-
-@@ -134,7 +134,7 @@ static void batadv_orig_node_free_rcu(struct rcu_head *rcu)
- }
-
- /* for all neighbors towards this originator ... */
-- hlist_for_each_entry_safe(neigh_node, node, node_tmp,
-+ hlist_for_each_entry_safe(neigh_node, node_tmp,
- &orig_node->neigh_list, list) {
- hlist_del_rcu(&neigh_node->list);
- batadv_neigh_node_free_ref(neigh_node);
-@@ -161,7 +161,7 @@ void batadv_orig_node_free_ref(struct batadv_orig_node *orig_node)
- void batadv_originator_free(struct batadv_priv *bat_priv)
- {
- struct batadv_hashtable *hash = bat_priv->orig_hash;
-- struct hlist_node *node, *node_tmp;
-+ struct hlist_node *node_tmp;
- struct hlist_head *head;
- spinlock_t *list_lock; /* spinlock to protect write access */
- struct batadv_orig_node *orig_node;
-@@ -179,9 +179,9 @@ void batadv_originator_free(struct batadv_priv *bat_priv)
- list_lock = &hash->list_locks[i];
-
- spin_lock_bh(list_lock);
-- hlist_for_each_entry_safe(orig_node, node, node_tmp,
-+ hlist_for_each_entry_safe(orig_node, node_tmp,
- head, hash_entry) {
-- hlist_del_rcu(node);
-+ hlist_del_rcu(&orig_node->hash_entry);
- batadv_orig_node_free_ref(orig_node);
- }
- spin_unlock_bh(list_lock);
-@@ -274,7 +274,7 @@ batadv_purge_orig_neighbors(struct batadv_priv *bat_priv,
- struct batadv_orig_node *orig_node,
- struct batadv_neigh_node **best_neigh_node)
- {
-- struct hlist_node *node, *node_tmp;
-+ struct hlist_node *node_tmp;
- struct batadv_neigh_node *neigh_node;
- bool neigh_purged = false;
- unsigned long last_seen;
-@@ -285,7 +285,7 @@ batadv_purge_orig_neighbors(struct batadv_priv *bat_priv,
- spin_lock_bh(&orig_node->neigh_list_lock);
-
- /* for all neighbors towards this originator ... */
-- hlist_for_each_entry_safe(neigh_node, node, node_tmp,
-+ hlist_for_each_entry_safe(neigh_node, node_tmp,
- &orig_node->neigh_list, list) {
- last_seen = neigh_node->last_seen;
- if_incoming = neigh_node->if_incoming;
-@@ -348,7 +348,7 @@ static bool batadv_purge_orig_node(struct batadv_priv *bat_priv,
- static void _batadv_purge_orig(struct batadv_priv *bat_priv)
- {
- struct batadv_hashtable *hash = bat_priv->orig_hash;
-- struct hlist_node *node, *node_tmp;
-+ struct hlist_node *node_tmp;
- struct hlist_head *head;
- spinlock_t *list_lock; /* spinlock to protect write access */
- struct batadv_orig_node *orig_node;
-@@ -363,13 +363,13 @@ static void _batadv_purge_orig(struct batadv_priv *bat_priv)
- list_lock = &hash->list_locks[i];
-
- spin_lock_bh(list_lock);
-- hlist_for_each_entry_safe(orig_node, node, node_tmp,
-+ hlist_for_each_entry_safe(orig_node, node_tmp,
- head, hash_entry) {
- if (batadv_purge_orig_node(bat_priv, orig_node)) {
- if (orig_node->gw_flags)
- batadv_gw_node_delete(bat_priv,
- orig_node);
-- hlist_del_rcu(node);
-+ hlist_del_rcu(&orig_node->hash_entry);
- batadv_orig_node_free_ref(orig_node);
- continue;
- }
-@@ -408,7 +408,6 @@ int batadv_orig_seq_print_text(struct seq_file *seq, void *offset)
- struct net_device *net_dev = (struct net_device *)seq->private;
- struct batadv_priv *bat_priv = netdev_priv(net_dev);
- struct batadv_hashtable *hash = bat_priv->orig_hash;
-- struct hlist_node *node, *node_tmp;
- struct hlist_head *head;
- struct batadv_hard_iface *primary_if;
- struct batadv_orig_node *orig_node;
-@@ -434,7 +433,7 @@ int batadv_orig_seq_print_text(struct seq_file *seq, void *offset)
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(orig_node, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(orig_node, head, hash_entry) {
- neigh_node = batadv_orig_node_get_router(orig_node);
- if (!neigh_node)
- continue;
-@@ -453,7 +452,7 @@ int batadv_orig_seq_print_text(struct seq_file *seq, void *offset)
- neigh_node->addr,
- neigh_node->if_incoming->net_dev->name);
-
-- hlist_for_each_entry_rcu(neigh_node_tmp, node_tmp,
-+ hlist_for_each_entry_rcu(neigh_node_tmp,
- &orig_node->neigh_list, list) {
- seq_printf(seq, " %pM (%3i)",
- neigh_node_tmp->addr,
-@@ -511,7 +510,6 @@ int batadv_orig_hash_add_if(struct batadv_hard_iface *hard_iface,
- {
- struct batadv_priv *bat_priv = netdev_priv(hard_iface->soft_iface);
- struct batadv_hashtable *hash = bat_priv->orig_hash;
-- struct hlist_node *node;
- struct hlist_head *head;
- struct batadv_orig_node *orig_node;
- uint32_t i;
-@@ -524,7 +522,7 @@ int batadv_orig_hash_add_if(struct batadv_hard_iface *hard_iface,
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(orig_node, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(orig_node, head, hash_entry) {
- spin_lock_bh(&orig_node->ogm_cnt_lock);
- ret = batadv_orig_node_add_if(orig_node, max_if_num);
- spin_unlock_bh(&orig_node->ogm_cnt_lock);
-@@ -595,7 +593,6 @@ int batadv_orig_hash_del_if(struct batadv_hard_iface *hard_iface,
- {
- struct batadv_priv *bat_priv = netdev_priv(hard_iface->soft_iface);
- struct batadv_hashtable *hash = bat_priv->orig_hash;
-- struct hlist_node *node;
- struct hlist_head *head;
- struct batadv_hard_iface *hard_iface_tmp;
- struct batadv_orig_node *orig_node;
-@@ -609,7 +606,7 @@ int batadv_orig_hash_del_if(struct batadv_hard_iface *hard_iface,
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(orig_node, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(orig_node, head, hash_entry) {
- spin_lock_bh(&orig_node->ogm_cnt_lock);
- ret = batadv_orig_node_del_if(orig_node, max_if_num,
- hard_iface->if_num);
-diff --git a/originator.h b/originator.h
-index 286bf74..7df48fa 100644
---- a/originator.h
-+++ b/originator.h
-@@ -68,7 +68,6 @@ batadv_orig_hash_find(struct batadv_priv *bat_priv, const void *data)
- {
- struct batadv_hashtable *hash = bat_priv->orig_hash;
- struct hlist_head *head;
-- struct hlist_node *node;
- struct batadv_orig_node *orig_node, *orig_node_tmp = NULL;
- int index;
-
-@@ -79,7 +78,7 @@ batadv_orig_hash_find(struct batadv_priv *bat_priv, const void *data)
- head = &hash->table[index];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(orig_node, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(orig_node, head, hash_entry) {
- if (!batadv_compare_eth(orig_node, data))
- continue;
-
-diff --git a/routing.c b/routing.c
-index 60ba03f..5ee21ce 100644
---- a/routing.c
-+++ b/routing.c
-@@ -37,7 +37,6 @@ void batadv_slide_own_bcast_window(struct batadv_hard_iface *hard_iface)
- {
- struct batadv_priv *bat_priv = netdev_priv(hard_iface->soft_iface);
- struct batadv_hashtable *hash = bat_priv->orig_hash;
-- struct hlist_node *node;
- struct hlist_head *head;
- struct batadv_orig_node *orig_node;
- unsigned long *word;
-@@ -49,7 +48,7 @@ void batadv_slide_own_bcast_window(struct batadv_hard_iface *hard_iface)
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(orig_node, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(orig_node, head, hash_entry) {
- spin_lock_bh(&orig_node->ogm_cnt_lock);
- word_index = hard_iface->if_num * BATADV_NUM_WORDS;
- word = &(orig_node->bcast_own[word_index]);
-@@ -146,7 +145,6 @@ out:
- void batadv_bonding_candidate_add(struct batadv_orig_node *orig_node,
- struct batadv_neigh_node *neigh_node)
- {
-- struct hlist_node *node;
- struct batadv_neigh_node *tmp_neigh_node, *router = NULL;
- uint8_t interference_candidate = 0;
-
-@@ -169,7 +167,7 @@ void batadv_bonding_candidate_add(struct batadv_orig_node *orig_node,
- * interface. If we do, we won't select this candidate because of
- * possible interference.
- */
-- hlist_for_each_entry_rcu(tmp_neigh_node, node,
-+ hlist_for_each_entry_rcu(tmp_neigh_node,
- &orig_node->neigh_list, list) {
- if (tmp_neigh_node == neigh_node)
- continue;
-diff --git a/send.c b/send.c
-index 80ca65f..a67cffd 100644
---- a/send.c
-+++ b/send.c
-@@ -316,7 +316,7 @@ batadv_purge_outstanding_packets(struct batadv_priv *bat_priv,
- const struct batadv_hard_iface *hard_iface)
- {
- struct batadv_forw_packet *forw_packet;
-- struct hlist_node *tmp_node, *safe_tmp_node;
-+ struct hlist_node *safe_tmp_node;
- bool pending;
-
- if (hard_iface)
-@@ -329,7 +329,7 @@ batadv_purge_outstanding_packets(struct batadv_priv *bat_priv,
-
- /* free bcast list */
- spin_lock_bh(&bat_priv->forw_bcast_list_lock);
-- hlist_for_each_entry_safe(forw_packet, tmp_node, safe_tmp_node,
-+ hlist_for_each_entry_safe(forw_packet, safe_tmp_node,
- &bat_priv->forw_bcast_list, list) {
- /* if purge_outstanding_packets() was called with an argument
- * we delete only packets belonging to the given interface
-@@ -355,7 +355,7 @@ batadv_purge_outstanding_packets(struct batadv_priv *bat_priv,
-
- /* free batman packet list */
- spin_lock_bh(&bat_priv->forw_bat_list_lock);
-- hlist_for_each_entry_safe(forw_packet, tmp_node, safe_tmp_node,
-+ hlist_for_each_entry_safe(forw_packet, safe_tmp_node,
- &bat_priv->forw_bat_list, list) {
- /* if purge_outstanding_packets() was called with an argument
- * we delete only packets belonging to the given interface
-diff --git a/translation-table.c b/translation-table.c
-index d44672f..98a66a0 100644
---- a/translation-table.c
-+++ b/translation-table.c
-@@ -56,7 +56,6 @@ static struct batadv_tt_common_entry *
- batadv_tt_hash_find(struct batadv_hashtable *hash, const void *data)
- {
- struct hlist_head *head;
-- struct hlist_node *node;
- struct batadv_tt_common_entry *tt_common_entry;
- struct batadv_tt_common_entry *tt_common_entry_tmp = NULL;
- uint32_t index;
-@@ -68,7 +67,7 @@ batadv_tt_hash_find(struct batadv_hashtable *hash, const void *data)
- head = &hash->table[index];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(tt_common_entry, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(tt_common_entry, head, hash_entry) {
- if (!batadv_compare_eth(tt_common_entry, data))
- continue;
-
-@@ -257,7 +256,6 @@ void batadv_tt_local_add(struct net_device *soft_iface, const uint8_t *addr,
- struct batadv_tt_local_entry *tt_local;
- struct batadv_tt_global_entry *tt_global;
- struct hlist_head *head;
-- struct hlist_node *node;
- struct batadv_tt_orig_list_entry *orig_entry;
- int hash_added;
- bool roamed_back = false;
-@@ -339,7 +337,7 @@ check_roaming:
- /* These node are probably going to update their tt table */
- head = &tt_global->orig_list;
- rcu_read_lock();
-- hlist_for_each_entry_rcu(orig_entry, node, head, list) {
-+ hlist_for_each_entry_rcu(orig_entry, head, list) {
- batadv_send_roam_adv(bat_priv, tt_global->common.addr,
- orig_entry->orig_node);
- }
-@@ -470,7 +468,6 @@ int batadv_tt_local_seq_print_text(struct seq_file *seq, void *offset)
- struct batadv_tt_common_entry *tt_common_entry;
- struct batadv_tt_local_entry *tt_local;
- struct batadv_hard_iface *primary_if;
-- struct hlist_node *node;
- struct hlist_head *head;
- uint32_t i;
- int last_seen_secs;
-@@ -494,7 +491,7 @@ int batadv_tt_local_seq_print_text(struct seq_file *seq, void *offset)
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(tt_common_entry, node,
-+ hlist_for_each_entry_rcu(tt_common_entry,
- head, hash_entry) {
- tt_local = container_of(tt_common_entry,
- struct batadv_tt_local_entry,
-@@ -605,9 +602,9 @@ static void batadv_tt_local_purge_list(struct batadv_priv *bat_priv,
- {
- struct batadv_tt_local_entry *tt_local_entry;
- struct batadv_tt_common_entry *tt_common_entry;
-- struct hlist_node *node, *node_tmp;
-+ struct hlist_node *node_tmp;
-
-- hlist_for_each_entry_safe(tt_common_entry, node, node_tmp, head,
-+ hlist_for_each_entry_safe(tt_common_entry, node_tmp, head,
- hash_entry) {
- tt_local_entry = container_of(tt_common_entry,
- struct batadv_tt_local_entry,
-@@ -651,7 +648,7 @@ static void batadv_tt_local_table_free(struct batadv_priv *bat_priv)
- spinlock_t *list_lock; /* protects write access to the hash lists */
- struct batadv_tt_common_entry *tt_common_entry;
- struct batadv_tt_local_entry *tt_local;
-- struct hlist_node *node, *node_tmp;
-+ struct hlist_node *node_tmp;
- struct hlist_head *head;
- uint32_t i;
-
-@@ -665,9 +662,9 @@ static void batadv_tt_local_table_free(struct batadv_priv *bat_priv)
- list_lock = &hash->list_locks[i];
-
- spin_lock_bh(list_lock);
-- hlist_for_each_entry_safe(tt_common_entry, node, node_tmp,
-+ hlist_for_each_entry_safe(tt_common_entry, node_tmp,
- head, hash_entry) {
-- hlist_del_rcu(node);
-+ hlist_del_rcu(&tt_common_entry->hash_entry);
- tt_local = container_of(tt_common_entry,
- struct batadv_tt_local_entry,
- common);
-@@ -724,11 +721,10 @@ batadv_tt_global_orig_entry_find(const struct batadv_tt_global_entry *entry,
- {
- struct batadv_tt_orig_list_entry *tmp_orig_entry, *orig_entry = NULL;
- const struct hlist_head *head;
-- struct hlist_node *node;
-
- rcu_read_lock();
- head = &entry->orig_list;
-- hlist_for_each_entry_rcu(tmp_orig_entry, node, head, list) {
-+ hlist_for_each_entry_rcu(tmp_orig_entry, head, list) {
- if (tmp_orig_entry->orig_node != orig_node)
- continue;
- if (!atomic_inc_not_zero(&tmp_orig_entry->refcount))
-@@ -940,12 +936,11 @@ batadv_transtable_best_orig(struct batadv_tt_global_entry *tt_global_entry)
- {
- struct batadv_neigh_node *router = NULL;
- struct hlist_head *head;
-- struct hlist_node *node;
- struct batadv_tt_orig_list_entry *orig_entry, *best_entry = NULL;
- int best_tq = 0;
-
- head = &tt_global_entry->orig_list;
-- hlist_for_each_entry_rcu(orig_entry, node, head, list) {
-+ hlist_for_each_entry_rcu(orig_entry, head, list) {
- router = batadv_orig_node_get_router(orig_entry->orig_node);
- if (!router)
- continue;
-@@ -973,7 +968,6 @@ batadv_tt_global_print_entry(struct batadv_tt_global_entry *tt_global_entry,
- struct seq_file *seq)
- {
- struct hlist_head *head;
-- struct hlist_node *node;
- struct batadv_tt_orig_list_entry *orig_entry, *best_entry;
- struct batadv_tt_common_entry *tt_common_entry;
- uint16_t flags;
-@@ -997,7 +991,7 @@ batadv_tt_global_print_entry(struct batadv_tt_global_entry *tt_global_entry,
-
- head = &tt_global_entry->orig_list;
-
-- hlist_for_each_entry_rcu(orig_entry, node, head, list) {
-+ hlist_for_each_entry_rcu(orig_entry, head, list) {
- if (best_entry == orig_entry)
- continue;
-
-@@ -1020,7 +1014,6 @@ int batadv_tt_global_seq_print_text(struct seq_file *seq, void *offset)
- struct batadv_tt_common_entry *tt_common_entry;
- struct batadv_tt_global_entry *tt_global;
- struct batadv_hard_iface *primary_if;
-- struct hlist_node *node;
- struct hlist_head *head;
- uint32_t i;
-
-@@ -1039,7 +1032,7 @@ int batadv_tt_global_seq_print_text(struct seq_file *seq, void *offset)
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(tt_common_entry, node,
-+ hlist_for_each_entry_rcu(tt_common_entry,
- head, hash_entry) {
- tt_global = container_of(tt_common_entry,
- struct batadv_tt_global_entry,
-@@ -1059,13 +1052,13 @@ static void
- batadv_tt_global_del_orig_list(struct batadv_tt_global_entry *tt_global_entry)
- {
- struct hlist_head *head;
-- struct hlist_node *node, *safe;
-+ struct hlist_node *safe;
- struct batadv_tt_orig_list_entry *orig_entry;
-
- spin_lock_bh(&tt_global_entry->list_lock);
- head = &tt_global_entry->orig_list;
-- hlist_for_each_entry_safe(orig_entry, node, safe, head, list) {
-- hlist_del_rcu(node);
-+ hlist_for_each_entry_safe(orig_entry, safe, head, list) {
-+ hlist_del_rcu(&orig_entry->list);
- batadv_tt_orig_list_entry_free_ref(orig_entry);
- }
- spin_unlock_bh(&tt_global_entry->list_lock);
-@@ -1078,18 +1071,18 @@ batadv_tt_global_del_orig_entry(struct batadv_priv *bat_priv,
- const char *message)
- {
- struct hlist_head *head;
-- struct hlist_node *node, *safe;
-+ struct hlist_node *safe;
- struct batadv_tt_orig_list_entry *orig_entry;
-
- spin_lock_bh(&tt_global_entry->list_lock);
- head = &tt_global_entry->orig_list;
-- hlist_for_each_entry_safe(orig_entry, node, safe, head, list) {
-+ hlist_for_each_entry_safe(orig_entry, safe, head, list) {
- if (orig_entry->orig_node == orig_node) {
- batadv_dbg(BATADV_DBG_TT, bat_priv,
- "Deleting %pM from global tt entry %pM: %s\n",
- orig_node->orig,
- tt_global_entry->common.addr, message);
-- hlist_del_rcu(node);
-+ hlist_del_rcu(&orig_entry->list);
- batadv_tt_orig_list_entry_free_ref(orig_entry);
- }
- }
-@@ -1108,7 +1101,6 @@ batadv_tt_global_del_roaming(struct batadv_priv *bat_priv,
- {
- bool last_entry = true;
- struct hlist_head *head;
-- struct hlist_node *node;
- struct batadv_tt_orig_list_entry *orig_entry;
-
- /* no local entry exists, case 1:
-@@ -1117,7 +1109,7 @@ batadv_tt_global_del_roaming(struct batadv_priv *bat_priv,
-
- rcu_read_lock();
- head = &tt_global_entry->orig_list;
-- hlist_for_each_entry_rcu(orig_entry, node, head, list) {
-+ hlist_for_each_entry_rcu(orig_entry, head, list) {
- if (orig_entry->orig_node != orig_node) {
- last_entry = false;
- break;
-@@ -1202,7 +1194,7 @@ void batadv_tt_global_del_orig(struct batadv_priv *bat_priv,
- struct batadv_tt_common_entry *tt_common_entry;
- uint32_t i;
- struct batadv_hashtable *hash = bat_priv->tt.global_hash;
-- struct hlist_node *node, *safe;
-+ struct hlist_node *safe;
- struct hlist_head *head;
- spinlock_t *list_lock; /* protects write access to the hash lists */
-
-@@ -1214,7 +1206,7 @@ void batadv_tt_global_del_orig(struct batadv_priv *bat_priv,
- list_lock = &hash->list_locks[i];
-
- spin_lock_bh(list_lock);
-- hlist_for_each_entry_safe(tt_common_entry, node, safe,
-+ hlist_for_each_entry_safe(tt_common_entry, safe,
- head, hash_entry) {
- tt_global = container_of(tt_common_entry,
- struct batadv_tt_global_entry,
-@@ -1227,7 +1219,7 @@ void batadv_tt_global_del_orig(struct batadv_priv *bat_priv,
- batadv_dbg(BATADV_DBG_TT, bat_priv,
- "Deleting global tt entry %pM: %s\n",
- tt_global->common.addr, message);
-- hlist_del_rcu(node);
-+ hlist_del_rcu(&tt_common_entry->hash_entry);
- batadv_tt_global_entry_free_ref(tt_global);
- }
- }
-@@ -1262,7 +1254,7 @@ static void batadv_tt_global_purge(struct batadv_priv *bat_priv)
- {
- struct batadv_hashtable *hash = bat_priv->tt.global_hash;
- struct hlist_head *head;
-- struct hlist_node *node, *node_tmp;
-+ struct hlist_node *node_tmp;
- spinlock_t *list_lock; /* protects write access to the hash lists */
- uint32_t i;
- char *msg = NULL;
-@@ -1274,7 +1266,7 @@ static void batadv_tt_global_purge(struct batadv_priv *bat_priv)
- list_lock = &hash->list_locks[i];
-
- spin_lock_bh(list_lock);
-- hlist_for_each_entry_safe(tt_common, node, node_tmp, head,
-+ hlist_for_each_entry_safe(tt_common, node_tmp, head,
- hash_entry) {
- tt_global = container_of(tt_common,
- struct batadv_tt_global_entry,
-@@ -1287,7 +1279,7 @@ static void batadv_tt_global_purge(struct batadv_priv *bat_priv)
- "Deleting global tt entry (%pM): %s\n",
- tt_global->common.addr, msg);
-
-- hlist_del_rcu(node);
-+ hlist_del_rcu(&tt_common->hash_entry);
-
- batadv_tt_global_entry_free_ref(tt_global);
- }
-@@ -1301,7 +1293,7 @@ static void batadv_tt_global_table_free(struct batadv_priv *bat_priv)
- spinlock_t *list_lock; /* protects write access to the hash lists */
- struct batadv_tt_common_entry *tt_common_entry;
- struct batadv_tt_global_entry *tt_global;
-- struct hlist_node *node, *node_tmp;
-+ struct hlist_node *node_tmp;
- struct hlist_head *head;
- uint32_t i;
-
-@@ -1315,9 +1307,9 @@ static void batadv_tt_global_table_free(struct batadv_priv *bat_priv)
- list_lock = &hash->list_locks[i];
-
- spin_lock_bh(list_lock);
-- hlist_for_each_entry_safe(tt_common_entry, node, node_tmp,
-+ hlist_for_each_entry_safe(tt_common_entry, node_tmp,
- head, hash_entry) {
-- hlist_del_rcu(node);
-+ hlist_del_rcu(&tt_common_entry->hash_entry);
- tt_global = container_of(tt_common_entry,
- struct batadv_tt_global_entry,
- common);
-@@ -1397,7 +1389,6 @@ static uint16_t batadv_tt_global_crc(struct batadv_priv *bat_priv,
- struct batadv_hashtable *hash = bat_priv->tt.global_hash;
- struct batadv_tt_common_entry *tt_common;
- struct batadv_tt_global_entry *tt_global;
-- struct hlist_node *node;
- struct hlist_head *head;
- uint32_t i;
- int j;
-@@ -1406,7 +1397,7 @@ static uint16_t batadv_tt_global_crc(struct batadv_priv *bat_priv,
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(tt_common, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(tt_common, head, hash_entry) {
- tt_global = container_of(tt_common,
- struct batadv_tt_global_entry,
- common);
-@@ -1449,7 +1440,6 @@ static uint16_t batadv_tt_local_crc(struct batadv_priv *bat_priv)
- uint16_t total = 0, total_one;
- struct batadv_hashtable *hash = bat_priv->tt.local_hash;
- struct batadv_tt_common_entry *tt_common;
-- struct hlist_node *node;
- struct hlist_head *head;
- uint32_t i;
- int j;
-@@ -1458,7 +1448,7 @@ static uint16_t batadv_tt_local_crc(struct batadv_priv *bat_priv)
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(tt_common, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(tt_common, head, hash_entry) {
- /* not yet committed clients have not to be taken into
- * account while computing the CRC
- */
-@@ -1597,7 +1587,6 @@ batadv_tt_response_fill_table(uint16_t tt_len, uint8_t ttvn,
- struct batadv_tt_common_entry *tt_common_entry;
- struct batadv_tt_query_packet *tt_response;
- struct batadv_tt_change *tt_change;
-- struct hlist_node *node;
- struct hlist_head *head;
- struct sk_buff *skb = NULL;
- uint16_t tt_tot, tt_count;
-@@ -1627,7 +1616,7 @@ batadv_tt_response_fill_table(uint16_t tt_len, uint8_t ttvn,
- for (i = 0; i < hash->size; i++) {
- head = &hash->table[i];
-
-- hlist_for_each_entry_rcu(tt_common_entry, node,
-+ hlist_for_each_entry_rcu(tt_common_entry,
- head, hash_entry) {
- if (tt_count == tt_tot)
- break;
-@@ -2307,7 +2296,6 @@ static uint16_t batadv_tt_set_flags(struct batadv_hashtable *hash,
- uint32_t i;
- uint16_t changed_num = 0;
- struct hlist_head *head;
-- struct hlist_node *node;
- struct batadv_tt_common_entry *tt_common_entry;
-
- if (!hash)
-@@ -2317,7 +2305,7 @@ static uint16_t batadv_tt_set_flags(struct batadv_hashtable *hash,
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(tt_common_entry, node,
-+ hlist_for_each_entry_rcu(tt_common_entry,
- head, hash_entry) {
- if (enable) {
- if ((tt_common_entry->flags & flags) == flags)
-@@ -2342,7 +2330,7 @@ static void batadv_tt_local_purge_pending_clients(struct batadv_priv *bat_priv)
- struct batadv_hashtable *hash = bat_priv->tt.local_hash;
- struct batadv_tt_common_entry *tt_common;
- struct batadv_tt_local_entry *tt_local;
-- struct hlist_node *node, *node_tmp;
-+ struct hlist_node *node_tmp;
- struct hlist_head *head;
- spinlock_t *list_lock; /* protects write access to the hash lists */
- uint32_t i;
-@@ -2355,7 +2343,7 @@ static void batadv_tt_local_purge_pending_clients(struct batadv_priv *bat_priv)
- list_lock = &hash->list_locks[i];
-
- spin_lock_bh(list_lock);
-- hlist_for_each_entry_safe(tt_common, node, node_tmp, head,
-+ hlist_for_each_entry_safe(tt_common, node_tmp, head,
- hash_entry) {
- if (!(tt_common->flags & BATADV_TT_CLIENT_PENDING))
- continue;
-@@ -2365,7 +2353,7 @@ static void batadv_tt_local_purge_pending_clients(struct batadv_priv *bat_priv)
- tt_common->addr);
-
- atomic_dec(&bat_priv->tt.local_entry_num);
-- hlist_del_rcu(node);
-+ hlist_del_rcu(&tt_common->hash_entry);
- tt_local = container_of(tt_common,
- struct batadv_tt_local_entry,
- common);
-diff --git a/vis.c b/vis.c
-index 22d2785..c053244 100644
---- a/vis.c
-+++ b/vis.c
-@@ -97,7 +97,6 @@ batadv_vis_hash_find(struct batadv_priv *bat_priv, const void *data)
- {
- struct batadv_hashtable *hash = bat_priv->vis.hash;
- struct hlist_head *head;
-- struct hlist_node *node;
- struct batadv_vis_info *vis_info, *vis_info_tmp = NULL;
- uint32_t index;
-
-@@ -108,8 +107,8 @@ batadv_vis_hash_find(struct batadv_priv *bat_priv, const void *data)
- head = &hash->table[index];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(vis_info, node, head, hash_entry) {
-- if (!batadv_vis_info_cmp(node, data))
-+ hlist_for_each_entry_rcu(vis_info, head, hash_entry) {
-+ if (!batadv_vis_info_cmp(&vis_info->hash_entry, data))
- continue;
-
- vis_info_tmp = vis_info;
-@@ -128,9 +127,8 @@ static void batadv_vis_data_insert_interface(const uint8_t *interface,
- bool primary)
- {
- struct batadv_vis_if_list_entry *entry;
-- struct hlist_node *pos;
-
-- hlist_for_each_entry(entry, pos, if_list, list) {
-+ hlist_for_each_entry(entry, if_list, list) {
- if (batadv_compare_eth(entry->addr, interface))
- return;
- }
-@@ -148,9 +146,8 @@ static void batadv_vis_data_read_prim_sec(struct seq_file *seq,
- const struct hlist_head *if_list)
- {
- struct batadv_vis_if_list_entry *entry;
-- struct hlist_node *pos;
-
-- hlist_for_each_entry(entry, pos, if_list, list) {
-+ hlist_for_each_entry(entry, if_list, list) {
- if (entry->primary)
- seq_printf(seq, "PRIMARY, ");
- else
-@@ -198,9 +195,8 @@ static void batadv_vis_data_read_entries(struct seq_file *seq,
- {
- int i;
- struct batadv_vis_if_list_entry *entry;
-- struct hlist_node *pos;
-
-- hlist_for_each_entry(entry, pos, list, list) {
-+ hlist_for_each_entry(entry, list, list) {
- seq_printf(seq, "%pM,", entry->addr);
-
- for (i = 0; i < packet->entries; i++)
-@@ -218,17 +214,16 @@ static void batadv_vis_data_read_entries(struct seq_file *seq,
- static void batadv_vis_seq_print_text_bucket(struct seq_file *seq,
- const struct hlist_head *head)
- {
-- struct hlist_node *node;
- struct batadv_vis_info *info;
- struct batadv_vis_packet *packet;
- uint8_t *entries_pos;
- struct batadv_vis_info_entry *entries;
- struct batadv_vis_if_list_entry *entry;
-- struct hlist_node *pos, *n;
-+ struct hlist_node *n;
-
- HLIST_HEAD(vis_if_list);
-
-- hlist_for_each_entry_rcu(info, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(info, head, hash_entry) {
- packet = (struct batadv_vis_packet *)info->skb_packet->data;
- entries_pos = (uint8_t *)packet + sizeof(*packet);
- entries = (struct batadv_vis_info_entry *)entries_pos;
-@@ -240,7 +235,7 @@ static void batadv_vis_seq_print_text_bucket(struct seq_file *seq,
- batadv_vis_data_read_entries(seq, &vis_if_list, packet,
- entries);
-
-- hlist_for_each_entry_safe(entry, pos, n, &vis_if_list, list) {
-+ hlist_for_each_entry_safe(entry, n, &vis_if_list, list) {
- hlist_del(&entry->list);
- kfree(entry);
- }
-@@ -519,7 +514,6 @@ static int batadv_find_best_vis_server(struct batadv_priv *bat_priv,
- {
- struct batadv_hashtable *hash = bat_priv->orig_hash;
- struct batadv_neigh_node *router;
-- struct hlist_node *node;
- struct hlist_head *head;
- struct batadv_orig_node *orig_node;
- struct batadv_vis_packet *packet;
-@@ -532,7 +526,7 @@ static int batadv_find_best_vis_server(struct batadv_priv *bat_priv,
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(orig_node, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(orig_node, head, hash_entry) {
- router = batadv_orig_node_get_router(orig_node);
- if (!router)
- continue;
-@@ -571,7 +565,6 @@ static bool batadv_vis_packet_full(const struct batadv_vis_info *info)
- static int batadv_generate_vis_packet(struct batadv_priv *bat_priv)
- {
- struct batadv_hashtable *hash = bat_priv->orig_hash;
-- struct hlist_node *node;
- struct hlist_head *head;
- struct batadv_orig_node *orig_node;
- struct batadv_neigh_node *router;
-@@ -605,7 +598,7 @@ static int batadv_generate_vis_packet(struct batadv_priv *bat_priv)
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(orig_node, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(orig_node, head, hash_entry) {
- router = batadv_orig_node_get_router(orig_node);
- if (!router)
- continue;
-@@ -644,7 +637,7 @@ next:
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(tt_common_entry, node, head,
-+ hlist_for_each_entry_rcu(tt_common_entry, head,
- hash_entry) {
- packet_pos = skb_put(info->skb_packet, sizeof(*entry));
- entry = (struct batadv_vis_info_entry *)packet_pos;
-@@ -673,14 +666,14 @@ static void batadv_purge_vis_packets(struct batadv_priv *bat_priv)
- {
- uint32_t i;
- struct batadv_hashtable *hash = bat_priv->vis.hash;
-- struct hlist_node *node, *node_tmp;
-+ struct hlist_node *node_tmp;
- struct hlist_head *head;
- struct batadv_vis_info *info;
-
- for (i = 0; i < hash->size; i++) {
- head = &hash->table[i];
-
-- hlist_for_each_entry_safe(info, node, node_tmp,
-+ hlist_for_each_entry_safe(info, node_tmp,
- head, hash_entry) {
- /* never purge own data. */
- if (info == bat_priv->vis.my_info)
-@@ -688,7 +681,7 @@ static void batadv_purge_vis_packets(struct batadv_priv *bat_priv)
-
- if (batadv_has_timed_out(info->first_seen,
- BATADV_VIS_TIMEOUT)) {
-- hlist_del(node);
-+ hlist_del(&info->hash_entry);
- batadv_send_list_del(info);
- kref_put(&info->refcount, batadv_free_info);
- }
-@@ -700,7 +693,6 @@ static void batadv_broadcast_vis_packet(struct batadv_priv *bat_priv,
- struct batadv_vis_info *info)
- {
- struct batadv_hashtable *hash = bat_priv->orig_hash;
-- struct hlist_node *node;
- struct hlist_head *head;
- struct batadv_orig_node *orig_node;
- struct batadv_vis_packet *packet;
-@@ -715,7 +707,7 @@ static void batadv_broadcast_vis_packet(struct batadv_priv *bat_priv,
- head = &hash->table[i];
-
- rcu_read_lock();
-- hlist_for_each_entry_rcu(orig_node, node, head, hash_entry) {
-+ hlist_for_each_entry_rcu(orig_node, head, hash_entry) {
- /* if it's a vis server and reachable, send it. */
- if (!(orig_node->flags & BATADV_VIS_SERVER))
- continue;
---
-1.7.10.4
-
+++ /dev/null
-#!/bin/sh /etc/rc.common
-# Copyright (C) 2008-2012 OpenWrt.org
-
-START=65
-
-SERVICE_DAEMONIZE=1
-SERVICE_WRITE_PID=1
-
-CONF=/var/etc/olsrd.conf
-PID=/var/run/olsrd.pid
-PID6=/var/run/olsrd.ipv6.pid
-
-OLSRD_OLSRD_SCHEMA='ignore:internal config_file:internal DebugLevel=0 AllowNoInt=yes'
-OLSRD_IPCCONNECT_SCHEMA='ignore:internal Host:list Net:list2'
-OLSRD_LOADPLUGIN_SCHEMA='ignore:internal library:internal Host4:list Net4:list2 Host:list Net:list2 Host6:list Net6:list2 Ping:list redistribute:list NonOlsrIf:list name:list lat lon latlon_infile HNA:list2 hosts:list2'
-OLSRD_INTERFACE_SCHEMA='ignore:internal interface:internal AutoDetectChanges:bool'
-OLSRD_INTERFACE_DEFAULTS_SCHEMA='AutoDetectChanges:bool'
-
-T=' '
-N='
-'
-
-log()
-{
- logger -t olsrd -p daemon.info -s "$1"
-}
-
-validate_varname() {
- local varname="$1"
- [ -z "$varname" -o "$varname" != "${varname%%[!A-Za-z0-9_]*}" ] && return 1
- return 0
-}
-
-validate_olsrd_option() {
- local str="$1"
- [ -z "$str" -o "$str" != "${str%%[! 0-9A-Za-z./|:_-]*}" ] && return 1
- return 0
-}
-
-system_config() {
- local cfg="$1"
- local cfgt
- local hostname
- local latlon
-
- config_get cfgt "$cfg" TYPE
-
- if [ "$cfgt" = "system" ]; then
- config_get hostname "$cfg" hostname
- hostname="${hostname:-OpenWrt}"
- SYSTEM_HOSTNAME="$hostname"
- fi
-
- if [ -z "$SYSTEM_LAT" -o -z "$SYSTEM_LON" ]; then
- config_get latlon "$cfg" latlon
- IFS=" ${T}${N},"
- set -- $latlon
- unset IFS
- SYSTEM_LAT="$1"
- SYSTEM_LON="$2"
- fi
-
- if [ -z "$SYSTEM_LAT" -o -z "$SYSTEM_LON" ]; then
- config_get latlon "$cfg" latitude
- SYSTEM_LAT="$latlon"
- config_get latlon "$cfg" longitude
- SYSTEM_LON="$latlon"
- fi
-}
-
-olsrd_find_config_file() {
- local cfg="$1"
- validate_varname "$cfg" || return 0
-
- config_get_bool ignore "$cfg" ignore 0
- [ "$ignore" -ne 0 ] && return 0
- config_get OLSRD_CONFIG_FILE "$cfg" config_file
-
- return 0
-}
-
-warning_invalid_value() {
- local funcname="warning_invalid_value"
- local package="$1"
- validate_varname "$package" || package=
- local config="$2"
- validate_varname "$config" || config=
- local option="$3"
- validate_varname "$option" || option=
-
- if [ -n "$package" -a -n "$config" ]; then
- log "$funcname() in option '$package.$config${option:+.}$option', skipped"
- else
- log "$funcname() skipped"
- fi
-
- return 0
-}
-
-olsrd_write_option() {
- local param="$1"
- local cfg="$2"
- validate_varname "$cfg" || return 1
- local option="$3"
- validate_varname "$option" || return 1
- local value="$4"
- local option_type="$5"
-
- if [ "$option_type" = bool ]; then
- case "$value" in
- 1|on|true|enabled|yes) value=yes;;
- 0|off|false|disabled|no) value=no;;
- *) warning_invalid_value olsrd "$cfg" "$option"; return 1;;
- esac
- fi
-
- if ! validate_olsrd_option "$value"; then
- warning_invalid_value olsrd "$cfg" "$option"
- return 1
- fi
-
- if [ "$value" != "${value%%[G-Zg-z_-]*}" ]; then
- if [ "$option" != "Ip6AddrType" -a "$option" != "LinkQualityMult" -a "$value" != "yes" -a "$value" != "no" ]; then
- value="\"$value\""
- fi
- fi
-
- echo -n "${N}$param$option $value"
-
- return 0
-}
-
-olsrd_write_plparam() {
- local funcname="olsrd_write_plparam"
- local param="$1"
- local cfg="$2"
- validate_varname "$cfg" || return 1
- local option="$3"
- validate_varname "$option" || return 1
- local value="$4"
- local option_type="$5"
- local _option
-
- if [ "$option_type" = bool ]; then
- case "$value" in
- 1|on|true|enabled|yes) value=yes;;
- 0|off|false|disabled|no) value=no;;
- *) warning_invalid_value olsrd "$cfg" "$option"; return 1;;
- esac
- fi
-
- if ! validate_olsrd_option "$value"; then
- warning_invalid_value olsrd "$cfg" "$option"
- return 1
- fi
-
- IFS='-_'
- set -- $option
- option="$*"
- unset IFS
- _option="$option"
- if [ "$option" = 'hosts' ]; then
- set -- $value
- option="$1"
- shift
- value="$*"
- fi
- if [ "$option" = 'NonOlsrIf' ]; then
- if validate_varname "$value"; then
- if network_get_device ifname "$value"; then
- log "$funcname() Info: mdns Interface '$value' ifname '$ifname' found"
- else
- log "$funcname() Warning: mdns Interface '$value' not found, skipped"
- fi
- else
- warning_invalid_value olsrd "$cfg" "NonOlsrIf"
- fi
- [ -z "$ifname" ] || value=$ifname
- fi
-
- echo -n "${N}${param}PlParam \"$option\" \"$value\""
-
- return 0
-}
-
-config_update_schema() {
- unset IFS
- local schema_varname="$1"
- validate_varname "$schema_varname" || return 1
- local command="$2"
- validate_varname "$command" || return 1
- local option="$3"
- validate_varname "$option" || return 1
- local value="$4"
- local schema
- local cur_option
-
- case "$varname" in
- *_LENGTH) return 0;;
- *_ITEM*) return 0;;
- esac
-
- eval "export -n -- \"schema=\${$schema_varname}\""
-
- for cur_option in $schema; do
- [ "${cur_option%%[:=]*}" = "$option" ] && return 0
- done
-
- if [ "$command" = list ]; then
- set -- $value
- if [ "$#" -ge "3" ]; then
- schema_entry="$option:list3"
- elif [ "$#" -ge "2" ]; then
- schema_entry="$option:list2"
- else
- schema_entry="$option:list"
- fi
- else
- schema_entry="$option"
- fi
-
- append "$schema_varname" "$schema_entry"
-
- return 0
-}
-
-config_write_options() {
- local funcname="config_write_options"
- unset IFS
- local schema="$1"
- local cfg="$2"
- validate_varname "$cfg" || return 1
- local write_func="$3"
- [ -z "$write_func" ] && output_func=echo
- local write_param="$4"
-
- local schema_entry
- local option
- local option_length
- local option_type
- local default
- local value
- local list_size
- local list_item
- local list_value
- local i
- local position
- local speed
- local list_speed_vars="HelloInterval HelloValidityTime TcInterval TcValidityTime MidInterval MidValidityTime HnaInterval HnaValidityTime"
-
- get_value_for_entry()
- {
- local schema_entry="$1"
-
- default="${schema_entry#*[=]}"
- [ "$default" = "$schema_entry" ] && default=
- option="${schema_entry%%[=]*}"
-
- IFS=':'; set -- $option; unset IFS
- option="$1"
- option_type="$2"
-
- validate_varname "$option" || return 1
- [ -z "$option_type" ] || validate_varname "$option_type" || return 1
- [ "$option_type" = internal ] && return 1
-
- config_get value "$cfg" "$option"
- [ "$option" = "speed" ] && return 1
-
- return 0
- }
-
- already_in_schema()
- {
- case " $schema " in
- *" $1 "*)
- return 0
- ;;
- *)
- return 1
- ;;
- esac
- }
-
- already_in_schema "speed" && {
- get_value_for_entry "speed"
-
- if [ 2>/dev/null $value -gt 0 -a $value -le 20 ]; then
- speed="$value"
- else
- log "$funcname() Warning: invalid speed-value: '$value' - allowed integers: 1...20, fallback to 6"
- speed=6
- fi
-
- for schema_entry in $list_speed_vars; do {
- already_in_schema "$schema_entry" || schema="$schema $schema_entry"
- } done
- }
-
- for schema_entry in $schema; do
- if [ -n "$speed" ]; then # like sven-ola freifunk firmware fff-1.7.4
- case "$schema_entry" in
- HelloInterval)
- value="$(( $speed / 2 + 1 )).0"
- ;;
- HelloValidityTime)
- value="$(( $speed * 25 )).0"
- ;;
- TcInterval) # todo: not fisheye? -> $(( $speed * 2 ))
- value=$(( $speed / 2 ))
- [ $value -eq 0 ] && value=1
- value="$value.0"
- ;;
- TcValidityTime)
- value="$(( $speed * 100 )).0"
- ;;
- MidInterval)
- value="$(( $speed * 5 )).0"
- ;;
- MidValidityTime)
- value="$(( $speed * 100 )).0"
- ;;
- HnaInterval)
- value="$(( $speed * 2 )).0"
- ;;
- HnaValidityTime)
- value="$(( $speed * 25 )).0"
- ;;
- *)
- get_value_for_entry "$schema_entry" || continue
- ;;
- esac
-
- is_speed_var()
- {
- case " $list_speed_vars " in
- *" $1 "*)
- return 0
- ;;
- *)
- return 1
- ;;
- esac
- }
-
- is_speed_var "$schema_entry" && option="$schema_entry"
- else
- get_value_for_entry "$schema_entry" || continue
- fi
-
- if [ -z "$value" ]; then
- IFS='+'
- set -- $default
- unset IFS
- value=$*
- elif [ "$value" = '-' -a -n "$default" ]; then
- continue
- fi
-
- [ -z "$value" ] && continue
-
- case "$option_type" in
- list) list_size=1;;
- list2) list_size=2;;
- list3) list_size=3;;
- *) list_size=0;;
- esac
-
- if [ "$list_size" -gt 0 ]; then
- config_get option_length "$cfg" "${option}_LENGTH"
- if [ -n "$option_length" ]; then
- i=1
- while [ "$i" -le "$option_length" ]; do
- config_get list_value "$cfg" "${option}_ITEM$i"
- "$write_func" "$write_param" "$cfg" "$option" "$list_value" "$option_type" || break
- i=$((i + 1))
- done
- else
- list_value=
- i=0
- for list_item in $value; do
- append "list_value" "$list_item"
- i=$((i + 1))
- position=$((i % list_size))
- if [ "$position" -eq 0 ]; then
- "$write_func" "$write_param" "$cfg" "$option" "$list_value" "$option_type" || break
- list_value=
- fi
- done
- [ "$position" -ne 0 ] && "$write_func" "$write_param" "$cfg" "$option" "$list_value" "$option_type"
- fi
- else
- "$write_func" "$write_param" "$cfg" "$option" "$value" "$option_type"
- fi
- done
-
- return 0
-}
-
-olsrd_write_olsrd() {
- local cfg="$1"
- validate_varname "$cfg" || return 0
- local ignore
-
- config_get_bool ignore "$cfg" ignore 0
- [ "$ignore" -ne 0 ] && return 0
-
- [ "$OLSRD_COUNT" -gt 0 ] && return 0
-
- config_get ipversion "$cfg" IpVersion
- if [ "$ipversion" = "6and4" ]; then
- OLSRD_IPVERSION_6AND4=1
- config_set "$cfg" IpVersion '6'
- fi
- config_get smartgateway "$cfg" SmartGateway
- config_get smartgatewayuplink "$cfg" SmartGatewayUplink
-
- config_write_options "$OLSRD_OLSRD_SCHEMA" "$cfg" olsrd_write_option
- echo
- OLSRD_COUNT=$((OLSRD_COUNT + 1))
- return 0
-}
-
-olsrd_write_ipcconnect() {
- local cfg="$1"
- validate_varname "$cfg" || return 0
- local ignore
-
- config_get_bool ignore "$cfg" ignore 0
- [ "$ignore" -ne 0 ] && return 0
-
- [ "$IPCCONNECT_COUNT" -gt 0 ] && return 0
-
- echo -n "${N}IpcConnect${N}{"
- config_write_options "$OLSRD_IPCCONNECT_SCHEMA" "$cfg" olsrd_write_option "${T}"
- echo "${N}}"
- IPCCONNECT_COUNT=$((IPCCONNECT_COUNT + 1))
-
- return 0
-}
-
-olsrd_write_hna4() {
- local cfg="$1"
- validate_varname "$cfg" || return 0
- local ignore
-
- config_get_bool ignore "$cfg" ignore 0
- [ "$ignore" -ne 0 ] && return 0
-
- config_get netaddr "$cfg" netaddr
- if ! validate_olsrd_option "$netaddr"; then
- warning_invalid_value olsrd "$cfg" "netaddr"
- return 0
- fi
-
- config_get netmask "$cfg" netmask
- if ! validate_olsrd_option "$netmask"; then
- warning_invalid_value olsrd "$cfg" "netmask"
- return 0
- fi
-
- [ "$HNA4_COUNT" -le 0 ] && echo -n "${N}Hna4${N}{"
- echo -n "${N}${T}${T}$netaddr $netmask"
- HNA4_COUNT=$((HNA4_COUNT + 1))
-
- return 0
-}
-
-olsrd_write_hna6() {
- local cfg="$1"
- validate_varname "$cfg" || return 0
- local ignore
-
- config_get_bool ignore "$cfg" ignore 0
- [ "$ignore" -ne 0 ] && return 0
-
- config_get netaddr "$cfg" netaddr
- if ! validate_olsrd_option "$netaddr"; then
- warning_invalid_value olsrd "$cfg" "netaddr"
- return 0
- fi
-
- config_get prefix "$cfg" prefix
- if ! validate_olsrd_option "$prefix"; then
- warning_invalid_value olsrd "$cfg" "prefix"
- return 0
- fi
-
- [ "$HNA6_COUNT" -le 0 ] && echo -n "${N}Hna6${N}{"
- echo -n "${N}${T}${T}$netaddr $prefix"
- HNA6_COUNT=$((HNA6_COUNT + 1))
-
- return 0
-}
-
-olsrd_write_loadplugin() {
- local funcname="olsrd_write_loadplugin"
- local cfg="$1"
- validate_varname "$cfg" || return 0
- local ignore
- local name
- local suffix
- local lat
- local lon
- local latlon_infile
-
- config_get_bool ignore "$cfg" ignore 0
- [ "$ignore" -ne 0 ] && return 0
-
- config_get library "$cfg" library
- if ! validate_olsrd_option "$library"; then
- warning_invalid_value olsrd "$cfg" "library"
- return 0
- fi
- if ! [ -x "/lib/$library" -o -x "/usr/lib/$library" -o -x "/usr/local/lib/$library" ]; then
- log "$funcname() Warning: Plugin library '$library' not found, skipped"
- return 0
- fi
-
- case "$library" in
- olsrd_nameservice.*)
- config_get name "$cfg" name
- [ -z "$name" ] && config_set "$cfg" name $SYSTEM_HOSTNAME
-
- config_get suffix "$cfg" suffix
- [ -z "$suffix" ] && config_set "$cfg" suffix '.olsr'
-
- config_get lat "$cfg" lat
- config_get lon "$cfg" lon
- config_get latlon_infile "$cfg" latlon_infile
- if [ \( -z "$lat" -o -z "$lat" \) -a -z "$latlon_infile" ]; then
- if [ -f '/var/run/latlon.txt' ]; then
- config_set "$cfg" lat ''
- config_set "$cfg" lon ''
- config_set "$cfg" latlon_infile '/var/run/latlon.txt'
- else
- config_set "$cfg" lat "$SYSTEM_LAT"
- config_set "$cfg" lon "$SYSTEM_LON"
- fi
- fi
-
- for f in latlon_file hosts_file services_file resolv_file macs_file; do
- config_get $f "$cfg" $f
- done
-
- [ -z "$latlon_file" ] && config_set "$cfg" latlon_file '/var/run/latlon.js'
- ;;
- olsrd_watchdog.*)
- config_get wd_file "$cfg" file
- ;;
- esac
-
- echo -n "${N}LoadPlugin \"$library\"${N}{"
- config_write_options "$OLSRD_LOADPLUGIN_SCHEMA" "$cfg" olsrd_write_plparam "${T}"
- echo "${N}}"
-
- return 0
-}
-
-olsrd_write_interface() {
- local funcname="olsrd_write_interface"
- local cfg="$1"
- validate_varname "$cfg" || return 0
- local ignore
- local interfaces
- local interface
- local ifnames
-
- config_get_bool ignore "$cfg" ignore 0
- [ "$ignore" -ne 0 ] && return 0
-
- ifnames=
- config_get interfaces "$cfg" interface
-
- for interface in $interfaces; do
- if validate_varname "$interface"; then
- if network_get_device IFNAME "$interface"; then
- ifnames="$ifnames \"$IFNAME\""
- ifsglobal="$ifsglobal $IFNAME"
- else
- log "$funcname() Warning: Interface '$interface' not found, skipped"
- fi
- else
- warning_invalid_value olsrd "$cfg" "interface"
- fi
- done
-
- [ -z "$ifnames" ] && return 0
-
- echo -n "${N}Interface$ifnames${N}{"
- config_write_options "$OLSRD_INTERFACE_SCHEMA" "$cfg" olsrd_write_option "${T}"
- echo "${N}}"
- INTERFACES_COUNT=$((INTERFACES_COUNT + 1))
-
- return 0
-}
-
-olsrd_write_interface_defaults() {
- local cfg="$1"
- validate_varname "$cfg" || return 0
-
- echo -n "${N}InterfaceDefaults$ifnames${N}{"
- config_write_options "$OLSRD_INTERFACE_DEFAULTS_SCHEMA" "$cfg" olsrd_write_option "${T}"
- echo "${N}}"
-
- return 1
-}
-
-olsrd_update_schema() {
- local command="$1"
- validate_varname "$command" || return 0
- local varname="$2"
- validate_varname "$varname" || return 0
- local value="$3"
- local cfg="$CONFIG_SECTION"
- local cfgt
- local cur_varname
-
- config_get cfgt "$cfg" TYPE
- case "$cfgt" in
- olsrd) config_update_schema OLSRD_OLSRD_SCHEMA "$command" "$varname" "$value";;
- IpcConnect) config_update_schema OLSRD_IPCCONNECT_SCHEMA "$command" "$varname" "$value";;
- LoadPlugin) config_update_schema OLSRD_LOADPLUGIN_SCHEMA "$command" "$varname" "$value";;
- Interface) config_update_schema OLSRD_INTERFACE_SCHEMA "$command" "$varname" "$value";;
- InterfaceDefaults) config_update_schema OLSRD_INTERFACE_DEFAULTS_SCHEMA "$command" "$varname" "$value";;
- esac
-
- return 0
-}
-
-olsrd_write_config() {
- OLSRD_IPVERSION_6AND4=0
- OLSRD_COUNT=0
- config_foreach olsrd_write_olsrd olsrd
- IPCCONNECT_COUNT=0
- config_foreach olsrd_write_ipcconnect IpcConnect
- HNA4_COUNT=0
- config_foreach olsrd_write_hna4 Hna4
- [ "$HNA4_COUNT" -gt 0 ] && echo "${N}}"
- HNA6_COUNT=0
- config_foreach olsrd_write_hna6 Hna6
- [ "$HNA6_COUNT" -gt 0 ] && echo "${N}}"
- config_foreach olsrd_write_loadplugin LoadPlugin
- INTERFACES_COUNT=0
- config_foreach olsrd_write_interface_defaults InterfaceDefaults
- config_foreach olsrd_write_interface Interface
- echo
-
- return 0
-}
-
-get_wan_ifnames()
-{
- local wanifnames word catch_next
-
- which ip >/dev/null || return 1
-
- set -- $( ip route list exact 0.0.0.0/0 table all )
- for word in $*; do
- case "$word" in
- dev)
- catch_next="true"
- ;;
- *)
- [ -n "$catch_next" ] && {
- case "$wanifnames" in
- *" $word "*)
- ;;
- *)
- wanifnames="$wanifnames $word "
- ;;
- esac
-
- catch_next=
- }
- ;;
- esac
- done
-
- echo "$wanifnames"
-}
-
-olsrd_setup_smartgw_rules() {
- local funcname="olsrd_setup_smartgw_rules"
- # Check if ipip is installed
- [ -e /etc/modules.d/[0-9]*-ipip ] || {
- log "$funcname() Warning: kmod-ipip is missing. SmartGateway will not work until you install it."
- return 1
- }
-
- local wanifnames="$( get_wan_ifnames )"
-
- if [ -z "$wanifnames" ]; then
- nowan=1
- else
- nowan=0
- fi
-
- IP4T=$(which iptables)
- IP6T=$(which ip6tables)
-
- # Delete smartgw firewall rules first
- for IPT in $IP4T $IP6T; do
- while $IPT -D forwarding_rule -o tnl_+ -j ACCEPT 2> /dev/null; do :;done
- for IFACE in $wanifnames; do
- while $IPT -D forwarding_rule -i tunl0 -o $IFACE -j ACCEPT 2> /dev/null; do :; done
- done
- for IFACE in $ifsglobal; do
- while $IPT -D input_rule -i $IFACE -p 4 -j ACCEPT 2> /dev/null; do :; done
- done
- done
- while $IP4T -t nat -D postrouting_rule -o tnl_+ -j MASQUERADE 2> /dev/null; do :;done
-
- if [ "$smartgateway" == "yes" ]; then
- log "$funcname() Notice: Inserting firewall rules for SmartGateway"
- if [ ! "$smartgatewayuplink" == "none" ]; then
- if [ "$smartgatewayuplink" == "ipv4" ]; then
- # Allow everything to be forwarded to tnl_+ and use NAT for it
- $IP4T -I forwarding_rule -o tnl_+ -j ACCEPT
- $IP4T -t nat -I postrouting_rule -o tnl_+ -j MASQUERADE
- # Allow forwarding from tunl0 to (all) wan-interfaces
- if [ "$nowan"="0" ]; then
- for IFACE in $wanifnames; do
- $IP4T -A forwarding_rule -i tunl0 -o $IFACE -j ACCEPT
- done
- fi
- # Allow incoming ipip on all olsr-interfaces
- for IFACE in $ifsglobal; do
- $IP4T -I input_rule -i $IFACE -p 4 -j ACCEPT
- done
- elif [ "$smartgatewayuplink" == "ipv6" ]; then
- $IP6T -I forwarding_rule -o tnl_+ -j ACCEPT
- if [ "$nowan"="0" ]; then
- for IFACE in $wanifnames; do
- $IP6T -A forwarding_rule -i tunl0 -o $IFACE -j ACCEPT
- done
- fi
- for IFACE in $ifsglobal; do
- $IP6T -I input_rule -i $IFACE -p 4 -j ACCEPT
- done
- else
- for IPT in $IP4T $IP6T; do
- $IPT -I forwarding_rule -o tnl_+ -j ACCEPT
- $IPT -t nat -I postrouting_rule -o tnl_+ -j MASQUERADE
- if [ "$nowan"="0" ]; then
- for IFACE in $wanifnames; do
- $IPT -A forwarding_rule -i tunl0 -o $IFACE -j ACCEPT
- done
- fi
- for IFACE in $ifsglobal; do
- $IPT -I input_rule -i $IFACE -p 4 -j ACCEPT
- done
- done
- fi
- fi
- fi
-}
-
-error() {
- log "error() ${initscript}: $@"
-}
-
-start() {
- SYSTEM_HOSTNAME=
- SYSTEM_LAT=
- SYSTEM_LON=
- config_load system
- config_foreach system_config system
-
- option_cb() {
- olsrd_update_schema "option" "$@"
- }
-
- list_cb() {
- olsrd_update_schema "list" "$@"
- }
-
- . /lib/functions/network.sh
-
- config_load olsrd
- reset_cb
-
- OLSRD_CONFIG_FILE=
- config_foreach olsrd_find_config_file olsrd
-
- if [ -z "$OLSRD_CONFIG_FILE" ]; then
- mkdir -p -- /var/etc/
- olsrd_write_config > /var/etc/olsrd.conf
- if [ "$INTERFACES_COUNT" -gt 0 -a "$OLSRD_COUNT" -gt 0 ]; then
- OLSRD_CONFIG_FILE=/var/etc/olsrd.conf
- fi
- fi
-
- [ -z "$OLSRD_CONFIG_FILE" ] && return 1
-
- local bindv6only='0'
- if [ "$OLSRD_IPVERSION_6AND4" -ne 0 ]; then
- bindv6only="$(sysctl -n net.ipv6.bindv6only)"
- sysctl -w net.ipv6.bindv6only=1 > /dev/null
- sed -e '/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/d' < "$OLSRD_CONFIG_FILE" > /var/etc/olsrd.conf.ipv6
- sed -e 's/^IpVersion[ ][ ]*6$/IpVersion 4/' -e 's/^\t\t[A-Fa-f0-9.:]*[:][A-Fa-f0-9.:]*[ ][0-9]*$//' < "$OLSRD_CONFIG_FILE" > /var/etc/olsrd.conf.ipv4
- rm $OLSRD_CONFIG_FILE
-
- # some filenames should get the suffix .ipv6
- for file in $latlon_file $hosts_file $services_file $resolv_file $macs_file $wd_file;do
- f=$(echo $file|sed 's/\//\\\//g')
- sed -i "s/$f/$f.ipv6/g" /var/etc/olsrd.conf.ipv6
- done
-
- SERVICE_PID_FILE="$PID6"
- if service_check /usr/sbin/olsrd; then
- error "there is already an IPv6 instance of olsrd running (pid: '$(cat $PID6)'), not starting."
- else
- service_start /usr/sbin/olsrd -f /var/etc/olsrd.conf.ipv6 -nofork
- fi
-
- SERVICE_PID_FILE="$PID"
- if service_check /usr/sbin/olsrd; then
- error "there is already an IPv4 instance of olsrd running (pid: '$(cat $PID)'), not starting."
- else
- service_start /usr/sbin/olsrd -f /var/etc/olsrd.conf.ipv4 -nofork
- fi
-
- sleep 3
- sysctl -w net.ipv6.bindv6only="$bindv6only" > /dev/null
-
- else
-
- if [ "$ipversion" = "6" ]; then
- sed -i '/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/d' "$OLSRD_CONFIG_FILE"
- fi
-
- SERVICE_PID_FILE="$PID"
- if service_check /usr/sbin/olsrd; then
- error "there is already an IPv4 instance of olsrd running (pid: '$(cat $PID)'), not starting."
- return 1
- else
- service_start /usr/sbin/olsrd -f "$OLSRD_CONFIG_FILE" -nofork
- fi
- fi
- olsrd_setup_smartgw_rules
-}
-
-stop() {
- SERVICE_PID_FILE="$PID"
- service_stop /usr/sbin/olsrd
-
- SERVICE_PID_FILE="$PID6"
- service_stop /usr/sbin/olsrd
-}