]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
libbpf: introduce concept of bpf_link
authorAndrii Nakryiko <andriin@fb.com>
Mon, 1 Jul 2019 23:58:56 +0000 (16:58 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Fri, 5 Jul 2019 20:37:30 +0000 (22:37 +0200)
bpf_link is an abstraction of an association of a BPF program and one of
many possible BPF attachment points (hooks). This allows to have uniform
interface for detaching BPF programs regardless of the nature of link
and how it was created. Details of creation and setting up of a specific
bpf_link is handled by corresponding attachment methods
(bpf_program__attach_xxx) added in subsequent commits. Once successfully
created, bpf_link has to be eventually destroyed with
bpf_link__destroy(), at which point BPF program is disassociated from
a hook and all the relevant resources are freed.

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Acked-by: Song Liu <songliubraving@fb.com>
Reviewed-by: Stanislav Fomichev <sdf@google.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
tools/lib/bpf/libbpf.c
tools/lib/bpf/libbpf.h
tools/lib/bpf/libbpf.map

index 4907997289e9959632df40f51f507fcfe9d1a85c..f308690abd5075d27272ae0ff969d4054f2962aa 100644 (file)
@@ -3941,6 +3941,23 @@ int bpf_prog_load_xattr(const struct bpf_prog_load_attr *attr,
        return 0;
 }
 
+struct bpf_link {
+       int (*destroy)(struct bpf_link *link);
+};
+
+int bpf_link__destroy(struct bpf_link *link)
+{
+       int err;
+
+       if (!link)
+               return 0;
+
+       err = link->destroy(link);
+       free(link);
+
+       return err;
+}
+
 enum bpf_perf_event_ret
 bpf_perf_event_read_simple(void *mmap_mem, size_t mmap_size, size_t page_size,
                           void **copy_mem, size_t *copy_size,
index d639f47e3110428177e03b90f9b02d25f7f3b5f4..5082a5ebb0c2873d0c626e1a733e5204bccc49a7 100644 (file)
@@ -165,6 +165,10 @@ LIBBPF_API int bpf_program__pin(struct bpf_program *prog, const char *path);
 LIBBPF_API int bpf_program__unpin(struct bpf_program *prog, const char *path);
 LIBBPF_API void bpf_program__unload(struct bpf_program *prog);
 
+struct bpf_link;
+
+LIBBPF_API int bpf_link__destroy(struct bpf_link *link);
+
 struct bpf_insn;
 
 /*
index 2c6d835620d254ef39b16564487dd0477c0fce8d..3cde850fc8dabea2afb56047cee1c5de2b5e4c32 100644 (file)
@@ -167,10 +167,11 @@ LIBBPF_0.0.3 {
 
 LIBBPF_0.0.4 {
        global:
+               bpf_link__destroy;
+               bpf_object__load_xattr;
                btf_dump__dump_type;
                btf_dump__free;
                btf_dump__new;
                btf__parse_elf;
-               bpf_object__load_xattr;
                libbpf_num_possible_cpus;
 } LIBBPF_0.0.3;