Testpmd forwards packets in checksum mode that it needs to calculate
the checksum of each layer's protocol.

In process_inner_cksums, when parsing tunnel packets, inner L4 offset should be
outer_l2_len + outer_l3_len + l2_len + l3_len.

In process_outer_cksums, when parsing tunnel packets, outer L4 offset should be
outer_l2_len + outer_l3_len.

Fixes: e6b9d6411e91 ("app/testpmd: add SW L4 checksum in multi-segments")
Cc: sta...@dpdk.org

Signed-off-by: Kevin Liu <kevinx....@intel.com>
---
 app/test-pmd/csumonly.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c
index 02bc3929c7..c235456e58 100644
--- a/app/test-pmd/csumonly.c
+++ b/app/test-pmd/csumonly.c
@@ -513,7 +513,7 @@ process_inner_cksums(void *l3_hdr, const struct 
testpmd_offload_info *info,
                                ol_flags |= RTE_MBUF_F_TX_UDP_CKSUM;
                        } else {
                                if (info->is_tunnel)
-                                       l4_off = info->l2_len +
+                                       l4_off = info->outer_l2_len +
                                                 info->outer_l3_len +
                                                 info->l2_len + info->l3_len;
                                else
@@ -536,7 +536,7 @@ process_inner_cksums(void *l3_hdr, const struct 
testpmd_offload_info *info,
                        ol_flags |= RTE_MBUF_F_TX_TCP_CKSUM;
                } else {
                        if (info->is_tunnel)
-                               l4_off = info->l2_len + info->outer_l3_len +
+                               l4_off = info->outer_l2_len + 
info->outer_l3_len +
                                         info->l2_len + info->l3_len;
                        else
                                l4_off = info->l2_len + info->l3_len;
@@ -625,7 +625,7 @@ process_outer_cksums(void *outer_l3_hdr, struct 
testpmd_offload_info *info,
        if (udp_hdr->dgram_cksum != 0) {
                udp_hdr->dgram_cksum = 0;
                udp_hdr->dgram_cksum = get_udptcp_checksum(m, outer_l3_hdr,
-                                       info->l2_len + info->outer_l3_len,
+                                       info->outer_l2_len + info->outer_l3_len,
                                        info->outer_ethertype);
        }
 
-- 
2.33.1

Reply via email to