Message ID | 20240117142124.241050-1-mkp@redhat.com |
---|---|
State | Accepted |
Commit | 9e3c842d5793cb9a99f39efb67344cd702097b09 |
Delegated to: | Ilya Maximets |
Headers | show |
Series | [ovs-dev,v6,1/3] dp-packet: Set checksum flags during software TSO. | expand |
Context | Check | Description |
---|---|---|
ovsrobot/apply-robot | success | apply and check: success |
ovsrobot/github-robot-_Build_and_Test | success | github build: passed |
ovsrobot/github-robot-_Build_and_Test | success | github build: passed |
ovsrobot/intel-ovs-compilation | fail | test: fail |
On Wed, Jan 17, 2024 at 09:21:22AM -0500, Mike Pattrick wrote: > When OVS needs to fallback on the software TSO implementation to segment > a packet, it currently doesn't guarantee that IP and TCP checksum > offload flags are set. However, it is possible that these is required. > This is true in the case of dp_netdev_upcall(), which clears these > flags. > > This patch explicitly sets the appropriate flags when the segmentation > flag is removed, to guarantee that packets always end up with correct > checksums. > > Signed-off-by: Mike Pattrick <mkp@redhat.com> > Fixes: 8b5fe2dc6080 ("userspace: Add Generic Segmentation Offloading.") > --- > v3: Moved logic from ofproto-dpif-upcall to dp-packet > v5: Corrected indectionation, and removed a redundant flag from the mask Acked-by: Simon Horman <horms@ovn.org>
diff --git a/lib/dp-packet.h b/lib/dp-packet.h index 11aa00723..ad272f581 100644 --- a/lib/dp-packet.h +++ b/lib/dp-packet.h @@ -1131,11 +1131,23 @@ dp_packet_hwol_set_tcp_seg(struct dp_packet *b) *dp_packet_ol_flags_ptr(b) |= DP_PACKET_OL_TX_TCP_SEG; } -/* Resets TCP Segmentation flag in packet 'p'. */ +/* Resets TCP Segmentation in packet 'p' and adjust flags to indicate + * L3 and L4 checksumming is now required. */ static inline void dp_packet_hwol_reset_tcp_seg(struct dp_packet *p) { - *dp_packet_ol_flags_ptr(p) &= ~DP_PACKET_OL_TX_TCP_SEG; + uint64_t ol_flags = *dp_packet_ol_flags_ptr(p) + | DP_PACKET_OL_TX_TCP_CKSUM; + + ol_flags = ol_flags & ~(DP_PACKET_OL_TX_TCP_SEG + | DP_PACKET_OL_RX_L4_CKSUM_GOOD + | DP_PACKET_OL_RX_IP_CKSUM_GOOD); + + if (ol_flags & DP_PACKET_OL_TX_IPV4) { + ol_flags |= DP_PACKET_OL_TX_IP_CKSUM; + } + + *dp_packet_ol_flags_ptr(p) = ol_flags; } /* Returns 'true' if the IP header has good integrity and the
When OVS needs to fallback on the software TSO implementation to segment a packet, it currently doesn't guarantee that IP and TCP checksum offload flags are set. However, it is possible that these is required. This is true in the case of dp_netdev_upcall(), which clears these flags. This patch explicitly sets the appropriate flags when the segmentation flag is removed, to guarantee that packets always end up with correct checksums. Signed-off-by: Mike Pattrick <mkp@redhat.com> Fixes: 8b5fe2dc6080 ("userspace: Add Generic Segmentation Offloading.") --- v3: Moved logic from ofproto-dpif-upcall to dp-packet v5: Corrected indectionation, and removed a redundant flag from the mask --- lib/dp-packet.h | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)