[PATCH v2 05/13] ethdev: support RxTx offload display
Jie Hai
haijie1 at huawei.com
Wed Jun 7 09:42:00 CEST 2023
Currently, Rx/Tx offloads are displayed in numeric format,
which is not easy to understand. This patch fixes it.
Signed-off-by: Jie Hai <haijie1 at huawei.com>
---
lib/ethdev/rte_ethdev_telemetry.c | 64 ++++++++++++++++++++++++++-----
1 file changed, 55 insertions(+), 9 deletions(-)
diff --git a/lib/ethdev/rte_ethdev_telemetry.c b/lib/ethdev/rte_ethdev_telemetry.c
index 6ba7adf7d08f..3b6060a7356a 100644
--- a/lib/ethdev/rte_ethdev_telemetry.c
+++ b/lib/ethdev/rte_ethdev_telemetry.c
@@ -248,11 +248,38 @@ eth_dev_handle_port_link_status(const char *cmd __rte_unused,
return 0;
}
+static void
+eth_dev_parse_rx_offloads(uint64_t offload, struct rte_tel_data *d)
+{
+ uint64_t i;
+
+ rte_tel_data_start_array(d, RTE_TEL_STRING_VAL);
+ for (i = 0; i < CHAR_BIT * sizeof(offload); i++) {
+ if ((offload & RTE_BIT64(i)) != 0)
+ rte_tel_data_add_array_string(d,
+ rte_eth_dev_rx_offload_name(offload & RTE_BIT64(i)));
+ }
+}
+
+static void
+eth_dev_parse_tx_offloads(uint64_t offload, struct rte_tel_data *d)
+{
+ uint64_t i;
+
+ rte_tel_data_start_array(d, RTE_TEL_STRING_VAL);
+ for (i = 0; i < CHAR_BIT * sizeof(offload); i++) {
+ if ((offload & RTE_BIT64(i)) != 0)
+ rte_tel_data_add_array_string(d,
+ rte_eth_dev_tx_offload_name(offload & RTE_BIT64(i)));
+ }
+}
+
static int
eth_dev_handle_port_info(const char *cmd __rte_unused,
const char *params,
struct rte_tel_data *d)
{
+ struct rte_tel_data *rx_offload, *tx_offload;
struct rte_tel_data *rxq_state, *txq_state;
char mac_addr[RTE_ETHER_ADDR_FMT_SIZE];
struct rte_eth_dev *eth_dev;
@@ -268,14 +295,20 @@ eth_dev_handle_port_info(const char *cmd __rte_unused,
eth_dev = &rte_eth_devices[port_id];
rxq_state = rte_tel_data_alloc();
- if (!rxq_state)
+ if (rxq_state == NULL)
return -ENOMEM;
txq_state = rte_tel_data_alloc();
- if (!txq_state) {
- rte_tel_data_free(rxq_state);
- return -ENOMEM;
- }
+ if (txq_state == NULL)
+ goto free_rxq_state;
+
+ rx_offload = rte_tel_data_alloc();
+ if (rx_offload == NULL)
+ goto free_txq_state;
+
+ tx_offload = rte_tel_data_alloc();
+ if (tx_offload == NULL)
+ goto free_rx_offload;
rte_tel_data_start_dict(d);
rte_tel_data_add_dict_string(d, "name", eth_dev->data->name);
@@ -317,14 +350,27 @@ eth_dev_handle_port_info(const char *cmd __rte_unused,
rte_tel_data_add_dict_int(d, "numa_node", eth_dev->data->numa_node);
rte_tel_data_add_dict_uint_hex(d, "dev_flags",
eth_dev->data->dev_flags, 0);
- rte_tel_data_add_dict_uint_hex(d, "rx_offloads",
- eth_dev->data->dev_conf.rxmode.offloads, 0);
- rte_tel_data_add_dict_uint_hex(d, "tx_offloads",
- eth_dev->data->dev_conf.txmode.offloads, 0);
+
+ eth_dev_parse_rx_offloads(eth_dev->data->dev_conf.rxmode.offloads,
+ rx_offload);
+ rte_tel_data_add_dict_container(d, "rx_offloads", rx_offload, 0);
+ eth_dev_parse_tx_offloads(eth_dev->data->dev_conf.txmode.offloads,
+ tx_offload);
+ rte_tel_data_add_dict_container(d, "tx_offloads", tx_offload, 0);
+
rte_tel_data_add_dict_uint_hex(d, "ethdev_rss_hf",
eth_dev->data->dev_conf.rx_adv_conf.rss_conf.rss_hf, 0);
return 0;
+
+free_rx_offload:
+ rte_tel_data_free(rx_offload);
+free_txq_state:
+ rte_tel_data_free(txq_state);
+free_rxq_state:
+ rte_tel_data_free(rxq_state);
+
+ return -ENOMEM;
}
static int
--
2.33.0
More information about the dev
mailing list