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 671C6A0548; Wed, 1 Jun 2022 11:01:05 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 559F740694; Wed, 1 Jun 2022 11:01:05 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2050.outbound.protection.outlook.com [40.107.237.50]) by mails.dpdk.org (Postfix) with ESMTP id 593DB40689 for ; Wed, 1 Jun 2022 11:01:04 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=C9nsnJBBrm2l4DzEA+OsYQFYuq1vciPsx2JLX9hckz/sEt0k3maX0SQCgC5pccdc6YfGAt6g6/OqmScNQuTnut8R/hEIpAz5Q2/+QFlmkrsSk6Frzsmlb9lRNZIcYSwjpsbNNvtuLpxqZen+mqGZQZHa+HlgJjDw7eLrq9VG4J5qiSx8z4bKDx9aPGCpJ54Hrm0NLppsTp9/YoeLYQNAmygSK4Dw4OCHymVEUWTyviS7Xv0UNtjAojbfZeXXuhwON3Jl2JTiDTBGvI37ioTNCV0eRu6hdKGgHw5AS5Hs4qNKgkhVEhKF0cvXG7vUWu9Il7zdnrO42pATeXlS+GUXyQ== 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=lapxb56p2xjEH9HSlkve3g310tdsN3I8T1BtTJXYQeg=; b=h1yO3VW8Fdfqv9B7vZyoYKAqAzDqStk2PvSKw7eT4MxNhR8qqrN/I6oOJLlVDAUW/W23iHCze+Q82jLg/7nthIhZcCw2/1SXYhpuFPKPAuHYdSpBwv9inEyEd1AUH5vuTiGqm5+HxOyrJcv1CCM2rvf39JlCmtfiqQWQfchkilVIOIKL2TZlvXpY4wuEnDW66JqI7DEGQpGO7CzwDMLDMFbtoLuMiu10ilOPsXuoD0VyTARncCJ0aRBpOkWw0yIi2rguMXtuEFOU0KguFmOtKmtn1bo8wF1zoGsO/mu3BH4ZpLTsR5QZZvWSD5/vLVd23KJvqIcZBZobhZSH97A7+w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lapxb56p2xjEH9HSlkve3g310tdsN3I8T1BtTJXYQeg=; b=Xpk+SGn+MYNScLajk8IherQxJvOn4Yhp16hdG1dErVT9oNeh2sD0QnXHSDnOYOLcjO98TlTq/VcYc/5U+50P8COCiLU+wDEj5r5een9hY25AgBC9Kww1/u5cMPZBCaPel2G/OxDR34J7L1BwyayXvo50LsJ6pfYXpNRTmI/vjGiIaFCdRMQGU5ZN4IdXkoCTbpmru4BwcFyiSWa4YEcEjsIBblt1eHQu+SsHEAZEbaBdIYG1wydPMOZZebcjf3Ge/8YrLn9De92cDm2nxoz8uV/jUywCKq3uVdwAxY4wcOKEm4S1HQN+NtTOQkFq1B5KcMJT8Z7A99m3nmoe4L26Tw== Received: from MW2PR12MB4666.namprd12.prod.outlook.com (2603:10b6:302:13::22) by BL1PR12MB5377.namprd12.prod.outlook.com (2603:10b6:208:31f::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.12; Wed, 1 Jun 2022 09:01:02 +0000 Received: from MW2PR12MB4666.namprd12.prod.outlook.com ([fe80::edeb:4144:1ee4:83a1]) by MW2PR12MB4666.namprd12.prod.outlook.com ([fe80::edeb:4144:1ee4:83a1%6]) with mapi id 15.20.5293.019; Wed, 1 Jun 2022 09:01:02 +0000 From: Ori Kam To: Alexander Kozyrev , "dev@dpdk.org" CC: "cristian.dumitrescu@intel.com" , "jerinjacobk@gmail.com" , "NBU-Contact-Thomas Monjalon (EXTERNAL)" , "ivan.malov@oktetlabs.ru" , "andrew.rybchenko@oktetlabs.ru" , "ferruh.yigit@xilinx.com" , "mohammad.abdul.awal@intel.com" , "qi.z.zhang@intel.com" , "jerinj@marvell.com" , "ajit.khaparde@broadcom.com" , "bruce.richardson@intel.com" Subject: RE: [PATCH v3 7/7] app/testpmd: add meter color mark flow action Thread-Topic: [PATCH v3 7/7] app/testpmd: add meter color mark flow action Thread-Index: AQHYdWn0G14FmPPo20CFR2TRu4YUla06QVSA Date: Wed, 1 Jun 2022 09:01:02 +0000 Message-ID: References: <20220522105102.1692526-1-akozyrev@nvidia.com> <20220601034408.2579943-1-akozyrev@nvidia.com> <20220601034408.2579943-8-akozyrev@nvidia.com> In-Reply-To: <20220601034408.2579943-8-akozyrev@nvidia.com> Accept-Language: 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=nvidia.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 371ebf83-e93c-4a93-50e0-08da43ad4129 x-ms-traffictypediagnostic: BL1PR12MB5377:EE_ x-ld-processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: MgXjLWZxpoAuBoRByIGpo6izkkEbLCQNOqjL9Rj6WSl5XITP2GnCun3Adio4P0HgxJ9Bua4AdDV9SjZpyTB+6bnudN4VHSYwhaoThZvX9TgtcOobNeUSRmcBNDGRtYtHHCFpRsCB/vTDT6okGWCY2+vDkFa2gyqS5MK0eZGSfyTKfH5CXbat19rD8eNPPWc5VzpAweY5ejb8Tj54JuHs5HPr859tiAm2LPQ/O+t5QjuOEa8ikTdV9WrhYAzDZrrZ/pN6ceGJWFWCDGf8OOJPvK2+5hads23Dtw16rejiKVmTU0dIyztvu7bmvO/TWPr2E7nsGPmhIuNSd/bZog+ByEGAPGnPikMHKzppU+GFGXZP0iVgDtqjjbEVK36QIv2zK8QbpFY46Lncan+wfIomDoD9iv1yZYhmriLdcLFKv+5/Ay6SYZ1Tnp6lBFNx9SAQZDWIExphHUwjvY3GwXZsrRB8CbxltgGLL3QSj21Ufl69FmvgT9u6M2rgLv/CJjH42CRQSLlWXjR5hkKY2ex9430q4Zoqqqr0cf19FYiP67X8AYNYcekKmuS24KOPh3l1v7W16AUIahmrPaAbaHCQUEZiqTJ2H2f4KEhHxbueJI6yJ0doDwm9yz1iJbjU6rDbeXtaBxpDU4nnrzPffjkgWgQ239dYvpaURx4xFSt01gaw8dDn6LL9ccSpC2JqgyObyXclUqcNk1Wl8YC6nOgjWw== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MW2PR12MB4666.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(4636009)(366004)(186003)(26005)(9686003)(53546011)(7696005)(8936002)(52536014)(6506007)(66476007)(66556008)(38070700005)(110136005)(316002)(122000001)(76116006)(4326008)(64756008)(66946007)(66446008)(8676002)(71200400001)(5660300002)(508600001)(38100700002)(7416002)(2906002)(33656002)(54906003)(86362001)(55016003)(83380400001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?cpW/NB4ClpJU6F8w1R+Z7ZaWkH4LdsEw7DC5oOXQ/m8wMAmqbTVX+72YdA56?= =?us-ascii?Q?wnR1MiGkhvUQY4gLAzCfuLbkShCtufOIuDSVYo+mR8jpzIPOHzlbfRfonA+G?= =?us-ascii?Q?gjr8qGuPWb8nKuDlyIcoYz0CKBbvoMrs4QdyZ1tSDVNbHG7h7hSrf5fA0yWs?= =?us-ascii?Q?DVYu8W5eB1rYV8GcUyjZG9CH3+zw45umt4GU42/g4wZKeKgTFgL/mKz+0NSA?= =?us-ascii?Q?knnfAVvub3HXtDTYTMyFBWxsApUMjnjkuSgtkdOk8ooiRHxzE6kn2Qf3464F?= =?us-ascii?Q?aCup8/H7YYh0XZdvGsQFkUQKRcty5LeD+96AxdH1Yc97q6UtGRFwmngEnhwz?= =?us-ascii?Q?Tv+fbaweVJnatcGaBMmoiBRC+UhTUI4MwGvaodT0W40B5z2XZjPP3cKmLYpD?= =?us-ascii?Q?0Sws16+3CECvoOFNJ3Kr6ZltC/p2hFpxS/s+rTys+tHMvYcJFQMYpve8HS5t?= =?us-ascii?Q?hjtqWbonQm5WFvA2LhXIZdnhWUzAJCCPmzedfFoce1EO9/pdxRIqF0TUMp5A?= =?us-ascii?Q?FcEvZ5QxjzKsa/L5LVKp+PIi7i3MqycJCQr28HZas1qdJpbfOEvIDWT+JHFR?= =?us-ascii?Q?PJlrIvylfFaAxKl9Zf3yxKuRSHa7wIm8NVeNI2rs2hTlEyJ1cRjyrpL5QdN0?= =?us-ascii?Q?IS8o+jRfKhWymtKHcX4zIW0QVv/COhZBHi0LQAwQyl6WwXSz6rnbHPdfoX9f?= =?us-ascii?Q?F9lKDHO7stuMEfsilvJzvbsNXsnCmXmslOlpm3W1GWPU9ZydZZuRjJ7NX4BO?= =?us-ascii?Q?jw+nsRtvK7v9AMcyZFHn2X3GsYp/AgzU505Lz7QpmRZsoOBpqTyNgxAn7yl8?= =?us-ascii?Q?QoLuqb9NmisKSlEQALkAa9SfTm1ixcKelfo9x+L0NCWM8UtQ3JOkijDcFnXt?= =?us-ascii?Q?wpEBgpY8M9urp0XGX8oL0A9lIBqm1N3fZceYiSt4Zkt49bxo259ODBRCqf9W?= =?us-ascii?Q?ctTSkA56nU+3zexV+4IwUZkjPpyJzzikmDkp3DeEBut1XoeVgCKfJGZvgGqD?= =?us-ascii?Q?eQlh15ocZOQgitaSx3Wa3tPerjvWB2Nrspu6R3hsCIjgR40bgcO7CT85GodG?= =?us-ascii?Q?uyuEaslKccgC5OCO61by7h+YO6CUcy0bNdYyE/MA26gfbFgFJuokeTla0QLe?= =?us-ascii?Q?G3RmVuCj7HwH3abCR79w+6tx4FycGQQ5oc4y+3xiBUrVYoRqabWERJ42/u2X?= =?us-ascii?Q?38oy+6raV2uv1hjUv2v6WOWB1Y6s/CohllMUMNTR0mM8Ulvy0Ei+ZChIO9v7?= =?us-ascii?Q?HnAw+NnFskZEEVfkyduDAeF6gK1aUFqq6jZ0Jr+WHsMOBqU2WCKeR+Yqh+hr?= =?us-ascii?Q?9KbDVUfowBI3QiJxJLdkOlhtCQ+97PSkBCsqNQAMAdPEz0yGjZp+hHlQn826?= =?us-ascii?Q?/Zr288jnvMJS0dT35aLew5dUzdXcbF4HZhV8621gk6v5fYpg9OZt85q088CQ?= =?us-ascii?Q?HcaoOQ1C5ADlBiKwhDrnmoVsAe8Jtr9Rl6s8B8mFLjDgp2XHDLHb70uilfGU?= =?us-ascii?Q?8wP118P09k9iCLdQhPo0uFWnCiJXh9J1nF+y98R/gDlgjGbJIfuagCzqb5R/?= =?us-ascii?Q?8kLJgmX7uVq0S8XvxVC/QrqErLeOJi7cJdidA9nr1DCd1IYIESo4BTScq6ZD?= =?us-ascii?Q?UshORfDkgcjy9IFYzrpuTtEFyg84YqSuZY2QgwEw8lpGCA6LonyWRq/FotMb?= =?us-ascii?Q?ytxZ3E2vzDKY6XBqgEkho9A5DgFxnPftyNrEoKJO5jIXXGh3r8wBOfBDbl8b?= =?us-ascii?Q?bqPVW31oLg=3D=3D?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW2PR12MB4666.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 371ebf83-e93c-4a93-50e0-08da43ad4129 X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Jun 2022 09:01:02.7663 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: lgY4upDjsSwz13kTzqqeYLTnGUpimBJV8JMDJqqyCAx5vnfX37vc4LiA5NNmpQhrrnKjr5uys3VZ95X0c3qKlw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5377 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 Hi Alexander, > -----Original Message----- > From: Alexander Kozyrev > Sent: Wednesday, June 1, 2022 6:44 AM > Subject: [PATCH v3 7/7] app/testpmd: add meter color mark flow action >=20 > Add testpmd command line to match for METER_MARK action: > flow create ... actions meter_mark mtr_profile 20 / end >=20 > Signed-off-by: Alexander Kozyrev > --- > app/test-pmd/cmdline_flow.c | 127 ++++++++++++++++++++ > app/test-pmd/config.c | 26 ++++ > app/test-pmd/testpmd.h | 4 + > doc/guides/testpmd_app_ug/testpmd_funcs.rst | 5 + > 4 files changed, 162 insertions(+) >=20 > diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c > index 401922fc34..7261d6f52e 100644 > --- a/app/test-pmd/cmdline_flow.c > +++ b/app/test-pmd/cmdline_flow.c > @@ -53,6 +53,7 @@ enum index { > COMMON_GROUP_ID, > COMMON_PRIORITY_LEVEL, > COMMON_INDIRECT_ACTION_ID, > + COMMON_PROFILE_ID, > COMMON_POLICY_ID, > COMMON_FLEX_HANDLE, > COMMON_FLEX_TOKEN, > @@ -508,6 +509,11 @@ enum index { > ACTION_METER_COLOR_YELLOW, > ACTION_METER_COLOR_RED, > ACTION_METER_ID, > + ACTION_METER_MARK, > + ACTION_METER_PROFILE, > + ACTION_METER_PROFILE_ID2PTR, > + ACTION_METER_POLICY, > + ACTION_METER_POLICY_ID2PTR, > ACTION_OF_SET_MPLS_TTL, > ACTION_OF_SET_MPLS_TTL_MPLS_TTL, > ACTION_OF_DEC_MPLS_TTL, > @@ -1835,6 +1841,7 @@ static const enum index next_action[] =3D { > ACTION_PORT_ID, > ACTION_METER, > ACTION_METER_COLOR, > + ACTION_METER_MARK, > ACTION_OF_SET_MPLS_TTL, > ACTION_OF_DEC_MPLS_TTL, > ACTION_OF_SET_NW_TTL, > @@ -1951,6 +1958,13 @@ static const enum index action_meter_color[] =3D { > ZERO, > }; >=20 > +static const enum index action_meter_mark[] =3D { > + ACTION_METER_PROFILE, > + ACTION_METER_POLICY, > + ACTION_NEXT, > + ZERO, > +}; > + > static const enum index action_of_set_mpls_ttl[] =3D { > ACTION_OF_SET_MPLS_TTL_MPLS_TTL, > ACTION_NEXT, > @@ -2389,6 +2403,14 @@ static int parse_mp(struct context *, const struct= token *, > static int parse_meter_color(struct context *ctx, const struct token *to= ken, > const char *str, unsigned int len, void *buf, > unsigned int size); > +static int parse_meter_profile_id2ptr(struct context *ctx, > + const struct token *token, > + const char *str, unsigned int len, > + void *buf, unsigned int size); > +static int parse_meter_policy_id2ptr(struct context *ctx, > + const struct token *token, > + const char *str, unsigned int len, > + void *buf, unsigned int size); > static int comp_none(struct context *, const struct token *, > unsigned int, char *, unsigned int); > static int comp_boolean(struct context *, const struct token *, > @@ -2550,6 +2572,13 @@ static const struct token token_list[] =3D { > .call =3D parse_int, > .comp =3D comp_none, > }, > + [COMMON_PROFILE_ID] =3D { > + .name =3D "{profile_id}", > + .type =3D "PROFILE_ID", > + .help =3D "profile id", > + .call =3D parse_int, > + .comp =3D comp_none, > + }, > [COMMON_POLICY_ID] =3D { > .name =3D "{policy_id}", > .type =3D "POLICY_ID", > @@ -5428,6 +5457,42 @@ static const struct token token_list[] =3D { > .args =3D ARGS(ARGS_ENTRY(struct rte_flow_action_meter, mtr_id)), > .call =3D parse_vc_conf, > }, > + [ACTION_METER_MARK] =3D { > + .name =3D "meter_mark", > + .help =3D "meter the directed packets using profile and policy", > + .priv =3D PRIV_ACTION(METER_MARK, > + sizeof(struct rte_flow_action_meter_mark)), > + .next =3D NEXT(action_meter_mark), > + .call =3D parse_vc, > + }, > + [ACTION_METER_PROFILE] =3D { > + .name =3D "mtr_profile", > + .help =3D "meter profile id to use", > + .next =3D NEXT(NEXT_ENTRY(ACTION_METER_PROFILE_ID2PTR)), > + .args =3D ARGS(ARGS_ENTRY_ARB(0, sizeof(uint32_t))), > + }, > + [ACTION_METER_PROFILE_ID2PTR] =3D { > + .name =3D "{mtr_profile_id}", > + .type =3D "PROFILE_ID", > + .help =3D "meter profile id", > + .next =3D NEXT(action_meter_mark), > + .call =3D parse_meter_profile_id2ptr, > + .comp =3D comp_none, > + }, > + [ACTION_METER_POLICY] =3D { > + .name =3D "mtr_policy", > + .help =3D "meter policy id to use", > + .next =3D NEXT(NEXT_ENTRY(ACTION_METER_POLICY_ID2PTR)), > + ARGS(ARGS_ENTRY_ARB(0, sizeof(uint32_t))), > + }, > + [ACTION_METER_POLICY_ID2PTR] =3D { > + .name =3D "{mtr_policy_id}", > + .type =3D "POLICY_ID", > + .help =3D "meter policy id", > + .next =3D NEXT(action_meter_mark), > + .call =3D parse_meter_policy_id2ptr, > + .comp =3D comp_none, > + }, > [ACTION_OF_SET_MPLS_TTL] =3D { > .name =3D "of_set_mpls_ttl", > .help =3D "OpenFlow's OFPAT_SET_MPLS_TTL", > @@ -9747,6 +9812,68 @@ parse_ia_id2ptr(struct context *ctx, const struct = token *token, > return ret; > } >=20 > +static int > +parse_meter_profile_id2ptr(struct context *ctx, const struct token *toke= n, > + const char *str, unsigned int len, > + void *buf, unsigned int size) > +{ > + struct rte_flow_action *action =3D ctx->object; > + struct rte_flow_action_meter_mark *meter; > + struct rte_flow_meter_profile *profile =3D NULL; > + uint32_t id; > + int ret; > + > + (void)buf; > + (void)size; > + ctx->objdata =3D 0; > + ctx->object =3D &id; > + ctx->objmask =3D NULL; > + ret =3D parse_int(ctx, token, str, len, ctx->object, sizeof(id)); > + ctx->object =3D action; > + if (ret !=3D (int)len) > + return ret; > + /* set meter profile */ > + if (action) { > + meter =3D (struct rte_flow_action_meter_mark *) > + (uintptr_t)(action->conf); > + profile =3D port_meter_profile_get_by_id(ctx->port, id); > + meter->profile =3D profile; > + ret =3D (profile) ? ret : -1; > + } > + return ret; > +} > + > +static int > +parse_meter_policy_id2ptr(struct context *ctx, const struct token *token= , > + const char *str, unsigned int len, > + void *buf, unsigned int size) > +{ > + struct rte_flow_action *action =3D ctx->object; > + struct rte_flow_action_meter_mark *meter; > + struct rte_flow_meter_policy *policy =3D NULL; > + uint32_t id; > + int ret; > + > + (void)buf; > + (void)size; > + ctx->objdata =3D 0; > + ctx->object =3D &id; > + ctx->objmask =3D NULL; > + ret =3D parse_int(ctx, token, str, len, ctx->object, sizeof(id)); > + ctx->object =3D action; > + if (ret !=3D (int)len) > + return ret; > + /* set meter policy */ > + if (action) { > + meter =3D (struct rte_flow_action_meter_mark *) > + (uintptr_t)(action->conf); > + policy =3D port_meter_policy_get_by_id(ctx->port, id); > + meter->policy =3D policy; > + ret =3D (policy) ? ret : -1; > + } > + return ret; > +} > + > /** Parse set command, initialize output buffer for subsequent tokens. *= / > static int > parse_set_raw_encap_decap(struct context *ctx, const struct token *token= , > diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c > index 1b1e738f83..413dcb6e9d 100644 > --- a/app/test-pmd/config.c > +++ b/app/test-pmd/config.c > @@ -2184,6 +2184,32 @@ port_meter_policy_add(portid_t port_id, uint32_t p= olicy_id, > return ret; > } >=20 > +/** Get port meter profile */ > +struct rte_flow_meter_profile * > +port_meter_profile_get_by_id(portid_t port_id, uint32_t id) > +{ > + struct rte_mtr_error error; > + struct rte_flow_meter_profile *profile; > + > + profile =3D rte_mtr_meter_profile_get(port_id, id, &error); > + if (!profile) > + print_mtr_err_msg(&error); > + return profile; > +} > + > +/** Get port meter policy */ > +struct rte_flow_meter_policy * > +port_meter_policy_get_by_id(portid_t port_id, uint32_t id) > +{ > + struct rte_mtr_error error; > + struct rte_flow_meter_policy *policy; > + > + policy =3D rte_mtr_meter_policy_get(port_id, id, &error); > + if (!policy) > + print_mtr_err_msg(&error); > + return policy; > +} > + > /** Validate flow rule. */ > int > port_flow_validate(portid_t port_id, > diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h > index f04a9a11b4..5fed46ae17 100644 > --- a/app/test-pmd/testpmd.h > +++ b/app/test-pmd/testpmd.h > @@ -985,6 +985,10 @@ void port_flow_tunnel_create(portid_t port_id, const= struct tunnel_ops > *ops); > int port_flow_isolate(portid_t port_id, int set); > int port_meter_policy_add(portid_t port_id, uint32_t policy_id, > const struct rte_flow_action *actions); > +struct rte_flow_meter_profile *port_meter_profile_get_by_id(portid_t por= t_id, > + uint32_t id); > +struct rte_flow_meter_policy *port_meter_policy_get_by_id(portid_t port_= id, > + uint32_t id); >=20 > void rx_ring_desc_display(portid_t port_id, queueid_t rxq_id, uint16_t r= xd_id); > void tx_ring_desc_display(portid_t port_id, queueid_t txq_id, uint16_t t= xd_id); > diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst > b/doc/guides/testpmd_app_ug/testpmd_funcs.rst > index 5e2f5ffb40..fd5a05dbad 100644 > --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst > +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst > @@ -4453,6 +4453,11 @@ This section lists supported actions and their att= ributes, if any. >=20 > - ``ethdev_port_id {unsigned}``: ethdev port ID >=20 > +- ``meter_mark``: meter the directed packets using profile and policy > + > + - ``mtr_profile {unsigned}``: meter profile id to use > + - ``mtr_policy {unsigned}``: meter policy id to use > + > Destroying flow rules > ~~~~~~~~~~~~~~~~~~~~~ >=20 > -- > 2.18.2 Acked-by: Ori Kam Best, Ori