TSO + ECN

From: Scheffenegger, Richard <rscheff_at_freebsd.org>
Date: Wed, 20 Dec 2023 11:15:55 UTC
Hi,

I am curious if anyone here has expirience with the handling of ECN in 
TSO-enabled drivers/hardware...

The other day I found that the virtio driver would bail out with ENOTSUP 
when encountering the TCP CWR header bit on a TSO-enabled flow, when the 
host does not also claim ECN-support for TSO.

But this made me wonder, how the expected behavior is.

Presumably, this means that the hardware (or driver) would clear the CWR 
bit after the first packet is sent, correct?

However, in light of the upcoming AccECN signalling protocol, that is 
not what TSO should be doing (with AccECN, all segments should retain 
the exact same header flags, maybe expect PSH).

Probably "non-ECN" capable TSO offload would actually work better with 
AccECN - and if the above behavior is what ECN-aware TSO is doing, 
AccECN sessions would need to somehow work around that (e.g. 
spoon-feeding any segment with CWR set individually - e.g. bypassing the 
TSO capabilities in tcp_output)?


Would appreciate any feedback around this...

Best regards,
   Richard