• Linus Lüssing's avatar
    batman-adv: mcast: fix duplicate mcast packets in BLA backbone from mesh · 5ccdc278
    Linus Lüssing authored
    [ Upstream commit 74c09b72 ]
    
    Scenario:
    * Multicast frame send from mesh to a BLA backbone (multiple nodes
      with their bat0 bridged together, with BLA enabled)
    
    Issue:
    * BLA backbone nodes receive the frame multiple times on bat0,
      once from mesh->bat0 and once from each backbone_gw from LAN
    
    For unicast, a node will send only to the best backbone gateway
    according to the TQ. However for multicast we currently cannot determine
    if multiple destination nodes share the same backbone if they don't share
    the same backbone with us. So we need to keep sending the unicasts to
    all backbone gateways and let the backbone gateways decide which one
    will forward the frame. We can use the CLAIM mechanism to make this
    decision.
    
    One catch: The batman-adv gateway feature for DHCP packets potentially
    sends multicast packets in the same batman-adv unicast header as the
    multicast optimizations code. And we are not allowed to drop those even
    if we did not claim the source address of the sender, as for such
    packets there is only this one multicast-in-unicast packet.
    
    How can we distinguish the two cases?
    
    The gateway feature uses a batman-adv unicast 4 address header. While
    the multicast-to-unicasts feature uses a simple, 3 address batman-adv
    unicast header. So let's use this to distinguish.
    
    Fixes: fe2da6ff ("batman-adv: check incoming packet type for bla")
    Signed-off-by: default avatarLinus Lüssing <linus.luessing@c0d3.blue>
    Signed-off-by: default avatarSven Eckelmann <sven@narfation.org>
    Signed-off-by: default avatarSimon Wunderlich <sw@simonwunderlich.de>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    5ccdc278
bridge_loop_avoidance.c 70.7 KB