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 25static int ip_print_help(char **argv UNUSED_PARAM) 26{ 27 bb_show_usage(); 28} 29 30typedef int (*ip_func_ptr_t)(char**); 31 32static 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 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 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 */ 108