linux/net/batman-adv
Linus Lüssing 4c8755d69c batman-adv: Send multicast packets to nodes with a WANT_ALL flag
With this patch a node sends IPv4 multicast packets to nodes which
have a BATADV_MCAST_WANT_ALL_IPV4 flag set and IPv6 multicast packets
to nodes which have a BATADV_MCAST_WANT_ALL_IPV6 flag set, too.

Why is this needed? There are scenarios involving bridges where
multicast report snooping and multicast TT announcements are not
sufficient, which would lead to packet loss for some nodes otherwise:

MLDv1 and IGMPv1/IGMPv2 have a suppression mechanism
for multicast listener reports. When we have an MLDv1/IGMPv1/IGMPv2
querier behind a bridge then our snooping bridge is potentially not
going to see any reports even though listeners exist because according
to RFC4541 such reports are only forwarded to multicast routers:

-----------------------------------------------------------
            ---------------
{Querier}---|Snoop. Switch|----{Listener}
            ---------------
                       \           ^
                      -------
                      | br0 |  <  ???
                      -------
                          \
                     _-~---~_
                 _-~/        ~-_
                ~   batman-adv  \-----{Sender}
                \~_   cloud    ~/
                   -~~__-__-~_/

I)  MLDv1 Query:  {Querier}  -> flooded
II) MLDv1 Report: {Listener} -> {Querier}

-> br0 cannot detect the {Listener}
=> Packets from {Sender} need to be forwarded to all
   detected listeners and MLDv1/IGMPv1/IGMPv2 queriers.

-----------------------------------------------------------

Note that we do not need to explicitly forward to MLDv2/IGMPv3 queriers,
because these protocols have no report suppression: A bridge has no
trouble detecting MLDv2/IGMPv3 listeners.

Even though we do not support bridges yet we need to provide the
according infrastructure already to not break compatibility later.

Signed-off-by: Linus Lüssing <linus.luessing@web.de>
Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
2014-03-22 09:18:58 +01:00
..
bat_algo.h batman-adv: update copyright years for 2014 2014-01-12 14:41:19 +01:00
bat_iv_ogm.c batman-adv: prefer ether_addr_copy to memcpy 2014-03-22 08:50:26 +01:00
bitarray.c batman-adv: update copyright years for 2014 2014-01-12 14:41:19 +01:00
bitarray.h batman-adv: update copyright years for 2014 2014-01-12 14:41:19 +01:00
bridge_loop_avoidance.c batman-adv: prefer ether_addr_copy to memcpy 2014-03-22 08:50:26 +01:00
bridge_loop_avoidance.h batman-adv: update copyright years for 2014 2014-01-12 14:41:19 +01:00
debugfs.c batman-adv: update copyright years for 2014 2014-01-12 14:41:19 +01:00
debugfs.h batman-adv: update copyright years for 2014 2014-01-12 14:41:19 +01:00
distributed-arp-table.c batman-adv: prefer ether_addr_copy to memcpy 2014-03-22 08:50:26 +01:00
distributed-arp-table.h batman-adv: update copyright years for 2014 2014-01-12 14:41:19 +01:00
fragmentation.c batman-adv: prefer ether_addr_copy to memcpy 2014-03-22 08:50:26 +01:00
fragmentation.h batman-adv: update copyright years for 2014 2014-01-12 14:41:19 +01:00
gateway_client.c batman-adv: prefer ether_addr_copy to memcpy 2014-03-22 08:50:26 +01:00
gateway_client.h batman-adv: update copyright years for 2014 2014-01-12 14:41:19 +01:00
gateway_common.c batman-adv: update copyright years for 2014 2014-01-12 14:41:19 +01:00
gateway_common.h batman-adv: update copyright years for 2014 2014-01-12 14:41:19 +01:00
hard-interface.c batman-adv: fix soft-interface MTU computation 2014-02-17 17:17:00 +01:00
hard-interface.h batman-adv: update copyright years for 2014 2014-01-12 14:41:19 +01:00
hash.c batman-adv: update copyright years for 2014 2014-01-12 14:41:19 +01:00
hash.h batman-adv: update copyright years for 2014 2014-01-12 14:41:19 +01:00
icmp_socket.c batman-adv: prefer ether_addr_copy to memcpy 2014-03-22 08:50:26 +01:00
icmp_socket.h batman-adv: update copyright years for 2014 2014-01-12 14:41:19 +01:00
Kconfig batman-adv: Multicast Listener Announcements via Translation Table 2014-03-22 09:18:56 +01:00
main.c batman-adv: Send multicast packets to nodes with a WANT_ALL flag 2014-03-22 09:18:58 +01:00
main.h batman-adv: Add IPv4 link-local/IPv6-ll-all-nodes multicast support 2014-03-22 09:18:58 +01:00
Makefile batman-adv: Multicast Listener Announcements via Translation Table 2014-03-22 09:18:56 +01:00
multicast.c batman-adv: Send multicast packets to nodes with a WANT_ALL flag 2014-03-22 09:18:58 +01:00
multicast.h batman-adv: Modified forwarding behaviour for multicast packets 2014-03-22 09:18:57 +01:00
network-coding.c batman-adv: prefer ether_addr_copy to memcpy 2014-03-22 08:50:26 +01:00
network-coding.h batman-adv: update copyright years for 2014 2014-01-12 14:41:19 +01:00
originator.c batman-adv: Announce new capability via multicast TVLV 2014-03-22 09:18:57 +01:00
originator.h batman-adv: avoid potential race condition when adding a new neighbour 2014-02-17 17:17:01 +01:00
packet.h batman-adv: Send multicast packets to nodes with a WANT_ALL flag 2014-03-22 09:18:58 +01:00
routing.c batman-adv: prefer ether_addr_copy to memcpy 2014-03-22 08:50:26 +01:00
routing.h batman-adv: update copyright years for 2014 2014-01-12 14:41:19 +01:00
send.c batman-adv: Send multicast packets to nodes with a WANT_ALL flag 2014-03-22 09:18:58 +01:00
send.h batman-adv: Modified forwarding behaviour for multicast packets 2014-03-22 09:18:57 +01:00
soft-interface.c batman-adv: Send multicast packets to nodes with a WANT_ALL flag 2014-03-22 09:18:58 +01:00
soft-interface.h batman-adv: update copyright years for 2014 2014-01-12 14:41:19 +01:00
sysfs.c batman-adv: Modified forwarding behaviour for multicast packets 2014-03-22 09:18:57 +01:00
sysfs.h batman-adv: update copyright years for 2014 2014-01-12 14:41:19 +01:00
translation-table.c batman-adv: Modified forwarding behaviour for multicast packets 2014-03-22 09:18:57 +01:00
translation-table.h batman-adv: Modified forwarding behaviour for multicast packets 2014-03-22 09:18:57 +01:00
types.h batman-adv: Send multicast packets to nodes with a WANT_ALL flag 2014-03-22 09:18:58 +01:00