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 AA0E845BCC; Thu, 31 Oct 2024 00:14:51 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 265DF434FE; Thu, 31 Oct 2024 00:14:42 +0100 (CET) Received: from egress-ip42b.ess.de.barracuda.com (egress-ip42b.ess.de.barracuda.com [18.185.115.246]) by mails.dpdk.org (Postfix) with ESMTP id 65F3443521 for ; Thu, 31 Oct 2024 00:14:32 +0100 (CET) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05lp2172.outbound.protection.outlook.com [104.47.17.172]) by mx-outbound17-81.eu-central-1b.ess.aws.cudaops.com (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Wed, 30 Oct 2024 23:14:29 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oBHQPlUIDuzuAYvbC59vwwP/Wk548XViqLAgstQC7/Q9+4LzyRQ5koql13pD6mHyZhC0OpL1qrnWO1KdmW6+fju9wpqQvev9WUptLS2Ars6pzn1JtbgtC5yMVNQoKmhP/3XN9Da/bRI/EVknaiGAxFtlN4CLl0pOMezjCQfz/qZrL+LfyDGviVqDm1B46ATLLVmswzLwcIuDtW0bvObd8qqpq7J0fDdlZvMe+8N6wwbEnBVrffa+NpUVmfhXNZqUKn+quRlcpsWDEnbmaVo5Rx5CxUSD21yAZkwfI3e3vGsySOw7Fy6c//pdfRXb4kdbccUPyb2/wZHkkKIKUEAdkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=AMLsnMO83JXs29l6RUgNoZxz4ARHeXrWjw7XGZ8XPFo=; b=fjnIzKlGIFrFVFKxI3MgUR8gsF0ypx7T16RH+0I75FiLW4+N5TrTGLDszFw240lorh27/bpBuJZrKos/YkLwyhG/nrXHYXERkCcbVY/GiibmjZ8cLzfXU2+ikpE3dEnoD2GB9m+rpqgrQBFeN/X5M4RFj+OP70B2IlSccx6xi6FbU9YTp2BtOf4fzBkMPHMDWEBGfvU1RKmvtNZbGcoQGVbtAeQB8L20q34uwraTZ24h+HkF0KZdyw2BHnfCyGU5u32TesFNvat8int57nf7PSDtSN7Q58aeuckHGLW3LoTqMwujy8lEkvFeE7aSI3uDqtdRD/ukQDcgyX63xyDYoQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 178.72.21.4) smtp.rcpttodomain=dpdk.org smtp.mailfrom=napatech.com; dmarc=fail (p=reject sp=reject pct=100) action=oreject header.from=napatech.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=napatech.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AMLsnMO83JXs29l6RUgNoZxz4ARHeXrWjw7XGZ8XPFo=; b=MHPmfT/9Qcdx/vLJnbAmEdenJhqEXlz9fQC+MuAUU92ZTmHBvfuTxBP62YXBHIQ5KL3hQB0GjQFncXLAPRHGzjEzJUolHLaFMHjD1MY6BOlv3TbIZChJDY/9JyS9hdT2setSkcMgtfpDactuNjcXtWugrya5AsrZg6/fJX6IMC0= Received: from DUZPR01CA0015.eurprd01.prod.exchangelabs.com (2603:10a6:10:3c3::18) by DU0P190MB1859.EURP190.PROD.OUTLOOK.COM (2603:10a6:10:3a5::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.25; Wed, 30 Oct 2024 21:41:07 +0000 Received: from DU2PEPF00028D13.eurprd03.prod.outlook.com (2603:10a6:10:3c3:cafe::a8) by DUZPR01CA0015.outlook.office365.com (2603:10a6:10:3c3::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.20 via Frontend Transport; Wed, 30 Oct 2024 21:41:07 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 178.72.21.4) smtp.mailfrom=napatech.com; dkim=none (message not signed) header.d=none;dmarc=fail action=oreject header.from=napatech.com; Received-SPF: Fail (protection.outlook.com: domain of napatech.com does not designate 178.72.21.4 as permitted sender) receiver=protection.outlook.com; client-ip=178.72.21.4; helo=localhost.localdomain; Received: from localhost.localdomain (178.72.21.4) by DU2PEPF00028D13.mail.protection.outlook.com (10.167.242.27) with Microsoft SMTP Server id 15.20.8114.16 via Frontend Transport; Wed, 30 Oct 2024 21:41:07 +0000 From: Serhii Iliushyk To: dev@dpdk.org Cc: mko-plv@napatech.com, sil-plv@napatech.com, ckm@napatech.com, andrew.rybchenko@oktetlabs.ru, ferruh.yigit@amd.com, stephen@networkplumber.org, Danylo Vodopianov Subject: [PATCH v5 76/80] net/ntnic: add async create/destroy declaration Date: Wed, 30 Oct 2024 22:39:23 +0100 Message-ID: <20241030213940.3470062-77-sil-plv@napatech.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20241030213940.3470062-1-sil-plv@napatech.com> References: <20241021210527.2075431-1-sil-plv@napatech.com> <20241030213940.3470062-1-sil-plv@napatech.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PEPF00028D13:EE_|DU0P190MB1859:EE_ Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: 1a78bfd3-b28e-49d1-32f6-08dcf92b9040 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|36860700013|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?rwKnKfEmWiBg/6H00TrtaAYnJ4XkOT3HXFWaY0qsNMabDD5Dh7vmHLKUL25B?= =?us-ascii?Q?1sZFhRdw0enf2/1wB9FqW4ve1I4z2tvoghZDAaIHt72qUS+V7TbhCX30OcUv?= =?us-ascii?Q?aAW8YrZRLctCjsj+WdUw9BF0UD+18M1drnL/AKBsKNI8suq4aiznr3k+qhte?= =?us-ascii?Q?Kq5Ve6FGRpLdwDVFG7CEybo80s8Q80OVQuFPmPunvSFCniOEJPU74XHA3gQZ?= =?us-ascii?Q?g+2+h7rYw4WUbnaqxM4/cN+jUQZ65NrE5gWkmYjQqOjl9lyArDXioGlR8Zrc?= =?us-ascii?Q?arHXCFTL6eeho/j+Pv3Vmms7ghbdCewd64L0qHgn4RlHjJ30oKXsTt2n5m0U?= =?us-ascii?Q?2tgGbqFjC73o6LBVJ+qflNU7H9yrDrR6cjCbdvhx/oFk7A3UF3RQAH9w7cqH?= =?us-ascii?Q?6IFAw1VE95bmc3e+2cPZfawMxLosV1suGtCRduRDp6kscq1jKXB7/eksQgwX?= =?us-ascii?Q?f3mLZhuyUWmAB2YGo4qu0NIPo/qA0GspavTQunt0Lx/3Q5BRBKbNtCHjvJR5?= =?us-ascii?Q?AxFtMbzc9TEHReUWyqD4dTmHw5SRKBplKs+f/I0r2rgNnscRrZxLX1Hon+fk?= =?us-ascii?Q?OhoMcLWDpQTwNkFC7Kt01VGJFOCC7p2635IIaSQAlqKPmhrYxWXG7ZNy4TXk?= =?us-ascii?Q?Qnzlg8zqObgdDIobzc7xfGM6rjcOjRyGfLV5cjjA7Fj/TQC7V/ltRbBetsNl?= =?us-ascii?Q?G7Y6ol4v/OMc/+7C72uvQOEqfIGHupJflw0d3EIykpHYK83SwDZSDp7d0F6r?= =?us-ascii?Q?I2siA4ne34/mo+EMDwFuYM7xJsTsXXF5WcVR9DtUa9+VPi31zJit+EmEDqsJ?= =?us-ascii?Q?ynECrvzCTiNjqMTbnvCOuFq4/ngsMacLmvQEWNUXZg1aJNJz6F87zVYwHN7m?= =?us-ascii?Q?QnQJ6VZvzCWPaTo6zIa/lWfL1zl4bsohUOgOMsVHZY1Wckpw5Gd3l383n/ow?= =?us-ascii?Q?ZVZFqlLw0neqSdPK4Wo9BB/HAyqGuB9OUWs1OFPgBoRRbB6Q8DklSPx/buIa?= =?us-ascii?Q?hZtcQgmvRnnvZEHij5THlD70vGOFumbUPb0e+Jw/EB+CmQ0r2f7W+rBLtags?= =?us-ascii?Q?uRdArZ07hSTlfA5Vyb6L2ohyFu7Qrk5iIKtCXrcrvySw2gSNx3yu5m8mQ+cr?= =?us-ascii?Q?4cQqojF8V1FnpvL5/GpM7pme+ZgU6+gopUAsFGk0HlCpCGyoDuzsrSjAEEoz?= =?us-ascii?Q?fk7R6UPCqm5c8f5L36IinKHjb8h99IBI0/ew/6eVyS35YRHYHLwXLAa5yxCL?= =?us-ascii?Q?Hsn4T1N+b23+DZMfa+RDKLPntFD1hJmFsWK1YAHTyRkvPJmRRZJr1PJ4dHpd?= =?us-ascii?Q?tElpGyqhf5g2u0E9ePXpGlYLiD5rgsAgdVbvz1RQ6Qc99wZgiEj/zJ0oPmal?= =?us-ascii?Q?9I33l1nacFtBdF22fokXYYTH/Rtg+bk5yUtECf1vOHGTACz2WQ=3D=3D?= X-Forefront-Antispam-Report: CIP:178.72.21.4; CTRY:DK; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:localhost.localdomain; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(82310400026)(36860700013)(376014)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: IlX6N6z/Q4t27NcELxks8dfmkCn/L8QJ7hyCGsAxFUgL5mLghjGNjaZL1B4ntfoqEMgSgt0NrNChhel1j0sgBlhTw91uRzVY9KjjsXSTi0kemD4OdnMRE0drT168xHESOWvUdXyqqSlqZFbMkOqGW9KjKO4j/YYFbqqU7+yYFwPZoW6j4X4wA8d8UIoNm0R4kJh1uhQGY7tkzLiwNqh4Wl+ggVROFgDqm3of0UinnrCrIUzpkgNyiSAU0naLnyeHPj2KKDRNq0L4xHURIfd8ME6GPFY+K4xlgDxoVzcEgpQ4DxCToai2dxBmMqXji+cYBS4M5mnPUnzEYu5lSFC2oV+acPO0Y/uAqgO9ZPDZunhMMnppv0b3+iKB4VvWXddqH3EJA147MzOK3GPB3WktRxMm0/tnEvthVH6j23Az/ZmEVvMmt2NFo1jj06hUqiHErOUPDm11A85uIa38667Iq9Xekzpu7ntmW+Rd1QsDGgwrk6VGf6ivf/mC1r7UrAdZIpYmtyPEPdp0YD4/nmRbQTPZCvqM3HN+gFShkUPUEf3YcKYzl++/f1nAKRGqbaUgMh78svg6sbM7KtxqlIucmzYul9DEhlxUbdlWjopCnL5j7BDROlbCpJzHtpTwAzAnqiiLoB1TwWvXRKLgzew30SLAcOXdpGKr3YNt/Lwih0c= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Oct 2024 21:41:07.5835 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1a78bfd3-b28e-49d1-32f6-08dcf92b9040 X-MS-Exchange-CrossTenant-Id: c4540d0b-728a-4233-9da5-9ea30c7ec3ed X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=c4540d0b-728a-4233-9da5-9ea30c7ec3ed; Ip=[178.72.21.4]; Helo=[localhost.localdomain] X-MS-Exchange-CrossTenant-AuthSource: DU2PEPF00028D13.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0P190MB1859 X-OriginatorOrg: napatech.com X-BESS-ID: 1730330069-304433-12633-48444-1 X-BESS-VER: 2019.1_20241018.1852 X-BESS-Apparent-Source-IP: 104.47.17.172 X-BESS-Parts: H4sIAAAAAAACA4uuVkqtKFGyUioBkjpK+cVKVubmJmZAVgZQ0Dw10cjUIs3C0t I40dwi2cLU0sLA0CDN3DjZyCwxzcxEqTYWAAFJmMVBAAAA X-BESS-Outbound-Spam-Score: 0.00 X-BESS-Outbound-Spam-Report: Code version 3.2, rules version 3.2.2.260092 [from cloudscan20-80.eu-central-1b.ess.aws.cudaops.com] Rule breakdown below pts rule name description ---- ---------------------- -------------------------------- 0.00 BSF_BESS_OUTBOUND META: BESS Outbound X-BESS-Outbound-Spam-Status: SCORE=0.00 using account:ESS113687 scores of KILL_LEVEL=7.0 tests=BSF_BESS_OUTBOUND X-BESS-BRTS-Status: 1 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: Danylo Vodopianov implementation for async create and destroy flow. Signed-off-by: Danylo Vodopianov --- drivers/net/ntnic/include/flow_api_engine.h | 8 ++ drivers/net/ntnic/ntnic_ethdev.c | 1 + drivers/net/ntnic/ntnic_filter/ntnic_filter.c | 105 ++++++++++++++++++ drivers/net/ntnic/ntnic_mod_reg.c | 15 +++ drivers/net/ntnic/ntnic_mod_reg.h | 18 +++ 5 files changed, 147 insertions(+) diff --git a/drivers/net/ntnic/include/flow_api_engine.h b/drivers/net/ntnic/include/flow_api_engine.h index b40a27fbf1..505fb8e501 100644 --- a/drivers/net/ntnic/include/flow_api_engine.h +++ b/drivers/net/ntnic/include/flow_api_engine.h @@ -343,6 +343,14 @@ struct flow_handle { }; }; +struct flow_pattern_template { +}; + +struct flow_actions_template { +}; +struct flow_template_table { +}; + void km_attach_ndev_resource_management(struct km_flow_def_s *km, void **handle); void km_free_ndev_resource_management(void **handle); diff --git a/drivers/net/ntnic/ntnic_ethdev.c b/drivers/net/ntnic/ntnic_ethdev.c index 068c3d932a..77436eb02d 100644 --- a/drivers/net/ntnic/ntnic_ethdev.c +++ b/drivers/net/ntnic/ntnic_ethdev.c @@ -1252,6 +1252,7 @@ eth_dev_start(struct rte_eth_dev *eth_dev) return -1; } + eth_dev->flow_fp_ops = get_dev_fp_flow_ops(); struct pmd_internals *internals = eth_dev->data->dev_private; const int n_intf_no = internals->n_intf_no; diff --git a/drivers/net/ntnic/ntnic_filter/ntnic_filter.c b/drivers/net/ntnic/ntnic_filter/ntnic_filter.c index 0e20606a41..d1f3ed4831 100644 --- a/drivers/net/ntnic/ntnic_filter/ntnic_filter.c +++ b/drivers/net/ntnic/ntnic_filter/ntnic_filter.c @@ -4,6 +4,11 @@ */ #include +#include +#include +#include + +#include "ntlog.h" #include "nt_util.h" #include "create_elements.h" #include "ntnic_mod_reg.h" @@ -881,6 +886,96 @@ static int eth_flow_configure(struct rte_eth_dev *dev, const struct rte_flow_por return res; } +static struct rte_flow *eth_flow_async_create(struct rte_eth_dev *dev, uint32_t queue_id, + const struct rte_flow_op_attr *op_attr, + struct rte_flow_template_table *template_table, const struct rte_flow_item pattern[], + uint8_t pattern_template_index, const struct rte_flow_action actions[], + uint8_t actions_template_index, void *user_data, struct rte_flow_error *error) +{ + const struct flow_filter_ops *flow_filter_ops = get_flow_filter_ops(); + + if (flow_filter_ops == NULL) { + NT_LOG_DBGX(ERR, FILTER, "flow_filter module uninitialized"); + return NULL; + } + + struct pmd_internals *internals = dev->data->dev_private; + + struct fpga_info_s *fpga_info = &internals->p_drv->ntdrv.adapter_info.fpga_info; + static struct rte_flow_error rte_flow_error = { .type = RTE_FLOW_ERROR_TYPE_NONE, + .message = "none" }; + + struct cnv_action_s action = { 0 }; + struct cnv_match_s match = { 0 }; + + if (create_match_elements(&match, pattern, MAX_ELEMENTS) != 0) { + rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM, NULL, + "Error in pattern"); + return NULL; + } + + if (fpga_info->profile == FPGA_INFO_PROFILE_INLINE) { + uint32_t queue_offset = 0; + + if (internals->type == PORT_TYPE_OVERRIDE && internals->vpq_nb_vq > 0) + queue_offset = internals->vpq[0].id; + + if (create_action_elements_inline(&action, actions, MAX_ACTIONS, queue_offset) != + 0) { + rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION, NULL, + "Error in actions"); + return NULL; + } + + } else { + rte_flow_error_set(error, EPERM, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, + "Unsupported adapter profile"); + return NULL; + } + + struct flow_handle *res = + flow_filter_ops->flow_async_create(internals->flw_dev, + queue_id, + (const struct rte_flow_op_attr *)op_attr, + (struct flow_template_table *)template_table, + match.rte_flow_item, + pattern_template_index, + action.flow_actions, + actions_template_index, + user_data, + &rte_flow_error); + + convert_error(error, &rte_flow_error); + return (struct rte_flow *)res; +} + +static int eth_flow_async_destroy(struct rte_eth_dev *dev, uint32_t queue_id, + const struct rte_flow_op_attr *op_attr, struct rte_flow *flow, + void *user_data, struct rte_flow_error *error) +{ + const struct flow_filter_ops *flow_filter_ops = get_flow_filter_ops(); + + if (flow_filter_ops == NULL) { + NT_LOG_DBGX(ERR, FILTER, "flow_filter module uninitialized"); + return -1; + } + + struct pmd_internals *internals = dev->data->dev_private; + + static struct rte_flow_error rte_flow_error = { .type = RTE_FLOW_ERROR_TYPE_NONE, + .message = "none" }; + + int res = flow_filter_ops->flow_async_destroy(internals->flw_dev, + queue_id, + (const struct rte_flow_op_attr *)op_attr, + (struct flow_handle *)flow, + user_data, + &rte_flow_error); + + convert_error(error, &rte_flow_error); + return res; +} + static int poll_statistics(struct pmd_internals *internals) { int flow; @@ -1017,3 +1112,13 @@ void dev_flow_init(void) { register_dev_flow_ops(&dev_flow_ops); } + +static struct rte_flow_fp_ops async_dev_flow_ops = { + .async_create = eth_flow_async_create, + .async_destroy = eth_flow_async_destroy, +}; + +void dev_fp_flow_init(void) +{ + register_dev_fp_flow_ops(&async_dev_flow_ops); +} diff --git a/drivers/net/ntnic/ntnic_mod_reg.c b/drivers/net/ntnic/ntnic_mod_reg.c index 10aa778a57..658fac72c0 100644 --- a/drivers/net/ntnic/ntnic_mod_reg.c +++ b/drivers/net/ntnic/ntnic_mod_reg.c @@ -199,6 +199,21 @@ const struct flow_filter_ops *get_flow_filter_ops(void) return flow_filter_ops; } +static const struct rte_flow_fp_ops *dev_fp_flow_ops; + +void register_dev_fp_flow_ops(const struct rte_flow_fp_ops *ops) +{ + dev_fp_flow_ops = ops; +} + +const struct rte_flow_fp_ops *get_dev_fp_flow_ops(void) +{ + if (dev_fp_flow_ops == NULL) + dev_fp_flow_init(); + + return dev_fp_flow_ops; +} + static const struct rte_flow_ops *dev_flow_ops; void register_dev_flow_ops(const struct rte_flow_ops *ops) diff --git a/drivers/net/ntnic/ntnic_mod_reg.h b/drivers/net/ntnic/ntnic_mod_reg.h index 563e62ebce..572da11d02 100644 --- a/drivers/net/ntnic/ntnic_mod_reg.h +++ b/drivers/net/ntnic/ntnic_mod_reg.h @@ -7,6 +7,7 @@ #define __NTNIC_MOD_REG_H__ #include +#include #include "rte_ethdev.h" #include "rte_flow_driver.h" @@ -426,6 +427,19 @@ struct flow_filter_ops { uint32_t nb_contexts, struct rte_flow_error *error); + /* + * RTE flow asynchronous operations functions + */ + struct flow_handle *(*flow_async_create)(struct flow_eth_dev *dev, uint32_t queue_id, + const struct rte_flow_op_attr *op_attr, + struct flow_template_table *template_table, const struct rte_flow_item pattern[], + uint8_t pattern_template_index, const struct rte_flow_action actions[], + uint8_t actions_template_index, void *user_data, struct rte_flow_error *error); + + int (*flow_async_destroy)(struct flow_eth_dev *dev, uint32_t queue_id, + const struct rte_flow_op_attr *op_attr, struct flow_handle *flow, + void *user_data, struct rte_flow_error *error); + int (*flow_info_get)(struct flow_eth_dev *dev, uint8_t caller_id, struct rte_flow_port_info *port_info, struct rte_flow_queue_info *queue_info, struct rte_flow_error *error); @@ -436,6 +450,10 @@ struct flow_filter_ops { struct rte_flow_error *error); }; +void register_dev_fp_flow_ops(const struct rte_flow_fp_ops *ops); +const struct rte_flow_fp_ops *get_dev_fp_flow_ops(void); +void dev_fp_flow_init(void); + void register_dev_flow_ops(const struct rte_flow_ops *ops); const struct rte_flow_ops *get_dev_flow_ops(void); void dev_flow_init(void); -- 2.45.0