1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#ifndef __BPF_LIBBPF_H
22#define __BPF_LIBBPF_H
23
24#include <stdio.h>
25#include <stdbool.h>
26#include <linux/err.h>
27#include <sys/types.h>
28
29enum libbpf_errno {
30 __LIBBPF_ERRNO__START = 4000,
31
32
33 LIBBPF_ERRNO__LIBELF = __LIBBPF_ERRNO__START,
34 LIBBPF_ERRNO__FORMAT,
35 LIBBPF_ERRNO__KVERSION,
36 LIBBPF_ERRNO__ENDIAN,
37 LIBBPF_ERRNO__INTERNAL,
38 LIBBPF_ERRNO__RELOC,
39 LIBBPF_ERRNO__LOAD,
40 LIBBPF_ERRNO__VERIFY,
41 LIBBPF_ERRNO__PROG2BIG,
42 LIBBPF_ERRNO__KVER,
43 LIBBPF_ERRNO__PROGTYPE,
44 __LIBBPF_ERRNO__END,
45};
46
47int libbpf_strerror(int err, char *buf, size_t size);
48
49
50
51
52
53
54typedef int (*libbpf_print_fn_t)(const char *, ...)
55 __attribute__((format(printf, 1, 2)));
56
57void libbpf_set_print(libbpf_print_fn_t warn,
58 libbpf_print_fn_t info,
59 libbpf_print_fn_t debug);
60
61
62struct bpf_object;
63
64struct bpf_object *bpf_object__open(const char *path);
65struct bpf_object *bpf_object__open_buffer(void *obj_buf,
66 size_t obj_buf_sz,
67 const char *name);
68void bpf_object__close(struct bpf_object *object);
69
70
71int bpf_object__load(struct bpf_object *obj);
72int bpf_object__unload(struct bpf_object *obj);
73const char *bpf_object__name(struct bpf_object *obj);
74unsigned int bpf_object__kversion(struct bpf_object *obj);
75
76struct bpf_object *bpf_object__next(struct bpf_object *prev);
77#define bpf_object__for_each_safe(pos, tmp) \
78 for ((pos) = bpf_object__next(NULL), \
79 (tmp) = bpf_object__next(pos); \
80 (pos) != NULL; \
81 (pos) = (tmp), (tmp) = bpf_object__next(tmp))
82
83typedef void (*bpf_object_clear_priv_t)(struct bpf_object *, void *);
84int bpf_object__set_priv(struct bpf_object *obj, void *priv,
85 bpf_object_clear_priv_t clear_priv);
86void *bpf_object__priv(struct bpf_object *prog);
87
88
89struct bpf_program;
90struct bpf_program *bpf_program__next(struct bpf_program *prog,
91 struct bpf_object *obj);
92
93#define bpf_object__for_each_program(pos, obj) \
94 for ((pos) = bpf_program__next(NULL, (obj)); \
95 (pos) != NULL; \
96 (pos) = bpf_program__next((pos), (obj)))
97
98typedef void (*bpf_program_clear_priv_t)(struct bpf_program *,
99 void *);
100
101int bpf_program__set_priv(struct bpf_program *prog, void *priv,
102 bpf_program_clear_priv_t clear_priv);
103
104void *bpf_program__priv(struct bpf_program *prog);
105
106const char *bpf_program__title(struct bpf_program *prog, bool needs_copy);
107
108int bpf_program__fd(struct bpf_program *prog);
109
110struct bpf_insn;
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141struct bpf_prog_prep_result {
142
143
144
145
146 struct bpf_insn *new_insn_ptr;
147 int new_insn_cnt;
148
149
150 int *pfd;
151};
152
153
154
155
156
157
158
159
160
161
162
163
164
165typedef int (*bpf_program_prep_t)(struct bpf_program *prog, int n,
166 struct bpf_insn *insns, int insns_cnt,
167 struct bpf_prog_prep_result *res);
168
169int bpf_program__set_prep(struct bpf_program *prog, int nr_instance,
170 bpf_program_prep_t prep);
171
172int bpf_program__nth_fd(struct bpf_program *prog, int n);
173
174
175
176
177int bpf_program__set_tracepoint(struct bpf_program *prog);
178int bpf_program__set_kprobe(struct bpf_program *prog);
179
180bool bpf_program__is_tracepoint(struct bpf_program *prog);
181bool bpf_program__is_kprobe(struct bpf_program *prog);
182
183
184
185
186
187
188
189struct bpf_map_def {
190 unsigned int type;
191 unsigned int key_size;
192 unsigned int value_size;
193 unsigned int max_entries;
194};
195
196
197
198
199
200struct bpf_map;
201struct bpf_map *
202bpf_object__find_map_by_name(struct bpf_object *obj, const char *name);
203
204
205
206
207
208struct bpf_map *
209bpf_object__find_map_by_offset(struct bpf_object *obj, size_t offset);
210
211struct bpf_map *
212bpf_map__next(struct bpf_map *map, struct bpf_object *obj);
213#define bpf_map__for_each(pos, obj) \
214 for ((pos) = bpf_map__next(NULL, (obj)); \
215 (pos) != NULL; \
216 (pos) = bpf_map__next((pos), (obj)))
217
218int bpf_map__fd(struct bpf_map *map);
219const struct bpf_map_def *bpf_map__def(struct bpf_map *map);
220const char *bpf_map__name(struct bpf_map *map);
221
222typedef void (*bpf_map_clear_priv_t)(struct bpf_map *, void *);
223int bpf_map__set_priv(struct bpf_map *map, void *priv,
224 bpf_map_clear_priv_t clear_priv);
225void *bpf_map__priv(struct bpf_map *map);
226
227#endif
228