123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383 |
- #include "libbb.h"
- #include "libiproute/utils.h"
- #include "libiproute/ip_common.h"
- typedef int FAST_FUNC (*ip_func_ptr_t)(char**);
- #if ENABLE_IPADDR \
- || ENABLE_IPLINK \
- || ENABLE_IPROUTE \
- || ENABLE_IPRULE \
- || ENABLE_IPTUNNEL \
- || ENABLE_IPNEIGH
- static int ip_do(ip_func_ptr_t ip_func, char **argv)
- {
- argv = ip_parse_common_args(argv + 1);
- return ip_func(argv);
- }
- #endif
- #if ENABLE_IPADDR
- int ipaddr_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
- int ipaddr_main(int argc UNUSED_PARAM, char **argv)
- {
- return ip_do(do_ipaddr, argv);
- }
- #endif
- #if ENABLE_IPLINK
- int iplink_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
- int iplink_main(int argc UNUSED_PARAM, char **argv)
- {
- return ip_do(do_iplink, argv);
- }
- #endif
- #if ENABLE_IPROUTE
- int iproute_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
- int iproute_main(int argc UNUSED_PARAM, char **argv)
- {
- return ip_do(do_iproute, argv);
- }
- #endif
- #if ENABLE_IPRULE
- int iprule_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
- int iprule_main(int argc UNUSED_PARAM, char **argv)
- {
- return ip_do(do_iprule, argv);
- }
- #endif
- #if ENABLE_IPTUNNEL
- int iptunnel_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
- int iptunnel_main(int argc UNUSED_PARAM, char **argv)
- {
- return ip_do(do_iptunnel, argv);
- }
- #endif
- #if ENABLE_IPNEIGH
- int ipneigh_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
- int ipneigh_main(int argc UNUSED_PARAM, char **argv)
- {
- return ip_do(do_ipneigh, argv);
- }
- #endif
- #if ENABLE_IP
- static int FAST_FUNC ip_print_help(char **argv UNUSED_PARAM)
- {
- bb_show_usage();
- }
- int ip_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
- int ip_main(int argc UNUSED_PARAM, char **argv)
- {
- static const char keywords[] ALIGN1 = ""
- IF_FEATURE_IP_ADDRESS("address\0")
- IF_FEATURE_IP_ROUTE("route\0")
- IF_FEATURE_IP_ROUTE("r\0")
- IF_FEATURE_IP_LINK("link\0")
- IF_FEATURE_IP_TUNNEL("tunnel\0")
- IF_FEATURE_IP_TUNNEL("tunl\0")
- IF_FEATURE_IP_RULE("rule\0")
- IF_FEATURE_IP_NEIGH("neigh\0")
- ;
- static const ip_func_ptr_t ip_func_ptrs[] = {
- ip_print_help,
- IF_FEATURE_IP_ADDRESS(do_ipaddr,)
- IF_FEATURE_IP_ROUTE(do_iproute,)
- IF_FEATURE_IP_ROUTE(do_iproute,)
- IF_FEATURE_IP_LINK(do_iplink,)
- IF_FEATURE_IP_TUNNEL(do_iptunnel,)
- IF_FEATURE_IP_TUNNEL(do_iptunnel,)
- IF_FEATURE_IP_RULE(do_iprule,)
- IF_FEATURE_IP_NEIGH(do_ipneigh,)
- };
- ip_func_ptr_t ip_func;
- int key;
- argv = ip_parse_common_args(argv + 1);
- if (ARRAY_SIZE(ip_func_ptrs) > 1 && *argv)
- key = index_in_substrings(keywords, *argv++);
- else
- key = -1;
- ip_func = ip_func_ptrs[key + 1];
- return ip_func(argv);
- }
- #endif
|