diff options
author | Mohsin Kazmi <sykazmi@cisco.com> | 2021-09-15 15:57:29 +0200 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2021-09-16 10:40:15 +0000 |
commit | 82f9444dbe7fc3719d43dad313df15f686e3b68c (patch) | |
tree | 3d4c183b562d2d28905056d95a1fa6492eabd0ea /build | |
parent | cebb47733923f9c66d5fe794c040f7baf6271a47 (diff) |
dpdk: fix the outer ipv4 checksum
Type: fix
Change-Id: Ibc476b807ba0310f0cc926b0e386831ef0cbcc25
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
Diffstat (limited to 'build')
2 files changed, 110 insertions, 0 deletions
diff --git a/build/external/patches/dpdk_21.05/0001-net-fix-Intel-specific-Prepare-the-outer-IPv4-hdr-fo.patch b/build/external/patches/dpdk_21.05/0001-net-fix-Intel-specific-Prepare-the-outer-IPv4-hdr-fo.patch new file mode 100644 index 00000000000..9d438e14537 --- /dev/null +++ b/build/external/patches/dpdk_21.05/0001-net-fix-Intel-specific-Prepare-the-outer-IPv4-hdr-fo.patch @@ -0,0 +1,55 @@ +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 + diff --git a/build/external/patches/dpdk_21.08/0001-net-fix-Intel-specific-Prepare-the-outer-IPv4-hdr-fo.patch b/build/external/patches/dpdk_21.08/0001-net-fix-Intel-specific-Prepare-the-outer-IPv4-hdr-fo.patch new file mode 100644 index 00000000000..9d438e14537 --- /dev/null +++ b/build/external/patches/dpdk_21.08/0001-net-fix-Intel-specific-Prepare-the-outer-IPv4-hdr-fo.patch @@ -0,0 +1,55 @@ +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 + |