[dpdk-dev] net/i40e: consider QinQ when setting MTU
Checks
Commit Message
When counting max packet length from MTU, count
VLAN tag length twice for QinQ packets.
Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
---
drivers/net/i40e/i40e_ethdev.c | 2 +-
drivers/net/i40e/i40e_ethdev_vf.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
Comments
On 4/28/2017 2:55 AM, Wenzhuo Lu wrote:
> When counting max packet length from MTU, count
> VLAN tag length twice for QinQ packets.
>
> Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
> ---
> drivers/net/i40e/i40e_ethdev.c | 2 +-
> drivers/net/i40e/i40e_ethdev_vf.c | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
> index 3fa25dc..74041ae 100644
> --- a/drivers/net/i40e/i40e_ethdev.c
> +++ b/drivers/net/i40e/i40e_ethdev.c
> @@ -10593,7 +10593,7 @@ static void i40e_set_default_mac_addr(struct rte_eth_dev *dev,
> struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
> struct rte_eth_dev_data *dev_data = pf->dev_data;
> uint32_t frame_size = mtu + ETHER_HDR_LEN
> - + ETHER_CRC_LEN + I40E_VLAN_TAG_SIZE;
> + + ETHER_CRC_LEN + I40E_VLAN_TAG_SIZE * 2;
Hi Wenzhuo,
Shouldn't we check if QinQ enabled before taking size account?
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Ferruh Yigit
> Sent: Friday, April 28, 2017 1:55 PM
> To: Lu, Wenzhuo <wenzhuo.lu@intel.com>; dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH] net/i40e: consider QinQ when setting MTU
>
> On 4/28/2017 2:55 AM, Wenzhuo Lu wrote:
> > When counting max packet length from MTU, count VLAN tag length twice
> > for QinQ packets.
> >
> > Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
> > ---
> > drivers/net/i40e/i40e_ethdev.c | 2 +-
> > drivers/net/i40e/i40e_ethdev_vf.c | 2 +-
> > 2 files changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/net/i40e/i40e_ethdev.c
> > b/drivers/net/i40e/i40e_ethdev.c index 3fa25dc..74041ae 100644
> > --- a/drivers/net/i40e/i40e_ethdev.c
> > +++ b/drivers/net/i40e/i40e_ethdev.c
> > @@ -10593,7 +10593,7 @@ static void i40e_set_default_mac_addr(struct
> rte_eth_dev *dev,
> > struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data-
> >dev_private);
> > struct rte_eth_dev_data *dev_data = pf->dev_data;
> > uint32_t frame_size = mtu + ETHER_HDR_LEN
> > - + ETHER_CRC_LEN + I40E_VLAN_TAG_SIZE;
> > + + ETHER_CRC_LEN + I40E_VLAN_TAG_SIZE * 2;
>
> Hi Wenzhuo,
>
> Shouldn't we check if QinQ enabled before taking size account?
Hi, Ferruh
Checking QinQ enabled here makes no sense, because we don't know
If the packets is carry single vlan or double vlan.
Acked-by: Jingjing Wu <jingjing.wu@intel.com>
Hi Ferruh,
> -----Original Message-----
> From: Wu, Jingjing
> Sent: Friday, April 28, 2017 4:27 PM
> To: Yigit, Ferruh; Lu, Wenzhuo; dev@dpdk.org
> Subject: RE: [dpdk-dev] [PATCH] net/i40e: consider QinQ when setting MTU
>
>
>
> > -----Original Message-----
> > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Ferruh Yigit
> > Sent: Friday, April 28, 2017 1:55 PM
> > To: Lu, Wenzhuo <wenzhuo.lu@intel.com>; dev@dpdk.org
> > Subject: Re: [dpdk-dev] [PATCH] net/i40e: consider QinQ when setting
> > MTU
> >
> > On 4/28/2017 2:55 AM, Wenzhuo Lu wrote:
> > > When counting max packet length from MTU, count VLAN tag length
> > > twice for QinQ packets.
> > >
> > > Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
> > > ---
> > > drivers/net/i40e/i40e_ethdev.c | 2 +-
> > > drivers/net/i40e/i40e_ethdev_vf.c | 2 +-
> > > 2 files changed, 2 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/drivers/net/i40e/i40e_ethdev.c
> > > b/drivers/net/i40e/i40e_ethdev.c index 3fa25dc..74041ae 100644
> > > --- a/drivers/net/i40e/i40e_ethdev.c
> > > +++ b/drivers/net/i40e/i40e_ethdev.c
> > > @@ -10593,7 +10593,7 @@ static void i40e_set_default_mac_addr(struct
> > rte_eth_dev *dev,
> > > struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data-
> > >dev_private);
> > > struct rte_eth_dev_data *dev_data = pf->dev_data;
> > > uint32_t frame_size = mtu + ETHER_HDR_LEN
> > > - + ETHER_CRC_LEN + I40E_VLAN_TAG_SIZE;
> > > + + ETHER_CRC_LEN + I40E_VLAN_TAG_SIZE * 2;
> >
> > Hi Wenzhuo,
> >
> > Shouldn't we check if QinQ enabled before taking size account?
>
> Hi, Ferruh
>
> Checking QinQ enabled here makes no sense, because we don't know If the
> packets is carry single vlan or double vlan.
>
> Acked-by: Jingjing Wu <jingjing.wu@intel.com>
BTW, the patch aligned the behavior of kernel driver and DPDK.
On 4/28/2017 9:27 AM, Wu, Jingjing wrote:
>
>
>> -----Original Message-----
>> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Ferruh Yigit
>> Sent: Friday, April 28, 2017 1:55 PM
>> To: Lu, Wenzhuo <wenzhuo.lu@intel.com>; dev@dpdk.org
>> Subject: Re: [dpdk-dev] [PATCH] net/i40e: consider QinQ when setting MTU
>>
>> On 4/28/2017 2:55 AM, Wenzhuo Lu wrote:
>>> When counting max packet length from MTU, count VLAN tag length twice
>>> for QinQ packets.
>>>
>>> Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
>>> ---
>>> drivers/net/i40e/i40e_ethdev.c | 2 +-
>>> drivers/net/i40e/i40e_ethdev_vf.c | 2 +-
>>> 2 files changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/net/i40e/i40e_ethdev.c
>>> b/drivers/net/i40e/i40e_ethdev.c index 3fa25dc..74041ae 100644
>>> --- a/drivers/net/i40e/i40e_ethdev.c
>>> +++ b/drivers/net/i40e/i40e_ethdev.c
>>> @@ -10593,7 +10593,7 @@ static void i40e_set_default_mac_addr(struct
>> rte_eth_dev *dev,
>>> struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data-
>>> dev_private);
>>> struct rte_eth_dev_data *dev_data = pf->dev_data;
>>> uint32_t frame_size = mtu + ETHER_HDR_LEN
>>> - + ETHER_CRC_LEN + I40E_VLAN_TAG_SIZE;
>>> + + ETHER_CRC_LEN + I40E_VLAN_TAG_SIZE * 2;
>>
>> Hi Wenzhuo,
>>
>> Shouldn't we check if QinQ enabled before taking size account?
>
> Hi, Ferruh
>
> Checking QinQ enabled here makes no sense, because we don't know
> If the packets is carry single vlan or double vlan.
What do you think commenting code to say "I40E_VLAN_TAG_SIZE * 2" is for
QinQ?
It is not obvious and in the feature somebody not thinking about QinQ
use case may miss this, and do something wrong, even can fix this J
>
> Acked-by: Jingjing Wu <jingjing.wu@intel.com>
>
Hi Ferruh,
> -----Original Message-----
> From: Yigit, Ferruh
> Sent: Friday, April 28, 2017 8:38 PM
> To: Wu, Jingjing; Lu, Wenzhuo; dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH] net/i40e: consider QinQ when setting MTU
>
> On 4/28/2017 9:27 AM, Wu, Jingjing wrote:
> >
> >
> >> -----Original Message-----
> >> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Ferruh Yigit
> >> Sent: Friday, April 28, 2017 1:55 PM
> >> To: Lu, Wenzhuo <wenzhuo.lu@intel.com>; dev@dpdk.org
> >> Subject: Re: [dpdk-dev] [PATCH] net/i40e: consider QinQ when setting
> >> MTU
> >>
> >> On 4/28/2017 2:55 AM, Wenzhuo Lu wrote:
> >>> When counting max packet length from MTU, count VLAN tag length
> >>> twice for QinQ packets.
> >>>
> >>> Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
> >>> ---
> >>> drivers/net/i40e/i40e_ethdev.c | 2 +-
> >>> drivers/net/i40e/i40e_ethdev_vf.c | 2 +-
> >>> 2 files changed, 2 insertions(+), 2 deletions(-)
> >>>
> >>> diff --git a/drivers/net/i40e/i40e_ethdev.c
> >>> b/drivers/net/i40e/i40e_ethdev.c index 3fa25dc..74041ae 100644
> >>> --- a/drivers/net/i40e/i40e_ethdev.c
> >>> +++ b/drivers/net/i40e/i40e_ethdev.c
> >>> @@ -10593,7 +10593,7 @@ static void
> i40e_set_default_mac_addr(struct
> >> rte_eth_dev *dev,
> >>> struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data-
> >>> dev_private);
> >>> struct rte_eth_dev_data *dev_data = pf->dev_data;
> >>> uint32_t frame_size = mtu + ETHER_HDR_LEN
> >>> - + ETHER_CRC_LEN + I40E_VLAN_TAG_SIZE;
> >>> + + ETHER_CRC_LEN + I40E_VLAN_TAG_SIZE * 2;
> >>
> >> Hi Wenzhuo,
> >>
> >> Shouldn't we check if QinQ enabled before taking size account?
> >
> > Hi, Ferruh
> >
> > Checking QinQ enabled here makes no sense, because we don't know If
> > the packets is carry single vlan or double vlan.
>
> What do you think commenting code to say "I40E_VLAN_TAG_SIZE * 2" is for
> QinQ?
>
> It is not obvious and in the feature somebody not thinking about QinQ use
> case may miss this, and do something wrong, even can fix this J
Thanks for your suggestion. I'll send a V2 to add the comments.
>
> >
> > Acked-by: Jingjing Wu <jingjing.wu@intel.com>
> >
@@ -10593,7 +10593,7 @@ static void i40e_set_default_mac_addr(struct rte_eth_dev *dev,
struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
struct rte_eth_dev_data *dev_data = pf->dev_data;
uint32_t frame_size = mtu + ETHER_HDR_LEN
- + ETHER_CRC_LEN + I40E_VLAN_TAG_SIZE;
+ + ETHER_CRC_LEN + I40E_VLAN_TAG_SIZE * 2;
int ret = 0;
/* check if mtu is within the allowed range */
@@ -2688,7 +2688,7 @@ static int eth_i40evf_pci_remove(struct rte_pci_device *pci_dev)
struct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);
struct rte_eth_dev_data *dev_data = vf->dev_data;
uint32_t frame_size = mtu + ETHER_HDR_LEN
- + ETHER_CRC_LEN + I40E_VLAN_TAG_SIZE;
+ + ETHER_CRC_LEN + I40E_VLAN_TAG_SIZE * 2;
int ret = 0;
/* check if mtu is within the allowed range */