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 CD4BB45BCC; Wed, 30 Oct 2024 22:43:47 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A6A05434DC; Wed, 30 Oct 2024 22:41:32 +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 3D2D04347F for ; Wed, 30 Oct 2024 22:40:23 +0100 (CET) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05lp2175.outbound.protection.outlook.com [104.47.17.175]) by mx-outbound11-85.eu-central-1a.ess.aws.cudaops.com (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Wed, 30 Oct 2024 21:40:20 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SRYEFxT6zjD99zMETaRhB9ytj4fUEAijaq1VZekvrtGmamdD0wwTSOqo+gosYN3VEd7L5UrBQ+xZ4ZkKPzZUzU8RNebTkfBUgWuY1dVYLUyEUat6zyxTLJo5VSAE38tcsHBo8RkE34bJL58uRRtylB6131+/38/Uy4yXkmYrx/wnr4MMVfScV9YLcLJHGN+OQZOtNDYmJnDPg0WPnPtEEM0bgWkXjlpPWBYubXYgMdp2yxGnxunf/bv6eUioCllCywyJy96eInu5J7mEXWjNhUmO1DPzNsQgQILFs3Lt7a3fxAZCCkJaWivDWoxvGv5ZkRZtY3t4ubl5Z1yL9eN6oA== 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=mgbMScIysJ1Z/fOe03JBtsFyfCKo9pkc1NEv5skx+JI=; b=D1MXwtm9EyClRFbEOnsfNqyA+xlWuvKX72ZYvLEppLJ5v03qJCuDKitJRFDOr/6DO3THW8+3eSMV5RusqC8zHqg4VcBgleZ6WBvfsaFtLvwtIz2wbMHoQwYSGbZNR2gP+G6ulE1NuxwU0nFUCU55UP1xZjVm0RqPjIc3uNcvvIM63DP/Xbrz9/UnPuYQ1t0hbxEHofYqacTBghmRcydD1pAjBA8Xmi+SpwHrLudgPHZlIr/sCSs8TBofEFYZ0JV1heDx0Hx3Fg43zMsW1ub8uCebR7gLAE/8eZQBXwB26NW+SvljXvUjvOT7LKGC2Pbb30Gz2cwzcmB6zKv04XwPJA== 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=mgbMScIysJ1Z/fOe03JBtsFyfCKo9pkc1NEv5skx+JI=; b=MIaRs1Nj5SJQogINkucwc3ndm7pxH3pPOQQFZmZBiZmqBDd/6srAceQuzfDDxwkfoYz9csnnjNSMPq2XStOz3WF+6yXP7M4p7VL8ythnTfXlX/QMdef1dx0OMYVLyFGjJB/EtIwzTnf47ypZz1tGIa5MgWLNNHANfmadqiVc94E= Received: from DUZPR01CA0003.eurprd01.prod.exchangelabs.com (2603:10a6:10:3c3::15) by PA4P190MB1087.EURP190.PROD.OUTLOOK.COM (2603:10a6:102:102::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.32; Wed, 30 Oct 2024 21:40:18 +0000 Received: from DU2PEPF00028D13.eurprd03.prod.outlook.com (2603:10a6:10:3c3:cafe::e0) by DUZPR01CA0003.outlook.office365.com (2603:10a6:10:3c3::15) 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:18 +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:17 +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 28/80] net/ntnic: add PDB module Date: Wed, 30 Oct 2024 22:38:35 +0100 Message-ID: <20241030213940.3470062-29-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_|PA4P190MB1087:EE_ Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: ec8dec68-f9ba-43ae-d1b1-08dcf92b72a4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|36860700013|82310400026|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?wmzC59/KwKJBKq7YeR46QaNJaxzWuLcssKqNbin3NJCwxgUmiZiz14VRVDhi?= =?us-ascii?Q?kYDuaXr3CnmSWKg6ApNHSQLsFYldP9J31AY8U2/sb+OAIWInE4kBagY9nySN?= =?us-ascii?Q?KSsQXKz+Xs96cc33+wgv0pozyJiOWTw5KcdYb0FTrATq7ZFp2of5U8VI8ijb?= =?us-ascii?Q?KyiVeWaguFVArO6Ar3EPoFEMWyjjGgIsN8mIe27qyivTcGgZhRtwTX5N2myd?= =?us-ascii?Q?4h/D5b+tb6zy84XARbT2cW5h1kTW2VVIL+IydJn8bMUSTtx4M474m29BRKr0?= =?us-ascii?Q?yVt0lqU5wZJF39G1N4N0qrFOBHdA9HSKK1Pg+L5xyl+LmOPGqwFaxIiK+q3u?= =?us-ascii?Q?kk0DGDeFuy6TU/9OkjhzgLBwjPMG2+c7L3eoRrE8uPI9gAtjjsa/QHqaB/vN?= =?us-ascii?Q?cdV9/awXBEzS8A/7AZysvyx/OhMgL7385aQ4Qv/iuDfSOlzd7k3IameOOkp/?= =?us-ascii?Q?0sGq3Q3vkrPyM88MFr6xFLmQhCS1lrWU82QGVVMHoLCYluWCRmnkp+CJIz2M?= =?us-ascii?Q?5kHVFPL3W/8ZRt+fRUHjQVDff1RlD0l8kS747/+JgtqSfsSJHLtNZLKuGGWj?= =?us-ascii?Q?1yvZyufZ5rPBusiBubG8HVHYp3ee6G/d8ed9LOO/wTyMsl0P47tvhFicaOpu?= =?us-ascii?Q?sjyJ4eGeg3vA9vUcJZRk/cjCtpQJeFbPDUBbsMDNy9TC+61na3Dq9OwoPIzy?= =?us-ascii?Q?+Tf7Ov4fcvUsd8dQe23mmlgbrBaxImkrjvaz40+COMLH91BsBKDDVCDWwHhC?= =?us-ascii?Q?sxymrA+Ux+x/0btjpXFtsCTpWX0z6VA5pceyzov/0md03GlmNqwlgfmgJutr?= =?us-ascii?Q?M8zA2VWuHM+2VWfgVNa0yUnAkVMqE0ji0lmCWOatGGlMksOh46ScSHvW9+Ii?= =?us-ascii?Q?e4VS6lgdIr9ai9gzWyDj3Zp7mlqPubB2EMB1N05cIyJljMLtyfrq3TdxtT2R?= =?us-ascii?Q?PaiEQzJ1B0Aec0v5rG1qbakyKFEuki7yJt0Zam7hIoLlE0RqH5HKlyZfs7P0?= =?us-ascii?Q?jrGaNQ7CYUF4Yw9B3VlcthrDHFT7gPIH5gMyLot8dUkh7a7pdz4JQK/qKQiM?= =?us-ascii?Q?OuMctcIO0pMHLurP/Ls0Bfgj7+yyN7z4JO8suGIzzTDSmkBUwSa3scnyXTJj?= =?us-ascii?Q?Kj26h3ImlhEmQsXyF1I1rZj4IhTHeuB4cwArZeuYxJ/QmkoMh7wW8UclZQHk?= =?us-ascii?Q?Vjj66nIJ3WA1espog0r6lrjq6BQlobHB+5fFWEfc8DkE0V4U0fJ4ZKWqf1cR?= =?us-ascii?Q?y6w+waM7zOqcNLmLFcT5bmkWCcvEMXs/TkFxFUEZ6B3JxCZLoc76NTKYFebx?= =?us-ascii?Q?hdNdtYIE704Wz/FLFCMgSQinJdpWPq/BDJy7adfhmE4Hv6s0MKENnKntlBS8?= =?us-ascii?Q?5Zt4KlOIR9fMyr8iTUPISV67V3yCB9/Mj1bohzXcAgW/D4X70w=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)(376014)(36860700013)(82310400026)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: mQAQ2KeLrBX915agXxbeiINcpv+HXE9pID5k6g53UH0FgINpyOBoD9dr6MJHmPRc9vyh2XOAZFIEKunq/IHh7R8tpfGnswR/94nXJ2PaeLCm1L2YIx+B5lL3DN03dkxuZCFGxmzhJaNs6batQg7uuB0PMtHvXH8erxDWiJfRIJAL5SMiW1zsjAvWaBLHT/rrZmwMYrNhMl28lRfxG1qAizu/wsxF81YbucixvdlfdIm+b45ZWcv8xPfMlXjzw7Vhv5ypKMy+4H4d7zNsUyQyIH0Q6OvKjXTahBBD6FHgR3Vcd3TbGQWrpiXvv3cLkFcbfUlKihYNMUDuVrb1bFc3y14dVwAUk4pKz1JnB7ALebenMXgxD1IFJhy1tjD6buyobAu+lV/vSISxDccmP6z4FxOhQtNBrRTY2sHHV4Im69L4/sYzOph9CJRZRHo2KtfV90uFhUfsdPQbQR9EOIHV7icLXakvDYDCMZnFds2bKDpKYCc9ldhDpvAD9aV7br6KlxsvH1rJxNpoaeAp+D/onozTpJGgWq/rr6HptD/0ivD50rzmXZjbagJEUrFO0h5mFAm3JPwyKWVHVnwXKj/hDZcyQhL1hmjkWXo28t5Y9mECcrbTIbtw7CDk0JnpgHRIdnYFsTWnvCDTNU03eo36JH2QMVFTzG1o4705pQmlRXg= X-OriginatorOrg: napatech.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Oct 2024 21:40:17.9113 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ec8dec68-f9ba-43ae-d1b1-08dcf92b72a4 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: PA4P190MB1087 X-BESS-ID: 1730324419-302901-12799-43464-1 X-BESS-VER: 2019.1_20241018.1852 X-BESS-Apparent-Source-IP: 104.47.17.175 X-BESS-Parts: H4sIAAAAAAACA4uuVkqtKFGyUioBkjpK+cVKVmYmZoZAVgZQMNnC1MTAzMw82T jZzMTIzMg0MTUxLcUsLdHEzCTJwNJYqTYWAEXANOVBAAAA X-BESS-Outbound-Spam-Score: 0.00 X-BESS-Outbound-Spam-Report: Code version 3.2, rules version 3.2.2.260091 [from cloudscan16-249.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 The Packet Description Builder module creates packet meta-data for example virtio-net headers. Signed-off-by: Danylo Vodopianov --- drivers/net/ntnic/include/hw_mod_backend.h | 3 + .../ntnic/nthw/flow_api/hw_mod/hw_mod_pdb.c | 144 ++++++++++++++++++ .../profile_inline/flow_api_profile_inline.c | 17 +++ 3 files changed, 164 insertions(+) diff --git a/drivers/net/ntnic/include/hw_mod_backend.h b/drivers/net/ntnic/include/hw_mod_backend.h index 2711f44083..7f1449d8ee 100644 --- a/drivers/net/ntnic/include/hw_mod_backend.h +++ b/drivers/net/ntnic/include/hw_mod_backend.h @@ -740,6 +740,9 @@ int hw_mod_pdb_alloc(struct flow_api_backend_s *be); void hw_mod_pdb_free(struct flow_api_backend_s *be); int hw_mod_pdb_reset(struct flow_api_backend_s *be); int hw_mod_pdb_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); +int hw_mod_pdb_rcp_set(struct flow_api_backend_s *be, enum hw_pdb_e field, uint32_t index, + uint32_t value); + int hw_mod_pdb_config_flush(struct flow_api_backend_s *be); struct tpe_func_s { diff --git a/drivers/net/ntnic/nthw/flow_api/hw_mod/hw_mod_pdb.c b/drivers/net/ntnic/nthw/flow_api/hw_mod/hw_mod_pdb.c index c3facacb08..59285405ba 100644 --- a/drivers/net/ntnic/nthw/flow_api/hw_mod/hw_mod_pdb.c +++ b/drivers/net/ntnic/nthw/flow_api/hw_mod/hw_mod_pdb.c @@ -85,6 +85,150 @@ int hw_mod_pdb_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count return be->iface->pdb_rcp_flush(be->be_dev, &be->pdb, start_idx, count); } +static int hw_mod_pdb_rcp_mod(struct flow_api_backend_s *be, enum hw_pdb_e field, uint32_t index, + uint32_t *value, int get) +{ + if (index >= be->pdb.nb_pdb_rcp_categories) { + INDEX_TOO_LARGE_LOG; + return INDEX_TOO_LARGE; + } + + switch (_VER_) { + case 9: + switch (field) { + case HW_PDB_RCP_PRESET_ALL: + if (get) { + UNSUP_FIELD_LOG; + return UNSUP_FIELD; + } + + memset(&be->pdb.v9.rcp[index], (uint8_t)*value, + sizeof(struct pdb_v9_rcp_s)); + break; + + case HW_PDB_RCP_FIND: + if (!get) { + UNSUP_FIELD_LOG; + return UNSUP_FIELD; + } + + if (*value >= be->pdb.nb_pdb_rcp_categories) { + INDEX_TOO_LARGE_LOG; + return INDEX_TOO_LARGE; + } + + FIND_EQUAL_INDEX(be->pdb.v9.rcp, struct pdb_v9_rcp_s, index, *value, + be->pdb.nb_pdb_rcp_categories); + break; + + case HW_PDB_RCP_COMPARE: + if (!get) { + UNSUP_FIELD_LOG; + return UNSUP_FIELD; + } + + if (*value >= be->pdb.nb_pdb_rcp_categories) { + INDEX_TOO_LARGE_LOG; + return INDEX_TOO_LARGE; + } + + DO_COMPARE_INDEXS(be->pdb.v9.rcp, struct pdb_v9_rcp_s, index, *value); + break; + + case HW_PDB_RCP_DESCRIPTOR: + GET_SET(be->pdb.v9.rcp[index].descriptor, value); + break; + + case HW_PDB_RCP_DESC_LEN: + GET_SET(be->pdb.v9.rcp[index].desc_len, value); + break; + + case HW_PDB_RCP_TX_PORT: + GET_SET(be->pdb.v9.rcp[index].tx_port, value); + break; + + case HW_PDB_RCP_TX_IGNORE: + GET_SET(be->pdb.v9.rcp[index].tx_ignore, value); + break; + + case HW_PDB_RCP_TX_NOW: + GET_SET(be->pdb.v9.rcp[index].tx_now, value); + break; + + case HW_PDB_RCP_CRC_OVERWRITE: + GET_SET(be->pdb.v9.rcp[index].crc_overwrite, value); + break; + + case HW_PDB_RCP_ALIGN: + GET_SET(be->pdb.v9.rcp[index].align, value); + break; + + case HW_PDB_RCP_OFS0_DYN: + GET_SET(be->pdb.v9.rcp[index].ofs0_dyn, value); + break; + + case HW_PDB_RCP_OFS0_REL: + GET_SET_SIGNED(be->pdb.v9.rcp[index].ofs0_rel, value); + break; + + case HW_PDB_RCP_OFS1_DYN: + GET_SET(be->pdb.v9.rcp[index].ofs1_dyn, value); + break; + + case HW_PDB_RCP_OFS1_REL: + GET_SET_SIGNED(be->pdb.v9.rcp[index].ofs1_rel, value); + break; + + case HW_PDB_RCP_OFS2_DYN: + GET_SET(be->pdb.v9.rcp[index].ofs2_dyn, value); + break; + + case HW_PDB_RCP_OFS2_REL: + GET_SET_SIGNED(be->pdb.v9.rcp[index].ofs2_rel, value); + break; + + case HW_PDB_RCP_IP_PROT_TNL: + GET_SET(be->pdb.v9.rcp[index].ip_prot_tnl, value); + break; + + case HW_PDB_RCP_PPC_HSH: + GET_SET(be->pdb.v9.rcp[index].ppc_hsh, value); + break; + + case HW_PDB_RCP_DUPLICATE_EN: + GET_SET(be->pdb.v9.rcp[index].duplicate_en, value); + break; + + case HW_PDB_RCP_DUPLICATE_BIT: + GET_SET(be->pdb.v9.rcp[index].duplicate_bit, value); + break; + + case HW_PDB_RCP_PCAP_KEEP_FCS: + GET_SET(be->pdb.v9.rcp[index].pcap_keep_fcs, value); + break; + + default: + UNSUP_FIELD_LOG; + return UNSUP_FIELD; + } + + break; + + /* end case 9 */ + default: + UNSUP_VER_LOG; + return UNSUP_VER; + } + + return 0; +} + +int hw_mod_pdb_rcp_set(struct flow_api_backend_s *be, enum hw_pdb_e field, uint32_t index, + uint32_t value) +{ + return hw_mod_pdb_rcp_mod(be, field, index, &value, 0); +} + int hw_mod_pdb_config_flush(struct flow_api_backend_s *be) { return be->iface->pdb_config_flush(be->be_dev, &be->pdb); diff --git a/drivers/net/ntnic/nthw/flow_api/profile_inline/flow_api_profile_inline.c b/drivers/net/ntnic/nthw/flow_api/profile_inline/flow_api_profile_inline.c index 4a5bcc04cf..7033674270 100644 --- a/drivers/net/ntnic/nthw/flow_api/profile_inline/flow_api_profile_inline.c +++ b/drivers/net/ntnic/nthw/flow_api/profile_inline/flow_api_profile_inline.c @@ -2472,6 +2472,19 @@ int initialize_flow_management_of_ndev_profile_inline(struct flow_nic_dev *ndev) /* SLC LR index 0 is reserved */ flow_nic_mark_resource_used(ndev, RES_SLC_LR_RCP, 0); + /* PDB setup Direct Virtio Scatter-Gather descriptor of 12 bytes for its recipe 0 + */ + if (hw_mod_pdb_rcp_set(&ndev->be, HW_PDB_RCP_DESCRIPTOR, 0, 7) < 0) + goto err_exit0; + + if (hw_mod_pdb_rcp_set(&ndev->be, HW_PDB_RCP_DESC_LEN, 0, 6) < 0) + goto err_exit0; + + if (hw_mod_pdb_rcp_flush(&ndev->be, 0, 1) < 0) + goto err_exit0; + + flow_nic_mark_resource_used(ndev, RES_PDB_RCP, 0); + /* Setup filter using matching all packets violating traffic policing parameters */ flow_nic_mark_resource_used(ndev, RES_CAT_CFN, NT_VIOLATING_MBR_CFN); @@ -2529,6 +2542,10 @@ int done_flow_management_of_ndev_profile_inline(struct flow_nic_dev *ndev) flow_nic_free_resource(ndev, RES_TPE_EXT, 0); flow_nic_free_resource(ndev, RES_TPE_RPL, 0); + hw_mod_pdb_rcp_set(&ndev->be, HW_PDB_RCP_PRESET_ALL, 0, 0); + hw_mod_pdb_rcp_flush(&ndev->be, 0, 1); + flow_nic_free_resource(ndev, RES_PDB_RCP, 0); + hw_db_inline_destroy(ndev->hw_db_handle); #ifdef FLOW_DEBUG -- 2.45.0