l2_len for tunneling packets should contain Outer_L4_len.
Additionally, the current offset used for the inner Ethernet
header is incorrect. This patch fixes these issues.

Fixes: 76730c7b9b5a ("app/testpmd: use packet type parsing API")
Cc: sta...@dpdk.org

Signed-off-by: Dengdui Huang <huangdeng...@huawei.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 fa0002d321..6d93b7a04d 100644
--- a/app/test-pmd/csumonly.c
+++ b/app/test-pmd/csumonly.c
@@ -711,11 +711,11 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
                if (txp->parse_tunnel && RTE_ETH_IS_TUNNEL_PKT(ptype) != 0) {
                        info.is_tunnel = 1;
                        update_tunnel_outer(&info);
-                       info.l2_len = hdr_lens.inner_l2_len + 
hdr_lens.tunnel_len;
+                       info.l2_len = hdr_lens.inner_l2_len + 
hdr_lens.tunnel_len + hdr_lens.l4_len;
                        info.l3_len = hdr_lens.inner_l3_len;
                        info.l4_len = hdr_lens.inner_l4_len;
-                       eth_hdr = (struct rte_ether_hdr *)(char *)l3_hdr +
-                                       info.outer_l3_len + hdr_lens.tunnel_len;
+                       eth_hdr = (struct rte_ether_hdr *)((char *)l3_hdr +
+                               hdr_lens.l3_len + hdr_lens.l4_len + 
hdr_lens.tunnel_len);
                        info.ethertype = get_ethertype_by_ptype(eth_hdr,
                                                ptype & 
RTE_PTYPE_INNER_L3_MASK);
                        tx_ol_flags |= get_tunnel_ol_flags_by_ptype(ptype);
-- 
2.33.0

Reply via email to