From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jakub Kicinski Subject: [PATCH bpf-next 03/11] tools: bpftool: refactor argument parsing for prog load Date: Tue, 3 Jul 2018 19:54:09 -0700 Message-ID: <20180704025417.8848-4-jakub.kicinski@netronome.com> References: <20180704025417.8848-1-jakub.kicinski@netronome.com> Cc: oss-drivers@netronome.com, netdev@vger.kernel.org, Jakub Kicinski To: alexei.starovoitov@gmail.com, daniel@iogearbox.net Return-path: Received: from mail-qt0-f169.google.com ([209.85.216.169]:40798 "EHLO mail-qt0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753213AbeGDCyy (ORCPT ); Tue, 3 Jul 2018 22:54:54 -0400 Received: by mail-qt0-f169.google.com with SMTP id h4-v6so3438282qtj.7 for ; Tue, 03 Jul 2018 19:54:54 -0700 (PDT) In-Reply-To: <20180704025417.8848-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org List-ID: 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 Reviewed-by: Quentin Monnet --- tools/bpf/bpftool/main.h | 15 +++++++++++++++ tools/bpf/bpftool/prog.c | 11 +++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/tools/bpf/bpftool/main.h b/tools/bpf/bpftool/main.h index d39f7ef01d23..15b6c49ae533 100644 --- a/tools/bpf/bpftool/main.h +++ b/tools/bpf/bpftool/main.h @@ -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 diff --git a/tools/bpf/bpftool/prog.c b/tools/bpf/bpftool/prog.c index a740da99d477..a5ef46c59029 100644 --- a/tools/bpf/bpftool/prog.c +++ b/tools/bpf/bpftool/prog.c @@ -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) -- 2.17.1