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?

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