On Mon, May 12, 2014 at 12:48 +0200, Martin Pieuchot wrote: > On 07/05/14(Wed) 12:46, Martin Pieuchot wrote: > > Diff below stops abusing nd6_rtrequest() for loopback interfaces, which > > means we can remove the special hack below and reduce the differences > > with arp_rtrequest(). > > > > This diff introduces two changes in the inet6 routing table, but they > > should not matter. The first one is that the gateway of the link-local > > entry for loopback interfaces is no longer a buggy link-layer address: > > > > -fe80::1%lo0 link#6 UHL > > 0 0 - 4 lo0 > > +fe80::1%lo0 fe80::1%lo0 UHL > > 0 0 - 4 lo0 > > > > The second one is that every route to network associated to the > > loopback interface will now have the mtu of this interface: > > > > -ff02::/16 ::1 UGRS > > 0 0 - 8 lo0 > > +ff02::/16 ::1 UGRS > > 0 0 33192 8 lo0 > > > > Both changes are consistent with the IPv4 behavior, ok? > > Anyone? >
OK > > > > > > Index: netinet6/in6.c > > =================================================================== > > RCS file: /home/ncvs/src/sys/netinet6/in6.c,v > > retrieving revision 1.136 > > diff -u -p -r1.136 in6.c > > --- netinet6/in6.c 5 May 2014 11:44:33 -0000 1.136 > > +++ netinet6/in6.c 7 May 2014 10:29:24 -0000 > > @@ -1399,7 +1399,7 @@ in6_ifinit(struct ifnet *ifp, struct in6 > > /* Add ownaddr as loopback rtentry, if necessary (ex. on p2p link). */ > > if (newhost) { > > /* set the rtrequest function to create llinfo */ > > - if ((ifp->if_flags & IFF_POINTOPOINT) == 0) > > + if ((ifp->if_flags & (IFF_LOOPBACK | IFF_POINTOPOINT)) == 0) > > ia6->ia_ifa.ifa_rtrequest = nd6_rtrequest; > > > > rt_ifa_addloop(&(ia6->ia_ifa)); > > Index: netinet6/nd6.c > > =================================================================== > > RCS file: /home/ncvs/src/sys/netinet6/nd6.c,v > > retrieving revision 1.116 > > diff -u -p -r1.116 nd6.c > > --- netinet6/nd6.c 7 May 2014 08:14:59 -0000 1.116 > > +++ netinet6/nd6.c 7 May 2014 10:29:24 -0000 > > @@ -1059,20 +1059,14 @@ nd6_rtrequest(int req, struct rtentry *r > > #endif > > /* FALLTHROUGH */ > > case RTM_RESOLVE: > > - if ((ifp->if_flags & (IFF_POINTOPOINT | IFF_LOOPBACK)) == 0) { > > - /* > > - * Address resolution isn't necessary for a point to > > - * point link, so we can skip this test for a p2p link. > > - */ > > - if (gate->sa_family != AF_LINK || > > - gate->sa_len < sizeof(null_sdl)) { > > - log(LOG_DEBUG, "%s: bad gateway value: %s\n", > > - __func__, ifp->if_xname); > > - break; > > - } > > - SDL(gate)->sdl_type = ifp->if_type; > > - SDL(gate)->sdl_index = ifp->if_index; > > + if (gate->sa_family != AF_LINK || > > + gate->sa_len < sizeof(null_sdl)) { > > + log(LOG_DEBUG, "%s: bad gateway value: %s\n", > > + __func__, ifp->if_xname); > > + break; > > } > > + SDL(gate)->sdl_type = ifp->if_type; > > + SDL(gate)->sdl_index = ifp->if_index; > > if (ln != NULL) > > break; /* This happens on a route change */ > > /* > > >