From: Roy Marples Date: Sun, 9 Jun 2013 08:37:01 +0000 (+0000) Subject: Only wait for DAD to complete for RA addresses marked for autoconf. X-Git-Tag: v6.0.0~35 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a824f281824cd66f7e9149c17e2b38c2ad8a315e;p=thirdparty%2Fdhcpcd.git Only wait for DAD to complete for RA addresses marked for autoconf. Thanks to Jayce Lee. --- diff --git a/ipv6rs.c b/ipv6rs.c index 5652cd47..0ce4d985 100644 --- a/ipv6rs.c +++ b/ipv6rs.c @@ -414,7 +414,9 @@ ipv6rs_scriptrun(struct ra *rap) /* If all addresses have completed DAD run the script */ TAILQ_FOREACH(ap, &rap->addrs, next) { - if (ap->flags & IPV6_AF_ONLINK) { + if ((ap->flags & (IPV6_AF_ONLINK | IPV6_AF_AUTOCONF)) == + (IPV6_AF_ONLINK | IPV6_AF_AUTOCONF)) + { if (!(ap->flags & IPV6_AF_DADCOMPLETED) && ipv6_findaddr(ap->iface, &ap->addr)) ap->flags |= IPV6_AF_DADCOMPLETED; @@ -486,7 +488,9 @@ ipv6rs_dadcallback(void *arg) continue; wascompleted = 1; TAILQ_FOREACH(rapap, &rap->addrs, next) { - if ((rapap->flags & IPV6_AF_DADCOMPLETED) == 0){ + if (rapap->flags & IPV6_AF_AUTOCONF && + (rapap->flags & IPV6_AF_DADCOMPLETED) == 0) + { wascompleted = 0; break; } @@ -755,7 +759,7 @@ ipv6rs_handledata(__unused void *arg) break; } ap->iface = rap->iface; - ap->flags = IPV6_AF_NEW | IPV6_AF_AUTOCONF; + ap->flags = IPV6_AF_NEW; ap->prefix_len = pi->nd_opt_pi_prefix_len; memcpy(ap->prefix.s6_addr, pi->nd_opt_pi_prefix.s6_addr, @@ -763,6 +767,7 @@ ipv6rs_handledata(__unused void *arg) if (pi->nd_opt_pi_flags_reserved & ND_OPT_PI_FLAG_AUTO) { + ap->flags |= IPV6_AF_AUTOCONF; ipv6_makeaddr(&ap->addr, ifp, &ap->prefix, pi->nd_opt_pi_prefix_len);