Re: [RFC] ipv6: always join solicited-node address
From: Hannes Frederic Sowa <hidden>
Date: 2013-10-14 00:55:10
On Sun, Oct 13, 2013 at 07:24:24PM +0200, Bjørn Mork wrote:
RFC 4861 section 7.2.1 "Interface Initialization" says: When a multicast-capable interface becomes enabled, the node MUST join the all-nodes multicast address on that interface, as well as the solicited-node multicast address corresponding to each of the IP addresses assigned to the interface. The current dependency on IFF_NOARP seems unwarranted. We need to listen on the solicited-node address whether or not we intend to initiate Neigbour Discovery ourselves. This fixes a bug where Linux fails to respond to received Neigbour Solicitations on multicast capable links when IFF_NOARP is set. Signed-off-by: Bjørn Mork <bjorn@mork.no> --- I am not at all sure about this... Comments are appreciated. The observed problem is a MBIM mobile broadband modem sending NS to the host. MBIM is a point-to-point USB protocol which does not have any L2 headers at all. It can only transport IPv4 or IPv6 packets. So for IPv4 there is no question at all: ARP just cannot be transported. The driver emulates an ethernet interface, setting IFF_NOARP to make sure the upper layers doesn't attempt to resolve the neighbours non-existing L2 addresses. But then there is this modem which sends IPv6 Neigbour Solicitations to the host over the MBIM transport. The link layer addresses are meaningless, but it seems the modem still expects an answer. Which we will not currently provide, because the NS is addressed to a solicited-node address we don't listen to. So this patch seems like a quick-fix to that problem. But it does change the semantics of IFF_NOARP, making us reply to NS even if this flag is set. Which probably is wrong?
IFF_NOARP seems to be a bit messed up in ipv6. Your patch seems fine to me but I would add protection to the ndisc_rcv and sending routines to do nothing if IFF_NOARP is set for that interface. So it would be possible that you could resolve this issue by just issuing an "ip link set arp on dev <interface>" and won't have hassle with racing interface initialization. Is this a specific bug of the modem you are using or are all devices powered by this driver like this? Greetings, Hannes