From: Stefan Sperling Subject: Re: Fwd: Re: PPPoE assigns link local fe80::200:0:0:1 instead of fe80::1 To: Bjorn Ketelaars Cc: tech@openbsd.org Date: Tue, 21 Jul 2026 09:14:21 +0200 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); > >