misc/153200: post-boot /etc/rc.d/network_ipv6 start can miss neighbour discovery bootstrap

George Michaelson ggm at apnic.net
Thu Dec 16 04:50:10 UTC 2010

>Number:         153200
>Category:       misc
>Synopsis:       post-boot /etc/rc.d/network_ipv6 start can miss neighbour discovery bootstrap
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    freebsd-bugs
>State:          open
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Dec 16 04:50:09 UTC 2010
>Originator:     George Michaelson
>Release:        8.1-RELEASE
FreeBSD amchur.rand.apnic.net 8.1-RELEASE FreeBSD 8.1-RELEASE #0: Mon Jul 19 02:36:49 UTC 2010     root at mason.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  amd64
We enabled IPv6 in rc.conf and ran /etc/rc.d/network_ipv6 start.

ifconfig bce0 showed nd6 in an indeterminate state.

Thereafter, while hosts on the local network segment could successfully ping6 the public IPv6, including the edge Cisco router, the cisco lost sight of the host if the packets were NOT emitted from its own binding to the local network segment.

If we pinged the router, it came back, but 20-30sec after we stopped outbound IPv6, inbound routes dropped. on the Cisco:

gw1#sh ipv6 neighbors | inc 6660
2401:2000:6660::102                         0 -               INCMP Gi0/2.113

We rebooted. the system is now showing valid V6 routing all the time, even when the ipv6 neighbors list shows cache ageing.
bootstrap IPv6 after boot time via /etc/rc.d/network_ipv6 start.

route inbound ping6 not on link-local, with passive interface. you should be able to demonstrate this, if your ifconfig shows nd6 has not completed.
add a dependency into network_ipv6 which forces the right kernel sysctl and/or other runtime to enable all link-local, multicast bindings, and to set the interface nd6 state correctly. This might be as simple as a pre-dependency in the startup script.


More information about the freebsd-bugs mailing list