diff options
Diffstat (limited to '')
-rw-r--r-- | networking/ip.c | 162 |
1 files changed, 85 insertions, 77 deletions
diff --git a/networking/ip.c b/networking/ip.c index c3607b74f..939721e46 100644 --- a/networking/ip.c +++ b/networking/ip.c | |||
@@ -17,24 +17,72 @@ | |||
17 | //config: utility. You generally don't need "ip" to use busybox with | 17 | //config: utility. You generally don't need "ip" to use busybox with |
18 | //config: TCP/IP. | 18 | //config: TCP/IP. |
19 | //config: | 19 | //config: |
20 | //config:config IPADDR | ||
21 | //config: bool "ipaddr" | ||
22 | //config: default y | ||
23 | //config: select FEATURE_IP_ADDRESS | ||
24 | //config: select PLATFORM_LINUX | ||
25 | //config: help | ||
26 | //config: Support short form of ip addr: ipaddr | ||
27 | //config: | ||
28 | //config:config IPLINK | ||
29 | //config: bool "iplink" | ||
30 | //config: default y | ||
31 | //config: select FEATURE_IP_LINK | ||
32 | //config: select PLATFORM_LINUX | ||
33 | //config: help | ||
34 | //config: Support short form of ip link: iplink | ||
35 | //config: | ||
36 | //config:config IPROUTE | ||
37 | //config: bool "iproute" | ||
38 | //config: default y | ||
39 | //config: select FEATURE_IP_ROUTE | ||
40 | //config: select PLATFORM_LINUX | ||
41 | //config: help | ||
42 | //config: Support short form of ip route: iproute | ||
43 | //config: | ||
44 | //config:config IPTUNNEL | ||
45 | //config: bool "iptunnel" | ||
46 | //config: default y | ||
47 | //config: select FEATURE_IP_TUNNEL | ||
48 | //config: select PLATFORM_LINUX | ||
49 | //config: help | ||
50 | //config: Support short form of ip tunnel: iptunnel | ||
51 | //config: | ||
52 | //config:config IPRULE | ||
53 | //config: bool "iprule" | ||
54 | //config: default y | ||
55 | //config: select FEATURE_IP_RULE | ||
56 | //config: select PLATFORM_LINUX | ||
57 | //config: help | ||
58 | //config: Support short form of ip rule: iprule | ||
59 | //config: | ||
60 | //config:config IPNEIGH | ||
61 | //config: bool "ipneigh" | ||
62 | //config: default y | ||
63 | //config: select FEATURE_IP_NEIGH | ||
64 | //config: select PLATFORM_LINUX | ||
65 | //config: help | ||
66 | //config: Support short form of ip neigh: ipneigh | ||
67 | //config: | ||
20 | //config:config FEATURE_IP_ADDRESS | 68 | //config:config FEATURE_IP_ADDRESS |
21 | //config: bool "ip address" | 69 | //config: bool "ip address" |
22 | //config: default y | 70 | //config: default y |
23 | //config: depends on IP | 71 | //config: depends on IP || IPADDR |
24 | //config: help | 72 | //config: help |
25 | //config: Address manipulation support for the "ip" applet. | 73 | //config: Address manipulation support for the "ip" applet. |
26 | //config: | 74 | //config: |
27 | //config:config FEATURE_IP_LINK | 75 | //config:config FEATURE_IP_LINK |
28 | //config: bool "ip link" | 76 | //config: bool "ip link" |
29 | //config: default y | 77 | //config: default y |
30 | //config: depends on IP | 78 | //config: depends on IP || IPLINK |
31 | //config: help | 79 | //config: help |
32 | //config: Configure network devices with "ip". | 80 | //config: Configure network devices with "ip". |
33 | //config: | 81 | //config: |
34 | //config:config FEATURE_IP_ROUTE | 82 | //config:config FEATURE_IP_ROUTE |
35 | //config: bool "ip route" | 83 | //config: bool "ip route" |
36 | //config: default y | 84 | //config: default y |
37 | //config: depends on IP | 85 | //config: depends on IP || IPROUTE |
38 | //config: help | 86 | //config: help |
39 | //config: Add support for routing table management to "ip". | 87 | //config: Add support for routing table management to "ip". |
40 | //config: | 88 | //config: |
@@ -48,83 +96,35 @@ | |||
48 | //config:config FEATURE_IP_TUNNEL | 96 | //config:config FEATURE_IP_TUNNEL |
49 | //config: bool "ip tunnel" | 97 | //config: bool "ip tunnel" |
50 | //config: default y | 98 | //config: default y |
51 | //config: depends on IP | 99 | //config: depends on IP || IPTUNNEL |
52 | //config: help | 100 | //config: help |
53 | //config: Add support for tunneling commands to "ip". | 101 | //config: Add support for tunneling commands to "ip". |
54 | //config: | 102 | //config: |
55 | //config:config FEATURE_IP_RULE | 103 | //config:config FEATURE_IP_RULE |
56 | //config: bool "ip rule" | 104 | //config: bool "ip rule" |
57 | //config: default y | 105 | //config: default y |
58 | //config: depends on IP | 106 | //config: depends on IP || IPRULE |
59 | //config: help | 107 | //config: help |
60 | //config: Add support for rule commands to "ip". | 108 | //config: Add support for rule commands to "ip". |
61 | //config: | 109 | //config: |
62 | //config:config FEATURE_IP_NEIGH | 110 | //config:config FEATURE_IP_NEIGH |
63 | //config: bool "ip neighbor" | 111 | //config: bool "ip neighbor" |
64 | //config: default y | 112 | //config: default y |
65 | //config: depends on IP | 113 | //config: depends on IP || IPNEIGH |
66 | //config: help | 114 | //config: help |
67 | //config: Add support for neighbor commands to "ip". | 115 | //config: Add support for neighbor commands to "ip". |
68 | //config: | 116 | //config: |
69 | //config:config FEATURE_IP_SHORT_FORMS | ||
70 | //config: bool "Support short forms of ip commands" | ||
71 | //config: default y | ||
72 | //config: depends on IP | ||
73 | //config: help | ||
74 | //config: Also support short-form of ip <OBJECT> commands: | ||
75 | //config: ip addr -> ipaddr | ||
76 | //config: ip link -> iplink | ||
77 | //config: ip route -> iproute | ||
78 | //config: ip tunnel -> iptunnel | ||
79 | //config: ip rule -> iprule | ||
80 | //config: ip neigh -> ipneigh | ||
81 | //config: | ||
82 | //config: Say N unless you desparately need the short form of the ip | ||
83 | //config: object commands. | ||
84 | //config: | ||
85 | //config:config FEATURE_IP_RARE_PROTOCOLS | 117 | //config:config FEATURE_IP_RARE_PROTOCOLS |
86 | //config: bool "Support displaying rarely used link types" | 118 | //config: bool "Support displaying rarely used link types" |
87 | //config: default n | 119 | //config: default n |
88 | //config: depends on IP | 120 | //config: depends on IP || IPADDR || IPLINK || IPROUTE || IPTUNNEL || IPRULE || IPNEIGH |
89 | //config: help | 121 | //config: help |
90 | //config: If you are not going to use links of type "frad", "econet", | 122 | //config: If you are not going to use links of type "frad", "econet", |
91 | //config: "bif" etc, you probably don't need to enable this. | 123 | //config: "bif" etc, you probably don't need to enable this. |
92 | //config: Ethernet, wireless, infrared, ppp/slip, ip tunnelling | 124 | //config: Ethernet, wireless, infrared, ppp/slip, ip tunnelling |
93 | //config: link types are supported without this option selected. | 125 | //config: link types are supported without this option selected. |
94 | //config: | ||
95 | //config:config IPADDR | ||
96 | //config: bool | ||
97 | //config: default y | ||
98 | //config: depends on FEATURE_IP_SHORT_FORMS && FEATURE_IP_ADDRESS | ||
99 | //config: | ||
100 | //config:config IPLINK | ||
101 | //config: bool | ||
102 | //config: default y | ||
103 | //config: depends on FEATURE_IP_SHORT_FORMS && FEATURE_IP_LINK | ||
104 | //config: | ||
105 | //config:config IPROUTE | ||
106 | //config: bool | ||
107 | //config: default y | ||
108 | //config: depends on FEATURE_IP_SHORT_FORMS && FEATURE_IP_ROUTE | ||
109 | //config: | ||
110 | //config:config IPTUNNEL | ||
111 | //config: bool | ||
112 | //config: default y | ||
113 | //config: depends on FEATURE_IP_SHORT_FORMS && FEATURE_IP_TUNNEL | ||
114 | //config: | ||
115 | //config:config IPRULE | ||
116 | //config: bool | ||
117 | //config: default y | ||
118 | //config: depends on FEATURE_IP_SHORT_FORMS && FEATURE_IP_RULE | ||
119 | //config: | ||
120 | //config:config IPNEIGH | ||
121 | //config: bool | ||
122 | //config: default y | ||
123 | //config: depends on FEATURE_IP_SHORT_FORMS && FEATURE_IP_NEIGH | ||
124 | 126 | ||
125 | //applet:#if ENABLE_FEATURE_IP_ADDRESS || ENABLE_FEATURE_IP_ROUTE || ENABLE_FEATURE_IP_LINK || ENABLE_FEATURE_IP_TUNNEL || ENABLE_FEATURE_IP_RULE || ENABLE_FEATURE_IP_NEIGH | ||
126 | //applet:IF_IP(APPLET(ip, BB_DIR_SBIN, BB_SUID_DROP)) | 127 | //applet:IF_IP(APPLET(ip, BB_DIR_SBIN, BB_SUID_DROP)) |
127 | //applet:#endif | ||
128 | //applet:IF_IPADDR(APPLET(ipaddr, BB_DIR_SBIN, BB_SUID_DROP)) | 128 | //applet:IF_IPADDR(APPLET(ipaddr, BB_DIR_SBIN, BB_SUID_DROP)) |
129 | //applet:IF_IPLINK(APPLET(iplink, BB_DIR_SBIN, BB_SUID_DROP)) | 129 | //applet:IF_IPLINK(APPLET(iplink, BB_DIR_SBIN, BB_SUID_DROP)) |
130 | //applet:IF_IPROUTE(APPLET(iproute, BB_DIR_SBIN, BB_SUID_DROP)) | 130 | //applet:IF_IPROUTE(APPLET(iproute, BB_DIR_SBIN, BB_SUID_DROP)) |
@@ -133,6 +133,12 @@ | |||
133 | //applet:IF_IPNEIGH(APPLET(ipneigh, BB_DIR_SBIN, BB_SUID_DROP)) | 133 | //applet:IF_IPNEIGH(APPLET(ipneigh, BB_DIR_SBIN, BB_SUID_DROP)) |
134 | 134 | ||
135 | //kbuild:lib-$(CONFIG_IP) += ip.o | 135 | //kbuild:lib-$(CONFIG_IP) += ip.o |
136 | //kbuild:lib-$(CONFIG_IPADDR) += ip.o | ||
137 | //kbuild:lib-$(CONFIG_IPLINK) += ip.o | ||
138 | //kbuild:lib-$(CONFIG_IPROUTE) += ip.o | ||
139 | //kbuild:lib-$(CONFIG_IPRULE) += ip.o | ||
140 | //kbuild:lib-$(CONFIG_IPTUNNEL) += ip.o | ||
141 | //kbuild:lib-$(CONFIG_IPNEIGH) += ip.o | ||
136 | 142 | ||
137 | /* would need to make the " | " optional depending on more than one selected: */ | 143 | /* would need to make the " | " optional depending on more than one selected: */ |
138 | //usage:#define ip_trivial_usage | 144 | //usage:#define ip_trivial_usage |
@@ -218,62 +224,57 @@ | |||
218 | #include "libiproute/utils.h" | 224 | #include "libiproute/utils.h" |
219 | #include "libiproute/ip_common.h" | 225 | #include "libiproute/ip_common.h" |
220 | 226 | ||
221 | #if ENABLE_FEATURE_IP_ADDRESS \ | ||
222 | || ENABLE_FEATURE_IP_ROUTE \ | ||
223 | || ENABLE_FEATURE_IP_LINK \ | ||
224 | || ENABLE_FEATURE_IP_TUNNEL \ | ||
225 | || ENABLE_FEATURE_IP_RULE \ | ||
226 | || ENABLE_FEATURE_IP_NEIGH | ||
227 | |||
228 | static int FAST_FUNC ip_print_help(char **argv UNUSED_PARAM) | ||
229 | { | ||
230 | bb_show_usage(); | ||
231 | } | ||
232 | |||
233 | typedef int FAST_FUNC (*ip_func_ptr_t)(char**); | 227 | typedef int FAST_FUNC (*ip_func_ptr_t)(char**); |
234 | 228 | ||
229 | #if ENABLE_IPADDR \ | ||
230 | || ENABLE_IPLINK \ | ||
231 | || ENABLE_IPROUTE \ | ||
232 | || ENABLE_IPRULE \ | ||
233 | || ENABLE_IPTUNNEL \ | ||
234 | || ENABLE_IPNEIGH | ||
235 | static int ip_do(ip_func_ptr_t ip_func, char **argv) | 235 | static int ip_do(ip_func_ptr_t ip_func, char **argv) |
236 | { | 236 | { |
237 | argv = ip_parse_common_args(argv + 1); | 237 | argv = ip_parse_common_args(argv + 1); |
238 | return ip_func(argv); | 238 | return ip_func(argv); |
239 | } | 239 | } |
240 | #endif | ||
240 | 241 | ||
241 | #if ENABLE_FEATURE_IP_ADDRESS | 242 | #if ENABLE_IPADDR |
242 | int ipaddr_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 243 | int ipaddr_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
243 | int ipaddr_main(int argc UNUSED_PARAM, char **argv) | 244 | int ipaddr_main(int argc UNUSED_PARAM, char **argv) |
244 | { | 245 | { |
245 | return ip_do(do_ipaddr, argv); | 246 | return ip_do(do_ipaddr, argv); |
246 | } | 247 | } |
247 | #endif | 248 | #endif |
248 | #if ENABLE_FEATURE_IP_LINK | 249 | #if ENABLE_IPLINK |
249 | int iplink_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 250 | int iplink_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
250 | int iplink_main(int argc UNUSED_PARAM, char **argv) | 251 | int iplink_main(int argc UNUSED_PARAM, char **argv) |
251 | { | 252 | { |
252 | return ip_do(do_iplink, argv); | 253 | return ip_do(do_iplink, argv); |
253 | } | 254 | } |
254 | #endif | 255 | #endif |
255 | #if ENABLE_FEATURE_IP_ROUTE | 256 | #if ENABLE_IPROUTE |
256 | int iproute_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 257 | int iproute_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
257 | int iproute_main(int argc UNUSED_PARAM, char **argv) | 258 | int iproute_main(int argc UNUSED_PARAM, char **argv) |
258 | { | 259 | { |
259 | return ip_do(do_iproute, argv); | 260 | return ip_do(do_iproute, argv); |
260 | } | 261 | } |
261 | #endif | 262 | #endif |
262 | #if ENABLE_FEATURE_IP_RULE | 263 | #if ENABLE_IPRULE |
263 | int iprule_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 264 | int iprule_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
264 | int iprule_main(int argc UNUSED_PARAM, char **argv) | 265 | int iprule_main(int argc UNUSED_PARAM, char **argv) |
265 | { | 266 | { |
266 | return ip_do(do_iprule, argv); | 267 | return ip_do(do_iprule, argv); |
267 | } | 268 | } |
268 | #endif | 269 | #endif |
269 | #if ENABLE_FEATURE_IP_TUNNEL | 270 | #if ENABLE_IPTUNNEL |
270 | int iptunnel_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 271 | int iptunnel_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
271 | int iptunnel_main(int argc UNUSED_PARAM, char **argv) | 272 | int iptunnel_main(int argc UNUSED_PARAM, char **argv) |
272 | { | 273 | { |
273 | return ip_do(do_iptunnel, argv); | 274 | return ip_do(do_iptunnel, argv); |
274 | } | 275 | } |
275 | #endif | 276 | #endif |
276 | #if ENABLE_FEATURE_IP_NEIGH | 277 | #if ENABLE_IPNEIGH |
277 | int ipneigh_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 278 | int ipneigh_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
278 | int ipneigh_main(int argc UNUSED_PARAM, char **argv) | 279 | int ipneigh_main(int argc UNUSED_PARAM, char **argv) |
279 | { | 280 | { |
@@ -281,11 +282,16 @@ int ipneigh_main(int argc UNUSED_PARAM, char **argv) | |||
281 | } | 282 | } |
282 | #endif | 283 | #endif |
283 | 284 | ||
285 | #if ENABLE_IP | ||
286 | static int FAST_FUNC ip_print_help(char **argv UNUSED_PARAM) | ||
287 | { | ||
288 | bb_show_usage(); | ||
289 | } | ||
284 | 290 | ||
285 | int ip_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 291 | int ip_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
286 | int ip_main(int argc UNUSED_PARAM, char **argv) | 292 | int ip_main(int argc UNUSED_PARAM, char **argv) |
287 | { | 293 | { |
288 | static const char keywords[] ALIGN1 = | 294 | static const char keywords[] ALIGN1 = "" |
289 | IF_FEATURE_IP_ADDRESS("address\0") | 295 | IF_FEATURE_IP_ADDRESS("address\0") |
290 | IF_FEATURE_IP_ROUTE("route\0") | 296 | IF_FEATURE_IP_ROUTE("route\0") |
291 | IF_FEATURE_IP_ROUTE("r\0") | 297 | IF_FEATURE_IP_ROUTE("r\0") |
@@ -310,10 +316,12 @@ int ip_main(int argc UNUSED_PARAM, char **argv) | |||
310 | int key; | 316 | int key; |
311 | 317 | ||
312 | argv = ip_parse_common_args(argv + 1); | 318 | argv = ip_parse_common_args(argv + 1); |
313 | key = *argv ? index_in_substrings(keywords, *argv++) : -1; | 319 | if (ARRAY_SIZE(ip_func_ptrs) > 1 && *argv) |
320 | key = index_in_substrings(keywords, *argv++); | ||
321 | else | ||
322 | key = -1; | ||
314 | ip_func = ip_func_ptrs[key + 1]; | 323 | ip_func = ip_func_ptrs[key + 1]; |
315 | 324 | ||
316 | return ip_func(argv); | 325 | return ip_func(argv); |
317 | } | 326 | } |
318 | 327 | #endif | |
319 | #endif /* any of ENABLE_FEATURE_IP_xxx is 1 */ | ||