diff options
Diffstat (limited to 'include/uapi/linux/bpf.h')
| -rw-r--r-- | include/uapi/linux/bpf.h | 116 | 
1 files changed, 107 insertions, 9 deletions
diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 91c43884f295..3c38ac9a92a7 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -14,6 +14,7 @@  /* Extended instruction set based on top of classic BPF */  /* instruction classes */ +#define BPF_JMP32	0x06	/* jmp mode in word width */  #define BPF_ALU64	0x07	/* alu mode in double word width */  /* ld/ldx fields */ @@ -266,6 +267,7 @@ enum bpf_attach_type {  #define BPF_ANY		0 /* create new element or update existing */  #define BPF_NOEXIST	1 /* create new element if it didn't exist */  #define BPF_EXIST	2 /* update existing element */ +#define BPF_F_LOCK	4 /* spin_lock-ed map_lookup/map_update */  /* flags for BPF_MAP_CREATE command */  #define BPF_F_NO_PREALLOC	(1U << 0) @@ -2014,6 +2016,19 @@ union bpf_attr {   *			Only works if *skb* contains an IPv6 packet. Insert a   *			Segment Routing Header (**struct ipv6_sr_hdr**) inside   *			the IPv6 header. + *		**BPF_LWT_ENCAP_IP** + *			IP encapsulation (GRE/GUE/IPIP/etc). The outer header + *			must be IPv4 or IPv6, followed by zero or more + *			additional headers, up to LWT_BPF_MAX_HEADROOM total + *			bytes in all prepended headers. Please note that + *			if skb_is_gso(skb) is true, no more than two headers + *			can be prepended, and the inner header, if present, + *			should be either GRE or UDP/GUE. + * + *		BPF_LWT_ENCAP_SEG6*** types can be called by bpf programs of + *		type BPF_PROG_TYPE_LWT_IN; BPF_LWT_ENCAP_IP type can be called + *		by bpf programs of types BPF_PROG_TYPE_LWT_IN and + *		BPF_PROG_TYPE_LWT_XMIT.   *   * 		A call to this helper is susceptible to change the underlaying   * 		packet buffer. Therefore, at load time, all checks on pointers @@ -2327,6 +2342,30 @@ union bpf_attr {   *		"**y**".   *	Return   *		0 + * + * struct bpf_sock *bpf_sk_fullsock(struct bpf_sock *sk) + *	Description + *		This helper gets a **struct bpf_sock** pointer such + *		that all the fields in bpf_sock can be accessed. + *	Return + *		A **struct bpf_sock** pointer on success, or NULL in + *		case of failure. + * + * struct bpf_tcp_sock *bpf_tcp_sock(struct bpf_sock *sk) + *	Description + *		This helper gets a **struct bpf_tcp_sock** pointer from a + *		**struct bpf_sock** pointer. + * + *	Return + *		A **struct bpf_tcp_sock** pointer on success, or NULL in + *		case of failure. + * + * int bpf_skb_ecn_set_ce(struct sk_buf *skb) + *     Description + *             Sets ECN of IP header to ce (congestion encountered) if + *             current value is ect (ECN capable). Works with IPv6 and IPv4. + *     Return + *             1 if set, 0 if not set.   */  #define __BPF_FUNC_MAPPER(FN)		\  	FN(unspec),			\ @@ -2421,7 +2460,12 @@ union bpf_attr {  	FN(map_peek_elem),		\  	FN(msg_push_data),		\  	FN(msg_pop_data),		\ -	FN(rc_pointer_rel), +	FN(rc_pointer_rel),		\ +	FN(spin_lock),			\ +	FN(spin_unlock),		\ +	FN(sk_fullsock),		\ +	FN(tcp_sock),			\ +	FN(skb_ecn_set_ce),  /* integer value in 'imm' field of BPF_CALL instruction selects which helper   * function eBPF program intends to call @@ -2494,7 +2538,8 @@ enum bpf_hdr_start_off {  /* Encapsulation type for BPF_FUNC_lwt_push_encap helper. */  enum bpf_lwt_encap_mode {  	BPF_LWT_ENCAP_SEG6, -	BPF_LWT_ENCAP_SEG6_INLINE +	BPF_LWT_ENCAP_SEG6_INLINE, +	BPF_LWT_ENCAP_IP,  };  #define __bpf_md_ptr(type, name)	\ @@ -2540,6 +2585,8 @@ struct __sk_buff {  	__bpf_md_ptr(struct bpf_flow_keys *, flow_keys);  	__u64 tstamp;  	__u32 wire_len; +	__u32 gso_segs; +	__bpf_md_ptr(struct bpf_sock *, sk);  };  struct bpf_tunnel_key { @@ -2581,7 +2628,15 @@ enum bpf_ret_code {  	BPF_DROP = 2,  	/* 3-6 reserved */  	BPF_REDIRECT = 7, -	/* >127 are reserved for prog type specific return codes */ +	/* >127 are reserved for prog type specific return codes. +	 * +	 * BPF_LWT_REROUTE: used by BPF_PROG_TYPE_LWT_IN and +	 *    BPF_PROG_TYPE_LWT_XMIT to indicate that skb had been +	 *    changed and should be routed based on its new L3 header. +	 *    (This is an L3 redirect, as opposed to L2 redirect +	 *    represented by BPF_REDIRECT above). +	 */ +	BPF_LWT_REROUTE = 128,  };  struct bpf_sock { @@ -2591,14 +2646,52 @@ struct bpf_sock {  	__u32 protocol;  	__u32 mark;  	__u32 priority; -	__u32 src_ip4;		/* Allows 1,2,4-byte read. -				 * Stored in network byte order. +	/* IP address also allows 1 and 2 bytes access */ +	__u32 src_ip4; +	__u32 src_ip6[4]; +	__u32 src_port;		/* host byte order */ +	__u32 dst_port;		/* network byte order */ +	__u32 dst_ip4; +	__u32 dst_ip6[4]; +	__u32 state; +}; + +struct bpf_tcp_sock { +	__u32 snd_cwnd;		/* Sending congestion window		*/ +	__u32 srtt_us;		/* smoothed round trip time << 3 in usecs */ +	__u32 rtt_min; +	__u32 snd_ssthresh;	/* Slow start size threshold		*/ +	__u32 rcv_nxt;		/* What we want to receive next		*/ +	__u32 snd_nxt;		/* Next sequence we send		*/ +	__u32 snd_una;		/* First byte we want an ack for	*/ +	__u32 mss_cache;	/* Cached effective mss, not including SACKS */ +	__u32 ecn_flags;	/* ECN status bits.			*/ +	__u32 rate_delivered;	/* saved rate sample: packets delivered */ +	__u32 rate_interval_us;	/* saved rate sample: time elapsed */ +	__u32 packets_out;	/* Packets which are "in flight"	*/ +	__u32 retrans_out;	/* Retransmitted packets out		*/ +	__u32 total_retrans;	/* Total retransmits for entire connection */ +	__u32 segs_in;		/* RFC4898 tcpEStatsPerfSegsIn +				 * total number of segments in.  				 */ -	__u32 src_ip6[4];	/* Allows 1,2,4-byte read. -				 * Stored in network byte order. +	__u32 data_segs_in;	/* RFC4898 tcpEStatsPerfDataSegsIn +				 * total number of data segments in.  				 */ -	__u32 src_port;		/* Allows 4-byte read. -				 * Stored in host byte order +	__u32 segs_out;		/* RFC4898 tcpEStatsPerfSegsOut +				 * The total number of segments sent. +				 */ +	__u32 data_segs_out;	/* RFC4898 tcpEStatsPerfDataSegsOut +				 * total number of data segments sent. +				 */ +	__u32 lost_out;		/* Lost packets			*/ +	__u32 sacked_out;	/* SACK'd packets			*/ +	__u64 bytes_received;	/* RFC4898 tcpEStatsAppHCThruOctetsReceived +				 * sum(delta(rcv_nxt)), or how many bytes +				 * were acked. +				 */ +	__u64 bytes_acked;	/* RFC4898 tcpEStatsAppHCThruOctetsAcked +				 * sum(delta(snd_una)), or how many bytes +				 * were acked.  				 */  }; @@ -2728,6 +2821,8 @@ struct bpf_prog_info {  	__u32 jited_line_info_rec_size;  	__u32 nr_prog_tags;  	__aligned_u64 prog_tags; +	__u64 run_time_ns; +	__u64 run_cnt;  } __attribute__((aligned(8)));  struct bpf_map_info { @@ -3054,4 +3149,7 @@ struct bpf_line_info {  	__u32	line_col;  }; +struct bpf_spin_lock { +	__u32	val; +};  #endif /* _UAPI__LINUX_BPF_H__ */  |