2 * Copyright (c) 2015-2018 Dmitry V. Levin <ldv@altlinux.org>
3 * Copyright (c) 2018-2019 The strace developers.
6 * SPDX-License-Identifier: LGPL-2.1-or-later
9 #ifndef STRACE_BPF_ATTR_H
10 # define STRACE_BPF_ATTR_H
13 * The policy is that all fields of type uint64_t in this header file
14 * must have ATTRIBUTE_ALIGNED(8).
16 * This should not cause any contradictions with <linux/bpf.h>
17 * unless the latter is buggy.
19 * By word "buggy" I mean containing such changes as Linux kernel commit
20 * v4.16-rc1~123^2~109^2~5^2~4.
23 # ifndef BPF_OBJ_NAME_LEN
24 # define BPF_OBJ_NAME_LEN 16U
26 # if BPF_OBJ_NAME_LEN != 16U
27 # error "Unexpected value of BPF_OBJ_NAME_LEN"
32 # define BPF_TAG_SIZE 8
34 # if BPF_TAG_SIZE != 8
35 # error "Unexpected value of BPF_TAG_SIZE"
39 struct BPF_MAP_CREATE_struct {
45 uint32_t inner_map_fd;
47 char map_name[BPF_OBJ_NAME_LEN];
50 uint32_t btf_key_type_id;
51 uint32_t btf_value_type_id;
54 # define BPF_MAP_CREATE_struct_size \
55 sizeof(struct BPF_MAP_CREATE_struct)
56 # define expected_BPF_MAP_CREATE_struct_size 60
58 struct BPF_MAP_LOOKUP_ELEM_struct {
60 uint64_t ATTRIBUTE_ALIGNED(8) key;
61 uint64_t ATTRIBUTE_ALIGNED(8) value;
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
68 struct BPF_MAP_UPDATE_ELEM_struct {
70 uint64_t ATTRIBUTE_ALIGNED(8) key;
71 uint64_t ATTRIBUTE_ALIGNED(8) value;
72 uint64_t ATTRIBUTE_ALIGNED(8) flags;
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
79 struct BPF_MAP_DELETE_ELEM_struct {
81 uint64_t ATTRIBUTE_ALIGNED(8) key;
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
88 struct BPF_MAP_GET_NEXT_KEY_struct {
90 uint64_t ATTRIBUTE_ALIGNED(8) key;
91 uint64_t ATTRIBUTE_ALIGNED(8) next_key;
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
98 struct BPF_MAP_FREEZE_struct {
102 # define BPF_MAP_FREEZE_struct_size \
103 sizeof(struct BPF_MAP_FREEZE_struct)
104 # define expected_BPF_MAP_FREEZE_struct_size 4
106 struct BPF_PROG_LOAD_struct {
109 uint64_t ATTRIBUTE_ALIGNED(8) insns;
110 uint64_t ATTRIBUTE_ALIGNED(8) license;
113 uint64_t ATTRIBUTE_ALIGNED(8) log_buf;
114 uint32_t kern_version;
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;
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
132 struct BPF_OBJ_PIN_struct {
133 uint64_t ATTRIBUTE_ALIGNED(8) pathname;
138 # define BPF_OBJ_PIN_struct_size \
139 sizeof(struct BPF_OBJ_PIN_struct)
140 # define expected_BPF_OBJ_PIN_struct_size 16
142 # define BPF_OBJ_GET_struct BPF_OBJ_PIN_struct
143 # define BPF_OBJ_GET_struct_size BPF_OBJ_PIN_struct_size
145 struct BPF_PROG_ATTACH_struct {
147 uint32_t attach_bpf_fd;
148 uint32_t attach_type;
149 uint32_t attach_flags;
152 # define BPF_PROG_ATTACH_struct_size \
153 sizeof(struct BPF_PROG_ATTACH_struct)
154 # define expected_BPF_PROG_ATTACH_struct_size 16
156 struct BPF_PROG_DETACH_struct {
159 uint32_t attach_type;
162 # define BPF_PROG_DETACH_struct_size \
163 sizeof(struct BPF_PROG_DETACH_struct)
164 # define expected_BPF_PROG_DETACH_struct_size 12
166 struct BPF_PROG_TEST_RUN_struct /* test */ {
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;
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;
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
185 struct BPF_PROG_GET_NEXT_ID_struct {
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
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
198 struct BPF_PROG_GET_FD_BY_ID_struct {
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
208 struct BPF_MAP_GET_FD_BY_ID_struct {
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
218 struct BPF_OBJ_GET_INFO_BY_FD_struct /* info */ {
221 uint64_t ATTRIBUTE_ALIGNED(8) info;
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
228 struct BPF_PROG_QUERY_struct /* query */ {
230 uint32_t attach_type;
231 uint32_t query_flags;
232 uint32_t attach_flags;
233 uint64_t ATTRIBUTE_ALIGNED(8) prog_ids;
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
241 struct BPF_RAW_TRACEPOINT_OPEN_struct /* raw_tracepoint */ {
242 uint64_t ATTRIBUTE_ALIGNED(8) name;
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
250 struct BPF_BTF_LOAD_struct {
251 uint64_t ATTRIBUTE_ALIGNED(8) btf;
252 uint64_t ATTRIBUTE_ALIGNED(8) btf_log_buf;
254 uint32_t btf_log_size;
255 uint32_t btf_log_level;
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
262 struct BPF_BTF_GET_FD_BY_ID_struct {
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
270 struct BPF_TASK_FD_QUERY_struct /* task_fd_query */ {
275 uint64_t ATTRIBUTE_ALIGNED(8) buf;
278 uint64_t ATTRIBUTE_ALIGNED(8) probe_offset;
279 uint64_t ATTRIBUTE_ALIGNED(8) probe_addr;
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
286 struct bpf_map_info_struct {
291 uint32_t max_entries;
293 char name[BPF_OBJ_NAME_LEN];
296 * The kernel UAPI is broken by Linux commit
297 * v4.16-rc1~123^2~109^2~5^2~4 .
299 uint64_t ATTRIBUTE_ALIGNED(8) netns_dev; /* skip check */
300 uint64_t ATTRIBUTE_ALIGNED(8) netns_ino; /* skip check */
302 uint32_t btf_key_type_id;
303 uint32_t btf_value_type_id;
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
310 struct bpf_prog_info_struct {
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;
321 uint64_t ATTRIBUTE_ALIGNED(8) map_ids;
322 char name[BPF_OBJ_NAME_LEN];
324 uint32_t gpl_compatible:1;
326 * The kernel UAPI is broken by Linux commit
327 * v4.16-rc1~123^2~227^2~5^2~2 .
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;
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;
351 # define bpf_prog_info_struct_size \
352 sizeof(struct bpf_prog_info_struct)
353 # define expected_bpf_prog_info_struct_size 208
355 #endif /* !STRACE_BPF_ATTR_H */