[PATCH iproute2-next 5/7] bridge: put help to stdout and usage to stderr
Stephen Hemminger <[email protected]>
| Newsgroups | org.kernel.vger.netdev |
|---|---|
| Message-ID | <[email protected]> |
Similar change to other iproute2 commands. Syntax error should print to stderr and exit with non-zero. Help command should print to stdout and exit with zero status. Signed-off-by: Stephen Hemminger <[email protected]> --- bridge/bridge.c | 20 ++++++++++---------- bridge/fdb.c | 18 +++++++++--------- bridge/link.c | 16 +++++++++++----- bridge/mdb.c | 14 +++++++------- bridge/monitor.c | 11 ++++++----- bridge/mst.c | 10 +++++----- bridge/vlan.c | 10 +++++----- bridge/vni.c | 10 +++++----- 8 files changed, 58 insertions(+), 51 deletions(-) diff --git a/bridge/bridge.c b/bridge/bridge.c index d993ba19..45504e7f 100644 --- a/bridge/bridge.c +++ b/bridge/bridge.c @@ -29,23 +29,23 @@ int timestamp; static const char *batch_file; int force; -static void usage(void) __attribute__((noreturn)); +static void usage(bool help) __attribute__((noreturn)); -static void usage(void) +static void usage(bool help) { - fprintf(stderr, + fprintf(help ? stdout : stderr, "Usage: bridge [ OPTIONS ] OBJECT { COMMAND | help }\n" " bridge [ -force ] -batch filename\n" "where OBJECT := { link | fdb | mdb | mst | vlan | vni | monitor }\n" " OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] |\n" " -o[neline] | -t[imestamp] | -n[etns] name |\n" " -com[pressvlans] -c[olor] -p[retty] -j[son] }\n"); - exit(-1); + exit(help ? EXIT_SUCCESS : EXIT_FAILURE); } static int do_help(int argc, char **argv) { - usage(); + usage(true); } @@ -118,7 +118,7 @@ main(int argc, char **argv) opt++; if (matches(opt, "-help") == 0) { - usage(); + usage(true); } else if (matches(opt, "-Version") == 0) { printf("bridge utility, %s\n", version); exit(0); @@ -135,13 +135,13 @@ main(int argc, char **argv) argc--; argv++; if (argc <= 1) - usage(); + usage(false); if (strcmp(argv[1], "inet") == 0) preferred_family = AF_INET; else if (strcmp(argv[1], "inet6") == 0) preferred_family = AF_INET6; else if (strcmp(argv[1], "help") == 0) - usage(); + usage(true); else invarg("invalid protocol family", argv[1]); } else if (strcmp(opt, "-4") == 0) { @@ -165,7 +165,7 @@ main(int argc, char **argv) argc--; argv++; if (argc <= 1) - usage(); + usage(false); batch_file = argv[1]; } else { fprintf(stderr, @@ -192,5 +192,5 @@ main(int argc, char **argv) return do_cmd(argv[1], argc-1, argv+1); rtnl_close(&rth); - usage(); + usage(false); } diff --git a/bridge/fdb.c b/bridge/fdb.c index 05f093b5..9338cf82 100644 --- a/bridge/fdb.c +++ b/bridge/fdb.c @@ -33,9 +33,9 @@ static unsigned int filter_index, filter_dynamic, filter_master, filter_state, filter_vlan; -static void usage(void) +static void usage(bool help) { - fprintf(stderr, + fprintf(help ? stdout : stderr, "Usage: bridge fdb { add | append | del | replace } ADDR dev DEV\n" " [ self ] [ master ] [ use ] [ router ] [ extern_learn ]\n" " [ sticky ] [ local | static | dynamic ] [ vlan VID ]\n" @@ -51,7 +51,7 @@ static void usage(void) " [ master ] [ [no]permanent | [no]static | [no]dynamic ]\n" " [ [no]added_by_user ] [ [no]extern_learn ] [ [no]sticky ]\n" " [ [no]offloaded ] [ [no]router ]\n"); - exit(-1); + exit(help ? EXIT_SUCCESS : EXIT_FAILURE); } static const char *state_n2a(unsigned int s) @@ -379,7 +379,7 @@ static int fdb_show(int argc, char **argv) filter_dynamic = 1; } else { if (matches(*argv, "help") == 0) - usage(); + usage(true); } argc--; argv++; } @@ -558,7 +558,7 @@ static int fdb_modify(int cmd, int flags, int argc, char **argv) NEXT_ARG(); if (matches(*argv, "help") == 0) - usage(); + usage(true); if (addr) duparg2("to", *argv); addr = *argv; @@ -680,7 +680,7 @@ static int fdb_get(int argc, char **argv) NEXT_ARG(); if (matches(*argv, "help") == 0) - usage(); + usage(true); if (addr) duparg2("to", *argv); addr = *argv; @@ -871,11 +871,11 @@ static int fdb_flush(int argc, char **argv) get_addr(&dst, *argv, preferred_family); dst_ok = 1; } else if (strcmp(*argv, "help") == 0) { - NEXT_ARG(); + usage(true); } else { fprintf(stderr, "bridge fdb: unknown command \"%s\"?\n", *argv); - usage(); + usage(false); return -1; } argc--; argv++; @@ -966,7 +966,7 @@ int do_fdb(int argc, char **argv) if (strcmp(*argv, "flush") == 0) return fdb_flush(argc-1, argv+1); if (matches(*argv, "help") == 0) - usage(); + usage(true); } else return fdb_show(0, NULL); diff --git a/bridge/link.c b/bridge/link.c index 370d7de4..1ceeaaac 100644 --- a/bridge/link.c +++ b/bridge/link.c @@ -298,9 +298,9 @@ int print_linkinfo(struct nlmsghdr *n, void *arg) return 0; } -static void usage(void) +static void usage(bool help) { - fprintf(stderr, + fprintf(help ? stdout : stderr, "Usage: bridge link set dev DEV [ cost COST ] [ priority PRIO ] [ state STATE ]\n" " [ guard {on | off} ]\n" " [ hairpin {on | off} ]\n" @@ -326,7 +326,7 @@ static void usage(void) " [ backup_nhid NHID ]\n" " [ self ] [ master ]\n" " bridge link show [dev DEV] [master DEVICE]\n"); - exit(-1); + exit(help ? EXIT_SUCCESS : EXIT_FAILURE); } static int brlink_modify(int argc, char **argv) @@ -521,7 +521,13 @@ static int brlink_modify(int argc, char **argv) invarg("invalid backup_nhid", *argv); backup_nhid_set = true; } else { - usage(); + bool help = matches(*argv, "help") == 0; + + if (!help) + fprintf(stderr, + "Error: argument \"%s\" is unknown.\n", + *argv); + usage(help); } argc--; argv++; } @@ -699,7 +705,7 @@ int do_link(int argc, char **argv) matches(*argv, "list") == 0) return brlink_show(argc-1, argv+1); if (matches(*argv, "help") == 0) - usage(); + usage(true); } else return brlink_show(0, NULL); diff --git a/bridge/mdb.c b/bridge/mdb.c index 112deeb9..11b2bce9 100644 --- a/bridge/mdb.c +++ b/bridge/mdb.c @@ -30,9 +30,9 @@ static unsigned int filter_index, filter_vlan; -static void usage(void) +static void usage(bool help) { - fprintf(stderr, + fprintf(help ? stdout : stderr, "Usage: bridge mdb { add | del | replace } dev DEV port PORT grp GROUP [src SOURCE] [permanent | temp] [vid VID]\n" " [ filter_mode { include | exclude } ] [ source_list SOURCE_LIST ] [ proto PROTO ] [ dst IPADDR ]\n" " [ dst_port DST_PORT ] [ vni VNI ] [ src_vni SRC_VNI ] [ via DEV ]\n" @@ -40,7 +40,7 @@ static void usage(void) " bridge mdb get dev DEV grp GROUP [ src SOURCE ] [ vid VID ] [ src_vni SRC_VNI ]\n" " bridge mdb flush dev DEV [ port PORT ] [ vid VID ] [ src_vni SRC_VNI ] [ proto PROTO ]\n" " [ [no]permanent ] [ dst IPADDR ] [ dst_port DST_PORT ] [ vni VNI ]\n"); - exit(-1); + exit(help ? EXIT_SUCCESS : EXIT_FAILURE); } static bool is_temp_mcast_rtr(__u8 type) @@ -764,7 +764,7 @@ static int mdb_modify(int cmd, int flags, int argc, char **argv) set_attrs = true; } else { if (matches(*argv, "help") == 0) - usage(); + usage(true); } argc--; argv++; } @@ -891,7 +891,7 @@ static int mdb_get(int argc, char **argv) get_attrs = true; } else { if (strcmp(*argv, "help") == 0) - usage(); + usage(true); } argc--; argv++; } @@ -1005,7 +1005,7 @@ static int mdb_flush(int argc, char **argv) set_attrs = true; } else { if (strcmp(*argv, "help") == 0) - usage(); + usage(true); } argc--; argv++; } @@ -1099,7 +1099,7 @@ int do_mdb(int argc, char **argv) if (strcmp(*argv, "flush") == 0) return mdb_flush(argc-1, argv+1); if (matches(*argv, "help") == 0) - usage(); + usage(true); } else return mdb_show(0, NULL); diff --git a/bridge/monitor.c b/bridge/monitor.c index 552614d7..ac7ade23 100644 --- a/bridge/monitor.c +++ b/bridge/monitor.c @@ -21,13 +21,14 @@ #include "br_common.h" -static void usage(void) __attribute__((noreturn)); +static void usage(bool help) __attribute__((noreturn)); static int prefix_banner; -static void usage(void) +static void usage(bool help) { - fprintf(stderr, "Usage: bridge monitor [file | link | fdb | mdb | vlan | vni | all]\n"); - exit(-1); + fprintf(help ? stdout : stderr, + "Usage: bridge monitor [file | link | fdb | mdb | vlan | vni | all]\n"); + exit(help ? EXIT_SUCCESS : EXIT_FAILURE); } static int accept_msg(struct rtnl_ctrl_data *ctrl, @@ -111,7 +112,7 @@ int do_monitor(int argc, char **argv) lvni = 1; prefix_banner = 1; } else if (matches(*argv, "help") == 0) { - usage(); + usage(true); } else { fprintf(stderr, "Argument \"%s\" is unknown, try \"bridge monitor help\".\n", *argv); exit(-1); diff --git a/bridge/mst.c b/bridge/mst.c index df242c9d..e1c5d141 100644 --- a/bridge/mst.c +++ b/bridge/mst.c @@ -22,12 +22,12 @@ static unsigned int filter_index; -static void usage(void) +static void usage(bool help) { - fprintf(stderr, + fprintf(help ? stdout : stderr, "Usage: bridge mst set dev DEV msti MSTI state STATE\n" " bridge mst {show} [ dev DEV ]\n"); - exit(-1); + exit(help ? EXIT_SUCCESS : EXIT_FAILURE); } static void print_mst_entry(struct rtattr *a, FILE *fp) @@ -190,7 +190,7 @@ static int mst_set(int argc, char **argv) s = *argv; } else { if (matches(*argv, "help") == 0) - usage(); + usage(true); } argc--; argv++; } @@ -254,7 +254,7 @@ int do_mst(int argc, char **argv) matches(*argv, "list") == 0) return mst_show(argc-1, argv+1); if (matches(*argv, "help") == 0) - usage(); + usage(true); } else return mst_show(0, NULL); diff --git a/bridge/vlan.c b/bridge/vlan.c index ff03ac86..a3628bce 100644 --- a/bridge/vlan.c +++ b/bridge/vlan.c @@ -29,9 +29,9 @@ enum vlan_show_subject { #define VLAN_ID_LEN 9 -static void usage(void) +static void usage(bool help) { - fprintf(stderr, + fprintf(help ? stdout : stderr, "Usage: bridge vlan { add | del } vid VLAN_ID dev DEV [ tunnel_info id TUNNEL_ID ]\n" " [ pvid ] [ untagged ]\n" " [ self ] [ master ]\n" @@ -57,7 +57,7 @@ static void usage(void) " [ mcast_query_response_interval QUERY_RESPONSE_INTERVAL ]\n" " [ msti MSTI ]\n" " bridge vlan global { show } [ dev DEV ] [ vid VLAN_ID ]\n"); - exit(-1); + exit(help ? EXIT_SUCCESS : EXIT_FAILURE); } static int parse_tunnel_info(int *argcp, char ***argvp, __u32 *tun_id_start, @@ -1332,7 +1332,7 @@ static int vlan_global(int argc, char **argv) else if (strcmp(*argv, "set") == 0) return vlan_global_option_set(argc-1, argv+1); else - usage(); + usage(matches(*argv, "help") == 0); } else { return vlan_global_show(0, NULL); } @@ -1362,7 +1362,7 @@ int do_vlan(int argc, char **argv) if (strcmp(*argv, "global") == 0) return vlan_global(argc-1, argv+1); if (matches(*argv, "help") == 0) - usage(); + usage(true); } else { return vlan_show(0, NULL, VLAN_SHOW_VLAN); } diff --git a/bridge/vni.c b/bridge/vni.c index b28647fd..7a4c0084 100644 --- a/bridge/vni.c +++ b/bridge/vni.c @@ -27,9 +27,9 @@ static unsigned int filter_index; /* max len of "<start>-<end>" */ #define VXLAN_ID_LEN 17 -static void usage(void) +static void usage(bool help) { - fprintf(stderr, + fprintf(help ? stdout : stderr, "Usage: bridge vni { add | del } vni VNI\n" " [ { group | remote } IP_ADDRESS ]\n" " dev DEV\n" @@ -37,7 +37,7 @@ static void usage(void) "\n" "Where: VNI := 0-16777215\n" ); - exit(-1); + exit(help ? EXIT_SUCCESS : EXIT_FAILURE); } static int parse_vni_filter(const char *argv, struct nlmsghdr *n, int reqsize, @@ -121,7 +121,7 @@ static int vni_modify(int cmd, int argc, char **argv) daddr_present = true; } else { if (strcmp(*argv, "help") == 0) - usage(); + usage(true); } argc--; argv++; } @@ -399,7 +399,7 @@ int do_vni(int argc, char **argv) strcmp(*argv, "list") == 0) return vni_show(argc-1, argv+1); if (strcmp(*argv, "help") == 0) - usage(); + usage(true); } else { return vni_show(0, NULL); } -- 2.53.0