batman-adv: mcast/TT: fix wrongly dropped or rerouted packets
Linus Lüssing authored
The unicast packet rerouting code makes several assumptions. For
instance it assumes that there is always exactly one destination in the
TT. This breaks for multicast frames in a unicast packets in several ways:

For one thing if there is actually no TT entry and the destination node
was selected due to the multicast tvlv flags it announced. Then an
intermediate node will wrongly drop the packet.

For another thing if there is a TT entry but the TTVN of this entry is
newer than the originally addressed destination node: Then the
intermediate node will wrongly redirect the packet, leading to
duplicated multicast packets at a multicast listener and missing
packets at other multicast listeners or multicast routers.

Fixing this by not applying the unicast packet rerouting to batman-adv
unicast packets with a multicast payload. We are not able to detect a
roaming multicast listener at the moment and will just continue to send
the multicast frame to both the new and old destination for a while in
case of such a roaming multicast listener.

Fixes: a73105b8

 ("batman-adv: improved client announcement mechanism")
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>
7dda5b33
Name Last commit Last update
..
Kconfig batman-adv: Disable CONFIG_BATMAN_ADV_SYSFS by default
Makefile batman-adv: Update copyright years for 2020
bat_algo.c batman-adv: Update copyright years for 2020
bat_algo.h batman-adv: Update copyright years for 2020
bat_iv_ogm.c batman-adv: Introduce a configurable per interface hop penalty
bat_iv_ogm.h batman-adv: Update copyright years for 2020
bat_v.c batman-adv: Update copyright years for 2020
bat_v.h batman-adv: Update copyright years for 2020
bat_v_elp.c batman-adv: Fix typos and grammar in documentation
bat_v_elp.h batman-adv: Update copyright years for 2020
bat_v_ogm.c batman-adv: Fix own OGM check in aggregated OGMs
bat_v_ogm.h batman-adv: Update copyright years for 2020
bitarray.c batman-adv: Update copyright years for 2020
bitarray.h batman-adv: Update copyright years for 2020
bridge_loop_avoidance.c batman-adv: bla: fix type misuse for backbone_gw hash indexing
bridge_loop_avoidance.h batman-adv: Update copyright years for 2020
debugfs.c batman-adv: Update copyright years for 2020
debugfs.h batman-adv: Update copyright years for 2020
distributed-arp-table.c batman-adv: Fix typos and grammar in documentation
distributed-arp-table.h batman-adv: remove unused inline function batadv_arp_change_timeout
fragmentation.c batman-adv: Fix typos and grammar in documentation
fragmentation.h batman-adv: Update copyright years for 2020
gateway_client.c batman-adv: Avoid uninitialized chaddr when handling DHCP
gateway_client.h batman-adv: Update copyright years for 2020
gateway_common.c batman-adv: Update copyright years for 2020
gateway_common.h batman-adv: Update copyright years for 2020
hard-interface.c batman-adv: Introduce a configurable per interface hop penalty
hard-interface.h batman-adv: Update copyright years for 2020
hash.c batman-adv: Update copyright years for 2020
hash.h batman-adv: Update copyright years for 2020
icmp_socket.c batadv_socket_read(): get rid of pointless access_ok()
icmp_socket.h batman-adv: Update copyright years for 2020
log.c batman-adv: Update copyright years for 2020
log.h batman-adv: Fix typos and grammar in documentation
main.c batman-adv: Fix typos and grammar in documentation
main.h batman-adv: Fix typos and grammar in documentation
multicast.c batman-adv: Fix typos and grammar in documentation
multicast.h batman-adv: Update copyright years for 2020
netlink.c batman-adv: Introduce a configurable per interface hop penalty
netlink.h batman-adv: Update copyright years for 2020
network-coding.c batman-adv: Fix typos and grammar in documentation
network-coding.h batman-adv: Update copyright years for 2020
originator.c batman-adv: Fix typos and grammar in documentation
originator.h batman-adv: Update copyright years for 2020
routing.c batman-adv: mcast/TT: fix wrongly dropped or rerouted packets
routing.h batman-adv: Update copyright years for 2020
send.c batman-adv: Fix typos and grammar in documentation
send.h batman-adv: Update copyright years for 2020
soft-interface.c batman-adv: Fix typos and grammar in documentation
soft-interface.h batman-adv: Update copyright years for 2020
sysfs.c batman-adv: Fix refcnt leak in batadv_store_throughput_override
sysfs.h batman-adv: Update copyright years for 2020
tp_meter.c batman-adv: Fix typos and grammar in documentation
tp_meter.h batman-adv: Update copyright years for 2020
trace.c batman-adv: Update copyright years for 2020
trace.h batman-adv: trace: Drop unneeded types.h include
translation-table.c batman-adv: Fix typos and grammar in documentation
translation-table.h batman-adv: Update copyright years for 2020
tvlv.c batman-adv: Fix typos and grammar in documentation
tvlv.h batman-adv: Update copyright years for 2020
types.h batman-adv: Introduce a configurable per interface hop penalty