From patchwork Tue Dec 5 02:54:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 134854 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 11EF5433FD; Tue, 5 Dec 2023 03:56:24 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A32D742DFF; Tue, 5 Dec 2023 03:55:36 +0100 (CET) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2125.outbound.protection.outlook.com [40.107.237.125]) by mails.dpdk.org (Postfix) with ESMTP id 1BDE442DED for ; Tue, 5 Dec 2023 03:55:34 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LYw2ED0KePgzxaot2KbR0rbo8QixIfTH6Pmn9Zl4uE4+8moLywLHkymzjUcnXTmkZm7DcnCRIzHdGEVXbvWigzIm1K4eRV3PkjxHIViJ40LmC6ZcG7zlzmxCZg9RxoZyh8YxaY4lbOsT5hvaBxZ1EeBL3yP7fSt/THVJ0ZcQXgtz0xvcU4uNpjso2B9lWDQNYOHxnvzdmfP41OrIjGlgHBLRql+blD04ymaZEMhN5iiMU+Y0w96OHHi+QZMKARJFHO6mmaMRmsS8KrXJWyTKyCPPTINBXZ8E8toK9W8kuxbAM9zxqT7SCU+7ZNiimn4CnwtJOOUkvDZ93hh1LD7R2Q== 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=t3gR49371T4sMpHiTFFcc/FmNbdqjiP9exH7bQWHtZs=; b=Xw7+U8g1bCpY6mmhWS/iFXiXOHTx/XwFDZ2kDHOtS4pM4iMyNKo9RFXuhtTAM0EWeDai7ocbA1F2zkWfkTieUFMARGfO3KediVfxSFeLCc6MDSuOPp2vUT5cea/DrADQonZ/i6qUs1SslfMWTuOFr7iPKF5Ddycb1Jtz5tz4Tw1kE0cERp3jfC0rJmnOL7rANKo1wLv9A5Ecw3zgeGPXSnmIkY3WUUBgVwIYzE2tpg027R3pEtj/74k7nkkeed/yMSYK/ay8C3fTvyEyjvNUDqppSvX+rGgy+nmbk0Zp5yKz6AmOj+5nFv6NT5roZzOziuFS6saI+pU6+v6CBmGICQ== 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=t3gR49371T4sMpHiTFFcc/FmNbdqjiP9exH7bQWHtZs=; b=MMC4FovzYPH0T4gGZm0AH65AYALDM4BKfyLli+bSZJSeKgcRB0oVGoRclpPo/ITioqWNB4aI2CS+SHMpQ15OX43IaD4k1nJiRqi2x8PL4A0jKo35l1z9xAD/GgLbTnb0Xbf7qPXmOb0805SfB7zFmoMSwGkYIUOI3IyOq2PrFX4= 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 BY5PR13MB4439.namprd13.prod.outlook.com (2603:10b6:a03:1dd::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.34; Tue, 5 Dec 2023 02:55:32 +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.7046.033; Tue, 5 Dec 2023 02:55:32 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Chaoyong He , Long Wu , Peng Zhang Subject: [PATCH v2 08/11] net/nfp: support IPv6 flow item Date: Tue, 5 Dec 2023 10:54:54 +0800 Message-Id: <20231205025457.1067372-9-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231205025457.1067372-1-chaoyong.he@corigine.com> References: <20231103062606.2632012-1-chaoyong.he@corigine.com> <20231205025457.1067372-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SJ0PR03CA0214.namprd03.prod.outlook.com (2603:10b6:a03:39f::9) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BY5PR13MB4439:EE_ X-MS-Office365-Filtering-Correlation-Id: 0fdc7544-c391-40f6-e8d2-08dbf53da586 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: irb+70IyIwhPTfm2dEiNVR9mACLw8zpNp1AKypT4MIvtvnpKLHM1FwiQoiCvI94+VXRzbr9rMCETx6UTRNX7X5H80s/j68/aUYYT9UHKt9o6KOyITqaP7sUVMZJRZhltnVF/vkupwpKqUymq5pUHS2qie7ipmJuVH6Fps6CLBS9phIWgaVSgpSNKicE2ShBSH0AGGLTRdXyltSbsBjS+bWM6wDc81ra2b8GFb1vgSHSSIhvZAMyB61F5c0+v4Fn7ZP2hy8BFMr1KFbkrGk0xDCwUHvH4CwPzjO5G1Qemm3r2POjeXd8ZIfKY97dBGFiauA0xDfn3yO6y8smVdmMJCn3DIaJEWSBYK1FwcqvQS2Lqh3EEaX9niVDg8IWySfp53IHq6w1WlBxcbQgkXwXYclj0K8z/NL1cIms3UutZKUPX0lN+Vi+2paqetss/LODUwfm52Ekc4Dzo5C1ODlTXQ7qz0ZwFo+ni9tChDxqT+ULVW0WXO2G4OW55vvdq9S5C7UfaklWdp4FxLUgd+nSrFT3nnlrfCd8TYeXKfmrX/UvvMtr1QeSMcxlPqzuVjAAtLqxlevG1Q/G4FkqVO5X1kFY0zrmlM9z8Y4xjJrfmg5ThfHk1DyedRGMnvB1scPEbq+ChtzFyCAlKZffZhEtM5ZrfamZWlOYt93zvqfJHrn4= 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)(366004)(136003)(396003)(346002)(376002)(39830400003)(230922051799003)(1800799012)(451199024)(186009)(64100799003)(6486002)(83380400001)(478600001)(6512007)(52116002)(2616005)(6506007)(26005)(6666004)(1076003)(107886003)(316002)(66476007)(54906003)(6916009)(66556008)(66946007)(86362001)(41300700001)(36756003)(8676002)(4326008)(8936002)(38350700005)(2906002)(44832011)(5660300002)(38100700002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?hpRnu0Yp1Jcv+M5j2gV4gfDKDrXQ?= =?utf-8?q?5aEi0cNac/5ydd/hoIwiztegGR4lP45NI799QU11Y7bkYPpZnUWsK60i3uOk/4huM?= =?utf-8?q?VM8v4nOS0wqMtzfue8vHG3vDbxrcihOfRAyKdIvXCFy6mJZeQ37cEocAINy8OA1vD?= =?utf-8?q?bAZPvjrdqpgbUKWtyonOkRE+GMhq2vdShTWp2/M7bXNo3xesGx8IYa0JYKRjOFrvl?= =?utf-8?q?eb6YyoCSslO8v/lFqitPWGLpd2Nuy0LZWr5o7cDBaJa92BZO8Kbs7+WS+SmAsFK0I?= =?utf-8?q?HmHxeeXucdlfAVFKMbz+o6qSXQ6P6rb0CK3TE9vR4zRHij4sh1InIIelCXdvEynog?= =?utf-8?q?0omk/PfpGbox/F9uesAgtXZZ7RCrl0ZZW8cbDrROfAyfR+P2vKtK9FEOW8TbuvIJo?= =?utf-8?q?HL5I5MFdC7mhbbfPqOnn9RPXaUOwXu2v93w3NqaU5RE0ojqQDKrQbPk0ioHTID/Yz?= =?utf-8?q?KyQ4ZKey+XlG6z//a8Y74cOtftckneSfiOOeX9F/YJIIIKY1gtZ0efOfAc17sQ8H7?= =?utf-8?q?aR51MbwItaGV1Rx/FPrjMRpr3kYEWI2HOK1QGY76bDlbgQLR553NSaGSI84hOKmZW?= =?utf-8?q?PAcWN2sdABq0jnkQDNDxDGgYndPe7aDr/7jRrhtXUCQx3MsxoOqezoRo8fFnpoWAq?= =?utf-8?q?dmBzT1yL+NceK6zSlMZdZq6w4voJ7lvw0IXS5/RBdKxObMIuyKgZ1mVI9y8UomPPT?= =?utf-8?q?IEOXQSfJpRWh6Q9VqrSsGTzqmVBd+0uGDPUmlcI8ZTJFf7glTQSnrbUbzg2gIevOd?= =?utf-8?q?nVMMIiuVrPohVsqjZAdcjl192IenTgzita+IsxcNGtHxPH5jAxF+usqHn+B0iCXmu?= =?utf-8?q?oEFUzkom6oyjbOlA5Yo2pyAtGZRD/xI3tnerDy/uyeLy356ii9KAvL5L5aioQt5OF?= =?utf-8?q?ANZREnepxbjtQmrdhfm7r3Pz3oqhBIVh7lCFCAJAuq1Vo2cV2F1HzHcDaPs6bi5it?= =?utf-8?q?gU8BGoWZklrUz9dqlwegijWB0PZUKrBUFWbGPDXgDImfF4LIbe5HONmYzkebNcR9f?= =?utf-8?q?Rbjh93i8vx0vUrKWIkDneulxjBwLa16CfglynyrAKEYlbdA695X6HIT+1todYWHmb?= =?utf-8?q?26k2Oi9agd0O72wBNESxEIsuZJ38vzghuzqR38tPEAdKURZdeqtvLAvuXuNyPa+LS?= =?utf-8?q?P8ULJ96tQRIBtyzVtp8Gxo155034oorTN71drm55sy+x61s84JF0c8JbLo8a5kYtg?= =?utf-8?q?fd89KAk/lTu12F/NsxXUapS7G9QyXN2gs5d4zDCr7VgRC3cj+61zK8V6daf4R1+tr?= =?utf-8?q?tu9vKdQG3vDTIcAt9F8bA0R34HVoS15iC0LMj0mBMq1bcSGpo6LVolU9qG5d8V5Ow?= =?utf-8?q?ecn8BM259oZOl1DUiMUhJa7t0n36/IUwLXdzqwf+mFCMkURoUjXbNbTtlLLuabc1L?= =?utf-8?q?qKKRCaI7du5H4HdbuejCjX15lVXVC4Pudu6fXKRit4jYoK9vcMjnAPVG1WQRcI/Cm?= =?utf-8?q?Q2kFWvVkTqqzVObiLbYqf6+mrxIbeo976BDbtOPwHHTmPKZ+mF1xx7N4TpVL8hi6T?= =?utf-8?q?BryT/ChnpnKxbbrz2MNpk8hxtpobqBm7Eg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0fdc7544-c391-40f6-e8d2-08dbf53da586 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Dec 2023 02:55:32.4866 (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: G+MT0kx8K6SaRQDLT5fTRADzVfrGhbgbOSywChObMwlVDHV7Mz9XA0T8+cDQXUDLZyPdqztgAVhmZ9JEmtv5ROJiLoXqklH35bVgcwbsggg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR13MB4439 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 | 76 +++++++++++++++++++++++++++++++++- 2 files changed, 136 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 6edb96c17a..56846e3935 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,62 @@ 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->dst_ipv6_mask[i] = mask->hdr.dst_addr[i + 3]; + ipv6->dst_ipv6_mask[i + 1] = mask->hdr.dst_addr[i + 2]; + ipv6->dst_ipv6_mask[i + 2] = mask->hdr.dst_addr[i + 1]; + ipv6->dst_ipv6_mask[i + 3] = mask->hdr.dst_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]; + + ipv6->dst_ipv6[i] = spec->hdr.dst_addr[i + 3]; + ipv6->dst_ipv6[i + 1] = spec->hdr.dst_addr[i + 2]; + ipv6->dst_ipv6[i + 2] = spec->hdr.dst_addr[i + 1]; + ipv6->dst_ipv6[i + 3] = spec->hdr.dst_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 +331,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 +488,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; }