Download raw body.
PPPoE assigns link local fe80::200:0:0:1 instead of fe80::1
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);
>
>
PPPoE assigns link local fe80::200:0:0:1 instead of fe80::1