[v8,21/21] app/testpmd: add show device command

Message ID b130b9803e6dc894b330cac2a3fb1383aa162b9f.1530031921.git.gaetan.rivet@6wind.com (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series Device querying |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation fail Compilation issues

Commit Message

Gaëtan Rivet June 26, 2018, 4:56 p.m. UTC
  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                      | 51 +++++++++++++++++++++++++++++
 doc/guides/testpmd_app_ug/testpmd_funcs.rst | 24 ++++++++++++++
 2 files changed, 75 insertions(+)
  

Comments

Iremonger, Bernard June 28, 2018, 10:03 a.m. UTC | #1
Hi Gaetan,

> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Gaetan Rivet
> Sent: Tuesday, June 26, 2018 5:56 PM
> To: dev@dpdk.org
> Cc: Gaetan Rivet <gaetan.rivet@6wind.com>
> Subject: [dpdk-dev] [PATCH v8 21/21] app/testpmd: add show device
> command
> 
> 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                      | 51
> +++++++++++++++++++++++++++++
>  doc/guides/testpmd_app_ug/testpmd_funcs.rst | 24 ++++++++++++++
>  2 files changed, 75 insertions(+)
> 
> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index
> 27e2aa8c8..872492b88 100644
> --- a/app/test-pmd/cmdline.c
> +++ b/app/test-pmd/cmdline.c
> @@ -7083,6 +7083,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 +17312,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, diff --git
> a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> index 0d6fd50ca..4f1009a3a 100644
> --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> @@ -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
>  ----------------
> 
> --
> 2.11.0

This patch fails to compile on the latest 18_08 master branch.

There is no update to the internal testpmd documentation about this new command.

Regards,

Bernard.
  
Gaëtan Rivet June 28, 2018, 10:09 a.m. UTC | #2
Hi Bernard,

On Thu, Jun 28, 2018 at 10:03:30AM +0000, Iremonger, Bernard wrote:
> Hi Gaetan,
> 
> > -----Original Message-----
> > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Gaetan Rivet
> > Sent: Tuesday, June 26, 2018 5:56 PM
> > To: dev@dpdk.org
> > Cc: Gaetan Rivet <gaetan.rivet@6wind.com>
> > Subject: [dpdk-dev] [PATCH v8 21/21] app/testpmd: add show device
> > command
> > 
> > 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                      | 51
> > +++++++++++++++++++++++++++++
> >  doc/guides/testpmd_app_ug/testpmd_funcs.rst | 24 ++++++++++++++
> >  2 files changed, 75 insertions(+)
> > 
> > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index
> > 27e2aa8c8..872492b88 100644
> > --- a/app/test-pmd/cmdline.c
> > +++ b/app/test-pmd/cmdline.c
> > @@ -7083,6 +7083,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 +17312,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, diff --git
> > a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > index 0d6fd50ca..4f1009a3a 100644
> > --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > @@ -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
> >  ----------------
> > 
> > --
> > 2.11.0
> 
> This patch fails to compile on the latest 18_08 master branch.
> 

I had it rebased a few days ago, it was fine. It seems there has been
some movement lately, will rebase again.

> There is no update to the internal testpmd documentation about this new command.
> 

There is some documentation added to
doc/guides/testpmd_app_ug/testpmd_funcs.rst

Are you referring to some other kind of documentation?
  
Iremonger, Bernard June 28, 2018, 11:28 a.m. UTC | #3
Hi Gaetan,

> -----Original Message-----
> From: Gaëtan Rivet [mailto:gaetan.rivet@6wind.com]
> Sent: Thursday, June 28, 2018 11:10 AM
> To: Iremonger, Bernard <bernard.iremonger@intel.com>
> Cc: dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v8 21/21] app/testpmd: add show device
> command
> 
> Hi Bernard,
> 
> On Thu, Jun 28, 2018 at 10:03:30AM +0000, Iremonger, Bernard wrote:
> > Hi Gaetan,
> >
> > > -----Original Message-----
> > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Gaetan Rivet
> > > Sent: Tuesday, June 26, 2018 5:56 PM
> > > To: dev@dpdk.org
> > > Cc: Gaetan Rivet <gaetan.rivet@6wind.com>
> > > Subject: [dpdk-dev] [PATCH v8 21/21] app/testpmd: add show device
> > > command
> > >
> > > 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                      | 51
> > > +++++++++++++++++++++++++++++
> > >  doc/guides/testpmd_app_ug/testpmd_funcs.rst | 24 ++++++++++++++
> > >  2 files changed, 75 insertions(+)
> > >
> > > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index
> > > 27e2aa8c8..872492b88 100644
> > > --- a/app/test-pmd/cmdline.c
> > > +++ b/app/test-pmd/cmdline.c
> > > @@ -7083,6 +7083,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 +17312,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, diff --git
> > > a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > > b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > > index 0d6fd50ca..4f1009a3a 100644
> > > --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > > +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > > @@ -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
> > >  ----------------
> > >
> > > --
> > > 2.11.0
> >
> > This patch fails to compile on the latest 18_08 master branch.
> >
> 
> I had it rebased a few days ago, it was fine. It seems there has been some
> movement lately, will rebase again.
> 
> > There is no update to the internal testpmd documentation about this new
> command.
> >
> 
> There is some documentation added to
> doc/guides/testpmd_app_ug/testpmd_funcs.rst
> 
> Are you referring to some other kind of documentation?
> 
> --
> Gaëtan Rivet
> 6WIND

There should be an update to the testpmd "help" command.
See line 122  to 1133 in cmdline .c

Regards,

Bernard
  
Gaëtan Rivet June 28, 2018, 11:56 a.m. UTC | #4
On Thu, Jun 28, 2018 at 11:28:53AM +0000, Iremonger, Bernard wrote:
> 
> Hi Gaetan,
> 
> > -----Original Message-----
> > From: Gaëtan Rivet [mailto:gaetan.rivet@6wind.com]
> > Sent: Thursday, June 28, 2018 11:10 AM
> > To: Iremonger, Bernard <bernard.iremonger@intel.com>
> > Cc: dev@dpdk.org
> > Subject: Re: [dpdk-dev] [PATCH v8 21/21] app/testpmd: add show device
> > command
> > 
> > Hi Bernard,
> > 
> > On Thu, Jun 28, 2018 at 10:03:30AM +0000, Iremonger, Bernard wrote:
> > > Hi Gaetan,
> > >
> > > > -----Original Message-----
> > > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Gaetan Rivet
> > > > Sent: Tuesday, June 26, 2018 5:56 PM
> > > > To: dev@dpdk.org
> > > > Cc: Gaetan Rivet <gaetan.rivet@6wind.com>
> > > > Subject: [dpdk-dev] [PATCH v8 21/21] app/testpmd: add show device
> > > > command
> > > >
> > > > 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                      | 51
> > > > +++++++++++++++++++++++++++++
> > > >  doc/guides/testpmd_app_ug/testpmd_funcs.rst | 24 ++++++++++++++
> > > >  2 files changed, 75 insertions(+)
> > > >
> > > > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index
> > > > 27e2aa8c8..872492b88 100644
> > > > --- a/app/test-pmd/cmdline.c
> > > > +++ b/app/test-pmd/cmdline.c
> > > > @@ -7083,6 +7083,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 +17312,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, diff --git
> > > > a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > > > b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > > > index 0d6fd50ca..4f1009a3a 100644
> > > > --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > > > +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > > > @@ -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
> > > >  ----------------
> > > >
> > > > --
> > > > 2.11.0
> > >
> > > This patch fails to compile on the latest 18_08 master branch.
> > >
> > 
> > I had it rebased a few days ago, it was fine. It seems there has been some
> > movement lately, will rebase again.
> > 
> > > There is no update to the internal testpmd documentation about this new
> > command.
> > >
> > 
> > There is some documentation added to
> > doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > 
> > Are you referring to some other kind of documentation?
> > 
> > --
> > Gaëtan Rivet
> > 6WIND
> 
> There should be an update to the testpmd "help" command.
> See line 122  to 1133 in cmdline .c
> 
> Regards,
> 
> Bernard
> 

Ah, ok, I will update it.
  

Patch

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 27e2aa8c8..872492b88 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -7083,6 +7083,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 +17312,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,
diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
index 0d6fd50ca..4f1009a3a 100644
--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
@@ -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
 ----------------