6.0-RC1 IPv6 losing local subnet route

SUZUKI Shinsuke suz at kame.net
Sat Oct 29 05:23:19 PDT 2005


Hello all,

>>>>> On Fri, 28 Oct 2005 16:14:16 -0500
>>>>> craig at olyun.gank.org(Craig Boston)  said:

> Knowing that, I can cause it to happen on command by manually
> re-configuring an interface with an address it already has:
> # ifconfig em1 inet6 2002:abcd:ef01:5555::20
> (routes are all normal)
> # ifconfig em1 inet6 2002:abcd:ef01:5555::20
> (prefix route disappears)

I could reproduce your problem, and found out the reason: it's a bug,
not a feature.


In this case, the second ifconfig command removes the old address and
then installs the new one (actually the same one again).  Within
kernel, however, the prefix route is completely removed after 1[s] by
nd6_timer() (this 1[s] timer is set in in6.c in6_control() l.710).

This route-removing timer is invoked after the addition of new
address, and removes the prefix route.  (prefix lifetime is not
properly managed in case of a statically configured address)


Here's the list of possible solutions.  I'm now working on the second
one.  But if you need an immediately solution for 6.0-RELEASE, please
consider the first one.

- in ifconfig, wait for 1[s] between the removal of the old address
  and addition of the new address
  	it immediately works, but people has to wait 1[s] for each
  	address assignment...

- in kernel, properly manages the reference count of nd_prefix and
  remove the nd_prefix only when the reference count becomes 0.
  	There's a KAME code implementing this.
	I'm now porting it, but it'll take some time to check its
	behavior (a day or two)...

Thanks,
----
SUZUKI, Shinsuke @ KAME Project


More information about the freebsd-net mailing list