Re: Kill in_localaddr()
On 2014/04/24 16:41, Martin Pieuchot wrote: in_localaddr() is used only once in our tree and only if the sysctl net.inet.ip.mtudisc is set to 0. It is used to optimize the size of the MSS if the forward address correspond to a host on one of our subnets. Since it's an optimization for a special case that's not enabled by default, I'd like to kill it to remove one usage of the global list of IPv4 addresses. Is this definitely just an optimization or is it needed in order to set the correct mss on packets to a local destination? (I do set mtudisc=0 on boxes doing dynamic routing, to avoid one source of cloned routes which sometimes get in the way when restarting routing protocol daemons). Index: netinet/in.c === RCS file: /home/ncvs/src/sys/netinet/in.c,v retrieving revision 1.95 diff -u -p -r1.95 in.c --- netinet/in.c 10 Apr 2014 13:47:21 - 1.95 +++ netinet/in.c 24 Apr 2014 14:33:43 - @@ -99,22 +99,6 @@ int in_scrubprefix(struct in_ifaddr *); int in_addhost(struct in_ifaddr *); int in_scrubhost(struct in_ifaddr *); -/* Return 1 if an internet address is for a directly connected host */ -int -in_localaddr(struct in_addr in, u_int rdomain) -{ - struct in_ifaddr *ia; - - rdomain = rtable_l2(rdomain); - TAILQ_FOREACH(ia, in_ifaddr, ia_list) { - if (ia-ia_ifp-if_rdomain != rdomain) - continue; - if ((in.s_addr ia-ia_netmask) == ia-ia_net) - return (1); - } - return (0); -} - /* * Determine whether an IP address is in a reserved set of addresses * that may not be forwarded, or whether datagrams to that destination Index: netinet/in.h === RCS file: /home/ncvs/src/sys/netinet/in.h,v retrieving revision 1.107 diff -u -p -r1.107 in.h --- netinet/in.h 21 Apr 2014 10:07:58 - 1.107 +++ netinet/in.h 24 Apr 2014 14:33:43 - @@ -778,7 +778,6 @@ int in_broadcast(struct in_addr, stru int in_canforward(struct in_addr); int in_cksum(struct mbuf *, int); int in4_cksum(struct mbuf *, u_int8_t, int, int); -int in_localaddr(struct in_addr, u_int); voidin_proto_cksum_out(struct mbuf *, struct ifnet *); voidin_ifdetach(struct ifnet *); int in_mask2len(struct in_addr *); Index: netinet/tcp_input.c === RCS file: /home/ncvs/src/sys/netinet/tcp_input.c,v retrieving revision 1.275 diff -u -p -r1.275 tcp_input.c --- netinet/tcp_input.c 21 Apr 2014 12:22:26 - 1.275 +++ netinet/tcp_input.c 24 Apr 2014 14:33:43 - @@ -3040,7 +3040,6 @@ tcp_mss(struct tcpcb *tp, int offer) goto out; } -#ifdef RTV_MTU /* * if there's an mtu associated with the route and we support * path MTU discovery for the underlying protocol family, use it. @@ -3058,23 +3057,21 @@ tcp_mss(struct tcpcb *tp, int offer) */ mss = IPV6_MMTU - iphlen - sizeof(struct ip6_frag) - sizeof(struct tcphdr); - } else - mss = rt-rt_rmx.rmx_mtu - iphlen - sizeof(struct tcphdr); - } else -#endif /* RTV_MTU */ - if (!ifp) + } else { + mss = rt-rt_rmx.rmx_mtu - iphlen - + sizeof(struct tcphdr); + } + } else if (!ifp) { /* * ifp may be null and rmx_mtu may be zero in certain * v6 cases (e.g., if ND wasn't able to resolve the * destination host. */ goto out; - else if (ifp-if_flags IFF_LOOPBACK) + } else if (ifp-if_flags IFF_LOOPBACK) { mss = ifp-if_mtu - iphlen - sizeof(struct tcphdr); - else if (tp-pf == AF_INET) { + } else if (tp-pf == AF_INET) { if (ip_mtudisc) - mss = ifp-if_mtu - iphlen - sizeof(struct tcphdr); - else if (inp in_localaddr(inp-inp_faddr, inp-inp_rtableid)) mss = ifp-if_mtu - iphlen - sizeof(struct tcphdr); } #ifdef INET6
Re: Kill in_localaddr()
On 25/04/14(Fri) 10:58, Stuart Henderson wrote: On 2014/04/24 16:41, Martin Pieuchot wrote: in_localaddr() is used only once in our tree and only if the sysctl net.inet.ip.mtudisc is set to 0. It is used to optimize the size of the MSS if the forward address correspond to a host on one of our subnets. Since it's an optimization for a special case that's not enabled by default, I'd like to kill it to remove one usage of the global list of IPv4 addresses. Is this definitely just an optimization or is it needed in order to set the correct mss on packets to a local destination? It is just an optimization is will now use the default size defined by net.inet.tcp.mssdflt as max instead of the mtu of the interface. (I do set mtudisc=0 on boxes doing dynamic routing, to avoid one source of cloned routes which sometimes get in the way when restarting routing protocol daemons). Maybe it makes sense to be able to clean such routes instead. Index: netinet/in.c === RCS file: /home/ncvs/src/sys/netinet/in.c,v retrieving revision 1.95 diff -u -p -r1.95 in.c --- netinet/in.c10 Apr 2014 13:47:21 - 1.95 +++ netinet/in.c24 Apr 2014 14:33:43 - @@ -99,22 +99,6 @@ int in_scrubprefix(struct in_ifaddr *); int in_addhost(struct in_ifaddr *); int in_scrubhost(struct in_ifaddr *); -/* Return 1 if an internet address is for a directly connected host */ -int -in_localaddr(struct in_addr in, u_int rdomain) -{ - struct in_ifaddr *ia; - - rdomain = rtable_l2(rdomain); - TAILQ_FOREACH(ia, in_ifaddr, ia_list) { - if (ia-ia_ifp-if_rdomain != rdomain) - continue; - if ((in.s_addr ia-ia_netmask) == ia-ia_net) - return (1); - } - return (0); -} - /* * Determine whether an IP address is in a reserved set of addresses * that may not be forwarded, or whether datagrams to that destination Index: netinet/in.h === RCS file: /home/ncvs/src/sys/netinet/in.h,v retrieving revision 1.107 diff -u -p -r1.107 in.h --- netinet/in.h21 Apr 2014 10:07:58 - 1.107 +++ netinet/in.h24 Apr 2014 14:33:43 - @@ -778,7 +778,6 @@ intin_broadcast(struct in_addr, stru int in_canforward(struct in_addr); int in_cksum(struct mbuf *, int); int in4_cksum(struct mbuf *, u_int8_t, int, int); -int in_localaddr(struct in_addr, u_int); void in_proto_cksum_out(struct mbuf *, struct ifnet *); void in_ifdetach(struct ifnet *); int in_mask2len(struct in_addr *); Index: netinet/tcp_input.c === RCS file: /home/ncvs/src/sys/netinet/tcp_input.c,v retrieving revision 1.275 diff -u -p -r1.275 tcp_input.c --- netinet/tcp_input.c 21 Apr 2014 12:22:26 - 1.275 +++ netinet/tcp_input.c 24 Apr 2014 14:33:43 - @@ -3040,7 +3040,6 @@ tcp_mss(struct tcpcb *tp, int offer) goto out; } -#ifdef RTV_MTU /* * if there's an mtu associated with the route and we support * path MTU discovery for the underlying protocol family, use it. @@ -3058,23 +3057,21 @@ tcp_mss(struct tcpcb *tp, int offer) */ mss = IPV6_MMTU - iphlen - sizeof(struct ip6_frag) - sizeof(struct tcphdr); - } else - mss = rt-rt_rmx.rmx_mtu - iphlen - sizeof(struct tcphdr); - } else -#endif /* RTV_MTU */ - if (!ifp) + } else { + mss = rt-rt_rmx.rmx_mtu - iphlen - + sizeof(struct tcphdr); + } + } else if (!ifp) { /* * ifp may be null and rmx_mtu may be zero in certain * v6 cases (e.g., if ND wasn't able to resolve the * destination host. */ goto out; - else if (ifp-if_flags IFF_LOOPBACK) + } else if (ifp-if_flags IFF_LOOPBACK) { mss = ifp-if_mtu - iphlen - sizeof(struct tcphdr); - else if (tp-pf == AF_INET) { + } else if (tp-pf == AF_INET) { if (ip_mtudisc) - mss = ifp-if_mtu - iphlen - sizeof(struct tcphdr); - else if (inp in_localaddr(inp-inp_faddr, inp-inp_rtableid)) mss = ifp-if_mtu - iphlen - sizeof(struct tcphdr); } #ifdef INET6
Kill in_localaddr()
in_localaddr() is used only once in our tree and only if the sysctl net.inet.ip.mtudisc is set to 0. It is used to optimize the size of the MSS if the forward address correspond to a host on one of our subnets. Since it's an optimization for a special case that's not enabled by default, I'd like to kill it to remove one usage of the global list of IPv4 addresses. While here get rid of the #ifdef RTV_MTU, it is here. ok? Index: netinet/in.c === RCS file: /home/ncvs/src/sys/netinet/in.c,v retrieving revision 1.95 diff -u -p -r1.95 in.c --- netinet/in.c10 Apr 2014 13:47:21 - 1.95 +++ netinet/in.c24 Apr 2014 14:33:43 - @@ -99,22 +99,6 @@ int in_scrubprefix(struct in_ifaddr *); int in_addhost(struct in_ifaddr *); int in_scrubhost(struct in_ifaddr *); -/* Return 1 if an internet address is for a directly connected host */ -int -in_localaddr(struct in_addr in, u_int rdomain) -{ - struct in_ifaddr *ia; - - rdomain = rtable_l2(rdomain); - TAILQ_FOREACH(ia, in_ifaddr, ia_list) { - if (ia-ia_ifp-if_rdomain != rdomain) - continue; - if ((in.s_addr ia-ia_netmask) == ia-ia_net) - return (1); - } - return (0); -} - /* * Determine whether an IP address is in a reserved set of addresses * that may not be forwarded, or whether datagrams to that destination Index: netinet/in.h === RCS file: /home/ncvs/src/sys/netinet/in.h,v retrieving revision 1.107 diff -u -p -r1.107 in.h --- netinet/in.h21 Apr 2014 10:07:58 - 1.107 +++ netinet/in.h24 Apr 2014 14:33:43 - @@ -778,7 +778,6 @@ intin_broadcast(struct in_addr, stru int in_canforward(struct in_addr); int in_cksum(struct mbuf *, int); int in4_cksum(struct mbuf *, u_int8_t, int, int); -int in_localaddr(struct in_addr, u_int); void in_proto_cksum_out(struct mbuf *, struct ifnet *); void in_ifdetach(struct ifnet *); int in_mask2len(struct in_addr *); Index: netinet/tcp_input.c === RCS file: /home/ncvs/src/sys/netinet/tcp_input.c,v retrieving revision 1.275 diff -u -p -r1.275 tcp_input.c --- netinet/tcp_input.c 21 Apr 2014 12:22:26 - 1.275 +++ netinet/tcp_input.c 24 Apr 2014 14:33:43 - @@ -3040,7 +3040,6 @@ tcp_mss(struct tcpcb *tp, int offer) goto out; } -#ifdef RTV_MTU /* * if there's an mtu associated with the route and we support * path MTU discovery for the underlying protocol family, use it. @@ -3058,23 +3057,21 @@ tcp_mss(struct tcpcb *tp, int offer) */ mss = IPV6_MMTU - iphlen - sizeof(struct ip6_frag) - sizeof(struct tcphdr); - } else - mss = rt-rt_rmx.rmx_mtu - iphlen - sizeof(struct tcphdr); - } else -#endif /* RTV_MTU */ - if (!ifp) + } else { + mss = rt-rt_rmx.rmx_mtu - iphlen - + sizeof(struct tcphdr); + } + } else if (!ifp) { /* * ifp may be null and rmx_mtu may be zero in certain * v6 cases (e.g., if ND wasn't able to resolve the * destination host. */ goto out; - else if (ifp-if_flags IFF_LOOPBACK) + } else if (ifp-if_flags IFF_LOOPBACK) { mss = ifp-if_mtu - iphlen - sizeof(struct tcphdr); - else if (tp-pf == AF_INET) { + } else if (tp-pf == AF_INET) { if (ip_mtudisc) - mss = ifp-if_mtu - iphlen - sizeof(struct tcphdr); - else if (inp in_localaddr(inp-inp_faddr, inp-inp_rtableid)) mss = ifp-if_mtu - iphlen - sizeof(struct tcphdr); } #ifdef INET6
Re: Kill in_localaddr()
On 24 April 2014 16:41, Martin Pieuchot mpieuc...@nolizard.org wrote: in_localaddr() is used only once in our tree and only if the sysctl net.inet.ip.mtudisc is set to 0. It is used to optimize the size of the MSS if the forward address correspond to a host on one of our subnets. Since it's an optimization for a special case that's not enabled by default, I'd like to kill it to remove one usage of the global list of IPv4 addresses. While here get rid of the #ifdef RTV_MTU, it is here. ok? OK
Re: Kill in_localaddr()
On Thu, Apr 24, 2014 at 04:41:06PM +0200, Martin Pieuchot wrote: in_localaddr() is used only once in our tree and only if the sysctl net.inet.ip.mtudisc is set to 0. It is used to optimize the size of the MSS if the forward address correspond to a host on one of our subnets. Since it's an optimization for a special case that's not enabled by default, I'd like to kill it to remove one usage of the global list of IPv4 addresses. While here get rid of the #ifdef RTV_MTU, it is here. ok? OK bluhm@ Index: netinet/in.c === RCS file: /home/ncvs/src/sys/netinet/in.c,v retrieving revision 1.95 diff -u -p -r1.95 in.c --- netinet/in.c 10 Apr 2014 13:47:21 - 1.95 +++ netinet/in.c 24 Apr 2014 14:33:43 - @@ -99,22 +99,6 @@ int in_scrubprefix(struct in_ifaddr *); int in_addhost(struct in_ifaddr *); int in_scrubhost(struct in_ifaddr *); -/* Return 1 if an internet address is for a directly connected host */ -int -in_localaddr(struct in_addr in, u_int rdomain) -{ - struct in_ifaddr *ia; - - rdomain = rtable_l2(rdomain); - TAILQ_FOREACH(ia, in_ifaddr, ia_list) { - if (ia-ia_ifp-if_rdomain != rdomain) - continue; - if ((in.s_addr ia-ia_netmask) == ia-ia_net) - return (1); - } - return (0); -} - /* * Determine whether an IP address is in a reserved set of addresses * that may not be forwarded, or whether datagrams to that destination Index: netinet/in.h === RCS file: /home/ncvs/src/sys/netinet/in.h,v retrieving revision 1.107 diff -u -p -r1.107 in.h --- netinet/in.h 21 Apr 2014 10:07:58 - 1.107 +++ netinet/in.h 24 Apr 2014 14:33:43 - @@ -778,7 +778,6 @@ int in_broadcast(struct in_addr, stru int in_canforward(struct in_addr); int in_cksum(struct mbuf *, int); int in4_cksum(struct mbuf *, u_int8_t, int, int); -int in_localaddr(struct in_addr, u_int); voidin_proto_cksum_out(struct mbuf *, struct ifnet *); voidin_ifdetach(struct ifnet *); int in_mask2len(struct in_addr *); Index: netinet/tcp_input.c === RCS file: /home/ncvs/src/sys/netinet/tcp_input.c,v retrieving revision 1.275 diff -u -p -r1.275 tcp_input.c --- netinet/tcp_input.c 21 Apr 2014 12:22:26 - 1.275 +++ netinet/tcp_input.c 24 Apr 2014 14:33:43 - @@ -3040,7 +3040,6 @@ tcp_mss(struct tcpcb *tp, int offer) goto out; } -#ifdef RTV_MTU /* * if there's an mtu associated with the route and we support * path MTU discovery for the underlying protocol family, use it. @@ -3058,23 +3057,21 @@ tcp_mss(struct tcpcb *tp, int offer) */ mss = IPV6_MMTU - iphlen - sizeof(struct ip6_frag) - sizeof(struct tcphdr); - } else - mss = rt-rt_rmx.rmx_mtu - iphlen - sizeof(struct tcphdr); - } else -#endif /* RTV_MTU */ - if (!ifp) + } else { + mss = rt-rt_rmx.rmx_mtu - iphlen - + sizeof(struct tcphdr); + } + } else if (!ifp) { /* * ifp may be null and rmx_mtu may be zero in certain * v6 cases (e.g., if ND wasn't able to resolve the * destination host. */ goto out; - else if (ifp-if_flags IFF_LOOPBACK) + } else if (ifp-if_flags IFF_LOOPBACK) { mss = ifp-if_mtu - iphlen - sizeof(struct tcphdr); - else if (tp-pf == AF_INET) { + } else if (tp-pf == AF_INET) { if (ip_mtudisc) - mss = ifp-if_mtu - iphlen - sizeof(struct tcphdr); - else if (inp in_localaddr(inp-inp_faddr, inp-inp_rtableid)) mss = ifp-if_mtu - iphlen - sizeof(struct tcphdr); } #ifdef INET6