Mercurial > hg > dhcpcd
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;
