On Thu, Jun 16, 2022 at 05:48:48PM +0200, Claudio Jeker wrote: > Copy the version of the __KAME__ hack from route/show.c and more > importantly copy the address after modifying the sa.
ok > > This only affects IPv6 link local addresses which are not really used by > bgpd. Still happy if a few more people can give this a spin. > -- > :wq Claudio > > ? obj > Index: util.c > =================================================================== > RCS file: /cvs/src/usr.sbin/bgpd/util.c,v > retrieving revision 1.64 > diff -u -p -r1.64 util.c > --- util.c 16 Jun 2022 15:33:05 -0000 1.64 > +++ util.c 16 Jun 2022 15:46:09 -0000 > @@ -897,24 +897,24 @@ sa2addr(struct sockaddr *sa, struct bgpd > break; > case AF_INET6: > addr->aid = AID_INET6; > - memcpy(&addr->v6, &sa_in6->sin6_addr, sizeof(addr->v6)); > #ifdef __KAME__ > /* > * XXX thanks, KAME, for this ugliness... > * adopted from route/show.c > */ > - if (IN6_IS_ADDR_LINKLOCAL(&sa_in6->sin6_addr) || > - IN6_IS_ADDR_MC_LINKLOCAL(&sa_in6->sin6_addr)) { > + if ((IN6_IS_ADDR_LINKLOCAL(&sa_in6->sin6_addr) || > + IN6_IS_ADDR_MC_LINKLOCAL(&sa_in6->sin6_addr) || > + IN6_IS_ADDR_MC_INTFACELOCAL(&sa_in6->sin6_addr)) && > + sa_in6->sin6_scope_id == 0) { > uint16_t tmp16; > memcpy(&tmp16, &sa_in6->sin6_addr.s6_addr[2], > sizeof(tmp16)); > - if (tmp16 != 0) { > - sa_in6->sin6_scope_id = ntohs(tmp16); > - sa_in6->sin6_addr.s6_addr[2] = 0; > - sa_in6->sin6_addr.s6_addr[3] = 0; > - } > + sa_in6->sin6_scope_id = ntohs(tmp16); > + sa_in6->sin6_addr.s6_addr[2] = 0; > + sa_in6->sin6_addr.s6_addr[3] = 0; > } > #endif > + memcpy(&addr->v6, &sa_in6->sin6_addr, sizeof(addr->v6)); > addr->scope_id = sa_in6->sin6_scope_id; /* I hate v6 */ > if (port) > *port = ntohs(sa_in6->sin6_port); >