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: c59faf3fe8fe ("net/i40e: support TSO on tunneling packet")
Cc: sta...@dpdk.org

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

diff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c
index fbbefb5015..b4f65b58fa 100644
--- a/drivers/net/i40e/i40e_rxtx.c
+++ b/drivers/net/i40e/i40e_rxtx.c
@@ -304,10 +304,7 @@ i40e_txd_enable_checksum(uint64_t ol_flags,
                        union i40e_tx_offload tx_offload)
 {
        /* Set MACLEN */
-       if (ol_flags & RTE_MBUF_F_TX_TUNNEL_MASK)
-               *td_offset |= (tx_offload.outer_l2_len >> 1)
-                               << I40E_TX_DESC_LENGTH_MACLEN_SHIFT;
-       else
+       if (!(ol_flags & RTE_MBUF_F_TX_TUNNEL_MASK))
                *td_offset |= (tx_offload.l2_len >> 1)
                        << I40E_TX_DESC_LENGTH_MACLEN_SHIFT;
 
@@ -1171,9 +1168,12 @@ i40e_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)
+                                       << I40E_TX_DESC_LENGTH_MACLEN_SHIFT;
                        i40e_parse_tunneling_params(ol_flags, tx_offload,
                                                    &cd_tunneling_params);
+               }
                /* Enable checksum offloading */
                if (ol_flags & I40E_TX_CKSUM_OFFLOAD_MASK)
                        i40e_txd_enable_checksum(ol_flags, &td_cmd,
-- 
2.37.2

Reply via email to