app/testpmd: fix max Rx packet length for VLAN packet
authorSteve Yang <stevex.yang@intel.com>
Mon, 2 Nov 2020 08:52:33 +0000 (08:52 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 3 Nov 2020 22:35:07 +0000 (23:35 +0100)
When the max Rx packet length is smaller than the sum of MTU size and
ether overhead size, it should be enlarged, otherwise the VLAN packets
will be dropped.

Fixes: 35b2d13fd6fd ("net: add rte prefix to ether defines")
Cc: stable@dpdk.org
Signed-off-by: Steve Yang <stevex.yang@intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
app/test-pmd/testpmd.c

index 33fc0fd..c263121 100644 (file)
@@ -1421,6 +1421,7 @@ init_config(void)
        struct rte_gro_param gro_param;
        uint32_t gso_types;
        uint16_t data_size;
+       uint16_t overhead_len;
        bool warning = 0;
        int k;
        int ret;
@@ -1457,6 +1458,28 @@ init_config(void)
                        rte_exit(EXIT_FAILURE,
                                 "rte_eth_dev_info_get() failed\n");
 
+               /* Update the max_rx_pkt_len to have MTU as RTE_ETHER_MTU */
+               if (port->dev_info.max_rx_pktlen && port->dev_info.max_mtu)
+                       overhead_len = port->dev_info.max_rx_pktlen -
+                               port->dev_info.max_mtu;
+               else
+                       overhead_len = RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN;
+
+               port->dev_conf.rxmode.max_rx_pkt_len =
+                                               RTE_ETHER_MTU + overhead_len;
+
+               /*
+                * This is workaround to avoid resize max rx packet len.
+                * Ethdev assumes jumbo frame size must be greater than
+                * RTE_ETHER_MAX_LEN, and will resize 'max_rx_pkt_len' to
+                * default value when it is greater than RTE_ETHER_MAX_LEN
+                * for normal frame.
+                */
+               if (port->dev_conf.rxmode.max_rx_pkt_len > RTE_ETHER_MAX_LEN) {
+                       port->dev_conf.rxmode.offloads |=
+                                               DEV_RX_OFFLOAD_JUMBO_FRAME;
+               }
+
                if (!(port->dev_info.tx_offload_capa &
                      DEV_TX_OFFLOAD_MBUF_FAST_FREE))
                        port->dev_conf.txmode.offloads &=