Commit 775bc8ad authored by Quentin Monnet's avatar Quentin Monnet Committed by Daniel Borkmann

tools: bpftool: add -d option to get debug output from libbpf

libbpf has three levels of priority for output messages: warn, info,
debug. By default, debug output is not printed to the console.

Add a new "--debug" (short name: "-d") option to bpftool to print libbpf
logs for all three levels.

Internally, we simply use the function provided by libbpf to replace the
default printing function by one that prints logs regardless of their
level.

v2:
- Remove the possibility to select the log-levels to use (v1 offered a
  combination of "warn", "info" and "debug").
- Rename option and offer a short name: -d|--debug.
- Add option description to all bpftool manual pages (instead of
  bpftool-prog.rst only), as all commands use libbpf.
Signed-off-by: default avatarQuentin Monnet <quentin.monnet@netronome.com>
Reviewed-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parent d98363b5
...@@ -72,6 +72,10 @@ OPTIONS ...@@ -72,6 +72,10 @@ OPTIONS
-p, --pretty -p, --pretty
Generate human-readable JSON output. Implies **-j**. Generate human-readable JSON output. Implies **-j**.
-d, --debug
Print all logs available from libbpf, including debug-level
information.
EXAMPLES EXAMPLES
======== ========
**# bpftool btf dump id 1226** **# bpftool btf dump id 1226**
......
...@@ -113,6 +113,10 @@ OPTIONS ...@@ -113,6 +113,10 @@ OPTIONS
-f, --bpffs -f, --bpffs
Show file names of pinned programs. Show file names of pinned programs.
-d, --debug
Print all logs available from libbpf, including debug-level
information.
EXAMPLES EXAMPLES
======== ========
| |
......
...@@ -73,6 +73,10 @@ OPTIONS ...@@ -73,6 +73,10 @@ OPTIONS
-p, --pretty -p, --pretty
Generate human-readable JSON output. Implies **-j**. Generate human-readable JSON output. Implies **-j**.
-d, --debug
Print all logs available from libbpf, including debug-level
information.
SEE ALSO SEE ALSO
======== ========
**bpf**\ (2), **bpf**\ (2),
......
...@@ -152,6 +152,10 @@ OPTIONS ...@@ -152,6 +152,10 @@ OPTIONS
Do not automatically attempt to mount any virtual file system Do not automatically attempt to mount any virtual file system
(such as tracefs or BPF virtual file system) when necessary. (such as tracefs or BPF virtual file system) when necessary.
-d, --debug
Print all logs available from libbpf, including debug-level
information.
EXAMPLES EXAMPLES
======== ========
**# bpftool map show** **# bpftool map show**
......
...@@ -65,6 +65,10 @@ OPTIONS ...@@ -65,6 +65,10 @@ OPTIONS
-p, --pretty -p, --pretty
Generate human-readable JSON output. Implies **-j**. Generate human-readable JSON output. Implies **-j**.
-d, --debug
Print all logs available from libbpf, including debug-level
information.
EXAMPLES EXAMPLES
======== ========
......
...@@ -53,6 +53,10 @@ OPTIONS ...@@ -53,6 +53,10 @@ OPTIONS
-p, --pretty -p, --pretty
Generate human-readable JSON output. Implies **-j**. Generate human-readable JSON output. Implies **-j**.
-d, --debug
Print all logs available from libbpf, including debug-level
information.
EXAMPLES EXAMPLES
======== ========
......
...@@ -174,6 +174,10 @@ OPTIONS ...@@ -174,6 +174,10 @@ OPTIONS
Do not automatically attempt to mount any virtual file system Do not automatically attempt to mount any virtual file system
(such as tracefs or BPF virtual file system) when necessary. (such as tracefs or BPF virtual file system) when necessary.
-d, --debug
Print all logs available from libbpf, including debug-level
information.
EXAMPLES EXAMPLES
======== ========
**# bpftool prog show** **# bpftool prog show**
......
...@@ -66,6 +66,9 @@ OPTIONS ...@@ -66,6 +66,9 @@ OPTIONS
Do not automatically attempt to mount any virtual file system Do not automatically attempt to mount any virtual file system
(such as tracefs or BPF virtual file system) when necessary. (such as tracefs or BPF virtual file system) when necessary.
-d, --debug
Print all logs available from libbpf, including debug-level
information.
SEE ALSO SEE ALSO
======== ========
......
...@@ -187,7 +187,7 @@ _bpftool() ...@@ -187,7 +187,7 @@ _bpftool()
# Deal with options # Deal with options
if [[ ${words[cword]} == -* ]]; then if [[ ${words[cword]} == -* ]]; then
local c='--version --json --pretty --bpffs --mapcompat' local c='--version --json --pretty --bpffs --mapcompat --debug'
COMPREPLY=( $( compgen -W "$c" -- "$cur" ) ) COMPREPLY=( $( compgen -W "$c" -- "$cur" ) )
return 0 return 0
fi fi
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include <string.h> #include <string.h>
#include <bpf.h> #include <bpf.h>
#include <libbpf.h>
#include "main.h" #include "main.h"
...@@ -77,6 +78,13 @@ static int do_version(int argc, char **argv) ...@@ -77,6 +78,13 @@ static int do_version(int argc, char **argv)
return 0; return 0;
} }
static int __printf(2, 0)
print_all_levels(__maybe_unused enum libbpf_print_level level,
const char *format, va_list args)
{
return vfprintf(stderr, format, args);
}
int cmd_select(const struct cmd *cmds, int argc, char **argv, int cmd_select(const struct cmd *cmds, int argc, char **argv,
int (*help)(int argc, char **argv)) int (*help)(int argc, char **argv))
{ {
...@@ -317,6 +325,7 @@ int main(int argc, char **argv) ...@@ -317,6 +325,7 @@ int main(int argc, char **argv)
{ "bpffs", no_argument, NULL, 'f' }, { "bpffs", no_argument, NULL, 'f' },
{ "mapcompat", no_argument, NULL, 'm' }, { "mapcompat", no_argument, NULL, 'm' },
{ "nomount", no_argument, NULL, 'n' }, { "nomount", no_argument, NULL, 'n' },
{ "debug", no_argument, NULL, 'd' },
{ 0 } { 0 }
}; };
int opt, ret; int opt, ret;
...@@ -332,7 +341,7 @@ int main(int argc, char **argv) ...@@ -332,7 +341,7 @@ int main(int argc, char **argv)
hash_init(map_table.table); hash_init(map_table.table);
opterr = 0; opterr = 0;
while ((opt = getopt_long(argc, argv, "Vhpjfmn", while ((opt = getopt_long(argc, argv, "Vhpjfmnd",
options, NULL)) >= 0) { options, NULL)) >= 0) {
switch (opt) { switch (opt) {
case 'V': case 'V':
...@@ -362,6 +371,9 @@ int main(int argc, char **argv) ...@@ -362,6 +371,9 @@ int main(int argc, char **argv)
case 'n': case 'n':
block_mount = true; block_mount = true;
break; break;
case 'd':
libbpf_set_print(print_all_levels);
break;
default: default:
p_err("unrecognized option '%s'", argv[optind - 1]); p_err("unrecognized option '%s'", argv[optind - 1]);
if (json_output) if (json_output)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment