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
MFC after:	2 weeks
This commit is contained in:
Mike Karels 2017-03-27 23:48:36 +00:00
parent fa370b1a25
commit 4a5c6c6ab0
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=316065

View File

@ -1377,9 +1377,6 @@ tcp_output(struct tcpcb *tp)
*/
#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.
@ -1411,13 +1408,13 @@ tcp_output(struct tcpcb *tp)
#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)