Implement the TCP/IP layer for hardware TCP segmentation offload.
authorbluhm <bluhm@openbsd.org>
Mon, 15 May 2023 16:34:56 +0000 (16:34 +0000)
committerbluhm <bluhm@openbsd.org>
Mon, 15 May 2023 16:34:56 +0000 (16:34 +0000)
commit510f4386e1535b967eb78c315ea65daf4f87c7db
tree89dcdb5836af0dc06ba2b0b755719b5a44d1d6d9
parent965dadce1f4960e1ddfad6d83de2a024fdddc5e8
Implement the TCP/IP layer for hardware TCP segmentation offload.
If the driver of a network interface claims to support TSO, do not
chop the packet in software, but pass it down to the interface
layer.
Precalculate parts of the pseudo header checksum, but without the
packet length.  The length of all generated smaller packets is not
known yet.  Driver and hardware will use the mbuf packet header
field ph_mss to calculate it and update checksum.
Introduce separate flags IFCAP_TSOv4 and IFCAP_TSOv6 as hardware
might support ony one protocol family.  The old flag IFXF_TSO is
only relevant for large receive offload.  It is missnamed, but keep
that for now.
Note that drivers do not set TSO capabilites yet.  Also the ifconfig
flags and pseudo interfaces capabilities will be done separately.
So this commit should not change behavior.
heavily based on the work from jan@; OK sashan@
sys/net/if.h
sys/net/pf.c
sys/netinet/ip_output.c
sys/netinet/tcp_output.c
sys/netinet/tcp_var.h
sys/netinet6/ip6_output.c