diff options
| author | Martin KaFai Lau <kafai@fb.com> | 2018-04-18 18:56:04 -0400 |
|---|---|---|
| committer | Daniel Borkmann <daniel@iogearbox.net> | 2018-04-19 15:46:25 -0400 |
| commit | 3bd86a8409fc5a87ea415087b0c30ab42818e7c8 (patch) | |
| tree | 53edfaaac3ed458738bb22052a8d175f4998bb43 /tools/include | |
| parent | a26ca7c982cb576749cbdd01e8ecde4bf010d60a (diff) | |
bpf: btf: Sync bpf.h and btf.h to tools/
This patch sync up the bpf.h and btf.h to tools/
Signed-off-by: Martin KaFai Lau <kafai@fb.com>
Acked-by: Alexei Starovoitov <ast@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'tools/include')
| -rw-r--r-- | tools/include/uapi/linux/bpf.h | 12 | ||||
| -rw-r--r-- | tools/include/uapi/linux/btf.h | 130 |
2 files changed, 142 insertions, 0 deletions
diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h index 56bf493ba7ed..7f7fbb9d0253 100644 --- a/tools/include/uapi/linux/bpf.h +++ b/tools/include/uapi/linux/bpf.h | |||
| @@ -95,6 +95,7 @@ enum bpf_cmd { | |||
| 95 | BPF_OBJ_GET_INFO_BY_FD, | 95 | BPF_OBJ_GET_INFO_BY_FD, |
| 96 | BPF_PROG_QUERY, | 96 | BPF_PROG_QUERY, |
| 97 | BPF_RAW_TRACEPOINT_OPEN, | 97 | BPF_RAW_TRACEPOINT_OPEN, |
| 98 | BPF_BTF_LOAD, | ||
| 98 | }; | 99 | }; |
| 99 | 100 | ||
| 100 | enum bpf_map_type { | 101 | enum bpf_map_type { |
| @@ -279,6 +280,9 @@ union bpf_attr { | |||
| 279 | */ | 280 | */ |
| 280 | char map_name[BPF_OBJ_NAME_LEN]; | 281 | char map_name[BPF_OBJ_NAME_LEN]; |
| 281 | __u32 map_ifindex; /* ifindex of netdev to create on */ | 282 | __u32 map_ifindex; /* ifindex of netdev to create on */ |
| 283 | __u32 btf_fd; /* fd pointing to a BTF type data */ | ||
| 284 | __u32 btf_key_id; /* BTF type_id of the key */ | ||
| 285 | __u32 btf_value_id; /* BTF type_id of the value */ | ||
| 282 | }; | 286 | }; |
| 283 | 287 | ||
| 284 | struct { /* anonymous struct used by BPF_MAP_*_ELEM commands */ | 288 | struct { /* anonymous struct used by BPF_MAP_*_ELEM commands */ |
| @@ -363,6 +367,14 @@ union bpf_attr { | |||
| 363 | __u64 name; | 367 | __u64 name; |
| 364 | __u32 prog_fd; | 368 | __u32 prog_fd; |
| 365 | } raw_tracepoint; | 369 | } raw_tracepoint; |
| 370 | |||
| 371 | struct { /* anonymous struct for BPF_BTF_LOAD */ | ||
| 372 | __aligned_u64 btf; | ||
| 373 | __aligned_u64 btf_log_buf; | ||
| 374 | __u32 btf_size; | ||
| 375 | __u32 btf_log_size; | ||
| 376 | __u32 btf_log_level; | ||
| 377 | }; | ||
| 366 | } __attribute__((aligned(8))); | 378 | } __attribute__((aligned(8))); |
| 367 | 379 | ||
| 368 | /* BPF helper function descriptions: | 380 | /* BPF helper function descriptions: |
diff --git a/tools/include/uapi/linux/btf.h b/tools/include/uapi/linux/btf.h new file mode 100644 index 000000000000..74a30b1090df --- /dev/null +++ b/tools/include/uapi/linux/btf.h | |||
| @@ -0,0 +1,130 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
| 2 | /* Copyright (c) 2018 Facebook */ | ||
| 3 | #ifndef _UAPI__LINUX_BTF_H__ | ||
| 4 | #define _UAPI__LINUX_BTF_H__ | ||
| 5 | |||
| 6 | #include <linux/types.h> | ||
| 7 | |||
| 8 | #define BTF_MAGIC 0xeB9F | ||
| 9 | #define BTF_MAGIC_SWAP 0x9FeB | ||
| 10 | #define BTF_VERSION 1 | ||
| 11 | #define BTF_FLAGS_COMPR 0x01 | ||
| 12 | |||
| 13 | struct btf_header { | ||
| 14 | __u16 magic; | ||
| 15 | __u8 version; | ||
| 16 | __u8 flags; | ||
| 17 | |||
| 18 | __u32 parent_label; | ||
| 19 | __u32 parent_name; | ||
| 20 | |||
| 21 | /* All offsets are in bytes relative to the end of this header */ | ||
| 22 | __u32 label_off; /* offset of label section */ | ||
| 23 | __u32 object_off; /* offset of data object section*/ | ||
| 24 | __u32 func_off; /* offset of function section */ | ||
| 25 | __u32 type_off; /* offset of type section */ | ||
| 26 | __u32 str_off; /* offset of string section */ | ||
| 27 | __u32 str_len; /* length of string section */ | ||
| 28 | }; | ||
| 29 | |||
| 30 | /* Max # of type identifier */ | ||
| 31 | #define BTF_MAX_TYPE 0x7fffffff | ||
| 32 | /* Max offset into the string section */ | ||
| 33 | #define BTF_MAX_NAME_OFFSET 0x7fffffff | ||
| 34 | /* Max # of struct/union/enum members or func args */ | ||
| 35 | #define BTF_MAX_VLEN 0xffff | ||
| 36 | |||
| 37 | /* The type id is referring to a parent BTF */ | ||
| 38 | #define BTF_TYPE_PARENT(id) (((id) >> 31) & 0x1) | ||
| 39 | #define BTF_TYPE_ID(id) ((id) & BTF_MAX_TYPE) | ||
| 40 | |||
| 41 | /* String is in the ELF string section */ | ||
| 42 | #define BTF_STR_TBL_ELF_ID(ref) (((ref) >> 31) & 0x1) | ||
| 43 | #define BTF_STR_OFFSET(ref) ((ref) & BTF_MAX_NAME_OFFSET) | ||
| 44 | |||
| 45 | struct btf_type { | ||
| 46 | __u32 name; | ||
| 47 | /* "info" bits arrangement | ||
| 48 | * bits 0-15: vlen (e.g. # of struct's members) | ||
| 49 | * bits 16-23: unused | ||
| 50 | * bits 24-28: kind (e.g. int, ptr, array...etc) | ||
| 51 | * bits 29-30: unused | ||
| 52 | * bits 31: root | ||
| 53 | */ | ||
| 54 | __u32 info; | ||
| 55 | /* "size" is used by INT, ENUM, STRUCT and UNION. | ||
| 56 | * "size" tells the size of the type it is describing. | ||
| 57 | * | ||
| 58 | * "type" is used by PTR, TYPEDEF, VOLATILE, CONST and RESTRICT. | ||
| 59 | * "type" is a type_id referring to another type. | ||
| 60 | */ | ||
| 61 | union { | ||
| 62 | __u32 size; | ||
| 63 | __u32 type; | ||
| 64 | }; | ||
| 65 | }; | ||
| 66 | |||
| 67 | #define BTF_INFO_KIND(info) (((info) >> 24) & 0x1f) | ||
| 68 | #define BTF_INFO_ISROOT(info) (!!(((info) >> 24) & 0x80)) | ||
| 69 | #define BTF_INFO_VLEN(info) ((info) & 0xffff) | ||
| 70 | |||
| 71 | #define BTF_KIND_UNKN 0 /* Unknown */ | ||
| 72 | #define BTF_KIND_INT 1 /* Integer */ | ||
| 73 | #define BTF_KIND_PTR 2 /* Pointer */ | ||
| 74 | #define BTF_KIND_ARRAY 3 /* Array */ | ||
| 75 | #define BTF_KIND_STRUCT 4 /* Struct */ | ||
| 76 | #define BTF_KIND_UNION 5 /* Union */ | ||
| 77 | #define BTF_KIND_ENUM 6 /* Enumeration */ | ||
| 78 | #define BTF_KIND_FWD 7 /* Forward */ | ||
| 79 | #define BTF_KIND_TYPEDEF 8 /* Typedef */ | ||
| 80 | #define BTF_KIND_VOLATILE 9 /* Volatile */ | ||
| 81 | #define BTF_KIND_CONST 10 /* Const */ | ||
| 82 | #define BTF_KIND_RESTRICT 11 /* Restrict */ | ||
| 83 | #define BTF_KIND_MAX 11 | ||
| 84 | #define NR_BTF_KINDS 12 | ||
| 85 | |||
| 86 | /* For some specific BTF_KIND, "struct btf_type" is immediately | ||
| 87 | * followed by extra data. | ||
| 88 | */ | ||
| 89 | |||
| 90 | /* BTF_KIND_INT is followed by a u32 and the following | ||
| 91 | * is the 32 bits arrangement: | ||
| 92 | */ | ||
| 93 | #define BTF_INT_ENCODING(VAL) (((VAL) & 0xff000000) >> 24) | ||
| 94 | #define BTF_INT_OFFSET(VAL) (((VAL & 0x00ff0000)) >> 16) | ||
| 95 | #define BTF_INT_BITS(VAL) ((VAL) & 0x0000ffff) | ||
| 96 | |||
| 97 | /* Attributes stored in the BTF_INT_ENCODING */ | ||
| 98 | #define BTF_INT_SIGNED 0x1 | ||
| 99 | #define BTF_INT_CHAR 0x2 | ||
| 100 | #define BTF_INT_BOOL 0x4 | ||
| 101 | #define BTF_INT_VARARGS 0x8 | ||
| 102 | |||
| 103 | /* BTF_KIND_ENUM is followed by multiple "struct btf_enum". | ||
| 104 | * The exact number of btf_enum is stored in the vlen (of the | ||
| 105 | * info in "struct btf_type"). | ||
| 106 | */ | ||
| 107 | struct btf_enum { | ||
| 108 | __u32 name; | ||
| 109 | __s32 val; | ||
| 110 | }; | ||
| 111 | |||
| 112 | /* BTF_KIND_ARRAY is followed by one "struct btf_array" */ | ||
| 113 | struct btf_array { | ||
| 114 | __u32 type; | ||
| 115 | __u32 index_type; | ||
| 116 | __u32 nelems; | ||
| 117 | }; | ||
| 118 | |||
| 119 | /* BTF_KIND_STRUCT and BTF_KIND_UNION are followed | ||
| 120 | * by multiple "struct btf_member". The exact number | ||
| 121 | * of btf_member is stored in the vlen (of the info in | ||
| 122 | * "struct btf_type"). | ||
| 123 | */ | ||
| 124 | struct btf_member { | ||
| 125 | __u32 name; | ||
| 126 | __u32 type; | ||
| 127 | __u32 offset; /* offset in bits */ | ||
| 128 | }; | ||
| 129 | |||
| 130 | #endif /* _UAPI__LINUX_BTF_H__ */ | ||
