diff options
author | gnn <gnn@FreeBSD.org> | 2016-06-02 17:51:29 +0000 |
---|---|---|
committer | gnn <gnn@FreeBSD.org> | 2016-06-02 17:51:29 +0000 |
commit | d75e0c471e231b57a58d0a0f8f77ed359ed0e190 (patch) | |
tree | 35865ebb972dd3afe8974183497a1af7a56b33fc /sys/netinet/in_pcb.c | |
parent | 56e3e42896aee2eb336ee7d14417f427bbf2f505 (diff) | |
download | FreeBSD-src-d75e0c471e231b57a58d0a0f8f77ed359ed0e190.zip FreeBSD-src-d75e0c471e231b57a58d0a0f8f77ed359ed0e190.tar.gz |
This change re-adds L2 caching for TCP and UDP, as originally added in D4306
but removed due to other changes in the system. Restore the llentry pointer
to the "struct route", and use it to cache the L2 lookup (ARP or ND6) as
appropriate.
Submitted by: Mike Karels
Differential Revision: https://reviews.freebsd.org/D6262
Diffstat (limited to 'sys/netinet/in_pcb.c')
-rw-r--r-- | sys/netinet/in_pcb.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c index 50e5d6e..7d5da0e 100644 --- a/sys/netinet/in_pcb.c +++ b/sys/netinet/in_pcb.c @@ -73,6 +73,7 @@ __FBSDID("$FreeBSD$"); #include <net/if.h> #include <net/if_var.h> #include <net/if_types.h> +#include <net/if_llatbl.h> #include <net/route.h> #include <net/rss_config.h> #include <net/vnet.h> @@ -1302,6 +1303,8 @@ in_pcbfree(struct inpcb *inp) RTFREE(inp->inp_route.ro_rt); inp->inp_route.ro_rt = (struct rtentry *)NULL; } + if (inp->inp_route.ro_lle) + LLE_FREE(inp->inp_route.ro_lle); /* zeros ro_lle */ inp->inp_vflag = 0; inp->inp_flags2 |= INP_FREED; @@ -2243,6 +2246,8 @@ in_losing(struct inpcb *inp) RTFREE(inp->inp_route.ro_rt); inp->inp_route.ro_rt = (struct rtentry *)NULL; } + if (inp->inp_route.ro_lle) + LLE_FREE(inp->inp_route.ro_lle); /* zeros ro_lle */ return; } |