aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux/bpf.txt
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-09-11 18:44:54 +0200
committerDmitry Vyukov <dvyukov@google.com>2018-09-11 18:44:54 +0200
commit3c88136c8a2afbcdb1be19786c0b66837f5f7cd6 (patch)
tree5f9ddf747270917fdbd660485f136cace4f85670 /sys/linux/bpf.txt
parent4ae17b1f4c91cfe2de0b2b51b67622dd0ac366af (diff)
sys/linux: add btf descriptions
Add some new bpf descriptions, most notably btf. Not perfect, but something.
Diffstat (limited to 'sys/linux/bpf.txt')
-rw-r--r--sys/linux/bpf.txt75
1 files changed, 73 insertions, 2 deletions
diff --git a/sys/linux/bpf.txt b/sys/linux/bpf.txt
index 3a7ef85a4..ea0de3c82 100644
--- a/sys/linux/bpf.txt
+++ b/sys/linux/bpf.txt
@@ -5,12 +5,16 @@
# net.core.bpf_jit_enable = { 0, 1, 2 }
# net.core.bpf_jit_harden = { 0, 1, 2 }
-include <linux/bpf.h>
+include <uapi/linux/bpf.h>
+include <uapi/linux/btf.h>
resource fd_bpf_map[fd]: BPF_PSEUDO_MAP_FD
resource fd_bpf_prog[fd]
+resource fd_rawtp[fd_perf_base]
+resource fd_btf[fd]
resource bpf_prog_id[int32]: 0, -1
resource bpf_map_id[int32]: 0, -1
+resource bpf_btf_id[int32]: 0, -1
bpf$MAP_CREATE(cmd const[BPF_MAP_CREATE], arg ptr[in, bpf_map_create_arg], size len[arg]) fd_bpf_map
bpf$MAP_LOOKUP_ELEM(cmd const[BPF_MAP_LOOKUP_ELEM], arg ptr[in, bpf_map_lookup_arg], size len[arg])
@@ -31,8 +35,12 @@ bpf$BPF_PROG_GET_FD_BY_ID(cmd const[BPF_PROG_GET_FD_BY_ID], arg ptr[in, bpf_prog
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
bpf$BPF_GET_PROG_INFO(cmd const[BPF_OBJ_GET_INFO_BY_FD], arg ptr[in, bpf_get_prog_info_arg], size len[arg])
bpf$BPF_GET_MAP_INFO(cmd const[BPF_OBJ_GET_INFO_BY_FD], arg ptr[in, bpf_get_map_info_arg], size len[arg])
+bpf$BPF_GET_BTF_INFO(cmd const[BPF_OBJ_GET_INFO_BY_FD], arg ptr[in, bpf_get_btf_info_arg], size len[arg])
bpf$BPF_PROG_QUERY(cmd const[BPF_PROG_QUERY], arg ptr[in, bpf_prog_query], size len[arg])
-bpf$BPF_RAW_TRACEPOINT_OPEN(cmd const[BPF_RAW_TRACEPOINT_OPEN], arg ptr[in, bpf_raw_tracepoint], size len[arg]) fd
+bpf$BPF_RAW_TRACEPOINT_OPEN(cmd const[BPF_RAW_TRACEPOINT_OPEN], arg ptr[in, bpf_raw_tracepoint], size len[arg]) fd_rawtp
+bpf$BPF_BTF_LOAD(cmd const[BPF_BTF_LOAD], arg ptr[in, bpf_btf_load], size len[arg]) fd_btf
+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
+bpf$BPF_TASK_FD_QUERY(cmd const[BPF_TASK_FD_QUERY], arg ptr[inout, bpf_task_fd_query], size len[arg])
bpf_map_create_arg {
type flags[bpf_map_type, int32]
@@ -331,6 +339,18 @@ bpf_map_info {
name array[int8, BPF_OBJ_NAME_LEN]
} [align_8]
+bpf_get_btf_info_arg {
+ btf fd_btf
+ len len[info, int32]
+ info ptr64[inout, bpf_btf_info]
+}
+
+bpf_btf_info {
+ btf ptr64[out, array[int8]]
+ btf_size bytesize[btf, int32]
+ id bpf_btf_id[opt]
+} [align_8]
+
bpf_prog_query {
target_fd fd_cgroup
attach_type flags[bpf_prog_query_attach_type, int32]
@@ -345,6 +365,57 @@ bpf_raw_tracepoint {
prog_fd fd_bpf_prog
} [align_8]
+bpf_btf_load {
+ btf ptr64[in, bpf_btf_program]
+ btf_log_buf ptr64[out, array[int8]]
+ btf_size bytesize[btf, int32]
+ btf_log_size bytesize[btf_log_buf, int32]
+ btf_log_level bool32
+} [align_8]
+
+bpf_btf_program {
+ header btf_header
+ strings bpf_btf_strings
+} [packed]
+
+btf_header {
+ magic const[BTF_MAGIC, int16]
+ version const[BTF_VERSION, int8]
+ flags const[0, int8]
+ hdr_len const[0x18, int32]
+ type_off const[0, int32]
+ type_len bytesize[types, int32]
+ str_off bytesize[parent, int32]
+# TODO: should be bytesize[bpf_btf_program.strings]
+ str_len int32
+ types bpf_btf_types
+}
+
+bpf_btf_types {
+# This consists of some metas and some types (see btf_check_all_metas and btf_check_all_types).
+ data array[int8]
+} [align_4]
+
+bpf_btf_strings {
+ z0 const[0, int8]
+ data array[int8]
+ z1 const[0, int8]
+} [packed]
+
+bpf_task_fd_query {
+# TODO: part of fields are input here and part are output. We can't express this yet (#245).
+ pid pid
+ fd fd_perf_base
+ flags const[0, int32]
+ buf_len bytesize[buf, int32]
+ buf ptr64[in, string]
+# These are output fields:
+ prog_id bpf_prog_id[opt]
+ fd_type const[0, int32]
+ probe_offset const[0, int64]
+ probe_addr const[0, int64]
+}
+
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_flags = BPF_ANY, BPF_NOEXIST, BPF_EXIST
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