changeset 5156:abb54c79cc7f draft

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.
author Roy Marples <roy@marples.name>
date Mon, 20 Apr 2020 15:31:57 +0100
parents a0c82a0a4375
children 5f18174b5eb2
files src/if-bsd.c
diffstat 1 files changed, 7 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/src/if-bsd.c	Mon Apr 20 14:11:00 2020 +0100
+++ b/src/if-bsd.c	Mon Apr 20 15:31:57 2020 +0100
@@ -1015,28 +1015,21 @@
 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;