From 7a7cf83dc3378d4063c728ff6a486c5edfe2f86c Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 8 Jun 2021 18:19:38 +0200 Subject: [PATCH] bpf-program: export hash_ops for BPFProgam objects --- src/core/bpf-firewall.c | 6 ++---- src/shared/bpf-program.c | 2 ++ src/shared/bpf-program.h | 2 ++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/core/bpf-firewall.c b/src/core/bpf-firewall.c index eda4d3bbdf4..c216d514603 100644 --- a/src/core/bpf-firewall.c +++ b/src/core/bpf-firewall.c @@ -587,8 +587,6 @@ int bpf_firewall_compile(Unit *u) { return 0; } -DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(filter_prog_hash_ops, void, trivial_hash_func, trivial_compare_func, BPFProgram, bpf_program_unref); - static int load_bpf_progs_from_fs_to_set(Unit *u, char **filter_paths, Set **set) { char **bpf_fs_path; @@ -606,7 +604,7 @@ static int load_bpf_progs_from_fs_to_set(Unit *u, char **filter_paths, Set **set if (r < 0) return log_unit_error_errno(u, r, "Loading of ingress BPF program %s failed: %m", *bpf_fs_path); - r = set_ensure_consume(set, &filter_prog_hash_ops, TAKE_PTR(prog)); + r = set_ensure_consume(set, &bpf_program_hash_ops, TAKE_PTR(prog)); if (r < 0) return log_unit_error_errno(u, r, "Can't add program to BPF program set: %m"); } @@ -658,7 +656,7 @@ static int attach_custom_bpf_progs(Unit *u, const char *path, int attach_type, S return log_unit_error_errno(u, r, "Attaching custom egress BPF program to cgroup %s failed: %m", path); /* Remember that these BPF programs are installed now. */ - r = set_ensure_put(set_installed, &filter_prog_hash_ops, prog); + r = set_ensure_put(set_installed, &bpf_program_hash_ops, prog); if (r < 0) return log_unit_error_errno(u, r, "Can't add program to BPF program set: %m"); diff --git a/src/shared/bpf-program.c b/src/shared/bpf-program.c index 8bcdf6a9b43..647dd6e2ba6 100644 --- a/src/shared/bpf-program.c +++ b/src/shared/bpf-program.c @@ -36,6 +36,8 @@ static const char *const bpf_cgroup_attach_type_table[__MAX_BPF_ATTACH_TYPE] = { DEFINE_STRING_TABLE_LOOKUP(bpf_cgroup_attach_type, int); +DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(bpf_program_hash_ops, void, trivial_hash_func, trivial_compare_func, bpf_program_unref); + /* struct bpf_prog_info info must be initialized since its value is both input and output * for BPF_OBJ_GET_INFO_BY_FD syscall. */ static int bpf_program_get_info_by_fd(int prog_fd, struct bpf_prog_info *info, uint32_t info_len) { diff --git a/src/shared/bpf-program.h b/src/shared/bpf-program.h index edde86c1195..b8b9f792610 100644 --- a/src/shared/bpf-program.h +++ b/src/shared/bpf-program.h @@ -38,6 +38,8 @@ int bpf_program_cgroup_detach(BPFProgram *p); int bpf_program_pin(int prog_fd, const char *bpffs_path); int bpf_program_get_id_by_fd(int prog_fd, uint32_t *ret_id); +extern const struct hash_ops bpf_program_hash_ops; + int bpf_map_new(enum bpf_map_type type, size_t key_size, size_t value_size, size_t max_entries, uint32_t flags); int bpf_map_update_element(int fd, const void *key, void *value); int bpf_map_lookup_element(int fd, const void *key, void *value); -- 2.47.3