Branch data Line data Source code
1 : : /* SPDX-License-Identifier: LGPL-2.1+ */ 2 : : #pragma once 3 : : 4 : : #include <linux/bpf.h> 5 : : #include <stdint.h> 6 : : #include <sys/syscall.h> 7 : : 8 : : #include "list.h" 9 : : #include "macro.h" 10 : : 11 : : typedef struct BPFProgram BPFProgram; 12 : : 13 : : struct BPFProgram { 14 : : unsigned n_ref; 15 : : 16 : : int kernel_fd; 17 : : uint32_t prog_type; 18 : : 19 : : size_t n_instructions; 20 : : size_t allocated; 21 : : struct bpf_insn *instructions; 22 : : 23 : : char *attached_path; 24 : : int attached_type; 25 : : uint32_t attached_flags; 26 : : }; 27 : : 28 : : int bpf_program_new(uint32_t prog_type, BPFProgram **ret); 29 : : BPFProgram *bpf_program_unref(BPFProgram *p); 30 : : BPFProgram *bpf_program_ref(BPFProgram *p); 31 : : 32 : : int bpf_program_add_instructions(BPFProgram *p, const struct bpf_insn *insn, size_t count); 33 : : int bpf_program_load_kernel(BPFProgram *p, char *log_buf, size_t log_size); 34 : : int bpf_program_load_from_bpf_fs(BPFProgram *p, const char *path); 35 : : 36 : : int bpf_program_cgroup_attach(BPFProgram *p, int type, const char *path, uint32_t flags); 37 : : int bpf_program_cgroup_detach(BPFProgram *p); 38 : : 39 : : int bpf_map_new(enum bpf_map_type type, size_t key_size, size_t value_size, size_t max_entries, uint32_t flags); 40 : : int bpf_map_update_element(int fd, const void *key, void *value); 41 : : int bpf_map_lookup_element(int fd, const void *key, void *value); 42 : : 43 [ + + ]: 112 : DEFINE_TRIVIAL_CLEANUP_FUNC(BPFProgram*, bpf_program_unref);