tools: bpftool: add -d option to get debug output from libbpf
authorQuentin Monnet <quentin.monnet@netronome.com>
Fri, 24 May 2019 10:36:46 +0000 (11:36 +0100)
committerDaniel Borkmann <daniel@iogearbox.net>
Tue, 28 May 2019 09:02:21 +0000 (11:02 +0200)
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: Quentin Monnet <quentin.monnet@netronome.com>
Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
tools/bpf/bpftool/Documentation/bpftool-btf.rst
tools/bpf/bpftool/Documentation/bpftool-cgroup.rst
tools/bpf/bpftool/Documentation/bpftool-feature.rst
tools/bpf/bpftool/Documentation/bpftool-map.rst
tools/bpf/bpftool/Documentation/bpftool-net.rst
tools/bpf/bpftool/Documentation/bpftool-perf.rst
tools/bpf/bpftool/Documentation/bpftool-prog.rst
tools/bpf/bpftool/Documentation/bpftool.rst
tools/bpf/bpftool/bash-completion/bpftool
tools/bpf/bpftool/main.c

index 3daed9eba766b9c28e9a60be23aa627514162824..6694a0fc8f99d505a4d64d1a7e604d9c646896ef 100644 (file)
@@ -72,6 +72,10 @@ OPTIONS
        -p, --pretty
                  Generate human-readable JSON output. Implies **-j**.
 
+       -d, --debug
+                 Print all logs available from libbpf, including debug-level
+                 information.
+
 EXAMPLES
 ========
 **# bpftool btf dump id 1226**
index ac26876389c2383297185ddc1d3f3f1ac0067d8b..36807735e2a5ec18ad6628b8f87f85b5308018ce 100644 (file)
@@ -113,6 +113,10 @@ OPTIONS
        -f, --bpffs
                  Show file names of pinned programs.
 
+       -d, --debug
+                 Print all logs available from libbpf, including debug-level
+                 information.
+
 EXAMPLES
 ========
 |
index 14180e8870824304c54abb9cd67c82919f158e90..4d08f35034a2e49dc26b071dd39ce6eadd194e31 100644 (file)
@@ -73,6 +73,10 @@ OPTIONS
        -p, --pretty
                  Generate human-readable JSON output. Implies **-j**.
 
+       -d, --debug
+                 Print all logs available from libbpf, including debug-level
+                 information.
+
 SEE ALSO
 ========
        **bpf**\ (2),
index 13ef27b39f200ff4239741201deb95d37067464c..490b4501cb6ee021e802c96e088ac42e34fcb19f 100644 (file)
@@ -152,6 +152,10 @@ OPTIONS
                  Do not automatically attempt to mount any virtual file system
                  (such as tracefs or BPF virtual file system) when necessary.
 
+       -d, --debug
+                 Print all logs available from libbpf, including debug-level
+                 information.
+
 EXAMPLES
 ========
 **# bpftool map show**
index 934580850f42b0f74a91b1323020db187652df9c..d8e5237a2085966faa2b1ed312ab5b857e920bef 100644 (file)
@@ -65,6 +65,10 @@ OPTIONS
        -p, --pretty
                  Generate human-readable JSON output. Implies **-j**.
 
+       -d, --debug
+                 Print all logs available from libbpf, including debug-level
+                 information.
+
 EXAMPLES
 ========
 
index 0c7576523a217150c4239b7e903ba82fe53baaab..e252bd0bc4343b8e6f8c22103e408b412d98d0ef 100644 (file)
@@ -53,6 +53,10 @@ OPTIONS
        -p, --pretty
                  Generate human-readable JSON output. Implies **-j**.
 
+       -d, --debug
+                 Print all logs available from libbpf, including debug-level
+                 information.
+
 EXAMPLES
 ========
 
index e8118544d118282b63bfc27e515ea53ae9903d96..9a92614569e645bd66e5e26f1548f3d2b8935e83 100644 (file)
@@ -174,6 +174,10 @@ OPTIONS
                  Do not automatically attempt to mount any virtual file system
                  (such as tracefs or BPF virtual file system) when necessary.
 
+       -d, --debug
+                 Print all logs available from libbpf, including debug-level
+                 information.
+
 EXAMPLES
 ========
 **# bpftool prog show**
index 3e562d7fd56f942c657fdb7015de606190ea5a26..43dba0717953460877adcdab760075795f1ce57d 100644 (file)
@@ -66,6 +66,9 @@ OPTIONS
                  Do not automatically attempt to mount any virtual file system
                  (such as tracefs or BPF virtual file system) when necessary.
 
+       -d, --debug
+                 Print all logs available from libbpf, including debug-level
+                 information.
 
 SEE ALSO
 ========
index fbbad0ed8e82321d10d04c0ade55410b99e66fab..2725e27dfa42ed4d60c4f11f97c862837fe71957 100644 (file)
@@ -187,7 +187,7 @@ _bpftool()
 
     # Deal with options
     if [[ ${words[cword]} == -* ]]; then
-        local c='--version --json --pretty --bpffs --mapcompat'
+        local c='--version --json --pretty --bpffs --mapcompat --debug'
         COMPREPLY=( $( compgen -W "$c" -- "$cur" ) )
         return 0
     fi
index 1ac1fc520e6ab6a7f789b1b658351f3840d30e8b..d74293938a05ce617fb16b292ea8eb99785a872d 100644 (file)
@@ -10,6 +10,7 @@
 #include <string.h>
 
 #include <bpf.h>
+#include <libbpf.h>
 
 #include "main.h"
 
@@ -77,6 +78,13 @@ static int do_version(int argc, char **argv)
        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 (*help)(int argc, char **argv))
 {
@@ -317,6 +325,7 @@ int main(int argc, char **argv)
                { "bpffs",      no_argument,    NULL,   'f' },
                { "mapcompat",  no_argument,    NULL,   'm' },
                { "nomount",    no_argument,    NULL,   'n' },
+               { "debug",      no_argument,    NULL,   'd' },
                { 0 }
        };
        int opt, ret;
@@ -332,7 +341,7 @@ int main(int argc, char **argv)
        hash_init(map_table.table);
 
        opterr = 0;
-       while ((opt = getopt_long(argc, argv, "Vhpjfmn",
+       while ((opt = getopt_long(argc, argv, "Vhpjfmnd",
                                  options, NULL)) >= 0) {
                switch (opt) {
                case 'V':
@@ -362,6 +371,9 @@ int main(int argc, char **argv)
                case 'n':
                        block_mount = true;
                        break;
+               case 'd':
+                       libbpf_set_print(print_all_levels);
+                       break;
                default:
                        p_err("unrecognized option '%s'", argv[optind - 1]);
                        if (json_output)