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)
commitcd9c7bfbbae81bbe75de585ac57b1097e86cf109
treea496d3fd3a24cd7b3647535a6a581aabc48f65aa
parent2cd45a0671d9e37ab20e844fc4c84717a38b7f52
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