Re: Kill in_localaddr()

2014-04-25 Thread Stuart Henderson
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()

2014-04-25 Thread Martin Pieuchot
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()

2014-04-24 Thread Martin Pieuchot
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()

2014-04-24 Thread Mike Belopuhov
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()

2014-04-24 Thread Alexander Bluhm
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