1/* vi: set sw=4 ts=4: */ 2/* 3 * ip.c "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 * 10 * Changes: 11 * 12 * Rani Assaf <rani@magic.metawire.com> 980929: resolve addresses 13 * Bernhard Fischer rewrote to use index_in_substr_array 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 || ENABLE_FEATURE_IP_ROUTE || ENABLE_FEATURE_IP_LINK || \ 22 ENABLE_FEATURE_IP_TUNNEL || ENABLE_FEATURE_IP_RULE 23 24static int ATTRIBUTE_NORETURN ip_print_help(int ATTRIBUTE_UNUSED ac, char ATTRIBUTE_UNUSED **av) 25{ 26 bb_show_usage(); 27} 28 29static int (*ip_func)(int argc, char **argv) = ip_print_help; 30 31static int ip_do(int argc, char **argv) 32{ 33 ip_parse_common_args(&argc, &argv); 34 return ip_func(argc-1, argv+1); 35} 36 37#if ENABLE_FEATURE_IP_ADDRESS 38int ipaddr_main(int argc, char **argv); 39int ipaddr_main(int argc, char **argv) 40{ 41 ip_func = do_ipaddr; 42 return ip_do(argc, argv); 43} 44#endif 45#if ENABLE_FEATURE_IP_LINK 46int iplink_main(int argc, char **argv); 47int iplink_main(int argc, char **argv) 48{ 49 ip_func = do_iplink; 50 return ip_do(argc, argv); 51} 52#endif 53#if ENABLE_FEATURE_IP_ROUTE 54int iproute_main(int argc, char **argv); 55int iproute_main(int argc, char **argv) 56{ 57 ip_func = do_iproute; 58 return ip_do(argc, argv); 59} 60#endif 61#if ENABLE_FEATURE_IP_RULE 62int iprule_main(int argc, char **argv); 63int iprule_main(int argc, char **argv) 64{ 65 ip_func = do_iprule; 66 return ip_do(argc, argv); 67} 68#endif 69#if ENABLE_FEATURE_IP_TUNNEL 70int iptunnel_main(int argc, char **argv); 71int iptunnel_main(int argc, char **argv) 72{ 73 ip_func = do_iptunnel; 74 return ip_do(argc, argv); 75} 76#endif 77 78 79int ip_main(int argc, char **argv); 80int ip_main(int argc, char **argv) 81{ 82 static const char keywords[] ALIGN1 = 83 USE_FEATURE_IP_ADDRESS("address\0") 84 USE_FEATURE_IP_ROUTE("route\0") 85 USE_FEATURE_IP_LINK("link\0") 86 USE_FEATURE_IP_TUNNEL("tunnel\0" "tunl\0") 87 USE_FEATURE_IP_RULE("rule\0") 88 ; 89 enum { 90 USE_FEATURE_IP_ADDRESS(IP_addr,) 91 USE_FEATURE_IP_ROUTE(IP_route,) 92 USE_FEATURE_IP_LINK(IP_link,) 93 USE_FEATURE_IP_TUNNEL(IP_tunnel, IP_tunl,) 94 USE_FEATURE_IP_RULE(IP_rule,) 95 IP_none 96 }; 97 98 ip_parse_common_args(&argc, &argv); 99 if (argc > 1) { 100 int key = index_in_substrings(keywords, argv[1]); 101 argc -= 2; 102 argv += 2; 103#if ENABLE_FEATURE_IP_ADDRESS 104 if (key == IP_addr) 105 ip_func = do_ipaddr; 106#endif 107#if ENABLE_FEATURE_IP_ROUTE 108 if (key == IP_route) 109 ip_func = do_iproute; 110#endif 111#if ENABLE_FEATURE_IP_LINK 112 if (key == IP_link) 113 ip_func = do_iplink; 114#endif 115#if ENABLE_FEATURE_IP_TUNNEL 116 if (key == IP_tunnel || key == IP_tunl) 117 ip_func = do_iptunnel; 118#endif 119#if ENABLE_FEATURE_IP_RULE 120 if (key == IP_rule) 121 ip_func = do_iprule; 122#endif 123 } 124 return ip_func(argc, argv); 125} 126 127#endif /* any of ENABLE_FEATURE_IP_xxx is 1 */ 128