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 88AF9A0547; Wed, 12 Oct 2022 11:01:17 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 63F1642D86; Wed, 12 Oct 2022 11:01:17 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 164D842D6E for ; Wed, 12 Oct 2022 11:01:15 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 29C8enUs010961; Wed, 12 Oct 2022 02:01:15 -0700 Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2173.outbound.protection.outlook.com [104.47.55.173]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3k5t92r28e-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Oct 2022 02:01:15 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IU5GEN8t0aKSN4l/Q5rkj0Welc9UzPdHAoXGEOJZQeJ4oMkV0xwuBzIXLHqJJL3OiWcIclqr9LkSDnGgelwokpY4tc9LN3M3cpGgbnVHAeEGpisr3F/bcm+VZvIfck+adRyOyzGCP+q/Hdk1xmdFq1lcf6lym97xMV7R6Ja67yvwrbYN/M+qaaNdmgT3lgnMmAfReK+9RULqLnCPCK7swo9o1p5s0U7lNNhOoUx0zcry1WXocGxmlH8hzeEdpRt1B7CeGFjNqDncOzMw+7WtJ/7tGJfBF9Y6IDLD3/twJyyK8CHtwpkPmBe1cnGJwdCCOzIT+5Tzme4Ii+B7pe9nyQ== 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=+g8YSk5VkInJmHAHcf+HQFovhdARHkg1JspC7P6uAIU=; b=XAFNkiieGto5Mtkc39tGBTZrhOfTXj3leFmWmKl8+WmTjXxqsLc983N6nNhDMC3onaQVzMakrOFSe5tWcbgDsCpc+CAyasKeASt2J5TQmLsC8RaV46FkYikZuhO83G3dvwyoUKghkBqlwt9MHZ1qmZUyc41Hh29hldMbAFc0hiJ2IY+yu/wJ8ty+7n1bJ6xExHCXU1NMpyG63/7+DgDnOacLA0OezjnANP407sVR8wh6+LtSH+Js/yz10q2lYGvJquIzxh3XikgnaxNYhRcud2/w2MEH7P4QKeu9AtlYbGSj1M3He4cGomeYEZyHMnaKgVmNl19y3Wv3Vy/GLpNjMg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+g8YSk5VkInJmHAHcf+HQFovhdARHkg1JspC7P6uAIU=; b=NpEJIbLk49Sd6w16nyIWc8hcYCAv3s+80khu6aUWQLV12rjO9vesHAAocrLVZIC5Vu7fmr2LzRbL42GJtqY92Sbci2UIOSyRPqDIcc9BDVN2tNaibqYwjs8YSXbZfYHWQPtcUYt3tMTTkE3Vxjk3jJXAT0QeQ71RQar05yzSFmg= Received: from CO6PR18MB3860.namprd18.prod.outlook.com (2603:10b6:5:34d::12) by SA0PR18MB3661.namprd18.prod.outlook.com (2603:10b6:806:93::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5709.15; Wed, 12 Oct 2022 09:01:04 +0000 Received: from CO6PR18MB3860.namprd18.prod.outlook.com ([fe80::50c6:106e:b9d9:4436]) by CO6PR18MB3860.namprd18.prod.outlook.com ([fe80::50c6:106e:b9d9:4436%7]) with mapi id 15.20.5676.044; Wed, 12 Oct 2022 09:01:03 +0000 From: Sunil Kumar Kori To: Sunil Kumar Kori , Aman Singh , Yuying Zhang CC: "dev@dpdk.org" Subject: RE: [PATCH v2 1/3] app/testpmd: support congestion management CLIs Thread-Topic: [PATCH v2 1/3] app/testpmd: support congestion management CLIs Thread-Index: AQHY0+mMIhWCoADz1UujQnGNb6mT/a4KilkQ Date: Wed, 12 Oct 2022 09:01:03 +0000 Message-ID: References: <20220919124117.1059642-3-skori@marvell.com> <20220929095455.2173071-1-skori@marvell.com> In-Reply-To: <20220929095455.2173071-1-skori@marvell.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-dg-rorf: true x-dg-ref: =?us-ascii?Q?PG1ldGE+PGF0IG5tPSJib2R5LnR4dCIgcD0iYzpcdXNlcnNcc2tvcmlcYXBw?= =?us-ascii?Q?ZGF0YVxyb2FtaW5nXDA5ZDg0OWI2LTMyZDMtNGE0MC04NWVlLTZiODRiYTI5?= =?us-ascii?Q?ZTM1Ylxtc2dzXG1zZy02NDE4ZDQ0Ni00YTBjLTExZWQtYjZiZS05NGU2Zjc5?= =?us-ascii?Q?MjY4OTBcYW1lLXRlc3RcNjQxOGQ0NDgtNGEwYy0xMWVkLWI2YmUtOTRlNmY3?= =?us-ascii?Q?OTI2ODkwYm9keS50eHQiIHN6PSIxNzQyOCIgdD0iMTMzMTAwMzg4NjA3OTYw?= =?us-ascii?Q?OTU5IiBoPSI0QjFDaDl3ZVBpT3dVK3ZiaHRHMytvYSthNUU9IiBpZD0iIiBi?= =?us-ascii?Q?bD0iMCIgYm89IjEiIGNpPSJjQUFBQUVSSFUxUlNSVUZOQ2dVQUFQNEZBQUIv?= =?us-ascii?Q?cDNFbUdkN1lBZVJFaTFGdnlQM1E1RVNMVVcvSS9kQUpBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBSEFBQUFDT0JRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?RUFBUUFCQUFBQTZQcWVsQUFBQUFBQUFBQUFBQUFBQUo0QUFBQmhBR1FBWkFC?= =?us-ascii?Q?eUFHVUFjd0J6QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFF?= =?us-ascii?Q?QUFBQUFBQUFBQWdBQUFBQUFuZ0FBQUdNQWRRQnpBSFFBYndCdEFGOEFjQUJs?= =?us-ascii?Q?QUhJQWN3QnZBRzRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUNBQUFB?= =?us-ascii?Q?QUFDZUFBQUFZd0IxQUhNQWRBQnZBRzBBWHdCd0FHZ0Fid0J1QUdVQWJnQjFB?= =?us-ascii?Q?RzBBWWdCbEFISUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFD?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFJQUFBQUFBSjRBQUFCakFIVUFj?= =?us-ascii?Q?d0IwQUc4QWJRQmZBSE1BY3dCdUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= x-dg-refone: =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBZ0FBQUFBQW5nQUFBR1FB?= =?us-ascii?Q?YkFCd0FGOEFjd0JyQUhrQWNBQmxBRjhBWXdCb0FHRUFkQUJmQUcwQVpRQnpB?= =?us-ascii?Q?SE1BWVFCbkFHVUFYd0IyQURBQU1nQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFRQUFBQUFBQUFBQ0FBQUFBQUNlQUFBQVpBQnNBSEFBWHdCekFHd0FZ?= =?us-ascii?Q?UUJqQUdzQVh3QmpBR2dBWVFCMEFGOEFiUUJsQUhNQWN3QmhBR2NBWlFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFB?= =?us-ascii?Q?QUlBQUFBQUFKNEFBQUJrQUd3QWNBQmZBSFFBWlFCaEFHMEFjd0JmQUc4QWJn?= =?us-ascii?Q?QmxBR1FBY2dCcEFIWUFaUUJmQUdZQWFRQnNBR1VBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFnQUFBQUFBbmdBQUFH?= =?us-ascii?Q?VUFiUUJoQUdrQWJBQmZBR0VBWkFCa0FISUFaUUJ6QUhNQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQVFBQUFBQUFBQUFDQUFBQUFBQ2VBQUFBYlFCaEFISUFkZ0JsQUd3?= =?us-ascii?Q?QWJBQmZBSFFBWlFCeUFHMEFhUUJ1QUhVQWN3QUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?us-ascii?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= x-dg-reftwo: QUFBQUFBQUFBQUJBQUFBQUFBQUFBSUFBQUFBQUE9PSIvPjwvbWV0YT4= x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CO6PR18MB3860:EE_|SA0PR18MB3661:EE_ x-ms-office365-filtering-correlation-id: 6ee803bb-7d41-4ecd-f898-08daac304a9e x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: kKvkKNw0PZ6UxPWDu1BLpMvwUjb3XcRIDzgDw4uWLgO2x/VtuOp8Okj44CKriE13a/jpMJM6BEioWYQ63oEw0yAapTWbEjt1+z0o/xykoMS2OjchvacNEA1uLTVcZYKZ0GsIcaYuHHIdvMK0qgKeV8GTgsFU5cLIxK7QNSBhmKOiBGRv6BErVlO4+Lv45lwlV1hrpNaVC50Y+tPF38YeV6JAKyIPBPf7SBqgQkWrHK/44Fj9IWc4bkuKEX0bITOZ45kdN/Pg5eM5neZoHA9s86X+fzD/JY8gPFeKSovhEHyJiM4JRqha1U1X5h+DJ1UIhH0WfDzEDFegqOiTrptW91ex9U4zKO2eTQz1Uvzjl2dC94yAlar8Vnp/GqrV4VQ9QZjO4PN4fTwrOKLailZtIxw2cJZoRtyasGaWdbSsmgyNpfgIk/e8qpGNWb2Zvr3F1HfRfQIfiq9mNblSwejg+sYWWn016xcyjfrbpYnxRlW+cxdkraX/F0uzu7klQbowHw9A6JNR9QcwVWT6RSRFQPYa9teciKcqQ2iQJxTn8CyugoxznUm2pNfZiFQm+LFtgxdUiGLg8tJqgyB+aBNTWL0muK1XQUKh9eEjO8D7FU8d26VQBKecx4bn3tsLjAyYrz15tSTa/8zyR9ceizxyl25qCssEA3z9ITnq1GlmLilAOB/NB7Y+TpiGesaeNw0oblgVzM7pSLYPYL9OyVSix0+APcKvW2rU9uBNzAZinvkrYAhg9OWcihqOaYsmHMTffyqlyCy2wmb2hCK7I+Yvbg== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO6PR18MB3860.namprd18.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(366004)(39860400002)(136003)(396003)(376002)(346002)(451199015)(5660300002)(52536014)(8936002)(86362001)(2906002)(7696005)(30864003)(6506007)(186003)(41300700001)(83380400001)(64756008)(66476007)(66556008)(53546011)(4326008)(66446008)(110136005)(26005)(66946007)(316002)(8676002)(76116006)(38070700005)(122000001)(478600001)(71200400001)(38100700002)(9686003)(55016003)(33656002); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?ef9Weit6cvPUfYobcnlQMkHPbs64D8qIL1zbCFQdTvXjZBtkWf7yxRmwawST?= =?us-ascii?Q?mm0BJ0sAuwAfAArU981+rRsJp/SZF2mzC0nq5PpsFFHkuaWSA3vSHwBbDHXv?= =?us-ascii?Q?Bfpk/I8+JxklZAitEKHCugXoroCHOXGfS4fpJMmr0MdM5hAlKVkQ52Tvm8Rk?= =?us-ascii?Q?sbe83vClD1lJSyddQA4bYzUu3YNaYlmJsboFYPdMPqT3LrQrFQhru5jYsCRY?= =?us-ascii?Q?vFngY5m4V+N5s18FC867rJUDV1rE/Pwe6YtYc6X8wVDk9c0sk6msr8OWuyfo?= =?us-ascii?Q?dltQpcM08DY5+K/7YuJN9SWwUN4XuKtnzqpy79sLBujeGMNe9iS43WUpzvXC?= =?us-ascii?Q?TI7li3rMdqnPne0FpwE3vFGBg2aaBcxj3ZvkAJo7WTfrqkGQGEj7qaCZdnzV?= =?us-ascii?Q?MZBywNxRHBIie0tmeFSVZvO8qg7h3SyF6voDqJZ8/4DYPIVqkRzjJ+faM4y4?= =?us-ascii?Q?Kjscpf9pi+8FdY1rL+dJua7Hq2FNocAAqoaedD9sRNbrmoj9UCY0HQ20ncu4?= =?us-ascii?Q?Ws5E8AEY+32MHe23LJ/9Ozr14v+sPWErJ6WqfCPLi0c4Qlha96Bm94K5spoj?= =?us-ascii?Q?ZF/9G4W4qi8C8AeMLz0klwbVmrkx02FoHPqnXqjJKmJF+7MJalPUSj9QulTt?= =?us-ascii?Q?irsVXFXS38uW0XBwyed1Dm48yDHKb5nlwAXNUbQNTXPzULXdtOGy/gTcl01w?= =?us-ascii?Q?/0y5q9u4JlVBbgm9UX2zCjqzWWh/mAMXqEL4Aptt6cNssQn9KPTpC4XdYlWw?= =?us-ascii?Q?oe0ebNBdKNmL0P8MYYB/8bfFKpRk6IAZqFU27N9wOEP8eVdOgdcPh/DERiYJ?= =?us-ascii?Q?C1ToTFQvNGeNtR0dD6wr/w03HKab/EDPryLIa7d12aTcZpwbjN7l2MuhzbAk?= =?us-ascii?Q?kEjtKEThvmLNqO2+9TpGnl5OXo3VrugS2t8VYfXZU3hfb650ZZbSzI5EUEOa?= =?us-ascii?Q?n6LJvLZDPn9sDK+1JRmkrWuCXRgRroVq8B5EJs1vgOaaNMreAAm1JfZRJpmn?= =?us-ascii?Q?yJAHoPYik2ochCKb2tRVqqsCHz/ncqes3IeLQeGnW1BDylZkv9yFtCqoxEKm?= =?us-ascii?Q?ANeT4n2TQsWnezPJMDuNhrNj+s6uubH2TK+Zd7wehKtCJfj8nUqAIKio9O8e?= =?us-ascii?Q?DOgmC/xwftezUEKOgjZ7k+Gz/S+B6u3oNIroHt3h3xDcjiO3eJcDdl2qlPIX?= =?us-ascii?Q?9jqMLBWFMQRGs5t25qU14SJ+4dEm62SR45sSl+6Erd4Y9C51ixDuJ1mkZUYr?= =?us-ascii?Q?vcDel2tEEVDPrfrju2IXQFX6w+MN3V+nNm8JLS/stIy4+F468vuVwpFcatL6?= =?us-ascii?Q?Ld/+yz8TGnXFeaFnl1yl6WKb5mSmRKtsf28GxpjOT6naCske/CqlerwKlc9Q?= =?us-ascii?Q?vbJXbYB4LG566q2r3/uSL73jgHssBCocAC61eq05fxGIOyQYSJ5J9ePPOqzm?= =?us-ascii?Q?kofQCJ1fwce4xqFxGFCBr+A+ZZp1eHiTEMQDZ1QP8OLkVdCNHiZAKoJsEFv4?= =?us-ascii?Q?ni75ya61dq4YHR0PtBIeQ9CmQLuA0+oLdafMpy5ACf2dchH1mY5COZHcaeuY?= =?us-ascii?Q?eHOIboh4qAH2hFkQe6Ah42zjMA/06O8z1Aexh7nR?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: marvell.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO6PR18MB3860.namprd18.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6ee803bb-7d41-4ecd-f898-08daac304a9e X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Oct 2022 09:01:03.6374 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: QrkG52+EHdt+vGQNpOmrGuV6s3HFLcYyRQ7InKeQXOG/NhLm6SmZilxOzB+yg757Y12ClInoLUIV/e+NpKVOzA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR18MB3661 X-Proofpoint-GUID: g5UzaVHboWjBiTAdmxX-pYXHcY9UIgoV X-Proofpoint-ORIG-GUID: g5UzaVHboWjBiTAdmxX-pYXHcY9UIgoV X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2022-10-12_04,2022-10-11_02,2022-06-22_01 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 Please review the following changes and provide feedback.=20 Regards Sunil Kumar Kori > -----Original Message----- > From: skori@marvell.com > Sent: Thursday, September 29, 2022 3:25 PM > To: Aman Singh ; Yuying Zhang > > Cc: dev@dpdk.org; Sunil Kumar Kori > Subject: [PATCH v2 1/3] app/testpmd: support congestion management CLIs >=20 > From: Sunil Kumar Kori >=20 > Support congestion management CLIs. >=20 > Depends-on: patch-24902 ("ethdev: support congestion management") >=20 > Signed-off-by: Sunil Kumar Kori > --- > v1..v2: > - Rebase on top of the dpdk-next-net-mrvl/for-next-net >=20 > app/test-pmd/cmdline.c | 15 + > app/test-pmd/cmdline_cman.c | 390 ++++++++++++++++++++ > app/test-pmd/cmdline_cman.h | 12 + > app/test-pmd/meson.build | 1 + > doc/guides/testpmd_app_ug/testpmd_funcs.rst | 26 ++ > 5 files changed, 444 insertions(+) > create mode 100644 app/test-pmd/cmdline_cman.c create mode 100644 > app/test-pmd/cmdline_cman.h >=20 > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index > 51321de9ed..ce278eadb0 100644 > --- a/app/test-pmd/cmdline.c > +++ b/app/test-pmd/cmdline.c > @@ -60,6 +60,7 @@ > #include > #endif > #include "testpmd.h" > +#include "cmdline_cman.h" > #include "cmdline_mtr.h" > #include "cmdline_tm.h" > #include "bpf_cmd.h" > @@ -599,6 +600,17 @@ static void cmd_help_long_parsed(void > *parsed_result, > "set port (port_id) fec_mode auto|off|rs|baser\n" > " set fec mode for a specific port\n\n" >=20 > + "show port cman capa (port_id)\n" > + " Show congestion management capabilities\n\n" > + > + "show port cman config (port_id)\n" > + " Show congestion management configuration\n\n" > + > + "set port cman config (port_id) (queue_id) default | " > + "[obj (queue|queue_mempool) mode red > (min_thresh) " > + "(max_thresh) (prob_inv)]\n" > + " Set congestion management configuration\n\n" > + > , list_pkt_forwarding_modes() > ); > } > @@ -12990,6 +13002,9 @@ static cmdline_parse_ctx_t builtin_ctx[] =3D { > (cmdline_parse_inst_t *)&cmd_show_capability, > (cmdline_parse_inst_t *)&cmd_set_flex_is_pattern, > (cmdline_parse_inst_t *)&cmd_set_flex_spec_pattern, > + (cmdline_parse_inst_t *)&cmd_show_port_cman_capa, > + (cmdline_parse_inst_t *)&cmd_show_port_cman_config, > + (cmdline_parse_inst_t *)&cmd_set_port_cman_config, > NULL, > }; >=20 > diff --git a/app/test-pmd/cmdline_cman.c b/app/test-pmd/cmdline_cman.c > new file mode 100644 index 0000000000..344759189d > --- /dev/null > +++ b/app/test-pmd/cmdline_cman.c > @@ -0,0 +1,390 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(C) 2022 Marvell International Ltd. > + */ > + > +#include > +#include > +#include > + > +#include > + > +#include "testpmd.h" > + > +#define PARSE_DELIMITER " \f\n\r\t\v" > + > +static int > +parse_uint(uint64_t *value, const char *str) { > + char *next =3D NULL; > + uint64_t n; > + > + errno =3D 0; > + /* Parse number string */ > + n =3D strtol(str, &next, 10); > + if (errno !=3D 0 || str =3D=3D next || *next !=3D '\0') > + return -1; > + > + *value =3D n; > + > + return 0; > +} > + > +static int > +parse_cman_obj_str(char *str, uint64_t *obj) { > + char *token; > + > + token =3D strtok_r(str, PARSE_DELIMITER, &str); > + if (token =3D=3D NULL) > + return 0; > + > + if (strcasecmp(token, "queue") =3D=3D 0) > + *obj =3D RTE_ETH_CMAN_OBJ_RX_QUEUE; > + else if (strcasecmp(token, "queue_mempool") =3D=3D 0) > + *obj =3D RTE_ETH_CMAN_OBJ_RX_QUEUE_MEMPOOL; > + else > + return -1; > + > + return 0; > +} > + > +static int > +parse_cman_mode_str(char *str, uint64_t *mode) { > + char *token; > + > + token =3D strtok_r(str, PARSE_DELIMITER, &str); > + if (token =3D=3D NULL) > + return 0; > + > + if (strcasecmp(token, "red") =3D=3D 0) > + *mode =3D RTE_CMAN_RED; > + else > + return -1; > + > + return 0; > +} > + > +static int > +parse_cman_params_str(uint16_t port_id, char *str, > + struct rte_eth_cman_config *cfg) { > + uint64_t obj =3D 0, mode =3D 0, min_th =3D 0, max_th =3D 0, maxp_inv = =3D 0; > + struct rte_eth_cman_info info; > + char *token; > + int ret; > + > + token =3D strtok_r(str, PARSE_DELIMITER, &str); > + if (!strcasecmp(token, "default")) { > + ret =3D rte_eth_cman_config_init(port_id, cfg); > + if (ret) { > + fprintf(stderr, "error in default initialization\n"); > + return ret; > + } > + return 0; > + } > + > + /* First token: obj name */ > + token =3D strtok_r(str, PARSE_DELIMITER, &str); > + if (token =3D=3D NULL) { > + fprintf(stderr, "Object param parse error\n"); > + goto error; > + } > + > + ret =3D parse_cman_obj_str(token, &obj); > + if (ret) { > + fprintf(stderr, "Object value is invalid\n"); > + goto error; > + } > + > + /* Second token: mode name */ > + token =3D strtok_r(str, PARSE_DELIMITER, &str); > + if (token =3D=3D NULL) { > + fprintf(stderr, " Mode param is invalid\n"); > + goto error; > + } > + > + token =3D strtok_r(str, PARSE_DELIMITER, &str); > + if (token =3D=3D NULL) { > + fprintf(stderr, " Mode value is invalid\n"); > + goto error; > + } > + > + ret =3D parse_cman_mode_str(token, &mode); > + if (ret) { > + fprintf(stderr, "mode string parse error\n"); > + goto error; > + } > + > + /* Third token: minimum threshold */ > + token =3D strtok_r(str, PARSE_DELIMITER, &str); > + if (token =3D=3D NULL) { > + fprintf(stderr, "Minimum threshold parse error\n"); > + goto error; > + } > + > + ret =3D parse_uint(&min_th, token); > + if (ret !=3D 0 || min_th > UINT8_MAX) { > + fprintf(stderr, "Minimum threshold is invalid\n"); > + goto error; > + } > + > + /* Fourth token: maximum threshold */ > + token =3D strtok_r(str, PARSE_DELIMITER, &str); > + if (token =3D=3D NULL) { > + fprintf(stderr, "Maximum threshold parse error\n"); > + goto error; > + } > + > + ret =3D parse_uint(&max_th, token); > + if (ret !=3D 0 || max_th > UINT8_MAX) { > + fprintf(stderr, "Maximum threshold is invalid\n"); > + goto error; > + } > + > + /* Fifth token: probability inversion */ > + token =3D strtok_r(str, PARSE_DELIMITER, &str); > + if (token =3D=3D NULL) { > + fprintf(stderr, "Maximum probability inversion parse > error\n"); > + goto error; > + } > + > + ret =3D parse_uint(&maxp_inv, token); > + if (ret !=3D 0 || maxp_inv =3D=3D 0 || maxp_inv > UINT16_MAX) { > + fprintf(stderr, "Maximum probability inversion is invalid\n"); > + goto error; > + } > + > + memset(&info, 0, sizeof(struct rte_eth_cman_info)); > + ret =3D rte_eth_cman_info_get(port_id, &info); > + if (ret) { > + fprintf(stderr, "Congestion management capa get error\n"); > + goto error; > + } > + > + if (!(info.objs_supported & obj)) { > + fprintf(stderr, "Object type is not supported by driver\n"); > + goto error; > + } > + > + if (!(info.modes_supported & mode)) { > + fprintf(stderr, "Mode is not supported by driver\n"); > + goto error; > + } > + > + cfg->obj =3D obj; > + cfg->mode =3D mode; > + cfg->mode_param.red.min_th =3D min_th; > + cfg->mode_param.red.max_th =3D max_th; > + cfg->mode_param.red.maxp_inv =3D maxp_inv; > + > + return 0; > + > +error: > + return -EINVAL; > +} > + > +/* *** Show Port Congestion Management Capabilities *** */ struct > +cmd_show_port_cman_capa_result { > + cmdline_fixed_string_t show; > + cmdline_fixed_string_t port; > + cmdline_fixed_string_t cman; > + cmdline_fixed_string_t capa; > + uint16_t port_id; > +}; > + > +static cmdline_parse_token_string_t cmd_show_port_cman_capa_show =3D > + TOKEN_STRING_INITIALIZER( > + struct cmd_show_port_cman_capa_result, show, "show"); > + > +static cmdline_parse_token_string_t cmd_show_port_cman_capa_port =3D > + TOKEN_STRING_INITIALIZER( > + struct cmd_show_port_cman_capa_result, port, "port"); > + > +static cmdline_parse_token_string_t cmd_show_port_cman_capa_cman =3D > + TOKEN_STRING_INITIALIZER( > + struct cmd_show_port_cman_capa_result, cman, "cman"); > + > +static cmdline_parse_token_string_t cmd_show_port_cman_capa_capa =3D > + TOKEN_STRING_INITIALIZER( > + struct cmd_show_port_cman_capa_result, capa, "capa"); > + > +static cmdline_parse_token_num_t cmd_show_port_cman_capa_port_id =3D > + TOKEN_NUM_INITIALIZER( > + struct cmd_show_port_cman_capa_result, port_id, > RTE_UINT16); > + > +static void cmd_show_port_cman_capa_parsed(void *parsed_result, > + __rte_unused struct cmdline *cl, > + __rte_unused void *data) > +{ > + struct cmd_show_port_cman_capa_result *res =3D parsed_result; > + uint16_t port_id =3D res->port_id; > + struct rte_eth_cman_info info; > + int ret; > + > + memset(&info, 0, sizeof(struct rte_eth_cman_info)); > + ret =3D rte_eth_cman_info_get(port_id, &info); > + if (ret) > + return; > + > + printf("\n**** Port Congestion Management Capabilities > ****\n\n"); > + printf("modes_supported 0x%" PRIx64 "\n", info.modes_supported); > + printf("objs_supported 0x%" PRIx64 "\n", info.objs_supported); } > + > +cmdline_parse_inst_t cmd_show_port_cman_capa =3D { > + .f =3D cmd_show_port_cman_capa_parsed, > + .data =3D NULL, > + .help_str =3D "show port cman capa ", > + .tokens =3D { > + (void *)&cmd_show_port_cman_capa_show, > + (void *)&cmd_show_port_cman_capa_port, > + (void *)&cmd_show_port_cman_capa_cman, > + (void *)&cmd_show_port_cman_capa_capa, > + (void *)&cmd_show_port_cman_capa_port_id, > + NULL, > + }, > +}; > + > +/* *** Show Port Congestion Management configuration *** */ struct > +cmd_show_port_cman_cfg_result { > + cmdline_fixed_string_t show; > + cmdline_fixed_string_t port; > + cmdline_fixed_string_t cman; > + cmdline_fixed_string_t cfg; > + uint16_t port_id; > +}; > + > +static cmdline_parse_token_string_t cmd_show_port_cman_cfg_show =3D > + TOKEN_STRING_INITIALIZER( > + struct cmd_show_port_cman_cfg_result, show, "show"); > + > +static cmdline_parse_token_string_t cmd_show_port_cman_cfg_port =3D > + TOKEN_STRING_INITIALIZER( > + struct cmd_show_port_cman_cfg_result, port, "port"); > + > +static cmdline_parse_token_string_t cmd_show_port_cman_cfg_cman =3D > + TOKEN_STRING_INITIALIZER( > + struct cmd_show_port_cman_cfg_result, cman, "cman"); > + > +static cmdline_parse_token_string_t cmd_show_port_cman_cfg_cfg =3D > + TOKEN_STRING_INITIALIZER( > + struct cmd_show_port_cman_cfg_result, cfg, "config"); > + > +static cmdline_parse_token_num_t cmd_show_port_cman_cfg_port_id =3D > + TOKEN_NUM_INITIALIZER( > + struct cmd_show_port_cman_cfg_result, port_id, > RTE_UINT16); > + > +static void cmd_show_port_cman_cfg_parsed(void *parsed_result, > + __rte_unused struct cmdline *cl, > + __rte_unused void *data) > +{ > + struct cmd_show_port_cman_cfg_result *res =3D parsed_result; > + uint16_t port_id =3D res->port_id; > + struct rte_eth_cman_config cfg; > + int ret; > + > + memset(&cfg, 0, sizeof(struct rte_eth_cman_config)); > + ret =3D rte_eth_cman_config_get(port_id, &cfg); > + if (ret) > + return; > + > + printf("\n**** Port Congestion Management Configuration > ****\n\n"); > + printf("cman object 0x%" PRIx32 "\n", cfg.obj); > + printf("cman Rx queue %" PRIx16 "\n", cfg.obj_param.rx_queue); > + printf("cman mode 0x%" PRIx32 "\n", cfg.mode); > + printf("cman RED min thresh %" PRIx8 "\n", > cfg.mode_param.red.min_th); > + printf("cman RED max thresh %" PRIx8 "\n", > cfg.mode_param.red.max_th); > + printf("cman RED Prob inversion %" PRIx16 "\n", > + cfg.mode_param.red.maxp_inv); > +} > + > +cmdline_parse_inst_t cmd_show_port_cman_config =3D { > + .f =3D cmd_show_port_cman_cfg_parsed, > + .data =3D NULL, > + .help_str =3D "show port cman config ", > + .tokens =3D { > + (void *)&cmd_show_port_cman_cfg_show, > + (void *)&cmd_show_port_cman_cfg_port, > + (void *)&cmd_show_port_cman_cfg_cman, > + (void *)&cmd_show_port_cman_cfg_cfg, > + (void *)&cmd_show_port_cman_cfg_port_id, > + NULL, > + }, > +}; > + > +/* *** Set Port Congestion Management configuration *** */ struct > +cmd_set_port_cman_cfg_result { > + cmdline_fixed_string_t set; > + cmdline_fixed_string_t port; > + cmdline_fixed_string_t cman; > + cmdline_fixed_string_t cfg; > + uint16_t port_id; > + uint16_t qid; > + cmdline_multi_string_t params; > +}; > + > +static cmdline_parse_token_string_t cmd_set_port_cman_cfg_set =3D > + TOKEN_STRING_INITIALIZER( > + struct cmd_set_port_cman_cfg_result, set, "set"); > + > +static cmdline_parse_token_string_t cmd_set_port_cman_cfg_port =3D > + TOKEN_STRING_INITIALIZER( > + struct cmd_set_port_cman_cfg_result, port, "port"); > + > +static cmdline_parse_token_string_t cmd_set_port_cman_cfg_cman =3D > + TOKEN_STRING_INITIALIZER( > + struct cmd_set_port_cman_cfg_result, cman, "cman"); > + > +static cmdline_parse_token_string_t cmd_set_port_cman_cfg_cfg =3D > + TOKEN_STRING_INITIALIZER( > + struct cmd_set_port_cman_cfg_result, cfg, "config"); > + > +static cmdline_parse_token_num_t cmd_set_port_cman_cfg_port_id =3D > + TOKEN_NUM_INITIALIZER( > + struct cmd_set_port_cman_cfg_result, port_id, RTE_UINT16); > + > +static cmdline_parse_token_num_t cmd_set_port_cman_cfg_qid =3D > + TOKEN_NUM_INITIALIZER( > + struct cmd_set_port_cman_cfg_result, qid, RTE_UINT16); > + > +static cmdline_parse_token_string_t cmd_set_port_cman_cfg_params =3D > + TOKEN_STRING_INITIALIZER(struct cmd_set_port_cman_cfg_result, > + params, TOKEN_STRING_MULTI); > + > +static void cmd_set_port_cman_cfg_parsed(void *parsed_result, > + __rte_unused struct cmdline *cl, > + __rte_unused void *data) > +{ > + struct cmd_set_port_cman_cfg_result *res =3D parsed_result; > + uint16_t port_id =3D res->port_id; > + struct rte_eth_cman_config cfg; > + int ret; > + > + ret =3D parse_cman_params_str(port_id, res->params, &cfg); > + if (ret) { > + fprintf(stderr, "params string parse error\n"); > + return; > + } > + > + cfg.obj_param.rx_queue =3D res->qid; > + rte_eth_cman_config_set(port_id, &cfg); } > + > +cmdline_parse_inst_t cmd_set_port_cman_config =3D { > + .f =3D cmd_set_port_cman_cfg_parsed, > + .data =3D NULL, > + .help_str =3D "set port cman config " > + "default | [obj mode red " > + " ]", > + .tokens =3D { > + (void *)&cmd_set_port_cman_cfg_set, > + (void *)&cmd_set_port_cman_cfg_port, > + (void *)&cmd_set_port_cman_cfg_cman, > + (void *)&cmd_set_port_cman_cfg_cfg, > + (void *)&cmd_set_port_cman_cfg_port_id, > + (void *)&cmd_set_port_cman_cfg_qid, > + (void *)&cmd_set_port_cman_cfg_params, > + NULL, > + }, > +}; > diff --git a/app/test-pmd/cmdline_cman.h b/app/test-pmd/cmdline_cman.h > new file mode 100644 index 0000000000..bd6c99ce35 > --- /dev/null > +++ b/app/test-pmd/cmdline_cman.h > @@ -0,0 +1,12 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(C) 2022 Marvell International Ltd. > + */ > + > +#ifndef _CMDLINE_CMAN_H_ > +#define _CMDLINE_CMAN_H_ > + > +extern cmdline_parse_inst_t cmd_show_port_cman_capa; extern > +cmdline_parse_inst_t cmd_show_port_cman_config; extern > +cmdline_parse_inst_t cmd_set_port_cman_config; > + > +#endif /* _CMDLINE_CMAN_H_ */ > diff --git a/app/test-pmd/meson.build b/app/test-pmd/meson.build index > 74399178dd..c03d9dfebb 100644 > --- a/app/test-pmd/meson.build > +++ b/app/test-pmd/meson.build > @@ -7,6 +7,7 @@ cflags +=3D '-Wno-deprecated-declarations' > sources =3D files( > '5tswap.c', > 'cmdline.c', > + 'cmdline_cman.c', > 'cmdline_flow.c', > 'cmdline_mtr.c', > 'cmdline_tm.c', > diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst > b/doc/guides/testpmd_app_ug/testpmd_funcs.rst > index d3075bf87d..b9c7b468af 100644 > --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst > +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst > @@ -5317,6 +5317,32 @@ Flex pattern can be shared between ports. > testpmd> flow create 0 ingress pattern eth / ipv4 / udp / flex item i= s 3 > pattern is 2 / end actions mark id 1 / queue index 0 / end > Flow rule #0 created >=20 > +Congestion Management > +--------------------- > + > +Get capabilities > +~~~~~~~~~~~~~~~~ > + > +Retrieve congestion management capabilities supported by driver for give= n > port. > +Below example command retrieves capabilities for port 0:: > + > + testpmd> show port cman capa 0 > + > +Get configuration > +~~~~~~~~~~~~~~~~~ > +Retrieve congestion management configuration for given port. Below > +example command retrieves configuration for port 0:: > + > + testpmd> show port cman config 0 > + > +Set configuration > +~~~~~~~~~~~~~~~~~ > +Configures congestion management settings on given queue or mempool > +associated with queue. Below example command configures RED as > +congestion management algo for port 0 and queue 0:: > + > + testpmd> set port cman config 0 0 obj queue mode red 10 100 1 > + > Driver specific commands > ------------------------ >=20 > -- > 2.25.1