From: Roy Marples Date: Mon, 20 Apr 2020 14:31:57 +0000 (+0100) Subject: OpenBSD: set IN6_IFF_AUTOCONF for addresses generated from a RA X-Git-Tag: v9.0.2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0c9c6aacaa8623a0ba553d1b1e0c49aa588972ce;p=thirdparty%2Fdhcpcd.git OpenBSD: set IN6_IFF_AUTOCONF for addresses generated from a RA NetBSD will follow suit once the code in the kernel to handle RA has been removed. --- diff --git a/src/if-bsd.c b/src/if-bsd.c index 973fca1a..47e3e57b 100644 --- a/src/if-bsd.c +++ b/src/if-bsd.c @@ -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;