Thread (4 messages) 4 messages, 3 authors, 2004-11-26

Re: IPv6 and netlink

From: Hasso Tepper <hidden>
Date: 2004-11-25 21:13:30

David S. Miller wrote:
On Tue, 23 Nov 2004 23:22:50 +0200
My first letter didn't end in list, seems. Sorry if most of this info will 
be duplicate.
Hasso Tepper [off-list ref] wrote:
quoted
While debugging IPv6 RIB in Quagga routing software I discovered some
issues with kernel rtnetlink messages.

1) RTM_NEWROUTE message with prefix ff00::/8 (if interface goes up or
down) is sent with rtm_type set to RTN_UNICAST. It's multicast route,
so why not RTN_MULTICAST? Is it bug?
What kernel version?  I remember fixing this bug.
We should not be emitting rtnetlink messages for
these any more.
Although my main production platform is 2.4.28, I tested with 2.6.9 (with 
patch added from http://oss.sgi.com/archives/netdev/2004-11/msg00558.html) 
as well. Is this too old already?

I tested now with 2.6.10-rc2-bk8 as well and all these bugs are still there. 
RTM_NEWROUTE messages are sent for both, ff00::/8 and fe80::/64 with 
rtm_type set to RTN_UNICAST and rtm_protocol set to RTPROT_BOOT.
quoted
2) If address is added to the interface, route is created by kernel to
route prefix to the intarface. In IPv4 these routes have rtm_protocol
set to RTPROT_KERNEL if announced it via rtnetlink, but that's not the
case with IPv6. It doesn't matter if address is added by the user or
it's the link local address (fe80::/64 route). Is it intentional or
bug?

3) Not really rtnetlink related, but if this address is removed from
interface, route created by kernel (when address was added) isn't
removed from table. Is it intentional?
I remember fixing these problems too at some point.

In net/ipv6/route.c:rt6_fill_node(), if the RTF_ADDRCONF flag is
set on the route (which is will be set for link-local address
addition routes done by the addrconf layer) then we will set
RTPROT_KERNEL on it.
But I don't see how fe80::/64 could have RTF_ADDRCONF flag. I can see 
setting it only in net/ipv6/addrconf.c:addrconf_prefix_rcv().
For every address deleted on an ipv6 interface we invoke
net/ipv6/addrconf.c:ipv6_ifa_notify() with event set to
RTM_DELADDR.  That causes ip6_del_rt() to be invoked for
that link-local address's route.
OK. Makes sense, but global addresses configured manually? Ie. I mean:

hasso:/home/hasso# ip -6 route | grep 3ffe
hasso:/home/hasso# ip -6 addr add 3ffe::1/64 dev eth0
hasso:/home/hasso# ip -6 route | grep 3ffe
3ffe::/64 dev eth0  metric 256  mtu 1500 advmss 1440 metric10 64
hasso:/home/hasso# ip -6 addr del 3ffe::1/64 dev eth0
hasso:/home/hasso# ip -6 route | grep 3ffe
3ffe::/64 dev eth0  metric 256  mtu 1500 advmss 1440 metric10 64
hasso:/home/hasso#
In the end, I think you're just using an ancient kernel
which didn't have these bug fixes added.
All these issues are there in 2.6.10-rc2-bk8. Is it ancient? Well ... ;)


-- 
Hasso Tepper
Elion Enterprises Ltd.
WAN administrator
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help