Skip to content

Commit 99a44be

Browse files
qmonnetAlexei Starovoitov
authored andcommitted
tools: bpftool: add owner_prog_type and owner_jited to bpftool output
For prog array maps, the type of the owner program, and the JIT-ed state of that program, are available from the file descriptor information under /proc. Add them to "bpftool map show" output. Example output: # bpftool map show 158225: prog_array name jmp_table flags 0x0 key 4B value 4B max_entries 8 memlock 4096B owner_prog_type flow_dissector owner jited # bpftool --json --pretty map show [{ "id": 1337, "type": "prog_array", "name": "jmp_table", "flags": 0, "bytes_key": 4, "bytes_value": 4, "max_entries": 8, "bytes_memlock": 4096, "owner_prog_type": "flow_dissector", "owner_jited": true } ] As we move the table used for associating names to program types, complete it with the missing types (lwt_seg6local and sk_reuseport). Also add missing types to the help message for "bpftool prog" (sk_reuseport and flow_dissector). Suggested-by: Daniel Borkmann <daniel@iogearbox.net> Signed-off-by: Quentin Monnet <quentin.monnet@netronome.com> Acked-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
1 parent 73f0b9d commit 99a44be

File tree

3 files changed

+75
-26
lines changed

3 files changed

+75
-26
lines changed

tools/bpf/bpftool/main.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,32 @@
7878
#define HELP_SPEC_MAP \
7979
"MAP := { id MAP_ID | pinned FILE }"
8080

81+
static const char * const prog_type_name[] = {
82+
[BPF_PROG_TYPE_UNSPEC] = "unspec",
83+
[BPF_PROG_TYPE_SOCKET_FILTER] = "socket_filter",
84+
[BPF_PROG_TYPE_KPROBE] = "kprobe",
85+
[BPF_PROG_TYPE_SCHED_CLS] = "sched_cls",
86+
[BPF_PROG_TYPE_SCHED_ACT] = "sched_act",
87+
[BPF_PROG_TYPE_TRACEPOINT] = "tracepoint",
88+
[BPF_PROG_TYPE_XDP] = "xdp",
89+
[BPF_PROG_TYPE_PERF_EVENT] = "perf_event",
90+
[BPF_PROG_TYPE_CGROUP_SKB] = "cgroup_skb",
91+
[BPF_PROG_TYPE_CGROUP_SOCK] = "cgroup_sock",
92+
[BPF_PROG_TYPE_LWT_IN] = "lwt_in",
93+
[BPF_PROG_TYPE_LWT_OUT] = "lwt_out",
94+
[BPF_PROG_TYPE_LWT_XMIT] = "lwt_xmit",
95+
[BPF_PROG_TYPE_SOCK_OPS] = "sock_ops",
96+
[BPF_PROG_TYPE_SK_SKB] = "sk_skb",
97+
[BPF_PROG_TYPE_CGROUP_DEVICE] = "cgroup_device",
98+
[BPF_PROG_TYPE_SK_MSG] = "sk_msg",
99+
[BPF_PROG_TYPE_RAW_TRACEPOINT] = "raw_tracepoint",
100+
[BPF_PROG_TYPE_CGROUP_SOCK_ADDR] = "cgroup_sock_addr",
101+
[BPF_PROG_TYPE_LWT_SEG6LOCAL] = "lwt_seg6local",
102+
[BPF_PROG_TYPE_LIRC_MODE2] = "lirc_mode2",
103+
[BPF_PROG_TYPE_SK_REUSEPORT] = "sk_reuseport",
104+
[BPF_PROG_TYPE_FLOW_DISSECTOR] = "flow_dissector",
105+
};
106+
81107
enum bpf_obj_type {
82108
BPF_OBJ_UNKNOWN,
83109
BPF_OBJ_PROG,

tools/bpf/bpftool/map.c

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,6 @@ static int show_map_close_json(int fd, struct bpf_map_info *info)
487487
char *memlock;
488488

489489
memlock = get_fdinfo(fd, "memlock");
490-
close(fd);
491490

492491
jsonw_start_object(json_wtr);
493492

@@ -514,6 +513,30 @@ static int show_map_close_json(int fd, struct bpf_map_info *info)
514513
jsonw_int_field(json_wtr, "bytes_memlock", atoi(memlock));
515514
free(memlock);
516515

516+
if (info->type == BPF_MAP_TYPE_PROG_ARRAY) {
517+
char *owner_prog_type = get_fdinfo(fd, "owner_prog_type");
518+
char *owner_jited = get_fdinfo(fd, "owner_jited");
519+
520+
if (owner_prog_type) {
521+
unsigned int prog_type = atoi(owner_prog_type);
522+
523+
if (prog_type < ARRAY_SIZE(prog_type_name))
524+
jsonw_string_field(json_wtr, "owner_prog_type",
525+
prog_type_name[prog_type]);
526+
else
527+
jsonw_uint_field(json_wtr, "owner_prog_type",
528+
prog_type);
529+
}
530+
if (atoi(owner_jited))
531+
jsonw_bool_field(json_wtr, "owner_jited", true);
532+
else
533+
jsonw_bool_field(json_wtr, "owner_jited", false);
534+
535+
free(owner_prog_type);
536+
free(owner_jited);
537+
}
538+
close(fd);
539+
517540
if (!hash_empty(map_table.table)) {
518541
struct pinned_obj *obj;
519542

@@ -536,7 +559,6 @@ static int show_map_close_plain(int fd, struct bpf_map_info *info)
536559
char *memlock;
537560

538561
memlock = get_fdinfo(fd, "memlock");
539-
close(fd);
540562

541563
printf("%u: ", info->id);
542564
if (info->type < ARRAY_SIZE(map_type_name))
@@ -557,6 +579,30 @@ static int show_map_close_plain(int fd, struct bpf_map_info *info)
557579
printf(" memlock %sB", memlock);
558580
free(memlock);
559581

582+
if (info->type == BPF_MAP_TYPE_PROG_ARRAY) {
583+
char *owner_prog_type = get_fdinfo(fd, "owner_prog_type");
584+
char *owner_jited = get_fdinfo(fd, "owner_jited");
585+
586+
printf("\n\t");
587+
if (owner_prog_type) {
588+
unsigned int prog_type = atoi(owner_prog_type);
589+
590+
if (prog_type < ARRAY_SIZE(prog_type_name))
591+
printf("owner_prog_type %s ",
592+
prog_type_name[prog_type]);
593+
else
594+
printf("owner_prog_type %d ", prog_type);
595+
}
596+
if (atoi(owner_jited))
597+
printf("owner jited");
598+
else
599+
printf("owner not jited");
600+
601+
free(owner_prog_type);
602+
free(owner_jited);
603+
}
604+
close(fd);
605+
560606
printf("\n");
561607
if (!hash_empty(map_table.table)) {
562608
struct pinned_obj *obj;

tools/bpf/bpftool/prog.c

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -54,30 +54,6 @@
5454
#include "main.h"
5555
#include "xlated_dumper.h"
5656

57-
static const char * const prog_type_name[] = {
58-
[BPF_PROG_TYPE_UNSPEC] = "unspec",
59-
[BPF_PROG_TYPE_SOCKET_FILTER] = "socket_filter",
60-
[BPF_PROG_TYPE_KPROBE] = "kprobe",
61-
[BPF_PROG_TYPE_SCHED_CLS] = "sched_cls",
62-
[BPF_PROG_TYPE_SCHED_ACT] = "sched_act",
63-
[BPF_PROG_TYPE_TRACEPOINT] = "tracepoint",
64-
[BPF_PROG_TYPE_XDP] = "xdp",
65-
[BPF_PROG_TYPE_PERF_EVENT] = "perf_event",
66-
[BPF_PROG_TYPE_CGROUP_SKB] = "cgroup_skb",
67-
[BPF_PROG_TYPE_CGROUP_SOCK] = "cgroup_sock",
68-
[BPF_PROG_TYPE_LWT_IN] = "lwt_in",
69-
[BPF_PROG_TYPE_LWT_OUT] = "lwt_out",
70-
[BPF_PROG_TYPE_LWT_XMIT] = "lwt_xmit",
71-
[BPF_PROG_TYPE_SOCK_OPS] = "sock_ops",
72-
[BPF_PROG_TYPE_SK_SKB] = "sk_skb",
73-
[BPF_PROG_TYPE_CGROUP_DEVICE] = "cgroup_device",
74-
[BPF_PROG_TYPE_SK_MSG] = "sk_msg",
75-
[BPF_PROG_TYPE_RAW_TRACEPOINT] = "raw_tracepoint",
76-
[BPF_PROG_TYPE_CGROUP_SOCK_ADDR] = "cgroup_sock_addr",
77-
[BPF_PROG_TYPE_LIRC_MODE2] = "lirc_mode2",
78-
[BPF_PROG_TYPE_FLOW_DISSECTOR] = "flow_dissector",
79-
};
80-
8157
static const char * const attach_type_strings[] = {
8258
[BPF_SK_SKB_STREAM_PARSER] = "stream_parser",
8359
[BPF_SK_SKB_STREAM_VERDICT] = "stream_verdict",
@@ -1172,6 +1148,7 @@ static int do_help(int argc, char **argv)
11721148
" tracepoint | raw_tracepoint | xdp | perf_event | cgroup/skb |\n"
11731149
" cgroup/sock | cgroup/dev | lwt_in | lwt_out | lwt_xmit |\n"
11741150
" lwt_seg6local | sockops | sk_skb | sk_msg | lirc_mode2 |\n"
1151+
" sk_reuseport | flow_dissector |\n"
11751152
" cgroup/bind4 | cgroup/bind6 | cgroup/post_bind4 |\n"
11761153
" cgroup/post_bind6 | cgroup/connect4 | cgroup/connect6 |\n"
11771154
" cgroup/sendmsg4 | cgroup/sendmsg6 }\n"

0 commit comments

Comments
 (0)