From patchwork Mon Nov 28 06:53:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 120184 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 26CD2A0093; Mon, 28 Nov 2022 07:54:47 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3E70F42D18; Mon, 28 Nov 2022 07:54:29 +0100 (CET) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2103.outbound.protection.outlook.com [40.107.94.103]) by mails.dpdk.org (Postfix) with ESMTP id 3596D42D18 for ; Mon, 28 Nov 2022 07:54:27 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=e53AtZK3gf6u1H+fVD/L2IR+uJNftYi+PBF9/yBnwFYG6lVLSs1/AARfh7WHj/WJxyaxA66MTmUJRuPzYAuRF2XD/HuXExFn01IM/fL59J5YNnqIUARSolhxkhskr1X7nSxo/fb4MhptFBG4yoyzIY30mNqdezh3XmljoEm0lnl3gfQ0m46I6wLtfge1VmmyUttetNhYYy7M6gEVp8dqBd9ey+rgGL36hv9A10T5q+CyE/JNuSGYMUPJRvsF9yAuKWZgRTyDS6cms4TdxlZYh/mLWaUwC1Ptu2n+M0NjQH30I0Wrt8h16FRKrzF7qvbTBcvhJsqhr5Gl1X+mS0jwBw== 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=y4DzO262+BW8QTokZHpgWstxoJyGdRVV91NppnpJQ9A=; b=NABNG60edVCkajjKih+ECb0y0i+HHp5QEiKOlPxe46iHDsj4KSBMyLJ+mpzw5VqDacoJ50mg4WoHR1fzoJulesJjZdEKMdNDU4V2BIBAN/9RCr+Ku/PNAaQSspm43H/hsteLsH62rkThLWr70PbteDOOOVxcrAaNqfejT6oMsuJx6g0La/S2+d91rz2j+Kro6KT6/6b7N0VNSglrEGKjjvxGf9fuzDXADk4ZApvsbmt1tPbCM5eZCutr1mUbW3nJZa0/+wYDSqxx/cHJc6IuLN7eF8RBsvM/XCCJASfWfeIi6NRcgxnPk0ejJZ1Im71WLPZWGGcEFhe1FVM5L8NfPQ== 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=y4DzO262+BW8QTokZHpgWstxoJyGdRVV91NppnpJQ9A=; b=o1vJgC/uk7HoXDRVmNAFEkpb04ZqAfs2/3y2ekcCas2XNmrmcq73q7U3sd+GxO/biny4MYq9aJ79WefujcNNvV94aX4t3xt0+n3GFs9pPaBVKLLw0OsC803O6qMdI5hdcVWhkQMro1gSQKFN2GalHZsQ+OnsxAaDLGJWWn9kIg8= 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:25 +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:25 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Peng Zhang , Chaoyong He Subject: [PATCH 3/8] net/nfp: add new metadata type for achieving VLAN strip Date: Mon, 28 Nov 2022 14:53:54 +0800 Message-Id: <20221128065359.12737-4-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> 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: f084a35e-fd0d-40e8-42c2-08dad10d6313 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: x4kvWYpZ4o9Tics0KVICK82Swsawp0EnD2gRiZ1WH5wZAW/3+OsMT8JJEMhQpZ73I4H9vo92B0dm1MDpSLnOizkAPGcrCtLoo2BgEl5zleKwaMhg0mE3Ffp8JCvGlmDmx3OQlyF8T3ldNtUPtkwuHxgJGHZZ0RSYDKSp89oFLNB41Pr10YY0jqLyp3gII9/sR6N6bthB578tEHp333LJD5TDoQJyTfETZSq+UuLkFxNGyNAaUqfuSLZ/NZZY5avj42wCw72Fkjo9QJ7/eXUJHMYepJmRfUHEanF6C30X9PRvOYWR59nkWxAY2p3Y+qcwS5ZNR1Pcc1KZJxjyQzVpKSqiSUnmfZhLNf6Pxu/xUeK3YeTkNnUriQ6jX3ncIffGJRkobJuzMg0vKeEGKy+L+GqZfF3zsWOTPAr0cfoCUFUff2tFzAoJUqrFDbcuZeElGRthlZiVYupMSJCaSznOhuYAqcfggVfal828wRF2CBqWEWO4VwnJb+bR1AxXQhXwKHbGgowStJZJElDgH2JCE2hfrm9Dgp4WiZ+5N5sWJ4RsjKWHzhLgWA7zg5ZV8BTmNROAvIO9COa4lZh6rVZFQDb1so/i/3/4OJj2S4YPSUhVwqLyE1tM7xiwFKIw8djprvN9wgzyJDCvaOK9UCus4KfKSoHqx40+zA66Cfqr7mHrKr9UBUx1yG/56Ks8kQJQbJ2GtlIpwY8RsQ0U6VWdnuswpheyvMUbx17/U6yj162fcA14DDeSfGsIPZkOUDTu 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)(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?q?+E/V4Ty/RqklfrvCXGuHES7VwsEE?= =?utf-8?q?ObW3Q6we3bM/dNk7QmzWoEJSDFdEMaomWOxPOzTOZaR72TXPp9mqvONYd46GQVhrw?= =?utf-8?q?doZMMJltI+MbGzY41GGQsHu/HVq4iOUHv92Sxa31EAcaXYdP+zN3V3Wb88cvJGOcX?= =?utf-8?q?Kn008j6OMpUehAZnS6XWzi0ykIwRPDuSRIEAePgeH+uL+By1srj9PU4AW45IhD5BZ?= =?utf-8?q?R5zfbV1EFybyO7QoArPfYdAxdHRhNAFllilsorBqssqrx6FMdxeDLD56NrkyJW+Ja?= =?utf-8?q?Xg91eAS088/43Yij09SIotB5pcO6brNPAHhQtUsX8SDR72A3PkyHyV35Zk+kNoDxb?= =?utf-8?q?cjmeOp+/Fib8/qFwGGCTHEbQf1WzDG8PLOvHX+4C5vdW8OmD+q+uO+a5hwkKWmSWx?= =?utf-8?q?vy9vTnUS6SmW1mwA3fwF+/JgJqUiCV18R53NtFopY9jr3N2z4p59Af6POOC4LbqYh?= =?utf-8?q?mZaneyPZZYlPPwHFZZJTaR37qTMbmroDsbI/r71G6Ej9MDL1ZEKUgWk8ZWIX+xZMN?= =?utf-8?q?0ulBAiWGLKtIsMJsVO24arE1WNKzfbaqIgHnVHyh4s7HWOpNj8MJjwbUQ4dJvkU4Z?= =?utf-8?q?XV+SVhl8I4qh6vzsFBJV2muzkf9zUPdE0k4d+yTOdmFU732vnLtl7I7a/I9iJ2ZTh?= =?utf-8?q?4acofaQNt5AN5mtJx9DT93Gy72md5YF+XrO7Hzk+Aa7SdFKIsyVGlAXsGTXfInZba?= =?utf-8?q?zk26I6BVUjNbV7oDmk8mINq+3qoftsgT3vyAHy5OeiRHOTN2BINrSvvWKqIWZ4Apj?= =?utf-8?q?gGrlqizfWYoux+7auyINIB59DRCjZDpAYFos22jwgjSU2QGhi/3IKvBbHvP3DVEOl?= =?utf-8?q?hhAkAfYdzebbgPnlyD4GPMfZM8nrEFBYtpuZZWqsggYTMwWnjovrROXExEThxsqJi?= =?utf-8?q?tg9pS4HkhIKGRMGIF6kIp4q47JVTcXkNzkP/Fz/137/9C5nlKEg/5bi1/KFkfrZJm?= =?utf-8?q?puUYibW3nZHwU1Fa/ST/IjXwbFPWGdfCEF6KG7EqinWuVb/94z0PFb/261TXna7yd?= =?utf-8?q?toLaNBgJ4egIJiCzk7GZhpEk+9twDRVzA0wHZWF7bGDOs2rYGaHfpg+aU+CrlzZnO?= =?utf-8?q?JwHD/bZkoyR0mRmhPukW1citwvigC2CSMLBrrJsGGZ3zRWlCnYWnOiRAGMfgFrxIv?= =?utf-8?q?C2aghKGTZZRb3qpxbmjmPB8Dr2LhzIQ0IAdZr0SMmVJEbx31cQnic+HGYu7fSQHYO?= =?utf-8?q?QhQlhAacHhNiFo79gWoa3HipLK9ruUZMts5cnGLYIaZZpZlhA5i8FMynfQwEVnjsv?= =?utf-8?q?HuTP0VFRRpIo6MqKPGQaNa01ICgSu+QEZHkHAKHdENH+qydKOLIUTYGQRZm1GSxBD?= =?utf-8?q?RBuDTsVIibGNoPPA9v9vveQe2JDRMKFO6zDIbuCMGmb+Ceaj6aLl+oJzUhkTR3XGa?= =?utf-8?q?tztOk0K8Yrm4sJsaLIDdPbSYday1UI4g5Cal7BPV2RjO08w9vTR9WmCJVasVcb42O?= =?utf-8?q?12VG8/W5Z9Jpry+cyGYJhP7dmyv11zktArSZJ1X2I2umttjjig9xkSGItQvKbhNUa?= =?utf-8?q?nCDvHi5NzAxk7+KLnDn7YhuLQ0O8m9elFg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: f084a35e-fd0d-40e8-42c2-08dad10d6313 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:25.5519 (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: QnyKwOHT94aEddLLK1jfX4600tbEBzkDwYs6qjqun3N0pp7Fcw5TR1bQosaaK41qhIseNmyXpc366h1Q5qbb/lwFaHrECHBW5IIQk7mvZrg= 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 The firmware supplies VLAN strip information is stroed in packet metadata. The field of this VLAN metadata includes VLAN TPID, VLAN TCI and offload flag. The new metadata type is NFP_NET_META_VLAN. Signed-off-by: Peng Zhang Reviewed-by: Niklas Söderlund Reviewed-by: Chaoyong He --- doc/guides/nics/nfp.rst | 22 ++++++++++++++++ drivers/net/nfp/nfp_ctrl.h | 10 ++++++++ drivers/net/nfp/nfp_rxtx.c | 51 +++++++++++++++++++++++++++++++++----- drivers/net/nfp/nfp_rxtx.h | 22 ++++++++++++++++ 4 files changed, 99 insertions(+), 6 deletions(-) diff --git a/doc/guides/nics/nfp.rst b/doc/guides/nics/nfp.rst index 8034b2a668..fffff00f1e 100644 --- a/doc/guides/nics/nfp.rst +++ b/doc/guides/nics/nfp.rst @@ -271,3 +271,25 @@ the header. The hash value is 32 bit which need 1 data field. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Hash value | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +NFP_NET_META_VLAN +Metadata with L2 (1W/4B) +:: + + ---------------------------------------------------------------- + 3 2 1 0 + 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |f| reserved | tpid| PCP |p| vlan outermost VID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ^ ^ + NOTE: | TCI | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + f 0 -> not stripping + 1 -> stripping + + tpid 0 -> RTE_ETHER_TYPE_VLAN 0x8100 IEEE 802.1Q VLAN tagging + 1 -> RTE_ETHER_TYPE_QINQ 0x88a8 IEEE 802.1ad QINQ tagging + Tpid just be stored, now we don't handle it + + The vlan[0] is the innermost VLAN diff --git a/drivers/net/nfp/nfp_ctrl.h b/drivers/net/nfp/nfp_ctrl.h index 372d537462..a90846fddf 100644 --- a/drivers/net/nfp/nfp_ctrl.h +++ b/drivers/net/nfp/nfp_ctrl.h @@ -30,8 +30,18 @@ #define NFP_NET_META_FIELD_SIZE 4 #define NFP_NET_META_FIELD_MASK ((1 << NFP_NET_META_FIELD_SIZE) - 1) +/* Working with metadata vlan api (NFD version >= 2.0) */ +#define NFP_NET_META_VLAN_INFO 16 +#define NFP_NET_META_VLAN_OFFLOAD 31 +#define NFP_NET_META_VLAN_TPID 3 +#define NFP_NET_META_VLAN_MASK ((1 << NFP_NET_META_VLAN_INFO) - 1) +#define NFP_NET_META_VLAN_TPID_MASK ((1 << NFP_NET_META_VLAN_TPID) - 1) +#define NFP_NET_META_TPID(d) (((d) >> NFP_NET_META_VLAN_INFO) & \ + NFP_NET_META_VLAN_TPID_MASK) + /* Prepend field types */ #define NFP_NET_META_HASH 1 /* next field carries hash type */ +#define NFP_NET_META_VLAN 4 /* Hash type pre-pended when a RSS hash was computed */ #define NFP_NET_RSS_NONE 0 diff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c index 320387eb7c..fb271e6d96 100644 --- a/drivers/net/nfp/nfp_rxtx.c +++ b/drivers/net/nfp/nfp_rxtx.c @@ -124,6 +124,7 @@ nfp_net_parse_meta(struct nfp_meta_parsed *meta, struct rte_mbuf *mbuf) { uint32_t meta_info; + uint32_t vlan_info; uint8_t *meta_offset; struct nfp_net_hw *hw = rxq->hw; @@ -145,6 +146,15 @@ nfp_net_parse_meta(struct nfp_meta_parsed *meta, meta->hash = rte_be_to_cpu_32(*(rte_be32_t *)meta_offset); meta->hash_type = meta_info & NFP_NET_META_FIELD_MASK; break; + case NFP_NET_META_VLAN: + vlan_info = rte_be_to_cpu_32(*(rte_be32_t *)meta_offset); + meta->vlan[meta->vlan_layer].offload = + vlan_info >> NFP_NET_META_VLAN_OFFLOAD; + meta->vlan[meta->vlan_layer].tci = + vlan_info & NFP_NET_META_VLAN_MASK; + meta->vlan[meta->vlan_layer].tpid = NFP_NET_META_TPID(vlan_info); + ++meta->vlan_layer; + break; default: /* Unsupported metadata can be a performance issue */ return; @@ -213,6 +223,40 @@ nfp_net_parse_meta_hash(const struct nfp_meta_parsed *meta, } } +/* + * nfp_net_parse_meta_vlan() - Set mbuf vlan_strip data based on metadata info + * + * The VLAN info TPID and TCI are prepended to the packet data. + * Extract and decode it and set the mbuf fields. + */ +static void +nfp_net_parse_meta_vlan(const struct nfp_meta_parsed *meta, + struct nfp_net_rx_desc *rxd, + struct nfp_net_rxq *rxq, + struct rte_mbuf *mb) +{ + struct nfp_net_hw *hw = rxq->hw; + + if ((hw->ctrl & NFP_NET_CFG_CTRL_RXVLAN) == 0) + return; + + /* + * The nic support the two way to send the VLAN info, + * 1. According the metadata to send the VLAN info + * 2. According the descriptor to sned the VLAN info + * + * If the nic doesn't send the VLAN info, it is not necessary + * to do anything. + */ + if (meta->vlan_layer >= 1 && meta->vlan[0].offload != 0) { + mb->vlan_tci = rte_cpu_to_le_32(meta->vlan[0].tci); + mb->ol_flags |= RTE_MBUF_F_RX_VLAN | RTE_MBUF_F_RX_VLAN_STRIPPED; + } else if ((rxd->rxd.flags & PCIE_DESC_RX_VLAN) != 0) { + mb->vlan_tci = rte_cpu_to_le_32(rxd->rxd.vlan); + mb->ol_flags |= RTE_MBUF_F_RX_VLAN | RTE_MBUF_F_RX_VLAN_STRIPPED; + } +} + /* * RX path design: * @@ -349,16 +393,11 @@ nfp_net_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) memset(&meta, 0, sizeof(meta)); 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); /* Checking the checksum flag */ nfp_net_rx_cksum(rxq, rxds, mb); - if ((rxds->rxd.flags & PCIE_DESC_RX_VLAN) && - (hw->ctrl & NFP_NET_CFG_CTRL_RXVLAN)) { - mb->vlan_tci = rte_cpu_to_le_32(rxds->rxd.vlan); - mb->ol_flags |= RTE_MBUF_F_RX_VLAN | RTE_MBUF_F_RX_VLAN_STRIPPED; - } - /* Adding the mbuf to the mbuf array passed by the app */ rx_pkts[avail++] = mb; diff --git a/drivers/net/nfp/nfp_rxtx.h b/drivers/net/nfp/nfp_rxtx.h index 4cbf4080c5..a24ec9e560 100644 --- a/drivers/net/nfp/nfp_rxtx.h +++ b/drivers/net/nfp/nfp_rxtx.h @@ -25,6 +25,9 @@ #define RTE_MBUF_DMA_ADDR_DEFAULT(mb) \ ((uint64_t)((mb)->buf_iova + RTE_PKTMBUF_HEADROOM)) +/* Maximum number of supported VLANs in parsed form packet metadata. */ +#define NFP_META_MAX_VLANS 2 + /* * struct nfp_meta_parsed - Record metadata parsed from packet * @@ -33,10 +36,29 @@ * * @hash: RSS hash value * @hash_type: RSS hash type + * @vlan_layer: The layers of VLAN info which are passed from nic. + * Only this number of entries of the @vlan array are valid. + * + * @vlan: Holds information parses from NFP_NET_META_VLAN. The inner most vlan + * starts at position 0 and only @vlan_layer entries contain valid + * information. + * + * Currently only 1 layer of vlan is supported, + * vlan[0] - vlan strip info + * + * @vlan.offload: Flag indicates whether VLAN is offloaded + * @vlan.tpid: Vlan TPID + * @vlan.tci: Vlan TCI including PCP + Priority + VID */ struct nfp_meta_parsed { uint32_t hash; uint8_t hash_type; + uint8_t vlan_layer; + struct { + uint8_t offload; + uint8_t tpid; + uint16_t tci; + } vlan[NFP_META_MAX_VLANS]; }; /*