diff options
author | Simon Wunderlich <simon.wunderlich@s2003.tu-chemnitz.de> | 2012-09-08 12:02:53 -0400 |
---|---|---|
committer | Antonio Quartulli <ordex@autistici.org> | 2012-11-14 15:00:33 -0500 |
commit | 52aebd6a9fe4ad0245a00ef4457425ad83661c90 (patch) | |
tree | 36192da73fdf0e93cf6a032d1ceb7f2d2ad3594d /net/batman-adv/bridge_loop_avoidance.c | |
parent | b7eddd0b3950ea9dc863f1cbfa30d172dbf772f4 (diff) |
batman-adv: send announcement when backbone gw is registered
To avoid loops in the startup phase until the first announcement is
sent, send an announcement immediately as soon as a backbone gw is
added.
This may happen due to various reasons, e.g. a packet passes the rx
or tx path.
Signed-off-by: Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
Signed-off-by: Antonio Quartulli <ordex@autistici.org>
Diffstat (limited to 'net/batman-adv/bridge_loop_avoidance.c')
-rw-r--r-- | net/batman-adv/bridge_loop_avoidance.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c index 49c35a60195a..c49cf24ab33d 100644 --- a/net/batman-adv/bridge_loop_avoidance.c +++ b/net/batman-adv/bridge_loop_avoidance.c | |||
@@ -354,7 +354,7 @@ out: | |||
354 | */ | 354 | */ |
355 | static struct batadv_backbone_gw * | 355 | static struct batadv_backbone_gw * |
356 | batadv_bla_get_backbone_gw(struct batadv_priv *bat_priv, uint8_t *orig, | 356 | batadv_bla_get_backbone_gw(struct batadv_priv *bat_priv, uint8_t *orig, |
357 | short vid) | 357 | short vid, bool own_backbone) |
358 | { | 358 | { |
359 | struct batadv_backbone_gw *entry; | 359 | struct batadv_backbone_gw *entry; |
360 | struct batadv_orig_node *orig_node; | 360 | struct batadv_orig_node *orig_node; |
@@ -401,6 +401,10 @@ batadv_bla_get_backbone_gw(struct batadv_priv *bat_priv, uint8_t *orig, | |||
401 | "became a backbone gateway"); | 401 | "became a backbone gateway"); |
402 | batadv_orig_node_free_ref(orig_node); | 402 | batadv_orig_node_free_ref(orig_node); |
403 | } | 403 | } |
404 | |||
405 | if (own_backbone) | ||
406 | batadv_bla_send_announce(bat_priv, entry); | ||
407 | |||
404 | return entry; | 408 | return entry; |
405 | } | 409 | } |
406 | 410 | ||
@@ -416,7 +420,7 @@ batadv_bla_update_own_backbone_gw(struct batadv_priv *bat_priv, | |||
416 | 420 | ||
417 | backbone_gw = batadv_bla_get_backbone_gw(bat_priv, | 421 | backbone_gw = batadv_bla_get_backbone_gw(bat_priv, |
418 | primary_if->net_dev->dev_addr, | 422 | primary_if->net_dev->dev_addr, |
419 | vid); | 423 | vid, true); |
420 | if (unlikely(!backbone_gw)) | 424 | if (unlikely(!backbone_gw)) |
421 | return; | 425 | return; |
422 | 426 | ||
@@ -624,7 +628,8 @@ static int batadv_handle_announce(struct batadv_priv *bat_priv, | |||
624 | if (memcmp(an_addr, batadv_announce_mac, 4) != 0) | 628 | if (memcmp(an_addr, batadv_announce_mac, 4) != 0) |
625 | return 0; | 629 | return 0; |
626 | 630 | ||
627 | backbone_gw = batadv_bla_get_backbone_gw(bat_priv, backbone_addr, vid); | 631 | backbone_gw = batadv_bla_get_backbone_gw(bat_priv, backbone_addr, vid, |
632 | false); | ||
628 | 633 | ||
629 | if (unlikely(!backbone_gw)) | 634 | if (unlikely(!backbone_gw)) |
630 | return 1; | 635 | return 1; |
@@ -722,7 +727,8 @@ static int batadv_handle_claim(struct batadv_priv *bat_priv, | |||
722 | 727 | ||
723 | /* register the gateway if not yet available, and add the claim. */ | 728 | /* register the gateway if not yet available, and add the claim. */ |
724 | 729 | ||
725 | backbone_gw = batadv_bla_get_backbone_gw(bat_priv, backbone_addr, vid); | 730 | backbone_gw = batadv_bla_get_backbone_gw(bat_priv, backbone_addr, vid, |
731 | false); | ||
726 | 732 | ||
727 | if (unlikely(!backbone_gw)) | 733 | if (unlikely(!backbone_gw)) |
728 | return 1; | 734 | return 1; |