• Simon Wunderlich's avatar
    batman-adv: add detection for complex bridge loops · cd9c7bfb
    Simon Wunderlich authored
    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: default avatarSimon Wunderlich <simon.wunderlich@open-mesh.com>
    [sven@narfation.org: fix conflicts with current version]
    Signed-off-by: default avatarSven Eckelmann <sven@narfation.org>
    Signed-off-by: default avatarMarek Lindner <mareklindner@neomailbox.ch>
    Signed-off-by: default avatarAntonio Quartulli <a@unstable.cc>
    cd9c7bfb
main.h 13.9 KB