From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefan Roese Date: Mon, 19 Apr 2021 09:00:16 +0200 Subject: [PATCH] cmd: net: add a 'net list' command to list network devs In-Reply-To: <20210416212534.27015-1-tharvey@gateworks.com> References: <20210416212534.27015-1-tharvey@gateworks.com> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 16.04.21 23:25, Tim Harvey wrote: > In a system with multiple network controllers it can be difficult > to know the names of the various devices available. This is especially > true for USB ether devices as they do not display device names upon > detection. > > This is being added as a net sub-system in case other commands may > want to be added or moved here. > > Example: > U-Boot > net > net - NET sub-system > > Usage: > net list - list available devices > > U-Boot > net list > eth0 : ethernet at 2188000 00:d0:12:98:f5:47 active > eth1 : e1000#0 00:d0:12:98:f5:48 > eth2 : asix_eth 8c:ae:4c:f5:84:9d > eth3 : asix_eth 8c:ae:4c:f9:41:e3 > > Signed-off-by: Tim Harvey I like it: Reviewed-by: Stefan Roese Thanks, Stefan > --- > cmd/net.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 44 insertions(+) > > diff --git a/cmd/net.c b/cmd/net.c > index beb2877dfd..e51bc443f7 100644 > --- a/cmd/net.c > +++ b/cmd/net.c > @@ -10,6 +10,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -480,3 +481,46 @@ U_BOOT_CMD( > ); > > #endif /* CONFIG_CMD_LINK_LOCAL */ > + > +static int do_net_list(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) > +{ > + const struct udevice *current = eth_get_dev(); > + unsigned char env_enetaddr[ARP_HLEN]; > + const struct udevice *dev; > + struct uclass *uc; > + > + uclass_id_foreach_dev(UCLASS_ETH, dev, uc) { > + eth_env_get_enetaddr_by_index("eth", dev_seq(dev), env_enetaddr); > + printf("eth%d : %s %pM %s\n", dev_seq(dev), dev->name, env_enetaddr, > + current == dev ? "active" : ""); > + } > + return CMD_RET_SUCCESS; > +} > + > +static struct cmd_tbl cmd_net[] = { > + U_BOOT_CMD_MKENT(list, 1, 0, do_net_list, "", ""), > +}; > + > +static int do_net(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) > +{ > + struct cmd_tbl *cp; > + > + cp = find_cmd_tbl(argv[1], cmd_net, ARRAY_SIZE(cmd_net)); > + > + /* Drop the net command */ > + argc--; > + argv++; > + > + if (!cp || argc > cp->maxargs) > + return CMD_RET_USAGE; > + if (flag == CMD_FLAG_REPEAT && !cmd_is_repeatable(cp)) > + return CMD_RET_SUCCESS; > + > + return cp->cmd(cmdtp, flag, argc, argv); > +} > + > +U_BOOT_CMD( > + net, 2, 1, do_net, > + "NET sub-system", > + "list - list available devices\n" > +); > Viele Gr??e, Stefan -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de