app/testpmd: fix max Rx packet length for VLAN packet

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: 35b2d13fd6 ("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>
This commit is contained in:
Steve Yang 2020-11-02 08:52:33 +00:00 committed by Ferruh Yigit
parent 445b0c8eba
commit f6870a7ed6

View 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 &=