From patchwork Fri Oct 21 08:01:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118908 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 AEC3CA0032; Fri, 21 Oct 2022 10:04:04 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CFD7042C08; Fri, 21 Oct 2022 10:02:52 +0200 (CEST) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2100.outbound.protection.outlook.com [40.107.236.100]) by mails.dpdk.org (Postfix) with ESMTP id 2A00842BF3 for ; Fri, 21 Oct 2022 10:02:47 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OSShNkvy/0XAobCrXfCgVeyBk5VPfYWhT1tdgzsQz3ur+b+Z/EIiOxyheAedWJ8qKs7Ckq3+CzybUKkFKhQysnBZjVQXgSYpsftLr++F5TCJqkE3D0IM8VJtPnXNqi/JrZYgh9x0UNeEBNszsIQGUM27MUMdbnSTuC4MiPBHXExFfCIdQlTkUPr0ht+5E8j+jbMk8FQcXdqJkm5OhPptc/bVvalnE7j6MF2ApogCXA6HJKdQzQXizsHEzPzLejbfypHVueJGwvnrjY0GiVY401pWbBwsfg7fr7x4lHPWZDOiqmb+h2coa1Ldd/J5SdygFAL+NksWxZK8Jer55Qs75Q== 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=a+nGCl+z77umyTRwiUVFxtQEsTpKaTg8D01LWoYxi3o=; b=MXDiQhgc7UX0+7xRP+yHLdxh9vLPg5eVxEihkZQhotWXorfBe00/iJjUccTK5DG84XoYmClOuwIjvjRJKY64DUeY3OXomOMyjCILahRWEnn7KuceYa9skTUR1Z4IdPyC6T/1l3ZiQdBOfZNdWAqMHg8CbzMzt+rHU53rgxLEDqXOeqaYpr2IBKKLkYELKZJ554/tGqcQ/aAx31KkTb0VWkwFsoeVGvQlIA3iHxOTmJv0U8/wI6XvaVOAPqTaacWpYdMhxo1I7qvRxpSDK0lmF7ZSO30GsL0gwYpRVPQB8188rlmhpmL6G+JT8HLqSG3L6BEqhd2k1zE13jl0sJhk+A== 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=a+nGCl+z77umyTRwiUVFxtQEsTpKaTg8D01LWoYxi3o=; b=u+xa+3o6CIaAXEz62FOcaBxgxhBDZdYOj8QviFUFemrxLxp0Xk3ncy5MGJM2wDWFrqNLBdQzZ/g9MZqYSWJlk09kGCjZhcz2BGN/b2/RdvNsds3hH/pHkAkH5mDhxPGlBD9ol1XXY6QZl5nzG2U9sFwvxxhZ5xJpEGH/9btH5U0= 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 BL3PR13MB5162.namprd13.prod.outlook.com (2603:10b6:208:339::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.17; Fri, 21 Oct 2022 08:02:45 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Fri, 21 Oct 2022 08:02:45 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v6 12/27] net/nfp: support TCP flow item Date: Fri, 21 Oct 2022 16:01:48 +0800 Message-Id: <1666339323-24016-13-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666339323-24016-1-git-send-email-chaoyong.he@corigine.com> References: <1666232391-29152-1-git-send-email-chaoyong.he@corigine.com> <1666339323-24016-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SI2PR01CA0051.apcprd01.prod.exchangelabs.com (2603:1096:4:193::6) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BL3PR13MB5162:EE_ X-MS-Office365-Filtering-Correlation-Id: 82f12c5c-9489-40d3-e3d3-08dab33aa30e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jWBPgXgybjGh9jeUmd8GYbjPjKKo0VqjXhKKyhswYTNObtMaRm7Ivf5oTj6nuGuYd2y+/GNUbL0vANUn65Fqdo9ILVa2V2Fqxf9+OvolAF6FPN3zhYt5fySMPNZTPU8/MBNNI1N1lFP1H6STAJHGtmr5JquVY52UJZ6B+LNLzGkt5nUYSXdRu1LVwKv1lTk8SxzYnAQFH0e6LDEjkmqkN/RQoXLZIlpckYDBTioaVnCYPBZ0gVTpJ5SC6JkGfrlbZQvvg1M3SXKWanHNKJ5BsbxZxHnEnKdd6YSPzin9Y5GOMX552OyMC+yPBVvcH8c4erqeD+nZVVSq8CB7ghiB82dkbOSqv7c2UWccAkNlGhkYvm/xZ4E6PT3KW3z2p4RjIcwsXnxm4bQRoT1hIrR2hfgElNHPiStnMOgckaXMSkv+PTVB6x9FcV4zPVV/W8j8IsOc6OvcsVnCKhLj8VGJbz6C1A0Lb9btUxCTWoEXeVKYElFzS1HwPKOjdgjmA+N5s8D5+odxU4GXHWdZvsCsspFAMpGGovJ92v82maKJ8BswIKUD+ugJRMKt06jKEIlFMuA/pL2MBb1Yp5rqcViTgPo+2rcqt03v5Y1dDnskRc4gDIeYF/qQvBl7uAvSlTlXXrsB+bUkn6UOtTwiWcoVamJttaNzVDKZ3KURafBQzQ+0xecVnJAHAFc/KOxgOYVKBnUOya71jt21N12ULpWhF69aFZNakY2LvzKYwbmQUo+cNXWs8v7efnPZ2rChM1UhGRgP9muPIzrLoga0ku3uxQ== 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)(376002)(396003)(346002)(136003)(39840400004)(366004)(451199015)(2616005)(6916009)(38350700002)(6512007)(6506007)(52116002)(8936002)(66946007)(4326008)(186003)(107886003)(8676002)(41300700001)(2906002)(66556008)(316002)(66476007)(38100700002)(44832011)(26005)(5660300002)(83380400001)(478600001)(6486002)(86362001)(36756003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?3VSH/2/O6i07jhnqbh2Emz0ql3mJ?= =?utf-8?q?AbfP4OkMUxAEeNXNbEOBXUx+bvDrItT/LnRCAPEsRtCD6q+Nrw/PyTz8Jado2H+sQ?= =?utf-8?q?6mqT5jp9CJc53UH8dR3P6cxsvOtZuRFmf4CN/RgefeS3PjwThwIXm5zuI30Y84fE/?= =?utf-8?q?KggOKJuW0wehtA26iJSp/76VGZm+7UBBMcH5xFaLemECcKN0Jxv5lEQK1XAWbQbCN?= =?utf-8?q?t3h9ZyWTz6X79g2mz5P3PwYF+a3iLwRlg0TXRlTBmKivnjIOgDa8P1r8hxr8az4rx?= =?utf-8?q?a1821FI+/ym7/l0G8i4EiAd4Jd3G4ghKNYll9gW7uFqXy7+3rehkQXBBfNj4bXAfv?= =?utf-8?q?1xVrJNQikktpo/i8m33+U3WwTAdrJq4DQjr8toS3eqabbA592MX37YczzG/cnAliw?= =?utf-8?q?AiiUzFCJx2BDpRzznmxGwfdFBA2Cs8pKoNHJ65yMXXjPDz+ITDnHsGMrN+SWyW2cs?= =?utf-8?q?zl1GEapjiL29VnRH3XkOR9bwUcy9MYJJPiLumgJa51RcxtUWUm89NGrSETim3GQUb?= =?utf-8?q?okyokYcdQCpSB7nwJyLq272iJbSflaZr1mJYKthLpgjOROowWoS69SP8pIfL1E2am?= =?utf-8?q?Qs7nJMa4tUY1RzkWf+A3/yuwabtuY0Zn5yJUe2lGYrOQTFYaFqepoeQG9EeDdkVbw?= =?utf-8?q?xU5lSuJxG3/KKxdcCEqYSgXJbZNJInxRJ3YjI5Xu32nxxQiTHn7cNtFlmKEscqkZb?= =?utf-8?q?zoVHluPuicOerXd8qA+jaWXEhm8TkTaDgnFU+GJV7RLd6y1nbUoYuAS2G0ApN1jBb?= =?utf-8?q?kL1o4InAnzZm62NrNkLwLQ8GlxY35K3GmBBTNcToBvWr7XbDJEggaVpDvjgjOCzzi?= =?utf-8?q?m0BTxHY1AZgzCZfPzpx11uoCN2zOP8WH9ebbXCwxjttvLz1diWE6tGOqMkgoudCKn?= =?utf-8?q?RK7ayFebA7ZacyiCaOPhcqM0je/1ofKQP88FIE9LC8RQbt9ABGFDvwS1pRXKk6GXA?= =?utf-8?q?FcKWN2BA6zi1XC+vIbQtK+xrpTI6QW5W8g0Urh2Mx+NenlkmpBbTajDMZOEEpVuSd?= =?utf-8?q?EMHBOtfbOdk7C0y1Nt7jLg0to2EbjLt2afNCtPXWO809hOfBli03qi6pkDaYg3GUB?= =?utf-8?q?2cHbBIQloJegNHB2L9ZuDtrmaSEkFGPiqKA80hettCZLndTto5DoSygXDXyQ0Gw4p?= =?utf-8?q?ueFZNBaknUvKrXAQlYbmC/CXjeNIEWpsd6+696MywMX5YoHKT6M6kV+Wl/EhwumSW?= =?utf-8?q?IeEBM8qSxFolINwmbJ7hM87y8DJ0DNUMXGaSoQ7qsEvi44Gdz0bMa6JAJkFUlCROf?= =?utf-8?q?Dmx+a7V4J1Rh79MFoBu0D5oMPwvvZ9jpXBJIq8LpirLBqo0MgVP1tA3TK2abnBCT2?= =?utf-8?q?mZl2VxP/3+6QeBwwn/1I+9/8tsEME4AxZFd/7NA2a4UKcUZtLMeJ0CO+3XzibtymU?= =?utf-8?q?Aaxea4JR4C01r96puP2+qYzSMUYS0dlismJR5EoaZHbuHmOCQRpuEUaBmOHtNh5V5?= =?utf-8?q?gR42rt0SaYeWM6KlZDK4K/NwYOgRAxaDt43uO5X91OV/txeHBLm2jjxbiJyz13Czd?= =?utf-8?q?Rrha524pjTLGUxqrw9/QWry7dr4O3337cQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 82f12c5c-9489-40d3-e3d3-08dab33aa30e X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Oct 2022 08:02:45.4607 (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: gl+LmBt4L389Fzoe6hhFZGqSZgb1Ap4laDRiGD5L/k6ByQtx30mOmTtnGBDgqpL3lNXTE4W+XbQfeeGywXC3ARjQba/OoRepwnylCxiPd0I= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR13MB5162 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 TCP item. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/nics/features/nfp.ini | 1 + drivers/net/nfp/nfp_flow.c | 91 ++++++++++++++++++++++++++++++++++++++++ drivers/net/nfp/nfp_flow.h | 7 ++++ 3 files changed, 99 insertions(+) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index 4869b45..670c12f 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -31,6 +31,7 @@ eth = Y ipv4 = Y ipv6 = Y port_id = Y +tcp = Y vlan = Y [rte_flow actions] diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 1da3c89..da6b31a 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -532,6 +532,11 @@ struct nfp_mask_id_entry { key_ls->key_layer |= NFP_FLOWER_LAYER_IPV6; key_ls->key_size += sizeof(struct nfp_flower_ipv6); break; + case RTE_FLOW_ITEM_TYPE_TCP: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_TCP detected"); + key_ls->key_layer |= NFP_FLOWER_LAYER_TP; + key_ls->key_size += sizeof(struct nfp_flower_tp_ports); + break; default: PMD_DRV_LOG(ERR, "Item type %d not supported.", item->type); return -ENOTSUP; @@ -755,6 +760,78 @@ struct nfp_mask_id_entry { return 0; } +static int +nfp_flow_merge_tcp(struct rte_flow *nfp_flow, + char **mbuf_off, + const struct rte_flow_item *item, + const struct nfp_flow_item_proc *proc, + bool is_mask) +{ + uint8_t tcp_flags; + struct nfp_flower_tp_ports *ports; + struct nfp_flower_ipv4 *ipv4 = NULL; + struct nfp_flower_ipv6 *ipv6 = NULL; + const struct rte_flow_item_tcp *spec; + const struct rte_flow_item_tcp *mask; + struct nfp_flower_meta_tci *meta_tci; + + spec = item->spec; + if (spec == NULL) { + PMD_DRV_LOG(DEBUG, "nfp flow merge tcp: no item->spec!"); + return 0; + } + + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_IPV4) { + ipv4 = (struct nfp_flower_ipv4 *) + (*mbuf_off - sizeof(struct nfp_flower_ipv4)); + ports = (struct nfp_flower_tp_ports *) + ((char *)ipv4 - sizeof(struct nfp_flower_tp_ports)); + } else { /* IPv6 */ + ipv6 = (struct nfp_flower_ipv6 *) + (*mbuf_off - sizeof(struct nfp_flower_ipv6)); + ports = (struct nfp_flower_tp_ports *) + ((char *)ipv6 - sizeof(struct nfp_flower_tp_ports)); + } + + mask = item->mask ? item->mask : proc->mask_default; + if (is_mask) { + ports->port_src = mask->hdr.src_port; + ports->port_dst = mask->hdr.dst_port; + tcp_flags = mask->hdr.tcp_flags; + } else { + ports->port_src = spec->hdr.src_port; + ports->port_dst = spec->hdr.dst_port; + tcp_flags = spec->hdr.tcp_flags; + } + + if (ipv4) { + if (tcp_flags & RTE_TCP_FIN_FLAG) + ipv4->ip_ext.flags |= NFP_FL_TCP_FLAG_FIN; + if (tcp_flags & RTE_TCP_SYN_FLAG) + ipv4->ip_ext.flags |= NFP_FL_TCP_FLAG_SYN; + if (tcp_flags & RTE_TCP_RST_FLAG) + ipv4->ip_ext.flags |= NFP_FL_TCP_FLAG_RST; + if (tcp_flags & RTE_TCP_PSH_FLAG) + ipv4->ip_ext.flags |= NFP_FL_TCP_FLAG_PSH; + if (tcp_flags & RTE_TCP_URG_FLAG) + ipv4->ip_ext.flags |= NFP_FL_TCP_FLAG_URG; + } else { /* IPv6 */ + if (tcp_flags & RTE_TCP_FIN_FLAG) + ipv6->ip_ext.flags |= NFP_FL_TCP_FLAG_FIN; + if (tcp_flags & RTE_TCP_SYN_FLAG) + ipv6->ip_ext.flags |= NFP_FL_TCP_FLAG_SYN; + if (tcp_flags & RTE_TCP_RST_FLAG) + ipv6->ip_ext.flags |= NFP_FL_TCP_FLAG_RST; + if (tcp_flags & RTE_TCP_PSH_FLAG) + ipv6->ip_ext.flags |= NFP_FL_TCP_FLAG_PSH; + if (tcp_flags & RTE_TCP_URG_FLAG) + ipv6->ip_ext.flags |= NFP_FL_TCP_FLAG_URG; + } + + return 0; +} + /* Graph of supported items and associated process function */ static const struct nfp_flow_item_proc nfp_flow_item_proc_list[] = { [RTE_FLOW_ITEM_TYPE_END] = { @@ -791,6 +868,7 @@ struct nfp_mask_id_entry { .merge = nfp_flow_merge_vlan, }, [RTE_FLOW_ITEM_TYPE_IPV4] = { + .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_TCP), .mask_support = &(const struct rte_flow_item_ipv4){ .hdr = { .type_of_service = 0xff, @@ -806,6 +884,7 @@ struct nfp_mask_id_entry { .merge = nfp_flow_merge_ipv4, }, [RTE_FLOW_ITEM_TYPE_IPV6] = { + .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_TCP), .mask_support = &(const struct rte_flow_item_ipv6){ .hdr = { .vtc_flow = RTE_BE32(0x0ff00000), @@ -822,6 +901,18 @@ struct nfp_mask_id_entry { .mask_sz = sizeof(struct rte_flow_item_ipv6), .merge = nfp_flow_merge_ipv6, }, + [RTE_FLOW_ITEM_TYPE_TCP] = { + .mask_support = &(const struct rte_flow_item_tcp){ + .hdr = { + .tcp_flags = 0xff, + .src_port = RTE_BE16(0xffff), + .dst_port = RTE_BE16(0xffff), + }, + }, + .mask_default = &rte_flow_item_tcp_mask, + .mask_sz = sizeof(struct rte_flow_item_tcp), + .merge = nfp_flow_merge_tcp, + }, }; static int diff --git a/drivers/net/nfp/nfp_flow.h b/drivers/net/nfp/nfp_flow.h index 40cd062..0ad89e5 100644 --- a/drivers/net/nfp/nfp_flow.h +++ b/drivers/net/nfp/nfp_flow.h @@ -24,6 +24,13 @@ #define NFP_FLOWER_LAYER2_GENEVE_OP RTE_BIT32(6) #define NFP_FLOWER_LAYER2_TUN_IPV6 RTE_BIT32(7) +/* Compressed HW representation of TCP Flags */ +#define NFP_FL_TCP_FLAG_FIN RTE_BIT32(0) +#define NFP_FL_TCP_FLAG_SYN RTE_BIT32(1) +#define NFP_FL_TCP_FLAG_RST RTE_BIT32(2) +#define NFP_FL_TCP_FLAG_PSH RTE_BIT32(3) +#define NFP_FL_TCP_FLAG_URG RTE_BIT32(4) + #define NFP_FL_META_FLAG_MANAGE_MASK RTE_BIT32(7) #define NFP_FLOWER_MASK_VLAN_CFI RTE_BIT32(12)