From patchwork Fri Nov 3 06:26:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 133814 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 A25AA43275; Fri, 3 Nov 2023 07:27:35 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 14D4742DF8; Fri, 3 Nov 2023 07:26:48 +0100 (CET) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2131.outbound.protection.outlook.com [40.107.93.131]) by mails.dpdk.org (Postfix) with ESMTP id 943A3427DD for ; Fri, 3 Nov 2023 07:26:46 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EzTikv7rewOCs9a4fGxFq1P7m5UKzSIp/QkydFeuWfxZluZIPqshpgyagd2fWPRnZ3ywNuOuphb24LTi1iNpa315FLF0Sd07Bxf3YwV3/2c8nmmfGfJ5teo1ZMdCO4W3f623vk5M2oySfLo8daj6Hcyufxsps5XaDoGa2nPZ9PjlRzNoin3hRMvEmZVu2P0+dhXeIIokOqOXuoNmJp5tUJ5QSW2gWRkZnf8t/vqMI+tG6mvaC1e2B846VjS+QbddKdNPChS0lnkkM0BNKDoOSaN3+noyG6XyIhR7kAKvuP6KTdTYOb/RcydCvYD1MvdCd0CUvs9Z+hUyWaLfd24YGQ== 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=Xr65sXI3BWjqgBcU6hyrjqR0RCdkqfMmN8p6B5L7cCw=; b=W0qxfU7dneS0YiF48P8F1jTH03vr3XnHoIscjuEyiWsq/ZjlbML6KvHgP/Ikdd9tMedlVeYankooVAxZnRE58yY7gbotzpprHptK8QEV31VUPx097QS8dHEp3DArLTOMMOXs/J7rD5EEZJHWAK1ezpAa6zTPKrg6TwWh5uSeE5/4v7ASW6fm8G2g5Mzhqol/A9OHsFziZhkJle7uCG8op1BrXJ8J+b3Lh/LsHYk1h2CEGvT/lNvX9hiDHOu4x04F8W4KpnqtOsY12dSwRld4/mtM+2TBRM2jYJSS69Jl/ioOiMbwCrteom7muLtQhlTEaOEOGcSotuJUqGW14z4P2g== 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=Xr65sXI3BWjqgBcU6hyrjqR0RCdkqfMmN8p6B5L7cCw=; b=CA/SiCOirf+5xTJ7wnHWkHG789BBT49+7JtNh3BUMmw0emf0h9/j8p8ljljK/zVX4TYWAcMyE4iYXVpXtG2WHM92/U0RRdslFBT+IJN/399Sk54p3Bqt9RAuSBuD624nZZFKkXLfpxzXnxCdwsIDZd6vq4ZUHzKbyxHeSp9LfFI= 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 MN2PR13MB4102.namprd13.prod.outlook.com (2603:10b6:208:262::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.24; Fri, 3 Nov 2023 06:26:45 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b%6]) with mapi id 15.20.6954.021; Fri, 3 Nov 2023 06:26:44 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Chaoyong He , Long Wu , Peng Zhang Subject: [PATCH 08/11] net/nfp: support IPv6 flow item Date: Fri, 3 Nov 2023 14:26:03 +0800 Message-Id: <20231103062606.2632012-9-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231103062606.2632012-1-chaoyong.he@corigine.com> References: <20231103062606.2632012-1-chaoyong.he@corigine.com> X-ClientProxiedBy: BYAPR02CA0044.namprd02.prod.outlook.com (2603:10b6:a03:54::21) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|MN2PR13MB4102:EE_ X-MS-Office365-Filtering-Correlation-Id: 3572b221-0864-4c38-04b7-08dbdc35d9a2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: W7VTstLyTxJCcyuo1nDbKeoQKgGu/AgafT1tRqAhrJtONRRXIn+ylgeEUliplo/qSZAM0ICU0GmouEKzuRt1XUhZc3uIaGcAt8j9Hytqi4+WJLMkh+/wi6pcQKxcuGUhxzRSbe9ek9NHbPfTgO7d/ZIfZEyQpn6ri0Fw86kVWjN5vwGjM2VmLrblYWoqI6/3eVFkXJUhBSUZW4Ycg8zGG+fy3Jg0S2mK63ACvYYsKz5TUERJ2L8bRxFMQUWYtSG+fyb5pqXUOJQBqtfFq6pMwXUrHLfMLzLz73sbJvOF0hn9ITfV7ht3bpmKsjs91eIdHIx57JzGOuPIGRP852YxU+mnbmmlcRExik3vJ1wsYgRwTFWW0hAxSJJvKj4izaWkDiae8by9KVG7rYZOvtjGV5dv/5HnlNp4+OY43FSpq75qSpm6ruHyoGkFmk/jLUE0wnttzoEOxfuIDdZAXl2w6T3lKJ4LbUEIwkVeRIt49pbUS+F1Pa0MFHbff1B8pSjmVjKdvxqkjERx+8QEPc+aOb4CJ4LnVXa1C1tvB0X2iV9hWILxNTg7RfCsasnUsg966RNI8pb3MBvo62a7e1rP95KXtn19IgHfMNAmX2dD9ap2/gJ/XYivxB+RG8BSDdWuuCiFgRdr2qnQrdXv9zi6LSi+2LXnQWoBjT8wylyIlO4= 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:(13230031)(39840400004)(346002)(396003)(366004)(136003)(376002)(230922051799003)(186009)(64100799003)(451199024)(1800799009)(316002)(6916009)(54906003)(66476007)(66556008)(66946007)(6666004)(6486002)(478600001)(52116002)(6506007)(5660300002)(38350700005)(41300700001)(36756003)(2906002)(86362001)(4326008)(8676002)(8936002)(44832011)(107886003)(1076003)(2616005)(26005)(83380400001)(38100700002)(6512007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?g1t1SNpMIFDQl4JSnbTss+gcpOAj?= =?utf-8?q?7EZekWAafTClS2dqSFdSdESQYk7e/T9eGb68XFzyUuboHXO3Pgvmu4x12nRA92ROb?= =?utf-8?q?9MWTENlVW6blijkt/JmyjfCgKe681n7W3jAQRoFQD9MtsIjb02oqVNViZOVQxb1ja?= =?utf-8?q?mqLgPEEdR2HF07g3AX9rcojc9zWD+xiJ9tG33Lk7hy/iHkfXmWWtBcK0LguW/6D+O?= =?utf-8?q?Bzo3vKM0mfRZw8DgKLF+grnNi9atGGp6NPZLATkhqUCnyYaJU+OBLE1FPPMUeTI1h?= =?utf-8?q?pWg3sErIU4vYAqG3Pdv6gn77TEDRzPd4e75TzWVG+n6H8Sd8BcKD9fHXAtRA1RnX9?= =?utf-8?q?Z2r/am3o6jTE9GIvXw7lrUL9XvDSgz5s8lHraoY1gqUR8uRu2F8l+bAG7z9EqVg0o?= =?utf-8?q?oW8wAavA7rwrY01keRy7LMWaQZMZS8FB39ET57FkKahgN1HRqJk7W0P13QY0lrmTS?= =?utf-8?q?Lvzf3g1Vf+y5nszIRfIXlFEKGPQ30ROtRZuRfL3cEx0GuALRSzPd5lSeRP7BmCiNj?= =?utf-8?q?u7v0qDm1jr+1zEAwxS3zae8ki4HIbFCIWVf34BMYIf+SabiMztcE+CMAonJKWqhTF?= =?utf-8?q?hrYvmukRz2wGdmKnN2adQw5RWsBYWjp5bweSqJ6kouJNa1+3KCD1QLfCK4nryMhUJ?= =?utf-8?q?xkUKqbbnhhexZe/c4/lNm8XK1BdCVliU15Aps10/IbrFZiSnAcGEo2mhhBooQeZzC?= =?utf-8?q?C/kgrFO07ifsHzkY8DndbMGT+OkuAqjJbDi0MuPmmPizAv+VS0p3lEJ9SgDikNFP7?= =?utf-8?q?1J4sqarrylYoxxjdNKgaayqoPNU/voivNsxhVPtoWPWXpwfqGMfQFpQphugWVqMUA?= =?utf-8?q?fvCs+OFvzGMDWvge2o8bqkaHNNKjvGVInzNUNxovloJMDw1KFt7d3bkoyjSA7/HaG?= =?utf-8?q?ygcyTt8ZrPpeUBA/lCsTOCELKRvd/W80zuC2hh+3pFodEzDtgxEfMexjlqmWNVjh3?= =?utf-8?q?aKEEyjq6bsTiloOkJcsVFcv8JbuWC9eC3PP9Fg5qeJSz1cRbK7dtP/yxIWNddxeEm?= =?utf-8?q?P4DDVzBy7p8A2yPucqZEyfO19l5OcFzZfYNzSraq6Y9EB0nkWqDEUbT1M1GvqOpxC?= =?utf-8?q?L1y8C/H7NFMuskwq+FcqS9Wu9kxey2K2xpaN0h8RuYgPldhNwetIVYPxOOI8gqHXF?= =?utf-8?q?UsTfZhsFffVIzVPEGCHQI9qPutz0zDuA/Jn7ZRamtfFGsc4qD8STCt9fiDHpz52UQ?= =?utf-8?q?bhvhQBVkz//OkB+yGN1stgUeNVxKxGkA7tEP/pZDSTVGhwNtsZQ7gnJot+HVkppky?= =?utf-8?q?Jy7UIqEnRfV/InKA+8O4cWDpAIINkqopqdxrSlpcnU4aeiqUbnjnfe81oVA2ckZNH?= =?utf-8?q?tRNZBsBK7F0DvaLubkVYvCI59E8M7coZaix4dxzjzPYlFX5BTLucX7/Q4c+gzAmO3?= =?utf-8?q?5uIH2ho5TvjlpMjYf/waMhOTyn8wUR3G109BF28wZsArwsnE/0LWl6SUrtjIegarP?= =?utf-8?q?5Lry0LToi0jr/0oDjXGhXXxCEEyPPL0s6YOuF6vsrPKVB7a1xKxdm4kPUmW0wbZMa?= =?utf-8?q?d7P08i1GT9syJJgu2JJwmtAoTyfwchiXGg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3572b221-0864-4c38-04b7-08dbdc35d9a2 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Nov 2023 06:26:44.8423 (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: QJv0bG57RcfHMemqhvTp5Q59tRyp76+vA70vIRZE6TitkJImxUwPX+yKcPhDPj7Qs/bMq3s0W0psO1xAhinqHJY6jzfAINkjKVlMsrLDYiY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR13MB4102 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 Add the corresponding data structure and logics, to support the offload of IPv6 item. Signed-off-by: Chaoyong He Reviewed-by: Long Wu Reviewed-by: Peng Zhang --- drivers/net/nfp/nfp_net_cmsg.h | 61 +++++++++++++++++++++++++++++++ drivers/net/nfp/nfp_net_flow.c | 66 +++++++++++++++++++++++++++++++++- 2 files changed, 126 insertions(+), 1 deletion(-) diff --git a/drivers/net/nfp/nfp_net_cmsg.h b/drivers/net/nfp/nfp_net_cmsg.h index 9bc064d9d7..e177ac7cd6 100644 --- a/drivers/net/nfp/nfp_net_cmsg.h +++ b/drivers/net/nfp/nfp_net_cmsg.h @@ -58,6 +58,67 @@ struct nfp_net_cmsg_match_v4 { uint16_t dst_port_mask; }; +/** + * Match IPv6 data + * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 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 + * Word +-----+-------------------------+---------------+---------------+ + * 0 | | Position | L4 Proto | L4 Proto Mask | + * +-----+-------------------------+---------------+---------------+ + * 1 | SIP6 (0-3B) | + * +---------------------------------------------------------------+ + * 2 | SIP6 (4-7B) | + * +---------------------------------------------------------------+ + * 3 | SIP6 (8-11B) | + * +---------------------------------------------------------------+ + * 4 | SIP6 (12-15B) | + * +---------------------------------------------------------------+ + * 5 | SIP6 Mask (0-3B) | + * +---------------------------------------------------------------+ + * 6 | SIP6 Mask (4-7B) | + * +---------------------------------------------------------------+ + * 7 | SIP6 Mask (8-11B) | + * +---------------------------------------------------------------+ + * 8 | SIP6 Mask (12-15B) | + * +---------------------------------------------------------------+ + * 9 | DIP6 (0-3B) | + * +---------------------------------------------------------------+ + * 10 | DIP6 (4-7B) | + * +---------------------------------------------------------------+ + * 11 | DIP6 (8-11B) | + * +---------------------------------------------------------------+ + * 12 | DIP6 (12-15B) | + * +---------------------------------------------------------------+ + * 13 | DIP6 Mask (0-3B) | + * +---------------------------------------------------------------+ + * 14 | DIP6 Mask (4-7B) | + * +---------------------------------------------------------------+ + * 15 | DIP6 Mask (8-11B) | + * +---------------------------------------------------------------+ + * 16 | DIP6 Mask (12-15B) | + * +-------------------------------+-------------------------------+ + * 17 | SPort | SPort Mask | + * +-------------------------------+-------------------------------+ + * 18 | DPort | DPort Mask | + * +-----------------+-------------+-------------------------------+ + * + * Position – Position index of the rule, 13bits. + * As priority, smaller value indicates higher priority. + */ +struct nfp_net_cmsg_match_v6 { + uint8_t l4_protocol_mask; + uint8_t l4_protocol; + uint16_t position; + uint8_t src_ipv6[16]; + uint8_t src_ipv6_mask[16]; + uint8_t dst_ipv6[16]; + uint8_t dst_ipv6_mask[16]; + uint16_t src_port_mask; + uint16_t src_port; + uint16_t dst_port_mask; + uint16_t dst_port; +}; + #define NFP_NET_CMSG_ACTION_DROP (0x1 << 0) /* Drop action */ #define NFP_NET_CMSG_ACTION_QUEUE (0x1 << 1) /* Queue action */ #define NFP_NET_CMSG_ACTION_MARK (0x1 << 2) /* Mark action */ diff --git a/drivers/net/nfp/nfp_net_flow.c b/drivers/net/nfp/nfp_net_flow.c index e918c67135..c57f5d6328 100644 --- a/drivers/net/nfp/nfp_net_flow.c +++ b/drivers/net/nfp/nfp_net_flow.c @@ -192,6 +192,10 @@ nfp_net_flow_calculate_items(const struct rte_flow_item items[], PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_IPV4 detected"); *match_len = sizeof(struct nfp_net_cmsg_match_v4); return 0; + case RTE_FLOW_ITEM_TYPE_IPV6: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_IPV6 detected"); + *match_len = sizeof(struct nfp_net_cmsg_match_v6); + return 0; default: PMD_DRV_LOG(ERR, "Can't calculate match length"); *match_len = 0; @@ -255,11 +259,52 @@ nfp_net_flow_merge_ipv4(struct rte_flow *nfp_flow, return 0; } +static int +nfp_net_flow_merge_ipv6(struct rte_flow *nfp_flow, + const struct rte_flow_item *item, + const struct nfp_net_flow_item_proc *proc) +{ + uint32_t i; + struct nfp_net_cmsg_match_v6 *ipv6; + const struct rte_flow_item_ipv6 *mask; + const struct rte_flow_item_ipv6 *spec; + + spec = item->spec; + if (spec == NULL) { + PMD_DRV_LOG(DEBUG, "NFP flow merge ipv6: no item->spec!"); + return 0; + } + + mask = (item->mask != NULL) ? item->mask : proc->mask_default; + + nfp_flow->payload.cmsg_type = NFP_NET_CFG_MBOX_CMD_FS_ADD_V6; + ipv6 = (struct nfp_net_cmsg_match_v6 *)nfp_flow->payload.match_data; + + ipv6->l4_protocol_mask = mask->hdr.proto; + for (i = 0; i < sizeof(ipv6->src_ipv6); i += 4) { + ipv6->src_ipv6_mask[i] = mask->hdr.src_addr[i + 3]; + ipv6->src_ipv6_mask[i + 1] = mask->hdr.src_addr[i + 2]; + ipv6->src_ipv6_mask[i + 2] = mask->hdr.src_addr[i + 1]; + ipv6->src_ipv6_mask[i + 3] = mask->hdr.src_addr[i]; + } + + ipv6->l4_protocol = spec->hdr.proto; + for (i = 0; i < sizeof(ipv6->src_ipv6); i += 4) { + ipv6->src_ipv6[i] = spec->hdr.src_addr[i + 3]; + ipv6->src_ipv6[i + 1] = spec->hdr.src_addr[i + 2]; + ipv6->src_ipv6[i + 2] = spec->hdr.src_addr[i + 1]; + ipv6->src_ipv6[i + 3] = spec->hdr.src_addr[i]; + } + + return 0; +} + /* Graph of supported items and associated process function */ static const struct nfp_net_flow_item_proc nfp_net_flow_item_proc_list[] = { [RTE_FLOW_ITEM_TYPE_END] = { .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_ETH, - RTE_FLOW_ITEM_TYPE_IPV4), + RTE_FLOW_ITEM_TYPE_IPV4, + RTE_FLOW_ITEM_TYPE_IPV6), }, [RTE_FLOW_ITEM_TYPE_ETH] = { .merge = nfp_net_flow_merge_eth, @@ -276,6 +321,20 @@ static const struct nfp_net_flow_item_proc nfp_net_flow_item_proc_list[] = { .mask_sz = sizeof(struct rte_flow_item_ipv4), .merge = nfp_net_flow_merge_ipv4, }, + [RTE_FLOW_ITEM_TYPE_IPV6] = { + .mask_support = &(const struct rte_flow_item_ipv6){ + .hdr = { + .proto = 0xff, + .src_addr = "\xff\xff\xff\xff\xff\xff\xff\xff" + "\xff\xff\xff\xff\xff\xff\xff\xff", + .dst_addr = "\xff\xff\xff\xff\xff\xff\xff\xff" + "\xff\xff\xff\xff\xff\xff\xff\xff", + }, + }, + .mask_default = &rte_flow_item_ipv6_mask, + .mask_sz = sizeof(struct rte_flow_item_ipv6), + .merge = nfp_net_flow_merge_ipv6, + }, }; static int @@ -419,12 +478,17 @@ nfp_net_flow_process_priority(struct rte_flow *nfp_flow, uint32_t match_len) { struct nfp_net_cmsg_match_v4 *ipv4; + struct nfp_net_cmsg_match_v6 *ipv6; switch (match_len) { case sizeof(struct nfp_net_cmsg_match_v4): ipv4 = (struct nfp_net_cmsg_match_v4 *)nfp_flow->payload.match_data; ipv4->position = nfp_flow->position; break; + case sizeof(struct nfp_net_cmsg_match_v6): + ipv6 = (struct nfp_net_cmsg_match_v6 *)nfp_flow->payload.match_data; + ipv6->position = nfp_flow->position; + break; default: break; }