[v9,7/9] ethdev: add API to get RSS algorithm names
Checks
Commit Message
This patch adds new API rte_eth_dev_rss_algo_name() to get
name of a RSS algorithm and document it.
Signed-off-by: Jie Hai <haijie1@huawei.com>
Acked-by: Huisong Li <lihuisong@huawei.com>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
---
app/test-pmd/config.c | 19 +------------------
doc/guides/rel_notes/release_23_11.rst | 5 +++++
lib/ethdev/rte_ethdev.c | 25 +++++++++++++++++++++++++
lib/ethdev/rte_ethdev.h | 16 ++++++++++++++++
lib/ethdev/version.map | 1 +
5 files changed, 48 insertions(+), 18 deletions(-)
Comments
On 11/2/23 11:20, Jie Hai wrote:
> This patch adds new API rte_eth_dev_rss_algo_name() to get
> name of a RSS algorithm and document it.
>
> Signed-off-by: Jie Hai <haijie1@huawei.com>
> Acked-by: Huisong Li <lihuisong@huawei.com>
> Acked-by: Chengwen Feng <fengchengwen@huawei.com>
<snip>
> @@ -4791,6 +4802,20 @@ rte_eth_dev_rss_hash_conf_get(uint16_t port_id,
> return ret;
> }
>
> +const char *
> +rte_eth_dev_rss_algo_name(enum rte_eth_hash_function rss_algo)
> +{
> + const char *name = "Unknown function";
> + unsigned int i;
> +
> + for (i = 0; i < RTE_DIM(rte_eth_dev_rss_algo_names); i++) {
> + if (rss_algo == rte_eth_dev_rss_algo_names[i].algo)
> + return rte_eth_dev_rss_algo_names[i].name;
> + }
> +
> + return name;
My 2c:
IMHO, usage of name variable here just complicate reading and forces
reader to find out which value 'name' has here. Just return
"Unknown function".
@@ -1504,24 +1504,7 @@ rss_config_display(struct rte_flow_action_rss *rss_conf)
printf(" %d", rss_conf->queue[i]);
printf("\n");
- printf(" function: ");
- switch (rss_conf->func) {
- case RTE_ETH_HASH_FUNCTION_DEFAULT:
- printf("default\n");
- break;
- case RTE_ETH_HASH_FUNCTION_TOEPLITZ:
- printf("toeplitz\n");
- break;
- case RTE_ETH_HASH_FUNCTION_SIMPLE_XOR:
- printf("simple_xor\n");
- break;
- case RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ:
- printf("symmetric_toeplitz\n");
- break;
- default:
- printf("Unknown function\n");
- return;
- }
+ printf(" function: %s\n", rte_eth_dev_rss_algo_name(rss_conf->func));
printf(" RSS key:\n");
if (rss_conf->key_len == 0) {
@@ -129,6 +129,11 @@ New Features
* Added new field ``algorithm`` to ``rte_eth_rss_conf`` structure for RSS
hash algorithm querying and configuring.
+* **Added new API for RSS hash algorithm**
+
+ Added new function ``rte_eth_dev_rss_algo_name`` to get name of RSS hash
+ algorithm.
+
* **Updated Amazon ena (Elastic Network Adapter) net driver.**
* Upgraded ENA HAL to latest version.
@@ -160,6 +160,17 @@ enum {
STAT_QMAP_RX
};
+static const struct {
+ enum rte_eth_hash_function algo;
+ const char *name;
+} rte_eth_dev_rss_algo_names[] = {
+ {RTE_ETH_HASH_FUNCTION_DEFAULT, "default"},
+ {RTE_ETH_HASH_FUNCTION_SIMPLE_XOR, "simple_xor"},
+ {RTE_ETH_HASH_FUNCTION_TOEPLITZ, "toeplitz"},
+ {RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ, "symmetric_toeplitz"},
+ {RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ_SORT, "symmetric_toeplitz_sort"},
+};
+
int
rte_eth_iterator_init(struct rte_dev_iterator *iter, const char *devargs_str)
{
@@ -4791,6 +4802,20 @@ rte_eth_dev_rss_hash_conf_get(uint16_t port_id,
return ret;
}
+const char *
+rte_eth_dev_rss_algo_name(enum rte_eth_hash_function rss_algo)
+{
+ const char *name = "Unknown function";
+ unsigned int i;
+
+ for (i = 0; i < RTE_DIM(rte_eth_dev_rss_algo_names); i++) {
+ if (rss_algo == rte_eth_dev_rss_algo_names[i].algo)
+ return rte_eth_dev_rss_algo_names[i].name;
+ }
+
+ return name;
+}
+
int
rte_eth_dev_udp_tunnel_port_add(uint16_t port_id,
struct rte_eth_udp_tunnel *udp_tunnel)
@@ -4643,6 +4643,22 @@ int
rte_eth_dev_rss_hash_conf_get(uint16_t port_id,
struct rte_eth_rss_conf *rss_conf);
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
+ *
+ * Get the name of RSS hash algorithm.
+ *
+ * @param rss_algo
+ * Hash algorithm.
+ *
+ * @return
+ * Hash algorithm name or 'UNKNOWN' if the rss_algo cannot be recognized.
+ */
+__rte_experimental
+const char *
+rte_eth_dev_rss_algo_name(enum rte_eth_hash_function rss_algo);
+
/**
* Add UDP tunneling port for a type of tunnel.
*
@@ -314,6 +314,7 @@ EXPERIMENTAL {
rte_flow_restore_info_dynflag;
# added in 23.11
+ rte_eth_dev_rss_algo_name;
rte_eth_recycle_rx_queue_info_get;
rte_flow_group_set_miss_actions;
rte_flow_calc_table_hash;