From: Stephen Hemminger <stephen@networkplumber.org>
To: dev@dpdk.org
Cc: Stephen Hemminger <stephen@networkplumber.org>,
Cristian Dumitrescu <cristian.dumitrescu@intel.com>
Subject: [PATCH 09/20] table: promote SWX table API to stable
Date: Wed, 7 Oct 2026 14:39:39 -0700 [thread overview]
Message-ID: <20261007214115.3092715-10-stephen@networkplumber.org> (raw)
In-Reply-To: <20261007214115.3092715-1-stephen@networkplumber.org>
The SWX table symbols have been experimental since 20.11 (exact match),
21.05 (wildcard match), 21.08 (selector) and 21.11 (learner), with only
the learner timeout and rearm additions in 22.07 being more recent.
The interface has been unchanged for several releases and is the only
table API remaining now that the legacy rte_table_* API has been
removed, so promote it to stable.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
lib/table/rte_swx_table_em.c | 4 ++--
lib/table/rte_swx_table_learner.c | 20 ++++++++++----------
lib/table/rte_swx_table_learner.h | 12 ------------
lib/table/rte_swx_table_selector.c | 12 ++++++------
lib/table/rte_swx_table_selector.h | 8 --------
lib/table/rte_swx_table_wm.c | 2 +-
6 files changed, 19 insertions(+), 39 deletions(-)
diff --git a/lib/table/rte_swx_table_em.c b/lib/table/rte_swx_table_em.c
index c408ea6fc3..ad49443389 100644
--- a/lib/table/rte_swx_table_em.c
+++ b/lib/table/rte_swx_table_em.c
@@ -646,7 +646,7 @@ table_footprint(struct rte_swx_table_params *params,
return memory_footprint;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_exact_match_unoptimized_ops, 20.11)
+RTE_EXPORT_SYMBOL(rte_swx_table_exact_match_unoptimized_ops)
struct rte_swx_table_ops rte_swx_table_exact_match_unoptimized_ops = {
.footprint_get = table_footprint,
.mailbox_size_get = table_mailbox_size_get_unoptimized,
@@ -657,7 +657,7 @@ struct rte_swx_table_ops rte_swx_table_exact_match_unoptimized_ops = {
.free = table_free,
};
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_exact_match_ops, 20.11)
+RTE_EXPORT_SYMBOL(rte_swx_table_exact_match_ops)
struct rte_swx_table_ops rte_swx_table_exact_match_ops = {
.footprint_get = table_footprint,
.mailbox_size_get = table_mailbox_size_get,
diff --git a/lib/table/rte_swx_table_learner.c b/lib/table/rte_swx_table_learner.c
index 3680bf26c1..633f9df2e2 100644
--- a/lib/table/rte_swx_table_learner.c
+++ b/lib/table/rte_swx_table_learner.c
@@ -273,7 +273,7 @@ table_entry_id_get(struct table *t, struct table_bucket *b, size_t bucket_key_po
return (bucket_id << TABLE_KEYS_PER_BUCKET_LOG2) + bucket_key_pos;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_footprint_get, 21.11)
+RTE_EXPORT_SYMBOL(rte_swx_table_learner_footprint_get)
uint64_t
rte_swx_table_learner_footprint_get(struct rte_swx_table_learner_params *params)
{
@@ -285,7 +285,7 @@ rte_swx_table_learner_footprint_get(struct rte_swx_table_learner_params *params)
return status ? 0 : p.total_size;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_create, 21.11)
+RTE_EXPORT_SYMBOL(rte_swx_table_learner_create)
void *
rte_swx_table_learner_create(struct rte_swx_table_learner_params *params, int numa_node)
{
@@ -309,7 +309,7 @@ rte_swx_table_learner_create(struct rte_swx_table_learner_params *params, int nu
return t;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_free, 21.11)
+RTE_EXPORT_SYMBOL(rte_swx_table_learner_free)
void
rte_swx_table_learner_free(void *table)
{
@@ -321,7 +321,7 @@ rte_swx_table_learner_free(void *table)
env_free(t, t->params.total_size);
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_timeout_update, 22.07)
+RTE_EXPORT_SYMBOL(rte_swx_table_learner_timeout_update)
int
rte_swx_table_learner_timeout_update(void *table,
uint32_t key_timeout_id,
@@ -359,14 +359,14 @@ struct mailbox {
int state;
};
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_mailbox_size_get, 21.11)
+RTE_EXPORT_SYMBOL(rte_swx_table_learner_mailbox_size_get)
uint64_t
rte_swx_table_learner_mailbox_size_get(void)
{
return sizeof(struct mailbox);
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_lookup, 21.11)
+RTE_EXPORT_SYMBOL(rte_swx_table_learner_lookup)
int
rte_swx_table_learner_lookup(void *table,
void *mailbox,
@@ -453,7 +453,7 @@ rte_swx_table_learner_lookup(void *table,
}
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_rearm, 22.07)
+RTE_EXPORT_SYMBOL(rte_swx_table_learner_rearm)
void
rte_swx_table_learner_rearm(void *table,
void *mailbox,
@@ -477,7 +477,7 @@ rte_swx_table_learner_rearm(void *table,
b->time[bucket_key_pos] = (input_time + key_timeout) >> 32;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_rearm_new, 22.07)
+RTE_EXPORT_SYMBOL(rte_swx_table_learner_rearm_new)
void
rte_swx_table_learner_rearm_new(void *table,
void *mailbox,
@@ -502,7 +502,7 @@ rte_swx_table_learner_rearm_new(void *table,
b->key_timeout_id[bucket_key_pos] = (uint8_t)key_timeout_id;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_add, 21.11)
+RTE_EXPORT_SYMBOL(rte_swx_table_learner_add)
uint32_t
rte_swx_table_learner_add(void *table,
void *mailbox,
@@ -579,7 +579,7 @@ rte_swx_table_learner_add(void *table,
return 1;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_delete, 21.11)
+RTE_EXPORT_SYMBOL(rte_swx_table_learner_delete)
void
rte_swx_table_learner_delete(void *table __rte_unused,
void *mailbox)
diff --git a/lib/table/rte_swx_table_learner.h b/lib/table/rte_swx_table_learner.h
index 9a18be083d..92f1ed949e 100644
--- a/lib/table/rte_swx_table_learner.h
+++ b/lib/table/rte_swx_table_learner.h
@@ -45,8 +45,6 @@
#include <stdint.h>
#include <sys/types.h>
-#include <rte_compat.h>
-
#include "rte_swx_hash_func.h"
#ifdef __cplusplus
@@ -107,7 +105,6 @@ struct rte_swx_table_learner_params {
* @return
* Table memory footprint in bytes.
*/
-__rte_experimental
uint64_t
rte_swx_table_learner_footprint_get(struct rte_swx_table_learner_params *params);
@@ -121,7 +118,6 @@ rte_swx_table_learner_footprint_get(struct rte_swx_table_learner_params *params)
* @return
* Table mailbox footprint in bytes.
*/
-__rte_experimental
uint64_t
rte_swx_table_learner_mailbox_size_get(void);
@@ -135,7 +131,6 @@ rte_swx_table_learner_mailbox_size_get(void);
* @return
* Table handle, on success, or NULL, on error.
*/
-__rte_experimental
void *
rte_swx_table_learner_create(struct rte_swx_table_learner_params *params, int numa_node);
@@ -152,7 +147,6 @@ rte_swx_table_learner_create(struct rte_swx_table_learner_params *params, int nu
* 0 on success or the following error codes otherwise:
* -EINVAL: Invalid argument(s).
*/
-__rte_experimental
int
rte_swx_table_learner_timeout_update(void *table,
uint32_t key_timeout_id,
@@ -206,7 +200,6 @@ rte_swx_table_learner_timeout_update(void *table,
* 0 when the table lookup operation is not yet completed, and 1 when the table lookup operation
* is completed. No other return values are allowed.
*/
-__rte_experimental
int
rte_swx_table_learner_lookup(void *table,
void *mailbox,
@@ -239,7 +232,6 @@ rte_swx_table_learner_lookup(void *table,
* @return
* 0 on success, 1 or error (table full).
*/
-__rte_experimental
uint32_t
rte_swx_table_learner_add(void *table,
void *mailbox,
@@ -261,7 +253,6 @@ rte_swx_table_learner_add(void *table,
* @param[in] time
* Current time measured in CPU clock cycles.
*/
-__rte_experimental
void
rte_swx_table_learner_rearm(void *table,
void *mailbox,
@@ -282,7 +273,6 @@ rte_swx_table_learner_rearm(void *table,
* @param[in] key_timeout_id
* Key timeout ID.
*/
-__rte_experimental
void
rte_swx_table_learner_rearm_new(void *table,
void *mailbox,
@@ -301,7 +291,6 @@ rte_swx_table_learner_rearm_new(void *table,
* @param[in] mailbox
* Mailbox for the current operation.
*/
-__rte_experimental
void
rte_swx_table_learner_delete(void *table,
void *mailbox);
@@ -312,7 +301,6 @@ rte_swx_table_learner_delete(void *table,
* @param[in] table
* Table handle.
*/
-__rte_experimental
void
rte_swx_table_learner_free(void *table);
diff --git a/lib/table/rte_swx_table_selector.c b/lib/table/rte_swx_table_selector.c
index d42f67f157..041fc70db5 100644
--- a/lib/table/rte_swx_table_selector.c
+++ b/lib/table/rte_swx_table_selector.c
@@ -171,7 +171,7 @@ struct table {
uint32_t n_members_per_group_max_log2;
};
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_selector_footprint_get, 21.08)
+RTE_EXPORT_SYMBOL(rte_swx_table_selector_footprint_get)
uint64_t
rte_swx_table_selector_footprint_get(uint32_t n_groups_max, uint32_t n_members_per_group_max)
{
@@ -184,7 +184,7 @@ rte_swx_table_selector_footprint_get(uint32_t n_groups_max, uint32_t n_members_p
return sizeof(struct table) + group_table_size + members_size;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_selector_free, 21.08)
+RTE_EXPORT_SYMBOL(rte_swx_table_selector_free)
void
rte_swx_table_selector_free(void *table)
{
@@ -262,7 +262,7 @@ group_set(struct table *t,
uint32_t group_id,
struct rte_swx_table_selector_group *group);
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_selector_create, 21.08)
+RTE_EXPORT_SYMBOL(rte_swx_table_selector_create)
void *
rte_swx_table_selector_create(struct rte_swx_table_selector_params *params,
struct rte_swx_table_selector_group **groups,
@@ -532,7 +532,7 @@ group_set(struct table *t,
return 0;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_selector_group_set, 21.08)
+RTE_EXPORT_SYMBOL(rte_swx_table_selector_group_set)
int
rte_swx_table_selector_group_set(void *table,
uint32_t group_id,
@@ -547,14 +547,14 @@ struct mailbox {
};
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_selector_mailbox_size_get, 21.08)
+RTE_EXPORT_SYMBOL(rte_swx_table_selector_mailbox_size_get)
uint64_t
rte_swx_table_selector_mailbox_size_get(void)
{
return sizeof(struct mailbox);
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_selector_select, 21.08)
+RTE_EXPORT_SYMBOL(rte_swx_table_selector_select)
int
rte_swx_table_selector_select(void *table,
void *mailbox __rte_unused,
diff --git a/lib/table/rte_swx_table_selector.h b/lib/table/rte_swx_table_selector.h
index ef29bdb6b0..d13f556803 100644
--- a/lib/table/rte_swx_table_selector.h
+++ b/lib/table/rte_swx_table_selector.h
@@ -13,8 +13,6 @@
#include <stdint.h>
-#include <rte_compat.h>
-
#include "rte_swx_table.h"
#ifdef __cplusplus
@@ -83,7 +81,6 @@ struct rte_swx_table_selector_group {
* @return
* Selector table memory footprint in bytes.
*/
-__rte_experimental
uint64_t
rte_swx_table_selector_footprint_get(uint32_t n_groups_max, uint32_t n_members_per_group_max);
@@ -97,7 +94,6 @@ rte_swx_table_selector_footprint_get(uint32_t n_groups_max, uint32_t n_members_p
* @return
* Selector table mailbox footprint in bytes.
*/
-__rte_experimental
uint64_t
rte_swx_table_selector_mailbox_size_get(void);
@@ -115,7 +111,6 @@ rte_swx_table_selector_mailbox_size_get(void);
* @return
* Table handle, on success, or NULL, on error.
*/
-__rte_experimental
void *
rte_swx_table_selector_create(struct rte_swx_table_selector_params *params,
struct rte_swx_table_selector_group **groups,
@@ -135,7 +130,6 @@ rte_swx_table_selector_create(struct rte_swx_table_selector_params *params,
* -EINVAL: Invalid argument(s);
* -ENOSPC: Too many group members.
*/
-__rte_experimental
int
rte_swx_table_selector_group_set(void *table,
uint32_t group_id,
@@ -177,7 +171,6 @@ rte_swx_table_selector_group_set(void *table,
* 0 when the operation is not yet completed, and 1 when the operation is complete. No other
* return values are allowed.
*/
-__rte_experimental
int
rte_swx_table_selector_select(void *table,
void *mailbox,
@@ -191,7 +184,6 @@ rte_swx_table_selector_select(void *table,
* @param[in] table
* Selector table handle.
*/
-__rte_experimental
void
rte_swx_table_selector_free(void *table);
diff --git a/lib/table/rte_swx_table_wm.c b/lib/table/rte_swx_table_wm.c
index c57738dda3..626192341a 100644
--- a/lib/table/rte_swx_table_wm.c
+++ b/lib/table/rte_swx_table_wm.c
@@ -458,7 +458,7 @@ table_lookup(void *table,
return 1;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_wildcard_match_ops, 21.05)
+RTE_EXPORT_SYMBOL(rte_swx_table_wildcard_match_ops)
struct rte_swx_table_ops rte_swx_table_wildcard_match_ops = {
.footprint_get = NULL,
.mailbox_size_get = table_mailbox_size_get,
--
2.53.0
next prev parent reply other threads:[~2026-10-07 21:42 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-07 21:39 [PATCH 00/20] promote long standing experimental API to stable Stephen Hemminger
2026-10-07 21:39 ` [PATCH 01/20] eal: add missing export for rte_basename Stephen Hemminger
2026-10-08 9:56 ` Bruce Richardson
2026-10-07 21:39 ` [PATCH 02/20] eal: promote rte_basename to stable Stephen Hemminger
2026-10-08 9:56 ` Bruce Richardson
2026-10-07 21:39 ` [PATCH 03/20] eal: promote explicit zero and sensitive free " Stephen Hemminger
2026-10-08 10:01 ` Bruce Richardson
2026-10-07 21:39 ` [PATCH 04/20] eal: promote rte_size_to_str " Stephen Hemminger
2026-10-08 10:01 ` Bruce Richardson
2026-10-07 21:39 ` [PATCH 05/20] eal: promote lcore variables API " Stephen Hemminger
2026-10-08 10:04 ` Bruce Richardson
2026-10-07 21:39 ` [PATCH 06/20] cmdline: promote bool token ops " Stephen Hemminger
2026-10-08 10:05 ` Bruce Richardson
2026-10-07 21:39 ` [PATCH 07/20] ethdev: promote link connector to string " Stephen Hemminger
2026-10-07 21:39 ` [PATCH 08/20] port: promote SWX port API " Stephen Hemminger
2026-10-07 21:39 ` Stephen Hemminger [this message]
2026-10-07 21:39 ` [PATCH 10/20] pipeline: promote SWX IPsec " Stephen Hemminger
2026-10-07 21:39 ` [PATCH 11/20] pipeline: promote SWX pipeline and control " Stephen Hemminger
2026-10-07 21:39 ` [PATCH 12/20] power: promote PM QoS and uncore " Stephen Hemminger
2026-10-07 21:39 ` [PATCH 13/20] ring: promote soring " Stephen Hemminger
2026-10-07 21:39 ` [PATCH 14/20] dispatcher: promote " Stephen Hemminger
2026-10-07 21:39 ` [PATCH 15/20] argparse: " Stephen Hemminger
2026-10-08 10:15 ` Bruce Richardson
2026-10-07 21:39 ` [PATCH 16/20] node: " Stephen Hemminger
2026-10-07 21:39 ` [PATCH 17/20] hash: promote RCU reclaim and thash key generation " Stephen Hemminger
2026-10-08 10:16 ` Bruce Richardson
2026-10-07 21:39 ` [PATCH 18/20] cryptodev: promote algorithm helpers " Stephen Hemminger
2026-10-07 21:39 ` [PATCH 19/20] pdcp: promote API " Stephen Hemminger
2026-10-07 21:39 ` [PATCH 20/20] mempool: promote memory range and alignment " Stephen Hemminger
2026-10-08 7:19 ` Morten Brørup
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=20261007214115.3092715-10-stephen@networkplumber.org \
--to=stephen@networkplumber.org \
--cc=cristian.dumitrescu@intel.com \
--cc=dev@dpdk.org \
/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.