]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
OpenBSD: set IN6_IFF_AUTOCONF for addresses generated from a RA
authorRoy Marples <roy@marples.name>
Mon, 20 Apr 2020 14:31:57 +0000 (15:31 +0100)
committerRoy Marples <roy@marples.name>
Mon, 20 Apr 2020 14:31:57 +0000 (15:31 +0100)
NetBSD will follow suit once the code in the kernel to handle RA
has been removed.

src/if-bsd.c

index 973fca1ac121c5a0de6433f75cc9584761d97c4b..47e3e57be7d35900095cb419e31895ea7a17cc4e 100644 (file)
@@ -1015,28 +1015,21 @@ if_ioctl6(struct dhcpcd_ctx *ctx, unsigned long req, void *data, size_t len)
 int
 if_address6(unsigned char cmd, const struct ipv6_addr *ia)
 {
-       struct in6_aliasreq ifa;
+       struct in6_aliasreq ifa = { .ifra_flags = 0 };
        struct in6_addr mask;
        struct dhcpcd_ctx *ctx = ia->iface->ctx;
 
-       memset(&ifa, 0, sizeof(ifa));
        strlcpy(ifa.ifra_name, ia->iface->name, sizeof(ifa.ifra_name));
-       /*
-        * We should not set IN6_IFF_TENTATIVE as the kernel should be
-        * able to work out if it's a new address or not.
-        *
-        * We should set IN6_IFF_AUTOCONF, but the kernel won't let us.
-        * This is probably a safety measure, but still it's not entirely right
-        * either.
-        */
-#if 0
-       if (ia->autoconf)
-               ifa.ifra_flags |= IN6_IFF_AUTOCONF;
-#endif
 #if defined(__FreeBSD__) || defined(__DragonFly__)
+       /* This is a bug - the kernel should work this out. */
        if (ia->addr_flags & IN6_IFF_TENTATIVE)
                ifa.ifra_flags |= IN6_IFF_TENTATIVE;
 #endif
+// #if (defined(__NetBSD__) && __NetBSD_Version__ >= 999005700) ||
+#if    (defined(__OpenBSD__) && OpenBSD >= 201605)
+       if (ia->flags & IPV6_AF_AUTOCONF)
+               ifa.ifra_flags |= IN6_IFF_AUTOCONF;
+#endif
 #ifdef IPV6_MANAGETEMPADDR
        if (ia->flags & IPV6_AF_TEMPORARY)
                ifa.ifra_flags |= IN6_IFF_TEMPORARY;