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 4FFDA45BA3; Tue, 22 Oct 2024 19:31:33 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7C97340684; Tue, 22 Oct 2024 19:30:48 +0200 (CEST) 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 6FBFA40E28 for ; Tue, 22 Oct 2024 19:30:46 +0200 (CEST) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05lp2173.outbound.protection.outlook.com [104.47.17.173]) by mx-outbound15-54.eu-central-1a.ess.aws.cudaops.com (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 22 Oct 2024 17:30:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UKSfWj/moi5oAen6boRpoB4sgFYly/xJz8enCD+M44Ein9gmSEMBXAw3gqBeTOIXxVJZD0toQ/g+g9d5njaWSFbMJb6MuUUpEVBdNE+09GLLXnpzmAbqLFFkrCpJk76+vG7gVE0zRi7j02GfnLeVDen4oVnncfyA+28B6+4wZmEUKDKZDOT6B0RIOAv3xUyQ6SGGS0v5ff7DaWDrhlgAKSTlOovFEpvSN8FwPQKXc88FUzjRnnqkIiHajsAn5cdXk51r+XO/gtFlsc/hFMJH4rBPdYVsyVOAxDk1tfSVlQavOxdnnLbsOukkviikiQ91/90TnfCsou/zS0vu+mlT8Q== 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=bYMpsv0SiwrGP2axUQ/liX+DSFF7eLiTgskMkPepHfo=; b=cKtsKxknHJ4YPdd7p2cr51oKZ1lsP2HdSmzjekY2f6y2dzsp8/vQksRA2UH2TH96qzTuNdeNYILoXLGgR77aC9Z+CgCORRyLfwqck3b+ifuTfSioDiFcL62NbMi/+6OXD6JpVFxfzCv1/vyV6HXBErYY8DsqvuUMWgDBu50Gr8v60Rg0ApsL6jS9nYXQQRjBwzBebOMQ8Nys/aWYKpLSAr/vd2HjoynOd3cyyJVsu22dGZNOQHs3EbKB04eDjq/whcIhKzV/hc4L42/33XX3z2P2miKf5E6DsNSUZ1eqVEQo9rWG0A8jNozCg4l+q3qouRHLvSLnp5YnRpEo/lDrzw== 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=bYMpsv0SiwrGP2axUQ/liX+DSFF7eLiTgskMkPepHfo=; b=hNQAt/20QNUv9ZBbd0xC+7VMFNXqr1szn1RptIIf7ymfUcvAL2KWhl9scv9PKn0lqv442aSci4YErt5hB5wGygrVHz0yY2uMhcTMd8iuZTK0vPQygbqHNaJ8QNyECJjLAIL3EPa2k5M9l9Obn7AzEPWe38c+GKfBbcjqTrWMRD4= Received: from DB9PR06CA0011.eurprd06.prod.outlook.com (2603:10a6:10:1db::16) by DU0P190MB1801.EURP190.PROD.OUTLOOK.COM (2603:10a6:10:349::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8069.28; Tue, 22 Oct 2024 16:57:14 +0000 Received: from DU2PEPF0001E9C2.eurprd03.prod.outlook.com (2603:10a6:10:1db:cafe::d6) by DB9PR06CA0011.outlook.office365.com (2603:10a6:10:1db::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.16 via Frontend Transport; Tue, 22 Oct 2024 16:57:14 +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 DU2PEPF0001E9C2.mail.protection.outlook.com (10.167.8.71) with Microsoft SMTP Server id 15.20.8093.14 via Frontend Transport; Tue, 22 Oct 2024 16:57:14 +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 v2 65/73] net/ntnic: added flow aged APIs Date: Tue, 22 Oct 2024 18:55:22 +0200 Message-ID: <20241022165541.3186140-66-sil-plv@napatech.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20241022165541.3186140-1-sil-plv@napatech.com> References: <20241021210527.2075431-1-sil-plv@napatech.com> <20241022165541.3186140-1-sil-plv@napatech.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PEPF0001E9C2:EE_|DU0P190MB1801:EE_ Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: 2cdec6f5-1d54-4494-2922-08dcf2ba942f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|1800799024|36860700013|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?0z+o1pXFXuKh1ZCTfMT2T8PkNCTOxKf8eVAej3b8qqCINWd5AMpkp3Fe1ZFX?= =?us-ascii?Q?QtvtPOQhQiQewj/LtiWXuC9zlQScm+DJkwEPNYFnswb7TGQjtnFwtFs7fCW9?= =?us-ascii?Q?IiIM+X8MFjeFBNDzEJVjiPexHBThlFc387m7/TauJ3LoPRqIVo0YTTvi990R?= =?us-ascii?Q?qC28pnGPdOqLBsvQyWVxE88FteK6caITn4g6WHP+i8uqqVNdm2ENaVahOx/W?= =?us-ascii?Q?c9lv4IN3xhLU5LWuISh0Qsr6Qfam2TOmSXRY3aL2pwHW+YGUI1SQKGHJP9te?= =?us-ascii?Q?citNQdvemrQ/hTXH/S6I8hQv7hPpah/dNv7wJN9Zbpfss5MMXJYaxY+QR0xm?= =?us-ascii?Q?B/Ld3xlt56FoqrMS8KtOzJhrPDdj9WJvYam9Ik2yHY9Ksjk0EN19i8a157/3?= =?us-ascii?Q?YsAsMjHeyUUZJL/npDHB8K681rID8IgursIrxlOM8I2Ngh0m3rzMOv2RiCHS?= =?us-ascii?Q?7XwIQL6JTE3rQd6xpCnejwuNMwVe6hQixyLMLHNGXivzTR/xc10TgJcJjKmt?= =?us-ascii?Q?CasZVURUzEfI5eg84MEJXnXCUrvpJQSp0FH5szPbquf8wYwWMDh18knNCN0H?= =?us-ascii?Q?sYimlggjxdyr7vK9RhIgrMlbmIAiqczC3mFNHXWSV3h693aLwX4FLe2BG4Rb?= =?us-ascii?Q?4Vk8Er3Lr4gA44VCAqixw13fI7pP0NfmWKwLyJL0Uq47mV9P1VYLfYCbR46G?= =?us-ascii?Q?fy+C+qvqrsPkphlVmLYBSjSHwh8jYMFI79FYZhpsT/h3GoZlcBGPQGA2TDWr?= =?us-ascii?Q?SO1tZalPKVVydYzLIORB80BPqJKHRPBOOt7f8RPnibZTcOOUe9v8LaUY3KAd?= =?us-ascii?Q?ByGydpRt2C+d3u3mHgIPoezK27TNAv0WV+bGzqADkG3+6oLkho7FL8fyBP4b?= =?us-ascii?Q?hzXrXx5zXeqOYo/VQdhXh5/iulJSedl/rZgJpsR1aRYgaYNy3kBtJNtIy0+3?= =?us-ascii?Q?ZyMu1Kao0+pInyvxT3fB7FpMbSAz/EhY2LP2XHq1KzmbkUK8lmNTSfB0S+kK?= =?us-ascii?Q?mClqcbvkPyHB6u6FWt1cJ8qk16AIekQ/V8fGnnRRb0zpmXEPHz0iX8s8NG60?= =?us-ascii?Q?rUEJ0bBlItpikmRgcAUXOzM7UFuz84PZCbZ2sZXhxhwr5XqhH7eSL7IRj9gT?= =?us-ascii?Q?4TKOhZfCVUjNnVBF7Eeg03rAZj3d7xsKMb/KIJkNbJZXdZhO/InHnUQZdw24?= =?us-ascii?Q?XsPHQ9xI6QXqfHGG/cmlD6FHYyj/2M/0qzqfIkXUFHQdQ3/RNXKnFE2gJiZy?= =?us-ascii?Q?Ixzpi0DMTBe98oNVIYyYyMVnnB5SiUWEgordE7XzQI5TrxbRTil6y+beS37m?= =?us-ascii?Q?YdeJZHBKVL01A5UwsanBtKv+Nplhr0zDF/rpDUwHXdAlrC6oPbOLCWtFFRCQ?= =?us-ascii?Q?3AYU9myJqBSgk1Gh6xcr5JfG5hcZ+sFTrYKiajg7RfRDz0hcVA=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)(1800799024)(36860700013)(376014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: yLgdz8gst29CJmqpgFaTiph5h735X/4dJEii4iXDp+GoLmLDHLM0cKe0cHIpdztpyii2JoVErsminHR6KskWe04tevrpt/eGiKad1vaCWlmTOL0lTSVzZ9+TNOR0ipP1atgFu4R0TIqO5E/owr004CRR3+jeChPKQS6YTFTbeGaU7pwgDIWgH4iYJ5JM0W9Y7rQSkVZ3gwcswnKzan6tUCkIDxoixUzZjD6L90b7d3Ts7R4ZB8gQSJJWpj2TTbMzK6BMw1CxWko5e2HJC9+26ZUu7jqZPkcp5Pbs9YyCtjIJZ/kFZn0pwieJ/MYpoGW8ZTPTmUgjd2yodfZPKiOJFF2IJZ313ewMAY6ZUTuX//hOfoRr9axcJ2kCtJCtVtEf9gVRon1fJk6luqRRwaxR7ZBxXuP1TfX66zTD67U5y2nSlimRlBtE/08F0pl6t8BFb2yISIc7HssBKbG9YBh3JYaDjC2nQNHYjypWJQFYyIGNwWVwA5lZH/lQDal/w+UBh4gOPjMvWvOZWZ5tINcPuT8aY2S/qo9jm//zTM4oucaJjtIgN1gV3hOD/bkI/8LNdWDz3soSGdD0hrb1PzHPsAZxND9YNe91DKifdy1iKXQI0w/pyom1/POlwDzNSfLAtbFixIUjB4g2ocjiO7ZAT9taXdgCJxxwy6SHiAmL9iA= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2024 16:57:14.0444 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2cdec6f5-1d54-4494-2922-08dcf2ba942f 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: DU2PEPF0001E9C2.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0P190MB1801 X-OriginatorOrg: napatech.com X-BESS-ID: 1729618245-303894-12659-15001-1 X-BESS-VER: 2019.1_20241018.1852 X-BESS-Apparent-Source-IP: 104.47.17.173 X-BESS-Parts: H4sIAAAAAAACA4uuVkqtKFGyUioBkjpK+cVKVuZm5oZAVgZQMNnEIMXI1DTFwN jQIC0tzTjVINXA0MIy0djE2CI10cRCqTYWAOPKj9RBAAAA X-BESS-Outbound-Spam-Score: 0.00 X-BESS-Outbound-Spam-Report: Code version 3.2, rules version 3.2.2.259902 [from cloudscan12-68.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 FLow aged API was added to the flow_filter_ops. 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 | 23 +++++ 3 files changed, 182 insertions(+) diff --git a/drivers/net/ntnic/nthw/flow_api/flow_api.c b/drivers/net/ntnic/nthw/flow_api/flow_api.c index efe9a1a3b9..b101a9462e 100644 --- a/drivers/net/ntnic/nthw/flow_api/flow_api.c +++ b/drivers/net/ntnic/nthw/flow_api/flow_api.c @@ -1048,6 +1048,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(); @@ -1076,6 +1140,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 e2fce02afa..9f8670b32d 100644 --- a/drivers/net/ntnic/ntnic_filter/ntnic_filter.c +++ b/drivers/net/ntnic/ntnic_filter/ntnic_filter.c @@ -718,6 +718,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; @@ -844,6 +929,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..a199aff61f 100644 --- a/drivers/net/ntnic/ntnic_mod_reg.h +++ b/drivers/net/ntnic/ntnic_mod_reg.h @@ -280,6 +280,12 @@ struct profile_inline_ops { uint16_t caller_id, 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_dev_dump_profile_inline)(struct flow_eth_dev *dev, struct flow_handle *flow, uint16_t caller_id, @@ -348,6 +354,23 @@ struct flow_filter_ops { struct rte_flow_error *error); int (*flow_get_flm_stats)(struct flow_nic_dev *ndev, uint64_t *data, uint64_t size); + 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); + + /* + * NT Flow asynchronous operations API + */ + 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); /* * Other -- 2.45.0