#endif
#ifdef IPV6_MANAGETEMPADDR
-#if !defined(IPV6CTL_TEMPVLTIME)
+#ifndef IPV6CTL_TEMPVLTIME
+#define get_inet6_sysctlbyname(code) inet6_sysctlbyname(code, 0, 0)
+#define set_inet6_sysctlbyname(code, val) inet6_sysctlbyname(code, val, 1)
static int
-get_sysctlbyname(const char *name)
+inet6_sysctlbyname(const char *name, int val, int action)
{
-#ifdef __OpenBSD__
- /* OpenBSD seems to have it enabled by default .... */
-
- UNUSED(name);
- return -1;
-#else
- int val;
size_t size;
size = sizeof(val);
+ if (action) {
+ if (sysctlbyname(name, NULL, 0, &val, size) == -1)
+ return -1;
+ return 0;
+ }
if (sysctlbyname(name, &val, &size, NULL, 0) == -1)
return -1;
return val;
-#endif
}
#endif
#ifdef IPV6CTL_USETEMPADDR
val = get_inet6_sysctl(IPV6CTL_USETEMPADDR);
#else
- val = get_sysctlbyname("net.inet6.ip6.use_tempaddr");
+ val = get_inet6_sysctlbyname("net.inet6.ip6.use_tempaddr");
#endif
return val == -1 ? 0 : val;
}
#ifdef IPV6CTL_TEMPPLTIME
val = get_inet6_sysctl(IPV6CTL_TEMPPLTIME);
#else
- val = get_sysctlbyname("net.inet6.ip6.temppltime");
+ val = get_inet6_sysctlbyname("net.inet6.ip6.temppltime");
#endif
return val < 0 ? TEMP_PREFERRED_LIFETIME : val;
}
#ifdef IPV6CTL_TEMPVLTIME
val = get_inet6_sysctl(IPV6CTL_TEMPVLTIME);
#else
- val = get_sysctlbyname("net.inet6.ip6.tempvltime");
+ val = get_inet6_sysctlbyname("net.inet6.ip6.tempvltime");
#endif
return val < 0 ? TEMP_VALID_LIFETIME : val;
}
return;
}
- if (!(flags & IN6_IFF_TENTATIVE)) {
+ if (!(ia->addr_flags & IN6_IFF_TENTATIVE)) {
/* Simulate the kernel announcing the new address. */
ipv6_handleifa(ia->iface->ctx, RTM_NEWADDR,
ia->iface->ctx->ifaces, ia->iface->name,
* Some BSDs do not allow userland to set temporary addresses.
* Linux-3.18 allows the marking of addresses from which to manage temp addrs.
*/
-#if defined(BSD)
-# if !defined(IN6_IFF_TEMPORARY) && defined(IN6_IFF_PRIVACY)
- /* OpenBSD just has to be different... */
-# define IN6_IFF_TEMPORARY IN6_IFF_PRIVACY
-# endif
-# if defined(IN6_IFF_TEMPORARY)
-# define IPV6_MANAGETEMPADDR
-# endif
+#if defined(BSD) && defined(IN6_IFF_TEMPORARY)
+#define IPV6_MANAGETEMPADDR
#endif
/*