Fix L2 caching for UDP over IPv6
ip6_output() was missing cache invalidation code analougous to ip_output.c. r304545 disabled L2 caching for UDP/IPv6 as a workaround. This change adds the missing cache invalidation code and reverts r304545. Reviewed by: gnn Approved by: gnn (mentor) Tested by: peter@, Mike Andrews MFC after: 3 weeks Differential Revision: https://reviews.freebsd.org/D7591
This commit is contained in:
parent
9d9e4a34e1
commit
821d0f98a3
@ -87,6 +87,7 @@ __FBSDID("$FreeBSD$");
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/if_var.h>
|
||||
#include <net/if_llatbl.h>
|
||||
#include <net/netisr.h>
|
||||
#include <net/route.h>
|
||||
#include <net/pfil.h>
|
||||
@ -552,6 +553,9 @@ ip6_output(struct mbuf *m0, struct ip6_pktopts *opt,
|
||||
rt = ro->ro_rt;
|
||||
ifp = ro->ro_rt->rt_ifp;
|
||||
} else {
|
||||
if (ro->ro_lle)
|
||||
LLE_FREE(ro->ro_lle); /* zeros ro_lle */
|
||||
ro->ro_lle = NULL;
|
||||
if (fwd_tag == NULL) {
|
||||
bzero(&dst_sa, sizeof(dst_sa));
|
||||
dst_sa.sin6_family = AF_INET6;
|
||||
@ -821,6 +825,9 @@ ip6_output(struct mbuf *m0, struct ip6_pktopts *opt,
|
||||
} else {
|
||||
RO_RTFREE(ro);
|
||||
needfiblookup = 1; /* Redo the routing table lookup. */
|
||||
if (ro->ro_lle)
|
||||
LLE_FREE(ro->ro_lle); /* zeros ro_lle */
|
||||
ro->ro_lle = NULL;
|
||||
}
|
||||
}
|
||||
/* See if fib was changed by packet filter. */
|
||||
@ -829,6 +836,9 @@ ip6_output(struct mbuf *m0, struct ip6_pktopts *opt,
|
||||
fibnum = M_GETFIB(m);
|
||||
RO_RTFREE(ro);
|
||||
needfiblookup = 1;
|
||||
if (ro->ro_lle)
|
||||
LLE_FREE(ro->ro_lle); /* zeros ro_lle */
|
||||
ro->ro_lle = NULL;
|
||||
}
|
||||
if (needfiblookup)
|
||||
goto again;
|
||||
|
@ -898,7 +898,7 @@ udp6_output(struct inpcb *inp, struct mbuf *m, struct sockaddr *addr6,
|
||||
|
||||
UDP_PROBE(send, NULL, inp, ip6, inp, udp6);
|
||||
UDPSTAT_INC(udps_opackets);
|
||||
error = ip6_output(m, optp, NULL, flags,
|
||||
error = ip6_output(m, optp, &inp->inp_route6, flags,
|
||||
inp->in6p_moptions, NULL, inp);
|
||||
break;
|
||||
case AF_INET:
|
||||
|
Loading…
Reference in New Issue
Block a user