]> granicus.if.org Git - strace/blob - bpf_attr.h
Fix preprocessor indentation
[strace] / bpf_attr.h
1 /*
2  * Copyright (c) 2015-2018 Dmitry V. Levin <ldv@altlinux.org>
3  * Copyright (c) 2018-2019 The strace developers.
4  * All rights reserved.
5  *
6  * SPDX-License-Identifier: LGPL-2.1-or-later
7  */
8
9 #ifndef STRACE_BPF_ATTR_H
10 # define STRACE_BPF_ATTR_H
11
12 /*
13  * The policy is that all fields of type uint64_t in this header file
14  * must have ATTRIBUTE_ALIGNED(8).
15  *
16  * This should not cause any contradictions with <linux/bpf.h>
17  * unless the latter is buggy.
18  *
19  * By word "buggy" I mean containing such changes as Linux kernel commit
20  * v4.16-rc1~123^2~109^2~5^2~4.
21  */
22
23 # ifndef BPF_OBJ_NAME_LEN
24 #  define BPF_OBJ_NAME_LEN 16U
25 # else
26 #  if BPF_OBJ_NAME_LEN != 16U
27 #   error "Unexpected value of BPF_OBJ_NAME_LEN"
28 #  endif
29 # endif
30
31 # ifndef BPF_TAG_SIZE
32 #  define BPF_TAG_SIZE 8
33 # else
34 #  if BPF_TAG_SIZE != 8
35 #   error "Unexpected value of BPF_TAG_SIZE"
36 #  endif
37 # endif
38
39 struct BPF_MAP_CREATE_struct {
40         uint32_t map_type;
41         uint32_t key_size;
42         uint32_t value_size;
43         uint32_t max_entries;
44         uint32_t map_flags;
45         uint32_t inner_map_fd;
46         uint32_t numa_node;
47         char     map_name[BPF_OBJ_NAME_LEN];
48         uint32_t map_ifindex;
49         uint32_t btf_fd;
50         uint32_t btf_key_type_id;
51         uint32_t btf_value_type_id;
52 };
53
54 # define BPF_MAP_CREATE_struct_size \
55         sizeof(struct BPF_MAP_CREATE_struct)
56 # define expected_BPF_MAP_CREATE_struct_size 60
57
58 struct BPF_MAP_LOOKUP_ELEM_struct {
59         uint32_t map_fd;
60         uint64_t ATTRIBUTE_ALIGNED(8) key;
61         uint64_t ATTRIBUTE_ALIGNED(8) value;
62 };
63
64 # define BPF_MAP_LOOKUP_ELEM_struct_size \
65         sizeof(struct BPF_MAP_LOOKUP_ELEM_struct)
66 # define expected_BPF_MAP_LOOKUP_ELEM_struct_size 24
67
68 struct BPF_MAP_UPDATE_ELEM_struct {
69         uint32_t map_fd;
70         uint64_t ATTRIBUTE_ALIGNED(8) key;
71         uint64_t ATTRIBUTE_ALIGNED(8) value;
72         uint64_t ATTRIBUTE_ALIGNED(8) flags;
73 };
74
75 # define BPF_MAP_UPDATE_ELEM_struct_size \
76         sizeof(struct BPF_MAP_UPDATE_ELEM_struct)
77 # define expected_BPF_MAP_UPDATE_ELEM_struct_size 32
78
79 struct BPF_MAP_DELETE_ELEM_struct {
80         uint32_t map_fd;
81         uint64_t ATTRIBUTE_ALIGNED(8) key;
82 };
83
84 # define BPF_MAP_DELETE_ELEM_struct_size \
85         sizeof(struct BPF_MAP_DELETE_ELEM_struct)
86 # define expected_BPF_MAP_DELETE_ELEM_struct_size 16
87
88 struct BPF_MAP_GET_NEXT_KEY_struct {
89         uint32_t map_fd;
90         uint64_t ATTRIBUTE_ALIGNED(8) key;
91         uint64_t ATTRIBUTE_ALIGNED(8) next_key;
92 };
93
94 # define BPF_MAP_GET_NEXT_KEY_struct_size \
95         sizeof(struct BPF_MAP_GET_NEXT_KEY_struct)
96 # define expected_BPF_MAP_GET_NEXT_KEY_struct_size 24
97
98 struct BPF_MAP_FREEZE_struct {
99         uint32_t map_fd;
100 };
101
102 # define BPF_MAP_FREEZE_struct_size \
103         sizeof(struct BPF_MAP_FREEZE_struct)
104 # define expected_BPF_MAP_FREEZE_struct_size 4
105
106 struct BPF_PROG_LOAD_struct {
107         uint32_t prog_type;
108         uint32_t insn_cnt;
109         uint64_t ATTRIBUTE_ALIGNED(8) insns;
110         uint64_t ATTRIBUTE_ALIGNED(8) license;
111         uint32_t log_level;
112         uint32_t log_size;
113         uint64_t ATTRIBUTE_ALIGNED(8) log_buf;
114         uint32_t kern_version;
115         uint32_t prog_flags;
116         char     prog_name[BPF_OBJ_NAME_LEN];
117         uint32_t prog_ifindex;
118         uint32_t expected_attach_type;
119         uint32_t prog_btf_fd;
120         uint32_t func_info_rec_size;
121         uint64_t ATTRIBUTE_ALIGNED(8) func_info;
122         uint32_t func_info_cnt;
123         uint32_t line_info_rec_size;
124         uint64_t ATTRIBUTE_ALIGNED(8) line_info;
125         uint32_t line_info_cnt;
126 };
127
128 # define BPF_PROG_LOAD_struct_size \
129         offsetofend(struct BPF_PROG_LOAD_struct, line_info_cnt)
130 # define expected_BPF_PROG_LOAD_struct_size 108
131
132 struct BPF_OBJ_PIN_struct {
133         uint64_t ATTRIBUTE_ALIGNED(8) pathname;
134         uint32_t bpf_fd;
135         uint32_t file_flags;
136 };
137
138 # define BPF_OBJ_PIN_struct_size \
139         sizeof(struct BPF_OBJ_PIN_struct)
140 # define expected_BPF_OBJ_PIN_struct_size 16
141
142 # define BPF_OBJ_GET_struct BPF_OBJ_PIN_struct
143 # define BPF_OBJ_GET_struct_size BPF_OBJ_PIN_struct_size
144
145 struct BPF_PROG_ATTACH_struct {
146         uint32_t target_fd;
147         uint32_t attach_bpf_fd;
148         uint32_t attach_type;
149         uint32_t attach_flags;
150 };
151
152 # define BPF_PROG_ATTACH_struct_size \
153         sizeof(struct BPF_PROG_ATTACH_struct)
154 # define expected_BPF_PROG_ATTACH_struct_size 16
155
156 struct BPF_PROG_DETACH_struct {
157         uint32_t target_fd;
158         uint32_t dummy;
159         uint32_t attach_type;
160 };
161
162 # define BPF_PROG_DETACH_struct_size \
163         sizeof(struct BPF_PROG_DETACH_struct)
164 # define expected_BPF_PROG_DETACH_struct_size 12
165
166 struct BPF_PROG_TEST_RUN_struct /* test */ {
167         uint32_t prog_fd;
168         uint32_t retval;
169         uint32_t data_size_in;
170         uint32_t data_size_out;
171         uint64_t ATTRIBUTE_ALIGNED(8) data_in;
172         uint64_t ATTRIBUTE_ALIGNED(8) data_out;
173         uint32_t repeat;
174         uint32_t duration;
175         uint32_t ctx_size_in;
176         uint32_t ctx_size_out;
177         uint64_t ATTRIBUTE_ALIGNED(8) ctx_in;
178         uint64_t ATTRIBUTE_ALIGNED(8) ctx_out;
179 };
180
181 # define BPF_PROG_TEST_RUN_struct_size \
182         sizeof(struct BPF_PROG_TEST_RUN_struct)
183 # define expected_BPF_PROG_TEST_RUN_struct_size 64
184
185 struct BPF_PROG_GET_NEXT_ID_struct {
186         uint32_t start_id;
187         uint32_t next_id;
188         uint32_t open_flags;
189 };
190
191 # define BPF_PROG_GET_NEXT_ID_struct_size \
192         sizeof(struct BPF_PROG_GET_NEXT_ID_struct)
193 # define expected_BPF_PROG_GET_NEXT_ID_struct_size 12
194
195 # define BPF_MAP_GET_NEXT_ID_struct BPF_PROG_GET_NEXT_ID_struct
196 # define BPF_MAP_GET_NEXT_ID_struct_size BPF_PROG_GET_NEXT_ID_struct_size
197
198 struct BPF_PROG_GET_FD_BY_ID_struct {
199         uint32_t prog_id;
200         uint32_t next_id;
201         uint32_t open_flags;
202 };
203
204 # define BPF_PROG_GET_FD_BY_ID_struct_size \
205         sizeof(struct BPF_PROG_GET_FD_BY_ID_struct)
206 # define expected_BPF_PROG_GET_FD_BY_ID_struct_size 12
207
208 struct BPF_MAP_GET_FD_BY_ID_struct {
209         uint32_t map_id;
210         uint32_t next_id;
211         uint32_t open_flags;
212 };
213
214 # define BPF_MAP_GET_FD_BY_ID_struct_size \
215         sizeof(struct BPF_MAP_GET_FD_BY_ID_struct)
216 # define expected_BPF_MAP_GET_FD_BY_ID_struct_size 12
217
218 struct BPF_OBJ_GET_INFO_BY_FD_struct /* info */ {
219         uint32_t bpf_fd;
220         uint32_t info_len;
221         uint64_t ATTRIBUTE_ALIGNED(8) info;
222 };
223
224 # define BPF_OBJ_GET_INFO_BY_FD_struct_size \
225         sizeof(struct BPF_OBJ_GET_INFO_BY_FD_struct)
226 # define expected_BPF_OBJ_GET_INFO_BY_FD_struct_size 16
227
228 struct BPF_PROG_QUERY_struct /* query */ {
229         uint32_t target_fd;
230         uint32_t attach_type;
231         uint32_t query_flags;
232         uint32_t attach_flags;
233         uint64_t ATTRIBUTE_ALIGNED(8) prog_ids;
234         uint32_t prog_cnt;
235 };
236
237 # define BPF_PROG_QUERY_struct_size \
238         offsetofend(struct BPF_PROG_QUERY_struct, prog_cnt)
239 # define expected_BPF_PROG_QUERY_struct_size 28
240
241 struct BPF_RAW_TRACEPOINT_OPEN_struct /* raw_tracepoint */ {
242         uint64_t ATTRIBUTE_ALIGNED(8) name;
243         uint32_t prog_fd;
244 };
245
246 # define BPF_RAW_TRACEPOINT_OPEN_struct_size \
247         offsetofend(struct BPF_RAW_TRACEPOINT_OPEN_struct, prog_fd)
248 # define expected_BPF_RAW_TRACEPOINT_OPEN_struct_size 12
249
250 struct BPF_BTF_LOAD_struct {
251         uint64_t ATTRIBUTE_ALIGNED(8) btf;
252         uint64_t ATTRIBUTE_ALIGNED(8) btf_log_buf;
253         uint32_t btf_size;
254         uint32_t btf_log_size;
255         uint32_t btf_log_level;
256 };
257
258 # define BPF_BTF_LOAD_struct_size \
259         offsetofend(struct BPF_BTF_LOAD_struct, btf_log_level)
260 # define expected_BPF_BTF_LOAD_struct_size 28
261
262 struct BPF_BTF_GET_FD_BY_ID_struct {
263         uint32_t btf_id;
264 };
265
266 # define BPF_BTF_GET_FD_BY_ID_struct_size \
267         sizeof(struct BPF_BTF_GET_FD_BY_ID_struct)
268 # define expected_BPF_BTF_GET_FD_BY_ID_struct_size 4
269
270 struct BPF_TASK_FD_QUERY_struct /* task_fd_query */ {
271         uint32_t pid;
272         uint32_t fd;
273         uint32_t flags;
274         uint32_t buf_len;
275         uint64_t ATTRIBUTE_ALIGNED(8) buf;
276         uint32_t prog_id;
277         uint32_t fd_type;
278         uint64_t ATTRIBUTE_ALIGNED(8) probe_offset;
279         uint64_t ATTRIBUTE_ALIGNED(8) probe_addr;
280 };
281
282 # define BPF_TASK_FD_QUERY_struct_size \
283         sizeof(struct BPF_TASK_FD_QUERY_struct)
284 # define expected_BPF_TASK_FD_QUERY_struct_size 48
285
286 struct bpf_map_info_struct {
287         uint32_t type;
288         uint32_t id;
289         uint32_t key_size;
290         uint32_t value_size;
291         uint32_t max_entries;
292         uint32_t map_flags;
293         char     name[BPF_OBJ_NAME_LEN];
294         uint32_t ifindex;
295         /*
296          * The kernel UAPI is broken by Linux commit
297          * v4.16-rc1~123^2~109^2~5^2~4 .
298          */
299         uint64_t ATTRIBUTE_ALIGNED(8) netns_dev; /* skip check */
300         uint64_t ATTRIBUTE_ALIGNED(8) netns_ino; /* skip check */
301         uint32_t btf_id;
302         uint32_t btf_key_type_id;
303         uint32_t btf_value_type_id;
304 };
305
306 # define bpf_map_info_struct_size \
307         offsetofend(struct bpf_map_info_struct, btf_value_type_id)
308 # define expected_bpf_map_info_struct_size 76
309
310 struct bpf_prog_info_struct {
311         uint32_t type;
312         uint32_t id;
313         uint8_t  tag[BPF_TAG_SIZE];
314         uint32_t jited_prog_len;
315         uint32_t xlated_prog_len;
316         uint64_t ATTRIBUTE_ALIGNED(8) jited_prog_insns;
317         uint64_t ATTRIBUTE_ALIGNED(8) xlated_prog_insns;
318         uint64_t ATTRIBUTE_ALIGNED(8) load_time;
319         uint32_t created_by_uid;
320         uint32_t nr_map_ids;
321         uint64_t ATTRIBUTE_ALIGNED(8) map_ids;
322         char     name[BPF_OBJ_NAME_LEN];
323         uint32_t ifindex;
324         uint32_t gpl_compatible:1;
325         /*
326          * The kernel UAPI is broken by Linux commit
327          * v4.16-rc1~123^2~227^2~5^2~2 .
328          */
329         uint64_t ATTRIBUTE_ALIGNED(8) netns_dev; /* skip check */
330         uint64_t ATTRIBUTE_ALIGNED(8) netns_ino; /* skip check */
331         uint32_t nr_jited_ksyms;
332         uint32_t nr_jited_func_lens;
333         uint64_t ATTRIBUTE_ALIGNED(8) jited_ksyms;
334         uint64_t ATTRIBUTE_ALIGNED(8) jited_func_lens;
335         uint32_t btf_id;
336         uint32_t func_info_rec_size;
337         uint64_t ATTRIBUTE_ALIGNED(8) func_info;
338         uint32_t nr_func_info;
339         uint32_t nr_line_info;
340         uint64_t ATTRIBUTE_ALIGNED(8) line_info;
341         uint64_t ATTRIBUTE_ALIGNED(8) jited_line_info;
342         uint32_t nr_jited_line_info;
343         uint32_t line_info_rec_size;
344         uint32_t jited_line_info_rec_size;
345         uint32_t nr_prog_tags;
346         uint64_t ATTRIBUTE_ALIGNED(8) prog_tags;
347         uint64_t ATTRIBUTE_ALIGNED(8) run_time_ns;
348         uint64_t ATTRIBUTE_ALIGNED(8) run_cnt;
349 };
350
351 # define bpf_prog_info_struct_size \
352         sizeof(struct bpf_prog_info_struct)
353 # define expected_bpf_prog_info_struct_size 208
354
355 #endif /* !STRACE_BPF_ATTR_H */