1 /**************************************************************************** 2 **************************************************************************** 3 *** 4 *** This header was automatically generated from a Linux kernel header 5 *** of the same name, to make information necessary for userspace to 6 *** call into the kernel available to libc. It contains only constants, 7 *** structures, and macros generated from the original header, and thus, 8 *** contains no copyrightable information. 9 *** 10 *** To edit the content of this header, modify the corresponding 11 *** source file (e.g. under external/kernel-headers/original/) then 12 *** run bionic/libc/kernel/tools/update_all.py 13 *** 14 *** Any manual change here will be lost the next time this script will 15 *** be run. You've been warned! 16 *** 17 **************************************************************************** 18 ****************************************************************************/ 19 #ifndef _UAPI__LINUX_BPF_H__ 20 #define _UAPI__LINUX_BPF_H__ 21 #include <linux/types.h> 22 #include <linux/bpf_common.h> 23 #define BPF_JMP32 0x06 24 #define BPF_ALU64 0x07 25 #define BPF_DW 0x18 26 #define BPF_ATOMIC 0xc0 27 #define BPF_XADD 0xc0 28 #define BPF_MOV 0xb0 29 #define BPF_ARSH 0xc0 30 #define BPF_END 0xd0 31 #define BPF_TO_LE 0x00 32 #define BPF_TO_BE 0x08 33 #define BPF_FROM_LE BPF_TO_LE 34 #define BPF_FROM_BE BPF_TO_BE 35 #define BPF_JNE 0x50 36 #define BPF_JLT 0xa0 37 #define BPF_JLE 0xb0 38 #define BPF_JSGT 0x60 39 #define BPF_JSGE 0x70 40 #define BPF_JSLT 0xc0 41 #define BPF_JSLE 0xd0 42 #define BPF_CALL 0x80 43 #define BPF_EXIT 0x90 44 #define BPF_FETCH 0x01 45 #define BPF_XCHG (0xe0 | BPF_FETCH) 46 #define BPF_CMPXCHG (0xf0 | BPF_FETCH) 47 enum { 48 BPF_REG_0 = 0, 49 BPF_REG_1, 50 BPF_REG_2, 51 BPF_REG_3, 52 BPF_REG_4, 53 BPF_REG_5, 54 BPF_REG_6, 55 BPF_REG_7, 56 BPF_REG_8, 57 BPF_REG_9, 58 BPF_REG_10, 59 __MAX_BPF_REG, 60 }; 61 #define MAX_BPF_REG __MAX_BPF_REG 62 struct bpf_insn { 63 __u8 code; 64 __u8 dst_reg : 4; 65 __u8 src_reg : 4; 66 __s16 off; 67 __s32 imm; 68 }; 69 struct bpf_lpm_trie_key { 70 __u32 prefixlen; 71 __u8 data[0]; 72 }; 73 struct bpf_cgroup_storage_key { 74 __u64 cgroup_inode_id; 75 __u32 attach_type; 76 }; 77 union bpf_iter_link_info { 78 struct { 79 __u32 map_fd; 80 } map; 81 }; 82 enum bpf_cmd { 83 BPF_MAP_CREATE, 84 BPF_MAP_LOOKUP_ELEM, 85 BPF_MAP_UPDATE_ELEM, 86 BPF_MAP_DELETE_ELEM, 87 BPF_MAP_GET_NEXT_KEY, 88 BPF_PROG_LOAD, 89 BPF_OBJ_PIN, 90 BPF_OBJ_GET, 91 BPF_PROG_ATTACH, 92 BPF_PROG_DETACH, 93 BPF_PROG_TEST_RUN, 94 BPF_PROG_RUN = BPF_PROG_TEST_RUN, 95 BPF_PROG_GET_NEXT_ID, 96 BPF_MAP_GET_NEXT_ID, 97 BPF_PROG_GET_FD_BY_ID, 98 BPF_MAP_GET_FD_BY_ID, 99 BPF_OBJ_GET_INFO_BY_FD, 100 BPF_PROG_QUERY, 101 BPF_RAW_TRACEPOINT_OPEN, 102 BPF_BTF_LOAD, 103 BPF_BTF_GET_FD_BY_ID, 104 BPF_TASK_FD_QUERY, 105 BPF_MAP_LOOKUP_AND_DELETE_ELEM, 106 BPF_MAP_FREEZE, 107 BPF_BTF_GET_NEXT_ID, 108 BPF_MAP_LOOKUP_BATCH, 109 BPF_MAP_LOOKUP_AND_DELETE_BATCH, 110 BPF_MAP_UPDATE_BATCH, 111 BPF_MAP_DELETE_BATCH, 112 BPF_LINK_CREATE, 113 BPF_LINK_UPDATE, 114 BPF_LINK_GET_FD_BY_ID, 115 BPF_LINK_GET_NEXT_ID, 116 BPF_ENABLE_STATS, 117 BPF_ITER_CREATE, 118 BPF_LINK_DETACH, 119 BPF_PROG_BIND_MAP, 120 }; 121 enum bpf_map_type { 122 BPF_MAP_TYPE_UNSPEC, 123 BPF_MAP_TYPE_HASH, 124 BPF_MAP_TYPE_ARRAY, 125 BPF_MAP_TYPE_PROG_ARRAY, 126 BPF_MAP_TYPE_PERF_EVENT_ARRAY, 127 BPF_MAP_TYPE_PERCPU_HASH, 128 BPF_MAP_TYPE_PERCPU_ARRAY, 129 BPF_MAP_TYPE_STACK_TRACE, 130 BPF_MAP_TYPE_CGROUP_ARRAY, 131 BPF_MAP_TYPE_LRU_HASH, 132 BPF_MAP_TYPE_LRU_PERCPU_HASH, 133 BPF_MAP_TYPE_LPM_TRIE, 134 BPF_MAP_TYPE_ARRAY_OF_MAPS, 135 BPF_MAP_TYPE_HASH_OF_MAPS, 136 BPF_MAP_TYPE_DEVMAP, 137 BPF_MAP_TYPE_SOCKMAP, 138 BPF_MAP_TYPE_CPUMAP, 139 BPF_MAP_TYPE_XSKMAP, 140 BPF_MAP_TYPE_SOCKHASH, 141 BPF_MAP_TYPE_CGROUP_STORAGE, 142 BPF_MAP_TYPE_REUSEPORT_SOCKARRAY, 143 BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE, 144 BPF_MAP_TYPE_QUEUE, 145 BPF_MAP_TYPE_STACK, 146 BPF_MAP_TYPE_SK_STORAGE, 147 BPF_MAP_TYPE_DEVMAP_HASH, 148 BPF_MAP_TYPE_STRUCT_OPS, 149 BPF_MAP_TYPE_RINGBUF, 150 BPF_MAP_TYPE_INODE_STORAGE, 151 BPF_MAP_TYPE_TASK_STORAGE, 152 BPF_MAP_TYPE_BLOOM_FILTER, 153 }; 154 enum bpf_prog_type { 155 BPF_PROG_TYPE_UNSPEC, 156 BPF_PROG_TYPE_SOCKET_FILTER, 157 BPF_PROG_TYPE_KPROBE, 158 BPF_PROG_TYPE_SCHED_CLS, 159 BPF_PROG_TYPE_SCHED_ACT, 160 BPF_PROG_TYPE_TRACEPOINT, 161 BPF_PROG_TYPE_XDP, 162 BPF_PROG_TYPE_PERF_EVENT, 163 BPF_PROG_TYPE_CGROUP_SKB, 164 BPF_PROG_TYPE_CGROUP_SOCK, 165 BPF_PROG_TYPE_LWT_IN, 166 BPF_PROG_TYPE_LWT_OUT, 167 BPF_PROG_TYPE_LWT_XMIT, 168 BPF_PROG_TYPE_SOCK_OPS, 169 BPF_PROG_TYPE_SK_SKB, 170 BPF_PROG_TYPE_CGROUP_DEVICE, 171 BPF_PROG_TYPE_SK_MSG, 172 BPF_PROG_TYPE_RAW_TRACEPOINT, 173 BPF_PROG_TYPE_CGROUP_SOCK_ADDR, 174 BPF_PROG_TYPE_LWT_SEG6LOCAL, 175 BPF_PROG_TYPE_LIRC_MODE2, 176 BPF_PROG_TYPE_SK_REUSEPORT, 177 BPF_PROG_TYPE_FLOW_DISSECTOR, 178 BPF_PROG_TYPE_CGROUP_SYSCTL, 179 BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE, 180 BPF_PROG_TYPE_CGROUP_SOCKOPT, 181 BPF_PROG_TYPE_TRACING, 182 BPF_PROG_TYPE_STRUCT_OPS, 183 BPF_PROG_TYPE_EXT, 184 BPF_PROG_TYPE_LSM, 185 BPF_PROG_TYPE_SK_LOOKUP, 186 BPF_PROG_TYPE_SYSCALL, 187 }; 188 enum bpf_attach_type { 189 BPF_CGROUP_INET_INGRESS, 190 BPF_CGROUP_INET_EGRESS, 191 BPF_CGROUP_INET_SOCK_CREATE, 192 BPF_CGROUP_SOCK_OPS, 193 BPF_SK_SKB_STREAM_PARSER, 194 BPF_SK_SKB_STREAM_VERDICT, 195 BPF_CGROUP_DEVICE, 196 BPF_SK_MSG_VERDICT, 197 BPF_CGROUP_INET4_BIND, 198 BPF_CGROUP_INET6_BIND, 199 BPF_CGROUP_INET4_CONNECT, 200 BPF_CGROUP_INET6_CONNECT, 201 BPF_CGROUP_INET4_POST_BIND, 202 BPF_CGROUP_INET6_POST_BIND, 203 BPF_CGROUP_UDP4_SENDMSG, 204 BPF_CGROUP_UDP6_SENDMSG, 205 BPF_LIRC_MODE2, 206 BPF_FLOW_DISSECTOR, 207 BPF_CGROUP_SYSCTL, 208 BPF_CGROUP_UDP4_RECVMSG, 209 BPF_CGROUP_UDP6_RECVMSG, 210 BPF_CGROUP_GETSOCKOPT, 211 BPF_CGROUP_SETSOCKOPT, 212 BPF_TRACE_RAW_TP, 213 BPF_TRACE_FENTRY, 214 BPF_TRACE_FEXIT, 215 BPF_MODIFY_RETURN, 216 BPF_LSM_MAC, 217 BPF_TRACE_ITER, 218 BPF_CGROUP_INET4_GETPEERNAME, 219 BPF_CGROUP_INET6_GETPEERNAME, 220 BPF_CGROUP_INET4_GETSOCKNAME, 221 BPF_CGROUP_INET6_GETSOCKNAME, 222 BPF_XDP_DEVMAP, 223 BPF_CGROUP_INET_SOCK_RELEASE, 224 BPF_XDP_CPUMAP, 225 BPF_SK_LOOKUP, 226 BPF_XDP, 227 BPF_SK_SKB_VERDICT, 228 BPF_SK_REUSEPORT_SELECT, 229 BPF_SK_REUSEPORT_SELECT_OR_MIGRATE, 230 BPF_PERF_EVENT, 231 __MAX_BPF_ATTACH_TYPE 232 }; 233 #define MAX_BPF_ATTACH_TYPE __MAX_BPF_ATTACH_TYPE 234 enum bpf_link_type { 235 BPF_LINK_TYPE_UNSPEC = 0, 236 BPF_LINK_TYPE_RAW_TRACEPOINT = 1, 237 BPF_LINK_TYPE_TRACING = 2, 238 BPF_LINK_TYPE_CGROUP = 3, 239 BPF_LINK_TYPE_ITER = 4, 240 BPF_LINK_TYPE_NETNS = 5, 241 BPF_LINK_TYPE_XDP = 6, 242 BPF_LINK_TYPE_PERF_EVENT = 7, 243 MAX_BPF_LINK_TYPE, 244 }; 245 #define BPF_F_ALLOW_OVERRIDE (1U << 0) 246 #define BPF_F_ALLOW_MULTI (1U << 1) 247 #define BPF_F_REPLACE (1U << 2) 248 #define BPF_F_STRICT_ALIGNMENT (1U << 0) 249 #define BPF_F_ANY_ALIGNMENT (1U << 1) 250 #define BPF_F_TEST_RND_HI32 (1U << 2) 251 #define BPF_F_TEST_STATE_FREQ (1U << 3) 252 #define BPF_F_SLEEPABLE (1U << 4) 253 #define BPF_PSEUDO_MAP_FD 1 254 #define BPF_PSEUDO_MAP_IDX 5 255 #define BPF_PSEUDO_MAP_VALUE 2 256 #define BPF_PSEUDO_MAP_IDX_VALUE 6 257 #define BPF_PSEUDO_BTF_ID 3 258 #define BPF_PSEUDO_FUNC 4 259 #define BPF_PSEUDO_CALL 1 260 #define BPF_PSEUDO_KFUNC_CALL 2 261 enum { 262 BPF_ANY = 0, 263 BPF_NOEXIST = 1, 264 BPF_EXIST = 2, 265 BPF_F_LOCK = 4, 266 }; 267 enum { 268 BPF_F_NO_PREALLOC = (1U << 0), 269 BPF_F_NO_COMMON_LRU = (1U << 1), 270 BPF_F_NUMA_NODE = (1U << 2), 271 BPF_F_RDONLY = (1U << 3), 272 BPF_F_WRONLY = (1U << 4), 273 BPF_F_STACK_BUILD_ID = (1U << 5), 274 BPF_F_ZERO_SEED = (1U << 6), 275 BPF_F_RDONLY_PROG = (1U << 7), 276 BPF_F_WRONLY_PROG = (1U << 8), 277 BPF_F_CLONE = (1U << 9), 278 BPF_F_MMAPABLE = (1U << 10), 279 BPF_F_PRESERVE_ELEMS = (1U << 11), 280 BPF_F_INNER_MAP = (1U << 12), 281 }; 282 #define BPF_F_QUERY_EFFECTIVE (1U << 0) 283 #define BPF_F_TEST_RUN_ON_CPU (1U << 0) 284 enum bpf_stats_type { 285 BPF_STATS_RUN_TIME = 0, 286 }; 287 enum bpf_stack_build_id_status { 288 BPF_STACK_BUILD_ID_EMPTY = 0, 289 BPF_STACK_BUILD_ID_VALID = 1, 290 BPF_STACK_BUILD_ID_IP = 2, 291 }; 292 #define BPF_BUILD_ID_SIZE 20 293 struct bpf_stack_build_id { 294 __s32 status; 295 unsigned char build_id[BPF_BUILD_ID_SIZE]; 296 union { 297 __u64 offset; 298 __u64 ip; 299 }; 300 }; 301 #define BPF_OBJ_NAME_LEN 16U 302 union bpf_attr { 303 struct { 304 __u32 map_type; 305 __u32 key_size; 306 __u32 value_size; 307 __u32 max_entries; 308 __u32 map_flags; 309 __u32 inner_map_fd; 310 __u32 numa_node; 311 char map_name[BPF_OBJ_NAME_LEN]; 312 __u32 map_ifindex; 313 __u32 btf_fd; 314 __u32 btf_key_type_id; 315 __u32 btf_value_type_id; 316 __u32 btf_vmlinux_value_type_id; 317 __u64 map_extra; 318 }; 319 struct { 320 __u32 map_fd; 321 __aligned_u64 key; 322 union { 323 __aligned_u64 value; 324 __aligned_u64 next_key; 325 }; 326 __u64 flags; 327 }; 328 struct { 329 __aligned_u64 in_batch; 330 __aligned_u64 out_batch; 331 __aligned_u64 keys; 332 __aligned_u64 values; 333 __u32 count; 334 __u32 map_fd; 335 __u64 elem_flags; 336 __u64 flags; 337 } batch; 338 struct { 339 __u32 prog_type; 340 __u32 insn_cnt; 341 __aligned_u64 insns; 342 __aligned_u64 license; 343 __u32 log_level; 344 __u32 log_size; 345 __aligned_u64 log_buf; 346 __u32 kern_version; 347 __u32 prog_flags; 348 char prog_name[BPF_OBJ_NAME_LEN]; 349 __u32 prog_ifindex; 350 __u32 expected_attach_type; 351 __u32 prog_btf_fd; 352 __u32 func_info_rec_size; 353 __aligned_u64 func_info; 354 __u32 func_info_cnt; 355 __u32 line_info_rec_size; 356 __aligned_u64 line_info; 357 __u32 line_info_cnt; 358 __u32 attach_btf_id; 359 union { 360 __u32 attach_prog_fd; 361 __u32 attach_btf_obj_fd; 362 }; 363 __u32 core_relo_cnt; 364 __aligned_u64 fd_array; 365 __aligned_u64 core_relos; 366 __u32 core_relo_rec_size; 367 }; 368 struct { 369 __aligned_u64 pathname; 370 __u32 bpf_fd; 371 __u32 file_flags; 372 }; 373 struct { 374 __u32 target_fd; 375 __u32 attach_bpf_fd; 376 __u32 attach_type; 377 __u32 attach_flags; 378 __u32 replace_bpf_fd; 379 }; 380 struct { 381 __u32 prog_fd; 382 __u32 retval; 383 __u32 data_size_in; 384 __u32 data_size_out; 385 __aligned_u64 data_in; 386 __aligned_u64 data_out; 387 __u32 repeat; 388 __u32 duration; 389 __u32 ctx_size_in; 390 __u32 ctx_size_out; 391 __aligned_u64 ctx_in; 392 __aligned_u64 ctx_out; 393 __u32 flags; 394 __u32 cpu; 395 } test; 396 struct { 397 union { 398 __u32 start_id; 399 __u32 prog_id; 400 __u32 map_id; 401 __u32 btf_id; 402 __u32 link_id; 403 }; 404 __u32 next_id; 405 __u32 open_flags; 406 }; 407 struct { 408 __u32 bpf_fd; 409 __u32 info_len; 410 __aligned_u64 info; 411 } info; 412 struct { 413 __u32 target_fd; 414 __u32 attach_type; 415 __u32 query_flags; 416 __u32 attach_flags; 417 __aligned_u64 prog_ids; 418 __u32 prog_cnt; 419 } query; 420 struct { 421 __u64 name; 422 __u32 prog_fd; 423 } raw_tracepoint; 424 struct { 425 __aligned_u64 btf; 426 __aligned_u64 btf_log_buf; 427 __u32 btf_size; 428 __u32 btf_log_size; 429 __u32 btf_log_level; 430 }; 431 struct { 432 __u32 pid; 433 __u32 fd; 434 __u32 flags; 435 __u32 buf_len; 436 __aligned_u64 buf; 437 __u32 prog_id; 438 __u32 fd_type; 439 __u64 probe_offset; 440 __u64 probe_addr; 441 } task_fd_query; 442 struct { 443 __u32 prog_fd; 444 union { 445 __u32 target_fd; 446 __u32 target_ifindex; 447 }; 448 __u32 attach_type; 449 __u32 flags; 450 union { 451 __u32 target_btf_id; 452 struct { 453 __aligned_u64 iter_info; 454 __u32 iter_info_len; 455 }; 456 struct { 457 __u64 bpf_cookie; 458 } perf_event; 459 }; 460 } link_create; 461 struct { 462 __u32 link_fd; 463 __u32 new_prog_fd; 464 __u32 flags; 465 __u32 old_prog_fd; 466 } link_update; 467 struct { 468 __u32 link_fd; 469 } link_detach; 470 struct { 471 __u32 type; 472 } enable_stats; 473 struct { 474 __u32 link_fd; 475 __u32 flags; 476 } iter_create; 477 struct { 478 __u32 prog_fd; 479 __u32 map_fd; 480 __u32 flags; 481 } prog_bind_map; 482 } __attribute__((aligned(8))); 483 #define __BPF_FUNC_MAPPER(FN) FN(unspec), FN(map_lookup_elem), FN(map_update_elem), FN(map_delete_elem), FN(probe_read), FN(ktime_get_ns), FN(trace_printk), FN(get_prandom_u32), FN(get_smp_processor_id), FN(skb_store_bytes), FN(l3_csum_replace), FN(l4_csum_replace), FN(tail_call), FN(clone_redirect), FN(get_current_pid_tgid), FN(get_current_uid_gid), FN(get_current_comm), FN(get_cgroup_classid), FN(skb_vlan_push), FN(skb_vlan_pop), FN(skb_get_tunnel_key), FN(skb_set_tunnel_key), FN(perf_event_read), FN(redirect), FN(get_route_realm), FN(perf_event_output), FN(skb_load_bytes), FN(get_stackid), FN(csum_diff), FN(skb_get_tunnel_opt), FN(skb_set_tunnel_opt), FN(skb_change_proto), FN(skb_change_type), FN(skb_under_cgroup), FN(get_hash_recalc), FN(get_current_task), FN(probe_write_user), FN(current_task_under_cgroup), FN(skb_change_tail), FN(skb_pull_data), FN(csum_update), FN(set_hash_invalid), FN(get_numa_node_id), FN(skb_change_head), FN(xdp_adjust_head), FN(probe_read_str), FN(get_socket_cookie), FN(get_socket_uid), FN(set_hash), FN(setsockopt), FN(skb_adjust_room), FN(redirect_map), FN(sk_redirect_map), FN(sock_map_update), FN(xdp_adjust_meta), FN(perf_event_read_value), FN(perf_prog_read_value), FN(getsockopt), FN(override_return), FN(sock_ops_cb_flags_set), FN(msg_redirect_map), FN(msg_apply_bytes), FN(msg_cork_bytes), FN(msg_pull_data), FN(bind), FN(xdp_adjust_tail), FN(skb_get_xfrm_state), FN(get_stack), FN(skb_load_bytes_relative), FN(fib_lookup), FN(sock_hash_update), FN(msg_redirect_hash), FN(sk_redirect_hash), FN(lwt_push_encap), FN(lwt_seg6_store_bytes), FN(lwt_seg6_adjust_srh), FN(lwt_seg6_action), FN(rc_repeat), FN(rc_keydown), FN(skb_cgroup_id), FN(get_current_cgroup_id), FN(get_local_storage), FN(sk_select_reuseport), FN(skb_ancestor_cgroup_id), FN(sk_lookup_tcp), FN(sk_lookup_udp), FN(sk_release), FN(map_push_elem), FN(map_pop_elem), FN(map_peek_elem), FN(msg_push_data), FN(msg_pop_data), FN(rc_pointer_rel), FN(spin_lock), FN(spin_unlock), FN(sk_fullsock), FN(tcp_sock), FN(skb_ecn_set_ce), FN(get_listener_sock), FN(skc_lookup_tcp), FN(tcp_check_syncookie), FN(sysctl_get_name), FN(sysctl_get_current_value), FN(sysctl_get_new_value), FN(sysctl_set_new_value), FN(strtol), FN(strtoul), FN(sk_storage_get), FN(sk_storage_delete), FN(send_signal), FN(tcp_gen_syncookie), FN(skb_output), FN(probe_read_user), FN(probe_read_kernel), FN(probe_read_user_str), FN(probe_read_kernel_str), FN(tcp_send_ack), FN(send_signal_thread), FN(jiffies64), FN(read_branch_records), FN(get_ns_current_pid_tgid), FN(xdp_output), FN(get_netns_cookie), FN(get_current_ancestor_cgroup_id), FN(sk_assign), FN(ktime_get_boot_ns), FN(seq_printf), FN(seq_write), FN(sk_cgroup_id), FN(sk_ancestor_cgroup_id), FN(ringbuf_output), FN(ringbuf_reserve), FN(ringbuf_submit), FN(ringbuf_discard), FN(ringbuf_query), FN(csum_level), FN(skc_to_tcp6_sock), FN(skc_to_tcp_sock), FN(skc_to_tcp_timewait_sock), FN(skc_to_tcp_request_sock), FN(skc_to_udp6_sock), FN(get_task_stack), FN(load_hdr_opt), FN(store_hdr_opt), FN(reserve_hdr_opt), FN(inode_storage_get), FN(inode_storage_delete), FN(d_path), FN(copy_from_user), FN(snprintf_btf), FN(seq_printf_btf), FN(skb_cgroup_classid), FN(redirect_neigh), FN(per_cpu_ptr), FN(this_cpu_ptr), FN(redirect_peer), FN(task_storage_get), FN(task_storage_delete), FN(get_current_task_btf), FN(bprm_opts_set), FN(ktime_get_coarse_ns), FN(ima_inode_hash), FN(sock_from_file), FN(check_mtu), FN(for_each_map_elem), FN(snprintf), FN(sys_bpf), FN(btf_find_by_name_kind), FN(sys_close), FN(timer_init), FN(timer_set_callback), FN(timer_start), FN(timer_cancel), FN(get_func_ip), FN(get_attach_cookie), FN(task_pt_regs), FN(get_branch_snapshot), FN(trace_vprintk), FN(skc_to_unix_sock), FN(kallsyms_lookup_name), FN(find_vma), FN(loop), FN(strncmp), FN(get_func_arg), FN(get_func_ret), FN(get_func_arg_cnt), 484 #define __BPF_ENUM_FN(x) BPF_FUNC_ ##x 485 enum bpf_func_id { 486 __BPF_FUNC_MAPPER(__BPF_ENUM_FN) __BPF_FUNC_MAX_ID, 487 }; 488 #undef __BPF_ENUM_FN 489 enum { 490 BPF_F_RECOMPUTE_CSUM = (1ULL << 0), 491 BPF_F_INVALIDATE_HASH = (1ULL << 1), 492 }; 493 enum { 494 BPF_F_HDR_FIELD_MASK = 0xfULL, 495 }; 496 enum { 497 BPF_F_PSEUDO_HDR = (1ULL << 4), 498 BPF_F_MARK_MANGLED_0 = (1ULL << 5), 499 BPF_F_MARK_ENFORCE = (1ULL << 6), 500 }; 501 enum { 502 BPF_F_INGRESS = (1ULL << 0), 503 }; 504 enum { 505 BPF_F_TUNINFO_IPV6 = (1ULL << 0), 506 }; 507 enum { 508 BPF_F_SKIP_FIELD_MASK = 0xffULL, 509 BPF_F_USER_STACK = (1ULL << 8), 510 BPF_F_FAST_STACK_CMP = (1ULL << 9), 511 BPF_F_REUSE_STACKID = (1ULL << 10), 512 BPF_F_USER_BUILD_ID = (1ULL << 11), 513 }; 514 enum { 515 BPF_F_ZERO_CSUM_TX = (1ULL << 1), 516 BPF_F_DONT_FRAGMENT = (1ULL << 2), 517 BPF_F_SEQ_NUMBER = (1ULL << 3), 518 }; 519 enum { 520 BPF_F_INDEX_MASK = 0xffffffffULL, 521 BPF_F_CURRENT_CPU = BPF_F_INDEX_MASK, 522 BPF_F_CTXLEN_MASK = (0xfffffULL << 32), 523 }; 524 enum { 525 BPF_F_CURRENT_NETNS = (- 1L), 526 }; 527 enum { 528 BPF_CSUM_LEVEL_QUERY, 529 BPF_CSUM_LEVEL_INC, 530 BPF_CSUM_LEVEL_DEC, 531 BPF_CSUM_LEVEL_RESET, 532 }; 533 enum { 534 BPF_F_ADJ_ROOM_FIXED_GSO = (1ULL << 0), 535 BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = (1ULL << 1), 536 BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = (1ULL << 2), 537 BPF_F_ADJ_ROOM_ENCAP_L4_GRE = (1ULL << 3), 538 BPF_F_ADJ_ROOM_ENCAP_L4_UDP = (1ULL << 4), 539 BPF_F_ADJ_ROOM_NO_CSUM_RESET = (1ULL << 5), 540 BPF_F_ADJ_ROOM_ENCAP_L2_ETH = (1ULL << 6), 541 }; 542 enum { 543 BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff, 544 BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 56, 545 }; 546 #define BPF_F_ADJ_ROOM_ENCAP_L2(len) (((__u64) len & BPF_ADJ_ROOM_ENCAP_L2_MASK) << BPF_ADJ_ROOM_ENCAP_L2_SHIFT) 547 enum { 548 BPF_F_SYSCTL_BASE_NAME = (1ULL << 0), 549 }; 550 enum { 551 BPF_LOCAL_STORAGE_GET_F_CREATE = (1ULL << 0), 552 BPF_SK_STORAGE_GET_F_CREATE = BPF_LOCAL_STORAGE_GET_F_CREATE, 553 }; 554 enum { 555 BPF_F_GET_BRANCH_RECORDS_SIZE = (1ULL << 0), 556 }; 557 enum { 558 BPF_RB_NO_WAKEUP = (1ULL << 0), 559 BPF_RB_FORCE_WAKEUP = (1ULL << 1), 560 }; 561 enum { 562 BPF_RB_AVAIL_DATA = 0, 563 BPF_RB_RING_SIZE = 1, 564 BPF_RB_CONS_POS = 2, 565 BPF_RB_PROD_POS = 3, 566 }; 567 enum { 568 BPF_RINGBUF_BUSY_BIT = (1U << 31), 569 BPF_RINGBUF_DISCARD_BIT = (1U << 30), 570 BPF_RINGBUF_HDR_SZ = 8, 571 }; 572 enum { 573 BPF_SK_LOOKUP_F_REPLACE = (1ULL << 0), 574 BPF_SK_LOOKUP_F_NO_REUSEPORT = (1ULL << 1), 575 }; 576 enum bpf_adj_room_mode { 577 BPF_ADJ_ROOM_NET, 578 BPF_ADJ_ROOM_MAC, 579 }; 580 enum bpf_hdr_start_off { 581 BPF_HDR_START_MAC, 582 BPF_HDR_START_NET, 583 }; 584 enum bpf_lwt_encap_mode { 585 BPF_LWT_ENCAP_SEG6, 586 BPF_LWT_ENCAP_SEG6_INLINE, 587 BPF_LWT_ENCAP_IP, 588 }; 589 enum { 590 BPF_F_BPRM_SECUREEXEC = (1ULL << 0), 591 }; 592 enum { 593 BPF_F_BROADCAST = (1ULL << 3), 594 BPF_F_EXCLUDE_INGRESS = (1ULL << 4), 595 }; 596 #define __bpf_md_ptr(type,name) union { type name; __u64 : 64; \ 597 } __attribute__((aligned(8))) 598 struct __sk_buff { 599 __u32 len; 600 __u32 pkt_type; 601 __u32 mark; 602 __u32 queue_mapping; 603 __u32 protocol; 604 __u32 vlan_present; 605 __u32 vlan_tci; 606 __u32 vlan_proto; 607 __u32 priority; 608 __u32 ingress_ifindex; 609 __u32 ifindex; 610 __u32 tc_index; 611 __u32 cb[5]; 612 __u32 hash; 613 __u32 tc_classid; 614 __u32 data; 615 __u32 data_end; 616 __u32 napi_id; 617 __u32 family; 618 __u32 remote_ip4; 619 __u32 local_ip4; 620 __u32 remote_ip6[4]; 621 __u32 local_ip6[4]; 622 __u32 remote_port; 623 __u32 local_port; 624 __u32 data_meta; 625 __bpf_md_ptr(struct bpf_flow_keys *, flow_keys); 626 __u64 tstamp; 627 __u32 wire_len; 628 __u32 gso_segs; 629 __bpf_md_ptr(struct bpf_sock *, sk); 630 __u32 gso_size; 631 __u32 : 32; 632 __u64 hwtstamp; 633 }; 634 struct bpf_tunnel_key { 635 __u32 tunnel_id; 636 union { 637 __u32 remote_ipv4; 638 __u32 remote_ipv6[4]; 639 }; 640 __u8 tunnel_tos; 641 __u8 tunnel_ttl; 642 __u16 tunnel_ext; 643 __u32 tunnel_label; 644 }; 645 struct bpf_xfrm_state { 646 __u32 reqid; 647 __u32 spi; 648 __u16 family; 649 __u16 ext; 650 union { 651 __u32 remote_ipv4; 652 __u32 remote_ipv6[4]; 653 }; 654 }; 655 enum bpf_ret_code { 656 BPF_OK = 0, 657 BPF_DROP = 2, 658 BPF_REDIRECT = 7, 659 BPF_LWT_REROUTE = 128, 660 }; 661 struct bpf_sock { 662 __u32 bound_dev_if; 663 __u32 family; 664 __u32 type; 665 __u32 protocol; 666 __u32 mark; 667 __u32 priority; 668 __u32 src_ip4; 669 __u32 src_ip6[4]; 670 __u32 src_port; 671 __u32 dst_port; 672 __u32 dst_ip4; 673 __u32 dst_ip6[4]; 674 __u32 state; 675 __s32 rx_queue_mapping; 676 }; 677 struct bpf_tcp_sock { 678 __u32 snd_cwnd; 679 __u32 srtt_us; 680 __u32 rtt_min; 681 __u32 snd_ssthresh; 682 __u32 rcv_nxt; 683 __u32 snd_nxt; 684 __u32 snd_una; 685 __u32 mss_cache; 686 __u32 ecn_flags; 687 __u32 rate_delivered; 688 __u32 rate_interval_us; 689 __u32 packets_out; 690 __u32 retrans_out; 691 __u32 total_retrans; 692 __u32 segs_in; 693 __u32 data_segs_in; 694 __u32 segs_out; 695 __u32 data_segs_out; 696 __u32 lost_out; 697 __u32 sacked_out; 698 __u64 bytes_received; 699 __u64 bytes_acked; 700 __u32 dsack_dups; 701 __u32 delivered; 702 __u32 delivered_ce; 703 __u32 icsk_retransmits; 704 }; 705 struct bpf_sock_tuple { 706 union { 707 struct { 708 __be32 saddr; 709 __be32 daddr; 710 __be16 sport; 711 __be16 dport; 712 } ipv4; 713 struct { 714 __be32 saddr[4]; 715 __be32 daddr[4]; 716 __be16 sport; 717 __be16 dport; 718 } ipv6; 719 }; 720 }; 721 struct bpf_xdp_sock { 722 __u32 queue_id; 723 }; 724 #define XDP_PACKET_HEADROOM 256 725 enum xdp_action { 726 XDP_ABORTED = 0, 727 XDP_DROP, 728 XDP_PASS, 729 XDP_TX, 730 XDP_REDIRECT, 731 }; 732 struct xdp_md { 733 __u32 data; 734 __u32 data_end; 735 __u32 data_meta; 736 __u32 ingress_ifindex; 737 __u32 rx_queue_index; 738 __u32 egress_ifindex; 739 }; 740 struct bpf_devmap_val { 741 __u32 ifindex; 742 union { 743 int fd; 744 __u32 id; 745 } bpf_prog; 746 }; 747 struct bpf_cpumap_val { 748 __u32 qsize; 749 union { 750 int fd; 751 __u32 id; 752 } bpf_prog; 753 }; 754 enum sk_action { 755 SK_DROP = 0, 756 SK_PASS, 757 }; 758 struct sk_msg_md { 759 __bpf_md_ptr(void *, data); 760 __bpf_md_ptr(void *, data_end); 761 __u32 family; 762 __u32 remote_ip4; 763 __u32 local_ip4; 764 __u32 remote_ip6[4]; 765 __u32 local_ip6[4]; 766 __u32 remote_port; 767 __u32 local_port; 768 __u32 size; 769 __bpf_md_ptr(struct bpf_sock *, sk); 770 }; 771 struct sk_reuseport_md { 772 __bpf_md_ptr(void *, data); 773 __bpf_md_ptr(void *, data_end); 774 __u32 len; 775 __u32 eth_protocol; 776 __u32 ip_protocol; 777 __u32 bind_inany; 778 __u32 hash; 779 __bpf_md_ptr(struct bpf_sock *, sk); 780 __bpf_md_ptr(struct bpf_sock *, migrating_sk); 781 }; 782 #define BPF_TAG_SIZE 8 783 struct bpf_prog_info { 784 __u32 type; 785 __u32 id; 786 __u8 tag[BPF_TAG_SIZE]; 787 __u32 jited_prog_len; 788 __u32 xlated_prog_len; 789 __aligned_u64 jited_prog_insns; 790 __aligned_u64 xlated_prog_insns; 791 __u64 load_time; 792 __u32 created_by_uid; 793 __u32 nr_map_ids; 794 __aligned_u64 map_ids; 795 char name[BPF_OBJ_NAME_LEN]; 796 __u32 ifindex; 797 __u32 gpl_compatible : 1; 798 __u32 : 31; 799 __u64 netns_dev; 800 __u64 netns_ino; 801 __u32 nr_jited_ksyms; 802 __u32 nr_jited_func_lens; 803 __aligned_u64 jited_ksyms; 804 __aligned_u64 jited_func_lens; 805 __u32 btf_id; 806 __u32 func_info_rec_size; 807 __aligned_u64 func_info; 808 __u32 nr_func_info; 809 __u32 nr_line_info; 810 __aligned_u64 line_info; 811 __aligned_u64 jited_line_info; 812 __u32 nr_jited_line_info; 813 __u32 line_info_rec_size; 814 __u32 jited_line_info_rec_size; 815 __u32 nr_prog_tags; 816 __aligned_u64 prog_tags; 817 __u64 run_time_ns; 818 __u64 run_cnt; 819 __u64 recursion_misses; 820 __u32 verified_insns; 821 } __attribute__((aligned(8))); 822 struct bpf_map_info { 823 __u32 type; 824 __u32 id; 825 __u32 key_size; 826 __u32 value_size; 827 __u32 max_entries; 828 __u32 map_flags; 829 char name[BPF_OBJ_NAME_LEN]; 830 __u32 ifindex; 831 __u32 btf_vmlinux_value_type_id; 832 __u64 netns_dev; 833 __u64 netns_ino; 834 __u32 btf_id; 835 __u32 btf_key_type_id; 836 __u32 btf_value_type_id; 837 __u32 : 32; 838 __u64 map_extra; 839 } __attribute__((aligned(8))); 840 struct bpf_btf_info { 841 __aligned_u64 btf; 842 __u32 btf_size; 843 __u32 id; 844 __aligned_u64 name; 845 __u32 name_len; 846 __u32 kernel_btf; 847 } __attribute__((aligned(8))); 848 struct bpf_link_info { 849 __u32 type; 850 __u32 id; 851 __u32 prog_id; 852 union { 853 struct { 854 __aligned_u64 tp_name; 855 __u32 tp_name_len; 856 } raw_tracepoint; 857 struct { 858 __u32 attach_type; 859 __u32 target_obj_id; 860 __u32 target_btf_id; 861 } tracing; 862 struct { 863 __u64 cgroup_id; 864 __u32 attach_type; 865 } cgroup; 866 struct { 867 __aligned_u64 target_name; 868 __u32 target_name_len; 869 union { 870 struct { 871 __u32 map_id; 872 } map; 873 }; 874 } iter; 875 struct { 876 __u32 netns_ino; 877 __u32 attach_type; 878 } netns; 879 struct { 880 __u32 ifindex; 881 } xdp; 882 }; 883 } __attribute__((aligned(8))); 884 struct bpf_sock_addr { 885 __u32 user_family; 886 __u32 user_ip4; 887 __u32 user_ip6[4]; 888 __u32 user_port; 889 __u32 family; 890 __u32 type; 891 __u32 protocol; 892 __u32 msg_src_ip4; 893 __u32 msg_src_ip6[4]; 894 __bpf_md_ptr(struct bpf_sock *, sk); 895 }; 896 struct bpf_sock_ops { 897 __u32 op; 898 union { 899 __u32 args[4]; 900 __u32 reply; 901 __u32 replylong[4]; 902 }; 903 __u32 family; 904 __u32 remote_ip4; 905 __u32 local_ip4; 906 __u32 remote_ip6[4]; 907 __u32 local_ip6[4]; 908 __u32 remote_port; 909 __u32 local_port; 910 __u32 is_fullsock; 911 __u32 snd_cwnd; 912 __u32 srtt_us; 913 __u32 bpf_sock_ops_cb_flags; 914 __u32 state; 915 __u32 rtt_min; 916 __u32 snd_ssthresh; 917 __u32 rcv_nxt; 918 __u32 snd_nxt; 919 __u32 snd_una; 920 __u32 mss_cache; 921 __u32 ecn_flags; 922 __u32 rate_delivered; 923 __u32 rate_interval_us; 924 __u32 packets_out; 925 __u32 retrans_out; 926 __u32 total_retrans; 927 __u32 segs_in; 928 __u32 data_segs_in; 929 __u32 segs_out; 930 __u32 data_segs_out; 931 __u32 lost_out; 932 __u32 sacked_out; 933 __u32 sk_txhash; 934 __u64 bytes_received; 935 __u64 bytes_acked; 936 __bpf_md_ptr(struct bpf_sock *, sk); 937 __bpf_md_ptr(void *, skb_data); 938 __bpf_md_ptr(void *, skb_data_end); 939 __u32 skb_len; 940 __u32 skb_tcp_flags; 941 }; 942 enum { 943 BPF_SOCK_OPS_RTO_CB_FLAG = (1 << 0), 944 BPF_SOCK_OPS_RETRANS_CB_FLAG = (1 << 1), 945 BPF_SOCK_OPS_STATE_CB_FLAG = (1 << 2), 946 BPF_SOCK_OPS_RTT_CB_FLAG = (1 << 3), 947 BPF_SOCK_OPS_PARSE_ALL_HDR_OPT_CB_FLAG = (1 << 4), 948 BPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG = (1 << 5), 949 BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG = (1 << 6), 950 BPF_SOCK_OPS_ALL_CB_FLAGS = 0x7F, 951 }; 952 enum { 953 BPF_SOCK_OPS_VOID, 954 BPF_SOCK_OPS_TIMEOUT_INIT, 955 BPF_SOCK_OPS_RWND_INIT, 956 BPF_SOCK_OPS_TCP_CONNECT_CB, 957 BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB, 958 BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB, 959 BPF_SOCK_OPS_NEEDS_ECN, 960 BPF_SOCK_OPS_BASE_RTT, 961 BPF_SOCK_OPS_RTO_CB, 962 BPF_SOCK_OPS_RETRANS_CB, 963 BPF_SOCK_OPS_STATE_CB, 964 BPF_SOCK_OPS_TCP_LISTEN_CB, 965 BPF_SOCK_OPS_RTT_CB, 966 BPF_SOCK_OPS_PARSE_HDR_OPT_CB, 967 BPF_SOCK_OPS_HDR_OPT_LEN_CB, 968 BPF_SOCK_OPS_WRITE_HDR_OPT_CB, 969 }; 970 enum { 971 BPF_TCP_ESTABLISHED = 1, 972 BPF_TCP_SYN_SENT, 973 BPF_TCP_SYN_RECV, 974 BPF_TCP_FIN_WAIT1, 975 BPF_TCP_FIN_WAIT2, 976 BPF_TCP_TIME_WAIT, 977 BPF_TCP_CLOSE, 978 BPF_TCP_CLOSE_WAIT, 979 BPF_TCP_LAST_ACK, 980 BPF_TCP_LISTEN, 981 BPF_TCP_CLOSING, 982 BPF_TCP_NEW_SYN_RECV, 983 BPF_TCP_MAX_STATES 984 }; 985 enum { 986 TCP_BPF_IW = 1001, 987 TCP_BPF_SNDCWND_CLAMP = 1002, 988 TCP_BPF_DELACK_MAX = 1003, 989 TCP_BPF_RTO_MIN = 1004, 990 TCP_BPF_SYN = 1005, 991 TCP_BPF_SYN_IP = 1006, 992 TCP_BPF_SYN_MAC = 1007, 993 }; 994 enum { 995 BPF_LOAD_HDR_OPT_TCP_SYN = (1ULL << 0), 996 }; 997 enum { 998 BPF_WRITE_HDR_TCP_CURRENT_MSS = 1, 999 BPF_WRITE_HDR_TCP_SYNACK_COOKIE = 2, 1000 }; 1001 struct bpf_perf_event_value { 1002 __u64 counter; 1003 __u64 enabled; 1004 __u64 running; 1005 }; 1006 enum { 1007 BPF_DEVCG_ACC_MKNOD = (1ULL << 0), 1008 BPF_DEVCG_ACC_READ = (1ULL << 1), 1009 BPF_DEVCG_ACC_WRITE = (1ULL << 2), 1010 }; 1011 enum { 1012 BPF_DEVCG_DEV_BLOCK = (1ULL << 0), 1013 BPF_DEVCG_DEV_CHAR = (1ULL << 1), 1014 }; 1015 struct bpf_cgroup_dev_ctx { 1016 __u32 access_type; 1017 __u32 major; 1018 __u32 minor; 1019 }; 1020 struct bpf_raw_tracepoint_args { 1021 __u64 args[0]; 1022 }; 1023 enum { 1024 BPF_FIB_LOOKUP_DIRECT = (1U << 0), 1025 BPF_FIB_LOOKUP_OUTPUT = (1U << 1), 1026 }; 1027 enum { 1028 BPF_FIB_LKUP_RET_SUCCESS, 1029 BPF_FIB_LKUP_RET_BLACKHOLE, 1030 BPF_FIB_LKUP_RET_UNREACHABLE, 1031 BPF_FIB_LKUP_RET_PROHIBIT, 1032 BPF_FIB_LKUP_RET_NOT_FWDED, 1033 BPF_FIB_LKUP_RET_FWD_DISABLED, 1034 BPF_FIB_LKUP_RET_UNSUPP_LWT, 1035 BPF_FIB_LKUP_RET_NO_NEIGH, 1036 BPF_FIB_LKUP_RET_FRAG_NEEDED, 1037 }; 1038 struct bpf_fib_lookup { 1039 __u8 family; 1040 __u8 l4_protocol; 1041 __be16 sport; 1042 __be16 dport; 1043 union { 1044 __u16 tot_len; 1045 __u16 mtu_result; 1046 }; 1047 __u32 ifindex; 1048 union { 1049 __u8 tos; 1050 __be32 flowinfo; 1051 __u32 rt_metric; 1052 }; 1053 union { 1054 __be32 ipv4_src; 1055 __u32 ipv6_src[4]; 1056 }; 1057 union { 1058 __be32 ipv4_dst; 1059 __u32 ipv6_dst[4]; 1060 }; 1061 __be16 h_vlan_proto; 1062 __be16 h_vlan_TCI; 1063 __u8 smac[6]; 1064 __u8 dmac[6]; 1065 }; 1066 struct bpf_redir_neigh { 1067 __u32 nh_family; 1068 union { 1069 __be32 ipv4_nh; 1070 __u32 ipv6_nh[4]; 1071 }; 1072 }; 1073 enum bpf_check_mtu_flags { 1074 BPF_MTU_CHK_SEGS = (1U << 0), 1075 }; 1076 enum bpf_check_mtu_ret { 1077 BPF_MTU_CHK_RET_SUCCESS, 1078 BPF_MTU_CHK_RET_FRAG_NEEDED, 1079 BPF_MTU_CHK_RET_SEGS_TOOBIG, 1080 }; 1081 enum bpf_task_fd_type { 1082 BPF_FD_TYPE_RAW_TRACEPOINT, 1083 BPF_FD_TYPE_TRACEPOINT, 1084 BPF_FD_TYPE_KPROBE, 1085 BPF_FD_TYPE_KRETPROBE, 1086 BPF_FD_TYPE_UPROBE, 1087 BPF_FD_TYPE_URETPROBE, 1088 }; 1089 enum { 1090 BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = (1U << 0), 1091 BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = (1U << 1), 1092 BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = (1U << 2), 1093 }; 1094 struct bpf_flow_keys { 1095 __u16 nhoff; 1096 __u16 thoff; 1097 __u16 addr_proto; 1098 __u8 is_frag; 1099 __u8 is_first_frag; 1100 __u8 is_encap; 1101 __u8 ip_proto; 1102 __be16 n_proto; 1103 __be16 sport; 1104 __be16 dport; 1105 union { 1106 struct { 1107 __be32 ipv4_src; 1108 __be32 ipv4_dst; 1109 }; 1110 struct { 1111 __u32 ipv6_src[4]; 1112 __u32 ipv6_dst[4]; 1113 }; 1114 }; 1115 __u32 flags; 1116 __be32 flow_label; 1117 }; 1118 struct bpf_func_info { 1119 __u32 insn_off; 1120 __u32 type_id; 1121 }; 1122 #define BPF_LINE_INFO_LINE_NUM(line_col) ((line_col) >> 10) 1123 #define BPF_LINE_INFO_LINE_COL(line_col) ((line_col) & 0x3ff) 1124 struct bpf_line_info { 1125 __u32 insn_off; 1126 __u32 file_name_off; 1127 __u32 line_off; 1128 __u32 line_col; 1129 }; 1130 struct bpf_spin_lock { 1131 __u32 val; 1132 }; 1133 struct bpf_timer { 1134 __u64 : 64; 1135 __u64 : 64; 1136 } __attribute__((aligned(8))); 1137 struct bpf_sysctl { 1138 __u32 write; 1139 __u32 file_pos; 1140 }; 1141 struct bpf_sockopt { 1142 __bpf_md_ptr(struct bpf_sock *, sk); 1143 __bpf_md_ptr(void *, optval); 1144 __bpf_md_ptr(void *, optval_end); 1145 __s32 level; 1146 __s32 optname; 1147 __s32 optlen; 1148 __s32 retval; 1149 }; 1150 struct bpf_pidns_info { 1151 __u32 pid; 1152 __u32 tgid; 1153 }; 1154 struct bpf_sk_lookup { 1155 union { 1156 __bpf_md_ptr(struct bpf_sock *, sk); 1157 __u64 cookie; 1158 }; 1159 __u32 family; 1160 __u32 protocol; 1161 __u32 remote_ip4; 1162 __u32 remote_ip6[4]; 1163 __u32 remote_port; 1164 __u32 local_ip4; 1165 __u32 local_ip6[4]; 1166 __u32 local_port; 1167 __u32 ingress_ifindex; 1168 }; 1169 struct btf_ptr { 1170 void * ptr; 1171 __u32 type_id; 1172 __u32 flags; 1173 }; 1174 enum { 1175 BTF_F_COMPACT = (1ULL << 0), 1176 BTF_F_NONAME = (1ULL << 1), 1177 BTF_F_PTR_RAW = (1ULL << 2), 1178 BTF_F_ZERO = (1ULL << 3), 1179 }; 1180 enum bpf_core_relo_kind { 1181 BPF_CORE_FIELD_BYTE_OFFSET = 0, 1182 BPF_CORE_FIELD_BYTE_SIZE = 1, 1183 BPF_CORE_FIELD_EXISTS = 2, 1184 BPF_CORE_FIELD_SIGNED = 3, 1185 BPF_CORE_FIELD_LSHIFT_U64 = 4, 1186 BPF_CORE_FIELD_RSHIFT_U64 = 5, 1187 BPF_CORE_TYPE_ID_LOCAL = 6, 1188 BPF_CORE_TYPE_ID_TARGET = 7, 1189 BPF_CORE_TYPE_EXISTS = 8, 1190 BPF_CORE_TYPE_SIZE = 9, 1191 BPF_CORE_ENUMVAL_EXISTS = 10, 1192 BPF_CORE_ENUMVAL_VALUE = 11, 1193 }; 1194 struct bpf_core_relo { 1195 __u32 insn_off; 1196 __u32 type_id; 1197 __u32 access_str_off; 1198 enum bpf_core_relo_kind kind; 1199 }; 1200 #endif 1201