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