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 8587EA0093; Mon, 28 Nov 2022 07:54:55 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9DFF342D27; Mon, 28 Nov 2022 07:54:31 +0100 (CET) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2118.outbound.protection.outlook.com [40.107.244.118]) by mails.dpdk.org (Postfix) with ESMTP id 1132340A7F for ; Mon, 28 Nov 2022 07:54:29 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nId7CrvYqgGlrSg0p+6/DDw1UMcbEXqjGFmen5y66XgcpCWuztGdt3ij2m/nFrhlhaQjFPqWmCyTwcCmdKnlepPexRN7VJgnQsRO3mpiFIjFjnO3EziEmJwe3//K6P1uVzFDfOLzW+0rCugh67pJDwBjvku+8gb8X4K3Sfydp6PqVqw6p8XSSa7SIjv/2FMLpxzv4EY78d+wicRCBiPy0pCaLU6EAVkTQ9BAeNuT8kLMNd3RPsISgMPmCiFKA1jDw6b5IO33Gx3fdMdJXwYqCSB6vrOTOaOHI0y0YdOFxR64pgASrivJ3r84v+zBbt6cvoBZ1CA7O9B7Bt22CndNLw== 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=bWF2uDJNOVc5hZcZJZHzfUxtuuLZK3FxoNsnJewS4oM=; b=AxN9w+ZSlgnW5S+vKBJQQ0fYDsaZAhDK9DDc26P+HE/RX6X7cHryJuI0ikmeZh2VBCWeo3n3XBIZNmu1EMyerXQaLkkZzLHgK5ZJFojsMCSAqlIvi0/tfPrEB8wpFf04ROOB/tN78uzAxZGpnyTOBQjRVkMTu5Sz4mnTtZEicbilVmDRTBYc2MRQouLujSmu2tOl7n+KVlFsLMOI0ZKM4B50VNZyjGm9g0CQC3KrBM/5eXTwRgAYfKBFlIs+MLy9ddb68WvytDZsNsYIwBZQ1HjqlgCef4cS5TQ1ZjW2a4JvB4lxidI/ynFcChI9DRFv1cEyi8zSEGLfjBVYPRyMhw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bWF2uDJNOVc5hZcZJZHzfUxtuuLZK3FxoNsnJewS4oM=; b=uomg9q7yROZ0OokfaLT0NOx9QVW6k+d6VbdOwy6Ax0LodlQIlmjHJ9VoeJskhTk7c1DukFgsLPHARrNljDMQ1l8rPgph/JiB9/yL3hhvinL9FsukRG3ZIoGNcU1pCsSAlV0geljcd2PMMNJxM4pOLJ5lhXj2cKxS+EGx0Na5g50= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by CO1PR13MB4952.namprd13.prod.outlook.com (2603:10b6:303:d9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.23; Mon, 28 Nov 2022 06:54:27 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::5122:8c31:51f3:4ee7]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::5122:8c31:51f3:4ee7%4]) with mapi id 15.20.5857.021; Mon, 28 Nov 2022 06:54:27 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Peng Zhang , Chaoyong He Subject: [PATCH 4/8] net/nfp: add support for QinQ strip Date: Mon, 28 Nov 2022 14:53:55 +0800 Message-Id: <20221128065359.12737-5-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221128065359.12737-1-chaoyong.he@corigine.com> References: <20221128065359.12737-1-chaoyong.he@corigine.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-ClientProxiedBy: SG3P274CA0019.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::31) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CO1PR13MB4952:EE_ X-MS-Office365-Filtering-Correlation-Id: ae94095f-e5ef-43a0-dff4-08dad10d645f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5BVZAzTUFJHBuIAoyWXoxFfSc28YnZkc6k3VjGLk0N8xT1oelnubo6sMaKjw7XWjqIhxKeSSI055GtNFRz0rcu5SE24MV0P5cpdZynlHP8Q0cjiNcDUKgEk2KHdsZOKchKGfL/mXbZBfiCal70QKkjL7M9LuAv26WkWDqArRMNjsk9AdQO9HkUXTtV0W/q+A2vvuJWESZ8MYcuXzpM3B1fRE+H/EyHV+j6g1e2QR9QJMo++fmyOQEYP+ACayY0Kp7kvVeUEgKKH8LBlnEeuihK3Op990ffLylJMRc8LyVG7jD6ilb9EGIopYMsPpr5QlpGqGafeClPf1pIOKrHdN8wj8S5ZxA38GTUYCsepszo3qP+xN0jVkcZa/Lwn4Vco/Gj72d24pILB306obApJ9AxqjpZbFyDmhxhWpZzkY6Vu/F9LHfkTfS+Gbsnc861BbOE/SdmCGTH5jWZanepuLQsYSa0j/P6zKkK81WxIVlKVUkaSUjQfeuS8sxHeFMZWXnr2GeP9j2Fq252bTmNqk8jc7FItD+06rGZRYfmHvJxjKo09Cyro0SLtK/EzfHhAMrqPCEcZTn8UlGkKj+Mg3tJBH3vIDjx8gK5kvQGS9WQ/otbO/mXy4T/Q5fS10jw7ZmtKh8PjSBH2mKbf7I8v9HTX9bUN2SDXxN0cnIhMdAQ0HiMmV7KKngkawPt8PodYhF/P0qn74KuHo+kZNkz2f/yvMeuhDBZWAgA1cSmVueFdf5nfPBkGZRGIuhGZms9PR X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(39830400003)(366004)(346002)(396003)(136003)(376002)(451199015)(38350700002)(6486002)(38100700002)(66556008)(66476007)(66946007)(4326008)(41300700001)(107886003)(6666004)(478600001)(36756003)(8676002)(2906002)(54906003)(316002)(6916009)(8936002)(5660300002)(86362001)(44832011)(2616005)(83380400001)(66574015)(1076003)(186003)(26005)(6512007)(52116002)(6506007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OHU4MWFMNUJGcUtYdmF0V2FnZGl5YzZPb09rYlIyUmpYVHozSlhIZFZRU1FO?= =?utf-8?B?aTdIT1dnRGVyQ2dmMGg2VjZhQk1vdEEwYXFwVUt3UWtNZ3ZCM3JMMVpEaFZZ?= =?utf-8?B?dUw3YkZ2dnpBTmxGaUNTdkN0dDBsZThlNnU2bnRkSlBGTk0zTUJIZ294WHYr?= =?utf-8?B?bjBKVjF0Q21iNXp4QzVzU1BOV0daUnNYKytqa1J0UWw0SUY5NE81V3FwakFk?= =?utf-8?B?QklHaTBaSkhscDhWNDRtVkVIdzk3Slkvcy9pdDhZTWhlYnlHY09RaUV2dFJD?= =?utf-8?B?Qnc5UFpCa3VaS3RvZ0FQeDZWeDdGbExya2FPOHc1dTR1Z3pmWG5jb3VPdnRl?= =?utf-8?B?dlZGQmMzSWZWVkw1R2dEenVpZGdMWVVFTGVBZGQxQVFnZmV3Qm1kcXhJelU2?= =?utf-8?B?QktHOXdFbkZRb0RBRUN4d3VtaEF1ZnNyY2wyMTJoY0F4R2hmQ05YanorYVVQ?= =?utf-8?B?V3pBZEd6ZXZxQWtsYmlRa2VYbjVyUnMzSlNaVXVLNC9QclZJMjhuTEZNajBE?= =?utf-8?B?N0dRSWF0NzB4VGJzejlneVliSW5UR29yRGl4aU9wcFVyRUhjdmp2VzU4VFV5?= =?utf-8?B?WE05WTAzWDMwazhlcTk2YWFuL1Q4aEJva3EzemtKR01sZnhZUVpycVVwckl5?= =?utf-8?B?ZXZ3RktvYmUwOXR4QUFCdi8zZ0FGU3hQKzlGWVVyemlxZHpJbXV2dU5jV1N4?= =?utf-8?B?QkNQQ1dDZHd2QWs5eEFWM2xRSkdLWkRWQThxbXNiR1h1TVQwQWpKdnZ4Y3JN?= =?utf-8?B?bDlMYmdyQVdyODdTT3FoT0FKbGhGVXdEMklDZUg0VEJzdTdIQk9seVNsUExV?= =?utf-8?B?M1lTT08rMHpZSzdoVUFHWWR6Sk1HUFZZd1pGVXJ5amNnWS9nZUhLY0ZNNVVV?= =?utf-8?B?eTFpejQyRW9uVWR1T3RXUjhhcUEzSlV2OU9OWWw5dVl2VFdmTittaVJKVHFI?= =?utf-8?B?c1VGZEgydHNaUjRaYjgrN1JPQng2bExaL3J1cklJNDYxdUwybmtvVE9TTmRr?= =?utf-8?B?NU1IZU5uNkZJTWp1QVZDS3BkWUtoOE44NzFhTE1mTlVFcDBKN3JLM1RuNWtX?= =?utf-8?B?VTRzbkhUU1NmVnBTRi92QWo3OHJzeXJ0ckhDSUdiZjdyRGkzWkZKVC9kNS9j?= =?utf-8?B?LzV1bXl3R0RJejUvbTFzemNGYW1McGN4NXFiaHcwVnhSbnhEMEI3aXBFM3ly?= =?utf-8?B?WlJ2WEg5QXZGbERseUYxNy9wK1VmSXQ4aHNoS1VZMER1MHRjMCtYS2tTMTNa?= =?utf-8?B?VmVHQjVEOFFEc2taejVJVXFyNXpNNHIzNlc1Z1h1aWd6eXN3aWhScFBCL0N4?= =?utf-8?B?K1lGOWUzd3kwY0dPWmNyVVJCOEhOMXY3Q2JObUx6c29LUDhnd3pOUk9IeE14?= =?utf-8?B?SUpzSXR2UWdLalNRN0grajJ6Tk05Tk15TzlSN3JvYk1HdFV0clg1ZEdKanMr?= =?utf-8?B?NDJ1anBSRmZzaDU0RC9QbjF0QnNsSUh3RkhwdkFrUWVDMlRqY3RIUnAxZlFp?= =?utf-8?B?TVhuUkRqcUk3SFhiOTZ6Uk5FTGlYbURmVmRHdkZEWVZ1MG5nK2NxU2wxUEVC?= =?utf-8?B?UHF6ZmtoMy8rQnhCenZhUG1Hdis1UG1GcE9nandobWdVRHgvQW9WeVAwUjhl?= =?utf-8?B?R0VjYkNVOERnZG9adXQxTWpJYUFLeUpwaUl4VTB0ZVF6N2h0bjdGMlFIOTU1?= =?utf-8?B?QzMvRHRpcWJ2MXBuVjlHcC9rUDRnNGZBclhvUy9UQ1hhc2RNT2N6eDVLalFs?= =?utf-8?B?RGh6RzdUaVU5MW5NL2dHOFNDVGljL1I2elJPbk9QREc3U3FzSXU0VTF1dnVP?= =?utf-8?B?TFF3RDBaNUg4dy8vdjNnMjh6c00zeVRsZHRwd25KYXA4b0EzRHF3WWZMQzly?= =?utf-8?B?alRGYUFIakhkTXUrWFpDeWdUMXpxSTBQa0hLckNwaWFTRHhURnF0T3hlV3ph?= =?utf-8?B?RmZWRWFkeWdLakY0dnM4aEI2SDNhV3kwNnlSQnBXNUo1VEFobGRuNzd5ZVNK?= =?utf-8?B?K3JPekJqMXgyQVY5SjlJcjZlQTl5VXl4bFA4MHVtUG5Xb2RVanFNNnpiUExx?= =?utf-8?B?TTBLRE5YNXZRbjk4UEFtNTJpQ2lnQ3FpYThvMWp4TjJidTJ5NWJvRDBNSk10?= =?utf-8?B?ZFp5akVlNzNsTE1QU2g3SWlsTXhUZ1RVdkpEMDgzSmpaZDJQc1FmWWVyUSs4?= =?utf-8?B?RGc9PQ==?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: ae94095f-e5ef-43a0-dff4-08dad10d645f X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Nov 2022 06:54:27.7161 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: yDs/tF3ZBbSty9AjS87KYTmUsV8xZdNDr4CnFkG7B8ImF0Tst023s7A6tDYjAwvZRDkybIvUeXKTGJYg9Ai/rlym7dEqhNCUrUSJBmXYWFM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR13MB4952 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 From: Peng Zhang Control the offload of outer layer VLAN strip in QinQ mode through the RTE_ETH_QINQ_STRIP_OFFLOAD mask bit. Signed-off-by: Peng Zhang Reviewed-by: Niklas Söderlund Reviewed-by: Chaoyong He --- doc/guides/nics/features/nfp.ini | 1 + doc/guides/nics/nfp.rst | 1 + drivers/net/nfp/nfp_common.c | 19 ++++++++++++++- drivers/net/nfp/nfp_ctrl.h | 1 + drivers/net/nfp/nfp_rxtx.c | 41 ++++++++++++++++++++++++++++++++ drivers/net/nfp/nfp_rxtx.h | 3 ++- 6 files changed, 64 insertions(+), 2 deletions(-) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index 9e075a680b..b15a1ec52c 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -17,6 +17,7 @@ RSS key update = Y RSS reta update = Y Flow control = Y VLAN offload = Y +QinQ offload = Y L3 checksum offload = Y L4 checksum offload = Y Basic stats = Y diff --git a/doc/guides/nics/nfp.rst b/doc/guides/nics/nfp.rst index fffff00f1e..2be15b63d3 100644 --- a/doc/guides/nics/nfp.rst +++ b/doc/guides/nics/nfp.rst @@ -293,3 +293,4 @@ Metadata with L2 (1W/4B) Tpid just be stored, now we don't handle it The vlan[0] is the innermost VLAN + The vlan[1] is the QinQ info diff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c index f112a70980..d1822f6b71 100644 --- a/drivers/net/nfp/nfp_common.c +++ b/drivers/net/nfp/nfp_common.c @@ -195,7 +195,7 @@ nfp_net_log_device_information(const struct nfp_net_hw *hw) NFD_CFG_MAJOR_VERSION_of(hw->ver), NFD_CFG_MINOR_VERSION_of(hw->ver), hw->max_mtu); - PMD_INIT_LOG(INFO, "CAP: %#x, %s%s%s%s%s%s%s%s%s%s%s%s%s%s", hw->cap, + PMD_INIT_LOG(INFO, "CAP: %#x, %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", hw->cap, hw->cap & NFP_NET_CFG_CTRL_PROMISC ? "PROMISC " : "", hw->cap & NFP_NET_CFG_CTRL_L2BC ? "L2BCFILT " : "", hw->cap & NFP_NET_CFG_CTRL_L2MC ? "L2MCFILT " : "", @@ -203,6 +203,7 @@ nfp_net_log_device_information(const struct nfp_net_hw *hw) hw->cap & NFP_NET_CFG_CTRL_TXCSUM ? "TXCSUM " : "", hw->cap & NFP_NET_CFG_CTRL_RXVLAN ? "RXVLAN " : "", hw->cap & NFP_NET_CFG_CTRL_TXVLAN ? "TXVLAN " : "", + hw->cap & NFP_NET_CFG_CTRL_RXQINQ ? "RXQINQ " : "", hw->cap & NFP_NET_CFG_CTRL_SCATTER ? "SCATTER " : "", hw->cap & NFP_NET_CFG_CTRL_GATHER ? "GATHER " : "", hw->cap & NFP_NET_CFG_CTRL_LIVE_ADDR ? "LIVE_ADDR " : "", @@ -401,6 +402,11 @@ nfp_check_offloads(struct rte_eth_dev *dev) ctrl |= NFP_NET_CFG_CTRL_RXVLAN; } + if (rxmode->offloads & RTE_ETH_RX_OFFLOAD_QINQ_STRIP) { + if (hw->cap & NFP_NET_CFG_CTRL_RXQINQ) + ctrl |= NFP_NET_CFG_CTRL_RXQINQ; + } + hw->mtu = dev->data->mtu; if (txmode->offloads & RTE_ETH_TX_OFFLOAD_VLAN_INSERT) @@ -751,6 +757,9 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) if (hw->cap & NFP_NET_CFG_CTRL_RXVLAN) dev_info->rx_offload_capa = RTE_ETH_RX_OFFLOAD_VLAN_STRIP; + if (hw->cap & NFP_NET_CFG_CTRL_RXQINQ) + dev_info->rx_offload_capa |= RTE_ETH_RX_OFFLOAD_QINQ_STRIP; + if (hw->cap & NFP_NET_CFG_CTRL_RXCSUM) dev_info->rx_offload_capa |= RTE_ETH_RX_OFFLOAD_IPV4_CKSUM | RTE_ETH_RX_OFFLOAD_UDP_CKSUM | @@ -1042,6 +1051,14 @@ nfp_net_vlan_offload_set(struct rte_eth_dev *dev, int mask) new_ctrl &= ~NFP_NET_CFG_CTRL_RXVLAN; } + /* QinQ stripping setting */ + if (mask & RTE_ETH_QINQ_STRIP_MASK) { + if (dev_conf->rxmode.offloads & RTE_ETH_RX_OFFLOAD_QINQ_STRIP) + new_ctrl |= NFP_NET_CFG_CTRL_RXQINQ; + else + new_ctrl &= ~NFP_NET_CFG_CTRL_RXQINQ; + } + if (new_ctrl == hw->ctrl) return 0; diff --git a/drivers/net/nfp/nfp_ctrl.h b/drivers/net/nfp/nfp_ctrl.h index a90846fddf..106779c080 100644 --- a/drivers/net/nfp/nfp_ctrl.h +++ b/drivers/net/nfp/nfp_ctrl.h @@ -93,6 +93,7 @@ #define NFP_NET_CFG_CTRL_SCATTER (0x1 << 8) /* Scatter DMA */ #define NFP_NET_CFG_CTRL_GATHER (0x1 << 9) /* Gather DMA */ #define NFP_NET_CFG_CTRL_LSO (0x1 << 10) /* LSO/TSO */ +#define NFP_NET_CFG_CTRL_RXQINQ (0x1 << 13) /* Enable QINQ strip */ #define NFP_NET_CFG_CTRL_RINGCFG (0x1 << 16) /* Ring runtime changes */ #define NFP_NET_CFG_CTRL_RSS (0x1 << 17) /* RSS */ #define NFP_NET_CFG_CTRL_IRQMOD (0x1 << 18) /* Interrupt moderation */ diff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c index fb271e6d96..40f1702bde 100644 --- a/drivers/net/nfp/nfp_rxtx.c +++ b/drivers/net/nfp/nfp_rxtx.c @@ -257,6 +257,46 @@ nfp_net_parse_meta_vlan(const struct nfp_meta_parsed *meta, } } +/* + * nfp_net_parse_meta_qinq() - Set mbuf qinq_strip data based on metadata info + * + * The out VLAN tci are prepended to the packet data. + * Extract and decode it and set the mbuf fields. + * + * If both RTE_MBUF_F_RX_VLAN and NFP_NET_CFG_CTRL_RXQINQ are set, the 2 VLANs + * have been stripped by the hardware and their TCIs are saved in + * mbuf->vlan_tci (inner) and mbuf->vlan_tci_outer (outer). + * If NFP_NET_CFG_CTRL_RXQINQ is set and RTE_MBUF_F_RX_VLAN is unset, only the + * outer VLAN is removed from packet data, but both tci are saved in + * mbuf->vlan_tci (inner) and mbuf->vlan_tci_outer (outer). + * + * qinq set & vlan set : meta->vlan_layer>=2, meta->vlan[0].offload=1, meta->vlan[1].offload=1 + * qinq set & vlan not set: meta->vlan_layer>=2, meta->vlan[1].offload=1,meta->vlan[0].offload=0 + * qinq not set & vlan set: meta->vlan_layer=1, meta->vlan[0].offload=1 + * qinq not set & vlan not set: meta->vlan_layer=0 + */ +static void +nfp_net_parse_meta_qinq(const struct nfp_meta_parsed *meta, + struct nfp_net_rxq *rxq, + struct rte_mbuf *mb) +{ + struct nfp_net_hw *hw = rxq->hw; + + if ((hw->ctrl & NFP_NET_CFG_CTRL_RXQINQ) == 0 || + (hw->cap & NFP_NET_CFG_CTRL_RXQINQ) == 0) + return; + + if (meta->vlan_layer < NFP_META_MAX_VLANS) + return; + + if (meta->vlan[0].offload == 0) + mb->vlan_tci = rte_cpu_to_le_16(meta->vlan[0].tci); + mb->vlan_tci_outer = rte_cpu_to_le_16(meta->vlan[1].tci); + PMD_RX_LOG(DEBUG, "Received outer vlan is %u inter vlan is %u", + mb->vlan_tci_outer, mb->vlan_tci); + mb->ol_flags |= RTE_MBUF_F_RX_QINQ | RTE_MBUF_F_RX_QINQ_STRIPPED; +} + /* * RX path design: * @@ -394,6 +434,7 @@ nfp_net_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) nfp_net_parse_meta(&meta, rxds, rxq, mb); nfp_net_parse_meta_hash(&meta, rxds, rxq, mb); nfp_net_parse_meta_vlan(&meta, rxds, rxq, mb); + nfp_net_parse_meta_qinq(&meta, rxq, mb); /* Checking the checksum flag */ nfp_net_rx_cksum(rxq, rxds, mb); diff --git a/drivers/net/nfp/nfp_rxtx.h b/drivers/net/nfp/nfp_rxtx.h index a24ec9e560..e3e8b00b48 100644 --- a/drivers/net/nfp/nfp_rxtx.h +++ b/drivers/net/nfp/nfp_rxtx.h @@ -43,8 +43,9 @@ * starts at position 0 and only @vlan_layer entries contain valid * information. * - * Currently only 1 layer of vlan is supported, + * Currently only 2 layers of vlan are supported, * vlan[0] - vlan strip info + * vlan[1] - qinq strip info * * @vlan.offload: Flag indicates whether VLAN is offloaded * @vlan.tpid: Vlan TPID -- 2.29.3