batman-adv: Don't handle address updates when bla is disabled

Message ID 1370616725-1598-1-git-send-email-siwu@hrz.tu-chemnitz.de (mailing list archive)
State Accepted, archived
Headers

Commit Message

Simon Wunderlich June 7, 2013, 2:52 p.m. UTC
  From: Simon Wunderlich <simon@open-mesh.com>

The bridge loop avoidance has a hook to handle address updates of the
originator. These should not be handled when bridge loop avoidance is
disabled - it might send some bridge loop avoidance packets which should
not appear if bla is disabled.

Signed-off-by: Simon Wunderlich <simon@open-mesh.com>
---
 bridge_loop_avoidance.c |    4 ++++
 1 file changed, 4 insertions(+)
  

Comments

Antonio Quartulli June 7, 2013, 4:46 p.m. UTC | #1
On Fri, Jun 07, 2013 at 04:52:05PM +0200, Simon Wunderlich wrote:
> From: Simon Wunderlich <simon@open-mesh.com>
> 
> The bridge loop avoidance has a hook to handle address updates of the
> originator. These should not be handled when bridge loop avoidance is
> disabled - it might send some bridge loop avoidance packets which should
> not appear if bla is disabled.
> 
> Signed-off-by: Simon Wunderlich <simon@open-mesh.com>

Since this is a fix and not a new feature, it should target maint.

Cheers,
  
Marek Lindner June 9, 2013, 4:02 a.m. UTC | #2
On Saturday, June 08, 2013 00:46:49 Antonio Quartulli wrote:
> On Fri, Jun 07, 2013 at 04:52:05PM +0200, Simon Wunderlich wrote:
> > From: Simon Wunderlich <simon@open-mesh.com>
> > 
> > The bridge loop avoidance has a hook to handle address updates of the
> > originator. These should not be handled when bridge loop avoidance is
> > disabled - it might send some bridge loop avoidance packets which should
> > not appear if bla is disabled.
> > 
> > Signed-off-by: Simon Wunderlich <simon@open-mesh.com>
> 
> Since this is a fix and not a new feature, it should target maint.

Applied in revision 518fba1.

Thanks,
Marek
  

Patch

diff --git a/bridge_loop_avoidance.c b/bridge_loop_avoidance.c
index ab537ec..6ea7ccf 100644
--- a/bridge_loop_avoidance.c
+++ b/bridge_loop_avoidance.c
@@ -1073,6 +1073,10 @@  void batadv_bla_update_orig_address(struct batadv_priv *bat_priv,
 	group = htons(crc16(0, primary_if->net_dev->dev_addr, ETH_ALEN));
 	bat_priv->bla.claim_dest.group = group;
 
+	/* purge everything when bridge loop avoidance is turned off. */
+	if (!atomic_read(&bat_priv->bridge_loop_avoidance))
+		oldif = NULL;
+
 	if (!oldif) {
 		batadv_bla_purge_claims(bat_priv, NULL, 1);
 		batadv_bla_purge_backbone_gw(bat_priv, 1);