Commit 52aebd6a authored by Simon Wunderlich's avatar Simon Wunderlich Committed by Antonio Quartulli

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: default avatarSimon Wunderlich <siwu@hrz.tu-chemnitz.de>
Signed-off-by: default avatarAntonio Quartulli <ordex@autistici.org>
parent b7eddd0b
...@@ -354,7 +354,7 @@ static void batadv_bla_send_claim(struct batadv_priv *bat_priv, uint8_t *mac, ...@@ -354,7 +354,7 @@ static void batadv_bla_send_claim(struct batadv_priv *bat_priv, uint8_t *mac,
*/ */
static struct batadv_backbone_gw * static struct batadv_backbone_gw *
batadv_bla_get_backbone_gw(struct batadv_priv *bat_priv, uint8_t *orig, batadv_bla_get_backbone_gw(struct batadv_priv *bat_priv, uint8_t *orig,
short vid) short vid, bool own_backbone)
{ {
struct batadv_backbone_gw *entry; struct batadv_backbone_gw *entry;
struct batadv_orig_node *orig_node; struct batadv_orig_node *orig_node;
...@@ -401,6 +401,10 @@ batadv_bla_get_backbone_gw(struct batadv_priv *bat_priv, uint8_t *orig, ...@@ -401,6 +401,10 @@ batadv_bla_get_backbone_gw(struct batadv_priv *bat_priv, uint8_t *orig,
"became a backbone gateway"); "became a backbone gateway");
batadv_orig_node_free_ref(orig_node); batadv_orig_node_free_ref(orig_node);
} }
if (own_backbone)
batadv_bla_send_announce(bat_priv, entry);
return entry; return entry;
} }
...@@ -416,7 +420,7 @@ batadv_bla_update_own_backbone_gw(struct batadv_priv *bat_priv, ...@@ -416,7 +420,7 @@ batadv_bla_update_own_backbone_gw(struct batadv_priv *bat_priv,
backbone_gw = batadv_bla_get_backbone_gw(bat_priv, backbone_gw = batadv_bla_get_backbone_gw(bat_priv,
primary_if->net_dev->dev_addr, primary_if->net_dev->dev_addr,
vid); vid, true);
if (unlikely(!backbone_gw)) if (unlikely(!backbone_gw))
return; return;
...@@ -624,7 +628,8 @@ static int batadv_handle_announce(struct batadv_priv *bat_priv, ...@@ -624,7 +628,8 @@ static int batadv_handle_announce(struct batadv_priv *bat_priv,
if (memcmp(an_addr, batadv_announce_mac, 4) != 0) if (memcmp(an_addr, batadv_announce_mac, 4) != 0)
return 0; return 0;
backbone_gw = batadv_bla_get_backbone_gw(bat_priv, backbone_addr, vid); backbone_gw = batadv_bla_get_backbone_gw(bat_priv, backbone_addr, vid,
false);
if (unlikely(!backbone_gw)) if (unlikely(!backbone_gw))
return 1; return 1;
...@@ -722,7 +727,8 @@ static int batadv_handle_claim(struct batadv_priv *bat_priv, ...@@ -722,7 +727,8 @@ static int batadv_handle_claim(struct batadv_priv *bat_priv,
/* register the gateway if not yet available, and add the claim. */ /* register the gateway if not yet available, and add the claim. */
backbone_gw = batadv_bla_get_backbone_gw(bat_priv, backbone_addr, vid); backbone_gw = batadv_bla_get_backbone_gw(bat_priv, backbone_addr, vid,
false);
if (unlikely(!backbone_gw)) if (unlikely(!backbone_gw))
return 1; return 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment