The TX descriptor of tunnel packet filled incorrectly due to the MACLEN
is not set.

This patch fixes this issue by setting MACLEN to correctly fill the
TX descriptor.

Fixes: bd70c451532c ("net/ice: support Tx checksum offload for tunnel")
Cc: sta...@dpdk.org

Signed-off-by: Shiyang He <shiyangx...@intel.com>
---
 drivers/net/ice/ice_rxtx.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ice/ice_rxtx.c b/drivers/net/ice/ice_rxtx.c
index 0ea0045836..3af552f3e1 100644
--- a/drivers/net/ice/ice_rxtx.c
+++ b/drivers/net/ice/ice_rxtx.c
@@ -2738,10 +2738,7 @@ ice_txd_enable_checksum(uint64_t ol_flags,
                        union ice_tx_offload tx_offload)
 {
        /* Set MACLEN */
-       if (ol_flags & RTE_MBUF_F_TX_TUNNEL_MASK)
-               *td_offset |= (tx_offload.outer_l2_len >> 1)
-                       << ICE_TX_DESC_LEN_MACLEN_S;
-       else
+       if (!(ol_flags & RTE_MBUF_F_TX_TUNNEL_MASK))
                *td_offset |= (tx_offload.l2_len >> 1)
                        << ICE_TX_DESC_LEN_MACLEN_S;
 
@@ -3002,9 +2999,12 @@ ice_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, 
uint16_t nb_pkts)
 
                /* Fill in tunneling parameters if necessary */
                cd_tunneling_params = 0;
-               if (ol_flags & RTE_MBUF_F_TX_TUNNEL_MASK)
+               if (ol_flags & RTE_MBUF_F_TX_TUNNEL_MASK) {
+                       td_offset |= (tx_offload.outer_l2_len >> 1)
+                               << ICE_TX_DESC_LEN_MACLEN_S;
                        ice_parse_tunneling_params(ol_flags, tx_offload,
                                                   &cd_tunneling_params);
+               }
 
                /* Enable checksum offloading */
                if (ol_flags & ICE_TX_CKSUM_OFFLOAD_MASK)
-- 
2.37.2

Reply via email to