Changeset 1770 in MondoRescue for branches/stable/mindi-busybox/networking/ip.c
- Timestamp:
- Nov 6, 2007, 11:01:53 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/stable/mindi-busybox/networking/ip.c
r821 r1770 1 /* vi: set sw=4 ts=4: */ 1 2 /* 2 3 * ip.c "ip" utility frontend. … … 10 11 * 11 12 * Rani Assaf <rani@magic.metawire.com> 980929: resolve addresses 13 * Bernhard Fischer rewrote to use index_in_substr_array 12 14 */ 13 15 14 #include <stdio.h> 15 #include <stdlib.h> 16 #include <unistd.h> 17 #include <syslog.h> 18 #include <fcntl.h> 19 #include <sys/socket.h> 20 #include <netinet/in.h> 21 #include <string.h> 16 #include "libbb.h" 22 17 23 18 #include "libiproute/utils.h" 24 19 #include "libiproute/ip_common.h" 25 20 26 #include "busybox.h" 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 27 26 28 #if 0 29 int preferred_family = AF_UNSPEC; 30 int oneline = 0;31 char * _SL_ = NULL; 27 static int ATTRIBUTE_NORETURN ip_print_help(int ATTRIBUTE_UNUSED ac, char ATTRIBUTE_UNUSED **av) 28 { 29 bb_show_usage(); 30 } 32 31 33 void ip_parse_common_args(int *argcp, char ***argvp) 32 static int (*ip_func)(int argc, char **argv) = ip_print_help; 33 34 static int ip_do(int argc, char **argv) 34 35 { 35 int argc = *argcp; 36 char **argv = *argvp; 36 ip_parse_common_args(&argc, &argv); 37 return ip_func(argc-1, argv+1); 38 } 37 39 38 while (argc > 1) { 39 char *opt = argv[1]; 40 41 if (strcmp(opt,"--") == 0) { 42 argc--; argv++; 43 break; 44 } 45 46 if (opt[0] != '-') 47 break; 48 49 if (opt[1] == '-') 50 opt++; 51 52 if (matches(opt, "-family") == 0) { 53 argc--; 54 argv++; 55 if (strcmp(argv[1], "inet") == 0) 56 preferred_family = AF_INET; 57 else if (strcmp(argv[1], "inet6") == 0) 58 preferred_family = AF_INET6; 59 else if (strcmp(argv[1], "link") == 0) 60 preferred_family = AF_PACKET; 61 else 62 invarg(bb_msg_invalid_arg, argv[1], "-family"); 63 } else if (strcmp(opt, "-4") == 0) { 64 preferred_family = AF_INET; 65 } else if (strcmp(opt, "-6") == 0) { 66 preferred_family = AF_INET6; 67 } else if (strcmp(opt, "-0") == 0) { 68 preferred_family = AF_PACKET; 69 } else if (matches(opt, "-oneline") == 0) { 70 ++oneline; 71 } else { 72 bb_show_usage(); 73 } 74 argc--; argv++; 75 } 76 _SL_ = oneline ? "\\" : "\n" ; 40 #if ENABLE_FEATURE_IP_ADDRESS 41 int ipaddr_main(int argc, char **argv); 42 int ipaddr_main(int argc, char **argv) 43 { 44 ip_func = do_ipaddr; 45 return ip_do(argc, argv); 46 } 47 #endif 48 #if ENABLE_FEATURE_IP_LINK 49 int iplink_main(int argc, char **argv); 50 int iplink_main(int argc, char **argv) 51 { 52 ip_func = do_iplink; 53 return ip_do(argc, argv); 54 } 55 #endif 56 #if ENABLE_FEATURE_IP_ROUTE 57 int iproute_main(int argc, char **argv); 58 int iproute_main(int argc, char **argv) 59 { 60 ip_func = do_iproute; 61 return ip_do(argc, argv); 62 } 63 #endif 64 #if ENABLE_FEATURE_IP_RULE 65 int iprule_main(int argc, char **argv); 66 int iprule_main(int argc, char **argv) 67 { 68 ip_func = do_iprule; 69 return ip_do(argc, argv); 70 } 71 #endif 72 #if ENABLE_FEATURE_IP_TUNNEL 73 int iptunnel_main(int argc, char **argv); 74 int iptunnel_main(int argc, char **argv) 75 { 76 ip_func = do_iptunnel; 77 return ip_do(argc, argv); 77 78 } 78 79 #endif 79 80 81 82 int ip_main(int argc, char **argv); 80 83 int ip_main(int argc, char **argv) 81 84 { 82 int ret = EXIT_FAILURE; 85 static const char keywords[] ALIGN1 = 86 USE_FEATURE_IP_ADDRESS("address\0") 87 USE_FEATURE_IP_ROUTE("route\0") 88 USE_FEATURE_IP_LINK("link\0") 89 USE_FEATURE_IP_TUNNEL("tunnel\0" "tunl\0") 90 USE_FEATURE_IP_RULE("rule\0") 91 ; 92 enum { 93 USE_FEATURE_IP_ADDRESS(IP_addr,) 94 USE_FEATURE_IP_ROUTE(IP_route,) 95 USE_FEATURE_IP_LINK(IP_link,) 96 USE_FEATURE_IP_TUNNEL(IP_tunnel, IP_tunl,) 97 USE_FEATURE_IP_RULE(IP_rule,) 98 IP_none 99 }; 83 100 84 101 ip_parse_common_args(&argc, &argv); 85 86 102 if (argc > 1) { 87 #ifdef CONFIG_FEATURE_IP_ADDRESS 88 if (matches(argv[1], "address") == 0) { 89 ret = do_ipaddr(argc-2, argv+2); 90 } 103 int key = index_in_substrings(keywords, argv[1]); 104 argc -= 2; 105 argv += 2; 106 #if ENABLE_FEATURE_IP_ADDRESS 107 if (key == IP_addr) 108 ip_func = do_ipaddr; 91 109 #endif 92 #ifdef CONFIG_FEATURE_IP_ROUTE 93 if (matches(argv[1], "route") == 0) { 94 ret = do_iproute(argc-2, argv+2); 95 } 110 #if ENABLE_FEATURE_IP_ROUTE 111 if (key == IP_route) 112 ip_func = do_iproute; 96 113 #endif 97 #ifdef CONFIG_FEATURE_IP_LINK 98 if (matches(argv[1], "link") == 0) { 99 ret = do_iplink(argc-2, argv+2); 100 } 114 #if ENABLE_FEATURE_IP_LINK 115 if (key == IP_link) 116 ip_func = do_iplink; 101 117 #endif 102 #ifdef CONFIG_FEATURE_IP_TUNNEL 103 if (matches(argv[1], "tunnel") == 0 || strcmp(argv[1], "tunl") == 0) { 104 ret = do_iptunnel(argc-2, argv+2); 105 } 118 #if ENABLE_FEATURE_IP_TUNNEL 119 if (key == IP_tunnel || key == IP_tunl) 120 ip_func = do_iptunnel; 121 #endif 122 #if ENABLE_FEATURE_IP_RULE 123 if (key == IP_rule) 124 ip_func = do_iprule; 106 125 #endif 107 126 } 108 if (ret) { 109 bb_show_usage(); 110 } 111 return(EXIT_SUCCESS); 127 return ip_func(argc, argv); 112 128 } 129 130 #endif /* any of ENABLE_FEATURE_IP_xxx is 1 */
Note:
See TracChangeset
for help on using the changeset viewer.