In case no inner checksum is requested, we can consider the inner data
as opaque since there is nothing to do and rely on simple HW UDP checksum
without considering support for HW outer UDP checksum.

Cleanup the DPDK helper accordingly.

Acked-by: Mike Pattrick <[email protected]>
Signed-off-by: David Marchand <[email protected]>
---
Changes since v2:
- added check for TSO packets,

---
 lib/dp-packet.c   | 16 +++++++++++-----
 lib/netdev-dpdk.c |  5 +----
 2 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/lib/dp-packet.c b/lib/dp-packet.c
index b34bcf26f3..b893fbd396 100644
--- a/lib/dp-packet.c
+++ b/lib/dp-packet.c
@@ -553,12 +553,18 @@ dp_packet_compare_offsets(struct dp_packet *b1, struct 
dp_packet *b2,
 void
 dp_packet_ol_send_prepare(struct dp_packet *p, uint64_t flags)
 {
-    if (!dp_packet_ip_checksum_partial(p)
-        && !dp_packet_l4_checksum_partial(p)
-        && !dp_packet_inner_ip_checksum_partial(p)
+    if (!dp_packet_inner_ip_checksum_partial(p)
         && !dp_packet_inner_l4_checksum_partial(p)) {
-        /* Only checksumming needs actions. */
-        return;
+
+        if (!dp_packet_ip_checksum_partial(p)
+            && !dp_packet_l4_checksum_partial(p)) {
+            /* Only checksumming needs actions. */
+            return;
+        }
+
+        if (OVS_UNLIKELY(dp_packet_tunnel(p) && !dp_packet_get_tso_segsz(p))) {
+            p->offloads &= ~DP_PACKET_OL_TUNNEL_MASK;
+        }
     }
 
     if (!dp_packet_tunnel(p)) {
diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
index f6ae235af3..29b1b21d64 100644
--- a/lib/netdev-dpdk.c
+++ b/lib/netdev-dpdk.c
@@ -2647,10 +2647,7 @@ netdev_dpdk_prep_hwol_packet(struct netdev_dpdk *dev, 
struct rte_mbuf *mbuf)
         return true;
     }
 
-    if (dp_packet_tunnel(pkt)
-        && (dp_packet_inner_ip_checksum_partial(pkt)
-            || dp_packet_inner_l4_checksum_partial(pkt)
-            || mbuf->tso_segsz)) {
+    if (dp_packet_tunnel(pkt)) {
         if (dp_packet_ip_checksum_partial(pkt)
             || dp_packet_l4_checksum_partial(pkt)) {
             mbuf->outer_l2_len = (char *) dp_packet_l3(pkt) -
-- 
2.51.1

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to