1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include "libbb.h"
17
18#include "libiproute/utils.h"
19#include "libiproute/ip_common.h"
20
21#if ENABLE_FEATURE_IP_ADDRESS \
22 || ENABLE_FEATURE_IP_ROUTE \
23 || ENABLE_FEATURE_IP_LINK \
24 || ENABLE_FEATURE_IP_TUNNEL \
25 || ENABLE_FEATURE_IP_RULE
26
27static int NORETURN ip_print_help(char **argv UNUSED_PARAM)
28{
29 bb_show_usage();
30}
31
32static int ip_do(int (*ip_func)(char **argv), char **argv)
33{
34 argv = ip_parse_common_args(argv + 1);
35 return ip_func(argv);
36}
37
38#if ENABLE_FEATURE_IP_ADDRESS
39int ipaddr_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
40int 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
46int iplink_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
47int 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
53int iproute_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
54int 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
60int iprule_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
61int 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
67int iptunnel_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
68int iptunnel_main(int argc UNUSED_PARAM, char **argv)
69{
70 return ip_do(do_iptunnel, argv);
71}
72#endif
73
74
75int ip_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
76int ip_main(int argc UNUSED_PARAM, char **argv)
77{
78 static const char keywords[] ALIGN1 =
79 USE_FEATURE_IP_ADDRESS("address\0")
80 USE_FEATURE_IP_ROUTE("route\0")
81 USE_FEATURE_IP_LINK("link\0")
82 USE_FEATURE_IP_TUNNEL("tunnel\0" "tunl\0")
83 USE_FEATURE_IP_RULE("rule\0")
84 ;
85 enum {
86 USE_FEATURE_IP_ADDRESS(IP_addr,)
87 USE_FEATURE_IP_ROUTE(IP_route,)
88 USE_FEATURE_IP_LINK(IP_link,)
89 USE_FEATURE_IP_TUNNEL(IP_tunnel, IP_tunl,)
90 USE_FEATURE_IP_RULE(IP_rule,)
91 IP_none
92 };
93 int (*ip_func)(char**) = ip_print_help;
94
95 argv = ip_parse_common_args(argv + 1);
96 if (*argv) {
97 int key = index_in_substrings(keywords, *argv);
98 argv++;
99#if ENABLE_FEATURE_IP_ADDRESS
100 if (key == IP_addr)
101 ip_func = do_ipaddr;
102#endif
103#if ENABLE_FEATURE_IP_ROUTE
104 if (key == IP_route)
105 ip_func = do_iproute;
106#endif
107#if ENABLE_FEATURE_IP_LINK
108 if (key == IP_link)
109 ip_func = do_iplink;
110#endif
111#if ENABLE_FEATURE_IP_TUNNEL
112 if (key == IP_tunnel || key == IP_tunl)
113 ip_func = do_iptunnel;
114#endif
115#if ENABLE_FEATURE_IP_RULE
116 if (key == IP_rule)
117 ip_func = do_iprule;
118#endif
119 }
120 return ip_func(argv);
121}
122
123#endif
124