Date: Wed, 4 Apr 2007 22:18:15 +0100 From: Andrew McDonald <andrew@mcdonald.org.uk> To: freebsd-net@freebsd.org Subject: IPv6 Router Alert breaks forwarding Message-ID: <20070404211815.GA6798@mcdonald.org.uk>
next in thread | raw e-mail | index | archive | help
Hi, Currently the IPv6 stack, when acting as a router and forwarding traffic, treats any packet with a Router Alert hop-by-hop option as 'ours' and sends it to the local stack. This stops the packet from being forwarded any further, and also results in ICMPv6 Destination Unreachable message being sent back. This isn't the behaviour specified by RFC2711, where the intention is that "routers should examine this datagram more closely" with the router's interest and actions being specified by particular protocol RFCs. i.e. if the router isn't interested it should ignore the packet and forward it as normal. The responsible bit of code is in src/sys/netinet6/ip6_input.c: /* * accept the packet if a router alert option is included * and we act as an IPv6 router. */ if (rtalert != ~0 && ip6_forwarding) ours = 1; I'm not sure what the 'proper' fix should be, since it probably requires interactions with userspace to determine if there is something interested in processing the packet. Linux uses a sockopt to indicate that a raw socket should receive packets with the router alert option. In the absence of a full fix, it would probably be a good idea to remove this unconditional check. This would avoid FreeBSD blocking IPv6 packets with router alert set. However, I'm not sure if this would have an impact on MLD. For reference, the IPv4 stack ignores Router Alert options, though it does do special processing for IPPROTO_RSVP if there is a RSVP daemon running. -- Andrew McDonald E-mail: andrew@mcdonald.org.uk http://www.mcdonald.org.uk/andrew/
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070404211815.GA6798>