diff options
Diffstat (limited to 'include/uapi/linux/bpf.h')
| -rw-r--r-- | include/uapi/linux/bpf.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 45da7ec7d274..a9ebdf5701e8 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h | |||
| @@ -118,8 +118,13 @@ enum bpf_map_type { | |||
| 118 | enum bpf_prog_type { | 118 | enum bpf_prog_type { |
| 119 | BPF_PROG_TYPE_UNSPEC, | 119 | BPF_PROG_TYPE_UNSPEC, |
| 120 | BPF_PROG_TYPE_SOCKET_FILTER, | 120 | BPF_PROG_TYPE_SOCKET_FILTER, |
| 121 | BPF_PROG_TYPE_KPROBE, | ||
| 122 | BPF_PROG_TYPE_SCHED_CLS, | ||
| 123 | BPF_PROG_TYPE_SCHED_ACT, | ||
| 121 | }; | 124 | }; |
| 122 | 125 | ||
| 126 | #define BPF_PSEUDO_MAP_FD 1 | ||
| 127 | |||
| 123 | /* flags for BPF_MAP_UPDATE_ELEM command */ | 128 | /* flags for BPF_MAP_UPDATE_ELEM command */ |
| 124 | #define BPF_ANY 0 /* create new element or update existing */ | 129 | #define BPF_ANY 0 /* create new element or update existing */ |
| 125 | #define BPF_NOEXIST 1 /* create new element if it didn't exist */ | 130 | #define BPF_NOEXIST 1 /* create new element if it didn't exist */ |
| @@ -151,6 +156,7 @@ union bpf_attr { | |||
| 151 | __u32 log_level; /* verbosity level of verifier */ | 156 | __u32 log_level; /* verbosity level of verifier */ |
| 152 | __u32 log_size; /* size of user buffer */ | 157 | __u32 log_size; /* size of user buffer */ |
| 153 | __aligned_u64 log_buf; /* user supplied buffer */ | 158 | __aligned_u64 log_buf; /* user supplied buffer */ |
| 159 | __u32 kern_version; /* checked when prog_type=kprobe */ | ||
| 154 | }; | 160 | }; |
| 155 | } __attribute__((aligned(8))); | 161 | } __attribute__((aligned(8))); |
| 156 | 162 | ||
| @@ -162,7 +168,64 @@ enum bpf_func_id { | |||
| 162 | BPF_FUNC_map_lookup_elem, /* void *map_lookup_elem(&map, &key) */ | 168 | BPF_FUNC_map_lookup_elem, /* void *map_lookup_elem(&map, &key) */ |
| 163 | BPF_FUNC_map_update_elem, /* int map_update_elem(&map, &key, &value, flags) */ | 169 | BPF_FUNC_map_update_elem, /* int map_update_elem(&map, &key, &value, flags) */ |
| 164 | BPF_FUNC_map_delete_elem, /* int map_delete_elem(&map, &key) */ | 170 | BPF_FUNC_map_delete_elem, /* int map_delete_elem(&map, &key) */ |
| 171 | BPF_FUNC_probe_read, /* int bpf_probe_read(void *dst, int size, void *src) */ | ||
| 172 | BPF_FUNC_ktime_get_ns, /* u64 bpf_ktime_get_ns(void) */ | ||
| 173 | BPF_FUNC_trace_printk, /* int bpf_trace_printk(const char *fmt, int fmt_size, ...) */ | ||
| 174 | BPF_FUNC_get_prandom_u32, /* u32 prandom_u32(void) */ | ||
| 175 | BPF_FUNC_get_smp_processor_id, /* u32 raw_smp_processor_id(void) */ | ||
| 176 | |||
| 177 | /** | ||
| 178 | * skb_store_bytes(skb, offset, from, len, flags) - store bytes into packet | ||
| 179 | * @skb: pointer to skb | ||
| 180 | * @offset: offset within packet from skb->mac_header | ||
| 181 | * @from: pointer where to copy bytes from | ||
| 182 | * @len: number of bytes to store into packet | ||
| 183 | * @flags: bit 0 - if true, recompute skb->csum | ||
| 184 | * other bits - reserved | ||
| 185 | * Return: 0 on success | ||
| 186 | */ | ||
| 187 | BPF_FUNC_skb_store_bytes, | ||
| 188 | |||
| 189 | /** | ||
| 190 | * l3_csum_replace(skb, offset, from, to, flags) - recompute IP checksum | ||
| 191 | * @skb: pointer to skb | ||
| 192 | * @offset: offset within packet where IP checksum is located | ||
| 193 | * @from: old value of header field | ||
| 194 | * @to: new value of header field | ||
| 195 | * @flags: bits 0-3 - size of header field | ||
| 196 | * other bits - reserved | ||
| 197 | * Return: 0 on success | ||
| 198 | */ | ||
| 199 | BPF_FUNC_l3_csum_replace, | ||
| 200 | |||
| 201 | /** | ||
| 202 | * l4_csum_replace(skb, offset, from, to, flags) - recompute TCP/UDP checksum | ||
| 203 | * @skb: pointer to skb | ||
| 204 | * @offset: offset within packet where TCP/UDP checksum is located | ||
| 205 | * @from: old value of header field | ||
| 206 | * @to: new value of header field | ||
| 207 | * @flags: bits 0-3 - size of header field | ||
| 208 | * bit 4 - is pseudo header | ||
| 209 | * other bits - reserved | ||
| 210 | * Return: 0 on success | ||
| 211 | */ | ||
| 212 | BPF_FUNC_l4_csum_replace, | ||
| 165 | __BPF_FUNC_MAX_ID, | 213 | __BPF_FUNC_MAX_ID, |
| 166 | }; | 214 | }; |
| 167 | 215 | ||
| 216 | /* user accessible mirror of in-kernel sk_buff. | ||
| 217 | * new fields can only be added to the end of this structure | ||
| 218 | */ | ||
| 219 | struct __sk_buff { | ||
| 220 | __u32 len; | ||
| 221 | __u32 pkt_type; | ||
| 222 | __u32 mark; | ||
| 223 | __u32 queue_mapping; | ||
| 224 | __u32 protocol; | ||
| 225 | __u32 vlan_present; | ||
| 226 | __u32 vlan_tci; | ||
| 227 | __u32 vlan_proto; | ||
| 228 | __u32 priority; | ||
| 229 | }; | ||
| 230 | |||
| 168 | #endif /* _UAPI__LINUX_BPF_H__ */ | 231 | #endif /* _UAPI__LINUX_BPF_H__ */ |
