From: Steve Yang Date: Mon, 2 Nov 2020 08:52:33 +0000 (+0000) Subject: app/testpmd: fix max Rx packet length for VLAN packet X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=f6870a7ed6b3;p=dpdk.git 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: 35b2d13fd6fd ("net: add rte prefix to ether defines") Cc: stable@dpdk.org Signed-off-by: Steve Yang Reviewed-by: Ferruh Yigit --- diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 33fc0fddf5..c263121a9a 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -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 &=