diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2017-01-21 14:27:07 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2017-01-21 14:27:07 +0100 |
commit | 12389889c052cf7bf494bd7cabc0819f6fe9888f (patch) | |
tree | cf5f8852d5c3aa6495ba82a961b03f2829c16e92 | |
parent | 8908c1d4f518829cb94e40da54f536a5d7b6404c (diff) | |
download | busybox-w32-12389889c052cf7bf494bd7cabc0819f6fe9888f.tar.gz busybox-w32-12389889c052cf7bf494bd7cabc0819f6fe9888f.tar.bz2 busybox-w32-12389889c052cf7bf494bd7cabc0819f6fe9888f.zip |
ip: better --help
Was:
Usage: ip [OPTIONS] address|route|link|tunnel|neigh|rule [COMMAND]
ip [OPTIONS] OBJECT [COMMAND]
where OBJECT := address|route|link|tunnel|neigh|rule
OPTIONS := -f[amily] inet|inet6|link | -o[neline]
User: instead of repeating list of OBJECTs twice, you could at least
show available COMMANDs...
Now:
Usage: ip [OPTIONS] address|route|link|tunnel|neigh|rule [COMMAND]
OPTIONS := -f[amily] inet|inet6|link | -o[neline]
COMMAND :=
ip addr add|del IFADDR dev IFACE | show|flush [dev IFACE] [to PREFIX]
ip route list|flush|add|del|change|append|replace|test ROUTE
ip link set IFACE [up|down] [arp on|off] | show [IFACE]
ip tunnel add|change|del|show [NAME]
[mode ipip|gre|sit]
[remote ADDR] [local ADDR] [ttl TTL]
ip neigh show|flush [to PREFIX] [dev DEV] [nud STATE]
ip rule [list] | add|del SELECTOR ACTION
While at it, tweak tc --help too (it stays disabled, thus no effect)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | networking/ip.c | 88 | ||||
-rw-r--r-- | networking/tc.c | 30 |
2 files changed, 70 insertions, 48 deletions
diff --git a/networking/ip.c b/networking/ip.c index 28e243c2b..0f52b19dd 100644 --- a/networking/ip.c +++ b/networking/ip.c | |||
@@ -140,33 +140,11 @@ | |||
140 | //kbuild:lib-$(CONFIG_IPTUNNEL) += ip.o | 140 | //kbuild:lib-$(CONFIG_IPTUNNEL) += ip.o |
141 | //kbuild:lib-$(CONFIG_IPNEIGH) += ip.o | 141 | //kbuild:lib-$(CONFIG_IPNEIGH) += ip.o |
142 | 142 | ||
143 | /* would need to make the " | " optional depending on more than one selected: */ | ||
144 | //usage:#define ip_trivial_usage | ||
145 | //usage: "[OPTIONS] " | ||
146 | //usage: IF_FEATURE_IP_ADDRESS("address|") | ||
147 | //usage: IF_FEATURE_IP_ROUTE("route|") | ||
148 | //usage: IF_FEATURE_IP_LINK("link|") | ||
149 | //usage: IF_FEATURE_IP_TUNNEL("tunnel|") | ||
150 | //usage: IF_FEATURE_IP_NEIGH("neigh|") | ||
151 | //usage: IF_FEATURE_IP_RULE("rule") | ||
152 | //usage: " [COMMAND]" | ||
153 | //usage:#define ip_full_usage "\n\n" | ||
154 | //usage: "ip [OPTIONS] OBJECT [COMMAND]\n" | ||
155 | //usage: " OBJECT := " | ||
156 | //usage: IF_FEATURE_IP_ADDRESS("address|") | ||
157 | //usage: IF_FEATURE_IP_ROUTE("route|") | ||
158 | //usage: IF_FEATURE_IP_LINK("link|") | ||
159 | //usage: IF_FEATURE_IP_TUNNEL("tunnel|") | ||
160 | //usage: IF_FEATURE_IP_NEIGH("neigh|") | ||
161 | //usage: IF_FEATURE_IP_RULE("rule") | ||
162 | //usage: "\n" | ||
163 | //usage: " OPTIONS := -f[amily] inet|inet6|link | -o[neline]" | ||
164 | //usage: | ||
165 | //usage:#define ipaddr_trivial_usage | 143 | //usage:#define ipaddr_trivial_usage |
166 | //usage: "add|del IFADDR dev STRING | show|flush [dev STRING] [to PREFIX]" | 144 | //usage: "add|del IFADDR dev IFACE | show|flush [dev IFACE] [to PREFIX]" |
167 | //usage:#define ipaddr_full_usage "\n\n" | 145 | //usage:#define ipaddr_full_usage "\n\n" |
168 | //usage: "ipaddr add|change|replace|delete IFADDR dev STRING\n" | 146 | //usage: "ipaddr add|change|replace|delete IFADDR dev IFACE\n" |
169 | //usage: "ipaddr show|flush [dev STRING] [scope SCOPE-ID]\n" | 147 | //usage: "ipaddr show|flush [dev IFACE] [scope SCOPE-ID]\n" |
170 | //usage: " [to PREFIX] [label PATTERN]\n" | 148 | //usage: " [to PREFIX] [label PATTERN]\n" |
171 | //usage: " IFADDR := PREFIX | ADDR peer PREFIX\n" | 149 | //usage: " IFADDR := PREFIX | ADDR peer PREFIX\n" |
172 | //usage: " [broadcast ADDR] [anycast ADDR]\n" | 150 | //usage: " [broadcast ADDR] [anycast ADDR]\n" |
@@ -174,14 +152,14 @@ | |||
174 | //usage: " SCOPE-ID := [host|link|global|NUMBER]" | 152 | //usage: " SCOPE-ID := [host|link|global|NUMBER]" |
175 | //usage: | 153 | //usage: |
176 | //usage:#define iplink_trivial_usage | 154 | //usage:#define iplink_trivial_usage |
177 | //usage: "{ set DEVICE [up|down] [arp on|off] } | show [DEVICE]" | 155 | //usage: "set IFACE [up|down] [arp on|off] | show [IFACE]" |
178 | //usage:#define iplink_full_usage "\n\n" | 156 | //usage:#define iplink_full_usage "\n\n" |
179 | //usage: "iplink set DEVICE [up|down]\n" | 157 | //usage: "iplink set IFACE [up|down]\n" |
180 | //usage: " [arp on|off]\n" | 158 | //usage: " [arp on|off]\n" |
181 | //usage: " [dynamic on|off]\n" | 159 | //usage: " [dynamic on|off]\n" |
182 | //usage: " [multicast on|off]\n" | 160 | //usage: " [multicast on|off]\n" |
183 | //usage: " [mtu MTU]\n" | 161 | //usage: " [mtu MTU]\n" |
184 | //usage: "iplink show [DEVICE]" | 162 | //usage: "iplink show [IFACE]" |
185 | //usage: | 163 | //usage: |
186 | //usage:#define iproute_trivial_usage | 164 | //usage:#define iproute_trivial_usage |
187 | //usage: "list|flush|add|del|change|append|replace|test ROUTE" | 165 | //usage: "list|flush|add|del|change|append|replace|test ROUTE" |
@@ -194,11 +172,10 @@ | |||
194 | //usage: " ROUTE := [TYPE] PREFIX [tos TOS] [proto RTPROTO] [metric METRIC]" | 172 | //usage: " ROUTE := [TYPE] PREFIX [tos TOS] [proto RTPROTO] [metric METRIC]" |
195 | //usage: | 173 | //usage: |
196 | //usage:#define iprule_trivial_usage | 174 | //usage:#define iprule_trivial_usage |
197 | //usage: "[list|add|del] RULE" | 175 | //usage: "[list] | add|del SELECTOR ACTION" |
198 | //usage:#define iprule_full_usage "\n\n" | 176 | //usage:#define iprule_full_usage "\n\n" |
199 | //usage: "iprule [list|add|del] SELECTOR ACTION\n" | ||
200 | //usage: " SELECTOR := [from PREFIX] [to PREFIX] [tos TOS] [fwmark FWMARK]\n" | 177 | //usage: " SELECTOR := [from PREFIX] [to PREFIX] [tos TOS] [fwmark FWMARK]\n" |
201 | //usage: " [dev STRING] [pref NUMBER]\n" | 178 | //usage: " [dev IFACE] [pref NUMBER]\n" |
202 | //usage: " ACTION := [table TABLE_ID] [nat ADDRESS]\n" | 179 | //usage: " ACTION := [table TABLE_ID] [nat ADDRESS]\n" |
203 | //usage: " [prohibit|reject|unreachable]\n" | 180 | //usage: " [prohibit|reject|unreachable]\n" |
204 | //usage: " [realms [SRCREALM/]DSTREALM]\n" | 181 | //usage: " [realms [SRCREALM/]DSTREALM]\n" |
@@ -216,8 +193,53 @@ | |||
216 | //usage: | 193 | //usage: |
217 | //usage:#define ipneigh_trivial_usage | 194 | //usage:#define ipneigh_trivial_usage |
218 | //usage: "show|flush [to PREFIX] [dev DEV] [nud STATE]" | 195 | //usage: "show|flush [to PREFIX] [dev DEV] [nud STATE]" |
219 | //usage:#define ipneigh_full_usage "\n\n" | 196 | //usage:#define ipneigh_full_usage "" |
220 | //usage: "ipneigh show|flush [to PREFIX] [dev DEV] [nud STATE]" | 197 | //usage: |
198 | //usage:#if ENABLE_FEATURE_IP_ADDRESS || ENABLE_FEATURE_IP_ROUTE | ||
199 | //usage:# define IP_BAR_LINK "|" | ||
200 | //usage:#else | ||
201 | //usage:# define IP_BAR_LINK "" | ||
202 | //usage:#endif | ||
203 | //usage:#if ENABLE_FEATURE_IP_ADDRESS || ENABLE_FEATURE_IP_ROUTE || ENABLE_FEATURE_IP_LINK | ||
204 | //usage:# define IP_BAR_TUNNEL "|" | ||
205 | //usage:#else | ||
206 | //usage:# define IP_BAR_TUNNEL "" | ||
207 | //usage:#endif | ||
208 | //usage:#if ENABLE_FEATURE_IP_ADDRESS || ENABLE_FEATURE_IP_ROUTE || ENABLE_FEATURE_IP_LINK || ENABLE_FEATURE_IP_TUNNEL | ||
209 | //usage:# define IP_BAR_NEIGH "|" | ||
210 | //usage:#else | ||
211 | //usage:# define IP_BAR_NEIGH "" | ||
212 | //usage:#endif | ||
213 | //usage:#if ENABLE_FEATURE_IP_ADDRESS || ENABLE_FEATURE_IP_ROUTE || ENABLE_FEATURE_IP_LINK || ENABLE_FEATURE_IP_TUNNEL || ENABLE_FEATURE_IP_NEIGH | ||
214 | //usage:# define IP_BAR_RULE "|" | ||
215 | //usage:#else | ||
216 | //usage:# define IP_BAR_RULE "" | ||
217 | //usage:#endif | ||
218 | //usage: | ||
219 | //usage:#define ip_trivial_usage | ||
220 | //usage: "[OPTIONS] " | ||
221 | //usage: IF_FEATURE_IP_ADDRESS("address") | ||
222 | //usage: IF_FEATURE_IP_ROUTE( IF_FEATURE_IP_ADDRESS("|")"route") | ||
223 | //usage: IF_FEATURE_IP_LINK( IP_BAR_LINK "link") | ||
224 | //usage: IF_FEATURE_IP_TUNNEL( IP_BAR_TUNNEL"tunnel") | ||
225 | //usage: IF_FEATURE_IP_NEIGH( IP_BAR_NEIGH "neigh") | ||
226 | //usage: IF_FEATURE_IP_RULE( IP_BAR_RULE "rule") | ||
227 | //usage: " [COMMAND]" | ||
228 | //usage:#define ip_full_usage "\n\n" | ||
229 | //usage: "OPTIONS := -f[amily] inet|inet6|link | -o[neline]\n" | ||
230 | //usage: "COMMAND :=" | ||
231 | //usage: IF_FEATURE_IP_ADDRESS("\n" | ||
232 | //usage: "ip addr "ipaddr_trivial_usage) | ||
233 | //usage: IF_FEATURE_IP_ROUTE("\n" | ||
234 | //usage: "ip route "iproute_trivial_usage) | ||
235 | //usage: IF_FEATURE_IP_LINK("\n" | ||
236 | //usage: "ip link "iplink_trivial_usage) | ||
237 | //usage: IF_FEATURE_IP_TUNNEL("\n" | ||
238 | //usage: "ip tunnel "iptunnel_trivial_usage) | ||
239 | //usage: IF_FEATURE_IP_NEIGH("\n" | ||
240 | //usage: "ip neigh "ipneigh_trivial_usage) | ||
241 | //usage: IF_FEATURE_IP_RULE("\n" | ||
242 | //usage: "ip rule "iprule_trivial_usage) | ||
221 | 243 | ||
222 | #include "libbb.h" | 244 | #include "libbb.h" |
223 | 245 | ||
diff --git a/networking/tc.c b/networking/tc.c index 25875aa3e..23abf636c 100644 --- a/networking/tc.c +++ b/networking/tc.c | |||
@@ -27,22 +27,22 @@ | |||
27 | /* //usage: "[OPTIONS] OBJECT CMD [dev STRING]" */ | 27 | /* //usage: "[OPTIONS] OBJECT CMD [dev STRING]" */ |
28 | //usage: "OBJECT CMD [dev STRING]" | 28 | //usage: "OBJECT CMD [dev STRING]" |
29 | //usage:#define tc_full_usage "\n\n" | 29 | //usage:#define tc_full_usage "\n\n" |
30 | //usage: "OBJECT: {qdisc|class|filter}\n" | 30 | //usage: "OBJECT: qdisc|class|filter\n" |
31 | //usage: "CMD: {add|del|change|replace|show}\n" | 31 | //usage: "CMD: add|del|change|replace|show\n" |
32 | //usage: "\n" | 32 | //usage: "\n" |
33 | //usage: "qdisc [ handle QHANDLE ] [ root |"IF_FEATURE_TC_INGRESS(" ingress |")" parent CLASSID ]\n" | 33 | //usage: "qdisc [handle QHANDLE] [root|"IF_FEATURE_TC_INGRESS("ingress|")"parent CLASSID]\n" |
34 | /* //usage: "[ estimator INTERVAL TIME_CONSTANT ]\n" */ | 34 | /* //usage: "[estimator INTERVAL TIME_CONSTANT]\n" */ |
35 | //usage: " [ [ QDISC_KIND ] [ help | OPTIONS ] ]\n" | 35 | //usage: " [[QDISC_KIND] [help|OPTIONS]]\n" |
36 | //usage: " QDISC_KIND := { [p|b]fifo | tbf | prio | cbq | red | etc. }\n" | 36 | //usage: " QDISC_KIND := [p|b]fifo|tbf|prio|cbq|red|etc.\n" |
37 | //usage: "qdisc show [ dev STRING ]"IF_FEATURE_TC_INGRESS(" [ingress]")"\n" | 37 | //usage: "qdisc show [dev STRING]"IF_FEATURE_TC_INGRESS(" [ingress]")"\n" |
38 | //usage: "class [ classid CLASSID ] [ root | parent CLASSID ]\n" | 38 | //usage: "class [classid CLASSID] [root|parent CLASSID]\n" |
39 | //usage: " [ [ QDISC_KIND ] [ help | OPTIONS ] ]\n" | 39 | //usage: " [[QDISC_KIND] [help|OPTIONS] ]\n" |
40 | //usage: "class show [ dev STRING ] [ root | parent CLASSID ]\n" | 40 | //usage: "class show [ dev STRING ] [root|parent CLASSID]\n" |
41 | //usage: "filter [ pref PRIO ] [ protocol PROTO ]\n" | 41 | //usage: "filter [pref PRIO] [protocol PROTO]\n" |
42 | /* //usage: "\t[ estimator INTERVAL TIME_CONSTANT ]\n" */ | 42 | /* //usage: "\t[estimator INTERVAL TIME_CONSTANT]\n" */ |
43 | //usage: " [ root | classid CLASSID ] [ handle FILTERID ]\n" | 43 | //usage: " [root|classid CLASSID] [handle FILTERID]\n" |
44 | //usage: " [ [ FILTER_TYPE ] [ help | OPTIONS ] ]\n" | 44 | //usage: " [[FILTER_TYPE] [help|OPTIONS]]\n" |
45 | //usage: "filter show [ dev STRING ] [ root | parent CLASSID ]" | 45 | //usage: "filter show [dev STRING] [root|parent CLASSID]" |
46 | 46 | ||
47 | #include "libbb.h" | 47 | #include "libbb.h" |
48 | #include "common_bufsiz.h" | 48 | #include "common_bufsiz.h" |