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 D910345BC0; Tue, 29 Oct 2024 18:16:44 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AACAD42FD7; Tue, 29 Oct 2024 18:16:28 +0100 (CET) Received: from egress-ip11b.ess.de.barracuda.com (egress-ip11b.ess.de.barracuda.com [18.185.115.215]) by mails.dpdk.org (Postfix) with ESMTP id 9B42642FC3 for ; Tue, 29 Oct 2024 18:16:25 +0100 (CET) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05lp2170.outbound.protection.outlook.com [104.47.17.170]) by mx-outbound43-199.eu-central-1c.ess.aws.cudaops.com (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 29 Oct 2024 17:16:22 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iABPZa/+ZgLvFKF82cYG0QDC6eR1IfFgt3X8uctZxbWFwR61ZzAm4xWliWzCWydXIqjEBFtmgDSzdbIyM5Vo0JydZPyTmE9Ixsd2XmYCA1P4646IWnuNb1NmSbIvw8HFF+/OkkGoYCy5+Pk3NiL7bT16UdrXE9n6beJYv5YN+c5J1OHRNUOdIVm+WTLcMk6QvE4giAq19UYyqcdjI2bKYQ9GM6fuvi7ik1up9jTcDCucYeGI+gq9cPLeLoB5OotnrUxlgEDQVOmt59LMnOKZuFrorFMVeflpvS5pU6tSoHC82X+hdEL3wnzkytAD8TdE6wPjHTHlqzLgVwY4J+VYXA== 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=CSBUinUveH0bko0a/5XEwgyTiM8fx5p/P7BnVSSuADQ=; b=LXSjHONuLzXFsWfO04WZoTt51u3/PJ2gWSWe51AXsEt2adNyNcsvX1QjGcHvU77IOijpT9IDQSRd5TX4RpIpgMbKRrVR6WOkjDHkiLh+HxtucawdCMab46dQigNxd4KzLPVfXNWtkdyPwoFvNBEawaQbzFe5ZuINQO28KasVZgyGIpkTHUXZoVRL2Uer60p8CLJ54hjHMY1BwVrv4PaIvs0EPfwe5RIucx8lIOuNpE6uGuRA2mxgYVbkHYugGkGd2NXoAffQeb/zCyGm0pUbh+MyYTCfgm2pEhYVTWjsRGSAaZ1A8uxwcO7e+x6XtSWA6JEzFe8XVT7O6Tp5T5oC7A== 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=CSBUinUveH0bko0a/5XEwgyTiM8fx5p/P7BnVSSuADQ=; b=T5o77PFatVndeVrMbxn5/gpWlJC8hkcLrhsIvK2bp/TOvKRbanfFvepDdX3Aj324ESKbZmzOPDRNoL5+smxCIKg8GNaTOwvETvB7I7f1rSMyq/FtSQPINeCNRmCH2ZdwQbLiDxtNxPZ6cZ1ZFTv7KV6U/x1IOaemFkbfAudxxZE= Received: from DUZPR01CA0196.eurprd01.prod.exchangelabs.com (2603:10a6:10:4b6::23) by DBAP190MB0838.EURP190.PROD.OUTLOOK.COM (2603:10a6:10:1aa::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.20; Tue, 29 Oct 2024 16:44:11 +0000 Received: from DU2PEPF00028D06.eurprd03.prod.outlook.com (2603:10a6:10:4b6:cafe::a9) by DUZPR01CA0196.outlook.office365.com (2603:10a6:10:4b6::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.17 via Frontend Transport; Tue, 29 Oct 2024 16:44:11 +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 DU2PEPF00028D06.mail.protection.outlook.com (10.167.242.166) with Microsoft SMTP Server id 15.20.8114.16 via Frontend Transport; Tue, 29 Oct 2024 16:44:11 +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 v4 80/86] net/ntnic: add async create/destroy API declaration Date: Tue, 29 Oct 2024 17:42:24 +0100 Message-ID: <20241029164243.1648775-81-sil-plv@napatech.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20241029164243.1648775-1-sil-plv@napatech.com> References: <20241021210527.2075431-1-sil-plv@napatech.com> <20241029164243.1648775-1-sil-plv@napatech.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PEPF00028D06:EE_|DBAP190MB0838:EE_ Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: a543e42b-60fc-4c0f-fd84-08dcf838eaa3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?6zZYEa2N6BRhhb5UyxuWkBCa5iKHzuryA2eio8R9BLh6QiAVCFowgqi8d1A4?= =?us-ascii?Q?PySejdJXQEvVRAk1KVv+egZCjdOxLOVy7MIWpmayS8l38Pr9kMx58nrqhzHl?= =?us-ascii?Q?+G7MPHkeRJygszAzGLHOyRxImgLkyqeQOhWYXp7fTmSyUmr/8lYm1J5Gqvwa?= =?us-ascii?Q?4bke6DzEUTGehXLm33xslP20vH3hTe67oPHEc+hlQu8P3+WyPKI/Jm+mnWHF?= =?us-ascii?Q?dpjqrkAIGA5uEp4JXu4sg2Io5XVQY22fvS7abQmGqjmNvRBty1WAXCAg10Ea?= =?us-ascii?Q?RKryz0RcT4WuJtRMBBp1LmePrGAO8o5HZg+LpnFMcFFZtkXRAx3Mhw7MUML/?= =?us-ascii?Q?aMMPp975qRLmXFIoWqzZZc3lxjvqV26Fy/wzAV2krkeGscTWDZ5Q9AMIEYXk?= =?us-ascii?Q?wwhGgwaIPXVJY3YeAzojnF9Av0IfDUm9GrmDXWIPhUmoMVh/7har57NJGAqe?= =?us-ascii?Q?YjYrY2p115Me09AxgA9R9WdTi6l399HUoh2EiPd5zFfLrQZbwSXtzukQAGwN?= =?us-ascii?Q?Yuo5mScfo3YrgqfQFhUPsrlFLwwiLvfiE00h30BPJtadfkfDOColyfYieJco?= =?us-ascii?Q?YhoVjG8QG0xNCfPWYmbA6fYmWokVa5aZ9+fnh6mhxa1R5lG1r0vrvyHVrl4c?= =?us-ascii?Q?MieTAiv5GFpomlRmmaIkvSZQpefK+LxOuzcOl4Mp34R58g2c7mQEoMZqvPsU?= =?us-ascii?Q?N7raU4+zS/uuIL36zID1A1huR0UT2FwfFuLfZoK5ccN1sZ3hMN97JpIo+dgS?= =?us-ascii?Q?OYfktjCaD+rG2ghf6DlXKqtTws1FLvEvVOQZF4yIBgpEg0jdvO9tCidbGSq6?= =?us-ascii?Q?U662fRQ61uSWTyAZjscfnNcsl5oAS/1/uDDjGLangh8rlzdY5ZQIsKWqoZ5S?= =?us-ascii?Q?Z1wb4wfYz+rbTOBcbstIj3134G5chF5RNWjXYixgI+opz2qKeK70sBrXJxgh?= =?us-ascii?Q?IrIkHCNVnzNfZM3vmCQzzJfClyhjlVhNYKQbGuTXmmCIFOmJLFABg3/0Q63V?= =?us-ascii?Q?0ps9YGrgDivgO8jc2xomLu8v/QT6HVnVqlBVv3dCb4Fa53a7yECDPDmvUjIV?= =?us-ascii?Q?tFCd7ANROU3hgixULJzVlpKdfsDALUIdKLAuHVX3q4fqYEwbhnOifNfqqs2N?= =?us-ascii?Q?Ow8W8qmq+evaJsm90YDvW4uHEfiqmIn6iCYUU68RP3/EuzIRDNV02xMPe+uC?= =?us-ascii?Q?IVKV8rFORkRv9emNTBNn4wpII+Jz5ux3cCTSiI28IAgA5Fn3fWAnHJ0unBHO?= =?us-ascii?Q?MqvrXOzHXnCj8Pf8LA9Ob4rSoLWn371F8pYsXJTPSrBEM31IctB+ww0g62zo?= =?us-ascii?Q?zsfL+ijf/TL+irvgixtMh5MIM3ycSFQuAaIhrank3D8Eje9bXGb7nwUcoxux?= =?us-ascii?Q?DyHYD5vRvb9vsAFzOaEa1ubiB9Nk9V760UKsRMaByZyx1pVDxg=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)(1800799024)(376014)(36860700013)(82310400026); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: Q8NmJaw+Kje5qvjDLbIlrAPGfAk1PoqS7l8qxr1FkF/lAJAqMz+VXS0UOfH7iw0zZ7rOeR2vrIBugQ20Yc9CAYtdXNIww6g8He/1aauLGEn3P1vGaUfsloInBkU0dZ9xTq3KFRzlw1q3oeP73KJLA7wUiVlMx6GJMrhqWIRen90h96JcknGdWPlTxLZ81DJjOYsPswF03imqZAcZiglDxCMUTSKV3vaGu1dS2NHEMJ0PT6kkIEEPZNorvF+98Iyvf7ocliF+wpCgidn9yEnna84aLPS0ezZP6dQ+Q/htI1LeXCtrt9l0OOzQ/dIQVVtb1ydCUQcpV1TQWgNMAtcwBebWKfjAw59gia9+RYiOdeEwi+EArFSVVQe3GJp3p3XxPb2H3fpWuz3ce+vIjc4VA2KOanrVNsn34I8HwtI0H1ucYEFcqhCO+2G2n7i/RXxI2Kd1qdEMmPzJLhYAnFyjGm0Z+XXm1rtHTz8oPxG7VVjxLbf6T5GKLIPnaNUk8hjBOGjrc/IBoIoFtp2NbXZfpOWZ1LQvUCSUM5zCGJ+WFDeQruTX32OmVcllBmnCM3x8BJKIYN+QwLF4+BmGVeKOimsc/6wNmuAeEZrAfNF18xjSVAah8v86gSgL3mUhpsg/h5g7b62tth/aYuIc3qHu3DKJUSNII4wpzT2kRlVUjpc= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Oct 2024 16:44:11.5115 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a543e42b-60fc-4c0f-fd84-08dcf838eaa3 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: DU2PEPF00028D06.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAP190MB0838 X-OriginatorOrg: napatech.com X-BESS-ID: 1730222182-311207-12673-29581-1 X-BESS-VER: 2019.1_20241018.1852 X-BESS-Apparent-Source-IP: 104.47.17.170 X-BESS-Parts: H4sIAAAAAAACA4uuVkqtKFGyUioBkjpK+cVKVubmZuZAVgZQMMU82cDIIsUyzc ws2dLQLMXIzNTUwsTAKCkxNcUkLTFJqTYWAAQShQRBAAAA X-BESS-Outbound-Spam-Score: 0.00 X-BESS-Outbound-Spam-Report: Code version 3.2, rules version 3.2.2.260064 [from cloudscan15-168.eu-central-1a.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 Fast path async create and destroy flow API implementation were added. 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