From 3882d69d1fdf997c0deab696af7be752e87877d5 Mon Sep 17 00:00:00 2001 From: bitcoffee Date: Thu, 12 Oct 2023 19:50:14 +0800 Subject: [PATCH] bpftool: recognize scheduler programs Teach bpftool to recognize scheduler bpf programs. Signed-off-by: Roman Gushchin Signed-off-by: Chen Hui Signed-off-by: Ren Zhijie Signed-off-by: Hui Tang --- include/uapi/linux/bpf.h | 6 ++++++ libbpf/include/uapi/linux/bpf.h | 6 ++++++ libbpf/src/bpf.c | 1 + libbpf/src/libbpf.c | 3 ++- src/common.c | 1 + src/prog.c | 1 + 6 files changed, 17 insertions(+), 1 deletion(-) diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 0210f85..f4e5102 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -952,6 +952,9 @@ enum bpf_prog_type { BPF_PROG_TYPE_LSM, BPF_PROG_TYPE_SK_LOOKUP, BPF_PROG_TYPE_SYSCALL, /* a program that can execute syscalls */ +#ifndef __GENKSYMS__ + BPF_PROG_TYPE_SCHED, +#endif }; enum bpf_attach_type { @@ -998,6 +1001,9 @@ enum bpf_attach_type { BPF_SK_REUSEPORT_SELECT_OR_MIGRATE, BPF_PERF_EVENT, BPF_TRACE_KPROBE_MULTI, +#ifndef __GENKSYMS__ + BPF_SCHED, +#endif __MAX_BPF_ATTACH_TYPE }; diff --git a/libbpf/include/uapi/linux/bpf.h b/libbpf/include/uapi/linux/bpf.h index 0210f85..f4e5102 100644 --- a/libbpf/include/uapi/linux/bpf.h +++ b/libbpf/include/uapi/linux/bpf.h @@ -952,6 +952,9 @@ enum bpf_prog_type { BPF_PROG_TYPE_LSM, BPF_PROG_TYPE_SK_LOOKUP, BPF_PROG_TYPE_SYSCALL, /* a program that can execute syscalls */ +#ifndef __GENKSYMS__ + BPF_PROG_TYPE_SCHED, +#endif }; enum bpf_attach_type { @@ -998,6 +1001,9 @@ enum bpf_attach_type { BPF_SK_REUSEPORT_SELECT_OR_MIGRATE, BPF_PERF_EVENT, BPF_TRACE_KPROBE_MULTI, +#ifndef __GENKSYMS__ + BPF_SCHED, +#endif __MAX_BPF_ATTACH_TYPE }; diff --git a/libbpf/src/bpf.c b/libbpf/src/bpf.c index 4677644..a223340 100644 --- a/libbpf/src/bpf.c +++ b/libbpf/src/bpf.c @@ -484,6 +484,7 @@ static int bpf_load_program_xattr2(const struct bpf_load_program_attr *load_attr break; case BPF_PROG_TYPE_TRACING: case BPF_PROG_TYPE_EXT: + case BPF_PROG_TYPE_SCHED: p.attach_btf_id = load_attr->attach_btf_id; p.attach_prog_fd = load_attr->attach_prog_fd; break; diff --git a/libbpf/src/libbpf.c b/libbpf/src/libbpf.c index 1a5ab2f..72a5c45 100644 --- a/libbpf/src/libbpf.c +++ b/libbpf/src/libbpf.c @@ -7333,7 +7333,8 @@ static int bpf_object_init_progs(struct bpf_object *obj, const struct bpf_object #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" if (prog->sec_def->prog_type == BPF_PROG_TYPE_TRACING || - prog->sec_def->prog_type == BPF_PROG_TYPE_EXT) + prog->sec_def->prog_type == BPF_PROG_TYPE_EXT || + prog->type == BPF_PROG_TYPE_SCHED) prog->attach_prog_fd = OPTS_GET(opts, attach_prog_fd, 0); #pragma GCC diagnostic pop diff --git a/src/common.c b/src/common.c index c740142..c2cff8e 100644 --- a/src/common.c +++ b/src/common.c @@ -75,6 +75,7 @@ const char * const attach_type_name[__MAX_BPF_ATTACH_TYPE] = { [BPF_SK_REUSEPORT_SELECT_OR_MIGRATE] = "sk_skb_reuseport_select_or_migrate", [BPF_PERF_EVENT] = "perf_event", [BPF_TRACE_KPROBE_MULTI] = "trace_kprobe_multi", + [BPF_SCHED] = "sched", }; void p_err(const char *fmt, ...) diff --git a/src/prog.c b/src/prog.c index 5c2c63d..3e385d6 100644 --- a/src/prog.c +++ b/src/prog.c @@ -69,6 +69,7 @@ const char * const prog_type_name[] = { [BPF_PROG_TYPE_LSM] = "lsm", [BPF_PROG_TYPE_SK_LOOKUP] = "sk_lookup", [BPF_PROG_TYPE_SYSCALL] = "syscall", + [BPF_PROG_TYPE_SCHED] = "sched", }; const size_t prog_type_name_size = ARRAY_SIZE(prog_type_name); -- 2.33.0