dpdk/0259-net-bonding-add-LACP-info-dump.patch
chenjiji09 ca33ddf86e add private dump for bonding, virtio and vhost
Sync some patchs from upstreaming branch and modifies
are as follow:
1. Add private dump for bonding, virtio and vhost.
2. Support LACP info dump for bonding.
3. Display RSS hash key of flow rule in testpmd.

(cherry picked from commit cf2e60ea2545fa9c52a6778ad230e3d8dca703e3)
2023-04-23 17:24:14 +08:00

188 lines
5.5 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From a74801e4c1d59a8e40317c8ea9e4ba3a5472d633 Mon Sep 17 00:00:00 2001
From: Chengwen Feng <fengchengwen@huawei.com>
Date: Wed, 14 Dec 2022 06:13:24 +0000
Subject: net/bonding: add LACP info dump
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
[ upstream commit b00119fc03dc585213236ea7f550662befa68fbe ]
This patch adds dump lacp info in eth_dev_priv_dump ops.
The extra dump output is similar to testpmd command
"show bonding lacp info [port]".
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
Acked-byMin Hu (Connor) <humin29@huawei.com>
Acked-by: Huisong Li <lihuisong@huawei.com>
Acked-by: Ferruh Yigit <ferruh.yigit@amd.com>
---
drivers/net/bonding/rte_eth_bond_pmd.c | 143 ++++++++++++++++++++++++-
1 file changed, 141 insertions(+), 2 deletions(-)
diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
index cf7d275bf5..0f2b21a568 100644
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
@@ -3320,8 +3320,8 @@ bond_mode_name(uint8_t mode)
}
}
-static int
-bond_ethdev_priv_dump(struct rte_eth_dev *dev, FILE *f)
+static void
+dump_basic(const struct rte_eth_dev *dev, FILE *f)
{
struct bond_dev_private instant_priv;
const struct bond_dev_private *internals = &instant_priv;
@@ -3395,6 +3395,145 @@ bond_ethdev_priv_dump(struct rte_eth_dev *dev, FILE *f)
fprintf(f, "\tUser Defined Primary: [%u]\n", internals->primary_port);
if (internals->slave_count > 0)
fprintf(f, "\tCurrent Primary: [%u]\n", internals->current_primary_port);
+}
+
+static void
+dump_lacp_conf(const struct rte_eth_bond_8023ad_conf *conf, FILE *f)
+{
+ fprintf(f, "\tfast period: %u ms\n", conf->fast_periodic_ms);
+ fprintf(f, "\tslow period: %u ms\n", conf->slow_periodic_ms);
+ fprintf(f, "\tshort timeout: %u ms\n", conf->short_timeout_ms);
+ fprintf(f, "\tlong timeout: %u ms\n", conf->long_timeout_ms);
+ fprintf(f, "\taggregate wait timeout: %u ms\n",
+ conf->aggregate_wait_timeout_ms);
+ fprintf(f, "\ttx period: %u ms\n", conf->tx_period_ms);
+ fprintf(f, "\trx marker period: %u ms\n", conf->rx_marker_period_ms);
+ fprintf(f, "\tupdate timeout: %u ms\n", conf->update_timeout_ms);
+ switch (conf->agg_selection) {
+ case AGG_BANDWIDTH:
+ fprintf(f, "\taggregation mode: bandwidth\n");
+ break;
+ case AGG_STABLE:
+ fprintf(f, "\taggregation mode: stable\n");
+ break;
+ case AGG_COUNT:
+ fprintf(f, "\taggregation mode: count\n");
+ break;
+ default:
+ fprintf(f, "\taggregation mode: invalid\n");
+ break;
+ }
+ fprintf(f, "\n");
+}
+
+static void
+dump_lacp_port_param(const struct port_params *params, FILE *f)
+{
+ char buf[RTE_ETHER_ADDR_FMT_SIZE];
+ fprintf(f, "\t\tsystem priority: %u\n", params->system_priority);
+ rte_ether_format_addr(buf, RTE_ETHER_ADDR_FMT_SIZE, &params->system);
+ fprintf(f, "\t\tsystem mac address: %s\n", buf);
+ fprintf(f, "\t\tport key: %u\n", params->key);
+ fprintf(f, "\t\tport priority: %u\n", params->port_priority);
+ fprintf(f, "\t\tport number: %u\n", params->port_number);
+}
+
+static void
+dump_lacp_slave(const struct rte_eth_bond_8023ad_slave_info *info, FILE *f)
+{
+ char a_state[256] = { 0 };
+ char p_state[256] = { 0 };
+ int a_len = 0;
+ int p_len = 0;
+ uint32_t i;
+
+ static const char * const state[] = {
+ "ACTIVE",
+ "TIMEOUT",
+ "AGGREGATION",
+ "SYNCHRONIZATION",
+ "COLLECTING",
+ "DISTRIBUTING",
+ "DEFAULTED",
+ "EXPIRED"
+ };
+ static const char * const selection[] = {
+ "UNSELECTED",
+ "STANDBY",
+ "SELECTED"
+ };
+
+ for (i = 0; i < RTE_DIM(state); i++) {
+ if ((info->actor_state >> i) & 1)
+ a_len += snprintf(&a_state[a_len],
+ RTE_DIM(a_state) - a_len, "%s ",
+ state[i]);
+
+ if ((info->partner_state >> i) & 1)
+ p_len += snprintf(&p_state[p_len],
+ RTE_DIM(p_state) - p_len, "%s ",
+ state[i]);
+ }
+ fprintf(f, "\tAggregator port id: %u\n", info->agg_port_id);
+ fprintf(f, "\tselection: %s\n", selection[info->selected]);
+ fprintf(f, "\tActor detail info:\n");
+ dump_lacp_port_param(&info->actor, f);
+ fprintf(f, "\t\tport state: %s\n", a_state);
+ fprintf(f, "\tPartner detail info:\n");
+ dump_lacp_port_param(&info->partner, f);
+ fprintf(f, "\t\tport state: %s\n", p_state);
+ fprintf(f, "\n");
+}
+
+static void
+dump_lacp(uint16_t port_id, FILE *f)
+{
+ struct rte_eth_bond_8023ad_slave_info slave_info;
+ struct rte_eth_bond_8023ad_conf port_conf;
+ uint16_t slaves[RTE_MAX_ETHPORTS];
+ int num_active_slaves;
+ int i, ret;
+
+ fprintf(f, " - Lacp info:\n");
+
+ num_active_slaves = rte_eth_bond_active_slaves_get(port_id, slaves,
+ RTE_MAX_ETHPORTS);
+ if (num_active_slaves < 0) {
+ fprintf(f, "\tFailed to get active slave list for port %u\n",
+ port_id);
+ return;
+ }
+
+ fprintf(f, "\tIEEE802.3 port: %u\n", port_id);
+ ret = rte_eth_bond_8023ad_conf_get(port_id, &port_conf);
+ if (ret) {
+ fprintf(f, "\tGet bonded device %u 8023ad config failed\n",
+ port_id);
+ return;
+ }
+ dump_lacp_conf(&port_conf, f);
+
+ for (i = 0; i < num_active_slaves; i++) {
+ ret = rte_eth_bond_8023ad_slave_info(port_id, slaves[i],
+ &slave_info);
+ if (ret) {
+ fprintf(f, "\tGet slave device %u 8023ad info failed\n",
+ slaves[i]);
+ return;
+ }
+ fprintf(f, "\tSlave Port: %u\n", slaves[i]);
+ dump_lacp_slave(&slave_info, f);
+ }
+}
+
+static int
+bond_ethdev_priv_dump(struct rte_eth_dev *dev, FILE *f)
+{
+ const struct bond_dev_private *internals = dev->data->dev_private;
+
+ dump_basic(dev, f);
+ if (internals->mode == BONDING_MODE_8023AD)
+ dump_lacp(dev->data->port_id, f);
return 0;
}
--
2.23.0