1 /* vi: set sw=4 ts=4: */
3 * "ip" utility frontend.
5 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
7 * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
10 * Rani Assaf <rani@magic.metawire.com> 980929: resolve addresses
11 * Bernhard Reutner-Fischer rewrote to use index_in_substr_array
16 #include "libiproute/utils.h"
17 #include "libiproute/ip_common.h"
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
25 static int FAST_FUNC ip_print_help(char **argv UNUSED_PARAM)
30 typedef int FAST_FUNC (*ip_func_ptr_t)(char**);
32 static int ip_do(ip_func_ptr_t ip_func, char **argv)
34 argv = ip_parse_common_args(argv + 1);
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)
42 return ip_do(do_ipaddr, argv);
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)
49 return ip_do(do_iplink, argv);
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)
56 return ip_do(do_iproute, argv);
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)
63 return ip_do(do_iprule, argv);
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)
70 return ip_do(do_iptunnel, argv);
75 int ip_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
76 int ip_main(int argc UNUSED_PARAM, char **argv)
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")
87 static const ip_func_ptr_t ip_func_ptrs[] = {
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,)
97 ip_func_ptr_t ip_func;
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];
104 return ip_func(argv);
107 #endif /* any of ENABLE_FEATURE_IP_xxx is 1 */