* We should decline the address */
syslog(LOG_WARNING, "%s: DAD detected %s",
ap->iface->name, ap->saddr);
- else
#ifdef IPV6_SEND_DAD
+ else
ipv6_addaddr(ap);
#endif
if (!wascompleted) {
ifp = ap->iface;
state = D6_STATE(ifp);
- if (state->state == DH6S_BOUND) {
+ if (state->state == DH6S_BOUND ||
+ state->state == DH6S_DELEGATED)
+ {
TAILQ_FOREACH(ap, &state->addrs, next) {
if (!ap->dadcompleted) {
wascompleted = 1;
TAILQ_INIT(&state->addrs);
state->state = DH6S_DELEGATED;
+ state->reason = "DELEGATED6";
}
a = calloc(1, sizeof(*a));
len = 1;
/* If all addresses have completed DAD run the script */
TAILQ_FOREACH(ap, &state->addrs, next) {
- if (ap->dadcompleted == 0) {
+ if (ap->onlink && ap->dadcompleted == 0) {
len = 0;
break;
}
struct ll_addr *ap;
struct ll_callback *cb;
+#if 0
+ char buf[INET6_ADDRSTRLEN];
+ inet_ntop(AF_INET6, &addr->s6_addr,
+ buf, INET6_ADDRSTRLEN);
+ syslog(LOG_DEBUG, "%s: cmd %d addr %s flags %d",
+ ifname, cmd, buf, flags);
+#endif
+
/* Safety - ignore tentative announcements */
if (cmd == RTM_NEWADDR && flags & IN6_IFF_TENTATIVE)
return;
* dadcallback function checks it */
ap->dadcompleted = 1;
}
+ break;
}
}