diff options
author | aldot <aldot@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2007-04-10 18:43:27 +0000 |
---|---|---|
committer | aldot <aldot@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2007-04-10 18:43:27 +0000 |
commit | 64164c752de863efc76c5a1c12b529e678f11aeb (patch) | |
tree | 149be152e5af1468e88859842a4a7b59ab0a4773 | |
parent | 484b140884873063836c49a9ec45e8e28ae14fda (diff) | |
download | busybox-w32-64164c752de863efc76c5a1c12b529e678f11aeb.tar.gz busybox-w32-64164c752de863efc76c5a1c12b529e678f11aeb.tar.bz2 busybox-w32-64164c752de863efc76c5a1c12b529e678f11aeb.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.
git-svn-id: svn://busybox.net/trunk/busybox@18387 69ca8d6d-28ef-0310-b511-8ec308f3f277
-rw-r--r-- | networking/ip.c | 70 | ||||
-rw-r--r-- | networking/libiproute/utils.h | 2 |
2 files changed, 49 insertions, 23 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 | } |
diff --git a/networking/libiproute/utils.h b/networking/libiproute/utils.h index 27afb32ac..3b6fef1e3 100644 --- a/networking/libiproute/utils.h +++ b/networking/libiproute/utils.h | |||
@@ -78,7 +78,7 @@ extern const char *rt_addr_n2a(int af, int len, void *addr, char *buf, int bufle | |||
78 | void invarg(const char *, const char *) ATTRIBUTE_NORETURN; | 78 | void invarg(const char *, const char *) ATTRIBUTE_NORETURN; |
79 | void duparg(const char *, const char *) ATTRIBUTE_NORETURN; | 79 | void duparg(const char *, const char *) ATTRIBUTE_NORETURN; |
80 | void duparg2(const char *, const char *) ATTRIBUTE_NORETURN; | 80 | void duparg2(const char *, const char *) ATTRIBUTE_NORETURN; |
81 | int matches(const char *arg, const char *pattern); | 81 | int ATTRIBUTE_DEPRECATED matches(const char *arg, const char *pattern); |
82 | int inet_addr_match(inet_prefix *a, inet_prefix *b, int bits); | 82 | int inet_addr_match(inet_prefix *a, inet_prefix *b, int bits); |
83 | 83 | ||
84 | const char *dnet_ntop(int af, const void *addr, char *str, size_t len); | 84 | const char *dnet_ntop(int af, const void *addr, char *str, size_t len); |