linux/net/batman-adv
Linus Lüssing 3236d215ad batman-adv: mcast: fix duplicate mcast packets in BLA backbone from LAN
Scenario:
* Multicast frame send from a BLA backbone (multiple nodes with
  their bat0 bridged together, with BLA enabled)

Issue:
* BLA backbone nodes receive the frame multiple times on bat0

For multicast frames received via batman-adv broadcast packets the
originator of the broadcast packet is checked before decapsulating and
forwarding the frame to bat0 (batadv_bla_is_backbone_gw()->
batadv_recv_bcast_packet()). If it came from a node which shares the
same BLA backbone with us then it is not forwarded to bat0 to avoid a
loop.

When sending a multicast frame in a non-4-address batman-adv unicast
packet we are currently missing this check - and cannot do so because
the batman-adv unicast packet has no originator address field.

However, we can simply fix this on the sender side by only sending the
multicast frame via unicasts to interested nodes which do not share the
same BLA backbone with us. This also nicely avoids some unnecessary
transmissions on mesh side.

Note that no infinite loop was observed, probably because of dropping
via batadv_interface_tx()->batadv_bla_tx(). However the duplicates still
utterly confuse switches/bridges, ICMPv6 duplicate address detection and
neighbor discovery and therefore leads to long delays before being able
to establish TCP connections, for instance. And it also leads to the Linux
bridge printing messages like:
"br-lan: received packet on eth1 with own address as source address ..."

Fixes: 2d3f6ccc4e ("batman-adv: Modified forwarding behaviour for multicast packets")
Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
2020-09-15 10:05:24 +02:00
..
bat_algo.c batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
bat_algo.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
bat_iv_ogm.c batman-adv: Introduce a configurable per interface hop penalty 2020-06-26 10:37:11 +02:00
bat_iv_ogm.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
bat_v_elp.c batman-adv: Fix typos and grammar in documentation 2020-06-26 10:36:30 +02:00
bat_v_elp.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
bat_v_ogm.c batman-adv: Fix own OGM check in aggregated OGMs 2020-08-18 19:40:03 +02:00
bat_v_ogm.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
bat_v.c batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
bat_v.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
bitarray.c batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
bitarray.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
bridge_loop_avoidance.c batman-adv: Add missing include for in_interrupt() 2020-09-14 22:23:24 +02:00
bridge_loop_avoidance.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
debugfs.c batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
debugfs.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
distributed-arp-table.c batman-adv: Fix typos and grammar in documentation 2020-06-26 10:36:30 +02:00
distributed-arp-table.h batman-adv: remove unused inline function batadv_arp_change_timeout 2020-04-24 15:22:41 +02:00
fragmentation.c batman-adv: Fix typos and grammar in documentation 2020-06-26 10:36:30 +02:00
fragmentation.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
gateway_client.c batman-adv: Avoid uninitialized chaddr when handling DHCP 2020-08-18 19:40:03 +02:00
gateway_client.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
gateway_common.c batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
gateway_common.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
hard-interface.c batman-adv: Introduce a configurable per interface hop penalty 2020-06-26 10:37:11 +02:00
hard-interface.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
hash.c batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
hash.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
icmp_socket.c batadv_socket_read(): get rid of pointless access_ok() 2020-05-20 20:31:33 -04:00
icmp_socket.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
Kconfig batman-adv: Disable CONFIG_BATMAN_ADV_SYSFS by default 2020-01-01 00:57:07 +01:00
log.c batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
log.h batman-adv: Fix typos and grammar in documentation 2020-06-26 10:36:30 +02:00
main.c batman-adv: Fix typos and grammar in documentation 2020-06-26 10:36:30 +02:00
main.h batman-adv: Fix typos and grammar in documentation 2020-06-26 10:36:30 +02:00
Makefile batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
multicast.c batman-adv: mcast: fix duplicate mcast packets in BLA backbone from LAN 2020-09-15 10:05:24 +02:00
multicast.h batman-adv: mcast: fix duplicate mcast packets in BLA backbone from LAN 2020-09-15 10:05:24 +02:00
netlink.c batman-adv: Introduce a configurable per interface hop penalty 2020-06-26 10:37:11 +02:00
netlink.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
network-coding.c batman-adv: Fix typos and grammar in documentation 2020-06-26 10:36:30 +02:00
network-coding.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
originator.c batman-adv: Fix typos and grammar in documentation 2020-06-26 10:36:30 +02:00
originator.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
routing.c batman-adv: mcast/TT: fix wrongly dropped or rerouted packets 2020-09-05 08:45:46 +02:00
routing.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
send.c batman-adv: Fix typos and grammar in documentation 2020-06-26 10:36:30 +02:00
send.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
soft-interface.c batman-adv: mcast: fix duplicate mcast packets in BLA backbone from LAN 2020-09-15 10:05:24 +02:00
soft-interface.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
sysfs.c batman-adv: Fix refcnt leak in batadv_store_throughput_override 2020-04-21 10:08:05 +02:00
sysfs.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
tp_meter.c batman-adv: Fix typos and grammar in documentation 2020-06-26 10:36:30 +02:00
tp_meter.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
trace.c batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
trace.h batman-adv: trace: Drop unneeded types.h include 2020-04-21 10:07:31 +02:00
translation-table.c batman-adv: Fix typos and grammar in documentation 2020-06-26 10:36:30 +02:00
translation-table.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
tvlv.c batman-adv: Fix typos and grammar in documentation 2020-06-26 10:36:30 +02:00
tvlv.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
types.h batman-adv: Introduce a configurable per interface hop penalty 2020-06-26 10:37:11 +02:00