Skip to content

Commit

Permalink
tools: bpftool: provide JSON output for all possible commands
Browse files Browse the repository at this point in the history
As all commands can now return JSON output (possibly just a "null"
value), output of `bpftool --json batch file FILE` should also be fully
JSON compliant.

Signed-off-by: Quentin Monnet <quentin.monnet@netronome.com>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Quentin Monnet authored and David S. Miller committed Oct 24, 2017
1 parent 9a5ab8b commit 004b45c
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 6 deletions.
25 changes: 21 additions & 4 deletions tools/bpf/bpftool/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,11 @@ void usage(void)

static int do_help(int argc, char **argv)
{
if (json_output) {
jsonw_null(json_wtr);
return 0;
}

fprintf(stderr,
"Usage: %s OBJECT { COMMAND | help }\n"
" %s batch file FILE\n"
Expand All @@ -77,10 +82,22 @@ static int do_help(int argc, char **argv)

static int do_version(int argc, char **argv)
{
printf("%s v%d.%d.%d\n", bin_name,
LINUX_VERSION_CODE >> 16,
LINUX_VERSION_CODE >> 8 & 0xf,
LINUX_VERSION_CODE & 0xf);
unsigned int version[3];

version[0] = LINUX_VERSION_CODE >> 16;
version[1] = LINUX_VERSION_CODE >> 8 & 0xf;
version[2] = LINUX_VERSION_CODE & 0xf;

if (json_output) {
jsonw_start_object(json_wtr);
jsonw_name(json_wtr, "version");
jsonw_printf(json_wtr, "\"%u.%u.%u\"",
version[0], version[1], version[2]);
jsonw_end_object(json_wtr);
} else {
printf("%s v%u.%u.%u\n", bin_name,
version[0], version[1], version[2]);
}
return 0;
}

Expand Down
16 changes: 15 additions & 1 deletion tools/bpf/bpftool/map.c
Original file line number Diff line number Diff line change
Expand Up @@ -651,6 +651,8 @@ static int do_update(int argc, char **argv)
free(value);
close(fd);

if (!err && json_output)
jsonw_null(json_wtr);
return err;
}

Expand Down Expand Up @@ -812,16 +814,28 @@ static int do_delete(int argc, char **argv)
free(key);
close(fd);

if (!err && json_output)
jsonw_null(json_wtr);
return err;
}

static int do_pin(int argc, char **argv)
{
return do_pin_any(argc, argv, bpf_map_get_fd_by_id);
int err;

err = do_pin_any(argc, argv, bpf_map_get_fd_by_id);
if (!err && json_output)
jsonw_null(json_wtr);
return err;
}

static int do_help(int argc, char **argv)
{
if (json_output) {
jsonw_null(json_wtr);
return 0;
}

fprintf(stderr,
"Usage: %s %s show [MAP]\n"
" %s %s dump MAP\n"
Expand Down
12 changes: 11 additions & 1 deletion tools/bpf/bpftool/prog.c
Original file line number Diff line number Diff line change
Expand Up @@ -602,11 +602,21 @@ static int do_dump(int argc, char **argv)

static int do_pin(int argc, char **argv)
{
return do_pin_any(argc, argv, bpf_prog_get_fd_by_id);
int err;

err = do_pin_any(argc, argv, bpf_prog_get_fd_by_id);
if (!err && json_output)
jsonw_null(json_wtr);
return err;
}

static int do_help(int argc, char **argv)
{
if (json_output) {
jsonw_null(json_wtr);
return 0;
}

fprintf(stderr,
"Usage: %s %s show [PROG]\n"
" %s %s dump xlated PROG [{ file FILE | opcodes }]\n"
Expand Down

0 comments on commit 004b45c

Please sign in to comment.