tools: bpftool: Print optional built-in features along with version
Bpftool has a number of features that can be included or left aside during compilation. This includes: - Support for libbfd, providing the disassembler for JIT-compiled programs. - Support for BPF skeletons, used for profiling programs or iterating on the PIDs of processes associated with BPF objects. In order to make it easy for users to understand what features were compiled for a given bpftool binary, print the status of the two features above when showing the version number for bpftool ("bpftool -V" or "bpftool version"). Document this in the main manual page. Example invocations: $ bpftool version ./bpftool v5.9.0-rc1 features: libbfd, skeletons $ bpftool -p version { "version": "5.9.0-rc1", "features": { "libbfd": true, "skeletons": true } } Some other parameters are optional at compilation ("DISASM_FOUR_ARGS_SIGNATURE", LIBCAP support) but they do not impact significantly bpftool's behaviour from a user's point of view, so their status is not reported. Available commands and supported program types depend on the version number, and are therefore not reported either. Note that they are already available, albeit without JSON, via bpftool's help messages. v3: - Use a simple list instead of boolean values for plain output. v2: - Fix JSON (object instead or array for the features). Signed-off-by: Quentin Monnet <quentin@isovalent.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Andrii Nakryiko <andriin@fb.com> Link: https://lore.kernel.org/bpf/20200909162500.17010-2-quentin@isovalent.com
This commit is contained in:
Родитель
41d5c37b74
Коммит
82b8cf0acc
|
@ -50,7 +50,13 @@ OPTIONS
|
|||
Print short help message (similar to **bpftool help**).
|
||||
|
||||
-V, --version
|
||||
Print version number (similar to **bpftool version**).
|
||||
Print version number (similar to **bpftool version**), and
|
||||
optional features that were included when bpftool was
|
||||
compiled. Optional features include linking against libbfd to
|
||||
provide the disassembler for JIT-ted programs (**bpftool prog
|
||||
dump jited**) and usage of BPF skeletons (some features like
|
||||
**bpftool prog profile** or showing pids associated to BPF
|
||||
objects may rely on it).
|
||||
|
||||
-j, --json
|
||||
Generate JSON output. For commands that cannot produce JSON, this
|
||||
|
|
|
@ -70,13 +70,42 @@ static int do_help(int argc, char **argv)
|
|||
|
||||
static int do_version(int argc, char **argv)
|
||||
{
|
||||
#ifdef HAVE_LIBBFD_SUPPORT
|
||||
const bool has_libbfd = true;
|
||||
#else
|
||||
const bool has_libbfd = false;
|
||||
#endif
|
||||
#ifdef BPFTOOL_WITHOUT_SKELETONS
|
||||
const bool has_skeletons = false;
|
||||
#else
|
||||
const bool has_skeletons = true;
|
||||
#endif
|
||||
|
||||
if (json_output) {
|
||||
jsonw_start_object(json_wtr);
|
||||
jsonw_start_object(json_wtr); /* root object */
|
||||
|
||||
jsonw_name(json_wtr, "version");
|
||||
jsonw_printf(json_wtr, "\"%s\"", BPFTOOL_VERSION);
|
||||
jsonw_end_object(json_wtr);
|
||||
|
||||
jsonw_name(json_wtr, "features");
|
||||
jsonw_start_object(json_wtr); /* features */
|
||||
jsonw_bool_field(json_wtr, "libbfd", has_libbfd);
|
||||
jsonw_bool_field(json_wtr, "skeletons", has_skeletons);
|
||||
jsonw_end_object(json_wtr); /* features */
|
||||
|
||||
jsonw_end_object(json_wtr); /* root object */
|
||||
} else {
|
||||
unsigned int nb_features = 0;
|
||||
|
||||
printf("%s v%s\n", bin_name, BPFTOOL_VERSION);
|
||||
printf("features:");
|
||||
if (has_libbfd) {
|
||||
printf(" libbfd");
|
||||
nb_features++;
|
||||
}
|
||||
if (has_skeletons)
|
||||
printf("%s skeletons", nb_features++ ? "," : "");
|
||||
printf("\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче