Re: Remove p2p loopback hack in nd6_rtrequest()
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%lo0link#6 UHL 00 - 4 lo0 +fe80::1%lo0fe80::1%lo0UHL 00 - 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 ::1UGRS 00 - 8 lo0 +ff02::/16 ::1UGRS 00 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 - 1.136 +++ netinet6/in6.c 7 May 2014 10:29:24 - @@ -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 - 1.116 +++ netinet6/nd6.c 7 May 2014 10:29:24 - @@ -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 */ /*
Re: Remove p2p loopback hack in nd6_rtrequest()
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%lo0link#6 UHL 00 - 4 lo0 +fe80::1%lo0fe80::1%lo0UHL 00 - 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 ::1UGRS 00 - 8 lo0 +ff02::/16 ::1UGRS 00 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.c5 May 2014 11:44:33 - 1.136 +++ netinet6/in6.c7 May 2014 10:29:24 - @@ -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.c7 May 2014 08:14:59 - 1.116 +++ netinet6/nd6.c7 May 2014 10:29:24 - @@ -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 */ /*
Remove p2p loopback hack in nd6_rtrequest()
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%lo0link#6 UHL 00 - 4 lo0 +fe80::1%lo0fe80::1%lo0UHL 00 - 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 ::1UGRS 00 - 8 lo0 +ff02::/16 ::1UGRS 00 33192 8 lo0 Both changes are consistent with the IPv4 behavior, 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 - 1.136 +++ netinet6/in6.c 7 May 2014 10:29:24 - @@ -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 - 1.116 +++ netinet6/nd6.c 7 May 2014 10:29:24 - @@ -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 */ /*