Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8d1fc3de authored by Jakub Kicinski's avatar Jakub Kicinski Committed by Daniel Borkmann
Browse files

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: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: default avatarQuentin Monnet <quentin.monnet@netronome.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parent 219f860d
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -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

+7 −4
Original line number Diff line number Diff line
@@ -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)