Messages in this thread | ![/](/images/icornerl.gif) | | Date | Thu, 25 Apr 2024 11:17:19 -0400 | From | Willem de Bruijn <> | Subject | Re: [PATCH v2 net-next v2 2/5] net: add support for segmenting TCP fraglist GSO packets |
| |
Felix Fietkau wrote: > Preparation for adding TCP fraglist GRO support. It expects packets to be > combined in a similar way as UDP fraglist GSO packets. > For IPv4 packets, NAT is handled in the same way as UDP fraglist GSO. > > Signed-off-by: Felix Fietkau <nbd@nbd.name> > --- > net/ipv4/tcp_offload.c | 69 ++++++++++++++++++++++++++++++++++++++++ > net/ipv6/tcpv6_offload.c | 3 ++ > 2 files changed, 72 insertions(+) > > diff --git a/net/ipv4/tcp_offload.c b/net/ipv4/tcp_offload.c > index fab0973f995b..e455f884190c 100644 > --- a/net/ipv4/tcp_offload.c > +++ b/net/ipv4/tcp_offload.c > @@ -28,6 +28,72 @@ static void tcp_gso_tstamp(struct sk_buff *skb, unsigned int ts_seq, > } > } > > +static void __tcpv4_gso_segment_csum(struct sk_buff *seg, > + __be32 *oldip, __be32 *newip, > + __be16 *oldport, __be16 *newport) > +{ > + struct tcphdr *th; > + struct iphdr *iph; > + > + if (*oldip == *newip && *oldport == *newport) > + return; > + > + th = tcp_hdr(seg); > + iph = ip_hdr(seg); > + > + inet_proto_csum_replace4(&th->check, seg, *oldip, *newip, true); > + inet_proto_csum_replace2(&th->check, seg, *oldport, *newport, false); > + *oldport = *newport; > + > + csum_replace4(&iph->check, *oldip, *newip); > + *oldip = *newip; > +} > + > +static struct sk_buff *__tcpv4_gso_segment_list_csum(struct sk_buff *segs) > +{ > + struct sk_buff *seg; > + struct tcphdr *th, *th2; > + struct iphdr *iph, *iph2; > + __be32 flags, flags2; > + > + seg = segs; > + th = tcp_hdr(seg); > + iph = ip_hdr(seg); > + flags = tcp_flag_word(th); > + flags2 = tcp_flag_word(tcp_hdr(seg->next));
Vestigial, now that flag overwrite is removed in v2?
All this code is very similar to __udpv4_gso_segment_list_csum. But the zero checksum handling in __udpv4_gso_segment_csum makes it just different enough that I also do not immediately see a straightforward way to avoid duplicating.
| ![\](/images/icornerr.gif) |