github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/sys/linux/bpf.txt (about) 1 # Copyright 2015 syzkaller project authors. All rights reserved. 2 # Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. 3 4 # Note these sysctls have radical effect on code paths inside of kernel: 5 # net.core.bpf_jit_enable = { 0, 1, 2 } 6 # net.core.bpf_jit_harden = { 0, 1, 2 } 7 8 include <uapi/linux/bpf.h> 9 include <uapi/linux/btf.h> 10 include <uapi/linux/if_link.h> 11 include <uapi/linux/netfilter.h> 12 13 resource fd_bpf_map[fd]: BPF_PSEUDO_MAP_FD 14 resource fd_bpf_prog[fd] 15 resource fd_btf[fd] 16 resource fd_bpf_token[fd] 17 resource bpf_prog_id[int32]: 0, -1 18 resource bpf_map_id[int32]: 0, -1 19 resource bpf_btf_id[int32]: 0, -1 20 resource bpf_link_id[int32]: 0, -1 21 resource fd_bpf_link[fd] 22 resource bpf_revision[int64] 23 resource fd_bpf_const_str_map[fd_bpf_map] 24 resource fd_bpf_const_str[fd_bpf_const_str_map] 25 resource bpf_frozen_const_str[fd_bpf_const_str] 26 resource tail_call_map_fd[fd_bpf_map] 27 resource tail_call_map[tail_call_map_fd] 28 resource ringbuf_map_fd[fd_bpf_map] 29 30 # NEED: this is a random index in btf_header:types. We can't express this, so we just use a small index. 31 type btf_type_id int32[1:5] 32 # NEED: opt modified on typedefs, this could be btf_type_id[opt] 33 type btf_opt_type_id int32[0:5] 34 35 # NEED: offset in bpf_btf_program:strings. We can't express this, so we just use a small index. 36 type btf_name_off int32[1:16] 37 type btf_opt_name_off int32[0:16] 38 39 # NEED: offset in bpf_prog_t:fd_array. We can't express this, so we just use a small index. 40 type map_fd_id int32[0:16] 41 42 bpf$MAP_CREATE(cmd const[BPF_MAP_CREATE], arg ptr[in, bpf_map_create_arg], size len[arg]) fd_bpf_map 43 bpf$MAP_CREATE_RINGBUF(cmd const[BPF_MAP_CREATE], arg ptr[in, bpf_map_create_arg_ringbuf], size len[arg]) ringbuf_map_fd 44 bpf$MAP_CREATE_CONST_STR(cmd const[BPF_MAP_CREATE], arg ptr[in, bpf_map_create_arg_const_str], size len[arg]) fd_bpf_const_str_map 45 bpf$MAP_CREATE_TAIL_CALL(cmd const[BPF_MAP_CREATE], arg ptr[in, bpf_map_create_arg_tail_call], size len[arg]) tail_call_map_fd 46 bpf$MAP_LOOKUP_ELEM(cmd const[BPF_MAP_LOOKUP_ELEM], arg ptr[in, bpf_map_lookup_arg], size len[arg]) 47 bpf$MAP_UPDATE_ELEM(cmd const[BPF_MAP_UPDATE_ELEM], arg ptr[in, bpf_map_update_arg], size len[arg]) 48 bpf$MAP_UPDATE_CONST_STR(cmd const[BPF_MAP_UPDATE_ELEM], arg ptr[inout, bpf_map_update_const_str_arg], size len[arg]) 49 bpf$MAP_UPDATE_ELEM_TAIL_CALL(cmd const[BPF_MAP_UPDATE_ELEM], arg ptr[inout, bpf_map_update_tail_call_arg], size len[arg]) 50 bpf$MAP_DELETE_ELEM(cmd const[BPF_MAP_DELETE_ELEM], arg ptr[in, bpf_map_delete_arg], size len[arg]) 51 bpf$MAP_GET_NEXT_KEY(cmd const[BPF_MAP_GET_NEXT_KEY], arg ptr[in, bpf_map_get_next_arg], size len[arg]) 52 bpf$PROG_LOAD(cmd const[BPF_PROG_LOAD], arg ptr[in, bpf_prog], size len[arg]) fd_bpf_prog 53 bpf$OBJ_PIN_MAP(cmd const[BPF_OBJ_PIN], arg ptr[in, bpf_obj_pin_map], size len[arg]) 54 bpf$OBJ_PIN_PROG(cmd const[BPF_OBJ_PIN], arg ptr[in, bpf_obj_pin_prog], size len[arg]) 55 bpf$OBJ_GET_MAP(cmd const[BPF_OBJ_GET], arg ptr[in, bpf_obj_get], size len[arg]) fd_bpf_map 56 bpf$OBJ_GET_PROG(cmd const[BPF_OBJ_GET], arg ptr[in, bpf_obj_get], size len[arg]) fd_bpf_prog 57 bpf$BPF_PROG_ATTACH(cmd const[BPF_PROG_ATTACH], arg ptr[in, bpf_attach_arg], size len[arg]) 58 bpf$BPF_PROG_DETACH(cmd const[BPF_PROG_DETACH], arg ptr[in, bpf_detach_arg], size len[arg]) 59 bpf$BPF_PROG_TEST_RUN(cmd const[BPF_PROG_TEST_RUN], arg ptr[in, bpf_test_prog_arg], size len[arg]) 60 bpf$BPF_PROG_GET_NEXT_ID(cmd const[BPF_PROG_GET_NEXT_ID], arg ptr[inout, bpf_prog_get_next_id_arg], size len[arg]) 61 bpf$BPF_MAP_GET_NEXT_ID(cmd const[BPF_MAP_GET_NEXT_ID], arg ptr[inout, bpf_map_get_next_id_arg], size len[arg]) 62 bpf$BPF_BTF_GET_NEXT_ID(cmd const[BPF_BTF_GET_NEXT_ID], arg ptr[inout, bpf_btf_get_next_id_arg], size len[arg]) 63 bpf$BPF_PROG_GET_FD_BY_ID(cmd const[BPF_PROG_GET_FD_BY_ID], arg ptr[in, bpf_prog_get_fd_by_id_arg], size len[arg]) fd_bpf_prog 64 bpf$BPF_MAP_GET_FD_BY_ID(cmd const[BPF_MAP_GET_FD_BY_ID], arg ptr[in, bpf_map_get_fd_by_id_arg], size len[arg]) fd_bpf_map 65 bpf$BPF_GET_PROG_INFO(cmd const[BPF_OBJ_GET_INFO_BY_FD], arg ptr[in, bpf_get_prog_info_arg], size len[arg]) 66 bpf$BPF_GET_MAP_INFO(cmd const[BPF_OBJ_GET_INFO_BY_FD], arg ptr[in, bpf_get_map_info_arg], size len[arg]) 67 bpf$BPF_GET_BTF_INFO(cmd const[BPF_OBJ_GET_INFO_BY_FD], arg ptr[in, bpf_get_btf_info_arg], size len[arg]) 68 bpf$BPF_PROG_QUERY(cmd const[BPF_PROG_QUERY], arg ptr[inout, bpf_prog_query], size len[arg]) 69 bpf$BPF_BTF_LOAD(cmd const[BPF_BTF_LOAD], arg ptr[in, bpf_btf_load], size len[arg]) fd_btf 70 bpf$BPF_BTF_GET_FD_BY_ID(cmd const[BPF_BTF_GET_FD_BY_ID], arg ptr[in, bpf_btf_id], size len[arg]) fd_btf 71 bpf$BPF_TASK_FD_QUERY(cmd const[BPF_TASK_FD_QUERY], arg ptr[inout, bpf_task_fd_query], size len[arg]) 72 bpf$BPF_MAP_LOOKUP_AND_DELETE_ELEM(cmd const[BPF_MAP_LOOKUP_AND_DELETE_ELEM], arg ptr[in, bpf_map_lookup_arg], size len[arg]) 73 bpf$BPF_MAP_FREEZE(cmd const[BPF_MAP_FREEZE], arg ptr[in, fd_bpf_map], size len[arg]) 74 bpf$BPF_MAP_CONST_STR_FREEZE(cmd const[BPF_MAP_FREEZE], arg ptr[inout, bpf_map_const_str_freeze], size len[arg]) 75 bpf$MAP_LOOKUP_BATCH(cmd const[BPF_MAP_LOOKUP_BATCH], arg ptr[in, bpf_map_batch_arg], size len[arg]) 76 bpf$MAP_UPDATE_BATCH(cmd const[BPF_MAP_UPDATE_BATCH], arg ptr[in, bpf_map_batch_arg], size len[arg]) 77 bpf$MAP_DELETE_BATCH(cmd const[BPF_MAP_DELETE_BATCH], arg ptr[in, bpf_map_batch_arg], size len[arg]) 78 bpf$BPF_MAP_LOOKUP_AND_DELETE_BATCH(cmd const[BPF_MAP_LOOKUP_AND_DELETE_BATCH], arg ptr[in, bpf_map_batch_arg], size len[arg]) 79 bpf$BPF_LINK_CREATE(cmd const[BPF_LINK_CREATE], arg ptr[in, bpf_link_create_arg], size len[arg]) fd_bpf_link 80 bpf$BPF_LINK_UPDATE(cmd const[BPF_LINK_UPDATE], arg ptr[in, bpf_link_update_arg], size len[arg]) 81 bpf$ENABLE_STATS(cmd const[BPF_ENABLE_STATS], arg ptr[in, bpf_enable_stats_arg], size len[arg]) 82 bpf$ITER_CREATE(cmd const[BPF_ITER_CREATE], arg ptr[in, bpf_iter_create_arg], size len[arg]) fd 83 bpf$LINK_GET_FD_BY_ID(cmd const[BPF_LINK_GET_FD_BY_ID], arg ptr[in, bpf_link_id], size len[arg]) fd_bpf_link 84 bpf$LINK_GET_NEXT_ID(cmd const[BPF_LINK_GET_NEXT_ID], arg ptr[inout, bpf_link_get_next_id_arg], size len[arg]) 85 bpf$LINK_DETACH(cmd const[BPF_LINK_DETACH], arg ptr[in, fd_bpf_link], size len[arg]) 86 bpf$PROG_BIND_MAP(cmd const[BPF_PROG_BIND_MAP], arg ptr[in, bpf_prog_bind_map_arg], size len[arg]) 87 bpf$TOKEN_CREATE(cmd const[BPF_TOKEN_CREATE], arg ptr[in, bpf_token_create_arg], size len[arg]) fd_bpf_token 88 89 resource fd_bpf_prog_xdp[fd_bpf_prog] 90 bpf$PROG_LOAD_XDP(cmd const[BPF_PROG_LOAD], arg ptr[in, bpf_prog_xdp], size len[arg]) fd_bpf_prog_xdp 91 bpf$BPF_LINK_CREATE_XDP(cmd const[BPF_LINK_CREATE], arg ptr[in, bpf_link_create_xdp], size len[arg]) fd_bpf_link 92 bpf$BPF_PROG_TEST_RUN_LIVE(cmd const[BPF_PROG_TEST_RUN], arg ptr[in, bpf_test_prog_live_arg], size len[arg]) 93 type bpf_prog_xdp bpf_prog_t[const[BPF_PROG_TYPE_XDP, int32], const[BPF_XDP, int32], const[0, int32], const[0, int32]] 94 type bpf_link_create_xdp bpf_link_create_arg_t[fd_bpf_prog_xdp, ifindex, const[BPF_XDP, int32], flags[xdp_flags, int32]] 95 xdp_flags = XDP_FLAGS_UPDATE_IF_NOEXIST, XDP_FLAGS_SKB_MODE, XDP_FLAGS_DRV_MODE, XDP_FLAGS_HW_MODE, XDP_FLAGS_REPLACE 96 97 bpf_map_const_str_freeze { 98 in fd_bpf_const_str 99 out bpf_frozen_const_str (out_overlay) 100 } 101 102 bpf_map_create_arg [ 103 base bpf_map_create_arg_base 104 bloom_filter bpf_map_create_arg_bf 105 ] [varlen] 106 107 type bpf_map_create_arg_t[TYPE, KSIZE, VSIZE, MAX, FLAGS, MAP_EXTRA] { 108 type TYPE 109 ksize KSIZE 110 vsize VSIZE 111 max MAX 112 flags FLAGS 113 inner fd_bpf_map[opt] 114 node int32 115 map_name array[const[0, int8], BPF_OBJ_NAME_LEN] 116 map_ifindex ifindex[opt] 117 btf_fd fd_btf[opt] 118 btf_key_type_id btf_opt_type_id 119 btf_value_type_id btf_opt_type_id 120 btf_vmlinux_type_id btf_opt_type_id 121 map_extra MAP_EXTRA 122 # NEED: value_type_btf_obj_fd should also depend on the map type but AND operators are not yet supported in conditional fields. 123 value_type_btf_obj_fd fd_btf (if[value[flags] & BPF_F_VTYPE_BTF_OBJ_FD != 0]) 124 pad1 const[0, int32] (if[value[flags] & BPF_F_VTYPE_BTF_OBJ_FD == 0]) 125 map_token_fd fd_bpf_token (if[value[flags] & BPF_F_TOKEN_FD != 0]) 126 pad2 const[0, int32] (if[value[flags] & BPF_F_TOKEN_FD == 0]) 127 } [packed] 128 129 type bpf_map_create_arg_base bpf_map_create_arg_t[flags[bpf_map_type, int32], int32, int32, int32, flags[map_flags, int32], const[0, int64]] 130 type bpf_map_create_arg_bf bpf_map_create_arg_t[const[BPF_MAP_TYPE_BLOOM_FILTER, int32], int32, int32, int32, flags[map_flags, int32], int64[0:15]] 131 type bpf_map_create_arg_ringbuf bpf_map_create_arg_t[const[BPF_MAP_TYPE_RINGBUF, int32], const[0, int32], const[0, int32], int32, const[0, int32], const[0, int64]] 132 type bpf_map_create_arg_const_str bpf_map_create_arg_t[const[BPF_MAP_TYPE_ARRAY, int32], const[4, int32], const[8, int32], const[1, int32], const[BPF_F_RDONLY_PROG, int32], const[0, int64]] 133 type bpf_map_create_arg_tail_call bpf_map_create_arg_t[const[BPF_MAP_TYPE_PROG_ARRAY, int32], const[4, int32], const[4, int32], const[10, int32], const[0, int32], const[0, int64]] 134 135 bpf_map_get_fd_by_id_arg { 136 map_id bpf_map_id 137 next_id int32 138 open_flags flags[bpf_open_flags, int32] 139 } 140 141 bpf_map_lookup_arg { 142 map fd_bpf_map 143 key ptr64[in, array[int8]] 144 val ptr64[out, array[int8]] 145 flags flags[bpf_lookup_flags, int64] 146 } 147 148 bpf_map_update_val [ 149 buf array[int8] 150 udp sock_udp 151 udp6 sock_udp6 152 tcp sock_tcp 153 tcp6 sock_tcp6 154 ] [varlen] 155 156 bpf_map_update_arg { 157 map fd_bpf_map 158 key ptr64[in, array[int8]] 159 val ptr64[in, bpf_map_update_val] 160 flags flags[bpf_map_flags, int64] 161 } 162 163 map_bpf_const_str { 164 in fd_bpf_const_str_map 165 out fd_bpf_const_str (out_overlay) 166 } 167 168 bpf_printf_str = "%-010d ", "%pK ", "%+9llu ", "%pS ", "%ps ", "%pB ", "%pI4 ", "%pi6 ", "%-5lx " 169 170 bpf_map_update_const_str_arg { 171 map map_bpf_const_str 172 key ptr64[in, const[0, int32]] 173 val ptr64[in, string[bpf_printf_str]] 174 flags const[0, int64] 175 } 176 177 tail_call_map_update { 178 in tail_call_map_fd 179 out tail_call_map (out_overlay) 180 } 181 182 bpf_map_update_tail_call_arg { 183 map tail_call_map_update 184 key ptr64[in, const[0, int32]] 185 val ptr64[in, fd_bpf_prog] 186 flags const[0, int64] 187 } 188 189 bpf_map_delete_arg { 190 map fd_bpf_map 191 key ptr64[in, array[int8]] 192 value const[0, int64] 193 flags const[0, int64] 194 } 195 196 bpf_map_get_next_arg { 197 map fd_bpf_map 198 key ptr64[in, array[int8]] 199 next ptr64[out, array[int8]] 200 flags const[0, int64] 201 } 202 203 bpf_map_batch_arg { 204 in_batch ptr64[in, array[int8]] 205 out_batch ptr64[out, array[int8]] 206 key ptr64[in, array[int8]] 207 val ptr64[in, array[int8]] 208 count int32 209 map_fd fd_bpf_map 210 elem_flags flags[bpf_batch_flags, int64] 211 flags const[0, int64] 212 } 213 214 bpf_iter_link_cgroup { 215 order flags[bpf_cgroup_iter_order, int32] 216 cgroup_fd fd_cgroup 217 cgroup_id int64 218 } 219 220 bpf_iter_link_task { 221 tid pid 222 pid pid 223 pid_fd fd_pidfd 224 } 225 226 bpf_iter_link_info [ 227 map_fd fd_bpf_map 228 cgroup bpf_iter_link_cgroup 229 task bpf_iter_link_task 230 ] 231 232 link_create_iter { 233 iter_info ptr[in, bpf_iter_link_info] 234 iter_info_len bytesize[iter_info, int32] 235 } 236 237 link_create_perf_event { 238 bpf_cookie int64 239 } 240 241 link_create_kprobe_multi_addrs { 242 flags flags[bpf_link_create_kprobe_multi_flags, int32] 243 cnt len[addrs, int32] 244 syms const[0, int64] 245 addrs ptr64[in, array[int64]] 246 cookies int64 247 } 248 249 link_create_kprobe_multi_symbols { 250 flags flags[bpf_link_create_kprobe_multi_flags, int32] 251 cnt len[syms, int32] 252 syms ptr64[in, array[ptr[in, string]]] 253 addrs const[0, int64] 254 cookies int64 255 } 256 257 link_create_kprobe_multi [ 258 addrs link_create_kprobe_multi_addrs 259 syms link_create_kprobe_multi_symbols 260 ] 261 262 link_create_tracing { 263 target_btf_id bpf_btf_id 264 cookie int64 265 } 266 267 link_create_netfilter { 268 pf flags[nfproto, int32] 269 hooknum flags[nf_dev_hooks, int32] 270 priority int32 271 flags flags[bpf_link_create_netfilter_flags, int32] 272 } 273 274 link_create_tcx { 275 relative_link_fd fd_bpf_link (if[value[bpf_link_create_arg_t:flags] & BPF_F_LINK_OR_ID == BPF_F_LINK]) 276 relative_prog_fd fd_bpf_prog (if[value[bpf_link_create_arg_t:flags] & BPF_F_LINK_OR_ID == 0]) 277 relative_link_id bpf_link_id (if[value[bpf_link_create_arg_t:flags] & BPF_F_LINK_OR_ID == BPF_F_LINK_OR_ID]) 278 relative_prog_id bpf_prog_id (if[value[bpf_link_create_arg_t:flags] & BPF_F_LINK_OR_ID == BPF_F_ID]) 279 exp_revision bpf_revision 280 } [packed] 281 282 link_create_uprobe_multi { 283 path ptr64[in, filename] 284 offsets ptr64[in, array[int64]] 285 ref_ctr_offsets ptr64[in, array[int64[0:5]], opt] 286 cookies int64 287 cnt len[offsets, int32] 288 flags flags[bpf_link_create_uprobe_multi_flags, int32] 289 pid pid 290 } 291 292 link_create_netkit { 293 relative_link_fd fd_bpf_link (if[value[bpf_link_create_arg_t:flags] & BPF_F_LINK_OR_ID == BPF_F_LINK]) 294 relative_prog_fd fd_bpf_prog (if[value[bpf_link_create_arg_t:flags] & BPF_F_LINK_OR_ID == 0]) 295 relative_link_id bpf_link_id (if[value[bpf_link_create_arg_t:flags] & BPF_F_LINK_OR_ID == BPF_F_LINK_OR_ID]) 296 relative_prog_id bpf_prog_id (if[value[bpf_link_create_arg_t:flags] & BPF_F_LINK_OR_ID == BPF_F_ID]) 297 exp_revision bpf_revision 298 } [packed] 299 300 link_create_arg_extra [ 301 target_btf_id bpf_btf_id 302 iter link_create_iter 303 perf_event link_create_perf_event 304 kprobe_multi link_create_kprobe_multi 305 tracing link_create_tracing 306 netfilter link_create_netfilter 307 tcx link_create_tcx 308 uprobe_multi link_create_uprobe_multi 309 netkit link_create_netkit 310 ] [varlen] 311 312 type bpf_link_create_arg_t[PROG_FD, TARGET_FD, ATTACH_TYPE, FLAGS] { 313 prog_fd PROG_FD 314 target_fd TARGET_FD 315 attach_type ATTACH_TYPE 316 flags FLAGS 317 extra optional[link_create_arg_extra] 318 } 319 320 type bpf_link_create_arg bpf_link_create_arg_t[fd_bpf_prog, fd_cgroup, flags[bpf_attach_types_link_create, int32], const[0, int32]] 321 322 bpf_link_update_arg { 323 link_fd fd_bpf_link 324 new_prog_fd fd_bpf_prog 325 flags flags[bpf_link_update_flags, int32] 326 old_prog_fd fd_bpf_prog 327 } 328 329 bpf_enable_stats_arg { 330 type flags[bpf_stat_types, int32] 331 } 332 333 bpf_iter_create_arg { 334 link_fd fd_bpf_link 335 flags const[0, int32] 336 } 337 338 bpf_batch_flags = BPF_F_LOCK 339 340 bpf_obj_pin_map [ 341 generic bpf_obj_pin_map_generic 342 o_path bpf_obj_pin_map_o_path 343 ] 344 345 bpf_obj_pin_prog [ 346 generic bpf_obj_pin_prog_generic 347 o_path bpf_obj_pin_prog_o_path 348 ] 349 350 bpf_obj_get [ 351 generic bpf_obj_get_generic 352 o_path bpf_obj_get_o_path 353 ] 354 355 # NEED: these filenames must be on bpf filesystem, can we do it somehow? 356 bpf_obj_pin_map_generic { 357 path ptr64[in, filename] 358 fd fd_bpf_map 359 flags const[0, int32] 360 path_fd const[0, int32] 361 } 362 363 bpf_obj_pin_prog_generic { 364 path ptr64[in, filename] 365 fd fd_bpf_prog 366 flags const[0, int32] 367 path_fd const[0, int32] 368 } 369 370 bpf_obj_get_generic { 371 path ptr64[in, filename] 372 fd const[0, int32] 373 file_flags flags[bpf_open_flags, int32] 374 path_fd const[0, int32] 375 } 376 377 # NEED: Specific type for O_PATH fds (for path_fd). 378 bpf_obj_pin_map_o_path { 379 path ptr64[in, filename] 380 fd fd_bpf_map 381 flags const[BPF_F_PATH_FD, int32] 382 path_fd fd 383 } 384 385 bpf_obj_pin_prog_o_path { 386 path ptr64[in, filename] 387 fd fd_bpf_prog 388 flags const[BPF_F_PATH_FD, int32] 389 path_fd fd 390 } 391 392 bpf_obj_get_o_path { 393 path ptr64[in, filename] 394 fd const[0, int32] 395 file_flags flags[bpf_obj_get_flags, int32] 396 path_fd fd 397 } 398 399 # These defines should match the mapping implemented by attach_type_to_prog_type in the kernel. 400 define EXP_TYPE_CGROUP_SKB BPF_CGROUP_INET_INGRESS | BPF_CGROUP_INET_EGRESS 401 define EXP_TYPE_CGROUP_SOCK BPF_CGROUP_INET_SOCK_CREATE | BPF_CGROUP_INET_SOCK_RELEASE | BPF_CGROUP_INET4_POST_BIND | BPF_CGROUP_INET6_POST_BIND 402 define EXP_TYPE_CGROUP_SOCK_ADDR BPF_CGROUP_INET4_BIND | BPF_CGROUP_INET6_BIND | BPF_CGROUP_INET4_CONNECT | BPF_CGROUP_INET6_CONNECT | BPF_CGROUP_UNIX_CONNECT | BPF_CGROUP_INET4_GETPEERNAME | BPF_CGROUP_INET6_GETPEERNAME | BPF_CGROUP_UNIX_GETPEERNAME | BPF_CGROUP_INET4_GETSOCKNAME | BPF_CGROUP_INET6_GETSOCKNAME | BPF_CGROUP_UNIX_GETSOCKNAME | BPF_CGROUP_UDP4_SENDMSG | BPF_CGROUP_UDP6_SENDMSG | BPF_CGROUP_UNIX_SENDMSG | BPF_CGROUP_UDP4_RECVMSG | BPF_CGROUP_UDP6_RECVMSG | BPF_CGROUP_UNIX_RECVMSG 403 define EXP_TYPE_SOCK_OPS BPF_CGROUP_SOCK_OPS 404 define EXP_TYPE_CGROUP_DEVICE BPF_CGROUP_DEVICE 405 define EXP_TYPE_SK_MSG BPF_SK_MSG_VERDICT 406 define EXP_TYPE_SK_SKB BPF_SK_SKB_STREAM_PARSER | BPF_SK_SKB_STREAM_VERDICT | BPF_SK_SKB_VERDICT 407 define EXP_TYPE_LIRC_MODE2 BPF_LIRC_MODE2 408 define EXP_TYPE_FLOW_DISSECTOR BPF_FLOW_DISSECTOR 409 define EXP_TYPE_CGROUP_SYSCTL BPF_CGROUP_SYSCTL 410 define EXP_TYPE_CGROUP_SOCKOPT BPF_CGROUP_GETSOCKOPT | BPF_CGROUP_SETSOCKOPT 411 define EXP_TYPE_TRACING BPF_TRACE_ITER | BPF_TRACE_RAW_TP | BPF_TRACE_FENTRY | BPF_TRACE_FEXIT | BPF_MODIFY_RETURN 412 define EXP_TYPE_LSM BPF_LSM_MAC | BPF_LSM_CGROUP 413 define EXP_TYPE_SK_LOOKUP BPF_SK_LOOKUP 414 define EXP_TYPE_XDP BPF_XDP 415 define EXP_TYPE_SCHED_CLS BPF_TCX_INGRESS | BPF_TCX_EGRESS | BPF_NETKIT_PRIMARY | BPF_NETKIT_PEER 416 417 define EXP_MAP EXP_TYPE_SK_MSG | EXP_TYPE_SK_SKB 418 define EXP_CGROUP EXP_TYPE_CGROUP_DEVICE | EXP_TYPE_CGROUP_SKB | EXP_TYPE_CGROUP_SOCK | EXP_TYPE_CGROUP_SOCK_ADDR | EXP_TYPE_CGROUP_SOCKOPT | EXP_TYPE_CGROUP_SYSCTL | EXP_TYPE_SOCK_OPS | EXP_TYPE_LSM 419 420 bpf_attach_targets [ 421 cgroup fd_cgroup (if[value[parent:parent:type] & EXP_CGROUP != 0]) 422 map fd_bpf_map (if[value[parent:parent:type] & EXP_MAP != 0]) 423 ifindex ifindex (if[value[parent:parent:type] & BPF_PROG_TYPE_SCHED_CLS != 0]) 424 fallback fd 425 ] 426 427 define BPF_F_LINK_OR_ID BPF_F_LINK | BPF_F_ID 428 429 bpf_attach_arg { 430 target bpf_attach_targets 431 attach_bpf_fd fd_bpf_prog 432 type flags[bpf_attach_types, int32] 433 flags flags[bpf_attach_flags, int32] 434 replace_bpf_fd fd_bpf_prog 435 relative_link_fd fd_bpf_link (if[value[flags] & BPF_F_LINK_OR_ID == BPF_F_LINK]) 436 relative_prog_fd fd_bpf_prog (if[value[flags] & BPF_F_LINK_OR_ID == 0]) 437 relative_link_id bpf_link_id (if[value[flags] & BPF_F_LINK_OR_ID == BPF_F_LINK_OR_ID]) 438 relative_prog_id bpf_prog_id (if[value[flags] & BPF_F_LINK_OR_ID == BPF_F_ID]) 439 exp_revision bpf_revision 440 } [packed] 441 442 bpf_detach_arg { 443 target bpf_attach_targets 444 prog fd_bpf_prog 445 type flags[bpf_attach_types, int32] 446 flags flags[bpf_mprog_attach_flags, int32] 447 replace_bpf_fd const[0, int32] 448 relative_link_fd fd_bpf_link (if[value[flags] & BPF_F_LINK_OR_ID == BPF_F_LINK]) 449 relative_prog_fd fd_bpf_prog (if[value[flags] & BPF_F_LINK_OR_ID == 0]) 450 relative_link_id bpf_link_id (if[value[flags] & BPF_F_LINK_OR_ID == BPF_F_LINK_OR_ID]) 451 relative_prog_id bpf_prog_id (if[value[flags] & BPF_F_LINK_OR_ID == BPF_F_ID]) 452 exp_revision bpf_revision 453 } [packed] 454 455 bpf_test_prog_arg { 456 prog fd_bpf_prog 457 retval const[0, int32] 458 insizedata len[indata, int32] 459 outsizedata len[outdata, int32] 460 indata ptr64[in, array[int8]] 461 outdata ptr64[out, array[int8]] 462 repeat int32 463 dur const[0, int32] 464 insizectx len[inctx, int32] 465 outsizectx len[outctx, int32] 466 inctx ptr64[in, array[int8]] 467 outctx ptr64[in, array[int8]] 468 flags flags[bpf_prog_test_run_flags, int32] 469 cpu const[0, int32] 470 batch_size int32 471 } 472 473 bpf_test_prog_live_arg { 474 prog fd_bpf_prog_xdp 475 retval const[0, int32] 476 insizedata len[indata, int32] 477 outsizedata const[0, int32] 478 indata ptr64[in, array[int8]] 479 outdata const[0, int64] 480 repeat int32 481 dur const[0, int32] 482 insizectx len[inctx, int32] 483 outsizectx const[0, int32] 484 inctx ptr64[in, array[int8]] 485 outctx const[0, int64] 486 flags const[BPF_F_TEST_XDP_LIVE_FRAMES, int32] 487 cpu const[0, int32] 488 batch_size int32 489 } 490 491 bpf_prog_get_next_id_arg { 492 start int32 (in) 493 next_id bpf_prog_id (out) 494 } 495 496 bpf_map_get_next_id_arg { 497 start int32 (in) 498 next_id bpf_map_id (out) 499 } 500 501 bpf_btf_get_next_id_arg { 502 start int32 (in) 503 next_id bpf_btf_id (out) 504 } 505 506 bpf_link_get_next_id_arg { 507 start int32 (in) 508 next_id bpf_link_id (out) 509 } 510 511 bpf_prog_get_fd_by_id_arg { 512 prog bpf_prog_id 513 } 514 515 bpf_prog_bind_map_arg { 516 prog_fd fd_bpf_prog 517 map_fd fd_bpf_map 518 flags const[0, int32] 519 } 520 521 bpf_token_create_arg { 522 flags const[0, int32] 523 bpffs_id fd 524 } 525 526 bpf_get_prog_info_arg { 527 prog fd_bpf_prog 528 len len[info, int32] 529 info ptr64[out, bpf_prog_info] 530 } 531 532 # These are defined in bpf/verifier.c. 533 define MIN_BPF_FUNCINFO_SIZE 8 534 define MAX_FUNCINFO_REC_SIZE 252 535 536 bpf_prog_info { 537 type int32 538 id bpf_prog_id 539 tag int64 540 jited_prog_len int32 541 xlated_prog_len int32 542 jited_prog_insns int64 543 xlated_prog_insns int64 544 load_time int64 545 created_by_uid int32 546 nr_map_ids len[map_ids, int32] (in) 547 # We could declare these as bpf_map_id, but this is not the best way to obtain these resources. 548 map_ids ptr64[out, array[int32]] 549 name array[int8, BPF_OBJ_NAME_LEN] 550 ifindex ifindex 551 gpl_compatible int32:1 552 netns_dev int64 553 netns_ino int64 554 nr_jited_ksyms len[jited_ksyms, int32] (in) 555 nr_jited_func_lens len[jited_func_lens, int32] (in) 556 jited_ksyms ptr64[out, array[int64]] 557 jited_func_lens ptr64[out, array[int32]] 558 btf_id bpf_btf_id 559 func_info_rec_size int32[MIN_BPF_FUNCINFO_SIZE:MAX_FUNCINFO_REC_SIZE] (in) 560 func_info ptr64[out, array[bpf_func_info]] 561 nr_func_info bytesize[func_info, int32] (in) 562 nr_line_info len[line_info, int32] (in) 563 line_info ptr64[out, bpf_line_info] 564 jited_line_info ptr64[out, int64] 565 nr_jited_line_info len[jited_line_info, int32] (in) 566 line_info_rec_size int32[MIN_BPF_FUNCINFO_SIZE:MAX_FUNCINFO_REC_SIZE] (in) 567 jited_line_info_rec_size const[8, int32] (in) 568 nr_prog_tags len[prog_tags, int32] (in) 569 prog_tags ptr64[out, int64] 570 run_time_ns int64 571 run_cnt int64 572 recursion_misses int64 573 verified_insns int32 574 } [align[8]] 575 576 bpf_get_map_info_arg { 577 prog fd_bpf_map 578 len len[info, int32] 579 info ptr64[out, bpf_map_info] 580 } 581 582 bpf_map_info { 583 type int32 584 id bpf_map_id 585 key_size int32 586 value_size int32 587 max_entries int32 588 map_flags int32 589 name array[int8, BPF_OBJ_NAME_LEN] 590 ifindex ifindex 591 btf_vmlinux_value_type_id int32 592 netns_dev int64 593 netns_ino int64 594 btf_id int32 595 btf_key_type_id int32 596 btf_value_type_id int32 597 map_extra align64[int64] 598 } [align[8]] 599 600 bpf_get_btf_info_arg { 601 btf fd_btf (in) 602 len len[info, int32] (in) 603 info ptr64[out, bpf_btf_info] 604 } 605 606 bpf_btf_info { 607 btf ptr64[out, array[int8]] 608 btf_size bytesize[btf, int32] (in) 609 id bpf_btf_id 610 name ptr64[out, array[int8]] 611 name_len bytesize[name, int32] 612 kernel_btf int32 613 } [align[8]] 614 615 bpf_prog_query { 616 target_fd bpf_attach_targets 617 type flags[bpf_prog_query_attach_type, int32] 618 query_flags flags[bpf_prog_query_flags, int32] 619 attach_flags int32 620 prog_ids ptr64[out, array[int32]] 621 prog_cnt len[prog_ids, int32] 622 pad const[0, int32] 623 prog_attach_flags ptr64[out, array[int32]] 624 link_ids ptr64[out, array[int32]] 625 link_attach_flags ptr64[out, array[int32]] 626 revision bpf_revision (out) 627 } [packed, align[8]] 628 629 bpf_btf_load { 630 btf ptr64[in, bpf_btf_program] 631 btf_log_buf ptr64[out, array[int8]] 632 btf_size bytesize[btf, int32] 633 btf_log_size bytesize[btf_log_buf, int32] 634 btf_log_level bool32 635 btf_log_true_size int32 636 btf_flags flags[btf_load_flags, int32] 637 btf_token_fd fd_bpf_token (if[value[btf_flags] & BPF_F_TOKEN_FD != 0]) 638 pad const[0, int32] (if[value[btf_flags] & BPF_F_TOKEN_FD == 0]) 639 } [packed, align[8]] 640 641 bpf_btf_program { 642 header btf_header 643 strings bpf_btf_strings 644 } [packed] 645 646 btf_header { 647 magic const[BTF_MAGIC, int16] 648 version const[BTF_VERSION, int8] 649 flags const[0, int8] 650 hdr_len const[0x18, int32] 651 type_off const[0, int32] 652 type_len bytesize[types, int32] 653 str_off bytesize[types, int32] 654 str_len bytesize[bpf_btf_program:strings, int32] 655 types array[btf_type] 656 } [align[4]] 657 658 btf_type [ 659 int btf_type_int 660 ptr btf_type_ref_t[BTF_KIND_PTR] 661 array btf_type_array 662 struct btf_type_struct_t[BTF_KIND_STRUCT] 663 union btf_type_struct_t[BTF_KIND_UNION] 664 enum btf_type_enum 665 fwd btf_type_fwd 666 typedef btf_type_ref_t[BTF_KIND_TYPEDEF] 667 volatile btf_type_ref_t[BTF_KIND_VOLATILE] 668 const btf_type_ref_t[BTF_KIND_CONST] 669 restrict btf_type_ref_t[BTF_KIND_RESTRICT] 670 func btf_type_func 671 func_proto btf_type_func_proto 672 var btf_type_var 673 datasec btf_type_datasec 674 float btf_type_float 675 decl_tag btf_type_decl_tag 676 type_tag btf_type_type_tag 677 enum64 btf_type_enum64 678 ] [varlen] 679 680 btf_type_int { 681 # Note: this is an offset in bpf_btf_program:strings 682 name_off btf_opt_name_off 683 info_vlen const[0, int16] 684 info_pad const[0, int8] 685 info_typ const[BTF_KIND_INT, int8] 686 size const[0, int32] 687 bits int8[0:128] 688 pad const[0, int8] 689 offset int8[0:128] 690 encoding flags[btf_type_int_encoding, int8] 691 } 692 693 btf_type_int_encoding = BTF_INT_SIGNED, BTF_INT_CHAR, BTF_INT_BOOL 694 695 type btf_type_ref_t[TYP] { 696 name_off btf_opt_name_off 697 info_vlen const[0, int16] 698 info_pad const[0, int8] 699 info_typ const[TYP, int8] 700 type btf_opt_type_id 701 } 702 703 btf_type_array { 704 name_off const[0, int32] 705 info_vlen const[0, int16] 706 info_pad const[0, int8] 707 info_typ const[BTF_KIND_ARRAY, int8] 708 size const[0, int32] 709 data btf_array 710 } 711 712 btf_array { 713 type btf_type_id 714 index_type btf_type_id 715 nelems int32 716 } 717 718 type btf_type_struct_t[TYP] { 719 name_off btf_opt_name_off 720 info_vlen len[fields, int16] 721 info_pad const[0, int8] 722 info_typ const[TYP, int8:7] 723 info_kflag int8:1 724 size int32 725 fields array[btf_member] 726 } 727 728 btf_member { 729 name_off btf_opt_name_off 730 type btf_opt_type_id 731 offset int32 732 } 733 734 btf_type_enum { 735 name_off btf_opt_name_off 736 info_vlen len[values, int16] 737 info_pad const[0, int8] 738 info_typ const[BTF_KIND_ENUM, int8] 739 size const[4, int32] 740 values array[btf_enum] 741 } 742 743 btf_enum { 744 name_off btf_opt_name_off 745 val int32 746 } 747 748 btf_type_fwd { 749 name_off btf_name_off 750 info_vlen const[0, int16] 751 info_pad const[0, int8] 752 info_typ const[BTF_KIND_FWD, int8] 753 size const[0, int32] 754 } 755 756 btf_type_func { 757 name_off btf_name_off 758 info_vlen const[0, int16] 759 info_pad const[0, int8] 760 info_typ const[BTF_KIND_FUNC, int8] 761 type btf_type_id 762 } 763 764 btf_type_func_proto { 765 name_off const[0, int32] 766 info_vlen len[params, int16] 767 info_pad const[0, int8] 768 info_typ const[BTF_KIND_FUNC_PROTO, int8] 769 size const[0, int32] 770 params array[btf_param] 771 } 772 773 btf_param { 774 name_off btf_opt_name_off 775 type btf_opt_type_id 776 } 777 778 btf_type_var { 779 name_off btf_name_off 780 info_vlen const[0, int16] 781 info_pad const[0, int8] 782 info_typ const[BTF_KIND_VAR, int8] 783 type btf_type_id 784 linkage flags[btf_linkage_values, int32] 785 } 786 787 btf_type_datasec { 788 name_off btf_name_off 789 info_vlen len[secinfo, int16] 790 info_pad const[0, int8] 791 info_typ const[BTF_KIND_DATASEC, int8] 792 size bytesize[data, int32] 793 secinfo array[btf_var_secinfo] 794 data array[int8, 1:3] 795 } [packed] 796 797 btf_var_secinfo { 798 type btf_type_id 799 # NEED: offset/size are for btf_type_datasec:data and must be increasing and within bounds (see btf_datasec_check_meta) 800 offset int32 801 size int32 802 } 803 804 btf_float_size = 2, 4, 8, 12, 16 805 806 btf_type_float { 807 name_off btf_name_off 808 info_vlen const[0, int16] 809 info_pad const[0, int8] 810 info_typ const[BTF_KIND_FLOAT, int8] 811 size flags[btf_float_size, int32] 812 } 813 814 btf_type_decl_tag { 815 name_off btf_name_off 816 info_vlen const[0, int16] 817 info_pad const[0, int8] 818 info_typ const[BTF_KIND_DECL_TAG, int8] 819 type btf_type_id 820 # -1 or the index of a struct field or function argument. 821 component_idx int32[-1:10] 822 } 823 824 btf_type_type_tag { 825 name_off btf_name_off 826 info_vlen const[0, int16] 827 info_pad const[0, int8] 828 info_typ const[BTF_KIND_TYPE_TAG, int8] 829 type btf_type_id 830 } 831 832 btf_enum64_sizes = 1, 2, 4, 8 833 834 btf_type_enum64 { 835 name_off btf_name_off 836 info_vlen len[enum64, int16] 837 info_pad const[0, int8] 838 info_typ const[BTF_KIND_ENUM64, int8:7] 839 info_kflag int8:1 840 size flags[btf_enum64_sizes, int32] 841 enum64 array[btf_enum64] 842 } 843 844 btf_enum64 { 845 name_off btf_name_off 846 val_lo32 int32 847 val_hi32 int32 848 } 849 850 bpf_btf_strings { 851 z0 const[0, int8] 852 data array[flags[bpf_btf_strings_elem, int8]] 853 z1 const[0, int8] 854 } [packed] 855 856 bpf_btf_strings_elem = 'a', '0', '_', '.', 0 857 858 bpf_task_fd_query { 859 pid pid (in) 860 fd fd_perf_base (in) 861 flags const[0, int32] (in) 862 buf_len bytesize[buf, int32] (in) 863 buf ptr64[in, string] (in) 864 prog_id bpf_prog_id (out) 865 fd_type int32 (out) 866 probe_offset int64 (out) 867 probe_addr int64 (out) 868 } 869 870 bpf_map_type = BPF_MAP_TYPE_HASH, BPF_MAP_TYPE_ARRAY, BPF_MAP_TYPE_PROG_ARRAY, BPF_MAP_TYPE_PERF_EVENT_ARRAY, BPF_MAP_TYPE_STACK_TRACE, BPF_MAP_TYPE_CGROUP_ARRAY, BPF_MAP_TYPE_PERCPU_HASH, BPF_MAP_TYPE_PERCPU_ARRAY, BPF_MAP_TYPE_LRU_HASH, BPF_MAP_TYPE_LRU_PERCPU_HASH, BPF_MAP_TYPE_LPM_TRIE, BPF_MAP_TYPE_ARRAY_OF_MAPS, BPF_MAP_TYPE_HASH_OF_MAPS, BPF_MAP_TYPE_DEVMAP, BPF_MAP_TYPE_SOCKMAP, BPF_MAP_TYPE_CPUMAP, BPF_MAP_TYPE_XSKMAP, BPF_MAP_TYPE_SOCKHASH, BPF_MAP_TYPE_CGROUP_STORAGE, BPF_MAP_TYPE_REUSEPORT_SOCKARRAY, BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE, BPF_MAP_TYPE_QUEUE, BPF_MAP_TYPE_STACK, BPF_MAP_TYPE_SK_STORAGE, BPF_MAP_TYPE_DEVMAP_HASH, BPF_MAP_TYPE_STRUCT_OPS, BPF_MAP_TYPE_RINGBUF, BPF_MAP_TYPE_INODE_STORAGE, BPF_MAP_TYPE_TASK_STORAGE, BPF_MAP_TYPE_BLOOM_FILTER, BPF_MAP_TYPE_CGRP_STORAGE, BPF_MAP_TYPE_USER_RINGBUF, BPF_MAP_TYPE_ARENA 871 bpf_map_flags = BPF_ANY, BPF_NOEXIST, BPF_EXIST, BPF_F_LOCK 872 bpf_lookup_flags = BPF_F_LOCK 873 bpf_prog_type = BPF_PROG_TYPE_SOCKET_FILTER, BPF_PROG_TYPE_KPROBE, BPF_PROG_TYPE_SCHED_CLS, BPF_PROG_TYPE_SCHED_ACT, BPF_PROG_TYPE_TRACEPOINT, BPF_PROG_TYPE_XDP, BPF_PROG_TYPE_PERF_EVENT, BPF_PROG_TYPE_CGROUP_SKB, BPF_PROG_TYPE_CGROUP_SOCK, BPF_PROG_TYPE_LWT_IN, BPF_PROG_TYPE_LWT_OUT, BPF_PROG_TYPE_LWT_XMIT, BPF_PROG_TYPE_SOCK_OPS, BPF_PROG_TYPE_SK_SKB, BPF_PROG_TYPE_CGROUP_DEVICE, BPF_PROG_TYPE_SK_MSG, BPF_PROG_TYPE_RAW_TRACEPOINT, BPF_PROG_TYPE_CGROUP_SOCK_ADDR, BPF_PROG_TYPE_LWT_SEG6LOCAL, BPF_PROG_TYPE_LIRC_MODE2, BPF_PROG_TYPE_SK_REUSEPORT, BPF_PROG_TYPE_FLOW_DISSECTOR, BPF_PROG_TYPE_CGROUP_SYSCTL, BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE, BPF_PROG_TYPE_CGROUP_SOCKOPT, BPF_PROG_TYPE_TRACING, BPF_PROG_TYPE_EXT, BPF_PROG_TYPE_STRUCT_OPS, BPF_PROG_TYPE_LSM, BPF_PROG_TYPE_SK_LOOKUP, BPF_PROG_TYPE_SYSCALL, BPF_PROG_TYPE_NETFILTER 874 map_flags = BPF_F_NO_PREALLOC, BPF_F_NO_COMMON_LRU, BPF_F_NUMA_NODE, BPF_F_RDONLY, BPF_F_WRONLY, BPF_F_STACK_BUILD_ID, BPF_F_ZERO_SEED, BPF_F_RDONLY_PROG, BPF_F_WRONLY_PROG, BPF_F_CLONE, BPF_F_MMAPABLE, BPF_F_INNER_MAP, BPF_F_PRESERVE_ELEMS, BPF_F_LINK, BPF_F_PATH_FD, BPF_F_VTYPE_BTF_OBJ_FD, BPF_F_TOKEN_FD, BPF_F_SEGV_ON_FAULT, BPF_F_NO_USER_CONV 875 bpf_attach_types = BPF_XDP_DEVMAP, BPF_XDP_CPUMAP, BPF_SK_REUSEPORT_SELECT, BPF_SK_REUSEPORT_SELECT_OR_MIGRATE, BPF_PERF_EVENT, BPF_TRACE_KPROBE_MULTI, BPF_STRUCT_OPS, BPF_NETFILTER, BPF_TRACE_UPROBE_MULTI, BPF_TRACE_KPROBE_SESSION, bpf_attach_types_link_create 876 bpf_attach_types_link_create = BPF_CGROUP_INET_INGRESS, BPF_CGROUP_INET_EGRESS, BPF_CGROUP_INET_SOCK_CREATE, BPF_CGROUP_INET4_POST_BIND, BPF_CGROUP_INET6_POST_BIND, BPF_CGROUP_INET4_BIND, BPF_CGROUP_INET6_BIND, BPF_CGROUP_INET4_CONNECT, BPF_CGROUP_INET6_CONNECT, BPF_CGROUP_UDP4_SENDMSG, BPF_CGROUP_UDP6_SENDMSG, BPF_CGROUP_UDP4_RECVMSG, BPF_CGROUP_UDP6_RECVMSG, BPF_CGROUP_SOCK_OPS, BPF_CGROUP_DEVICE, BPF_SK_MSG_VERDICT, BPF_SK_SKB_STREAM_PARSER, BPF_SK_SKB_STREAM_VERDICT, BPF_LIRC_MODE2, BPF_FLOW_DISSECTOR, BPF_CGROUP_SYSCTL, BPF_CGROUP_GETSOCKOPT, BPF_CGROUP_SETSOCKOPT, BPF_CGROUP_INET4_GETPEERNAME, BPF_CGROUP_INET4_GETSOCKNAME, BPF_CGROUP_INET6_GETPEERNAME, BPF_CGROUP_INET6_GETSOCKNAME, BPF_TRACE_ITER, BPF_CGROUP_INET_SOCK_RELEASE, BPF_SK_LOOKUP, BPF_XDP, BPF_SK_SKB_VERDICT, BPF_LSM_CGROUP, BPF_LSM_MAC, BPF_MODIFY_RETURN, BPF_TRACE_FENTRY, BPF_TRACE_FEXIT, BPF_TRACE_RAW_TP, BPF_TCX_EGRESS, BPF_TCX_INGRESS, BPF_NETKIT_PRIMARY, BPF_NETKIT_PEER, BPF_CGROUP_UNIX_CONNECT, BPF_CGROUP_UNIX_SENDMSG, BPF_CGROUP_UNIX_RECVMSG, BPF_CGROUP_UNIX_GETPEERNAME, BPF_CGROUP_UNIX_GETSOCKNAME 877 bpf_prog_load_flags = BPF_F_STRICT_ALIGNMENT, BPF_F_ANY_ALIGNMENT, BPF_F_TEST_RND_HI32, BPF_F_TEST_STATE_FREQ, BPF_F_SLEEPABLE, BPF_F_XDP_DEV_BOUND_ONLY, BPF_F_XDP_HAS_FRAGS 878 bpf_mprog_attach_flags = BPF_F_REPLACE, BPF_F_BEFORE, BPF_F_AFTER, BPF_F_ID, BPF_F_LINK 879 bpf_attach_flags = BPF_F_ALLOW_OVERRIDE, BPF_F_ALLOW_MULTI, bpf_mprog_attach_flags 880 bpf_link_update_flags = BPF_F_REPLACE 881 bpf_prog_query_flags = BPF_F_QUERY_EFFECTIVE 882 bpf_prog_test_run_flags = BPF_F_TEST_RUN_ON_CPU, BPF_F_TEST_XDP_LIVE_FRAMES, BPF_F_TEST_SKB_CHECKSUM_COMPLETE 883 bpf_prog_query_attach_type = BPF_CGROUP_INET_INGRESS, BPF_CGROUP_INET_EGRESS, BPF_CGROUP_INET_SOCK_CREATE, BPF_CGROUP_SOCK_OPS, BPF_CGROUP_DEVICE, BPF_CGROUP_INET4_BIND, BPF_CGROUP_INET4_CONNECT, BPF_CGROUP_INET4_POST_BIND, BPF_CGROUP_INET6_BIND, BPF_CGROUP_INET6_CONNECT, BPF_CGROUP_INET6_POST_BIND, BPF_CGROUP_UDP4_SENDMSG, BPF_CGROUP_UDP6_SENDMSG, BPF_LIRC_MODE2, BPF_CGROUP_SYSCTL, BPF_FLOW_DISSECTOR, BPF_CGROUP_UDP4_RECVMSG, BPF_CGROUP_UDP6_RECVMSG, BPF_CGROUP_GETSOCKOPT, BPF_CGROUP_SETSOCKOPT, BPF_CGROUP_INET4_GETPEERNAME, BPF_CGROUP_INET4_GETSOCKNAME, BPF_CGROUP_INET6_GETPEERNAME, BPF_CGROUP_INET6_GETSOCKNAME, BPF_CGROUP_INET_SOCK_RELEASE, BPF_SK_LOOKUP, BPF_LSM_CGROUP, BPF_SK_MSG_VERDICT, BPF_SK_SKB_STREAM_PARSER, BPF_SK_SKB_STREAM_VERDICT, BPF_SK_SKB_VERDICT, BPF_TCX_INGRESS, BPF_TCX_EGRESS, BPF_NETKIT_PRIMARY, BPF_NETKIT_PEER, BPF_CGROUP_UNIX_CONNECT, BPF_CGROUP_UNIX_SENDMSG, BPF_CGROUP_UNIX_RECVMSG, BPF_CGROUP_UNIX_GETPEERNAME, BPF_CGROUP_UNIX_GETSOCKNAME 884 bpf_open_flags = BPF_F_RDONLY, BPF_F_WRONLY 885 bpf_stat_types = BPF_STATS_RUN_TIME 886 bpf_core_relo_kind = BPF_CORE_FIELD_BYTE_OFFSET, BPF_CORE_FIELD_BYTE_SIZE, BPF_CORE_FIELD_EXISTS, BPF_CORE_FIELD_SIGNED, BPF_CORE_FIELD_LSHIFT_U64, BPF_CORE_FIELD_RSHIFT_U64, BPF_CORE_TYPE_ID_LOCAL, BPF_CORE_TYPE_ID_TARGET, BPF_CORE_TYPE_EXISTS, BPF_CORE_TYPE_SIZE, BPF_CORE_ENUMVAL_EXISTS, BPF_CORE_ENUMVAL_VALUE, BPF_CORE_TYPE_MATCHES 887 bpf_obj_get_flags = BPF_F_PATH_FD, BPF_F_RDONLY, BPF_F_WRONLY 888 bpf_cgroup_iter_order = BPF_CGROUP_ITER_SELF_ONLY, BPF_CGROUP_ITER_DESCENDANTS_PRE, BPF_CGROUP_ITER_DESCENDANTS_POST, BPF_CGROUP_ITER_ANCESTORS_UP 889 bpf_link_create_kprobe_multi_flags = BPF_F_KPROBE_MULTI_RETURN 890 nf_dev_hooks = NF_NETDEV_INGRESS, NF_NETDEV_EGRESS 891 bpf_link_create_netfilter_flags = BPF_F_NETFILTER_IP_DEFRAG 892 bpf_link_create_uprobe_multi_flags = BPF_F_UPROBE_MULTI_RETURN 893 btf_load_flags = BPF_F_TOKEN_FD 894 btf_linkage_values = BTF_VAR_STATIC, BTF_VAR_GLOBAL_ALLOCATED, BTF_VAR_GLOBAL_EXTERN