Changeset View
Changeset View
Standalone View
Standalone View
nd6_nbr.c
Context not available. | |||||
ifa->ifa_ifp ? if_name(ifa->ifa_ifp) : "???"); | ifa->ifa_ifp ? if_name(ifa->ifa_ifp) : "???"); | ||||
return; | return; | ||||
} | } | ||||
if (ia->ia6_flags & IN6_IFF_ANYCAST) { | |||||
ia->ia6_flags &= ~IN6_IFF_TENTATIVE; | |||||
return; | |||||
} | |||||
if (!V_ip6_dad_count) { | |||||
ia->ia6_flags &= ~IN6_IFF_TENTATIVE; | |||||
return; | |||||
} | |||||
if (ifa->ifa_ifp == NULL) | if (ifa->ifa_ifp == NULL) | ||||
panic("nd6_dad_start: ifa->ifa_ifp == NULL"); | panic("nd6_dad_start: ifa->ifa_ifp == NULL"); | ||||
if (ND_IFINFO(ifa->ifa_ifp)->flags & ND6_IFF_NO_DAD) { | if (ia->ia6_flags & IN6_IFF_ANYCAST || | ||||
ia->ia6_flags &= ~IN6_IFF_TENTATIVE; | !V_ip6_dad_count || | ||||
ND_IFINFO(ifa->ifa_ifp)->flags & ND6_IFF_NO_DAD) | |||||
{ | |||||
if (ia->ia6_flags & IN6_IFF_TENTATIVE) { | |||||
ia->ia6_flags &= ~IN6_IFF_TENTATIVE; | |||||
rt_addrmsg(RTM_ADD, ifa, 0); | |||||
} | |||||
return; | return; | ||||
} | } | ||||
if (!(ifa->ifa_ifp->if_flags & IFF_UP) || | if (!(ifa->ifa_ifp->if_flags & IFF_UP) || | ||||
!(ifa->ifa_ifp->if_drv_flags & IFF_DRV_RUNNING) || | !(ifa->ifa_ifp->if_drv_flags & IFF_DRV_RUNNING) || | ||||
(ND_IFINFO(ifa->ifa_ifp)->flags & ND6_IFF_IFDISABLED)) { | (ND_IFINFO(ifa->ifa_ifp)->flags & ND6_IFF_IFDISABLED)) { | ||||
ia->ia6_flags |= IN6_IFF_TENTATIVE; | if (!(ia->ia6_flags & IN6_IFF_TENTATIVE)) { | ||||
ia->ia6_flags |= IN6_IFF_TENTATIVE; | |||||
rt_addrmsg(RTM_ADD, ifa, 0); | |||||
} | |||||
return; | return; | ||||
} | } | ||||
if ((dp = nd6_dad_find(ifa, NULL)) != NULL) { | if ((dp = nd6_dad_find(ifa, NULL)) != NULL) { | ||||
Context not available. | |||||
* again in case that it is changed between the | * again in case that it is changed between the | ||||
* beginning of this function and here. | * beginning of this function and here. | ||||
*/ | */ | ||||
if ((ND_IFINFO(ifp)->flags & ND6_IFF_IFDISABLED) == 0) | if ((ND_IFINFO(ifp)->flags & ND6_IFF_IFDISABLED) == 0) { | ||||
ia->ia6_flags &= ~IN6_IFF_TENTATIVE; | ia->ia6_flags &= ~IN6_IFF_TENTATIVE; | ||||
rt_addrmsg(RTM_ADD, ifa, 0); | |||||
} | |||||
nd6log((LOG_DEBUG, | nd6log((LOG_DEBUG, | ||||
"%s: DAD complete for %s - no duplicates found\n", | "%s: DAD complete for %s - no duplicates found\n", | ||||
Context not available. | |||||
break; | break; | ||||
} | } | ||||
} | } | ||||
rt_addrmsg(RTM_ADD, ifa, 0); | |||||
} | } | ||||
static void | static void | ||||
Context not available. |