[dpdk-dev] net/i40e: fix vlan packets drop

Zhang, Xiao xiao.zhang at intel.com
Tue Oct 15 03:41:58 CEST 2019


Hi Kevin,

> -----Original Message-----
> From: Kevin Traynor [mailto:ktraynor at redhat.com]
> Sent: Tuesday, October 15, 2019 1:42 AM
> To: Zhang, Xiao <xiao.zhang at intel.com>; dev at dpdk.org
> Cc: Xing, Beilei <beilei.xing at intel.com>; Zhang, Qi Z <qi.z.zhang at intel.com>;
> stable at dpdk.org; Stokes, Ian <ian.stokes at intel.com>
> Subject: Re: [dpdk-dev] net/i40e: fix vlan packets drop
> 
> On 14/10/2019 08:53, Xiao Zhang wrote:
> > vlan packets with ip length bigger then 1496 will not be received by
> > i40e due to wrong packets size checking. This patch fixes the issue by
> > correcting the maximum frame size during checking.
> >
> > Fixes: 35b2d13fd6fd ("net: add rte prefix to ether defines")
> 
> To make sure it is backported to the correct stable branches, please tag the
> commit that introduced the bug, not the last commit to touch the line.

Got it, the right fixline should be Fixes: 43e5488c0ac6 ("net/i40e: support MTU configuration"), will correct it.

> 
> > Cc: stable at dpdk.org
> >
> > Signed-off-by: Xiao Zhang <xiao.zhang at intel.com>
> > ---
> >  drivers/net/i40e/i40e_ethdev.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/net/i40e/i40e_ethdev.c
> > b/drivers/net/i40e/i40e_ethdev.c index 2ca14da..156d67b 100644
> > --- a/drivers/net/i40e/i40e_ethdev.c
> > +++ b/drivers/net/i40e/i40e_ethdev.c
> 
> What about vf?

vf also need to be fixed, will add it.

> 
> > @@ -12103,7 +12103,7 @@ i40e_dev_mtu_set(struct rte_eth_dev *dev,
> uint16_t mtu)
> >  		return -EBUSY;
> >  	}
> >
> > -	if (frame_size > RTE_ETHER_MAX_LEN)
> > +	if (frame_size > RTE_ETHER_MAX_LEN + I40E_VLAN_TAG_SIZE * 2)
> >  		dev_data->dev_conf.rxmode.offloads |=
> >  			DEV_RX_OFFLOAD_JUMBO_FRAME;
> >  	else
> >
> 
> +cc Ian, who looked into MTU for i40e a while back.
> 
> MTU code changing makes me nervous. You would need to look through
> everywhere there is something related to pkt len to check it is still ok.
> 
> E.g. if I got it right (maybe I miss something), this means a 1500 mtu will set
> frame_size to 1526, which will turn off jumbo and set dev_data-
> >dev_conf.rxmode.max_rx_pkt_len = 1526
> 
> Then in i40e_rx_queue_config()
> 
> rxq->max_pkt_len = RTE_MIN(len, data->dev_conf.rxmode.max_rx_pkt_len);
>                    ^^^ lets say max_rx_pkt_len (1526) is the min
> 
> if (data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_JUMBO_FRAME) {
> 
> [snip jumbo on branch]
> 
> } else {
> 	if (rxq->max_pkt_len < RTE_ETHER_MIN_LEN ||
> 		rxq->max_pkt_len > RTE_ETHER_MAX_LEN) {
>                 ^^^ 1526           ^^^ 1518
> 
> 		PMD_DRV_LOG(ERR, "maximum packet length must be "
> 			    "larger than %u and smaller than %u, "
> 			    "as jumbo frame is disabled",
> 			    (uint32_t)RTE_ETHER_MIN_LEN,
> 			    (uint32_t)RTE_ETHER_MAX_LEN);
> 		return I40E_ERR_CONFIG;
>                 ^^^ Error returned ???
> 	}
> }

Thanks for point out. Will go through the code to check if related pkt length still ok.


More information about the dev mailing list