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 659C743C0C; Fri, 1 Mar 2024 16:43:52 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8DDFB43533; Fri, 1 Mar 2024 16:43:51 +0100 (CET) Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) by mails.dpdk.org (Postfix) with ESMTP id CF0F3427D8 for ; Fri, 1 Mar 2024 16:43:49 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1709307831; x=1740843831; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=w4XyC2OfhbIQOtutMPksaZDBT6Fqd4judwjXOTnG5AQ=; b=MDgZcLbHfxIABhaQcbJMRpXtSn34hgyhNqoGXKfnyMrh+63CtFY+/FlN K48Gxj92AvG3SpPAYjOeivlsYDQfQQ1iFC8+Xta1Ar179/QLvkbADdOZI QacYjwS53jy+fbBSVWfm4DqTJAxd3d9IjfAWFgqzvr8+CjgQu1v9BJWlj 3uIsMi32/wvqyJBH/RApn6nMJMq/qUGfVQi391xzveHUhQ5HN1ceNgbug MwXuiQJRNpW0CFQ8avArDB7I4qD4dOoufxFKteatVfXljtLNMN0dvKAsZ mOrAuqH6csQSlfuHC+2d8XLrMI+kiMkdY7vDxiK7dcPoHwIuDYxjyNVVX Q==; X-IronPort-AV: E=McAfee;i="6600,9927,11000"; a="3775096" X-IronPort-AV: E=Sophos;i="6.06,196,1705392000"; d="scan'208";a="3775096" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Mar 2024 07:43:49 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.06,196,1705392000"; d="scan'208";a="8628017" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by orviesa007.jf.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 01 Mar 2024 07:43:49 -0800 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Fri, 1 Mar 2024 07:43:47 -0800 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35 via Frontend Transport; Fri, 1 Mar 2024 07:43:47 -0800 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (104.47.73.168) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Fri, 1 Mar 2024 07:43:47 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mndTk7PQ6tEo0xQ/nrF76r5hm/jKdD6BdApjgsWnJ/++DyJaXg+qUi2HVwxV2VMUeMHg2IziUJYQ4D/mBbjUvm26wIREOSZg4tIiu1NFA0pSG41knVDcscjqEBecHha87OU8ClWiGqeoZp8OCur3HUPJ5hc6iHv+xGpRFcS/i5FWa97teFe9r+kLN9B71EqSjgPHjLTNevhweWOi6nkpfVh5uSTYASgBlgKkPutmaIXfutZqzy8De9nzLxA3561h0zySkkjsDA1KTLZc7b0alAi66USwj0/ey9YTzZ0fF0IoTqyHPI3ayjb/AsgEgz0yJ8FouDdsEhxREV9a7oheCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=jw7gPawmSHa4s/CSgv+LC/FjeC22jaCK5fRYDqxDCso=; b=RAk+jSndcwuvwvvkBnEGtFgpDu5KIUJwqfpcnfKnp4LPcBiljEgita2dQ4Dajl7rxrJOlEgRfELgvSkJND4LVP1W0JSeAY7m/6+H1sKRFFNsoSRtOfYTXOIohs1L7c4m5SGvw05+x7KLPuTe1qSGtLBx4KtYMRRljzHpFwkwCvj/uDzKVkXh6Si+nM4eSt8rhAqIQY8rNd/0YSYMkc5JUcejQs/JO38uWK41nKA1iWnDS0+dRhPdmQAU7U4sFCcz3gEqNFyZkuAGRlzcwhg12GjXH0NBt6GcaYTOsImYVdrbed1cBNnDdJpmBvZ1jhv5n4gctQxk09dp1IIBOQJeuQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from MW4PR11MB5872.namprd11.prod.outlook.com (2603:10b6:303:169::14) by BL1PR11MB6051.namprd11.prod.outlook.com (2603:10b6:208:393::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7339.26; Fri, 1 Mar 2024 15:43:42 +0000 Received: from MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::92a7:f6a2:9262:d150]) by MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::92a7:f6a2:9262:d150%3]) with mapi id 15.20.7339.024; Fri, 1 Mar 2024 15:43:42 +0000 From: "Loftus, Ciara" To: "Tahhan, Maryam" , "ferruh.yigit@amd.com" , "stephen@networkplumber.org" , "lihuisong@huawei.com" , "fengchengwen@huawei.com" , "liuyonglong@huawei.com" , "Marchand, David" , "Koikkara Reeny, Shibin" CC: "dev@dpdk.org" , "Tahhan, Maryam" , "stable@dpdk.org" Subject: RE: [v11 2/3] net/af_xdp: fix multi interface support for K8s Thread-Topic: [v11 2/3] net/af_xdp: fix multi interface support for K8s Thread-Index: AQHaaxJD14qMpX2w5USA8OS5AyCskLEjB4Cg Date: Fri, 1 Mar 2024 15:43:42 +0000 Message-ID: References: <20240229132129.656166-1-mtahhan@redhat.com> <20240229132129.656166-3-mtahhan@redhat.com> In-Reply-To: <20240229132129.656166-3-mtahhan@redhat.com> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW4PR11MB5872:EE_|BL1PR11MB6051:EE_ x-ms-office365-filtering-correlation-id: c5bfd4de-4b3c-4c92-3368-08dc3a065f42 x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: L8x6TZly6ClBkevrNPookBrAChQIU/0GNrIekcN5uOYA+uOmc+Tf8P2FED4bkFsFRMgznvuoeUKvugN8fvYwKKY+LT0+8dLOnWT9aezWaxQt9yE7YawAZ3IZHHDsLIokmRGoJQP0E/peUDzA58nwFBsxPm26Qc527/OM8lAxaAovYgJm9EXIDIssG8cG4ZCP6yDJEXUjpni1DMxmx/59lkJ6Tn/mMqoE5Bp5fpkVJKu8J1A813zHBJxqdTsKHj/tIFjSbj1igJzBRN2GruKkzKIAM0kMkK/WEKcgpCeAGyXCXFEDoizybi1wz+Ch8m4ZQezhOMJdTJKt6VyF9anhQmAWnFILRA7/0qGChgVAGHGtiZNVXOfIMt3IxgniEMOQDHtULj/ZdmL1Jxj3T+543f0AEq/Uy8TW47Le9KvkpMgb9MvJcrGgalfHcDUHRFs53N3/OoGXarD5XwIdoVt1UVvG/0YW5WZCmI2DB3WxISGfreNrWSfPvmXsHghuLNJanjBIWi+PVwSqVFKzz2uvFLrTCjxaJPg7gF2Nu1npB4vN0oa8KAYnnGKk+N1PGaeumd3CAK7K86RtTVDF7wBXXrMYLKPWoyDlHNQ3J9+LQQ+gMm6153rAOYL6EbcuKOChXL/WVRs6IeZZSj/ZwprUN8TXcwSNyiUYY6ZyMX/Z8J/hg9Q6X4H5DgRoVT5TmhH07jh+WwnGctrzRtVDT2j26/4mtrbHpdzkA6fYCLL5Tdw= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MW4PR11MB5872.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(38070700009)(921011); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?OXbBZMBTUDceA1B7hbQ8WXrUN3l2Hz9A95F33iONECQOiEN3TdJ6lvHg++qg?= =?us-ascii?Q?tEGmfFFLp1YfhuQp03L3lUixDVnB1l/3vo0nTzeaK+6DcSlHNCfPzq1AkED1?= =?us-ascii?Q?LDWK1PsNpcYNgvPXgrgmm31P1wpWcSJ+1vKajNZ2ggZn9QVRmyYbdUTjqHAG?= =?us-ascii?Q?b+LOOOKtEkBlwSCBVF39FK+bGFI2GpaeuRt7t3TooLXmQJz13v6rsPmaANPB?= =?us-ascii?Q?loTBu6P/o0fsi8evWu9Wq5O1RZZVF57xGGZip6K55yiyLO0F1EE9lDCwVYTX?= =?us-ascii?Q?NxtkjgQFz6jsp+iQznnl5y0N0iNT8eno3xxRGRJLMc6wpZ28to3CPK/KUo9p?= =?us-ascii?Q?y/3fFTkbb/P2+glmB0trXiAjvVHUBws2YM5sHMYGg98X46ji5sYYW+k0FMEX?= =?us-ascii?Q?u9aUpQkYGgKh9luxfTpIa8kmZQ+hZD9yN/pFFr9P8RfzcrZ33FJ8arcc18hf?= =?us-ascii?Q?pzQh53NluRCjQRA6++shujFyR1CkGCRlB7FVg3qBRSpQeOweoYN6aM64X8vW?= =?us-ascii?Q?ZxElPM22HXEOwk5ZyHLLXshwC1weRkPEGCYf5k0X4qGw6EnfbsEITD+LAo6G?= =?us-ascii?Q?I/7TM3UrYDkGXd2rabLUblwZuFjNkjB7ziogNXPYMB3r5q9IlPejrz9zzRKZ?= =?us-ascii?Q?AAFkmV/3FousUe7Vwa8nOrSKqBf4qGOvdvfH0rS457LmYELxBdI13IIPy0+E?= =?us-ascii?Q?UlA4Qa661xWaiobgcjXZVwcF8F2J6H4h1VWfUgBOLL5F8jS/z/JDN2wZfI77?= =?us-ascii?Q?JE8Zuu7XgQsLfVWeti/6ZSphuSRBkhAkzCoqOasNt1QzSIjwEzQpu8Q3AMhw?= =?us-ascii?Q?19bKuXOOTNsIimtGXH4U3ZGZXOywqR6+jwjYBZzWO8uDuxFP66T4R4wvwMz3?= =?us-ascii?Q?wv2xYbJWOPX6Wu1aTFDB0NHf6wWG0/r3Wy+8BUrfoEdYKhuObq663cwWpTnH?= =?us-ascii?Q?+uPDLrYWD7wSzC2knTeLZhQ4GXhjNwKKRdIWAwJJRNnZLX9gTFxY8TfWiqx5?= =?us-ascii?Q?X3xydDWL4CbZlCPp9KyF+pnPvI/cdgc6QkHHXpgt1vIA0rR8hS/z5tpz4zWu?= =?us-ascii?Q?LZpXQehKzV2H/JkchqyLuX5zi58d5YudJ2Qu83Y8TZIu4IpZeRBo0LjP7xTE?= =?us-ascii?Q?j/FpIQq8ShPYCoWMfEHFJPmH2yfU5JMhmlSa0mN8PKrKMpPgab+fEjk31uoV?= =?us-ascii?Q?LM821fTr6YJiEm9G2V5mjVp5PrXKo19d9yyeyP5kpQASOSQrkFwuPJrZnPii?= =?us-ascii?Q?PQIctKAqpE9bZaFUY08hdOIGQm5y0yADl3uJOICjSZPAcV+Ma9cy8ER+GIjY?= =?us-ascii?Q?XHSDeKzkMT/nGn0aVYqfsyTVhVQfWSI8ZY0fvWYMRX3HAsly1eTY14MxD6R7?= =?us-ascii?Q?FY2rdC4YmPAxscF310dPho74uGLqrlaui7iBB+HAgHnRXaXnUGFDxhlqLhOz?= =?us-ascii?Q?GhkW3x/PqVzqFyAiDM45q1TQkEz1V3r9FNIKFVbhsVQmcLX3ovRtnDtCo7vW?= =?us-ascii?Q?soP4LIEToaxGV+fhwEcUPJJCXz0d2ItPi3L9vWe99bLj//0DNtJPCvfr1Dl0?= =?us-ascii?Q?/wtslBwFfB4u0RLE0YzUHIiM45XkX+w0rol8HWyQ?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW4PR11MB5872.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c5bfd4de-4b3c-4c92-3368-08dc3a065f42 X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Mar 2024 15:43:42.1638 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: FNQdULMh4n5Ng9XgZ4navQyc18fKMPYAkco/CZOm2q8kq2fIFD7anQhetpp8dw235Hx2/iqdGCzDOtjsr88R0g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR11MB6051 X-OriginatorOrg: intel.com 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 snip > @@ -1695,17 +1699,16 @@ xsk_configure(struct pmd_internals *internals, > struct pkt_rx_queue *rxq, > } >=20 > if (internals->use_cni) { > - int err, fd, map_fd; > + int err, map_fd; >=20 > - /* get socket fd from CNI plugin */ > - map_fd =3D get_cni_fd(internals->if_name); > + /* get socket fd from AF_XDP Device Plugin */ > + map_fd =3D uds_get_xskmap_fd(internals->if_name, internals- > >dp_path); > if (map_fd < 0) { > - AF_XDP_LOG(ERR, "Failed to receive CNI plugin fd\n"); > + AF_XDP_LOG(ERR, "Failed to receive xskmap fd from > AF_XDP Device Plugin\n"); > goto out_xsk; > } > - /* get socket fd */ > - fd =3D xsk_socket__fd(rxq->xsk); > - err =3D bpf_map_update_elem(map_fd, &rxq->xsk_queue_idx, > &fd, 0); > + > + err =3D xsk_socket__update_xskmap(rxq->xsk, map_fd); Hi Maryam, I've reviewed the series again. I haven't tested the device-plugin specific= functionality as I don't have that environment set up, but outside of that= I am happy that the new functionality doesn't break anything else. The doc= updates look good to me now, thank you for the fixes. I have just spotted one issue and I apologise for only catching it now. Patch 2 introduces a dependency on the xsk_socket__update_xskmap function w= hich is available in: libbpf >=3D v0.3.0 and <=3D v0.6.0 libxdp > v1.2.0 The af_xdp.rst guide states we are compatible with libbpf (on it's own) <= =3D v0.6.0. So users using libbpf < v0.3.0 will get an undefined reference = warning for the xsk_socket__update_xskmap function. Is it possible to implement fallback functionality (or if that's not possib= le, bail out) if that function is not available? See how this is done for t= he xsk_socket__create_shared function in meson.build and compat.h.=20 Thanks, Ciara > if (err) { > AF_XDP_LOG(ERR, "Failed to insert unprivileged xsk in > map.\n"); > goto out_xsk; > @@ -1881,13 +1884,13 @@ static const struct eth_dev_ops ops =3D { > .get_monitor_addr =3D eth_get_monitor_addr, > }; >=20 > -/* CNI option works in unprivileged container environment > - * and ethernet device functionality will be reduced. So > - * additional customiszed eth_dev_ops struct is needed > - * for cni. Promiscuous enable and disable functionality > - * is removed. > +/* AF_XDP Device Plugin option works in unprivileged > + * container environments and ethernet device functionality > + * will be reduced. So additional customised eth_dev_ops > + * struct is needed for the Device Plugin. Promiscuous > + * enable and disable functionality is removed. > **/ > -static const struct eth_dev_ops ops_cni =3D { > +static const struct eth_dev_ops ops_afxdp_dp =3D { > .dev_start =3D eth_dev_start, > .dev_stop =3D eth_dev_stop, > .dev_close =3D eth_dev_close, > @@ -2023,7 +2026,8 @@ xdp_get_channels_info(const char *if_name, int > *max_queues, > static int > parse_parameters(struct rte_kvargs *kvlist, char *if_name, int *start_qu= eue, > int *queue_cnt, int *shared_umem, char *prog_path, > - int *busy_budget, int *force_copy, int *use_cni) > + int *busy_budget, int *force_copy, int *use_cni, > + char *dp_path) > { > int ret; >=20 > @@ -2069,6 +2073,11 @@ parse_parameters(struct rte_kvargs *kvlist, char > *if_name, int *start_queue, > if (ret < 0) > goto free_kvlist; >=20 > + ret =3D rte_kvargs_process(kvlist, ETH_AF_XDP_DP_PATH_ARG, > + &parse_prog_arg, dp_path); > + if (ret < 0) > + goto free_kvlist; > + > free_kvlist: > rte_kvargs_free(kvlist); > return ret; > @@ -2108,7 +2117,7 @@ static struct rte_eth_dev * > init_internals(struct rte_vdev_device *dev, const char *if_name, > int start_queue_idx, int queue_cnt, int shared_umem, > const char *prog_path, int busy_budget, int force_copy, > - int use_cni) > + int use_cni, const char *dp_path) > { > const char *name =3D rte_vdev_device_name(dev); > const unsigned int numa_node =3D dev->device.numa_node; > @@ -2138,6 +2147,7 @@ init_internals(struct rte_vdev_device *dev, const > char *if_name, > internals->shared_umem =3D shared_umem; > internals->force_copy =3D force_copy; > internals->use_cni =3D use_cni; > + strlcpy(internals->dp_path, dp_path, PATH_MAX); >=20 > if (xdp_get_channels_info(if_name, &internals->max_queue_cnt, > &internals->combined_queue_cnt)) { > @@ -2199,7 +2209,7 @@ init_internals(struct rte_vdev_device *dev, const > char *if_name, > if (!internals->use_cni) > eth_dev->dev_ops =3D &ops; > else > - eth_dev->dev_ops =3D &ops_cni; > + eth_dev->dev_ops =3D &ops_afxdp_dp; >=20 > eth_dev->rx_pkt_burst =3D eth_af_xdp_rx; > eth_dev->tx_pkt_burst =3D eth_af_xdp_tx; > @@ -2328,6 +2338,7 @@ rte_pmd_af_xdp_probe(struct rte_vdev_device > *dev) > int busy_budget =3D -1, ret; > int force_copy =3D 0; > int use_cni =3D 0; > + char dp_path[PATH_MAX] =3D {'\0'}; > struct rte_eth_dev *eth_dev =3D NULL; > const char *name =3D rte_vdev_device_name(dev); >=20 > @@ -2370,7 +2381,7 @@ rte_pmd_af_xdp_probe(struct rte_vdev_device > *dev) >=20 > if (parse_parameters(kvlist, if_name, &xsk_start_queue_idx, > &xsk_queue_cnt, &shared_umem, prog_path, > - &busy_budget, &force_copy, &use_cni) < 0) { > + &busy_budget, &force_copy, &use_cni, dp_path) < > 0) { > AF_XDP_LOG(ERR, "Invalid kvargs value\n"); > return -EINVAL; > } > @@ -2384,7 +2395,19 @@ rte_pmd_af_xdp_probe(struct rte_vdev_device > *dev) > if (use_cni && strnlen(prog_path, PATH_MAX)) { > AF_XDP_LOG(ERR, "When '%s' parameter is used, '%s' > parameter is not valid\n", > ETH_AF_XDP_USE_CNI_ARG, > ETH_AF_XDP_PROG_ARG); > - return -EINVAL; > + return -EINVAL; > + } > + > + if (use_cni && !strnlen(dp_path, PATH_MAX)) { > + snprintf(dp_path, sizeof(dp_path), "%s/%s/%s", > DP_BASE_PATH, if_name, DP_UDS_SOCK); > + AF_XDP_LOG(INFO, "'%s' parameter not provided, setting > value to '%s'\n", > + ETH_AF_XDP_DP_PATH_ARG, dp_path); > + } > + > + if (!use_cni && strnlen(dp_path, PATH_MAX)) { > + AF_XDP_LOG(ERR, "'%s' parameter is set, but '%s' was not > enabled\n", > + ETH_AF_XDP_DP_PATH_ARG, > ETH_AF_XDP_USE_CNI_ARG); > + return -EINVAL; > } >=20 > if (strlen(if_name) =3D=3D 0) { > @@ -2410,7 +2433,7 @@ rte_pmd_af_xdp_probe(struct rte_vdev_device > *dev) >=20 > eth_dev =3D init_internals(dev, if_name, xsk_start_queue_idx, > xsk_queue_cnt, shared_umem, prog_path, > - busy_budget, force_copy, use_cni); > + busy_budget, force_copy, use_cni, dp_path); > if (eth_dev =3D=3D NULL) { > AF_XDP_LOG(ERR, "Failed to init internals\n"); > return -1; > @@ -2471,4 +2494,5 @@ RTE_PMD_REGISTER_PARAM_STRING(net_af_xdp, > "xdp_prog=3D " > "busy_budget=3D " > "force_copy=3D " > - "use_cni=3D "); > + "use_cni=3D " > + "dp_path=3D "); > -- > 2.41.0