libbpf: Introduce bpf_object__btf

Add new accessor for bpf_object to get opaque struct btf * from it.

struct btf * is needed for all operations with BTF and it's present in
bpf_object. The only thing missing is a way to get it.

Example use-case is to get BTF key_type_id and value_type_id for a map in
bpf_object. It can be done with btf__get_map_kv_tids() but that function
requires struct btf *.

Similar API can be added for struct btf_ext but no use-case for it yet.

Signed-off-by: Andrey Ignatov <rdna@fb.com>
Acked-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
This commit is contained in:
Andrey Ignatov 2019-02-14 15:01:43 -08:00 committed by Daniel Borkmann
parent 1a11a4c74f
commit 789f6bab84
3 changed files with 9 additions and 0 deletions

View File

@ -2331,6 +2331,11 @@ unsigned int bpf_object__kversion(struct bpf_object *obj)
return obj ? obj->kern_version : 0; return obj ? obj->kern_version : 0;
} }
struct btf *bpf_object__btf(struct bpf_object *obj)
{
return obj ? obj->btf : NULL;
}
int bpf_object__btf_fd(const struct bpf_object *obj) int bpf_object__btf_fd(const struct bpf_object *obj)
{ {
return obj->btf ? btf__fd(obj->btf) : -1; return obj->btf ? btf__fd(obj->btf) : -1;

View File

@ -89,6 +89,9 @@ LIBBPF_API int bpf_object__load(struct bpf_object *obj);
LIBBPF_API int bpf_object__unload(struct bpf_object *obj); LIBBPF_API int bpf_object__unload(struct bpf_object *obj);
LIBBPF_API const char *bpf_object__name(struct bpf_object *obj); LIBBPF_API const char *bpf_object__name(struct bpf_object *obj);
LIBBPF_API unsigned int bpf_object__kversion(struct bpf_object *obj); LIBBPF_API unsigned int bpf_object__kversion(struct bpf_object *obj);
struct btf;
LIBBPF_API struct btf *bpf_object__btf(struct bpf_object *obj);
LIBBPF_API int bpf_object__btf_fd(const struct bpf_object *obj); LIBBPF_API int bpf_object__btf_fd(const struct bpf_object *obj);
LIBBPF_API struct bpf_program * LIBBPF_API struct bpf_program *

View File

@ -132,6 +132,7 @@ LIBBPF_0.0.2 {
bpf_probe_prog_type; bpf_probe_prog_type;
bpf_map__resize; bpf_map__resize;
bpf_map_lookup_elem_flags; bpf_map_lookup_elem_flags;
bpf_object__btf;
bpf_object__find_map_fd_by_name; bpf_object__find_map_fd_by_name;
bpf_get_link_xdp_id; bpf_get_link_xdp_id;
btf__dedup; btf__dedup;