From 7dc92d17298d8fd05a912606f02a094566ec0b3f Mon Sep 17 00:00:00 2001 From: Kevin Liu Date: Wed, 29 Dec 2021 09:37:02 +0000 Subject: [PATCH] app/testpmd: fix L4 checksum in multi-segments 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: stable@dpdk.org Signed-off-by: Kevin Liu Acked-by: Yuying Zhang Acked-by: Aman Singh --- 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 5274d498ee..dbddd20a07 100644 --- a/app/test-pmd/csumonly.c +++ b/app/test-pmd/csumonly.c @@ -511,7 +511,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 @@ -534,7 +534,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; @@ -623,7 +623,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.39.5