batman-adv: mcast: detect, distribute and maintain multicast router presence
authorLinus Lüssing <linus.luessing@c0d3.blue>
Tue, 11 Jun 2019 20:58:40 +0000 (22:58 +0200)
committerSimon Wunderlich <sw@simonwunderlich.de>
Thu, 27 Jun 2019 17:25:05 +0000 (19:25 +0200)
commit61caf3d109f5411a7f5b433f1eb73ead7e0789fa
treec5db1fcac8082177d472d2e63b45838fc74b75be
parent3bcacd1e067266173c35628df96be7819ab3d64a
batman-adv: mcast: detect, distribute and maintain multicast router presence

To be able to apply our group aware multicast optimizations to packets
with a scope greater than link-local we need to not only keep track of
multicast listeners but also multicast routers.

With this patch a node detects the presence of multicast routers on
its segment by checking if
/proc/sys/net/ipv{4,6}/conf/<bat0|br0(bat)>/mc_forwarding is set for one
thing. This option is enabled by multicast routing daemons and needed
for the kernel's multicast routing tables to receive and route packets.

For another thing if a bridge is configured on top of bat0 then the
presence of an IPv6 multicast router behind this bridge is currently
detected by checking for an IPv6 multicast "All Routers Address"
(ff02::2). This should later be replaced by querying the bridge, which
performs proper, RFC4286 compliant Multicast Router Discovery (our
simplified approach includes more hosts than necessary, most notably
not just multicast routers but also unicast ones and is not applicable
for IPv4).

If no multicast router is detected then this is signalized via the new
BATADV_MCAST_WANT_NO_RTR4 and BATADV_MCAST_WANT_NO_RTR6
multicast tvlv flags.

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>
include/uapi/linux/batadv_packet.h
net/batman-adv/multicast.c
net/batman-adv/originator.c
net/batman-adv/types.h