Message ID | 20210907104916.27560-1-mohsin.kazmi14@gmail.com (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Ferruh Yigit |
Headers | show |
Series | [v4] net: fix Intel-specific Prepare the outer IPv4 hdr for checksum | expand |
Context | Check | Description |
---|---|---|
ci/iol-mellanox-Performance | success | Performance Testing PASS |
ci/iol-x86_64-compile-testing | success | Testing PASS |
ci/intel-Testing | success | Testing PASS |
ci/Intel-compilation | success | Compilation OK |
ci/iol-intel-Functional | success | Functional Testing PASS |
ci/iol-x86_64-unit-testing | success | Testing PASS |
ci/iol-intel-Performance | success | Performance Testing PASS |
ci/iol-aarch64-compile-testing | success | Testing PASS |
ci/iol-broadcom-Functional | success | Functional Testing PASS |
ci/iol-broadcom-Performance | success | Performance Testing PASS |
ci/github-robot: build | success | github build: passed |
ci/checkpatch | success | coding style OK |
On 9/7/2021 11:49 AM, Mohsin Kazmi wrote: > 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> <...> > 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) Not directly related with this patch, but is the function 'rte_net_intel_cksum_flags_prepare()' really Intel specific? I can see sfc & ena are also using this function, should we rename it?
On 9/7/2021 11:49 AM, Mohsin Kazmi wrote: > 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> Applied to dpdk-next-net/main, thanks. Patch title updated as following while merging: net: fix checksum offload for outer IPv4
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.