From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6F194A0553; Fri, 10 Jun 2022 10:06:58 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 101804069C; Fri, 10 Jun 2022 10:06:58 +0200 (CEST) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mails.dpdk.org (Postfix) with ESMTP id B4A7540689 for ; Fri, 10 Jun 2022 10:06:55 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1654848415; x=1686384415; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=Rngu+Yo3E3b43O6HJ1DC79hxlTuY9ZgO8GD0zpxf+iU=; b=SePxSwHsz3VHNuM+IK250mfh6xZ9BNMKV5trYS2MOaltzM+QMYfmDXFS 8IxwLmCRa0YQxQXIV3VUX0QARB7eMwqz83k+tt3pOpHC3L9ferIgFLLhp fu5GlybRUe25bWDmLDPXifTXUT3bSZnS8FtTdF3Bv7f2i/HdnKlWwfU6h e2qPme8znOuAPkrNj052UVInE+XBW+LPzqXC5NR+K3NuXmeiK9AiR3OqT rUGxxEaBwIQlQ0gkepcvVpu90z/RZIDzT03qMskNjCaeklcL2/ZKnRYHP /dBrfwUF61fbspVQCb/h8m8inf0230xdwKESK/WLfnvxRxC50a/0d101d g==; X-IronPort-AV: E=McAfee;i="6400,9594,10373"; a="341618532" X-IronPort-AV: E=Sophos;i="5.91,288,1647327600"; d="scan'208";a="341618532" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jun 2022 01:06:53 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,288,1647327600"; d="scan'208";a="533981044" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga003.jf.intel.com with ESMTP; 10 Jun 2022 01:06:53 -0700 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Fri, 10 Jun 2022 01:06:53 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Fri, 10 Jun 2022 01:06:53 -0700 Received: from NAM02-BN1-obe.outbound.protection.outlook.com (104.47.51.49) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.27; Fri, 10 Jun 2022 01:06:53 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SnOdC+02zkZzaphDfTDnpF+xTLu1eMopBSV4dQMCBc4vK84Ir+cx9s4qRT7ST+bDSP4BkKYix7P0uqg6UTU45uiV1esdgc1IXgS0g84ZzNdUyf/5I7vL0Gqn787Y24yI3Ze5mRFfTB2V1POd+q15ADqrbruAg0a04kgoT7uCb4FtO3mbapCxMAZS0ojUo17G+dcwUTVzH6Dps8jjOs6ChkguNdPifZuKZI9MQzGM8w6mckOlIUXGU0hIjYS0O9WIHbHq364t8Alr8jLbUjLQIYmxYF9qeivV7dRziAZUc3T1Z/1vAHhqFFn68noZsT0JUrsYl1UrRTdIW9wYuqxG0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=pSaBYvxEaDP7LfsKsprJ/BKclEzP1Dr6m9a9wHTlIzE=; b=Sjz1UU5MlfbCu+D6ep8IqGJzotMqoyqygclI42Vfba5/1T0DA1s28VCqilLhz+/2stDXPOH1M04ncAlfTpLR/wQRmpv7BR91vBk4w+KFcl9+US590aqvTweOV0ZLfPaP9AvkGfeL/9eklmzOiHRgPCQE08fV0p9IEI0RYX7hv9DnabBW9cDNE/nN5rBn5qijLeaCObqwcbnQ/MMklnHhHmkwyUvngr3MDSMyBvhaDOvFSYQGJ99qf4jsCa0Olj4SRGIjrmcWNcGT2QJP6/AE8DMnJDfzcmyNsTrQqyjLMqCIBkT+v1Yv3yeam9L3af6RJE67mUNMP6MjKalcnTB74w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from DM4PR11MB5994.namprd11.prod.outlook.com (2603:10b6:8:5d::20) by DM5PR11MB1994.namprd11.prod.outlook.com (2603:10b6:3:e::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5332.13; Fri, 10 Jun 2022 08:06:51 +0000 Received: from DM4PR11MB5994.namprd11.prod.outlook.com ([fe80::b4f6:f68:2e31:ddf7]) by DM4PR11MB5994.namprd11.prod.outlook.com ([fe80::b4f6:f68:2e31:ddf7%6]) with mapi id 15.20.5293.019; Fri, 10 Jun 2022 08:06:51 +0000 From: "Zhang, Qi Z" To: "Liu, KevinX" , "dev@dpdk.org" CC: "Zhang, Yuying" , "Xing, Beilei" , "Yang, SteveX" , "Zhang, RobinX" , "Liu, KevinX" Subject: RE: [PATCH v6] net/i40e: add outer VLAN processing Thread-Topic: [PATCH v6] net/i40e: add outer VLAN processing Thread-Index: AQHYfJ8vS1YZ7XyVA0OHrKDMFEKXza1IR3kA Date: Fri, 10 Jun 2022 08:06:51 +0000 Message-ID: References: <20220407200111.14753-1-kevinx.liu@intel.com> <20220610155216.81289-1-kevinx.liu@intel.com> In-Reply-To: <20220610155216.81289-1-kevinx.liu@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.6.500.17 dlp-product: dlpe-windows authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 4b0f16d9-f5ab-4cc2-18bb-08da4ab82cb3 x-ms-traffictypediagnostic: DM5PR11MB1994:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: SIGtpQ+OoHHjOsBvbbA9EXiWCGFpEIVqhL59xcKdCZbiGsi4oadzRgnNwkyn6EzBQ5IXyxPqTNMDOnop4MN64wHl/QIFvcZry1AuQkNAf2nwnzBeJe2NX+6/nHxKCqm8NvLmuroXhTfvV8nseaMOpvSwR366H+l9ftlWVSPNun9SinkGmeg6yh59qzlggVpojJa0++Ly2T6Zt4TbVmX5NbyqHdcn1AQ4PL7T4zul7uUNHuxytktK0iFrQT2fYku66uNB8v7RlH04/Mlzg8MQ573xayNcGxtNuEAs2kXG9qnwTUiHqygfbo8qdSYaW7bNrmok3iPNMba23LNbBfAbs2AsVOwMSbompzQLwXJ5dMaHCv1asB2IFIgXnKBi9LhupvJvJNH4cLWLSI+ccnqzS6FIalIaBVSdYscL3TTMKJfXMYu0Jvt+xf9GasVnGg9/fgUnKVAYlFsCDlHbn6S/J7EE+HJtGwFv1GIOlTgtmusi01otVZSSGJui8BNOPVYoGSQnXH2Tl9ys3XtA3Vvsj0XmBTp1yweGcgVkigOW3nvkiXnHm65DMVtmB+awtZ4Fkahyrsiapcg68Raov0nyunlTwfkD+ZTP54g895Sozw0BtXNr9EAgOCcI5ncUbUb4LX04/QNm3OAF2D9ogtG7GZX0ULW6fb6cWxHDsemIAj/1bDEwlVuqu4p5UTDwsHAT3R5+ZXbruCrWS4cVTe/uvA== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM4PR11MB5994.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(5660300002)(508600001)(8936002)(33656002)(26005)(9686003)(52536014)(71200400001)(53546011)(6506007)(86362001)(2906002)(7696005)(122000001)(82960400001)(38070700005)(107886003)(55016003)(66446008)(186003)(38100700002)(83380400001)(66946007)(54906003)(76116006)(316002)(110136005)(4326008)(8676002)(66476007)(66556008)(64756008); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?IDlnUFdfasWd7VwQ2rmMzP8YzBJaoTw6XhgHdFupbX9Mvkg+0kgH9krJCLN/?= =?us-ascii?Q?bj4Q2iedeFO9a6McSe5ivFn9+2qLmTvAYre7qm/LRYijLH///4hwRM4iWGCE?= =?us-ascii?Q?bYmt/xUBsmYYYJbnz/ekvbnaFj/cgAlbWwSSkrjPpCSA1psXdViNXyXaCcft?= =?us-ascii?Q?YsfgW4GakHW3AmLNGoW52oastGfaBNkHmfEtVs7rlQ70TAKdPrVdx4ijAK19?= =?us-ascii?Q?dXDw1prkik9VmJpBrYfiKUMQNOPyhkr4Mzz+PBciibtwh1DivC5g0SnhY9Vr?= =?us-ascii?Q?AsCPpq3VTpxLp6uv8umS7ClzocCO5FZisgtNKYD8Dx0kvyJXF1boT2VwMZbR?= =?us-ascii?Q?jdfifZkMnMnrkPbZYHD7JWfOXZ+2ta4NDyYnAaJ2I4TV4TWdsplzDo6Ik4k/?= =?us-ascii?Q?Yd2S6uOK/Paq/BeQfoiNBpxlXeNRHUYIHm9RyJ1ZFJuBPyYR00Jf3knKXB2D?= =?us-ascii?Q?09d+1Ka14ZOFIockiwwr6MWEtvI4LGJ+EyLoKiXNmx16geVVRSqVjjRpB4IQ?= =?us-ascii?Q?Yq/IAIx4Ays963ueRLGrBDk2c0LRLukOCVdmCjG++lJEJtyG1yeMVmaWefjC?= =?us-ascii?Q?PXLsxxifkO5Vy64l58N+fSUpCsJBSqoT3jfgSHWT2/2Oks0/tfFs7Rh0QIg+?= =?us-ascii?Q?8ib4NRrrvTI7cRhflesC0BI4yLWKRLDwzadQqsXB4W/mcHs+Y+RjfP4QPj+G?= =?us-ascii?Q?PmoDDhlYTbPSM5Bjlr1r0Kb7s9LDo6gy1uU+tKuB8No1JrYiMTYe839X6WPW?= =?us-ascii?Q?jtYtvzPG/zocIrVc6fzsjQWjj07eEeSKmIY82VDyHQqO+NoaQT2YieGU81DB?= =?us-ascii?Q?l4w3FLqLTBlX6imQXs78IhkFe70kgygQopbQ4CzO41nX759bwOj+qDfvk0v6?= =?us-ascii?Q?Er3g00adzRicSQeZqbFn0XNS4Fp5U0MIQ5l6TOK8f7USbxzTVrHVJSHNSIop?= =?us-ascii?Q?h5Xivzu1bkE0/dyL7V1BiSx+VdYdOs0stsIVgrrer3fHerDp8VZPC59qLmpE?= =?us-ascii?Q?ZCpe54t8KtcR+cCmuJ3NWLYHm7PndYrf4SUurUQY03gFqay9TrXqUrdE10vp?= =?us-ascii?Q?rWa0s7dmTGfxWPZk2pbxfyTtE2rYZ2kftO+By61+Bm+KJgCZQ0n7Bb1NfJlx?= =?us-ascii?Q?ujY+XPRUOFi0SBkiBTfKjdrNVuI1X4m1spbK8FL+5M/67+AjVHRnH2bx2MCv?= =?us-ascii?Q?rRpYGVjT2N+773e7cUieDV9GT57Jy73gEIKx35j6EfmcXQJ+BAMyKp5jeTT+?= =?us-ascii?Q?tNExgAe4WwCcbQjeqdoXN8H+0QkqVWcO7XbJdO/zqt1m0n7oxOGEkSicYVzB?= =?us-ascii?Q?FFcrIMlsUo76y3B/xu3SYmr9BX+zpQGqmWl1zklloA5z6hMf3qhXh8auee7N?= =?us-ascii?Q?SZnWvpvQT3cRg7H4iFAXAm3wM/3WVVntNiiWfNgiPYCmhaalG6VwyUOmxTTW?= =?us-ascii?Q?T4K6vWmuHaaUC0lAo2rVNr/eZKToPeWGpWkFQ45V0r0ujCfbVhKrtXv2HDSd?= =?us-ascii?Q?jcKGDwwTl8butDViEw25FUo8Op5T3+4hhVxLjVXIJtnbaG85SBhCigxZe03i?= =?us-ascii?Q?8ZUvH2MK7riRRPFr+YwXtWq8h60vfeFipr+UsIliB1r4IKPiM9YnPWw31Ff8?= =?us-ascii?Q?4XhwKMjX6emgSTvSLkEQoQ9hjZZRCsr5cnpWGCDUEathNeI8V3jE2FNir9PF?= =?us-ascii?Q?L+TuuAphLZQ5DLsd1AXr4887yVWeAmGHkLkJPOvQT6QWjJYwe3Uux+78eokk?= =?us-ascii?Q?kbZszQpMHQ=3D=3D?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5994.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4b0f16d9-f5ab-4cc2-18bb-08da4ab82cb3 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Jun 2022 08:06:51.0562 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: FYnPTLrlAmC4JA8CmNJNiGECM50Dg3eMxGMSLwrbClQ+Km7wn6Fp2VbWkSq22gxggQ5uInEaJ8k3WP2YRKjlCA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR11MB1994 X-OriginatorOrg: intel.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org > -----Original Message----- > From: Kevin Liu > Sent: Friday, June 10, 2022 11:52 PM > To: dev@dpdk.org > Cc: Zhang, Yuying ; Xing, Beilei > ; Yang, SteveX ; Zhang, > RobinX ; Liu, KevinX > Subject: [PATCH v6] net/i40e: add outer VLAN processing >=20 > From: Robin Zhang >=20 > Outer VLAN processing is supported after firmware v8.4, kernel driver als= o > change the default behavior to support this feature. To align with kernel= driver, > add support for outer VLAN processing in DPDK. >=20 > But it is forbidden for firmware to change the Inner/Outer VLAN configura= tion > 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. >=20 > This will not impact on an old firmware. >=20 > Signed-off-by: Robin Zhang > Signed-off-by: Kevin Liu > --- > drivers/net/i40e/i40e_ethdev.c | 94 ++++++++++++++++++++++++++++++++-- > drivers/net/i40e/i40e_ethdev.h | 3 ++ > 2 files changed, 92 insertions(+), 5 deletions(-) >=20 > diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethde= v.c > index 755786dc10..c708bdb0d4 100644 > --- a/drivers/net/i40e/i40e_ethdev.c > +++ b/drivers/net/i40e/i40e_ethdev.c > @@ -2575,6 +2575,7 @@ i40e_dev_close(struct rte_eth_dev *dev) > struct i40e_hw *hw =3D I40E_DEV_PRIVATE_TO_HW(dev->data- > >dev_private); > struct rte_pci_device *pci_dev =3D RTE_ETH_DEV_TO_PCI(dev); > struct rte_intr_handle *intr_handle =3D pci_dev->intr_handle; > + struct rte_eth_rxmode *rxmode =3D &dev->data->dev_conf.rxmode; > struct i40e_filter_control_settings settings; > struct rte_flow *p_flow; > uint32_t reg; > @@ -2587,6 +2588,18 @@ i40e_dev_close(struct rte_eth_dev *dev) > if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > return 0; >=20 > + /* > + * It is a workaround, when firmware > v8.3, if the double VLAN > + * is disabled when the program exits, an abnormal error will occur > + * on the NIC. Need to enable double VLAN when dev is closed. > + */ > + if (pf->is_outer_vlan_processing) { > + if (!(rxmode->offloads & > RTE_ETH_RX_OFFLOAD_VLAN_EXTEND)) { > + rxmode->offloads |=3D > RTE_ETH_RX_OFFLOAD_VLAN_EXTEND; > + i40e_vlan_offload_set(dev, > RTE_ETH_VLAN_EXTEND_MASK); > + } > + } > + > ret =3D rte_eth_switch_domain_free(pf->switch_domain_id); > if (ret) > PMD_INIT_LOG(WARNING, "failed to free switch domain: %d", > ret); @@ -3909,6 +3922,7 @@ i40e_vlan_tpid_set(struct rte_eth_dev *dev, > struct i40e_pf *pf =3D I40E_DEV_PRIVATE_TO_PF(dev->data- > >dev_private); > int qinq =3D dev->data->dev_conf.rxmode.offloads & > RTE_ETH_RX_OFFLOAD_VLAN_EXTEND; > + u16 sw_flags =3D 0, valid_flags =3D 0; > int ret =3D 0; >=20 > if ((vlan_type !=3D RTE_ETH_VLAN_TYPE_INNER && @@ -3927,15 > +3941,32 @@ 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 =3D > I40E_AQ_SET_SWITCH_CFG_OUTER_VLAN; > + valid_flags =3D > I40E_AQ_SET_SWITCH_CFG_OUTER_VLAN; > + } > if (vlan_type =3D=3D RTE_ETH_VLAN_TYPE_OUTER) > hw->first_tag =3D rte_cpu_to_le_16(tpid); > else if (vlan_type =3D=3D RTE_ETH_VLAN_TYPE_INNER) > hw->second_tag =3D rte_cpu_to_le_16(tpid); > } else { > - if (vlan_type =3D=3D RTE_ETH_VLAN_TYPE_OUTER) > - hw->second_tag =3D rte_cpu_to_le_16(tpid); > + /* > + * When firmware > 8.3, if tpid is equal to 0x88A8, > + * indicates that the disable double VLAN operation is > in progress. > + * Need set switch configuration back to default. > + */ > + if (pf->is_outer_vlan_processing && tpid =3D=3D > RTE_ETHER_TYPE_QINQ) { > + sw_flags =3D 0; > + valid_flags =3D > I40E_AQ_SET_SWITCH_CFG_OUTER_VLAN; > + if (vlan_type =3D=3D RTE_ETH_VLAN_TYPE_OUTER) > + hw->first_tag =3D > rte_cpu_to_le_16(tpid); > + } else { > + if (vlan_type =3D=3D RTE_ETH_VLAN_TYPE_OUTER) > + hw->second_tag =3D > rte_cpu_to_le_16(tpid); > + } > } > - ret =3D i40e_aq_set_switch_config(hw, 0, 0, 0, NULL); > + ret =3D i40e_aq_set_switch_config(hw, sw_flags, > + valid_flags, 0, NULL); > if (ret !=3D I40E_SUCCESS) { > PMD_DRV_LOG(ERR, > "Set switch config failed aq_err: %d", @@ - > 3987,8 +4018,13 @@ static int i40e_vlan_offload_set(struct rte_eth_dev > *dev, int mask) { > struct i40e_pf *pf =3D I40E_DEV_PRIVATE_TO_PF(dev->data- > >dev_private); > + struct i40e_mac_filter_info *mac_filter; > struct i40e_vsi *vsi =3D pf->main_vsi; > struct rte_eth_rxmode *rxmode; > + struct i40e_mac_filter *f; > + int i, num; > + void *temp; > + int ret; >=20 > rxmode =3D &dev->data->dev_conf.rxmode; > if (mask & RTE_ETH_VLAN_FILTER_MASK) { @@ -4007,6 +4043,33 > @@ i40e_vlan_offload_set(struct rte_eth_dev *dev, int mask) > } >=20 > if (mask & RTE_ETH_VLAN_EXTEND_MASK) { > + i =3D 0; > + num =3D vsi->mac_num; > + mac_filter =3D rte_zmalloc("mac_filter_info_data", > + num * sizeof(*mac_filter), 0); > + if (mac_filter =3D=3D NULL) { > + PMD_DRV_LOG(ERR, "failed to allocate memory"); > + return I40E_ERR_NO_MEMORY; > + } > + > + /* > + * 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, set switch config in 'i40e_vlan_tpie_set' to > support for > + * outer VLAN processing. 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 > feature is > + * recommended to be used in firmware v8.6. > + */ > + /* Remove all existing mac */ > + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { > + mac_filter[i] =3D f->mac_info; > + ret =3D i40e_vsi_delete_mac(vsi, &f- > >mac_info.mac_addr); > + if (ret) > + PMD_DRV_LOG(ERR, "i40e vsi delete mac > fail."); > + i++; > + } > if (rxmode->offloads & > RTE_ETH_RX_OFFLOAD_VLAN_EXTEND) { > i40e_vsi_config_double_vlan(vsi, TRUE); > /* Set global registers with default ethertype. */ @@ > -4014,9 +4077,19 @@ i40e_vlan_offload_set(struct rte_eth_dev *dev, int > mask) > RTE_ETHER_TYPE_VLAN); > i40e_vlan_tpid_set(dev, RTE_ETH_VLAN_TYPE_INNER, > RTE_ETHER_TYPE_VLAN); > - } > - else > + } else { > + if (pf->is_outer_vlan_processing) > + i40e_vlan_tpid_set(dev, > RTE_ETH_VLAN_TYPE_OUTER, > + RTE_ETHER_TYPE_QINQ); > i40e_vsi_config_double_vlan(vsi, FALSE); > + } > + /* Restore all mac */ > + for (i =3D 0; i < num; i++) { > + ret =3D i40e_vsi_add_mac(vsi, &mac_filter[i]); > + if (ret) > + PMD_DRV_LOG(ERR, "i40e vsi add mac fail."); > + } > + rte_free(mac_filter); > } >=20 > if (mask & RTE_ETH_QINQ_STRIP_MASK) { > @@ -4846,6 +4919,17 @@ i40e_pf_parameter_init(struct rte_eth_dev *dev) > return -EINVAL; > } >=20 > + /** > + * Enable outer VLAN processing if firmware version is greater > + * than v8.3 > + */ > + if (hw->aq.fw_maj_ver > 8 || > + (hw->aq.fw_maj_ver =3D=3D 8 && hw->aq.fw_min_ver > 3)) { > + pf->is_outer_vlan_processing =3D true; Why not just name the flag as "fw8_3gt? Then you don't need to repeat explain "when firmware > 8.3" above the is_ou= ter_vlan_processing flag.