On Sat, Mar 11, 2023 at 06:28:58AM +0100, Daniel Gröber wrote: > Hi, > > I'm using bird as a replacement for radvd since the latter has a > longstanding issue with sending adverts on unconfigured interfaces under > complex conditions. > > Turns out bird has a similar issue :) > > Looking at the code, when opening the socket for an interface in > radv_sk_open we set sk->iface as you'd expect, which should cause packets > to be sent directly via this interface. > > However radv sends packets to the all-nodes multicasts address for periodic > adverts, see radv_send_ra. This then calls sk_send_to which (eventually) > calls sockaddr_fill6. Here rther we find this code: > > if (ifa && ipa_is_link_local(a)) > sa->sin6_scope_id = ifa->index; > > This would seem to be the problem to me, since a=ff02::1 doesn't pass this > check so the sendmsg call goes out without the interface-index being > communicated to the kernel.
Hi I do not really get this. For multicast, outgoing interface is defined by setsockopt(IPV6_MULTICAST_IF) in sk_setup_multicast6(). The field sin6_scope_id should be used only for link-local addresses (to define their scope), not as a way to route multicasts. (Hmm, ff02::/16 is defined as link-local multicast address, so perhaps setting sin6_scope_id makes sense.) If sending (IPv6) multicasts does not work properly, that should be also noticed in OSPFv3/RIPng, but i am not aware of such issue. -- Elen sila lumenn' omentielvo Ondrej 'Santiago' Zajicek (email: [email protected]) OpenPGP encrypted e-mails preferred (KeyID 0x11DEADC3, wwwkeys.pgp.net) "To err is human -- to blame it on a computer is even more so."
