opnsense-src/sys/netinet6
Navdeep Parhar b092fd6c97 if_vxlan(4): add support for hardware assisted checksumming, TSO, and RSS.
This lets a VXLAN pseudo-interface take advantage of hardware checksumming (tx
and rx), TSO, and RSS if the NIC is capable of performing these operations on
inner VXLAN traffic.

A VXLAN interface inherits the capabilities of its vxlandev interface if one is
specified or of the interface that hosts the vxlanlocal address. If other
interfaces will carry traffic for that VXLAN then they must have the same
hardware capabilities.

On transmit, if_vxlan verifies that the outbound interface has the required
capabilities and then translates the CSUM_ flags to their inner equivalents.
This tells the hardware ifnet that it needs to operate on the inner frame and
not the outer VXLAN headers.

An event is generated when a VXLAN ifnet starts. This allows hardware drivers to
configure their devices to expect VXLAN traffic on the specified incoming port.

On receive, the hardware does RSS and checksum verification on the inner frame.
if_vxlan now does a direct netisr dispatch to take full advantage of RSS. It is
not very clear why it didn't do this already.

Future work:
Rx: it should be possible to avoid the first trip up the protocol stack to get
the frame to if_vxlan just so it can decapsulate and requeue for a second trip
up the stack. The hardware NIC driver could directly call an if_vxlan receive
routine for VXLAN traffic instead.

Rx: LRO. depends on what happens with the previous item. There will have to to
be a mechanism to indicate that it's time for if_vxlan to flush its LRO state.

Reviewed by:	kib@
Relnotes:	Yes
Sponsored by:	Chelsio Communications
Differential Revision:	https://reviews.freebsd.org/D25873
2020-09-18 02:37:57 +00:00
..
dest6.c Fix m_pullup() problem after removing PULLDOWN_TESTs and KAME EXT_*macros. 2019-12-01 00:22:04 +00:00
frag6.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
icmp6.c Fix IPv6 regression introduced by r362900. 2020-07-03 08:06:26 +00:00
icmp6.h
in6.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
in6.h Convert route caching to nexthop caching. 2020-04-25 09:06:11 +00:00
in6_cksum.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
in6_fib.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
in6_fib.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
in6_gif.c Switch gif(4) path verification to fib[46]_check_urfp(). 2020-05-28 07:26:18 +00:00
in6_ifattach.c Make sure the multicast release tasks are properly drained when 2020-08-10 10:46:08 +00:00
in6_ifattach.h
in6_jail.c
in6_mcast.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
in6_pcb.c Allow TCP to reuse local port with different destinations 2020-05-18 22:53:12 +00:00
in6_pcb.h Allow TCP to reuse local port with different destinations 2020-05-18 22:53:12 +00:00
in6_pcbgroup.c
in6_proto.c Simplify dom_<rtattach|rtdetach>. 2020-08-14 21:29:56 +00:00
in6_rmx.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
in6_rss.c
in6_rss.h
in6_src.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
in6_var.h Simplify dom_<rtattach|rtdetach>. 2020-08-14 21:29:56 +00:00
ip6.h
ip6_ecn.h
ip6_fastfwd.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ip6_forward.c ipv6: quit dropping packets looping back on p2p interfaces 2020-08-31 01:45:48 +00:00
ip6_gre.c Introduce NET_EPOCH_CALL() macro and use it everywhere where we free 2020-01-15 06:05:20 +00:00
ip6_id.c ip6_randomflowlabel: Avoid blocking if random(4) is not available 2019-04-23 17:18:20 +00:00
ip6_input.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ip6_mroute.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ip6_mroute.h
ip6_output.c if_vxlan(4): add support for hardware assisted checksumming, TSO, and RSS. 2020-09-18 02:37:57 +00:00
ip6_var.h Convert route caching to nexthop caching. 2020-04-25 09:06:11 +00:00
ip6protosw.h
ip_fw_nat64.h Reapply r345274 with build fixes for 32-bit architectures. 2019-03-19 10:57:03 +00:00
ip_fw_nptv6.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
mld6.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
mld6.h
mld6_var.h icmpv6: Fix mbuf change in mld 2019-11-18 21:59:47 +00:00
nd6.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
nd6.h Switch inet6 default route subscription to the new rib subscription api. 2020-07-12 11:24:23 +00:00
nd6_nbr.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
nd6_rtr.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
pim6.h
pim6_var.h Rework IP encapsulation handling code. 2018-06-05 20:51:01 +00:00
raw_ip6.c Make ip6_output() and ip_output() require network epoch. 2020-01-22 05:51:22 +00:00
raw_ip6.h
route6.c Fix m_pullup() problem after removing PULLDOWN_TESTs and KAME EXT_*macros. 2019-12-01 00:22:04 +00:00
scope6.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
scope6_var.h Make net.inet6.ip6.deembed_scopeid behaviour default & remove sysctl. 2020-08-15 11:37:44 +00:00
sctp6_usrreq.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
sctp6_var.h Whitespace changes due to changes in ident. 2018-07-19 20:16:33 +00:00
send.c Use the new VNET_DEFINE_STATIC macro when we are defining static VNET 2018-07-24 16:35:52 +00:00
send.h
tcp6_var.h Remove tcp_rtlookup6() function signature. 2020-04-13 08:26:11 +00:00
udp6_usrreq.c Add a knob to allow zero UDP checksums for UDP/IPv6 traffic on the given UDP port. 2020-09-18 02:21:15 +00:00
udp6_var.h