82f9444dbe
Type: fix Change-Id: Ibc476b807ba0310f0cc926b0e386831ef0cbcc25 Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
56 lines
1.8 KiB
Diff
56 lines
1.8 KiB
Diff
From cbff9112647213bf4376a0c78032d15585a3b5b6 Mon Sep 17 00:00:00 2001
|
|
From: Mohsin Kazmi <mohsin.kazmi14@gmail.com>
|
|
Date: Thu, 17 Jun 2021 14:57:01 +0200
|
|
Subject: [PATCH] net: fix Intel-specific Prepare the outer IPv4 hdr for
|
|
checksum
|
|
|
|
Preparation of the headers for the hardware offload
|
|
misses the outer IPv4 checksum offload.
|
|
It results in bad checksum computed by hardware NIC.
|
|
|
|
This patch fixes the issue by setting the outer IPv4
|
|
checksum field to 0.
|
|
|
|
Fixes: 4fb7e803eb1a ("ethdev: add Tx preparation")
|
|
Cc: stable@dpdk.org
|
|
|
|
Signed-off-by: Mohsin Kazmi <mohsin.kazmi14@gmail.com>
|
|
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
|
|
Acked-by: Olivier Matz <olivier.matz@6wind.com>
|
|
---
|
|
lib/net/rte_net.h | 15 +++++++++++++--
|
|
1 file changed, 13 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/lib/net/rte_net.h b/lib/net/rte_net.h
|
|
index 434435ffa2..42639bc154 100644
|
|
--- a/lib/net/rte_net.h
|
|
+++ b/lib/net/rte_net.h
|
|
@@ -125,11 +125,22 @@ rte_net_intel_cksum_flags_prepare(struct rte_mbuf *m, uint64_t ol_flags)
|
|
* Mainly it is required to avoid fragmented headers check if
|
|
* no offloads are requested.
|
|
*/
|
|
- if (!(ol_flags & (PKT_TX_IP_CKSUM | PKT_TX_L4_MASK | PKT_TX_TCP_SEG)))
|
|
+ if (!(ol_flags & (PKT_TX_IP_CKSUM | PKT_TX_L4_MASK | PKT_TX_TCP_SEG |
|
|
+ PKT_TX_OUTER_IP_CKSUM)))
|
|
return 0;
|
|
|
|
- if (ol_flags & (PKT_TX_OUTER_IPV4 | PKT_TX_OUTER_IPV6))
|
|
+ if (ol_flags & (PKT_TX_OUTER_IPV4 | PKT_TX_OUTER_IPV6)) {
|
|
inner_l3_offset += m->outer_l2_len + m->outer_l3_len;
|
|
+ /*
|
|
+ * prepare outer IPv4 header checksum by setting it to 0,
|
|
+ * in order to be computed by hardware NICs.
|
|
+ */
|
|
+ if (ol_flags & PKT_TX_OUTER_IP_CKSUM) {
|
|
+ ipv4_hdr = rte_pktmbuf_mtod_offset(m,
|
|
+ struct rte_ipv4_hdr *, m->outer_l2_len);
|
|
+ ipv4_hdr->hdr_checksum = 0;
|
|
+ }
|
|
+ }
|
|
|
|
/*
|
|
* Check if headers are fragmented.
|
|
--
|
|
2.17.1
|
|
|