tools: bpftool: refactor argument parsing for prog load
Add a new macro for printing more informative message than straight usage() when parameters are missing, and use it for prog do_load(). Save the object and pin path argument to variables for clarity. Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
This commit is contained in:
parent
219f860d2a
commit
8d1fc3de3d
|
@ -50,6 +50,21 @@
|
|||
#define NEXT_ARG() ({ argc--; argv++; if (argc < 0) usage(); })
|
||||
#define NEXT_ARGP() ({ (*argc)--; (*argv)++; if (*argc < 0) usage(); })
|
||||
#define BAD_ARG() ({ p_err("what is '%s'?", *argv); -1; })
|
||||
#define GET_ARG() ({ argc--; *argv++; })
|
||||
#define REQ_ARGS(cnt) \
|
||||
({ \
|
||||
int _cnt = (cnt); \
|
||||
bool _res; \
|
||||
\
|
||||
if (argc < _cnt) { \
|
||||
p_err("'%s' needs at least %d arguments, %d found", \
|
||||
argv[-1], _cnt, argc); \
|
||||
_res = false; \
|
||||
} else { \
|
||||
_res = true; \
|
||||
} \
|
||||
_res; \
|
||||
})
|
||||
|
||||
#define ERR_MAX_LEN 1024
|
||||
|
||||
|
|
|
@ -681,18 +681,21 @@ static int do_pin(int argc, char **argv)
|
|||
|
||||
static int do_load(int argc, char **argv)
|
||||
{
|
||||
const char *objfile, *pinfile;
|
||||
struct bpf_object *obj;
|
||||
int prog_fd;
|
||||
|
||||
if (argc != 2)
|
||||
usage();
|
||||
if (!REQ_ARGS(2))
|
||||
return -1;
|
||||
objfile = GET_ARG();
|
||||
pinfile = GET_ARG();
|
||||
|
||||
if (bpf_prog_load(argv[0], BPF_PROG_TYPE_UNSPEC, &obj, &prog_fd)) {
|
||||
if (bpf_prog_load(objfile, BPF_PROG_TYPE_UNSPEC, &obj, &prog_fd)) {
|
||||
p_err("failed to load program");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (do_pin_fd(prog_fd, argv[1]))
|
||||
if (do_pin_fd(prog_fd, pinfile))
|
||||
goto err_close_obj;
|
||||
|
||||
if (json_output)
|
||||
|
|
Loading…
Reference in New Issue