aboutsummaryrefslogtreecommitdiff
path: root/networking/ip.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--networking/ip.c162
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
228static int FAST_FUNC ip_print_help(char **argv UNUSED_PARAM)
229{
230 bb_show_usage();
231}
232
233typedef int FAST_FUNC (*ip_func_ptr_t)(char**); 227typedef 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
235static int ip_do(ip_func_ptr_t ip_func, char **argv) 235static 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
242int ipaddr_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 243int ipaddr_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
243int ipaddr_main(int argc UNUSED_PARAM, char **argv) 244int 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
249int iplink_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 250int iplink_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
250int iplink_main(int argc UNUSED_PARAM, char **argv) 251int 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
256int iproute_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 257int iproute_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
257int iproute_main(int argc UNUSED_PARAM, char **argv) 258int 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
263int iprule_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 264int iprule_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
264int iprule_main(int argc UNUSED_PARAM, char **argv) 265int 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
270int iptunnel_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 271int iptunnel_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
271int iptunnel_main(int argc UNUSED_PARAM, char **argv) 272int 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
277int ipneigh_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 278int ipneigh_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
278int ipneigh_main(int argc UNUSED_PARAM, char **argv) 279int 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
286static int FAST_FUNC ip_print_help(char **argv UNUSED_PARAM)
287{
288 bb_show_usage();
289}
284 290
285int ip_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 291int ip_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
286int ip_main(int argc UNUSED_PARAM, char **argv) 292int 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 */