]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit - sys/netinet6/ip6_output.c
if_vxlan(4): add support for hardware assisted checksumming, TSO, and RSS.
authornp <np@FreeBSD.org>
Fri, 18 Sep 2020 02:37:57 +0000 (02:37 +0000)
committernp <np@FreeBSD.org>
Fri, 18 Sep 2020 02:37:57 +0000 (02:37 +0000)
commit0c30c36e76886d45c7ce9d787b8968653d5411dc
tree9b5da4e610c2c342cf6f29213d50ce839268af94
parent84ec2ec87f7a51601149fa267c39b15b177b4e61
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
share/man/man4/vxlan.4
share/man/man9/EVENTHANDLER.9
sys/net/if_vxlan.c
sys/net/if_vxlan.h
sys/netinet/ip_output.c
sys/netinet6/ip6_output.c