diff options
Diffstat (limited to 'networking')
-rw-r--r-- | networking/ifconfig.c | 8 | ||||
-rw-r--r-- | networking/interface.c | 37 |
2 files changed, 19 insertions, 26 deletions
diff --git a/networking/ifconfig.c b/networking/ifconfig.c index 61d9178..5c47abc 100644 --- a/networking/ifconfig.c +++ b/networking/ifconfig.c @@ -338,6 +338,7 @@ int ifconfig_main(int argc UNUSED_PARAM, char **argv) char *p; /*char host[128];*/ const char *host = NULL; /* make gcc happy */ + IF_FEATURE_IFCONFIG_STATUS(char *show_all_param;) did_flags = 0; #if ENABLE_FEATURE_IFCONFIG_BROADCAST_PLUS @@ -349,15 +350,16 @@ int ifconfig_main(int argc UNUSED_PARAM, char **argv) ++argv; #if ENABLE_FEATURE_IFCONFIG_STATUS - if (argv[0] && (argv[0][0] == '-' && argv[0][1] == 'a' && !argv[0][2])) { - interface_opt_a = 1; + show_all_param = NULL; + if (argv[0] && argv[0][0] == '-' && argv[0][1] == 'a' && !argv[0][2]) { ++argv; + show_all_param = IFNAME_SHOW_DOWNED_TOO; } #endif if (!argv[0] || !argv[1]) { /* one or no args */ #if ENABLE_FEATURE_IFCONFIG_STATUS - return display_interfaces(argv[0] /* can be NULL */); + return display_interfaces(argv[0] ? argv[0] : show_all_param); #else bb_error_msg_and_die("no support for status display"); #endif diff --git a/networking/interface.c b/networking/interface.c index 0bbef98..ff99c29 100644 --- a/networking/interface.c +++ b/networking/interface.c @@ -342,8 +342,6 @@ struct interface { }; -smallint interface_opt_a; /* show all interfaces */ - static struct interface *int_list, *int_last; @@ -1086,13 +1084,13 @@ static void ife_print(struct interface *ptr) bb_putchar('\n'); } -static int do_if_print(struct interface *ife) /*, int *opt_a)*/ +static int do_if_print(struct interface *ife, int show_downed_too) { int res; res = do_if_fetch(ife); if (res >= 0) { - if ((ife->flags & IFF_UP) || interface_opt_a) + if ((ife->flags & IFF_UP) || show_downed_too) ife_print(ife); } return res; @@ -1128,40 +1126,33 @@ static int for_all_interfaces(int (*doit) (struct interface *, void *), } #endif -/* for ipv4 add/del modes */ -static int if_print(char *ifname) +int FAST_FUNC display_interfaces(char *ifname) { struct interface *ife; int res; - if (!ifname) { + if (!ifname || ifname == IFNAME_SHOW_DOWNED_TOO) { /*res = for_all_interfaces(do_if_print, &interface_opt_a);*/ if (!int_list) { - int err = if_readlist(); - if (err < 0) - return err; + res = if_readlist(); + if (res < 0) + goto ret; } for (ife = int_list; ife; ife = ife->next) { - int err = do_if_print(ife); /*, &interface_opt_a);*/ - if (err) - return err; + BUILD_BUG_ON((int)(intptr_t)IFNAME_SHOW_DOWNED_TOO != 1); + res = do_if_print(ife, (int)(intptr_t)ifname); + if (res < 0) + goto ret; } return 0; } + ife = lookup_interface(ifname); res = do_if_fetch(ife); if (res >= 0) ife_print(ife); - return res; -} - -int FAST_FUNC display_interfaces(char *ifname) -{ - int status; - - status = if_print(ifname); - - return (status < 0); /* status < 0 == 1 -- error */ + ret: + return (res < 0); /* status < 0 == 1 -- error */ } #if ENABLE_FEATURE_HWIB |