Re: [RFC] net: add TCP fraglist GRO support

From: Felix Fietkau
Date: Tue Apr 23 2024 - 12:55:52 EST


On 23.04.24 16:34, Paolo Abeni wrote:
On Tue, 2024-04-23 at 14:23 +0200, Felix Fietkau wrote:
On 23.04.24 14:11, Eric Dumazet wrote:
> On Tue, Apr 23, 2024 at 1:55 PM Felix Fietkau <nbd@xxxxxxxx> wrote:
> > > > In the world of consumer-grade WiFi devices, there are a lot of chipsets
> > with limited or nonexistent SG support, and very limited checksum
> > offload capabilities on Ethernet. The WiFi side of these devices is
> > often even worse. I think fraglist GRO is a decent fallback for the
> > inevitable corner cases.
> > What about netfilter and NAT ? Are they okay with NETIF_F_FRAGLIST_GRO already ?
> > Many of these devices are probably using NAT.

In my tests, nftables NAT works just fine, both with and without flowtable offloading. I didn't see anything in netfilter that would have a problem with this.

I see you handle explicitly NAT changes in __tcpv4_gso_segment_csum(),
like the current UDP code.

The TCP header has many other fields that could be updated affecting
the TCP csum.
Handling every possible mutation looks cumbersome and will likely
reduce the performance benefits.

What is your plan WRT other TCP header fields update?

I think that should be easy enough to handle. My patch already only combines packets where tcp_flag_word(th) is identical. So when segmenting, I could handle all flags changes with a single inet_proto_csum_replace4 call.

Strictly WRT the patch, I guess it deserves to be split in series,
moving UDP helpers in common code and possibly factoring out more
helpers with separate patches.
Will do.

e.g. in __tcpv4_gso_segment_csum() is quite similar
__udpv4_gso_segment_csum() - even too much, as the tcp csum should be
always be updated when the ports or addresses change ;)

Will fix that.

Thanks,

- Felix