diff --git a/commands/net.c b/commands/net.c index c5c6373dd..a453f4ed3 100644 --- a/commands/net.c +++ b/commands/net.c @@ -28,6 +28,7 @@ #include #include +#include #include #include #include @@ -96,5 +97,6 @@ BAREBOX_CMD_START(ethact) .cmd = do_ethact, .usage = "set current ethernet device", BAREBOX_CMD_HELP(cmd_ethact_help) + BAREBOX_CMD_COMPLETE(eth_complete) BAREBOX_CMD_END diff --git a/include/complete.h b/include/complete.h index 006369c2c..12c4e15c7 100644 --- a/include/complete.h +++ b/include/complete.h @@ -14,6 +14,7 @@ void complete_reset(void); int command_complete(struct string_list *sl, char *instr); int device_complete(struct string_list *sl, char *instr); int empty_complete(struct string_list *sl, char *instr); +int eth_complete(struct string_list *sl, char *instr); #endif /* __COMPLETE_ */ diff --git a/net/eth.c b/net/eth.c index 130805b7a..4ea9fb0f4 100644 --- a/net/eth.c +++ b/net/eth.c @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -109,6 +110,26 @@ struct eth_device *eth_get_byname(char *ethname) return NULL; } +#ifdef CONFIG_AUTO_COMPLETE +int eth_complete(struct string_list *sl, char *instr) +{ + struct eth_device *edev; + const char *devname; + int len; + + len = strlen(instr); + + list_for_each_entry(edev, &netdev_list, list) { + devname = dev_name(&edev->dev); + if (strncmp(instr, devname, len)) + continue; + + string_list_add_asprintf(sl, "%s ", devname); + } + return COMPLETE_CONTNINUE; +} +#endif + int eth_send(void *packet, int length) { int ret;