Index | Thread | Search

From:
Stefan Sperling <stsp@stsp.name>
Subject:
Re: Fwd: Re: PPPoE assigns link local fe80::200:0:0:1 instead of fe80::1
To:
Bjorn Ketelaars <bket@openbsd.org>
Cc:
tech@openbsd.org
Date:
Tue, 21 Jul 2026 09:14:21 +0200

Download raw body.

Thread
On Tue, Jul 21, 2026 at 07:08:50AM +0200, Bjorn Ketelaars wrote:
> Agree, checking for IFF_POINTOPOINT is more conservative and ensures we
> don't inadvertently alter behaviour for non-P2P interfaces if another
> caller passes an explicit IFID in the future.
> 
> Updated diff below.
> 
> OK?

Thanks, ok stsp@

> diff --git sys/netinet6/in6_ifattach.c sys/netinet6/in6_ifattach.c
> index 975ccbf5056..b1ab5f3437f 100644
> --- sys/netinet6/in6_ifattach.c
> +++ sys/netinet6/in6_ifattach.c
> @@ -244,8 +244,12 @@ in6_ifattach_linklocal(struct ifnet *ifp, struct in6_addr *ifid)
>  		ifra.ifra_addr.sin6_addr.s6_addr16[0] = htons(0xfe80);
>  		ifra.ifra_addr.sin6_addr.s6_addr16[1] = htons(ifp->if_index);
>  		ifra.ifra_addr.sin6_addr.s6_addr32[1] = 0;
> -		ifra.ifra_addr.sin6_addr.s6_addr[8] &= ~EUI64_GBIT;
> -		ifra.ifra_addr.sin6_addr.s6_addr[8] |= EUI64_UBIT;
> +
> +		/* RFC5072: Use negotiated P2P ifid as-is. */
> +		if ((ifp->if_flags & IFF_POINTOPOINT) == 0) {
> +			ifra.ifra_addr.sin6_addr.s6_addr[8] &= ~EUI64_GBIT;
> +			ifra.ifra_addr.sin6_addr.s6_addr[8] |= EUI64_UBIT;
> +		}
>  	} else
>  		in6_get_ifid(ifp, &ifra.ifra_addr.sin6_addr);
>  
>