diff options
author | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2007-04-10 18:43:27 +0000 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2007-04-10 18:43:27 +0000 |
commit | e87d7955f8130040a575f2f48962471a27ccc964 (patch) | |
tree | 149be152e5af1468e88859842a4a7b59ab0a4773 /networking/ip.c | |
parent | 51f7ab6162a1be2e52d7b2ccc53acb6700769d0b (diff) | |
download | busybox-w32-e87d7955f8130040a575f2f48962471a27ccc964.tar.gz busybox-w32-e87d7955f8130040a575f2f48962471a27ccc964.tar.bz2 busybox-w32-e87d7955f8130040a575f2f48962471a27ccc964.zip |
- rewrite the ip applet to be less bloaty
- mark libiproute's matches() as deprecated. Convert to index_in_(sub)str_array()!
text data bss dec hex filename
314 0 0 314 13a ip.o.orig
200 0 0 200 c8 ip.o
Using a smallint for the key would save another byte.
Diffstat (limited to 'networking/ip.c')
-rw-r--r-- | networking/ip.c | 70 |
1 files changed, 48 insertions, 22 deletions
diff --git a/networking/ip.c b/networking/ip.c index d51689542..dc9ca1f91 100644 --- a/networking/ip.c +++ b/networking/ip.c | |||
@@ -10,6 +10,7 @@ | |||
10 | * Changes: | 10 | * Changes: |
11 | * | 11 | * |
12 | * Rani Assaf <rani@magic.metawire.com> 980929: resolve addresses | 12 | * Rani Assaf <rani@magic.metawire.com> 980929: resolve addresses |
13 | * Bernhard Fischer rewrote to use index_in_substr_array | ||
13 | */ | 14 | */ |
14 | 15 | ||
15 | #include "busybox.h" | 16 | #include "busybox.h" |
@@ -17,31 +18,56 @@ | |||
17 | #include "libiproute/utils.h" | 18 | #include "libiproute/utils.h" |
18 | #include "libiproute/ip_common.h" | 19 | #include "libiproute/ip_common.h" |
19 | 20 | ||
21 | static int ATTRIBUTE_NORETURN ip_print_help(int ATTRIBUTE_UNUSED ac, char ATTRIBUTE_UNUSED **av) | ||
22 | { | ||
23 | bb_show_usage(); | ||
24 | } | ||
20 | int ip_main(int argc, char **argv); | 25 | int ip_main(int argc, char **argv); |
21 | int ip_main(int argc, char **argv) | 26 | int ip_main(int argc, char **argv) |
22 | { | 27 | { |
23 | ip_parse_common_args(&argc, &argv); | 28 | const char * const keywords[] = { |
24 | 29 | USE_FEATURE_IP_ADDRESS("address",) | |
25 | if (argc <= 1) | 30 | USE_FEATURE_IP_ROUTE("route",) |
26 | bb_show_usage(); | 31 | USE_FEATURE_IP_LINK("link",) |
32 | USE_FEATURE_IP_TUNNEL("tunnel", "tunl",) | ||
33 | USE_FEATURE_IP_RULE("rule",) | ||
34 | NULL | ||
35 | }; | ||
36 | enum { | ||
37 | USE_FEATURE_IP_ADDRESS(IP_addr,) | ||
38 | USE_FEATURE_IP_ROUTE(IP_route,) | ||
39 | USE_FEATURE_IP_LINK(IP_link,) | ||
40 | USE_FEATURE_IP_TUNNEL(IP_tunnel, IP_tunl,) | ||
41 | USE_FEATURE_IP_RULE(IP_rule,) | ||
42 | IP_none | ||
43 | }; | ||
44 | int (*ip_func)(int argc, char **argv) = ip_print_help; | ||
27 | 45 | ||
28 | if (ENABLE_FEATURE_IP_ADDRESS && matches(argv[1], "address") == 0) { | 46 | ip_parse_common_args(&argc, &argv); |
29 | return do_ipaddr(argc-2, argv+2); | 47 | if (argc > 1) { |
30 | } | 48 | int key = index_in_substr_array(keywords, argv[1]); |
31 | if (ENABLE_FEATURE_IP_ROUTE && matches(argv[1], "route") == 0) { | 49 | argc -= 2; |
32 | return do_iproute(argc-2, argv+2); | 50 | argv += 2; |
33 | } | 51 | #if ENABLE_FEATURE_IP_ADDRESS |
34 | if (ENABLE_FEATURE_IP_LINK && matches(argv[1], "link") == 0) { | 52 | if (key == IP_addr) |
35 | return do_iplink(argc-2, argv+2); | 53 | ip_func = do_ipaddr; |
36 | } | 54 | #endif |
37 | if (ENABLE_FEATURE_IP_TUNNEL | 55 | #if ENABLE_FEATURE_IP_ROUTE |
38 | && (matches(argv[1], "tunnel") == 0 || strcmp(argv[1], "tunl") == 0) | 56 | if (key == IP_route) |
39 | ) { | 57 | ip_func = do_iproute; |
40 | return do_iptunnel(argc-2, argv+2); | 58 | #endif |
41 | } | 59 | #if ENABLE_FEATURE_IP_LINK |
42 | if (ENABLE_FEATURE_IP_RULE && matches(argv[1], "rule") == 0) { | 60 | if (key == IP_link) |
43 | return do_iprule(argc-2, argv+2); | 61 | ip_func = do_iplink; |
62 | #endif | ||
63 | #if ENABLE_FEATURE_IP_TUNNEL | ||
64 | if (key == IP_tunnel || key == IP_tunl) | ||
65 | ip_func = do_iptunnel; | ||
66 | #endif | ||
67 | #if ENABLE_FEATURE_IP_RULE | ||
68 | if (key == IP_rule) | ||
69 | ip_func = do_iprule; | ||
70 | #endif | ||
44 | } | 71 | } |
45 | 72 | return (ip_func(argc, argv)); | |
46 | bb_show_usage(); | ||
47 | } | 73 | } |