1 /* 2 * Common eBPF ELF object loading operations. 3 * 4 * Copyright (C) 2013-2015 Alexei Starovoitov <ast@kernel.org> 5 * Copyright (C) 2015 Wang Nan <wangnan0@huawei.com> 6 * Copyright (C) 2015 Huawei Inc. 7 */ 8 #ifndef __BPF_LIBBPF_H 9 #define __BPF_LIBBPF_H 10 11 #include <stdio.h> 12 #include <stdbool.h> 13 14 /* 15 * In include/linux/compiler-gcc.h, __printf is defined. However 16 * it should be better if libbpf.h doesn't depend on Linux header file. 17 * So instead of __printf, here we use gcc attribute directly. 18 */ 19 typedef int (*libbpf_print_fn_t)(const char *, ...) 20 __attribute__((format(printf, 1, 2))); 21 22 void libbpf_set_print(libbpf_print_fn_t warn, 23 libbpf_print_fn_t info, 24 libbpf_print_fn_t debug); 25 26 /* Hide internal to user */ 27 struct bpf_object; 28 29 struct bpf_object *bpf_object__open(const char *path); 30 struct bpf_object *bpf_object__open_buffer(void *obj_buf, 31 size_t obj_buf_sz, 32 const char *name); 33 void bpf_object__close(struct bpf_object *object); 34 35 /* Load/unload object into/from kernel */ 36 int bpf_object__load(struct bpf_object *obj); 37 int bpf_object__unload(struct bpf_object *obj); 38 const char *bpf_object__get_name(struct bpf_object *obj); 39 40 struct bpf_object *bpf_object__next(struct bpf_object *prev); 41 #define bpf_object__for_each_safe(pos, tmp) \ 42 for ((pos) = bpf_object__next(NULL), \ 43 (tmp) = bpf_object__next(pos); \ 44 (pos) != NULL; \ 45 (pos) = (tmp), (tmp) = bpf_object__next(tmp)) 46 47 /* Accessors of bpf_program. */ 48 struct bpf_program; 49 struct bpf_program *bpf_program__next(struct bpf_program *prog, 50 struct bpf_object *obj); 51 52 #define bpf_object__for_each_program(pos, obj) \ 53 for ((pos) = bpf_program__next(NULL, (obj)); \ 54 (pos) != NULL; \ 55 (pos) = bpf_program__next((pos), (obj))) 56 57 typedef void (*bpf_program_clear_priv_t)(struct bpf_program *, 58 void *); 59 60 int bpf_program__set_private(struct bpf_program *prog, void *priv, 61 bpf_program_clear_priv_t clear_priv); 62 63 int bpf_program__get_private(struct bpf_program *prog, 64 void **ppriv); 65 66 const char *bpf_program__title(struct bpf_program *prog, bool dup); 67 68 int bpf_program__fd(struct bpf_program *prog); 69 70 /* 71 * We don't need __attribute__((packed)) now since it is 72 * unnecessary for 'bpf_map_def' because they are all aligned. 73 * In addition, using it will trigger -Wpacked warning message, 74 * and will be treated as an error due to -Werror. 75 */ 76 struct bpf_map_def { 77 unsigned int type; 78 unsigned int key_size; 79 unsigned int value_size; 80 unsigned int max_entries; 81 }; 82 83 #endif 84