vti/vti6: Unify vti_print_help()

Reduce diff lines between vti and vti6 help printing code.

Use @struct link_util ->id field to print correct link help: all callers
now pass this data structure to vti_print_help().

Get rid of custom print_usage() and usage() functions and use
vti_print_help() directly, return from function on "... type
<help|garbage>" instead of exit(2).

Signed-off-by: Serhey Popovych <serhe.popovych@gmail.com>
Signed-off-by: David Ahern <dsahern@gmail.com>
This commit is contained in:
Serhey Popovych 2018-02-09 08:58:40 +02:00 committed by David Ahern
parent 432e5f97be
commit 4aa552eac1
2 changed files with 36 additions and 46 deletions

View File

@ -23,27 +23,25 @@
#include "ip_common.h" #include "ip_common.h"
#include "tunnel.h" #include "tunnel.h"
static void vti_print_help(struct link_util *lu, int argc, char **argv, FILE *f)
static void print_usage(FILE *f)
{ {
fprintf(f, fprintf(f,
"Usage: ... vti [ remote ADDR ]\n" "Usage: ... %-4s [ remote ADDR ]\n",
" [ local ADDR ]\n" lu->id
" [ [i|o]key KEY ]\n" );
" [ dev PHYS_DEV ]\n" fprintf(f,
" [ fwmark MARK ]\n" " [ local ADDR ]\n"
"\n" " [ [i|o]key KEY ]\n"
"Where: ADDR := { IP_ADDRESS }\n" " [ dev PHYS_DEV ]\n"
" KEY := { DOTTED_QUAD | NUMBER }\n" " [ fwmark MARK ]\n"
" MARK := { 0x0..0xffffffff }\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, static int vti_parse_opt(struct link_util *lu, int argc, char **argv,
@ -147,8 +145,10 @@ get_failed:
NEXT_ARG(); NEXT_ARG();
if (get_u32(&fwmark, *argv, 0)) if (get_u32(&fwmark, *argv, 0))
invarg("invalid fwmark\n", *argv); invarg("invalid fwmark\n", *argv);
} else } else {
usage(); vti_print_help(lu, argc, argv, stderr);
return -1;
}
argc--; argv++; 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 = { struct link_util vti_link_util = {
.id = "vti", .id = "vti",
.maxattr = IFLA_VTI_MAX, .maxattr = IFLA_VTI_MAX,

View File

@ -24,26 +24,26 @@
#include "ip_common.h" #include "ip_common.h"
#include "tunnel.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, fprintf(f,
"Usage: ... vti6 [ remote ADDR ]\n" "Usage: ... %-4s [ remote ADDR ]\n",
lu->id
);
fprintf(f,
" [ local ADDR ]\n" " [ local ADDR ]\n"
" [ [i|o]key KEY ]\n" " [ [i|o]key KEY ]\n"
" [ dev PHYS_DEV ]\n" " [ dev PHYS_DEV ]\n"
" [ fwmark MARK ]\n" " [ fwmark MARK ]\n"
"\n" "\n"
"Where: ADDR := { IPV6_ADDRESS }\n"
" KEY := { DOTTED_QUAD | NUMBER }\n"
" MARK := { 0x0..0xffffffff }\n"
); );
} fprintf(f,
"Where: ADDR := { IP%s_ADDRESS }\n"
static void usage(void) __attribute__((noreturn)); " KEY := { DOTTED_QUAD | NUMBER }\n"
static void usage(void) " MARK := { 0x0..0xffffffff }\n",
{ "V6"
print_usage(stderr); );
exit(-1);
} }
static int vti6_parse_opt(struct link_util *lu, int argc, char **argv, static int vti6_parse_opt(struct link_util *lu, int argc, char **argv,
@ -153,8 +153,10 @@ get_failed:
NEXT_ARG(); NEXT_ARG();
if (get_u32(&fwmark, *argv, 0)) if (get_u32(&fwmark, *argv, 0))
invarg("invalid fwmark\n", *argv); invarg("invalid fwmark\n", *argv);
} else } else {
usage(); vti6_print_help(lu, argc, argv, stderr);
return -1;
}
argc--; argv++; 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 = { struct link_util vti6_link_util = {
.id = "vti6", .id = "vti6",
.maxattr = IFLA_VTI_MAX, .maxattr = IFLA_VTI_MAX,