X-Git-Url: https://gitweb.dragonflybsd.org/dragonfly.git/blobdiff_plain/a5dca70a199ab4fffe33a6903ef1b94c7d102d21..5785f5fb36825712d454aa00e3fc225e237465d1:/sys/netinet6/nd6_rtr.c diff --git a/sys/netinet6/nd6_rtr.c b/sys/netinet6/nd6_rtr.c index e24b01dc8c..138b7ef2aa 100644 --- a/sys/netinet6/nd6_rtr.c +++ b/sys/netinet6/nd6_rtr.c @@ -1296,10 +1296,18 @@ pfxlist_onlink_check(void) if (ifa->ia6_ndpr == NULL) /* XXX: see above. */ continue; - if (find_pfxlist_reachable_router(ifa->ia6_ndpr)) - ifa->ia6_flags &= ~IN6_IFF_DETACHED; - else - ifa->ia6_flags |= IN6_IFF_DETACHED; + if (find_pfxlist_reachable_router(ifa->ia6_ndpr)) { + if (ifa->ia6_flags & IN6_IFF_DETACHED) { + ifa->ia6_flags &= ~IN6_IFF_DETACHED; + ifa->ia6_flags |= IN6_IFF_TENTATIVE; + nd6_dad_start((struct ifaddr *)ifa, 0); + } + } else { + if ((ifa->ia6_flags & IN6_IFF_DETACHED) == 0) { + ifa->ia6_flags |= IN6_IFF_DETACHED; + in6_newaddrmsg((struct ifaddr *)ifa); + } + } } } else { @@ -1308,6 +1316,8 @@ pfxlist_onlink_check(void) continue; ifa->ia6_flags &= ~IN6_IFF_DETACHED; + ifa->ia6_flags |= IN6_IFF_TENTATIVE; + nd6_dad_start((struct ifaddr *)ifa, 0); } } }