Cater for various prefix lengths when using temporay addresses.
#endif
}
#elif IFA_F_MANAGETEMPADDR
- if (ia->flags & IPV6_AF_AUTOCONF)
+ if (ia->flags & IPV6_AF_AUTOCONF &&
+ ipv6_ifidlen(ia->iface) + ia->prefix_len == 128)
flags |= IFA_F_MANAGETEMPADDR;
#endif
#ifdef IFA_F_NOPREFIXROUTE
#define IDGEN_RETRIES 3
#define IDGEN_DELAY 1 /* second */
+/* Interface identifier length. Prefix + this == 128 for autoconf */
+#define ipv6_ifidlen(ifp) 64
+
#ifndef IN6_ARE_MASKED_ADDR_EQUAL
#define IN6_ARE_MASKED_ADDR_EQUAL(d, a, m) ( \
(((d)->s6_addr32[0] ^ (a)->s6_addr32[0]) & (m)->s6_addr32[0]) == 0 && \
#ifdef IPV6_MANAGETEMPADDR
/* RFC4941 Section 3.3.3 */
if (ap->flags & IPV6_AF_AUTOCONF &&
- ip6_use_tempaddr(ap->iface->name))
+ ip6_use_tempaddr(ap->iface->name) &&
+ ipv6_ifidlen(ap->iface) + ap->prefix_len == 128)
{
if (!new_ap) {
if (ipv6_settemptime(ap, 1) == NULL)