Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 22 Apr 2017 18:55:26 +0000 (UTC)
From:      Mike Karels <karels@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r317286 - stable/11/sys/netinet
Message-ID:  <201704221855.v3MItQOD035538@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: karels
Date: Sat Apr 22 18:55:25 2017
New Revision: 317286
URL: https://svnweb.freebsd.org/changeset/base/317286

Log:
  MFC r316065: Enable route and LLE (ndp) caching in TCP/IPv6
  
  tcp_output.c was using a route on the stack for IPv6, which does not
  allow route caching or LLE/ndp caching. Switch to using the route
  (v6 flavor) in the in_pcb, which was already present, which caches
  both L3 and L2 lookups.
  
  Reviewed by:	gnn hiren

Modified:
  stable/11/sys/netinet/tcp_output.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/netinet/tcp_output.c
==============================================================================
--- stable/11/sys/netinet/tcp_output.c	Sat Apr 22 18:43:15 2017	(r317285)
+++ stable/11/sys/netinet/tcp_output.c	Sat Apr 22 18:55:25 2017	(r317286)
@@ -1365,9 +1365,6 @@ send:
 	 */
 #ifdef INET6
 	if (isipv6) {
-		struct route_in6 ro;
-
-		bzero(&ro, sizeof(ro));
 		/*
 		 * we separately set hoplimit for every segment, since the
 		 * user might want to change the value via setsockopt.
@@ -1399,13 +1396,13 @@ send:
 #endif
 
 		/* TODO: IPv6 IP6TOS_ECT bit on */
-		error = ip6_output(m, tp->t_inpcb->in6p_outputopts, &ro,
+		error = ip6_output(m, tp->t_inpcb->in6p_outputopts,
+		    &tp->t_inpcb->inp_route6,
 		    ((so->so_options & SO_DONTROUTE) ?  IP_ROUTETOIF : 0),
 		    NULL, NULL, tp->t_inpcb);
 
-		if (error == EMSGSIZE && ro.ro_rt != NULL)
-			mtu = ro.ro_rt->rt_mtu;
-		RO_RTFREE(&ro);
+		if (error == EMSGSIZE && tp->t_inpcb->inp_route6.ro_rt != NULL)
+			mtu = tp->t_inpcb->inp_route6.ro_rt->rt_mtu;
 	}
 #endif /* INET6 */
 #if defined(INET) && defined(INET6)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201704221855.v3MItQOD035538>