diff --git a/ip/link_gre.c b/ip/link_gre.c index b2573a1b..e972a10e 100644 --- a/ip/link_gre.c +++ b/ip/link_gre.c @@ -23,34 +23,38 @@ #include "ip_common.h" #include "tunnel.h" -static void print_usage(FILE *f) +static void gre_print_help(struct link_util *lu, int argc, char **argv, FILE *f) { fprintf(f, - "Usage: ... { gre | gretap | erspan } [ remote ADDR ]\n" - " [ local ADDR ]\n" - " [ [i|o]seq ]\n" - " [ [i|o]key KEY ]\n" - " [ [i|o]csum ]\n" - " [ ttl TTL ]\n" - " [ tos TOS ]\n" - " [ [no]pmtudisc ]\n" - " [ [no]ignore-df ]\n" - " [ dev PHYS_DEV ]\n" - " [ noencap ]\n" - " [ encap { fou | gue | none } ]\n" - " [ encap-sport PORT ]\n" - " [ encap-dport PORT ]\n" - " [ [no]encap-csum ]\n" - " [ [no]encap-csum6 ]\n" - " [ [no]encap-remcsum ]\n" - " [ external ]\n" - " [ fwmark MARK ]\n" - " [ erspan_ver version ]\n" - " [ erspan IDX ]\n" - " [ erspan_dir { ingress | egress } ]\n" - " [ erspan_hwid hwid ]\n" - " [ external ]\n" + "Usage: ... %-9s [ remote ADDR ]\n", + lu->id + ); + fprintf(f, + " [ local ADDR ]\n" + " [ [i|o]seq ]\n" + " [ [i|o]key KEY ]\n" + " [ [i|o]csum ]\n" + " [ ttl TTL ]\n" + " [ tos TOS ]\n" + " [ [no]pmtudisc ]\n" + " [ [no]ignore-df ]\n" + " [ dev PHYS_DEV ]\n" + " [ fwmark MARK ]\n" + " [ external ]\n" + " [ noencap ]\n" + " [ encap { fou | gue | none } ]\n" + " [ encap-sport PORT ]\n" + " [ encap-dport PORT ]\n" + " [ [no]encap-csum ]\n" + " [ [no]encap-csum6 ]\n" + " [ [no]encap-remcsum ]\n" + " [ erspan_ver version ]\n" + " [ erspan IDX ]\n" + " [ erspan_dir { ingress | egress } ]\n" + " [ erspan_hwid hwid ]\n" "\n" + ); + fprintf(f, "Where: ADDR := { IP_ADDRESS | any }\n" " TOS := { NUMBER | inherit }\n" " TTL := { 1..255 | inherit }\n" @@ -59,13 +63,6 @@ static void print_usage(FILE *f) ); } -static void usage(void) __attribute__((noreturn)); -static void usage(void) -{ - print_usage(stderr); - exit(-1); -} - static int gre_parse_opt(struct link_util *lu, int argc, char **argv, struct nlmsghdr *n) { @@ -336,8 +333,10 @@ get_failed: NEXT_ARG(); if (get_u16(&erspan_hwid, *argv, 0)) invarg("invalid erspan hwid\n", *argv); - } else - usage(); + } else { + gre_print_help(lu, argc, argv, stderr); + return -1; + } argc--; argv++; } @@ -517,12 +516,6 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) IFLA_GRE_ENCAP_DPORT); } -static void gre_print_help(struct link_util *lu, int argc, char **argv, - FILE *f) -{ - print_usage(f); -} - struct link_util gre_link_util = { .id = "gre", .maxattr = IFLA_GRE_MAX, diff --git a/ip/link_gre6.c b/ip/link_gre6.c index 880b75da..1354f88a 100644 --- a/ip/link_gre6.c +++ b/ip/link_gre6.c @@ -30,34 +30,39 @@ #define DEFAULT_TNL_HOP_LIMIT (64) -static void print_usage(FILE *f) +static void gre_print_help(struct link_util *lu, int argc, char **argv, FILE *f) { fprintf(f, - "Usage: ... { ip6gre | ip6gretap | ip6erspan} [ remote ADDR ]\n" - " [ local ADDR ]\n" - " [ [i|o]seq ]\n" - " [ [i|o]key KEY ]\n" - " [ [i|o]csum ]\n" - " [ hoplimit TTL ]\n" - " [ encaplimit ELIM ]\n" - " [ tclass TCLASS ]\n" - " [ flowlabel FLOWLABEL ]\n" - " [ dscp inherit ]\n" - " [ fwmark MARK ]\n" - " [ dev PHYS_DEV ]\n" - " [ noencap ]\n" - " [ encap { fou | gue | none } ]\n" - " [ encap-sport PORT ]\n" - " [ encap-dport PORT ]\n" - " [ [no]encap-csum ]\n" - " [ [no]encap-csum6 ]\n" - " [ [no]encap-remcsum ]\n" - " [ erspan_ver version ]\n" - " [ erspan IDX ]\n" - " [ erspan_dir { ingress | egress } ]\n" - " [ erspan_hwid hwid ]\n" - " [ external ]\n" + "Usage: ... %-9s [ remote ADDR ]\n", + lu->id + ); + fprintf(f, + " [ local ADDR ]\n" + " [ [i|o]seq ]\n" + " [ [i|o]key KEY ]\n" + " [ [i|o]csum ]\n" + " [ hoplimit TTL ]\n" + " [ encaplimit ELIM ]\n" + " [ tclass TCLASS ]\n" + " [ flowlabel FLOWLABEL ]\n" + " [ dscp inherit ]\n" + " [ dev PHYS_DEV ]\n" + " [ fwmark MARK ]\n" + " [ external ]\n" + " [ noencap ]\n" + " [ encap { fou | gue | none } ]\n" + " [ encap-sport PORT ]\n" + " [ encap-dport PORT ]\n" + " [ [no]encap-csum ]\n" + " [ [no]encap-csum6 ]\n" + " [ [no]encap-remcsum ]\n" + " [ erspan_ver version ]\n" + " [ erspan IDX ]\n" + " [ erspan_dir { ingress | egress } ]\n" + " [ erspan_hwid hwid ]\n" "\n" + ); + fprintf(f, "Where: ADDR := IPV6_ADDRESS\n" " TTL := { 0..255 } (default=%d)\n" " KEY := { DOTTED_QUAD | NUMBER }\n" @@ -69,13 +74,6 @@ static void print_usage(FILE *f) ); } -static void usage(void) __attribute__((noreturn)); -static void usage(void) -{ - print_usage(stderr); - exit(-1); -} - static int gre_parse_opt(struct link_util *lu, int argc, char **argv, struct nlmsghdr *n) { @@ -384,8 +382,10 @@ get_failed: NEXT_ARG(); if (get_u16(&erspan_hwid, *argv, 0)) invarg("invalid erspan hwid\n", *argv); - } else - usage(); + } else { + gre_print_help(lu, argc, argv, stderr); + return -1; + } argc--; argv++; } @@ -584,12 +584,6 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) IFLA_GRE_ENCAP_DPORT); } -static void gre_print_help(struct link_util *lu, int argc, char **argv, - FILE *f) -{ - print_usage(f); -} - struct link_util ip6gre_link_util = { .id = "ip6gre", .maxattr = IFLA_GRE_MAX, diff --git a/ip/link_ip6tnl.c b/ip/link_ip6tnl.c index 91d7d99f..60c74519 100644 --- a/ip/link_ip6tnl.c +++ b/ip/link_ip6tnl.c @@ -29,20 +29,26 @@ #define DEFAULT_TNL_HOP_LIMIT (64) -static void print_usage(FILE *f) +static void ip6tunnel_print_help(struct link_util *lu, int argc, char **argv, + FILE *f) { + const char *mode; + + fprintf(f, + "Usage: ... %-6s [ remote ADDR ]\n", + lu->id + ); fprintf(f, - "Usage: ... ip6tnl [ mode { ip6ip6 | ipip6 | any } ]\n" - " [ remote ADDR ]\n" " [ local ADDR ]\n" - " [ dev PHYS_DEV ]\n" " [ encaplimit ELIM ]\n" " [ hoplimit HLIM ]\n" " [ tclass TCLASS ]\n" " [ flowlabel FLOWLABEL ]\n" " [ dscp inherit ]\n" - " [ fwmark MARK ]\n" " [ [no]allow-localremote ]\n" + " [ dev PHYS_DEV ]\n" + " [ fwmark MARK ]\n" + " [ external ]\n" " [ noencap ]\n" " [ encap { fou | gue | none } ]\n" " [ encap-sport PORT ]\n" @@ -50,8 +56,14 @@ static void print_usage(FILE *f) " [ [no]encap-csum ]\n" " [ [no]encap-csum6 ]\n" " [ [no]encap-remcsum ]\n" - " [ external ]\n" - "\n" + ); + mode = "{ ip6ip6 | ipip6 | any }"; + fprintf(f, + " [ mode %s ]\n" + "\n", + mode + ); + fprintf(f, "Where: ADDR := IPV6_ADDRESS\n" " ELIM := { none | 0..255 }(default=%d)\n" " HLIM := 0..255 (default=%d)\n" @@ -62,13 +74,6 @@ static void print_usage(FILE *f) ); } -static void usage(void) __attribute__((noreturn)); -static void usage(void) -{ - print_usage(stderr); - exit(-1); -} - static int ip6tunnel_parse_opt(struct link_util *lu, int argc, char **argv, struct nlmsghdr *n) { @@ -304,8 +309,10 @@ get_failed: encapflags &= ~TUNNEL_ENCAP_FLAG_REMCSUM; } else if (strcmp(*argv, "external") == 0) { metadata = 1; - } else - usage(); + } else { + ip6tunnel_print_help(lu, argc, argv, stderr); + return -1; + } argc--, argv++; } @@ -456,12 +463,6 @@ static void ip6tunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb IFLA_IPTUN_ENCAP_DPORT); } -static void ip6tunnel_print_help(struct link_util *lu, int argc, char **argv, - FILE *f) -{ - print_usage(f); -} - struct link_util ip6tnl_link_util = { .id = "ip6tnl", .maxattr = IFLA_IPTUN_MAX, diff --git a/ip/link_iptnl.c b/ip/link_iptnl.c index 3e653b77..84117ac9 100644 --- a/ip/link_iptnl.c +++ b/ip/link_iptnl.c @@ -24,49 +24,51 @@ #include "ip_common.h" #include "tunnel.h" -static void print_usage(FILE *f, int sit) +static void iptunnel_print_help(struct link_util *lu, int argc, char **argv, + FILE *f) { - const char *type = sit ? "sit " : "ipip"; + const char *mode; fprintf(f, - "Usage: ... %s [ remote ADDR ]\n" - " [ local ADDR ]\n" - " [ ttl TTL ]\n" - " [ tos TOS ]\n" - " [ [no]pmtudisc ]\n" - " [ dev PHYS_DEV ]\n" - " [ 6rd-prefix ADDR ]\n" - " [ 6rd-relay_prefix ADDR ]\n" - " [ 6rd-reset ]\n" - " [ noencap ]\n" - " [ encap { fou | gue | none } ]\n" - " [ encap-sport PORT ]\n" - " [ encap-dport PORT ]\n" - " [ [no]encap-csum ]\n" - " [ [no]encap-csum6 ]\n" - " [ [no]encap-remcsum ]\n", - type + "Usage: ... %-6s [ remote ADDR ]\n", + lu->id ); - if (sit) { - fprintf(f, " [ mode { ip6ip | ipip | mplsip | any } ]\n"); - fprintf(f, " [ isatap ]\n"); + fprintf(f, + " [ local ADDR ]\n" + " [ ttl TTL ]\n" + " [ tos TOS ]\n" + " [ [no]pmtudisc ]\n" + " [ 6rd-prefix ADDR ]\n" + " [ 6rd-relay_prefix ADDR ]\n" + " [ 6rd-reset ]\n" + " [ dev PHYS_DEV ]\n" + " [ fwmark MARK ]\n" + " [ external ]\n" + " [ noencap ]\n" + " [ encap { fou | gue | none } ]\n" + " [ encap-sport PORT ]\n" + " [ encap-dport PORT ]\n" + " [ [no]encap-csum ]\n" + " [ [no]encap-csum6 ]\n" + " [ [no]encap-remcsum ]\n" + ); + if (strcmp(lu->id, "sit") == 0) { + mode = "{ ip6ip | ipip | mplsip | any } ]\n" + " [ isatap"; } else { - fprintf(f, " [ mode { ipip | mplsip | any } ]\n"); + mode = "{ ipip | mplsip | any }"; } - fprintf(f, " [ external ]\n"); - fprintf(f, " [ fwmark MARK ]\n"); - fprintf(f, "\n"); - fprintf(f, "Where: ADDR := { IP_ADDRESS | any }\n"); - fprintf(f, " TOS := { NUMBER | inherit }\n"); - fprintf(f, " TTL := { 1..255 | inherit }\n"); - fprintf(f, " MARK := { 0x0..0xffffffff }\n"); -} - -static void usage(int sit) __attribute__((noreturn)); -static void usage(int sit) -{ - print_usage(stderr, sit); - exit(-1); + fprintf(f, + " [ mode %s ]\n" + "\n", + mode + ); + fprintf(f, + "Where: ADDR := { IP_ADDRESS | any }\n" + " TOS := { NUMBER | inherit }\n" + " TTL := { 1..255 | inherit }\n" + " MARK := { 0x0..0xffffffff }\n" + ); } static int iptunnel_parse_opt(struct link_util *lu, int argc, char **argv, @@ -313,8 +315,10 @@ get_failed: NEXT_ARG(); if (get_u32(&fwmark, *argv, 0)) invarg("invalid fwmark\n", *argv); - } else - usage(strcmp(lu->id, "sit") == 0); + } else { + iptunnel_print_help(lu, argc, argv, stderr); + return -1; + } argc--, argv++; } @@ -483,12 +487,6 @@ static void iptunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[ IFLA_IPTUN_ENCAP_DPORT); } -static void iptunnel_print_help(struct link_util *lu, int argc, char **argv, - FILE *f) -{ - print_usage(f, strcmp(lu->id, "sit") == 0); -} - struct link_util ipip_link_util = { .id = "ipip", .maxattr = IFLA_IPTUN_MAX, diff --git a/ip/link_vti.c b/ip/link_vti.c index 49b87e99..f128e6ba 100644 --- a/ip/link_vti.c +++ b/ip/link_vti.c @@ -23,27 +23,25 @@ #include "ip_common.h" #include "tunnel.h" - -static void print_usage(FILE *f) +static void vti_print_help(struct link_util *lu, int argc, char **argv, FILE *f) { fprintf(f, - "Usage: ... vti [ remote ADDR ]\n" - " [ local ADDR ]\n" - " [ [i|o]key KEY ]\n" - " [ dev PHYS_DEV ]\n" - " [ fwmark MARK ]\n" - "\n" - "Where: ADDR := { IP_ADDRESS }\n" - " KEY := { DOTTED_QUAD | NUMBER }\n" - " MARK := { 0x0..0xffffffff }\n" + "Usage: ... %-4s [ remote ADDR ]\n", + lu->id + ); + fprintf(f, + " [ local ADDR ]\n" + " [ [i|o]key KEY ]\n" + " [ dev PHYS_DEV ]\n" + " [ fwmark MARK ]\n" + "\n" + ); + fprintf(f, + "Where: ADDR := { IP%s_ADDRESS }\n" + " KEY := { DOTTED_QUAD | NUMBER }\n" + " MARK := { 0x0..0xffffffff }\n", + "" ); -} - -static void usage(void) __attribute__((noreturn)); -static void usage(void) -{ - print_usage(stderr); - exit(-1); } static int vti_parse_opt(struct link_util *lu, int argc, char **argv, @@ -147,8 +145,10 @@ get_failed: NEXT_ARG(); if (get_u32(&fwmark, *argv, 0)) invarg("invalid fwmark\n", *argv); - } else - usage(); + } else { + vti_print_help(lu, argc, argv, stderr); + return -1; + } argc--; argv++; } @@ -208,12 +208,6 @@ static void vti_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) } } -static void vti_print_help(struct link_util *lu, int argc, char **argv, - FILE *f) -{ - print_usage(f); -} - struct link_util vti_link_util = { .id = "vti", .maxattr = IFLA_VTI_MAX, diff --git a/ip/link_vti6.c b/ip/link_vti6.c index d1fbec54..109f3e8f 100644 --- a/ip/link_vti6.c +++ b/ip/link_vti6.c @@ -24,26 +24,26 @@ #include "ip_common.h" #include "tunnel.h" -static void print_usage(FILE *f) +static void vti6_print_help(struct link_util *lu, int argc, char **argv, + FILE *f) { fprintf(f, - "Usage: ... vti6 [ remote ADDR ]\n" + "Usage: ... %-4s [ remote ADDR ]\n", + lu->id + ); + fprintf(f, " [ local ADDR ]\n" " [ [i|o]key KEY ]\n" " [ dev PHYS_DEV ]\n" " [ fwmark MARK ]\n" "\n" - "Where: ADDR := { IPV6_ADDRESS }\n" - " KEY := { DOTTED_QUAD | NUMBER }\n" - " MARK := { 0x0..0xffffffff }\n" ); -} - -static void usage(void) __attribute__((noreturn)); -static void usage(void) -{ - print_usage(stderr); - exit(-1); + fprintf(f, + "Where: ADDR := { IP%s_ADDRESS }\n" + " KEY := { DOTTED_QUAD | NUMBER }\n" + " MARK := { 0x0..0xffffffff }\n", + "V6" + ); } static int vti6_parse_opt(struct link_util *lu, int argc, char **argv, @@ -153,8 +153,10 @@ get_failed: NEXT_ARG(); if (get_u32(&fwmark, *argv, 0)) invarg("invalid fwmark\n", *argv); - } else - usage(); + } else { + vti6_print_help(lu, argc, argv, stderr); + return -1; + } argc--; argv++; } @@ -214,12 +216,6 @@ static void vti6_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) } } -static void vti6_print_help(struct link_util *lu, int argc, char **argv, - FILE *f) -{ - print_usage(f); -} - struct link_util vti6_link_util = { .id = "vti6", .maxattr = IFLA_VTI_MAX,