From: Stephen Hemminger <stephen@networkplumber.org>
To: dev@dpdk.org
Cc: Stephen Hemminger <stephen@networkplumber.org>,
Cristian Dumitrescu <cristian.dumitrescu@intel.com>,
Thomas Monjalon <thomas@monjalon.net>,
Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Subject: [PATCH 01/22] ethdev: promote meter API to stable
Date: Tue, 1 Sep 2026 13:23:00 -0700 [thread overview]
Message-ID: <20260901203217.1485915-2-stephen@networkplumber.org> (raw)
In-Reply-To: <20260901203217.1485915-1-stephen@networkplumber.org>
The traffic metering and policing (MTR) API was introduced in v17.11
and has carried the experimental tag ever since. The core of the
interface - profile and object management, statistics and the meter
enable/disable controls - has not changed since it was added.
Later additions to the same API are promoted together with it, since
they are all long past the two-release probation:
17.11 profile add/delete/update, create, destroy, meter
enable/disable, dscp table update, capabilities get,
stats read/update
21.05 meter policy validate/add/delete/update
22.07 meter vlan table update, color in protocol set/get,
color in protocol priority get
22.11 meter profile get, meter policy get
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 4 +++
lib/ethdev/rte_mtr.c | 42 +++++++++++++-------------
lib/ethdev/rte_mtr.h | 24 ---------------
3 files changed, 25 insertions(+), 45 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index 87c7e81bde..03d4eaba40 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -95,6 +95,10 @@ API Changes
Also, make sure to start the actual text at the margin.
=======================================================
+* ethdev: Promoted the following API from experimental to stable:
+
+ * meter (MTR) and policing: ``rte_mtr_*``
+
ABI Changes
-----------
diff --git a/lib/ethdev/rte_mtr.c b/lib/ethdev/rte_mtr.c
index c6f0698ed3..4654ed83e9 100644
--- a/lib/ethdev/rte_mtr.c
+++ b/lib/ethdev/rte_mtr.c
@@ -78,7 +78,7 @@ __extension__ ({ \
})
/* MTR capabilities get */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_capabilities_get, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_capabilities_get)
int
rte_mtr_capabilities_get(uint16_t port_id,
struct rte_mtr_capabilities *cap,
@@ -95,7 +95,7 @@ rte_mtr_capabilities_get(uint16_t port_id,
}
/* MTR meter profile add */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_profile_add, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_profile_add)
int
rte_mtr_meter_profile_add(uint16_t port_id,
uint32_t meter_profile_id,
@@ -114,7 +114,7 @@ rte_mtr_meter_profile_add(uint16_t port_id,
}
/** MTR meter profile delete */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_profile_delete, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_profile_delete)
int
rte_mtr_meter_profile_delete(uint16_t port_id,
uint32_t meter_profile_id,
@@ -131,7 +131,7 @@ rte_mtr_meter_profile_delete(uint16_t port_id,
}
/** MTR meter profile get */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_profile_get, 22.11)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_profile_get)
struct rte_flow_meter_profile *
rte_mtr_meter_profile_get(uint16_t port_id,
uint32_t meter_profile_id,
@@ -148,7 +148,7 @@ rte_mtr_meter_profile_get(uint16_t port_id,
}
/* MTR meter policy validate */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_policy_validate, 21.05)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_policy_validate)
int
rte_mtr_meter_policy_validate(uint16_t port_id,
struct rte_mtr_meter_policy_params *policy,
@@ -165,7 +165,7 @@ rte_mtr_meter_policy_validate(uint16_t port_id,
}
/* MTR meter policy add */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_policy_add, 21.05)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_policy_add)
int
rte_mtr_meter_policy_add(uint16_t port_id,
uint32_t policy_id,
@@ -183,7 +183,7 @@ rte_mtr_meter_policy_add(uint16_t port_id,
}
/** MTR meter policy delete */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_policy_delete, 21.05)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_policy_delete)
int
rte_mtr_meter_policy_delete(uint16_t port_id,
uint32_t policy_id,
@@ -200,7 +200,7 @@ rte_mtr_meter_policy_delete(uint16_t port_id,
}
/** MTR meter policy get */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_policy_get, 22.11)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_policy_get)
struct rte_flow_meter_policy *
rte_mtr_meter_policy_get(uint16_t port_id,
uint32_t policy_id,
@@ -217,7 +217,7 @@ rte_mtr_meter_policy_get(uint16_t port_id,
}
/** MTR object create */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_create, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_create)
int
rte_mtr_create(uint16_t port_id,
uint32_t mtr_id,
@@ -236,7 +236,7 @@ rte_mtr_create(uint16_t port_id,
}
/** MTR object destroy */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_destroy, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_destroy)
int
rte_mtr_destroy(uint16_t port_id,
uint32_t mtr_id,
@@ -253,7 +253,7 @@ rte_mtr_destroy(uint16_t port_id,
}
/** MTR object meter enable */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_enable, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_enable)
int
rte_mtr_meter_enable(uint16_t port_id,
uint32_t mtr_id,
@@ -270,7 +270,7 @@ rte_mtr_meter_enable(uint16_t port_id,
}
/** MTR object meter disable */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_disable, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_disable)
int
rte_mtr_meter_disable(uint16_t port_id,
uint32_t mtr_id,
@@ -287,7 +287,7 @@ rte_mtr_meter_disable(uint16_t port_id,
}
/** MTR object meter profile update */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_profile_update, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_profile_update)
int
rte_mtr_meter_profile_update(uint16_t port_id,
uint32_t mtr_id,
@@ -305,7 +305,7 @@ rte_mtr_meter_profile_update(uint16_t port_id,
}
/** MTR object meter policy update */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_policy_update, 21.05)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_policy_update)
int
rte_mtr_meter_policy_update(uint16_t port_id,
uint32_t mtr_id,
@@ -323,7 +323,7 @@ rte_mtr_meter_policy_update(uint16_t port_id,
}
/** MTR object meter DSCP table update */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_dscp_table_update, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_dscp_table_update)
int
rte_mtr_meter_dscp_table_update(uint16_t port_id,
uint32_t mtr_id, enum rte_mtr_color_in_protocol proto,
@@ -341,7 +341,7 @@ rte_mtr_meter_dscp_table_update(uint16_t port_id,
}
/** MTR object meter VLAN table update */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_vlan_table_update, 22.07)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_vlan_table_update)
int
rte_mtr_meter_vlan_table_update(uint16_t port_id,
uint32_t mtr_id, enum rte_mtr_color_in_protocol proto,
@@ -359,7 +359,7 @@ rte_mtr_meter_vlan_table_update(uint16_t port_id,
}
/** Set the input color protocol on MTR object */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_color_in_protocol_set, 22.07)
+RTE_EXPORT_SYMBOL(rte_mtr_color_in_protocol_set)
int
rte_mtr_color_in_protocol_set(uint16_t port_id,
uint32_t mtr_id,
@@ -378,7 +378,7 @@ rte_mtr_color_in_protocol_set(uint16_t port_id,
}
/** Get input color protocols of MTR object */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_color_in_protocol_get, 22.07)
+RTE_EXPORT_SYMBOL(rte_mtr_color_in_protocol_get)
int
rte_mtr_color_in_protocol_get(uint16_t port_id,
uint32_t mtr_id,
@@ -396,7 +396,7 @@ rte_mtr_color_in_protocol_get(uint16_t port_id,
}
/** Get input color protocol priority of MTR object */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_color_in_protocol_priority_get, 22.07)
+RTE_EXPORT_SYMBOL(rte_mtr_color_in_protocol_priority_get)
int
rte_mtr_color_in_protocol_priority_get(uint16_t port_id,
uint32_t mtr_id,
@@ -415,7 +415,7 @@ rte_mtr_color_in_protocol_priority_get(uint16_t port_id,
}
/** MTR object enabled stats update */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_stats_update, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_stats_update)
int
rte_mtr_stats_update(uint16_t port_id,
uint32_t mtr_id,
@@ -433,7 +433,7 @@ rte_mtr_stats_update(uint16_t port_id,
}
/** MTR object stats read */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_stats_read, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_stats_read)
int
rte_mtr_stats_read(uint16_t port_id,
uint32_t mtr_id,
diff --git a/lib/ethdev/rte_mtr.h b/lib/ethdev/rte_mtr.h
index 30e6c6b12e..0a7782d4a3 100644
--- a/lib/ethdev/rte_mtr.h
+++ b/lib/ethdev/rte_mtr.h
@@ -41,9 +41,6 @@
* A) Whether an MTR object is private to a flow or potentially shared by
* several flows has to be specified at creation time.
* B) Several meter actions can be potentially registered for the same flow.
- *
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
*/
#include <stdint.h>
#include <rte_compat.h>
@@ -569,7 +566,6 @@ struct rte_mtr_error {
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_capabilities_get(uint16_t port_id,
struct rte_mtr_capabilities *cap,
@@ -593,7 +589,6 @@ rte_mtr_capabilities_get(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_profile_add(uint16_t port_id,
uint32_t meter_profile_id,
@@ -615,7 +610,6 @@ rte_mtr_meter_profile_add(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_profile_delete(uint16_t port_id,
uint32_t meter_profile_id,
@@ -635,7 +629,6 @@ rte_mtr_meter_profile_delete(uint16_t port_id,
* @return
* A valid handle in case of success, NULL otherwise.
*/
-__rte_experimental
struct rte_flow_meter_profile *
rte_mtr_meter_profile_get(uint16_t port_id,
uint32_t meter_profile_id,
@@ -663,7 +656,6 @@ rte_mtr_meter_profile_get(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_policy_validate(uint16_t port_id,
struct rte_mtr_meter_policy_params *policy,
@@ -690,7 +682,6 @@ rte_mtr_meter_policy_validate(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_policy_add(uint16_t port_id,
uint32_t policy_id,
@@ -711,7 +702,6 @@ rte_mtr_meter_policy_add(uint16_t port_id,
* @return
* A valid handle in case of success, NULL otherwise.
*/
-__rte_experimental
struct rte_flow_meter_policy *
rte_mtr_meter_policy_get(uint16_t port_id,
uint32_t policy_id,
@@ -793,7 +783,6 @@ struct rte_mtr_meter_policy_params policy = \
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_policy_delete(uint16_t port_id,
uint32_t policy_id,
@@ -822,7 +811,6 @@ rte_mtr_meter_policy_delete(uint16_t port_id,
*
* @see enum rte_flow_action_type::RTE_FLOW_ACTION_TYPE_METER
*/
-__rte_experimental
int
rte_mtr_create(uint16_t port_id,
uint32_t mtr_id,
@@ -846,7 +834,6 @@ rte_mtr_create(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_destroy(uint16_t port_id,
uint32_t mtr_id,
@@ -874,7 +861,6 @@ rte_mtr_destroy(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_disable(uint16_t port_id,
uint32_t mtr_id,
@@ -896,7 +882,6 @@ rte_mtr_meter_disable(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_enable(uint16_t port_id,
uint32_t mtr_id,
@@ -916,7 +901,6 @@ rte_mtr_meter_enable(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_profile_update(uint16_t port_id,
uint32_t mtr_id,
@@ -937,7 +921,6 @@ rte_mtr_meter_profile_update(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_policy_update(uint16_t port_id,
uint32_t mtr_id,
@@ -964,7 +947,6 @@ rte_mtr_meter_policy_update(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_dscp_table_update(uint16_t port_id,
uint32_t mtr_id, enum rte_mtr_color_in_protocol proto,
@@ -991,7 +973,6 @@ rte_mtr_meter_dscp_table_update(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_vlan_table_update(uint16_t port_id, uint32_t mtr_id,
enum rte_mtr_color_in_protocol proto,
@@ -1022,7 +1003,6 @@ rte_mtr_meter_vlan_table_update(uint16_t port_id, uint32_t mtr_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_color_in_protocol_set(uint16_t port_id, uint32_t mtr_id,
enum rte_mtr_color_in_protocol proto, uint32_t priority,
@@ -1042,7 +1022,6 @@ rte_mtr_color_in_protocol_set(uint16_t port_id, uint32_t mtr_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_color_in_protocol_get(uint16_t port_id, uint32_t mtr_id,
uint64_t *proto_mask,
@@ -1064,7 +1043,6 @@ rte_mtr_color_in_protocol_get(uint16_t port_id, uint32_t mtr_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_color_in_protocol_priority_get(uint16_t port_id, uint32_t mtr_id,
enum rte_mtr_color_in_protocol proto, uint32_t *priority,
@@ -1088,7 +1066,6 @@ rte_mtr_color_in_protocol_priority_get(uint16_t port_id, uint32_t mtr_id,
*
* @see enum rte_mtr_stats_type
*/
-__rte_experimental
int
rte_mtr_stats_update(uint16_t port_id,
uint32_t mtr_id,
@@ -1120,7 +1097,6 @@ rte_mtr_stats_update(uint16_t port_id,
*
* @see enum rte_mtr_stats_type
*/
-__rte_experimental
int
rte_mtr_stats_read(uint16_t port_id,
uint32_t mtr_id,
--
2.53.0
next prev parent reply other threads:[~2026-09-01 20:32 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
2026-09-01 20:23 ` Stephen Hemminger [this message]
2026-09-01 20:23 ` [PATCH 02/22] ethdev: promote module EEPROM API to stable Stephen Hemminger
2026-09-01 20:23 ` [PATCH 03/22] ethdev: promote rte_flow_conv " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 04/22] ethdev: promote hairpin API " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 05/22] ethdev: promote read clock and flow dump " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 06/22] ethdev: promote FEC API " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 07/22] ethdev: promote link speed helpers " Stephen Hemminger
2026-09-02 8:05 ` Bruce Richardson
2026-09-01 20:23 ` [PATCH 08/22] ethdev: promote flow tunnel offload API " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 09/22] ethdev: promote aged flow query " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 10/22] ethdev: promote indirect action API " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 11/22] ethdev: promote asynchronous flow " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 12/22] ethdev: promote flex item " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 13/22] ethdev: promote remaining aged flow helpers " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 14/22] ethdev: promote congestion management API " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 15/22] ethdev: promote IP reassembly offload " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 16/22] ethdev: promote per-queue priority flow control " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 17/22] ethdev: promote device info and dump helpers " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 18/22] ethdev: promote speed lanes API " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 19/22] ethdev: promote queue helpers and aggregated ports " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 20/22] ethdev: promote remaining aged symbols " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 21/22] ethdev: promote fast path inline helpers " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 22/22] ethdev: promote experimental structures " Stephen Hemminger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260901203217.1485915-2-stephen@networkplumber.org \
--to=stephen@networkplumber.org \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=cristian.dumitrescu@intel.com \
--cc=dev@dpdk.org \
--cc=thomas@monjalon.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.