On Tue, 9 Sept 2025 at 15:52, Mike Pattrick <m...@redhat.com> wrote: > > On Fri, Aug 29, 2025 at 5:37 AM David Marchand <david.march...@redhat.com> > wrote: >> >> TSO packets were incorrectly treated as too big by the check_pkt_len >> action with the userspace datapath. >> Adjust the check by looking at the requested segment size. >> >> Fixes: 29cf9c1b3b9c ("userspace: Add TCP Segmentation Offload support") >> Reported-at: https://issues.redhat.com/browse/FDP-1631 >> Signed-off-by: David Marchand <david.march...@redhat.com> >> --- >> lib/odp-execute.c | 17 ++++++++++++++ >> tests/dpif-netdev.at | 56 ++++++++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 73 insertions(+) >> >> diff --git a/lib/odp-execute.c b/lib/odp-execute.c >> index 649f8e99a5..486b70c039 100644 >> --- a/lib/odp-execute.c >> +++ b/lib/odp-execute.c >> @@ -797,6 +797,23 @@ odp_execute_check_pkt_len(void *dp, struct dp_packet >> *packet, bool steal, >> uint32_t size = dp_packet_get_send_len(packet) >> - dp_packet_l2_pad_size(packet); >> >> + if (dp_packet_get_tso_segsz(packet)) { >> + const void *payload; >> + uint32_t segsize; >> + >> + if (dp_packet_tunnel(packet)) { >> + payload = dp_packet_get_inner_tcp_payload(packet); >> + } else { >> + payload = dp_packet_get_tcp_payload(packet); >> + } >> + /* Evaluate a segment maximum length for this TSO packet. */ >> + segsize = (char *)payload - (char *)dp_packet_data(packet) >> + + dp_packet_get_tso_segsz(packet); >> >> + if (segsize < size) { >> + size = segsize; >> + } >> + } > > > Should this be moved to dp_packet_get_send_len?
I don't think it is a good idea, or at least this would need more changes. Reporting a correct sending length is one thing, but the caller needs to be aware that (sw) segmentation is needed. -- David Marchand _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev