]> git.baikalelectronics.ru Git - kernel.git/commit
batman-adv: add detection for complex bridge loops
authorSimon Wunderlich <simon.wunderlich@open-mesh.com>
Sat, 12 Mar 2016 09:49:33 +0000 (10:49 +0100)
committerAntonio Quartulli <a@unstable.cc>
Tue, 10 May 2016 10:26:45 +0000 (18:26 +0800)
commit4911f58f113f9f32e09125a94869eb010ddc7062
treea496d3fd3a24cd7b3647535a6a581aabc48f65aa
parentd8d02064257821b2029ba7e7843408076144466e
batman-adv: add detection for complex bridge loops

There are network setups where the current bridge loop avoidance can't
detect bridge loops. The minimal setup affected would consist of two
LANs and two separate meshes, connected in a ring like that:

   A...(mesh1)...B
   |             |
 (LAN1)        (LAN2)
   |             |
   C...(mesh2)...D

Since both the meshes and backbones are separate, the bridge loop
avoidance has not enough information to detect and avoid the loop
in this case. Even if these scenarios can't be fixed easily,
these kind of loops can be detected.

This patch implements a periodic check (running every 60 seconds for
now) which sends a broadcast frame with a random MAC address on
each backbone VLAN. If a broadcast frame with the same MAC address
is received shortly after on the mesh, we know that there must be a
loop and report that incident as well as throw an uevent to let others
handle that problem.

Signed-off-by: Simon Wunderlich <simon.wunderlich@open-mesh.com>
[sven@narfation.org: fix conflicts with current version]
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
Signed-off-by: Antonio Quartulli <a@unstable.cc>
net/batman-adv/bridge_loop_avoidance.c
net/batman-adv/main.h
net/batman-adv/packet.h
net/batman-adv/sysfs.c
net/batman-adv/types.h