Fix path MTU discovery for TCP LRO/TSO when forwarding.
authorbluhm <bluhm@openbsd.org>
Fri, 7 Jul 2023 08:05:02 +0000 (08:05 +0000)
committerbluhm <bluhm@openbsd.org>
Fri, 7 Jul 2023 08:05:02 +0000 (08:05 +0000)
commit5ebaba9d2927ab6dd81457cc6db99291a68437ff
tree2681e742342efd1fdc260aeff4e5ff6e1c8d0d34
parent0b88608e5595cdbc1da8ae1365a5140a44dec8c3
Fix path MTU discovery for TCP LRO/TSO when forwarding.

When doing LRO (Large Receive Offload), the drivers, currently ix(4)
and lo(4) only, record an upper bound of the size of the original
packets in ph_mss.  When sending, either stack or hardware must
chop the packets with TSO (TCP Segmentation Offload) to that size.
That means we have to call tcp_if_output_tso() before ifp->if_output().
Put that logic into if_output_tso() to avoid code duplication.  As
TCP packets on the wire do not get larger that way, path MTU discovery
should still work.

tested by and OK jan@
sys/net/if.c
sys/net/if_var.h
sys/net/pf.c
sys/netinet/ip_output.c
sys/netinet6/ip6_forward.c
sys/netinet6/ip6_output.c