Message ID | 20210624152802.40249-1-mohsin.kazmi14@gmail.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Series | net: prepare the outer ipv4 hdr for checksum | expand |
Context | Check | Description |
---|---|---|
ci/iol-intel-Functional | success | Functional Testing PASS |
ci/iol-intel-Performance | success | Performance Testing PASS |
ci/iol-testing | success | Testing PASS |
ci/iol-abi-testing | success | Testing PASS |
ci/github-robot | success | github build: passed |
ci/intel-Testing | success | Testing PASS |
ci/Intel-compilation | success | Compilation OK |
ci/checkpatch | success | coding style OK |
> -----Original Message----- > From: dev <dev-bounces@dpdk.org> On Behalf Of Mohsin Kazmi > Sent: Thursday, June 24, 2021 11:28 PM > To: dev@dpdk.org > Cc: Mohsin Kazmi <mohsin.kazmi14@gmail.com>; Kinsella, Ray > <ray.kinsella@intel.com>; Olivier Matz <olivier.matz@6wind.com> > Subject: [dpdk-dev] [PATCH] net: prepare the outer ipv4 hdr for checksum > > Preparation 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. As this a fix, below fix line and cc stable could be added Fixes: 4fb7e803eb1a ("ethdev: add Tx preparation") Cc: stable@dpdk.org > > Cc: ray.kinsella@intel.com > > Signed-off-by: Mohsin Kazmi <mohsin.kazmi14@gmail.com> Acked-by: Qi Zhang <qi.z.zhang@intel.com>
diff --git a/lib/net/rte_net.h b/lib/net/rte_net.h index 434435ffa2..e47365099e 100644 --- a/lib/net/rte_net.h +++ b/lib/net/rte_net.h @@ -128,8 +128,18 @@ rte_net_intel_cksum_flags_prepare(struct rte_mbuf *m, uint64_t ol_flags) if (!(ol_flags & (PKT_TX_IP_CKSUM | PKT_TX_L4_MASK | PKT_TX_TCP_SEG))) 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.
Preparation 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. Cc: ray.kinsella@intel.com Signed-off-by: Mohsin Kazmi <mohsin.kazmi14@gmail.com> --- lib/net/rte_net.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)