A new interactive command is offered:
show device <device description>
This commands lists all rte_device element matching the device
description. e.g.:
show device bus=pci
show device bus=vdev
show device bus=vdev/class=eth
show device bus=vdev,driver=net_ring/class=eth
show device bus=vdev/class=eth,name=net_ring0
These devices may not be otherwise useful, some buses will spawn devices
to keep track of their assets without having a driver to use them.
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
---
app/test-pmd/cmdline.c | 54 +++++++++++++++++++++++++++++
doc/guides/testpmd_app_ug/testpmd_funcs.rst | 24 +++++++++++++
2 files changed, 78 insertions(+)
@@ -228,6 +228,9 @@ static void cmd_help_long_parsed(void *parsed_result,
"show port tm node stats (port_id) (node_id) (clear)\n"
" Display the port TM node stats.\n\n"
+ "show device (device_string)\n"
+ " Display devices matching the device string.\n\n"
+
);
}
@@ -7083,6 +7086,56 @@ cmdline_parse_inst_t cmd_showportall = {
},
};
+/* *** SHOW DEVICE INFO *** */
+struct cmd_showdevice_result {
+ cmdline_fixed_string_t show;
+ cmdline_fixed_string_t device;
+ cmdline_fixed_string_t filter;
+};
+
+static void
+cmd_showdevice_dump_device(const struct rte_device *dev)
+{
+ const struct rte_driver *drv = dev->driver;
+
+ printf("0x%p: %s:%s\n", (const void *)dev, dev->name,
+ drv ? drv->name : "<nil>");
+}
+
+static void cmd_showdevice_parsed(void *parsed_result,
+ __attribute__((unused)) struct cmdline *cl,
+ __attribute__((unused)) void *data)
+{
+ struct cmd_showdevice_result *res = parsed_result;
+ struct rte_dev_iterator it;
+ const struct rte_device *dev;
+
+ RTE_DEV_FOREACH(dev, res->filter, &it)
+ cmd_showdevice_dump_device(dev);
+}
+
+cmdline_parse_token_string_t cmd_showdevice_show =
+ TOKEN_STRING_INITIALIZER(struct cmd_showdevice_result,
+ show, "show");
+cmdline_parse_token_string_t cmd_showdevice_device =
+ TOKEN_STRING_INITIALIZER(struct cmd_showdevice_result,
+ device, "device");
+cmdline_parse_token_string_t cmd_showdevice_filter =
+ TOKEN_STRING_INITIALIZER(struct cmd_showdevice_result,
+ filter, NULL);
+
+cmdline_parse_inst_t cmd_showdevice = {
+ .f = cmd_showdevice_parsed,
+ .data = NULL,
+ .help_str = "show device <device string>",
+ .tokens = {
+ (void *)&cmd_showdevice_show,
+ (void *)&cmd_showdevice_device,
+ (void *)&cmd_showdevice_filter,
+ NULL,
+ },
+};
+
/* *** SHOW PORT INFO *** */
struct cmd_showport_result {
cmdline_fixed_string_t show;
@@ -17262,6 +17315,7 @@ cmdline_parse_ctx_t main_ctx[] = {
(cmdline_parse_inst_t *)&cmd_help_long,
(cmdline_parse_inst_t *)&cmd_quit,
(cmdline_parse_inst_t *)&cmd_load_from_file,
+ (cmdline_parse_inst_t *)&cmd_showdevice,
(cmdline_parse_inst_t *)&cmd_showport,
(cmdline_parse_inst_t *)&cmd_showqueue,
(cmdline_parse_inst_t *)&cmd_showportall,
@@ -2628,6 +2628,30 @@ set the traffic management default hierarchy on the port::
testpmd> set port tm hierarchy default (port_id)
+Device functions
+----------------
+
+Show devices
+~~~~~~~~~~~~
+
+Display any registered devices::
+
+ testpmd> show device <device_string>
+
+where:
+
+* ``device_string``: Device description string, of the format
+
+ layer[/layer[/layer]]
+
+ where one layer is in the form
+
+ layer_key=layer_name[,key1=value1[,...]]
+
+ Valid layer keys are ``bus`` and ``class``.
+ Their respective values is defined by registered ``bus`` and ``class``
+ drivers.
+
Filter Functions
----------------