Not all prefixes are autoconfable.
#endif
}
#elif IFA_F_MANAGETEMPADDR
- if (ia->flags & IPV6_AF_AUTOCONF &&
- ipv6_ifidlen(ia->iface) + ia->prefix_len == 128)
+ if (ia->flags & IPV6_AF_AUTOCONF && IA6_CANAUTOCONF(ia))
flags |= IFA_F_MANAGETEMPADDR;
#endif
#ifdef IFA_F_NOPREFIXROUTE
/* Interface identifier length. Prefix + this == 128 for autoconf */
#define ipv6_ifidlen(ifp) 64
+#define IA6_CANAUTOCONF(ia) \
+ ((ia)->prefix_len + ipv6_ifidlen((ia)->iface) == 128)
#ifndef IN6_ARE_MASKED_ADDR_EQUAL
#define IN6_ARE_MASKED_ADDR_EQUAL(d, a, m) ( \
* Because ap->dadcounter is always increamented,
* a different address is generated. */
/* XXX Cache DAD counter per prefix/id/ssid? */
- if (ifp->options->options & DHCPCD_SLAACPRIVATE) {
+ if (ifp->options->options & DHCPCD_SLAACPRIVATE &&
+ IA6_CANAUTOCONF(ia))
+ {
unsigned int delay;
if (ia->dadcounter >= IDGEN_RETRIES) {
/* RFC4941 Section 3.3.3 */
if (ap->flags & IPV6_AF_AUTOCONF &&
ip6_use_tempaddr(ap->iface->name) &&
- ipv6_ifidlen(ap->iface) + ap->prefix_len == 128)
+ IA6_CANAUTOCONF(ap))
{
if (!new_ap) {
if (ipv6_settemptime(ap, 1) == NULL)