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 */
> >             /*
> > 
> 

Reply via email to