diff options
author | Marek Lindner <lindner_marek@yahoo.de> | 2011-02-18 07:28:08 -0500 |
---|---|---|
committer | Marek Lindner <lindner_marek@yahoo.de> | 2011-03-05 06:50:14 -0500 |
commit | 39901e716275da4e831b40f9e45a1b61d6a776dc (patch) | |
tree | a7db25062f0e3df9b7f878adaeda8aadd5644181 /net/batman-adv/routing.c | |
parent | 9e0b33c221f1364e4d7562177a918eef8e85317a (diff) |
batman-adv: separate ethernet comparing calls from hash functions
Note: The function compare_ether_addr() provided by the Linux kernel
requires aligned memory.
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
Diffstat (limited to 'net/batman-adv/routing.c')
-rw-r--r-- | net/batman-adv/routing.c | 55 |
1 files changed, 27 insertions, 28 deletions
diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c index ce68815f3eb3..b54bf6ec637e 100644 --- a/net/batman-adv/routing.c +++ b/net/batman-adv/routing.c | |||
@@ -163,8 +163,8 @@ static int is_bidirectional_neigh(struct orig_node *orig_node, | |||
163 | hlist_for_each_entry_rcu(tmp_neigh_node, node, | 163 | hlist_for_each_entry_rcu(tmp_neigh_node, node, |
164 | &orig_node->neigh_list, list) { | 164 | &orig_node->neigh_list, list) { |
165 | 165 | ||
166 | if (compare_orig(tmp_neigh_node->addr, | 166 | if (compare_eth(tmp_neigh_node->addr, |
167 | orig_neigh_node->orig) && | 167 | orig_neigh_node->orig) && |
168 | (tmp_neigh_node->if_incoming == if_incoming)) | 168 | (tmp_neigh_node->if_incoming == if_incoming)) |
169 | neigh_node = tmp_neigh_node; | 169 | neigh_node = tmp_neigh_node; |
170 | } | 170 | } |
@@ -192,8 +192,8 @@ static int is_bidirectional_neigh(struct orig_node *orig_node, | |||
192 | hlist_for_each_entry_rcu(tmp_neigh_node, node, | 192 | hlist_for_each_entry_rcu(tmp_neigh_node, node, |
193 | &orig_neigh_node->neigh_list, list) { | 193 | &orig_neigh_node->neigh_list, list) { |
194 | 194 | ||
195 | if (compare_orig(tmp_neigh_node->addr, | 195 | if (compare_eth(tmp_neigh_node->addr, |
196 | orig_neigh_node->orig) && | 196 | orig_neigh_node->orig) && |
197 | (tmp_neigh_node->if_incoming == if_incoming)) | 197 | (tmp_neigh_node->if_incoming == if_incoming)) |
198 | neigh_node = tmp_neigh_node; | 198 | neigh_node = tmp_neigh_node; |
199 | } | 199 | } |
@@ -304,8 +304,8 @@ static void bonding_candidate_add(struct orig_node *orig_node, | |||
304 | spin_lock_bh(&orig_node->neigh_list_lock); | 304 | spin_lock_bh(&orig_node->neigh_list_lock); |
305 | 305 | ||
306 | /* only consider if it has the same primary address ... */ | 306 | /* only consider if it has the same primary address ... */ |
307 | if (!compare_orig(orig_node->orig, | 307 | if (!compare_eth(orig_node->orig, |
308 | neigh_node->orig_node->primary_addr)) | 308 | neigh_node->orig_node->primary_addr)) |
309 | goto candidate_del; | 309 | goto candidate_del; |
310 | 310 | ||
311 | if (!orig_node->router) | 311 | if (!orig_node->router) |
@@ -334,7 +334,7 @@ static void bonding_candidate_add(struct orig_node *orig_node, | |||
334 | continue; | 334 | continue; |
335 | 335 | ||
336 | if ((neigh_node->if_incoming == tmp_neigh_node->if_incoming) || | 336 | if ((neigh_node->if_incoming == tmp_neigh_node->if_incoming) || |
337 | (compare_orig(neigh_node->addr, tmp_neigh_node->addr))) { | 337 | (compare_eth(neigh_node->addr, tmp_neigh_node->addr))) { |
338 | interference_candidate = 1; | 338 | interference_candidate = 1; |
339 | break; | 339 | break; |
340 | } | 340 | } |
@@ -394,7 +394,7 @@ static void update_orig(struct bat_priv *bat_priv, | |||
394 | rcu_read_lock(); | 394 | rcu_read_lock(); |
395 | hlist_for_each_entry_rcu(tmp_neigh_node, node, | 395 | hlist_for_each_entry_rcu(tmp_neigh_node, node, |
396 | &orig_node->neigh_list, list) { | 396 | &orig_node->neigh_list, list) { |
397 | if (compare_orig(tmp_neigh_node->addr, ethhdr->h_source) && | 397 | if (compare_eth(tmp_neigh_node->addr, ethhdr->h_source) && |
398 | (tmp_neigh_node->if_incoming == if_incoming) && | 398 | (tmp_neigh_node->if_incoming == if_incoming) && |
399 | atomic_inc_not_zero(&tmp_neigh_node->refcount)) { | 399 | atomic_inc_not_zero(&tmp_neigh_node->refcount)) { |
400 | if (neigh_node) | 400 | if (neigh_node) |
@@ -579,7 +579,7 @@ static char count_real_packets(struct ethhdr *ethhdr, | |||
579 | orig_node->last_real_seqno, | 579 | orig_node->last_real_seqno, |
580 | batman_packet->seqno); | 580 | batman_packet->seqno); |
581 | 581 | ||
582 | if (compare_orig(tmp_neigh_node->addr, ethhdr->h_source) && | 582 | if (compare_eth(tmp_neigh_node->addr, ethhdr->h_source) && |
583 | (tmp_neigh_node->if_incoming == if_incoming)) | 583 | (tmp_neigh_node->if_incoming == if_incoming)) |
584 | set_mark = 1; | 584 | set_mark = 1; |
585 | else | 585 | else |
@@ -644,8 +644,8 @@ void receive_bat_packet(struct ethhdr *ethhdr, | |||
644 | 644 | ||
645 | has_directlink_flag = (batman_packet->flags & DIRECTLINK ? 1 : 0); | 645 | has_directlink_flag = (batman_packet->flags & DIRECTLINK ? 1 : 0); |
646 | 646 | ||
647 | is_single_hop_neigh = (compare_orig(ethhdr->h_source, | 647 | is_single_hop_neigh = (compare_eth(ethhdr->h_source, |
648 | batman_packet->orig) ? 1 : 0); | 648 | batman_packet->orig) ? 1 : 0); |
649 | 649 | ||
650 | bat_dbg(DBG_BATMAN, bat_priv, | 650 | bat_dbg(DBG_BATMAN, bat_priv, |
651 | "Received BATMAN packet via NB: %pM, IF: %s [%pM] " | 651 | "Received BATMAN packet via NB: %pM, IF: %s [%pM] " |
@@ -665,19 +665,19 @@ void receive_bat_packet(struct ethhdr *ethhdr, | |||
665 | if (batman_if->soft_iface != if_incoming->soft_iface) | 665 | if (batman_if->soft_iface != if_incoming->soft_iface) |
666 | continue; | 666 | continue; |
667 | 667 | ||
668 | if (compare_orig(ethhdr->h_source, | 668 | if (compare_eth(ethhdr->h_source, |
669 | batman_if->net_dev->dev_addr)) | 669 | batman_if->net_dev->dev_addr)) |
670 | is_my_addr = 1; | 670 | is_my_addr = 1; |
671 | 671 | ||
672 | if (compare_orig(batman_packet->orig, | 672 | if (compare_eth(batman_packet->orig, |
673 | batman_if->net_dev->dev_addr)) | 673 | batman_if->net_dev->dev_addr)) |
674 | is_my_orig = 1; | 674 | is_my_orig = 1; |
675 | 675 | ||
676 | if (compare_orig(batman_packet->prev_sender, | 676 | if (compare_eth(batman_packet->prev_sender, |
677 | batman_if->net_dev->dev_addr)) | 677 | batman_if->net_dev->dev_addr)) |
678 | is_my_oldorig = 1; | 678 | is_my_oldorig = 1; |
679 | 679 | ||
680 | if (compare_orig(ethhdr->h_source, broadcast_addr)) | 680 | if (compare_eth(ethhdr->h_source, broadcast_addr)) |
681 | is_broadcast = 1; | 681 | is_broadcast = 1; |
682 | } | 682 | } |
683 | rcu_read_unlock(); | 683 | rcu_read_unlock(); |
@@ -717,8 +717,8 @@ void receive_bat_packet(struct ethhdr *ethhdr, | |||
717 | /* if received seqno equals last send seqno save new | 717 | /* if received seqno equals last send seqno save new |
718 | * seqno for bidirectional check */ | 718 | * seqno for bidirectional check */ |
719 | if (has_directlink_flag && | 719 | if (has_directlink_flag && |
720 | compare_orig(if_incoming->net_dev->dev_addr, | 720 | compare_eth(if_incoming->net_dev->dev_addr, |
721 | batman_packet->orig) && | 721 | batman_packet->orig) && |
722 | (batman_packet->seqno - if_incoming_seqno + 2 == 0)) { | 722 | (batman_packet->seqno - if_incoming_seqno + 2 == 0)) { |
723 | offset = if_incoming->if_num * NUM_WORDS; | 723 | offset = if_incoming->if_num * NUM_WORDS; |
724 | 724 | ||
@@ -765,11 +765,11 @@ void receive_bat_packet(struct ethhdr *ethhdr, | |||
765 | /* avoid temporary routing loops */ | 765 | /* avoid temporary routing loops */ |
766 | if ((orig_node->router) && | 766 | if ((orig_node->router) && |
767 | (orig_node->router->orig_node->router) && | 767 | (orig_node->router->orig_node->router) && |
768 | (compare_orig(orig_node->router->addr, | 768 | (compare_eth(orig_node->router->addr, |
769 | batman_packet->prev_sender)) && | 769 | batman_packet->prev_sender)) && |
770 | !(compare_orig(batman_packet->orig, batman_packet->prev_sender)) && | 770 | !(compare_eth(batman_packet->orig, batman_packet->prev_sender)) && |
771 | (compare_orig(orig_node->router->addr, | 771 | (compare_eth(orig_node->router->addr, |
772 | orig_node->router->orig_node->router->addr))) { | 772 | orig_node->router->orig_node->router->addr))) { |
773 | bat_dbg(DBG_BATMAN, bat_priv, | 773 | bat_dbg(DBG_BATMAN, bat_priv, |
774 | "Drop packet: ignoring all rebroadcast packets that " | 774 | "Drop packet: ignoring all rebroadcast packets that " |
775 | "may make me loop (sender: %pM)\n", ethhdr->h_source); | 775 | "may make me loop (sender: %pM)\n", ethhdr->h_source); |
@@ -1185,14 +1185,13 @@ struct neigh_node *find_router(struct bat_priv *bat_priv, | |||
1185 | 1185 | ||
1186 | /* if we have something in the primary_addr, we can search | 1186 | /* if we have something in the primary_addr, we can search |
1187 | * for a potential bonding candidate. */ | 1187 | * for a potential bonding candidate. */ |
1188 | if (memcmp(router_orig->primary_addr, zero_mac, ETH_ALEN) == 0) | 1188 | if (compare_eth(router_orig->primary_addr, zero_mac)) |
1189 | goto return_router; | 1189 | goto return_router; |
1190 | 1190 | ||
1191 | /* find the orig_node which has the primary interface. might | 1191 | /* find the orig_node which has the primary interface. might |
1192 | * even be the same as our router_orig in many cases */ | 1192 | * even be the same as our router_orig in many cases */ |
1193 | 1193 | ||
1194 | if (memcmp(router_orig->primary_addr, | 1194 | if (compare_eth(router_orig->primary_addr, router_orig->orig)) { |
1195 | router_orig->orig, ETH_ALEN) == 0) { | ||
1196 | primary_orig_node = router_orig; | 1195 | primary_orig_node = router_orig; |
1197 | } else { | 1196 | } else { |
1198 | primary_orig_node = hash_find(bat_priv->orig_hash, compare_orig, | 1197 | primary_orig_node = hash_find(bat_priv->orig_hash, compare_orig, |