You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
net_tap: include the L4 length in the LSO checksum seed
A segmentation-offload frame carries a partial TCP/UDP checksum in the
checksum field. The netvsp LSO path supplies a length-less pseudo-header
there, because the guest cannot know the per-segment length. The kernel
GSO path expects the opposite: th->check is the pseudo-header over the
full L4 length, as __tcp_v4_send_check writes for a GSO skb, which
tcp_gso_segment and the hardware TSO drivers adjust down per segment.
Passing the length-less seed straight through leaves the per-segment
adjustment short by the segment length, so every emitted segment carries
a wrong checksum and an off-host receiver drops it. A guest TCP stream
over TSO to an off-host peer collapses to a few Mbit/s of retransmits.
Checksum offload without segmentation and same-host traffic are
unaffected, since their seed already includes the length.
Recompute the seed for segmentation frames from the packet's own IP
header. The payload is untouched; the kernel or NIC still completes the
per-segment checksum.
0 commit comments