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 133BF45BCC; Thu, 31 Oct 2024 00:13:35 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7259F43522; Thu, 31 Oct 2024 00:13:17 +0100 (CET) Received: from egress-ip11a.ess.de.barracuda.com (egress-ip11a.ess.de.barracuda.com [18.184.203.234]) by mails.dpdk.org (Postfix) with ESMTP id 63A52434F4 for ; Thu, 31 Oct 2024 00:13:14 +0100 (CET) Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03lp2235.outbound.protection.outlook.com [104.47.51.235]) by mx-outbound47-144.eu-central-1c.ess.aws.cudaops.com (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Wed, 30 Oct 2024 23:13:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lK2I9Es+otkjM03koNMAyKmpp4bn9rL3HoodO2XF77pPIMSqpb24GENOn/7we7M6w5s1zBIbrXcr3gR75oovYEjI5tmdPKO9079d8Fo+hQd4UXLXKA8Bmm8qSjpt3yd+GgOAKvDFV1l3lWzy8JwhCCwZ3pkq0gj/a5YQf9GMcDADe8LSRytUhWmgmvtDglky+ZDd3CDa1k6yryNTxgLqXNHL8y5lbTvZ0WkJDwgl+Fl/j8DSX8bzpLUFqzoo6j/37RnIvICsjZ6wW8p4hKncjVPM/NcTV8slrmXtahjtw17solWBe05Q6kr2RRDKXks/LqdKcsZnAcG/ctotOrBf7g== 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=pqrNK0Q4PN9NOSfoIkvg5IcLjZ+FFFPq4k8DaemlKso=; b=DviZi5MZ0W0+d27s8vKvJzsiXiSFGWmJev8324c2GiRKBKAQHxBWTuUwfCWNpIizk9YuDAi5h9ePeCNrLnjP1QXK5Xz2xzj+e8PVTxC5ahyCA2VByrqRBLDWAaiwRdTvtROUEbg1E4Fq4COgxJxt+wc23nMZ1uatGQCp/TFiKIe0aKKJ4AO9eF0LjWbHTXQ14cKoyvv4tHUZNJvq5MO+HIwwzdDAwLAinDiw8kfqupi71j9C9ZuwcjmQM3ff59L5NTjj5ZgKsGTOmk4sOw6+Y/dzd8mYVl4pYFoK6FyFT0IAyZOC+Dgojn5U0iLxgM0quW/KFYZCm5NWBHJlHK87eQ== 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=pqrNK0Q4PN9NOSfoIkvg5IcLjZ+FFFPq4k8DaemlKso=; b=pMBdrzHEWsBx+Fjg66l9puLCdnO7ktnaNe8I/7z564KjyB5gXgXXSRGyZGp+qlTl3mwbeA94cSE9ljkdLSS7NYE7kPkOk1HjyXCSdRRAbkPxgR3Lb2y2dlQZEeEirfVGVLUOerxN9AsgkoQnj3Cr+p/fyhoMLaIYEgy8j2hFL6k= Received: from DUZPR01CA0001.eurprd01.prod.exchangelabs.com (2603:10a6:10:3c3::10) by DB9P190MB1843.EURP190.PROD.OUTLOOK.COM (2603:10a6:10:37e::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:40:55 +0000 Received: from DU2PEPF00028D13.eurprd03.prod.outlook.com (2603:10a6:10:3c3:cafe::33) by DUZPR01CA0001.outlook.office365.com (2603:10a6:10:3c3::10) 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:40:55 +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:40:55 +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 64/80] net/ntnic: add high-level flow aging support Date: Wed, 30 Oct 2024 22:39:11 +0100 Message-ID: <20241030213940.3470062-65-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_|DB9P190MB1843:EE_ Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: 54038642-aaa3-4275-72c6-08dcf92b88e9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?hxS82aMuBH2CQac6x8CGH0loHtREBDPCJgPlbgOy7g06IcI1TZBAy8Fr4gUb?= =?us-ascii?Q?nekrSRDv7d6hQ6x41E5vVrJByZdkjnOlUbfKCmxF3rBpjHN9tYgJO2HR9wVw?= =?us-ascii?Q?mSDTbduye+LCuadpyd2/9vzhV1sNAs7tVZM+rJzjqHHQg+Xel07crCXFxyn9?= =?us-ascii?Q?raYTzZo4XaLZOXYM4vrM96wafcMRKna1BcdcRncQyRCpiWAyXmSqlCSwx9zV?= =?us-ascii?Q?dniTP9pOykUsmxxB/+1AGQ1pYuEvDdrQAbSaQ4q2q7y6NYD2uFJVq5O7lW2B?= =?us-ascii?Q?n4R0eg76F2Vx/4ekdDjOEJG1AIWWO5PvwExO40rYVa9eODBkinI5Q67H9pTS?= =?us-ascii?Q?uuE1FXD5Ith6IR5RM76jY0gWrTIFoa7QVXM9RffbLdh76HTPHeTv+iisIrAN?= =?us-ascii?Q?uSPtmZhzDmBCW3qKxO+8tWOGAMPxhFJq7of5AY3P0MzFruKCfhAwbjgJP+cg?= =?us-ascii?Q?+9zQi78N676XArEesiFossKtBDgj/dGzXi2KXWETY9YfHJWA9tZBfMLGABtv?= =?us-ascii?Q?c2OfXC88aaq8YVJVLpo6qGnndQY8uYYXxY4SMzT057GcwfrTm5ACIYqTxn2C?= =?us-ascii?Q?snFRAh8oiNGO5615EWYyU61PhapiktDg63MQPmVGfKPJqdlVRJPHt4l0w0uj?= =?us-ascii?Q?4ApwHClHib/wMO5trQQ45fmu0XDjkkMmW7XFP45yAQpFoU14FO9VwI9Efww4?= =?us-ascii?Q?LUUDZQ4lQPzQgvY4G65NMZwu93d9GSlNggGvGy16XDwoolAKc4FZiNFgjnpy?= =?us-ascii?Q?bg/0D3I2evI4KskTHRWD5ZHNZe4MFulcoE1Z/r11kJ4F6C+xkgrnwxc/vf59?= =?us-ascii?Q?7cLnSwOTyw3T3GTAuKHVmPGstmxAQu7avYvDfMV1S5nEXO+obh1rIySIXy4r?= =?us-ascii?Q?y8fPNxZr20hF/P8O2s72JHf1vgKh1vY94A3vy5Q98yHywdni7JLSPnqcgVZR?= =?us-ascii?Q?R3B+y4jklUSyXW0bNjk23I4HtIuxXeuTZkXRNB3cUzhUUnn8PgiecW8pwUCj?= =?us-ascii?Q?zvsLko174vkfs2TV50jQo9eRx8T0JALKd/gCOIdlJ68/0aLVQIEUzI3T6z1A?= =?us-ascii?Q?uxmgHV9WiI8Cj66XLtErS2tNTam2kV1MHt7Oy8CsBrgufabScwHrSue9cGoI?= =?us-ascii?Q?kldeN7bH/2h0EGh2uvXimuUic8/J9L+NW9kxexDlPAM41sZuf2t3WdusqiUV?= =?us-ascii?Q?nWOOSn50C2DNTlGmYBDFnJWmJ8TWx+JIIwYlDBJpJEnqBYKs1JfiqOK+aj3p?= =?us-ascii?Q?kOSEayvV4NixFK1SfwRdRKKqxuhUz+Ni0K1DkAyCQ0zbOiALjp1qofhf0p6j?= =?us-ascii?Q?iyaZPjWxvnZ1S5thGDFZbNuhd5/Nl7NGIsLhC+J+6pgE25jGOr+16XP4W9UZ?= =?us-ascii?Q?woQKul9c2lxtblt5DdRABxg13y4fWicuNeZVttetvhSKOJ0TYw=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)(82310400026)(36860700013); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 32tJ9bmxqItGrc4u5cjgB6L2hPKJgXRvTNH3YBymF1cCD3sJ+nmouLkoJyVvFFjoRgnIpwErUwLhGolQNVVmJdDP0loUu3Yb7V+kFIQUiHT9Rudn1wcaYV6qhCux0FfOAFojGYimvUPEkYoKndJ6hxhYrNloQOx8a42Gea2lyj02YBsXmLkuLVAf9HmRiqKvqbC1qagEMXA7A75HzzRmmnh2TQ5JdEC4ERurHj3kxq5qpgoSQBWRCld9xYlXZa+pkgLgM3XOXXyo45d6G0j074HE7acU4/6T0+AxLhJwxDClDP0NiiWhAr7aMgUdnZ729la2fnTXOSx91jb50jamwI/Q/0hDMi87sXht2iMnlm+Lc8+LYwiz6OhJedLzIQIiyeRvAujtzB72bCqxcPA1VLoNBGkc0NWiX9SjdNVvbMV+T8USljmvEaqYclvc8M5ChdHjCXvLnB3APu2N4zYubONgh9rLi4/HYoGMyafiU35F9OuvkMo8eby4ffJjKYI23Hz+7PvhHh2s+lIEX3BBRDHNjKjxkdpXUEKsIlaiOd6In6eoEUFkdZ2nylx3j0PdJuA8sReHbAbGUviS5vigxx/uScyKG06rAxDxiqqKPYOlgeO65h5hvTAnqlPjq6IRsPn9x4ynHXombOLH6k14d1yZgIN02s0LiO5erLPKETQ= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Oct 2024 21:40:55.2709 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 54038642-aaa3-4275-72c6-08dcf92b88e9 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: DB9P190MB1843 X-OriginatorOrg: napatech.com X-BESS-ID: 1730329991-312176-12710-43834-1 X-BESS-VER: 2019.1_20241018.1852 X-BESS-Apparent-Source-IP: 104.47.51.235 X-BESS-Parts: H4sIAAAAAAACA4uuVkqtKFGyUioBkjpK+cVKVubmJqZAVgZQMNHAwCA11SLVzC wtNTHVwNzMyDLV3MLY0iTZ0NDSNM1cqTYWAEe/7gNBAAAA X-BESS-Outbound-Spam-Score: 0.50 X-BESS-Outbound-Spam-Report: Code version 3.2, rules version 3.2.2.260092 [from cloudscan16-249.eu-central-1b.ess.aws.cudaops.com] Rule breakdown below pts rule name description ---- ---------------------- -------------------------------- 0.50 BSF_RULE7568M META: Custom Rule 7568M 0.00 BSF_BESS_OUTBOUND META: BESS Outbound X-BESS-Outbound-Spam-Status: SCORE=0.50 using account:ESS113687 scores of KILL_LEVEL=7.0 tests=BSF_RULE7568M, 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 add flow aging functions to the ops structure Signed-off-by: Danylo Vodopianov --- drivers/net/ntnic/nthw/flow_api/flow_api.c | 71 +++++++++++++++ drivers/net/ntnic/ntnic_filter/ntnic_filter.c | 88 +++++++++++++++++++ drivers/net/ntnic/ntnic_mod_reg.h | 21 +++++ 3 files changed, 180 insertions(+) diff --git a/drivers/net/ntnic/nthw/flow_api/flow_api.c b/drivers/net/ntnic/nthw/flow_api/flow_api.c index 0e9fc33dec..3d65c0f3d0 100644 --- a/drivers/net/ntnic/nthw/flow_api/flow_api.c +++ b/drivers/net/ntnic/nthw/flow_api/flow_api.c @@ -1014,6 +1014,70 @@ int flow_nic_set_hasher_fields(struct flow_nic_dev *ndev, int hsh_idx, return profile_inline_ops->flow_nic_set_hasher_fields_inline(ndev, hsh_idx, rss_conf); } +static int flow_get_aged_flows(struct flow_eth_dev *dev, + uint16_t caller_id, + void **context, + uint32_t nb_contexts, + struct rte_flow_error *error) +{ + const struct profile_inline_ops *profile_inline_ops = get_profile_inline_ops(); + + if (profile_inline_ops == NULL) { + NT_LOG_DBGX(ERR, FILTER, "profile_inline_ops uninitialized"); + return -1; + } + + if (nb_contexts > 0 && !context) { + error->type = RTE_FLOW_ERROR_TYPE_UNSPECIFIED; + error->message = "rte_flow_get_aged_flows - empty context"; + return -1; + } + + return profile_inline_ops->flow_get_aged_flows_profile_inline(dev, caller_id, context, + nb_contexts, error); +} + +static 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) +{ + (void)dev; + (void)caller_id; + (void)port_info; + (void)queue_info; + (void)error; + + const struct profile_inline_ops *profile_inline_ops = get_profile_inline_ops(); + + if (profile_inline_ops == NULL) { + NT_LOG_DBGX(ERR, FILTER, "profile_inline module uninitialized"); + return -1; + } + + return 0; +} + +static int flow_configure(struct flow_eth_dev *dev, uint8_t caller_id, + const struct rte_flow_port_attr *port_attr, uint16_t nb_queue, + const struct rte_flow_queue_attr *queue_attr[], struct rte_flow_error *error) +{ + (void)dev; + (void)caller_id; + (void)port_attr; + (void)queue_attr; + (void)nb_queue; + (void)error; + + const struct profile_inline_ops *profile_inline_ops = get_profile_inline_ops(); + + if (profile_inline_ops == NULL) { + NT_LOG_DBGX(ERR, FILTER, "profile_inline module uninitialized"); + return -1; + } + + return 0; +} + int flow_get_flm_stats(struct flow_nic_dev *ndev, uint64_t *data, uint64_t size) { const struct profile_inline_ops *profile_inline_ops = get_profile_inline_ops(); @@ -1042,6 +1106,13 @@ static const struct flow_filter_ops ops = { .flow_flush = flow_flush, .flow_dev_dump = flow_dev_dump, .flow_get_flm_stats = flow_get_flm_stats, + .flow_get_aged_flows = flow_get_aged_flows, + + /* + * NT Flow asynchronous operations API + */ + .flow_info_get = flow_info_get, + .flow_configure = flow_configure, /* * Other diff --git a/drivers/net/ntnic/ntnic_filter/ntnic_filter.c b/drivers/net/ntnic/ntnic_filter/ntnic_filter.c index ef69064f98..6d65ffd38f 100644 --- a/drivers/net/ntnic/ntnic_filter/ntnic_filter.c +++ b/drivers/net/ntnic/ntnic_filter/ntnic_filter.c @@ -731,6 +731,91 @@ static int eth_flow_dev_dump(struct rte_eth_dev *eth_dev, return res; } +static int eth_flow_get_aged_flows(struct rte_eth_dev *eth_dev, + void **context, + uint32_t nb_contexts, + 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, NTNIC, "flow_filter module uninitialized"); + return -1; + } + + struct pmd_internals *internals = (struct pmd_internals *)eth_dev->data->dev_private; + + static struct rte_flow_error flow_error = { + .type = RTE_FLOW_ERROR_TYPE_NONE, + .message = "none" }; + + uint16_t caller_id = get_caller_id(eth_dev->data->port_id); + + int res = flow_filter_ops->flow_get_aged_flows(internals->flw_dev, caller_id, context, + nb_contexts, &flow_error); + + convert_error(error, &flow_error); + return res; +} + +/* + * NT Flow asynchronous operations API + */ + +static int eth_flow_info_get(struct rte_eth_dev *dev, struct rte_flow_port_info *port_info, + struct rte_flow_queue_info *queue_info, 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 flow_error = { + .type = RTE_FLOW_ERROR_TYPE_NONE, + .message = "none" }; + + int res = flow_filter_ops->flow_info_get(internals->flw_dev, + get_caller_id(dev->data->port_id), + (struct rte_flow_port_info *)port_info, + (struct rte_flow_queue_info *)queue_info, + &flow_error); + + convert_error(error, &flow_error); + return res; +} + +static int eth_flow_configure(struct rte_eth_dev *dev, const struct rte_flow_port_attr *port_attr, + uint16_t nb_queue, const struct rte_flow_queue_attr *queue_attr[], + 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 flow_error = { + .type = RTE_FLOW_ERROR_TYPE_NONE, + .message = "none" }; + + int res = flow_filter_ops->flow_configure(internals->flw_dev, + get_caller_id(dev->data->port_id), + (const struct rte_flow_port_attr *)port_attr, + nb_queue, + (const struct rte_flow_queue_attr **)queue_attr, + &flow_error); + + convert_error(error, &flow_error); + return res; +} + static int poll_statistics(struct pmd_internals *internals) { int flow; @@ -857,6 +942,9 @@ static const struct rte_flow_ops dev_flow_ops = { .destroy = eth_flow_destroy, .flush = eth_flow_flush, .dev_dump = eth_flow_dev_dump, + .get_aged_flows = eth_flow_get_aged_flows, + .info_get = eth_flow_info_get, + .configure = eth_flow_configure, }; void dev_flow_init(void) diff --git a/drivers/net/ntnic/ntnic_mod_reg.h b/drivers/net/ntnic/ntnic_mod_reg.h index 7325bd1ea8..52f197e873 100644 --- a/drivers/net/ntnic/ntnic_mod_reg.h +++ b/drivers/net/ntnic/ntnic_mod_reg.h @@ -286,6 +286,12 @@ struct profile_inline_ops { FILE *file, struct rte_flow_error *error); + int (*flow_get_aged_flows_profile_inline)(struct flow_eth_dev *dev, + uint16_t caller_id, + void **context, + uint32_t nb_contexts, + struct rte_flow_error *error); + int (*flow_nic_set_hasher_fields_inline)(struct flow_nic_dev *ndev, int hsh_idx, struct nt_eth_rss_conf rss_conf); @@ -355,6 +361,21 @@ struct flow_filter_ops { int (*flow_nic_set_hasher_fields)(struct flow_nic_dev *ndev, int hsh_idx, struct nt_eth_rss_conf rss_conf); int (*hw_mod_hsh_rcp_flush)(struct flow_api_backend_s *be, int start_idx, int count); + + int (*flow_get_aged_flows)(struct flow_eth_dev *dev, + uint16_t caller_id, + void **context, + uint32_t nb_contexts, + 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); + + int (*flow_configure)(struct flow_eth_dev *dev, uint8_t caller_id, + const struct rte_flow_port_attr *port_attr, uint16_t nb_queue, + const struct rte_flow_queue_attr *queue_attr[], + struct rte_flow_error *error); }; void register_dev_flow_ops(const struct rte_flow_ops *ops); -- 2.45.0