diff options
Diffstat (limited to 'include/uapi/linux/bpf.h')
| -rw-r--r-- | include/uapi/linux/bpf.h | 86 | 
1 files changed, 85 insertions, 1 deletions
| diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 406459b935a2..da218fec6056 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -84,6 +84,7 @@ enum bpf_map_type {  	BPF_MAP_TYPE_PERCPU_HASH,  	BPF_MAP_TYPE_PERCPU_ARRAY,  	BPF_MAP_TYPE_STACK_TRACE, +	BPF_MAP_TYPE_CGROUP_ARRAY,  };  enum bpf_prog_type { @@ -93,6 +94,7 @@ enum bpf_prog_type {  	BPF_PROG_TYPE_SCHED_CLS,  	BPF_PROG_TYPE_SCHED_ACT,  	BPF_PROG_TYPE_TRACEPOINT, +	BPF_PROG_TYPE_XDP,  };  #define BPF_PSEUDO_MAP_FD	1 @@ -313,6 +315,66 @@ enum bpf_func_id {  	 */  	BPF_FUNC_skb_get_tunnel_opt,  	BPF_FUNC_skb_set_tunnel_opt, + +	/** +	 * bpf_skb_change_proto(skb, proto, flags) +	 * Change protocol of the skb. Currently supported is +	 * v4 -> v6, v6 -> v4 transitions. The helper will also +	 * resize the skb. eBPF program is expected to fill the +	 * new headers via skb_store_bytes and lX_csum_replace. +	 * @skb: pointer to skb +	 * @proto: new skb->protocol type +	 * @flags: reserved +	 * Return: 0 on success or negative error +	 */ +	BPF_FUNC_skb_change_proto, + +	/** +	 * bpf_skb_change_type(skb, type) +	 * Change packet type of skb. +	 * @skb: pointer to skb +	 * @type: new skb->pkt_type type +	 * Return: 0 on success or negative error +	 */ +	BPF_FUNC_skb_change_type, + +	/** +	 * bpf_skb_in_cgroup(skb, map, index) - Check cgroup2 membership of skb +	 * @skb: pointer to skb +	 * @map: pointer to bpf_map in BPF_MAP_TYPE_CGROUP_ARRAY type +	 * @index: index of the cgroup in the bpf_map +	 * Return: +	 *   == 0 skb failed the cgroup2 descendant test +	 *   == 1 skb succeeded the cgroup2 descendant test +	 *    < 0 error +	 */ +	BPF_FUNC_skb_in_cgroup, + +	/** +	 * bpf_get_hash_recalc(skb) +	 * Retrieve and possibly recalculate skb->hash. +	 * @skb: pointer to skb +	 * Return: hash +	 */ +	BPF_FUNC_get_hash_recalc, + +	/** +	 * u64 bpf_get_current_task(void) +	 * Returns current task_struct +	 * Return: current +	 */ +	BPF_FUNC_get_current_task, + +	/** +	 * bpf_probe_write_user(void *dst, void *src, int len) +	 * safely attempt to write to a location +	 * @dst: destination address in userspace +	 * @src: source address on stack +	 * @len: number of bytes to copy +	 * Return: 0 on success or negative error +	 */ +	BPF_FUNC_probe_write_user, +  	__BPF_FUNC_MAX_ID,  }; @@ -347,9 +409,11 @@ enum bpf_func_id {  #define BPF_F_ZERO_CSUM_TX		(1ULL << 1)  #define BPF_F_DONT_FRAGMENT		(1ULL << 2) -/* BPF_FUNC_perf_event_output flags. */ +/* BPF_FUNC_perf_event_output and BPF_FUNC_perf_event_read flags. */  #define BPF_F_INDEX_MASK		0xffffffffULL  #define BPF_F_CURRENT_CPU		BPF_F_INDEX_MASK +/* BPF_FUNC_perf_event_output for sk_buff input context. */ +#define BPF_F_CTXLEN_MASK		(0xfffffULL << 32)  /* user accessible mirror of in-kernel sk_buff.   * new fields can only be added to the end of this structure @@ -386,4 +450,24 @@ struct bpf_tunnel_key {  	__u32 tunnel_label;  }; +/* User return codes for XDP prog type. + * A valid XDP program must return one of these defined values. All other + * return codes are reserved for future use. Unknown return codes will result + * in packet drop. + */ +enum xdp_action { +	XDP_ABORTED = 0, +	XDP_DROP, +	XDP_PASS, +	XDP_TX, +}; + +/* user accessible metadata for XDP packet hook + * new fields must be added to the end of this structure + */ +struct xdp_md { +	__u32 data; +	__u32 data_end; +}; +  #endif /* _UAPI__LINUX_BPF_H__ */ |