source: MondoRescue/branches/3.3/mindi-busybox/networking/ip.c@ 3734

Last change on this file since 3734 was 3621, checked in by Bruno Cornec, 10 years ago

New 3?3 banch for incorporation of latest busybox 1.25. Changing minor version to handle potential incompatibilities.

File size: 6.6 KB
RevLine 
[1765]1/* vi: set sw=4 ts=4: */
[821]2/*
[2725]3 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
[821]4 *
[2725]5 * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
[821]6 *
7 * Changes:
[2725]8 * Rani Assaf <rani@magic.metawire.com> 980929: resolve addresses
9 * Bernhard Reutner-Fischer rewrote to use index_in_substr_array
[821]10 */
11
[3232]12/* would need to make the " | " optional depending on more than one selected: */
13//usage:#define ip_trivial_usage
14//usage: "[OPTIONS] {"
15//usage: IF_FEATURE_IP_ADDRESS("address | ")
16//usage: IF_FEATURE_IP_ROUTE("route | ")
17//usage: IF_FEATURE_IP_LINK("link | ")
18//usage: IF_FEATURE_IP_TUNNEL("tunnel | ")
[3621]19//usage: IF_FEATURE_IP_NEIGH("neigh | ")
[3232]20//usage: IF_FEATURE_IP_RULE("rule")
21//usage: "} {COMMAND}"
22//usage:#define ip_full_usage "\n\n"
23//usage: "ip [OPTIONS] OBJECT {COMMAND}\n"
24//usage: "where OBJECT := {"
25//usage: IF_FEATURE_IP_ADDRESS("address | ")
26//usage: IF_FEATURE_IP_ROUTE("route | ")
27//usage: IF_FEATURE_IP_LINK("link | ")
28//usage: IF_FEATURE_IP_TUNNEL("tunnel | ")
[3621]29//usage: IF_FEATURE_IP_NEIGH("neigh | ")
[3232]30//usage: IF_FEATURE_IP_RULE("rule")
31//usage: "}\n"
32//usage: "OPTIONS := { -f[amily] { inet | inet6 | link } | -o[neline] }"
33//usage:
34//usage:#define ipaddr_trivial_usage
35//usage: "{ {add|del} IFADDR dev STRING | {show|flush}\n"
36//usage: " [dev STRING] [to PREFIX] }"
37//usage:#define ipaddr_full_usage "\n\n"
[3621]38//usage: "ipaddr {add|change|replace|delete} IFADDR dev STRING\n"
[3232]39//usage: "ipaddr {show|flush} [dev STRING] [scope SCOPE-ID]\n"
40//usage: " [to PREFIX] [label PATTERN]\n"
41//usage: " IFADDR := PREFIX | ADDR peer PREFIX\n"
42//usage: " [broadcast ADDR] [anycast ADDR]\n"
43//usage: " [label STRING] [scope SCOPE-ID]\n"
44//usage: " SCOPE-ID := [host | link | global | NUMBER]"
45//usage:
46//usage:#define iplink_trivial_usage
47//usage: "{ set DEVICE { up | down | arp { on | off } | show [DEVICE] }"
48//usage:#define iplink_full_usage "\n\n"
49//usage: "iplink set DEVICE { up | down | arp | multicast { on | off } |\n"
50//usage: " dynamic { on | off } |\n"
51//usage: " mtu MTU }\n"
52//usage: "iplink show [DEVICE]"
53//usage:
54//usage:#define iproute_trivial_usage
55//usage: "{ list | flush | add | del | change | append |\n"
56//usage: " replace | test } ROUTE"
57//usage:#define iproute_full_usage "\n\n"
58//usage: "iproute { list | flush } SELECTOR\n"
59//usage: "iproute get ADDRESS [from ADDRESS iif STRING]\n"
60//usage: " [oif STRING] [tos TOS]\n"
61//usage: "iproute { add | del | change | append | replace | test } ROUTE\n"
62//usage: " SELECTOR := [root PREFIX] [match PREFIX] [proto RTPROTO]\n"
63//usage: " ROUTE := [TYPE] PREFIX [tos TOS] [proto RTPROTO] [metric METRIC]"
64//usage:
65//usage:#define iprule_trivial_usage
66//usage: "{[list | add | del] RULE}"
67//usage:#define iprule_full_usage "\n\n"
68//usage: "iprule [list | add | del] SELECTOR ACTION\n"
69//usage: " SELECTOR := [from PREFIX] [to PREFIX] [tos TOS] [fwmark FWMARK]\n"
70//usage: " [dev STRING] [pref NUMBER]\n"
71//usage: " ACTION := [table TABLE_ID] [nat ADDRESS]\n"
72//usage: " [prohibit | reject | unreachable]\n"
73//usage: " [realms [SRCREALM/]DSTREALM]\n"
74//usage: " TABLE_ID := [local | main | default | NUMBER]"
75//usage:
76//usage:#define iptunnel_trivial_usage
77//usage: "{ add | change | del | show } [NAME]\n"
78//usage: " [mode { ipip | gre | sit }]\n"
79//usage: " [remote ADDR] [local ADDR] [ttl TTL]"
80//usage:#define iptunnel_full_usage "\n\n"
81//usage: "iptunnel { add | change | del | show } [NAME]\n"
82//usage: " [mode { ipip | gre | sit }] [remote ADDR] [local ADDR]\n"
83//usage: " [[i|o]seq] [[i|o]key KEY] [[i|o]csum]\n"
84//usage: " [ttl TTL] [tos TOS] [[no]pmtudisc] [dev PHYS_DEV]"
[3621]85//usage:
86//usage:#define ipneigh_trivial_usage
87//usage: "{ show | flush} [ to PREFIX ] [ dev DEV ] [ nud STATE ]"
88//usage:#define ipneigh_full_usage "\n\n"
89//usage: "ipneigh { show | flush} [ to PREFIX ] [ dev DEV ] [ nud STATE ]"
[3232]90
[1765]91#include "libbb.h"
[821]92
93#include "libiproute/utils.h"
94#include "libiproute/ip_common.h"
95
[1765]96#if ENABLE_FEATURE_IP_ADDRESS \
97 || ENABLE_FEATURE_IP_ROUTE \
98 || ENABLE_FEATURE_IP_LINK \
99 || ENABLE_FEATURE_IP_TUNNEL \
[3621]100 || ENABLE_FEATURE_IP_RULE \
101 || ENABLE_FEATURE_IP_NEIGH
[821]102
[2725]103static int FAST_FUNC ip_print_help(char **argv UNUSED_PARAM)
[821]104{
[1765]105 bb_show_usage();
106}
[821]107
[2725]108typedef int FAST_FUNC (*ip_func_ptr_t)(char**);
[821]109
[2725]110static int ip_do(ip_func_ptr_t ip_func, char **argv)
[1765]111{
[2725]112 argv = ip_parse_common_args(argv + 1);
113 return ip_func(argv);
[1765]114}
[821]115
[1765]116#if ENABLE_FEATURE_IP_ADDRESS
[2725]117int ipaddr_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
118int ipaddr_main(int argc UNUSED_PARAM, char **argv)
[1765]119{
[2725]120 return ip_do(do_ipaddr, argv);
[821]121}
122#endif
[1765]123#if ENABLE_FEATURE_IP_LINK
[2725]124int iplink_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
125int iplink_main(int argc UNUSED_PARAM, char **argv)
[1765]126{
[2725]127 return ip_do(do_iplink, argv);
[1765]128}
129#endif
130#if ENABLE_FEATURE_IP_ROUTE
[2725]131int iproute_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
132int iproute_main(int argc UNUSED_PARAM, char **argv)
[1765]133{
[2725]134 return ip_do(do_iproute, argv);
[1765]135}
136#endif
137#if ENABLE_FEATURE_IP_RULE
[2725]138int iprule_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
139int iprule_main(int argc UNUSED_PARAM, char **argv)
[1765]140{
[2725]141 return ip_do(do_iprule, argv);
[1765]142}
143#endif
144#if ENABLE_FEATURE_IP_TUNNEL
[2725]145int iptunnel_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
146int iptunnel_main(int argc UNUSED_PARAM, char **argv)
[1765]147{
[2725]148 return ip_do(do_iptunnel, argv);
[1765]149}
150#endif
[3621]151#if ENABLE_FEATURE_IP_NEIGH
152int ipneigh_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
153int ipneigh_main(int argc UNUSED_PARAM, char **argv)
154{
155 return ip_do(do_ipneigh, argv);
156}
157#endif
[821]158
[1765]159
[2725]160int ip_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
161int ip_main(int argc UNUSED_PARAM, char **argv)
[821]162{
[1765]163 static const char keywords[] ALIGN1 =
[2725]164 IF_FEATURE_IP_ADDRESS("address\0")
165 IF_FEATURE_IP_ROUTE("route\0")
166 IF_FEATURE_IP_ROUTE("r\0")
167 IF_FEATURE_IP_LINK("link\0")
168 IF_FEATURE_IP_TUNNEL("tunnel\0")
169 IF_FEATURE_IP_TUNNEL("tunl\0")
170 IF_FEATURE_IP_RULE("rule\0")
[3621]171 IF_FEATURE_IP_NEIGH("neigh\0")
[1765]172 ;
[2725]173 static const ip_func_ptr_t ip_func_ptrs[] = {
174 ip_print_help,
175 IF_FEATURE_IP_ADDRESS(do_ipaddr,)
176 IF_FEATURE_IP_ROUTE(do_iproute,)
177 IF_FEATURE_IP_ROUTE(do_iproute,)
178 IF_FEATURE_IP_LINK(do_iplink,)
179 IF_FEATURE_IP_TUNNEL(do_iptunnel,)
180 IF_FEATURE_IP_TUNNEL(do_iptunnel,)
181 IF_FEATURE_IP_RULE(do_iprule,)
[3621]182 IF_FEATURE_IP_NEIGH(do_ipneigh,)
[1765]183 };
[2725]184 ip_func_ptr_t ip_func;
185 int key;
[821]186
[2725]187 argv = ip_parse_common_args(argv + 1);
188 key = *argv ? index_in_substrings(keywords, *argv++) : -1;
189 ip_func = ip_func_ptrs[key + 1];
190
191 return ip_func(argv);
[821]192}
[1765]193
194#endif /* any of ENABLE_FEATURE_IP_xxx is 1 */
Note: See TracBrowser for help on using the repository browser.