[PATCH v4] net/i40e: add outer VLAN processing

Zhang, Qi Z qi.z.zhang at intel.com
Fri Jun 10 03:01:50 CEST 2022



> -----Original Message-----
> From: Kevin Liu <kevinx.liu at intel.com>
> Sent: Thursday, June 9, 2022 10:43 PM
> To: dev at dpdk.org
> Cc: Zhang, Yuying <yuying.zhang at intel.com>; Xing, Beilei
> <beilei.xing at intel.com>; Yang, SteveX <stevex.yang at intel.com>; Zhang,
> RobinX <robinx.zhang at intel.com>; Liu, KevinX <kevinx.liu at intel.com>
> Subject: [PATCH v4] net/i40e: add outer VLAN processing
> 
> From: Robin Zhang <robinx.zhang at intel.com>
> 
> Outer VLAN processing is supported after firmware v8.4, kernel driver also
> change the default behavior to support this feature. To align with kernel driver,
> add support for outer VLAN processing in DPDK.
> 
> But it is forbidden for firmware to change the Inner/Outer VLAN configuration
> while there are MAC/VLAN filters in the switch table.
> Therefore, we need to clear the MAC table before setting config, and then
> restore the MAC table after setting.
> 
> This will not impact on an old firmware.
> 
> Signed-off-by: Robin Zhang <robinx.zhang at intel.com>
> Signed-off-by: Kevin Liu <kevinx.liu at intel.com>
> ---
>  drivers/net/i40e/i40e_ethdev.c | 83 ++++++++++++++++++++++++++++++++--
>  drivers/net/i40e/i40e_ethdev.h |  3 ++
>  2 files changed, 81 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
> index 755786dc10..736afb268b 100644
> --- a/drivers/net/i40e/i40e_ethdev.c
> +++ b/drivers/net/i40e/i40e_ethdev.c
> @@ -3909,6 +3909,7 @@ i40e_vlan_tpid_set(struct rte_eth_dev *dev,
>  	struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data-
> >dev_private);
>  	int qinq = dev->data->dev_conf.rxmode.offloads &
>  		   RTE_ETH_RX_OFFLOAD_VLAN_EXTEND;
> +	u16 sw_flags = 0, valid_flags = 0;
>  	int ret = 0;
> 
>  	if ((vlan_type != RTE_ETH_VLAN_TYPE_INNER && @@ -3927,15
> +3928,34 @@ i40e_vlan_tpid_set(struct rte_eth_dev *dev,
>  	/* 802.1ad frames ability is added in NVM API 1.7*/
>  	if (hw->flags & I40E_HW_FLAG_802_1AD_CAPABLE) {
>  		if (qinq) {
> +			if (pf->is_outer_vlan_processing) {
> +				sw_flags =
> I40E_AQ_SET_SWITCH_CFG_OUTER_VLAN;
> +				valid_flags =
> I40E_AQ_SET_SWITCH_CFG_OUTER_VLAN;
> +			}
>  			if (vlan_type == RTE_ETH_VLAN_TYPE_OUTER)
>  				hw->first_tag = rte_cpu_to_le_16(tpid);
>  			else if (vlan_type == RTE_ETH_VLAN_TYPE_INNER)
>  				hw->second_tag = rte_cpu_to_le_16(tpid);
>  		} else {
> -			if (vlan_type == RTE_ETH_VLAN_TYPE_OUTER)
> -				hw->second_tag = rte_cpu_to_le_16(tpid);
> +			/*When FW > 8.3, the tpid must be set to QinQ to
> close extend*/

The comment is confusing, there is no firmware version related check in below code
And what is "set to QinQ to close extend" means?



More information about the dev mailing list