Magellan Linux

Contents of /trunk/mkinitrd-magellan/busybox/networking/ip.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1123 - (show annotations) (download)
Wed Aug 18 21:56:57 2010 UTC (13 years, 9 months ago) by niro
File MIME type: text/plain
File size: 2696 byte(s)
-updated to busybox-1.17.1
1 /* vi: set sw=4 ts=4: */
2 /*
3 * "ip" utility frontend.
4 *
5 * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
6 *
7 * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
8 *
9 * Changes:
10 * Rani Assaf <rani@magic.metawire.com> 980929: resolve addresses
11 * Bernhard Reutner-Fischer rewrote to use index_in_substr_array
12 */
13
14 #include "libbb.h"
15
16 #include "libiproute/utils.h"
17 #include "libiproute/ip_common.h"
18
19 #if ENABLE_FEATURE_IP_ADDRESS \
20 || ENABLE_FEATURE_IP_ROUTE \
21 || ENABLE_FEATURE_IP_LINK \
22 || ENABLE_FEATURE_IP_TUNNEL \
23 || ENABLE_FEATURE_IP_RULE
24
25 static int ip_print_help(char **argv UNUSED_PARAM)
26 {
27 bb_show_usage();
28 }
29
30 typedef int (*ip_func_ptr_t)(char**);
31
32 static int ip_do(ip_func_ptr_t ip_func, char **argv)
33 {
34 argv = ip_parse_common_args(argv + 1);
35 return ip_func(argv);
36 }
37
38 #if ENABLE_FEATURE_IP_ADDRESS
39 int ipaddr_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
40 int ipaddr_main(int argc UNUSED_PARAM, char **argv)
41 {
42 return ip_do(do_ipaddr, argv);
43 }
44 #endif
45 #if ENABLE_FEATURE_IP_LINK
46 int iplink_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
47 int iplink_main(int argc UNUSED_PARAM, char **argv)
48 {
49 return ip_do(do_iplink, argv);
50 }
51 #endif
52 #if ENABLE_FEATURE_IP_ROUTE
53 int iproute_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
54 int iproute_main(int argc UNUSED_PARAM, char **argv)
55 {
56 return ip_do(do_iproute, argv);
57 }
58 #endif
59 #if ENABLE_FEATURE_IP_RULE
60 int iprule_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
61 int iprule_main(int argc UNUSED_PARAM, char **argv)
62 {
63 return ip_do(do_iprule, argv);
64 }
65 #endif
66 #if ENABLE_FEATURE_IP_TUNNEL
67 int iptunnel_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
68 int iptunnel_main(int argc UNUSED_PARAM, char **argv)
69 {
70 return ip_do(do_iptunnel, argv);
71 }
72 #endif
73
74
75 int ip_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
76 int ip_main(int argc UNUSED_PARAM, char **argv)
77 {
78 static const char keywords[] ALIGN1 =
79 IF_FEATURE_IP_ADDRESS("address\0")
80 IF_FEATURE_IP_ROUTE("route\0")
81 IF_FEATURE_IP_ROUTE("r\0")
82 IF_FEATURE_IP_LINK("link\0")
83 IF_FEATURE_IP_TUNNEL("tunnel\0")
84 IF_FEATURE_IP_TUNNEL("tunl\0")
85 IF_FEATURE_IP_RULE("rule\0")
86 ;
87 static const ip_func_ptr_t ip_func_ptrs[] = {
88 ip_print_help,
89 IF_FEATURE_IP_ADDRESS(do_ipaddr,)
90 IF_FEATURE_IP_ROUTE(do_iproute,)
91 IF_FEATURE_IP_ROUTE(do_iproute,)
92 IF_FEATURE_IP_LINK(do_iplink,)
93 IF_FEATURE_IP_TUNNEL(do_iptunnel,)
94 IF_FEATURE_IP_TUNNEL(do_iptunnel,)
95 IF_FEATURE_IP_RULE(do_iprule,)
96 };
97 ip_func_ptr_t ip_func;
98 int key;
99
100 argv = ip_parse_common_args(argv + 1);
101 key = *argv ? index_in_substrings(keywords, *argv++) : -1;
102 ip_func = ip_func_ptrs[key + 1];
103
104 return ip_func(argv);
105 }
106
107 #endif /* any of ENABLE_FEATURE_IP_xxx is 1 */