bpf-dlopen: pick up more symbols from libbpf
This commit is contained in:
@@ -26,6 +26,7 @@ struct bpf_map_create_opts;
|
||||
* When removing this file move these back to bpf-dlopen.h */
|
||||
extern int (*sym_bpf_map_create)(enum bpf_map_type, const char *, __u32, __u32, __u32, const struct bpf_map_create_opts *);
|
||||
extern int (*sym_libbpf_probe_bpf_prog_type)(enum bpf_prog_type, const void *);
|
||||
extern struct bpf_map* (*sym_bpf_object__next_map)(const struct bpf_object *obj, const struct bpf_map *map);
|
||||
|
||||
/* compat symbols removed in libbpf 1.0 */
|
||||
extern int (*sym_bpf_create_map)(enum bpf_map_type, int key_size, int value_size, int max_entries, __u32 map_flags);
|
||||
|
||||
+49
-19
@@ -18,28 +18,41 @@
|
||||
#define MODERN_LIBBPF 0
|
||||
#endif
|
||||
|
||||
DLSYM_FUNCTION(bpf_program__attach_cgroup);
|
||||
DLSYM_FUNCTION(bpf_program__attach_lsm);
|
||||
DLSYM_FUNCTION(bpf_link__fd);
|
||||
DLSYM_FUNCTION(bpf_link__destroy);
|
||||
DLSYM_FUNCTION(bpf_link__fd);
|
||||
DLSYM_FUNCTION(bpf_link__open);
|
||||
DLSYM_FUNCTION(bpf_link__pin);
|
||||
DLSYM_FUNCTION(bpf_map__fd);
|
||||
DLSYM_FUNCTION(bpf_map__name);
|
||||
DLSYM_FUNCTION(bpf_map__set_max_entries);
|
||||
DLSYM_FUNCTION(bpf_map_update_elem);
|
||||
DLSYM_FUNCTION(bpf_map_delete_elem);
|
||||
DLSYM_FUNCTION(bpf_map__set_inner_map_fd);
|
||||
DLSYM_FUNCTION(bpf_object__open_skeleton);
|
||||
DLSYM_FUNCTION(bpf_object__load_skeleton);
|
||||
DLSYM_FUNCTION(bpf_map__set_max_entries);
|
||||
DLSYM_FUNCTION(bpf_map__set_pin_path);
|
||||
DLSYM_FUNCTION(bpf_map_delete_elem);
|
||||
DLSYM_FUNCTION(bpf_map_get_fd_by_id);
|
||||
DLSYM_FUNCTION(bpf_map_lookup_elem);
|
||||
DLSYM_FUNCTION(bpf_map_update_elem);
|
||||
DLSYM_FUNCTION(bpf_object__attach_skeleton);
|
||||
DLSYM_FUNCTION(bpf_object__detach_skeleton);
|
||||
DLSYM_FUNCTION(bpf_object__destroy_skeleton);
|
||||
DLSYM_FUNCTION(bpf_object__detach_skeleton);
|
||||
DLSYM_FUNCTION(bpf_object__load_skeleton);
|
||||
DLSYM_FUNCTION(bpf_object__name);
|
||||
DLSYM_FUNCTION(bpf_object__open_skeleton);
|
||||
DLSYM_FUNCTION(bpf_object__pin_maps);
|
||||
DLSYM_FUNCTION(bpf_program__attach);
|
||||
DLSYM_FUNCTION(bpf_program__attach_cgroup);
|
||||
DLSYM_FUNCTION(bpf_program__attach_lsm);
|
||||
DLSYM_FUNCTION(bpf_program__name);
|
||||
DLSYM_FUNCTION(libbpf_set_print);
|
||||
DLSYM_FUNCTION(libbpf_get_error);
|
||||
DLSYM_FUNCTION(libbpf_set_print);
|
||||
DLSYM_FUNCTION(ring_buffer__epoll_fd);
|
||||
DLSYM_FUNCTION(ring_buffer__free);
|
||||
DLSYM_FUNCTION(ring_buffer__new);
|
||||
DLSYM_FUNCTION(ring_buffer__poll);
|
||||
|
||||
/* new symbols available from libbpf 0.7.0 */
|
||||
int (*sym_bpf_map_create)(enum bpf_map_type, const char *, __u32, __u32, __u32, const struct bpf_map_create_opts *);
|
||||
int (*sym_libbpf_probe_bpf_prog_type)(enum bpf_prog_type, const void *);
|
||||
struct bpf_map* (*sym_bpf_object__next_map)(const struct bpf_object *obj, const struct bpf_map *map);
|
||||
|
||||
/* compat symbols removed in libbpf 1.0 */
|
||||
int (*sym_bpf_create_map)(enum bpf_map_type, int key_size, int value_size, int max_entries, __u32 map_flags);
|
||||
@@ -90,6 +103,8 @@ int dlopen_bpf(void) {
|
||||
DLSYM_ARG(bpf_probe_prog_type)
|
||||
#endif
|
||||
);
|
||||
|
||||
/* NB: we don't try to load bpf_object__next_map() on old versions */
|
||||
} else {
|
||||
log_debug("Loaded 'libbpf.so.1' via dlopen()");
|
||||
|
||||
@@ -98,11 +113,13 @@ int dlopen_bpf(void) {
|
||||
dl, LOG_DEBUG,
|
||||
#if MODERN_LIBBPF
|
||||
DLSYM_ARG(bpf_map_create),
|
||||
DLSYM_ARG(libbpf_probe_bpf_prog_type)
|
||||
DLSYM_ARG(libbpf_probe_bpf_prog_type),
|
||||
DLSYM_ARG(bpf_object__next_map)
|
||||
#else
|
||||
/* These symbols did not exist in old libbpf, hence we cannot type check them */
|
||||
DLSYM_ARG_FORCE(bpf_map_create),
|
||||
DLSYM_ARG_FORCE(libbpf_probe_bpf_prog_type)
|
||||
DLSYM_ARG_FORCE(libbpf_probe_bpf_prog_type),
|
||||
DLSYM_ARG_FORCE(bpf_object__next_map)
|
||||
#endif
|
||||
);
|
||||
}
|
||||
@@ -113,28 +130,41 @@ int dlopen_bpf(void) {
|
||||
dl, LOG_DEBUG,
|
||||
DLSYM_ARG(bpf_link__destroy),
|
||||
DLSYM_ARG(bpf_link__fd),
|
||||
DLSYM_ARG(bpf_link__open),
|
||||
DLSYM_ARG(bpf_link__pin),
|
||||
DLSYM_ARG(bpf_map__fd),
|
||||
DLSYM_ARG(bpf_map__name),
|
||||
DLSYM_ARG(bpf_map__set_max_entries),
|
||||
DLSYM_ARG(bpf_map_update_elem),
|
||||
DLSYM_ARG(bpf_map_delete_elem),
|
||||
DLSYM_ARG(bpf_map__set_inner_map_fd),
|
||||
DLSYM_ARG(bpf_object__open_skeleton),
|
||||
DLSYM_ARG(bpf_object__load_skeleton),
|
||||
DLSYM_ARG(bpf_map__set_max_entries),
|
||||
DLSYM_ARG(bpf_map__set_pin_path),
|
||||
DLSYM_ARG(bpf_map_delete_elem),
|
||||
DLSYM_ARG(bpf_map_get_fd_by_id),
|
||||
DLSYM_ARG(bpf_map_lookup_elem),
|
||||
DLSYM_ARG(bpf_map_update_elem),
|
||||
DLSYM_ARG(bpf_object__attach_skeleton),
|
||||
DLSYM_ARG(bpf_object__detach_skeleton),
|
||||
DLSYM_ARG(bpf_object__destroy_skeleton),
|
||||
DLSYM_ARG(bpf_object__detach_skeleton),
|
||||
DLSYM_ARG(bpf_object__load_skeleton),
|
||||
DLSYM_ARG(bpf_object__name),
|
||||
DLSYM_ARG(bpf_object__open_skeleton),
|
||||
DLSYM_ARG(bpf_object__pin_maps),
|
||||
#if MODERN_LIBBPF
|
||||
DLSYM_ARG(bpf_program__attach),
|
||||
DLSYM_ARG(bpf_program__attach_cgroup),
|
||||
DLSYM_ARG(bpf_program__attach_lsm),
|
||||
#else
|
||||
/* libbpf added a "const" to function parameters where it should not have, ignore this type incompatibility */
|
||||
DLSYM_ARG_FORCE(bpf_program__attach),
|
||||
DLSYM_ARG_FORCE(bpf_program__attach_cgroup),
|
||||
DLSYM_ARG_FORCE(bpf_program__attach_lsm),
|
||||
#endif
|
||||
DLSYM_ARG(bpf_program__name),
|
||||
DLSYM_ARG(libbpf_get_error),
|
||||
DLSYM_ARG(libbpf_set_print),
|
||||
DLSYM_ARG(libbpf_get_error));
|
||||
DLSYM_ARG(ring_buffer__epoll_fd),
|
||||
DLSYM_ARG(ring_buffer__free),
|
||||
DLSYM_ARG(ring_buffer__new),
|
||||
DLSYM_ARG(ring_buffer__poll));
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
||||
+22
-10
@@ -9,26 +9,38 @@
|
||||
#include "bpf-compat.h"
|
||||
#include "dlfcn-util.h"
|
||||
|
||||
DLSYM_PROTOTYPE(bpf_program__attach_cgroup);
|
||||
DLSYM_PROTOTYPE(bpf_program__attach_lsm);
|
||||
DLSYM_PROTOTYPE(bpf_link__fd);
|
||||
DLSYM_PROTOTYPE(bpf_link__destroy);
|
||||
DLSYM_PROTOTYPE(bpf_link__fd);
|
||||
DLSYM_PROTOTYPE(bpf_link__open);
|
||||
DLSYM_PROTOTYPE(bpf_link__pin);
|
||||
DLSYM_PROTOTYPE(bpf_map__fd);
|
||||
DLSYM_PROTOTYPE(bpf_map__name);
|
||||
DLSYM_PROTOTYPE(bpf_map__set_max_entries);
|
||||
DLSYM_PROTOTYPE(bpf_map_update_elem);
|
||||
DLSYM_PROTOTYPE(bpf_map_delete_elem);
|
||||
DLSYM_PROTOTYPE(bpf_map__set_inner_map_fd);
|
||||
DLSYM_PROTOTYPE(bpf_map__set_max_entries);
|
||||
DLSYM_PROTOTYPE(bpf_map__set_pin_path);
|
||||
DLSYM_PROTOTYPE(bpf_map_delete_elem);
|
||||
DLSYM_PROTOTYPE(bpf_map_get_fd_by_id);
|
||||
DLSYM_PROTOTYPE(bpf_map_lookup_elem);
|
||||
DLSYM_PROTOTYPE(bpf_map_update_elem);
|
||||
/* The *_skeleton APIs are autogenerated by bpftool, the targets can be found
|
||||
* in ./build/src/core/bpf/socket_bind/socket-bind.skel.h */
|
||||
DLSYM_PROTOTYPE(bpf_object__open_skeleton);
|
||||
DLSYM_PROTOTYPE(bpf_object__load_skeleton);
|
||||
DLSYM_PROTOTYPE(bpf_object__attach_skeleton);
|
||||
DLSYM_PROTOTYPE(bpf_object__detach_skeleton);
|
||||
DLSYM_PROTOTYPE(bpf_object__destroy_skeleton);
|
||||
DLSYM_PROTOTYPE(bpf_object__detach_skeleton);
|
||||
DLSYM_PROTOTYPE(bpf_object__load_skeleton);
|
||||
DLSYM_PROTOTYPE(bpf_object__name);
|
||||
DLSYM_PROTOTYPE(bpf_object__open_skeleton);
|
||||
DLSYM_PROTOTYPE(bpf_object__pin_maps);
|
||||
DLSYM_PROTOTYPE(bpf_program__attach);
|
||||
DLSYM_PROTOTYPE(bpf_program__attach_cgroup);
|
||||
DLSYM_PROTOTYPE(bpf_program__attach_lsm);
|
||||
DLSYM_PROTOTYPE(bpf_program__name);
|
||||
DLSYM_PROTOTYPE(libbpf_set_print);
|
||||
DLSYM_PROTOTYPE(libbpf_get_error);
|
||||
DLSYM_PROTOTYPE(libbpf_set_print);
|
||||
DLSYM_PROTOTYPE(ring_buffer__epoll_fd);
|
||||
DLSYM_PROTOTYPE(ring_buffer__free);
|
||||
DLSYM_PROTOTYPE(ring_buffer__new);
|
||||
DLSYM_PROTOTYPE(ring_buffer__poll);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user