diff options
Diffstat (limited to 'include/uapi/linux')
50 files changed, 1274 insertions, 357 deletions
diff --git a/include/uapi/linux/aio_abi.h b/include/uapi/linux/aio_abi.h index ce43d340f010..8387e0af0f76 100644 --- a/include/uapi/linux/aio_abi.h +++ b/include/uapi/linux/aio_abi.h @@ -50,6 +50,8 @@ enum {   *   * IOCB_FLAG_RESFD - Set if the "aio_resfd" member of the "struct iocb"   *                   is valid. + * IOCB_FLAG_IOPRIO - Set if the "aio_reqprio" member of the "struct iocb" + *                    is valid.   */  #define IOCB_FLAG_RESFD		(1 << 0)  #define IOCB_FLAG_IOPRIO	(1 << 1) diff --git a/include/uapi/linux/android/binder_ctl.h b/include/uapi/linux/android/binder_ctl.h new file mode 100644 index 000000000000..65b2efd1a0a5 --- /dev/null +++ b/include/uapi/linux/android/binder_ctl.h @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +/* + * Copyright (C) 2018 Canonical Ltd. + * + */ + +#ifndef _UAPI_LINUX_BINDER_CTL_H +#define _UAPI_LINUX_BINDER_CTL_H + +#include <linux/android/binder.h> +#include <linux/types.h> +#include <linux/ioctl.h> + +#define BINDERFS_MAX_NAME 255 + +/** + * struct binderfs_device - retrieve information about a new binder device + * @name:   the name to use for the new binderfs binder device + * @major:  major number allocated for binderfs binder devices + * @minor:  minor number allocated for the new binderfs binder device + * + */ +struct binderfs_device { +	char name[BINDERFS_MAX_NAME + 1]; +	__u8 major; +	__u8 minor; +}; + +/** + * Allocate a new binder device. + */ +#define BINDER_CTL_ADD _IOWR('b', 1, struct binderfs_device) + +#endif /* _UAPI_LINUX_BINDER_CTL_H */ + diff --git a/include/uapi/linux/audit.h b/include/uapi/linux/audit.h index 818ae690ab79..36a7e3f18e69 100644 --- a/include/uapi/linux/audit.h +++ b/include/uapi/linux/audit.h @@ -378,6 +378,7 @@ enum {  #define AUDIT_ARCH_ARM		(EM_ARM|__AUDIT_ARCH_LE)  #define AUDIT_ARCH_ARMEB	(EM_ARM)  #define AUDIT_ARCH_CRIS		(EM_CRIS|__AUDIT_ARCH_LE) +#define AUDIT_ARCH_CSKY		(EM_CSKY|__AUDIT_ARCH_LE)  #define AUDIT_ARCH_FRV		(EM_FRV)  #define AUDIT_ARCH_I386		(EM_386|__AUDIT_ARCH_LE)  #define AUDIT_ARCH_IA64		(EM_IA_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE) @@ -411,6 +412,7 @@ enum {  #define AUDIT_ARCH_TILEGX32	(EM_TILEGX|__AUDIT_ARCH_LE)  #define AUDIT_ARCH_TILEPRO	(EM_TILEPRO|__AUDIT_ARCH_LE)  #define AUDIT_ARCH_X86_64	(EM_X86_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE) +#define AUDIT_ARCH_XTENSA	(EM_XTENSA)  #define AUDIT_PERM_EXEC		1  #define AUDIT_PERM_WRITE	2 diff --git a/include/uapi/linux/auto_fs.h b/include/uapi/linux/auto_fs.h index df31aa9c9a8c..082119630b49 100644 --- a/include/uapi/linux/auto_fs.h +++ b/include/uapi/linux/auto_fs.h @@ -23,7 +23,7 @@  #define AUTOFS_MIN_PROTO_VERSION	3  #define AUTOFS_MAX_PROTO_VERSION	5 -#define AUTOFS_PROTO_SUBVERSION		3 +#define AUTOFS_PROTO_SUBVERSION		4  /*   * The wait_queue_token (autofs_wqt_t) is part of a structure which is passed diff --git a/include/uapi/linux/bfs_fs.h b/include/uapi/linux/bfs_fs.h index 940b04772af8..08f6b4956359 100644 --- a/include/uapi/linux/bfs_fs.h +++ b/include/uapi/linux/bfs_fs.h @@ -1,7 +1,7 @@  /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */  /*   *	include/linux/bfs_fs.h - BFS data structures on disk. - *	Copyright (C) 1999 Tigran Aivazian <tigran@veritas.com> + *	Copyright (C) 1999-2018 Tigran Aivazian <aivazian.tigran@gmail.com>   */  #ifndef _LINUX_BFS_FS_H diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 72c453a8bf50..91c43884f295 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -133,6 +133,14 @@ enum bpf_map_type {  	BPF_MAP_TYPE_STACK,  }; +/* Note that tracing related programs such as + * BPF_PROG_TYPE_{KPROBE,TRACEPOINT,PERF_EVENT,RAW_TRACEPOINT} + * are not subject to a stable API since kernel internal data + * structures can change from release to release and may + * therefore break existing tracing BPF programs. Tracing BPF + * programs correspond to /a/ specific kernel which is to be + * analyzed, and not /a/ specific kernel /and/ all future ones. + */  enum bpf_prog_type {  	BPF_PROG_TYPE_UNSPEC,  	BPF_PROG_TYPE_SOCKET_FILTER, @@ -232,6 +240,20 @@ enum bpf_attach_type {   */  #define BPF_F_STRICT_ALIGNMENT	(1U << 0) +/* If BPF_F_ANY_ALIGNMENT is used in BPF_PROF_LOAD command, the + * verifier will allow any alignment whatsoever.  On platforms + * with strict alignment requirements for loads ands stores (such + * as sparc and mips) the verifier validates that all loads and + * stores provably follow this requirement.  This flag turns that + * checking and enforcement off. + * + * It is mostly used for testing when we want to validate the + * context and memory access aspects of the verifier, but because + * of an unaligned access the alignment check would trigger before + * the one we are interested in. + */ +#define BPF_F_ANY_ALIGNMENT	(1U << 1) +  /* when bpf_ldimm64->src_reg == BPF_PSEUDO_MAP_FD, bpf_ldimm64->imm == fd */  #define BPF_PSEUDO_MAP_FD	1 @@ -257,9 +279,6 @@ enum bpf_attach_type {  /* Specify numa node during map creation */  #define BPF_F_NUMA_NODE		(1U << 2) -/* flags for BPF_PROG_QUERY */ -#define BPF_F_QUERY_EFFECTIVE	(1U << 0) -  #define BPF_OBJ_NAME_LEN 16U  /* Flags for accessing BPF object */ @@ -269,6 +288,12 @@ enum bpf_attach_type {  /* Flag for stack_map, store build_id+offset instead of pointer */  #define BPF_F_STACK_BUILD_ID	(1U << 5) +/* Zero-initialize hash function seed. This should only be used for testing. */ +#define BPF_F_ZERO_SEED		(1U << 6) + +/* flags for BPF_PROG_QUERY */ +#define BPF_F_QUERY_EFFECTIVE	(1U << 0) +  enum bpf_stack_build_id_status {  	/* user space need an empty entry to identify end of a trace */  	BPF_STACK_BUILD_ID_EMPTY = 0, @@ -326,7 +351,7 @@ union bpf_attr {  		__u32		log_level;	/* verbosity level of verifier */  		__u32		log_size;	/* size of user buffer */  		__aligned_u64	log_buf;	/* user supplied buffer */ -		__u32		kern_version;	/* checked when prog_type=kprobe */ +		__u32		kern_version;	/* not used */  		__u32		prog_flags;  		char		prog_name[BPF_OBJ_NAME_LEN];  		__u32		prog_ifindex;	/* ifindex of netdev to prep for */ @@ -335,6 +360,13 @@ union bpf_attr {  		 * (context accesses, allowed helpers, etc).  		 */  		__u32		expected_attach_type; +		__u32		prog_btf_fd;	/* fd pointing to BTF type data */ +		__u32		func_info_rec_size;	/* userspace bpf_func_info size */ +		__aligned_u64	func_info;	/* func info */ +		__u32		func_info_cnt;	/* number of bpf_func_info records */ +		__u32		line_info_rec_size;	/* userspace bpf_line_info size */ +		__aligned_u64	line_info;	/* line info */ +		__u32		line_info_cnt;	/* number of bpf_line_info records */  	};  	struct { /* anonymous struct used by BPF_OBJ_* commands */ @@ -353,8 +385,11 @@ union bpf_attr {  	struct { /* anonymous struct used by BPF_PROG_TEST_RUN command */  		__u32		prog_fd;  		__u32		retval; -		__u32		data_size_in; -		__u32		data_size_out; +		__u32		data_size_in;	/* input: len of data_in */ +		__u32		data_size_out;	/* input/output: len of data_out +						 *   returns ENOSPC if data_out +						 *   is too small. +						 */  		__aligned_u64	data_in;  		__aligned_u64	data_out;  		__u32		repeat; @@ -475,18 +510,6 @@ union bpf_attr {   * 	Return   * 		0 on success, or a negative error in case of failure.   * - * int bpf_map_pop_elem(struct bpf_map *map, void *value) - * 	Description - * 		Pop an element from *map*. - * Return - * 		0 on success, or a negative error in case of failure. - * - * int bpf_map_peek_elem(struct bpf_map *map, void *value) - * 	Description - * 		Get an element from *map* without removing it. - * Return - * 		0 on success, or a negative error in case of failure. - *   * int bpf_probe_read(void *dst, u32 size, const void *src)   * 	Description   * 		For tracing programs, safely attempt to read *size* bytes from @@ -1910,9 +1933,9 @@ union bpf_attr {   *		is set to metric from route (IPv4/IPv6 only), and ifindex   *		is set to the device index of the nexthop from the FIB lookup.   * - *             *plen* argument is the size of the passed in struct. - *             *flags* argument can be a combination of one or more of the - *             following values: + *		*plen* argument is the size of the passed in struct. + *		*flags* argument can be a combination of one or more of the + *		following values:   *   *		**BPF_FIB_LOOKUP_DIRECT**   *			Do a direct table lookup vs full lookup using FIB @@ -1921,9 +1944,9 @@ union bpf_attr {   *			Perform lookup from an egress perspective (default is   *			ingress).   * - *             *ctx* is either **struct xdp_md** for XDP programs or - *             **struct sk_buff** tc cls_act programs. - *     Return + *		*ctx* is either **struct xdp_md** for XDP programs or + *		**struct sk_buff** tc cls_act programs. + *	Return   *		* < 0 if any input argument is invalid   *		*   0 on success (packet is forwarded, nexthop neighbor exists)   *		* > 0 one of **BPF_FIB_LKUP_RET_** codes explaining why the @@ -2068,8 +2091,8 @@ union bpf_attr {   *		translated to a keycode using the rc keymap, and reported as   *		an input key down event. After a period a key up event is   *		generated. This period can be extended by calling either - *		**bpf_rc_keydown** () again with the same values, or calling - *		**bpf_rc_repeat** (). + *		**bpf_rc_keydown**\ () again with the same values, or calling + *		**bpf_rc_repeat**\ ().   *   *		Some protocols include a toggle bit, in case the button	was   *		released and pressed again between consecutive scancodes. @@ -2152,21 +2175,22 @@ union bpf_attr {   *		The *flags* meaning is specific for each map type,   *		and has to be 0 for cgroup local storage.   * - *		Depending on the bpf program type, a local storage area - *		can be shared between multiple instances of the bpf program, + *		Depending on the BPF program type, a local storage area + *		can be shared between multiple instances of the BPF program,   *		running simultaneously.   *   *		A user should care about the synchronization by himself. - *		For example, by using the BPF_STX_XADD instruction to alter + *		For example, by using the **BPF_STX_XADD** instruction to alter   *		the shared data.   *	Return - *		Pointer to the local storage area. + *		A pointer to the local storage area.   *   * int bpf_sk_select_reuseport(struct sk_reuseport_md *reuse, struct bpf_map *map, void *key, u64 flags)   *	Description - *		Select a SO_REUSEPORT sk from a	BPF_MAP_TYPE_REUSEPORT_ARRAY map - *		It checks the selected sk is matching the incoming - *		request in the skb. + *		Select a **SO_REUSEPORT** socket from a + *		**BPF_MAP_TYPE_REUSEPORT_ARRAY** *map*. + *		It checks the selected socket is matching the incoming + *		request in the socket buffer.   *	Return   *		0 on success, or a negative error in case of failure.   * @@ -2174,7 +2198,7 @@ union bpf_attr {   *	Description   *		Look for TCP socket matching *tuple*, optionally in a child   *		network namespace *netns*. The return value must be checked, - *		and if non-NULL, released via **bpf_sk_release**\ (). + *		and if non-**NULL**, released via **bpf_sk_release**\ ().   *   *		The *ctx* should point to the context of the program, such as   *		the skb or socket (depending on the hook in use). This is used @@ -2202,15 +2226,15 @@ union bpf_attr {   *		This helper is available only if the kernel was compiled with   *		**CONFIG_NET** configuration option.   *	Return - *		Pointer to *struct bpf_sock*, or NULL in case of failure. - *		For sockets with reuseport option, the *struct bpf_sock* - *		result is from reuse->socks[] using the hash of the tuple. + *		Pointer to **struct bpf_sock**, or **NULL** in case of failure. + *		For sockets with reuseport option, the **struct bpf_sock** + *		result is from **reuse->socks**\ [] using the hash of the tuple.   *   * struct bpf_sock *bpf_sk_lookup_udp(void *ctx, struct bpf_sock_tuple *tuple, u32 tuple_size, u64 netns, u64 flags)   *	Description   *		Look for UDP socket matching *tuple*, optionally in a child   *		network namespace *netns*. The return value must be checked, - *		and if non-NULL, released via **bpf_sk_release**\ (). + *		and if non-**NULL**, released via **bpf_sk_release**\ ().   *   *		The *ctx* should point to the context of the program, such as   *		the skb or socket (depending on the hook in use). This is used @@ -2238,33 +2262,71 @@ union bpf_attr {   *		This helper is available only if the kernel was compiled with   *		**CONFIG_NET** configuration option.   *	Return - *		Pointer to *struct bpf_sock*, or NULL in case of failure. - *		For sockets with reuseport option, the *struct bpf_sock* - *		result is from reuse->socks[] using the hash of the tuple. + *		Pointer to **struct bpf_sock**, or **NULL** in case of failure. + *		For sockets with reuseport option, the **struct bpf_sock** + *		result is from **reuse->socks**\ [] using the hash of the tuple.   * - * int bpf_sk_release(struct bpf_sock *sk) + * int bpf_sk_release(struct bpf_sock *sock)   *	Description - *		Release the reference held by *sock*. *sock* must be a non-NULL - *		pointer that was returned from bpf_sk_lookup_xxx\ (). + *		Release the reference held by *sock*. *sock* must be a + *		non-**NULL** pointer that was returned from + *		**bpf_sk_lookup_xxx**\ ().   *	Return   *		0 on success, or a negative error in case of failure.   * + * int bpf_map_pop_elem(struct bpf_map *map, void *value) + * 	Description + * 		Pop an element from *map*. + * 	Return + * 		0 on success, or a negative error in case of failure. + * + * int bpf_map_peek_elem(struct bpf_map *map, void *value) + * 	Description + * 		Get an element from *map* without removing it. + * 	Return + * 		0 on success, or a negative error in case of failure. + *   * int bpf_msg_push_data(struct sk_buff *skb, u32 start, u32 len, u64 flags)   *	Description - *		For socket policies, insert *len* bytes into msg at offset + *		For socket policies, insert *len* bytes into *msg* at offset   *		*start*.   *   *		If a program of type **BPF_PROG_TYPE_SK_MSG** is run on a - *		*msg* it may want to insert metadata or options into the msg. + *		*msg* it may want to insert metadata or options into the *msg*.   *		This can later be read and used by any of the lower layer BPF   *		hooks.   *   *		This helper may fail if under memory pressure (a malloc   *		fails) in these cases BPF programs will get an appropriate   *		error and BPF programs will need to handle them. + *	Return + *		0 on success, or a negative error in case of failure.   * + * int bpf_msg_pop_data(struct sk_msg_buff *msg, u32 start, u32 pop, u64 flags) + *	Description + *		Will remove *pop* bytes from a *msg* starting at byte *start*. + *		This may result in **ENOMEM** errors under certain situations if + *		an allocation and copy are required due to a full ring buffer. + *		However, the helper will try to avoid doing the allocation + *		if possible. Other errors can occur if input parameters are + *		invalid either due to *start* byte not being valid part of *msg* + *		payload and/or *pop* value being to large.   *	Return   *		0 on success, or a negative error in case of failure. + * + * int bpf_rc_pointer_rel(void *ctx, s32 rel_x, s32 rel_y) + *	Description + *		This helper is used in programs implementing IR decoding, to + *		report a successfully decoded pointer movement. + * + *		The *ctx* should point to the lirc sample as passed into + *		the program. + * + *		This helper is only available is the kernel was compiled with + *		the **CONFIG_BPF_LIRC_MODE2** configuration option set to + *		"**y**". + *	Return + *		0   */  #define __BPF_FUNC_MAPPER(FN)		\  	FN(unspec),			\ @@ -2357,7 +2419,9 @@ union bpf_attr {  	FN(map_push_elem),		\  	FN(map_pop_elem),		\  	FN(map_peek_elem),		\ -	FN(msg_push_data), +	FN(msg_push_data),		\ +	FN(msg_pop_data),		\ +	FN(rc_pointer_rel),  /* integer value in 'imm' field of BPF_CALL instruction selects which helper   * function eBPF program intends to call @@ -2474,6 +2538,8 @@ struct __sk_buff {  	__u32 data_meta;  	__bpf_md_ptr(struct bpf_flow_keys *, flow_keys); +	__u64 tstamp; +	__u32 wire_len;  };  struct bpf_tunnel_key { @@ -2599,6 +2665,7 @@ struct sk_msg_md {  	__u32 local_ip6[4];	/* Stored in network byte order */  	__u32 remote_port;	/* Stored in network byte order */  	__u32 local_port;	/* stored in host byte order */ +	__u32 size;		/* Total size of sk_msg */  };  struct sk_reuseport_md { @@ -2649,6 +2716,18 @@ struct bpf_prog_info {  	__u32 nr_jited_func_lens;  	__aligned_u64 jited_ksyms;  	__aligned_u64 jited_func_lens; +	__u32 btf_id; +	__u32 func_info_rec_size; +	__aligned_u64 func_info; +	__u32 nr_func_info; +	__u32 nr_line_info; +	__aligned_u64 line_info; +	__aligned_u64 jited_line_info; +	__u32 nr_jited_line_info; +	__u32 line_info_rec_size; +	__u32 jited_line_info_rec_size; +	__u32 nr_prog_tags; +	__aligned_u64 prog_tags;  } __attribute__((aligned(8)));  struct bpf_map_info { @@ -2960,4 +3039,19 @@ struct bpf_flow_keys {  	};  }; +struct bpf_func_info { +	__u32	insn_off; +	__u32	type_id; +}; + +#define BPF_LINE_INFO_LINE_NUM(line_col)	((line_col) >> 10) +#define BPF_LINE_INFO_LINE_COL(line_col)	((line_col) & 0x3ff) + +struct bpf_line_info { +	__u32	insn_off; +	__u32	file_name_off; +	__u32	line_off; +	__u32	line_col; +}; +  #endif /* _UAPI__LINUX_BPF_H__ */ diff --git a/include/uapi/linux/btf.h b/include/uapi/linux/btf.h index 972265f32871..7b7475ef2f17 100644 --- a/include/uapi/linux/btf.h +++ b/include/uapi/linux/btf.h @@ -34,13 +34,16 @@ struct btf_type {  	 * bits  0-15: vlen (e.g. # of struct's members)  	 * bits 16-23: unused  	 * bits 24-27: kind (e.g. int, ptr, array...etc) -	 * bits 28-31: unused +	 * bits 28-30: unused +	 * bit     31: kind_flag, currently used by +	 *             struct, union and fwd  	 */  	__u32 info;  	/* "size" is used by INT, ENUM, STRUCT and UNION.  	 * "size" tells the size of the type it is describing.  	 * -	 * "type" is used by PTR, TYPEDEF, VOLATILE, CONST and RESTRICT. +	 * "type" is used by PTR, TYPEDEF, VOLATILE, CONST, RESTRICT, +	 * FUNC and FUNC_PROTO.  	 * "type" is a type_id referring to another type.  	 */  	union { @@ -51,6 +54,7 @@ struct btf_type {  #define BTF_INFO_KIND(info)	(((info) >> 24) & 0x0f)  #define BTF_INFO_VLEN(info)	((info) & 0xffff) +#define BTF_INFO_KFLAG(info)	((info) >> 31)  #define BTF_KIND_UNKN		0	/* Unknown	*/  #define BTF_KIND_INT		1	/* Integer	*/ @@ -64,8 +68,10 @@ struct btf_type {  #define BTF_KIND_VOLATILE	9	/* Volatile	*/  #define BTF_KIND_CONST		10	/* Const	*/  #define BTF_KIND_RESTRICT	11	/* Restrict	*/ -#define BTF_KIND_MAX		11 -#define NR_BTF_KINDS		12 +#define BTF_KIND_FUNC		12	/* Function	*/ +#define BTF_KIND_FUNC_PROTO	13	/* Function Proto	*/ +#define BTF_KIND_MAX		13 +#define NR_BTF_KINDS		14  /* For some specific BTF_KIND, "struct btf_type" is immediately   * followed by extra data. @@ -107,7 +113,29 @@ struct btf_array {  struct btf_member {  	__u32	name_off;  	__u32	type; -	__u32	offset;	/* offset in bits */ +	/* If the type info kind_flag is set, the btf_member offset +	 * contains both member bitfield size and bit offset. The +	 * bitfield size is set for bitfield members. If the type +	 * info kind_flag is not set, the offset contains only bit +	 * offset. +	 */ +	__u32	offset; +}; + +/* If the struct/union type info kind_flag is set, the + * following two macros are used to access bitfield_size + * and bit_offset from btf_member.offset. + */ +#define BTF_MEMBER_BITFIELD_SIZE(val)	((val) >> 24) +#define BTF_MEMBER_BIT_OFFSET(val)	((val) & 0xffffff) + +/* BTF_KIND_FUNC_PROTO is followed by multiple "struct btf_param". + * The exact number of btf_param is stored in the vlen (of the + * info in "struct btf_type"). + */ +struct btf_param { +	__u32	name_off; +	__u32	type;  };  #endif /* _UAPI__LINUX_BTF_H__ */ diff --git a/include/uapi/linux/btrfs.h b/include/uapi/linux/btrfs.h index 5ca1d21fc4a7..e0763bc4158e 100644 --- a/include/uapi/linux/btrfs.h +++ b/include/uapi/linux/btrfs.h @@ -269,6 +269,7 @@ struct btrfs_ioctl_fs_info_args {  #define BTRFS_FEATURE_INCOMPAT_RAID56		(1ULL << 7)  #define BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA	(1ULL << 8)  #define BTRFS_FEATURE_INCOMPAT_NO_HOLES		(1ULL << 9) +#define BTRFS_FEATURE_INCOMPAT_METADATA_UUID	(1ULL << 10)  struct btrfs_ioctl_feature_flags {  	__u64 compat_flags; diff --git a/include/uapi/linux/btrfs_tree.h b/include/uapi/linux/btrfs_tree.h index aff1356c2bb8..e974f4bb5378 100644 --- a/include/uapi/linux/btrfs_tree.h +++ b/include/uapi/linux/btrfs_tree.h @@ -458,6 +458,7 @@ struct btrfs_free_space_header {  #define BTRFS_SUPER_FLAG_METADUMP	(1ULL << 33)  #define BTRFS_SUPER_FLAG_METADUMP_V2	(1ULL << 34)  #define BTRFS_SUPER_FLAG_CHANGING_FSID	(1ULL << 35) +#define BTRFS_SUPER_FLAG_CHANGING_FSID_V2 (1ULL << 36)  /* diff --git a/include/uapi/linux/cryptouser.h b/include/uapi/linux/cryptouser.h index 6dafbc3e4414..4dc1603919ce 100644 --- a/include/uapi/linux/cryptouser.h +++ b/include/uapi/linux/cryptouser.h @@ -76,45 +76,69 @@ struct crypto_user_alg {  	__u32 cru_flags;  }; -struct crypto_stat { +struct crypto_stat_aead { +	char type[CRYPTO_MAX_NAME]; +	__u64 stat_encrypt_cnt; +	__u64 stat_encrypt_tlen; +	__u64 stat_decrypt_cnt; +	__u64 stat_decrypt_tlen; +	__u64 stat_err_cnt; +}; + +struct crypto_stat_akcipher { +	char type[CRYPTO_MAX_NAME]; +	__u64 stat_encrypt_cnt; +	__u64 stat_encrypt_tlen; +	__u64 stat_decrypt_cnt; +	__u64 stat_decrypt_tlen; +	__u64 stat_verify_cnt; +	__u64 stat_sign_cnt; +	__u64 stat_err_cnt; +}; + +struct crypto_stat_cipher { +	char type[CRYPTO_MAX_NAME]; +	__u64 stat_encrypt_cnt; +	__u64 stat_encrypt_tlen; +	__u64 stat_decrypt_cnt; +	__u64 stat_decrypt_tlen; +	__u64 stat_err_cnt; +}; + +struct crypto_stat_compress { +	char type[CRYPTO_MAX_NAME]; +	__u64 stat_compress_cnt; +	__u64 stat_compress_tlen; +	__u64 stat_decompress_cnt; +	__u64 stat_decompress_tlen; +	__u64 stat_err_cnt; +}; + +struct crypto_stat_hash { +	char type[CRYPTO_MAX_NAME]; +	__u64 stat_hash_cnt; +	__u64 stat_hash_tlen; +	__u64 stat_err_cnt; +}; + +struct crypto_stat_kpp { +	char type[CRYPTO_MAX_NAME]; +	__u64 stat_setsecret_cnt; +	__u64 stat_generate_public_key_cnt; +	__u64 stat_compute_shared_secret_cnt; +	__u64 stat_err_cnt; +}; + +struct crypto_stat_rng { +	char type[CRYPTO_MAX_NAME]; +	__u64 stat_generate_cnt; +	__u64 stat_generate_tlen; +	__u64 stat_seed_cnt; +	__u64 stat_err_cnt; +}; + +struct crypto_stat_larval {  	char type[CRYPTO_MAX_NAME]; -	union { -		__u32 stat_encrypt_cnt; -		__u32 stat_compress_cnt; -		__u32 stat_generate_cnt; -		__u32 stat_hash_cnt; -		__u32 stat_setsecret_cnt; -	}; -	union { -		__u64 stat_encrypt_tlen; -		__u64 stat_compress_tlen; -		__u64 stat_generate_tlen; -		__u64 stat_hash_tlen; -	}; -	union { -		__u32 stat_akcipher_err_cnt; -		__u32 stat_cipher_err_cnt; -		__u32 stat_compress_err_cnt; -		__u32 stat_aead_err_cnt; -		__u32 stat_hash_err_cnt; -		__u32 stat_rng_err_cnt; -		__u32 stat_kpp_err_cnt; -	}; -	union { -		__u32 stat_decrypt_cnt; -		__u32 stat_decompress_cnt; -		__u32 stat_seed_cnt; -		__u32 stat_generate_public_key_cnt; -	}; -	union { -		__u64 stat_decrypt_tlen; -		__u64 stat_decompress_tlen; -	}; -	union { -		__u32 stat_verify_cnt; -		__u32 stat_compute_shared_secret_cnt; -	}; -	__u32 stat_sign_cnt;  };  struct crypto_report_larval { diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h index 79407bbd296d..6e52d3660654 100644 --- a/include/uapi/linux/devlink.h +++ b/include/uapi/linux/devlink.h @@ -163,6 +163,11 @@ enum devlink_param_cmode {  	DEVLINK_PARAM_CMODE_MAX = __DEVLINK_PARAM_CMODE_MAX - 1  }; +enum devlink_param_fw_load_policy_value { +	DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DRIVER, +	DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_FLASH, +}; +  enum devlink_attr {  	/* don't change the order or add anything between, this is ABI! */  	DEVLINK_ATTR_UNSPEC, diff --git a/include/uapi/linux/elf-em.h b/include/uapi/linux/elf-em.h index 93722e60204c..0c3000faedba 100644 --- a/include/uapi/linux/elf-em.h +++ b/include/uapi/linux/elf-em.h @@ -34,6 +34,7 @@  #define EM_M32R		88	/* Renesas M32R */  #define EM_MN10300	89	/* Panasonic/MEI MN10300, AM33 */  #define EM_OPENRISC     92     /* OpenRISC 32-bit embedded processor */ +#define EM_XTENSA	94	/* Tensilica Xtensa Architecture */  #define EM_BLACKFIN     106     /* ADI Blackfin Processor */  #define EM_ALTERA_NIOS2	113	/* Altera Nios II soft-core processor */  #define EM_TI_C6000	140	/* TI C6X DSPs */ @@ -43,6 +44,7 @@  #define EM_TILEGX	191	/* Tilera TILE-Gx */  #define EM_RISCV	243	/* RISC-V */  #define EM_BPF		247	/* Linux BPF - in-kernel virtual machine */ +#define EM_CSKY		252	/* C-SKY */  #define EM_FRV		0x5441	/* Fujitsu FR-V */  /* diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h index c8f8e2455bf3..17be76aeb468 100644 --- a/include/uapi/linux/ethtool.h +++ b/include/uapi/linux/ethtool.h @@ -882,7 +882,7 @@ struct ethtool_rx_flow_spec {  	__u32		location;  }; -/* How rings are layed out when accessing virtual functions or +/* How rings are laid out when accessing virtual functions or   * offloaded queues is device specific. To allow users to do flow   * steering and specify these queues the ring cookie is partitioned   * into a 32bit queue index with an 8 bit virtual function id. @@ -891,7 +891,7 @@ struct ethtool_rx_flow_spec {   * devices start supporting PCIe w/ARI. However at the moment I   * do not know of any devices that support this so I do not reserve   * space for this at this time. If a future patch consumes the next - * byte it should be aware of this possiblity. + * byte it should be aware of this possibility.   */  #define ETHTOOL_RX_FLOW_SPEC_RING	0x00000000FFFFFFFFLL  #define ETHTOOL_RX_FLOW_SPEC_RING_VF	0x000000FF00000000LL diff --git a/include/uapi/linux/fanotify.h b/include/uapi/linux/fanotify.h index b86740d1c50a..909c98fcace2 100644 --- a/include/uapi/linux/fanotify.h +++ b/include/uapi/linux/fanotify.h @@ -10,11 +10,13 @@  #define FAN_CLOSE_WRITE		0x00000008	/* Writtable file closed */  #define FAN_CLOSE_NOWRITE	0x00000010	/* Unwrittable file closed */  #define FAN_OPEN		0x00000020	/* File was opened */ +#define FAN_OPEN_EXEC		0x00001000	/* File was opened for exec */  #define FAN_Q_OVERFLOW		0x00004000	/* Event queued overflowed */  #define FAN_OPEN_PERM		0x00010000	/* File open in perm check */  #define FAN_ACCESS_PERM		0x00020000	/* File accessed in perm check */ +#define FAN_OPEN_EXEC_PERM	0x00040000	/* File open/exec in perm check */  #define FAN_ONDIR		0x40000000	/* event occurred against dir */ diff --git a/include/uapi/linux/fb.h b/include/uapi/linux/fb.h index 6cd9b198b7c6..b6aac7ee1f67 100644 --- a/include/uapi/linux/fb.h +++ b/include/uapi/linux/fb.h @@ -393,11 +393,9 @@ struct fb_cursor {  	struct fb_image	image;	/* Cursor image */  }; -#ifdef CONFIG_FB_BACKLIGHT  /* Settings for the generic backlight code */  #define FB_BACKLIGHT_LEVELS	128  #define FB_BACKLIGHT_MAX	0xFF -#endif  #endif /* _UAPI_LINUX_FB_H */ diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h index a441ea1bfe6d..121e82ce296b 100644 --- a/include/uapi/linux/fs.h +++ b/include/uapi/linux/fs.h @@ -14,6 +14,11 @@  #include <linux/ioctl.h>  #include <linux/types.h> +/* Use of MS_* flags within the kernel is restricted to core mount(2) code. */ +#if !defined(__KERNEL__) +#include <linux/mount.h> +#endif +  /*   * It's silly to have NR_OPEN bigger than NR_FILE, but you can change   * the file limit at runtime and only root can increase the per-process @@ -101,57 +106,6 @@ struct inodes_stat_t {  #define NR_FILE  8192	/* this can well be larger on a larger system */ - -/* - * These are the fs-independent mount-flags: up to 32 flags are supported - */ -#define MS_RDONLY	 1	/* Mount read-only */ -#define MS_NOSUID	 2	/* Ignore suid and sgid bits */ -#define MS_NODEV	 4	/* Disallow access to device special files */ -#define MS_NOEXEC	 8	/* Disallow program execution */ -#define MS_SYNCHRONOUS	16	/* Writes are synced at once */ -#define MS_REMOUNT	32	/* Alter flags of a mounted FS */ -#define MS_MANDLOCK	64	/* Allow mandatory locks on an FS */ -#define MS_DIRSYNC	128	/* Directory modifications are synchronous */ -#define MS_NOATIME	1024	/* Do not update access times. */ -#define MS_NODIRATIME	2048	/* Do not update directory access times */ -#define MS_BIND		4096 -#define MS_MOVE		8192 -#define MS_REC		16384 -#define MS_VERBOSE	32768	/* War is peace. Verbosity is silence. -				   MS_VERBOSE is deprecated. */ -#define MS_SILENT	32768 -#define MS_POSIXACL	(1<<16)	/* VFS does not apply the umask */ -#define MS_UNBINDABLE	(1<<17)	/* change to unbindable */ -#define MS_PRIVATE	(1<<18)	/* change to private */ -#define MS_SLAVE	(1<<19)	/* change to slave */ -#define MS_SHARED	(1<<20)	/* change to shared */ -#define MS_RELATIME	(1<<21)	/* Update atime relative to mtime/ctime. */ -#define MS_KERNMOUNT	(1<<22) /* this is a kern_mount call */ -#define MS_I_VERSION	(1<<23) /* Update inode I_version field */ -#define MS_STRICTATIME	(1<<24) /* Always perform atime updates */ -#define MS_LAZYTIME	(1<<25) /* Update the on-disk [acm]times lazily */ - -/* These sb flags are internal to the kernel */ -#define MS_SUBMOUNT     (1<<26) -#define MS_NOREMOTELOCK	(1<<27) -#define MS_NOSEC	(1<<28) -#define MS_BORN		(1<<29) -#define MS_ACTIVE	(1<<30) -#define MS_NOUSER	(1<<31) - -/* - * Superblock flags that can be altered by MS_REMOUNT - */ -#define MS_RMT_MASK	(MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_I_VERSION|\ -			 MS_LAZYTIME) - -/* - * Old magic mount flag and mask - */ -#define MS_MGC_VAL 0xC0ED0000 -#define MS_MGC_MSK 0xffff0000 -  /*   * Structure for FS_IOC_FSGETXATTR[A] and FS_IOC_FSSETXATTR.   */ @@ -269,7 +223,8 @@ struct fsxattr {  #define FS_POLICY_FLAGS_PAD_16		0x02  #define FS_POLICY_FLAGS_PAD_32		0x03  #define FS_POLICY_FLAGS_PAD_MASK	0x03 -#define FS_POLICY_FLAGS_VALID		0x03 +#define FS_POLICY_FLAG_DIRECT_KEY	0x04	/* use master key directly */ +#define FS_POLICY_FLAGS_VALID		0x07  /* Encryption algorithms */  #define FS_ENCRYPTION_MODE_INVALID		0 @@ -281,6 +236,7 @@ struct fsxattr {  #define FS_ENCRYPTION_MODE_AES_128_CTS		6  #define FS_ENCRYPTION_MODE_SPECK128_256_XTS	7 /* Removed, do not use. */  #define FS_ENCRYPTION_MODE_SPECK128_256_CTS	8 /* Removed, do not use. */ +#define FS_ENCRYPTION_MODE_ADIANTUM		9  struct fscrypt_policy {  	__u8 version; diff --git a/include/uapi/linux/hash_info.h b/include/uapi/linux/hash_info.h index eea5d02c58de..74a8609fcb4d 100644 --- a/include/uapi/linux/hash_info.h +++ b/include/uapi/linux/hash_info.h @@ -33,6 +33,8 @@ enum hash_algo {  	HASH_ALGO_TGR_160,  	HASH_ALGO_TGR_192,  	HASH_ALGO_SM3_256, +	HASH_ALGO_STREEBOG_256, +	HASH_ALGO_STREEBOG_512,  	HASH_ALGO__LAST  }; diff --git a/include/uapi/linux/if_bridge.h b/include/uapi/linux/if_bridge.h index e41eda3c71f1..773e476a8e54 100644 --- a/include/uapi/linux/if_bridge.h +++ b/include/uapi/linux/if_bridge.h @@ -292,4 +292,25 @@ struct br_mcast_stats {  	__u64 mcast_bytes[BR_MCAST_DIR_SIZE];  	__u64 mcast_packets[BR_MCAST_DIR_SIZE];  }; + +/* bridge boolean options + * BR_BOOLOPT_NO_LL_LEARN - disable learning from link-local packets + * + * IMPORTANT: if adding a new option do not forget to handle + *            it in br_boolopt_toggle/get and bridge sysfs + */ +enum br_boolopt_id { +	BR_BOOLOPT_NO_LL_LEARN, +	BR_BOOLOPT_MAX +}; + +/* struct br_boolopt_multi - change multiple bridge boolean options + * + * @optval: new option values (bit per option) + * @optmask: options to change (bit per option) + */ +struct br_boolopt_multi { +	__u32 optval; +	__u32 optmask; +};  #endif /* _UAPI_LINUX_IF_BRIDGE_H */ diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h index 1debfa42cba1..d6533828123a 100644 --- a/include/uapi/linux/if_link.h +++ b/include/uapi/linux/if_link.h @@ -288,6 +288,7 @@ enum {  	IFLA_BR_MCAST_IGMP_VERSION,  	IFLA_BR_MCAST_MLD_VERSION,  	IFLA_BR_VLAN_STATS_PER_PORT, +	IFLA_BR_MULTI_BOOLOPT,  	__IFLA_BR_MAX,  }; @@ -533,6 +534,7 @@ enum {  	IFLA_VXLAN_LABEL,  	IFLA_VXLAN_GPE,  	IFLA_VXLAN_TTL_INHERIT, +	IFLA_VXLAN_DF,  	__IFLA_VXLAN_MAX  };  #define IFLA_VXLAN_MAX	(__IFLA_VXLAN_MAX - 1) @@ -542,6 +544,14 @@ struct ifla_vxlan_port_range {  	__be16	high;  }; +enum ifla_vxlan_df { +	VXLAN_DF_UNSET = 0, +	VXLAN_DF_SET, +	VXLAN_DF_INHERIT, +	__VXLAN_DF_END, +	VXLAN_DF_MAX = __VXLAN_DF_END - 1, +}; +  /* GENEVE section */  enum {  	IFLA_GENEVE_UNSPEC, @@ -557,10 +567,19 @@ enum {  	IFLA_GENEVE_UDP_ZERO_CSUM6_RX,  	IFLA_GENEVE_LABEL,  	IFLA_GENEVE_TTL_INHERIT, +	IFLA_GENEVE_DF,  	__IFLA_GENEVE_MAX  };  #define IFLA_GENEVE_MAX	(__IFLA_GENEVE_MAX - 1) +enum ifla_geneve_df { +	GENEVE_DF_UNSET = 0, +	GENEVE_DF_SET, +	GENEVE_DF_INHERIT, +	__GENEVE_DF_END, +	GENEVE_DF_MAX = __GENEVE_DF_END - 1, +}; +  /* PPP section */  enum {  	IFLA_PPP_UNSPEC, diff --git a/include/uapi/linux/if_tun.h b/include/uapi/linux/if_tun.h index ee432cd3018c..23a6753b37df 100644 --- a/include/uapi/linux/if_tun.h +++ b/include/uapi/linux/if_tun.h @@ -59,6 +59,7 @@  #define TUNGETVNETBE _IOR('T', 223, int)  #define TUNSETSTEERINGEBPF _IOR('T', 224, int)  #define TUNSETFILTEREBPF _IOR('T', 225, int) +#define TUNSETCARRIER _IOW('T', 226, int)  /* TUNSETIFF ifr flags */  #define IFF_TUN		0x0001 diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h index ae366b87426a..7f14d4a66c28 100644 --- a/include/uapi/linux/input-event-codes.h +++ b/include/uapi/linux/input-event-codes.h @@ -716,6 +716,8 @@   * the situation described above.   */  #define REL_RESERVED		0x0a +#define REL_WHEEL_HI_RES	0x0b +#define REL_HWHEEL_HI_RES	0x0c  #define REL_MAX			0x0f  #define REL_CNT			(REL_MAX+1) diff --git a/include/uapi/linux/magic.h b/include/uapi/linux/magic.h index 96c24478d8ce..f8c00045d537 100644 --- a/include/uapi/linux/magic.h +++ b/include/uapi/linux/magic.h @@ -73,6 +73,7 @@  #define DAXFS_MAGIC             0x64646178  #define BINFMTFS_MAGIC          0x42494e4d  #define DEVPTS_SUPER_MAGIC	0x1cd1 +#define BINDERFS_SUPER_MAGIC	0x6c6f6f70  #define FUTEXFS_SUPER_MAGIC	0xBAD1DEA  #define PIPEFS_MAGIC            0x50495045  #define PROC_SUPER_MAGIC	0x9fa0 diff --git a/include/uapi/linux/mmc/ioctl.h b/include/uapi/linux/mmc/ioctl.h index 45f369dc0a42..00c08120f3ba 100644 --- a/include/uapi/linux/mmc/ioctl.h +++ b/include/uapi/linux/mmc/ioctl.h @@ -5,7 +5,10 @@  #include <linux/types.h>  struct mmc_ioc_cmd { -	/* Implies direction of data.  true = write, false = read */ +	/* +	 * Direction of data: nonzero = write, zero = read. +	 * Bit 31 selects 'Reliable Write' for RPMB. +	 */  	int write_flag;  	/* Application-specific command.  true = precede with CMD55 */ diff --git a/include/uapi/linux/mount.h b/include/uapi/linux/mount.h new file mode 100644 index 000000000000..3f9ec42510b0 --- /dev/null +++ b/include/uapi/linux/mount.h @@ -0,0 +1,58 @@ +#ifndef _UAPI_LINUX_MOUNT_H +#define _UAPI_LINUX_MOUNT_H + +/* + * These are the fs-independent mount-flags: up to 32 flags are supported + * + * Usage of these is restricted within the kernel to core mount(2) code and + * callers of sys_mount() only.  Filesystems should be using the SB_* + * equivalent instead. + */ +#define MS_RDONLY	 1	/* Mount read-only */ +#define MS_NOSUID	 2	/* Ignore suid and sgid bits */ +#define MS_NODEV	 4	/* Disallow access to device special files */ +#define MS_NOEXEC	 8	/* Disallow program execution */ +#define MS_SYNCHRONOUS	16	/* Writes are synced at once */ +#define MS_REMOUNT	32	/* Alter flags of a mounted FS */ +#define MS_MANDLOCK	64	/* Allow mandatory locks on an FS */ +#define MS_DIRSYNC	128	/* Directory modifications are synchronous */ +#define MS_NOATIME	1024	/* Do not update access times. */ +#define MS_NODIRATIME	2048	/* Do not update directory access times */ +#define MS_BIND		4096 +#define MS_MOVE		8192 +#define MS_REC		16384 +#define MS_VERBOSE	32768	/* War is peace. Verbosity is silence. +				   MS_VERBOSE is deprecated. */ +#define MS_SILENT	32768 +#define MS_POSIXACL	(1<<16)	/* VFS does not apply the umask */ +#define MS_UNBINDABLE	(1<<17)	/* change to unbindable */ +#define MS_PRIVATE	(1<<18)	/* change to private */ +#define MS_SLAVE	(1<<19)	/* change to slave */ +#define MS_SHARED	(1<<20)	/* change to shared */ +#define MS_RELATIME	(1<<21)	/* Update atime relative to mtime/ctime. */ +#define MS_KERNMOUNT	(1<<22) /* this is a kern_mount call */ +#define MS_I_VERSION	(1<<23) /* Update inode I_version field */ +#define MS_STRICTATIME	(1<<24) /* Always perform atime updates */ +#define MS_LAZYTIME	(1<<25) /* Update the on-disk [acm]times lazily */ + +/* These sb flags are internal to the kernel */ +#define MS_SUBMOUNT     (1<<26) +#define MS_NOREMOTELOCK	(1<<27) +#define MS_NOSEC	(1<<28) +#define MS_BORN		(1<<29) +#define MS_ACTIVE	(1<<30) +#define MS_NOUSER	(1<<31) + +/* + * Superblock flags that can be altered by MS_REMOUNT + */ +#define MS_RMT_MASK	(MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_I_VERSION|\ +			 MS_LAZYTIME) + +/* + * Old magic mount flag and mask + */ +#define MS_MGC_VAL 0xC0ED0000 +#define MS_MGC_MSK 0xffff0000 + +#endif /* _UAPI_LINUX_MOUNT_H */ diff --git a/include/uapi/linux/msdos_fs.h b/include/uapi/linux/msdos_fs.h index fde753735aba..a5773899f4d9 100644 --- a/include/uapi/linux/msdos_fs.h +++ b/include/uapi/linux/msdos_fs.h @@ -58,9 +58,6 @@  #define MSDOS_DOT	".          "	/* ".", padded to MSDOS_NAME chars */  #define MSDOS_DOTDOT	"..         "	/* "..", padded to MSDOS_NAME chars */ -#define FAT_FIRST_ENT(s, x)	((MSDOS_SB(s)->fat_bits == 32 ? 0x0FFFFF00 : \ -	MSDOS_SB(s)->fat_bits == 16 ? 0xFF00 : 0xF00) | (x)) -  /* start of data cluster's entry (number of reserved clusters) */  #define FAT_START_ENT	2 @@ -68,8 +65,6 @@  #define MAX_FAT12	0xFF4  #define MAX_FAT16	0xFFF4  #define MAX_FAT32	0x0FFFFFF6 -#define MAX_FAT(s)	(MSDOS_SB(s)->fat_bits == 32 ? MAX_FAT32 : \ -	MSDOS_SB(s)->fat_bits == 16 ? MAX_FAT16 : MAX_FAT12)  /* bad cluster mark */  #define BAD_FAT12	0xFF7 @@ -135,7 +130,7 @@ struct fat_boot_sector {  						   for mount state. */  			__u8	signature;  /* extended boot signature */  			__u8	vol_id[4];	/* volume ID */ -			__u8	vol_label[11];	/* volume label */ +			__u8	vol_label[MSDOS_NAME];	/* volume label */  			__u8	fs_type[8];		/* file system type */  			/* other fields are not added here */  		} fat16; @@ -158,7 +153,7 @@ struct fat_boot_sector {  						   for mount state. */  			__u8	signature;  /* extended boot signature */  			__u8	vol_id[4];	/* volume ID */ -			__u8	vol_label[11];	/* volume label */ +			__u8	vol_label[MSDOS_NAME];	/* volume label */  			__u8	fs_type[8];		/* file system type */  			/* other fields are not added here */  		} fat32; diff --git a/include/uapi/linux/ncsi.h b/include/uapi/linux/ncsi.h index 0a26a5576645..a3f87c54fdb3 100644 --- a/include/uapi/linux/ncsi.h +++ b/include/uapi/linux/ncsi.h @@ -26,6 +26,12 @@   * @NCSI_CMD_SEND_CMD: send NC-SI command to network card.   *	Requires NCSI_ATTR_IFINDEX, NCSI_ATTR_PACKAGE_ID   *	and NCSI_ATTR_CHANNEL_ID. + * @NCSI_CMD_SET_PACKAGE_MASK: set a whitelist of allowed packages. + *	Requires NCSI_ATTR_IFINDEX and NCSI_ATTR_PACKAGE_MASK. + * @NCSI_CMD_SET_CHANNEL_MASK: set a whitelist of allowed channels. + *	Requires NCSI_ATTR_IFINDEX, NCSI_ATTR_PACKAGE_ID, and + *	NCSI_ATTR_CHANNEL_MASK. If NCSI_ATTR_CHANNEL_ID is present it sets + *	the primary channel.   * @NCSI_CMD_MAX: highest command number   */  enum ncsi_nl_commands { @@ -34,6 +40,8 @@ enum ncsi_nl_commands {  	NCSI_CMD_SET_INTERFACE,  	NCSI_CMD_CLEAR_INTERFACE,  	NCSI_CMD_SEND_CMD, +	NCSI_CMD_SET_PACKAGE_MASK, +	NCSI_CMD_SET_CHANNEL_MASK,  	__NCSI_CMD_AFTER_LAST,  	NCSI_CMD_MAX = __NCSI_CMD_AFTER_LAST - 1 @@ -48,6 +56,10 @@ enum ncsi_nl_commands {   * @NCSI_ATTR_PACKAGE_ID: package ID   * @NCSI_ATTR_CHANNEL_ID: channel ID   * @NCSI_ATTR_DATA: command payload + * @NCSI_ATTR_MULTI_FLAG: flag to signal that multi-mode should be enabled with + *	NCSI_CMD_SET_PACKAGE_MASK or NCSI_CMD_SET_CHANNEL_MASK. + * @NCSI_ATTR_PACKAGE_MASK: 32-bit mask of allowed packages. + * @NCSI_ATTR_CHANNEL_MASK: 32-bit mask of allowed channels.   * @NCSI_ATTR_MAX: highest attribute number   */  enum ncsi_nl_attrs { @@ -57,6 +69,9 @@ enum ncsi_nl_attrs {  	NCSI_ATTR_PACKAGE_ID,  	NCSI_ATTR_CHANNEL_ID,  	NCSI_ATTR_DATA, +	NCSI_ATTR_MULTI_FLAG, +	NCSI_ATTR_PACKAGE_MASK, +	NCSI_ATTR_CHANNEL_MASK,  	__NCSI_ATTR_AFTER_LAST,  	NCSI_ATTR_MAX = __NCSI_ATTR_AFTER_LAST - 1 diff --git a/include/uapi/linux/neighbour.h b/include/uapi/linux/neighbour.h index 998155444e0d..cd144e3099a3 100644 --- a/include/uapi/linux/neighbour.h +++ b/include/uapi/linux/neighbour.h @@ -28,6 +28,7 @@ enum {  	NDA_MASTER,  	NDA_LINK_NETNSID,  	NDA_SRC_VNI, +	NDA_PROTOCOL,  /* Originator of entry */  	__NDA_MAX  }; diff --git a/include/uapi/linux/net_namespace.h b/include/uapi/linux/net_namespace.h index 0187c74d8889..9f9956809565 100644 --- a/include/uapi/linux/net_namespace.h +++ b/include/uapi/linux/net_namespace.h @@ -16,6 +16,8 @@ enum {  	NETNSA_NSID,  	NETNSA_PID,  	NETNSA_FD, +	NETNSA_TARGET_NSID, +	NETNSA_CURRENT_NSID,  	__NETNSA_MAX,  }; diff --git a/include/uapi/linux/netfilter.h b/include/uapi/linux/netfilter.h index cca10e767cd8..ca9e63d6e0e4 100644 --- a/include/uapi/linux/netfilter.h +++ b/include/uapi/linux/netfilter.h @@ -34,10 +34,6 @@  /* only for userspace compatibility */  #ifndef __KERNEL__ -/* Generic cache responses from hook functions. -   <= 0x2000 is used for protocol-flags. */ -#define NFC_UNKNOWN 0x4000 -#define NFC_ALTERED 0x8000  /* NF_VERDICT_BITS should be 8 now, but userspace might break if this changes */  #define NF_VERDICT_BITS 16 diff --git a/include/uapi/linux/netfilter/ipset/ip_set.h b/include/uapi/linux/netfilter/ipset/ip_set.h index 60236f694143..ea69ca21ff23 100644 --- a/include/uapi/linux/netfilter/ipset/ip_set.h +++ b/include/uapi/linux/netfilter/ipset/ip_set.h @@ -13,8 +13,9 @@  #include <linux/types.h> -/* The protocol version */ -#define IPSET_PROTOCOL		6 +/* The protocol versions */ +#define IPSET_PROTOCOL		7 +#define IPSET_PROTOCOL_MIN	6  /* The max length of strings including NUL: set and type identifiers */  #define IPSET_MAXNAMELEN	32 @@ -38,17 +39,19 @@ enum ipset_cmd {  	IPSET_CMD_TEST,		/* 11: Test an element in a set */  	IPSET_CMD_HEADER,	/* 12: Get set header data only */  	IPSET_CMD_TYPE,		/* 13: Get set type */ +	IPSET_CMD_GET_BYNAME,	/* 14: Get set index by name */ +	IPSET_CMD_GET_BYINDEX,	/* 15: Get set name by index */  	IPSET_MSG_MAX,		/* Netlink message commands */  	/* Commands in userspace: */ -	IPSET_CMD_RESTORE = IPSET_MSG_MAX, /* 14: Enter restore mode */ -	IPSET_CMD_HELP,		/* 15: Get help */ -	IPSET_CMD_VERSION,	/* 16: Get program version */ -	IPSET_CMD_QUIT,		/* 17: Quit from interactive mode */ +	IPSET_CMD_RESTORE = IPSET_MSG_MAX, /* 16: Enter restore mode */ +	IPSET_CMD_HELP,		/* 17: Get help */ +	IPSET_CMD_VERSION,	/* 18: Get program version */ +	IPSET_CMD_QUIT,		/* 19: Quit from interactive mode */  	IPSET_CMD_MAX, -	IPSET_CMD_COMMIT = IPSET_CMD_MAX, /* 18: Commit buffered commands */ +	IPSET_CMD_COMMIT = IPSET_CMD_MAX, /* 20: Commit buffered commands */  };  /* Attributes at command level */ @@ -66,6 +69,7 @@ enum {  	IPSET_ATTR_LINENO,	/* 9: Restore lineno */  	IPSET_ATTR_PROTOCOL_MIN, /* 10: Minimal supported version number */  	IPSET_ATTR_REVISION_MIN	= IPSET_ATTR_PROTOCOL_MIN, /* type rev min */ +	IPSET_ATTR_INDEX,	/* 11: Kernel index of set */  	__IPSET_ATTR_CMD_MAX,  };  #define IPSET_ATTR_CMD_MAX	(__IPSET_ATTR_CMD_MAX - 1) @@ -223,6 +227,7 @@ enum ipset_adt {  /* Sets are identified by an index in kernel space. Tweak with ip_set_id_t   * and IPSET_INVALID_ID if you want to increase the max number of sets. + * Also, IPSET_ATTR_INDEX must be changed.   */  typedef __u16 ip_set_id_t; diff --git a/include/uapi/linux/netfilter_decnet.h b/include/uapi/linux/netfilter_decnet.h index 61f1c7dfd033..3c77f54560f2 100644 --- a/include/uapi/linux/netfilter_decnet.h +++ b/include/uapi/linux/netfilter_decnet.h @@ -15,16 +15,6 @@  #include <limits.h> /* for INT_MIN, INT_MAX */ -/* IP Cache bits. */ -/* Src IP address. */ -#define NFC_DN_SRC		0x0001 -/* Dest IP address. */ -#define NFC_DN_DST		0x0002 -/* Input device. */ -#define NFC_DN_IF_IN		0x0004 -/* Output device. */ -#define NFC_DN_IF_OUT		0x0008 -  /* kernel define is in netfilter_defs.h */  #define NF_DN_NUMHOOKS		7  #endif /* ! __KERNEL__ */ diff --git a/include/uapi/linux/netfilter_ipv4.h b/include/uapi/linux/netfilter_ipv4.h index c3b060775e13..155e77d6a42d 100644 --- a/include/uapi/linux/netfilter_ipv4.h +++ b/include/uapi/linux/netfilter_ipv4.h @@ -13,34 +13,6 @@  #include <limits.h> /* for INT_MIN, INT_MAX */ -/* IP Cache bits. */ -/* Src IP address. */ -#define NFC_IP_SRC		0x0001 -/* Dest IP address. */ -#define NFC_IP_DST		0x0002 -/* Input device. */ -#define NFC_IP_IF_IN		0x0004 -/* Output device. */ -#define NFC_IP_IF_OUT		0x0008 -/* TOS. */ -#define NFC_IP_TOS		0x0010 -/* Protocol. */ -#define NFC_IP_PROTO		0x0020 -/* IP options. */ -#define NFC_IP_OPTIONS		0x0040 -/* Frag & flags. */ -#define NFC_IP_FRAG		0x0080 - -/* Per-protocol information: only matters if proto match. */ -/* TCP flags. */ -#define NFC_IP_TCPFLAGS		0x0100 -/* Source port. */ -#define NFC_IP_SRC_PT		0x0200 -/* Dest port. */ -#define NFC_IP_DST_PT		0x0400 -/* Something else about the proto */ -#define NFC_IP_PROTO_UNKNOWN	0x2000 -  /* IP Hooks */  /* After promisc drops, checksum checks. */  #define NF_IP_PRE_ROUTING	0 diff --git a/include/uapi/linux/netfilter_ipv6.h b/include/uapi/linux/netfilter_ipv6.h index dc624fd24d25..80aa9b0799af 100644 --- a/include/uapi/linux/netfilter_ipv6.h +++ b/include/uapi/linux/netfilter_ipv6.h @@ -16,35 +16,6 @@  #include <limits.h> /* for INT_MIN, INT_MAX */ -/* IP Cache bits. */ -/* Src IP address. */ -#define NFC_IP6_SRC              0x0001 -/* Dest IP address. */ -#define NFC_IP6_DST              0x0002 -/* Input device. */ -#define NFC_IP6_IF_IN            0x0004 -/* Output device. */ -#define NFC_IP6_IF_OUT           0x0008 -/* TOS. */ -#define NFC_IP6_TOS              0x0010 -/* Protocol. */ -#define NFC_IP6_PROTO            0x0020 -/* IP options. */ -#define NFC_IP6_OPTIONS          0x0040 -/* Frag & flags. */ -#define NFC_IP6_FRAG             0x0080 - - -/* Per-protocol information: only matters if proto match. */ -/* TCP flags. */ -#define NFC_IP6_TCPFLAGS         0x0100 -/* Source port. */ -#define NFC_IP6_SRC_PT           0x0200 -/* Dest port. */ -#define NFC_IP6_DST_PT           0x0400 -/* Something else about the proto */ -#define NFC_IP6_PROTO_UNKNOWN    0x2000 -  /* IP6 Hooks */  /* After promisc drops, checksum checks. */  #define NF_IP6_PRE_ROUTING	0 diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index 6d610bae30a9..31ae5c7f10e3 100644 --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h @@ -1036,6 +1036,35 @@   * @NL80211_CMD_GET_FTM_RESPONDER_STATS: Retrieve FTM responder statistics, in   *	the %NL80211_ATTR_FTM_RESPONDER_STATS attribute.   * + * @NL80211_CMD_PEER_MEASUREMENT_START: start a (set of) peer measurement(s) + *	with the given parameters, which are encapsulated in the nested + *	%NL80211_ATTR_PEER_MEASUREMENTS attribute. Optionally, MAC address + *	randomization may be enabled and configured by specifying the + *	%NL80211_ATTR_MAC and %NL80211_ATTR_MAC_MASK attributes. + *	If a timeout is requested, use the %NL80211_ATTR_TIMEOUT attribute. + *	A u64 cookie for further %NL80211_ATTR_COOKIE use is is returned in + *	the netlink extended ack message. + * + *	To cancel a measurement, close the socket that requested it. + * + *	Measurement results are reported to the socket that requested the + *	measurement using @NL80211_CMD_PEER_MEASUREMENT_RESULT when they + *	become available, so applications must ensure a large enough socket + *	buffer size. + * + *	Depending on driver support it may or may not be possible to start + *	multiple concurrent measurements. + * @NL80211_CMD_PEER_MEASUREMENT_RESULT: This command number is used for the + *	result notification from the driver to the requesting socket. + * @NL80211_CMD_PEER_MEASUREMENT_COMPLETE: Notification only, indicating that + *	the measurement completed, using the measurement cookie + *	(%NL80211_ATTR_COOKIE). + * + * @NL80211_CMD_NOTIFY_RADAR: Notify the kernel that a radar signal was + *	detected and reported by a neighboring device on the channel + *	indicated by %NL80211_ATTR_WIPHY_FREQ and other attributes + *	determining the width and type. + *   * @NL80211_CMD_MAX: highest used command number   * @__NL80211_CMD_AFTER_LAST: internal use   */ @@ -1250,6 +1279,12 @@ enum nl80211_commands {  	NL80211_CMD_GET_FTM_RESPONDER_STATS, +	NL80211_CMD_PEER_MEASUREMENT_START, +	NL80211_CMD_PEER_MEASUREMENT_RESULT, +	NL80211_CMD_PEER_MEASUREMENT_COMPLETE, + +	NL80211_CMD_NOTIFY_RADAR, +  	/* add new commands above here */  	/* used to define NL80211_CMD_MAX below */ @@ -1706,7 +1741,7 @@ enum nl80211_commands {   *	the values passed in @NL80211_ATTR_SCAN_SSIDS (eg. if an SSID   *	is included in the probe request, but the match attributes   *	will never let it go through), -EINVAL may be returned. - *	If ommited, no filtering is done. + *	If omitted, no filtering is done.   *   * @NL80211_ATTR_INTERFACE_COMBINATIONS: Nested attribute listing the supported   *	interface combinations. In each nested item, it contains attributes @@ -1811,7 +1846,7 @@ enum nl80211_commands {   *   * @NL80211_ATTR_INACTIVITY_TIMEOUT: timeout value in seconds, this can be   *	used by the drivers which has MLME in firmware and does not have support - *	to report per station tx/rx activity to free up the staion entry from + *	to report per station tx/rx activity to free up the station entry from   *	the list. This needs to be used when the driver advertises the   *	capability to timeout the stations.   * @@ -2172,7 +2207,7 @@ enum nl80211_commands {   *   * @NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST: When present the RSSI level for BSSs in   *	the specified band is to be adjusted before doing - *	%NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI based comparision to figure out + *	%NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI based comparison to figure out   *	better BSSs. The attribute value is a packed structure   *	value as specified by &struct nl80211_bss_select_rssi_adjust.   * @@ -2254,6 +2289,16 @@ enum nl80211_commands {   * @NL80211_ATTR_FTM_RESPONDER_STATS: Nested attribute with FTM responder   *	statistics, see &enum nl80211_ftm_responder_stats.   * + * @NL80211_ATTR_TIMEOUT: Timeout for the given operation in milliseconds (u32), + *	if the attribute is not given no timeout is requested. Note that 0 is an + *	invalid value. + * + * @NL80211_ATTR_PEER_MEASUREMENTS: peer measurements request (and result) + *	data, uses nested attributes specified in + *	&enum nl80211_peer_measurement_attrs. + *	This is also used for capability advertisement in the wiphy information, + *	with the appropriate sub-attributes. + *   * @NUM_NL80211_ATTR: total number of nl80211_attrs available   * @NL80211_ATTR_MAX: highest attribute number currently defined   * @__NL80211_ATTR_AFTER_LAST: internal use @@ -2699,6 +2744,10 @@ enum nl80211_attrs {  	NL80211_ATTR_FTM_RESPONDER_STATS, +	NL80211_ATTR_TIMEOUT, + +	NL80211_ATTR_PEER_MEASUREMENTS, +  	/* add attributes here, update the policy in nl80211.c */  	__NL80211_ATTR_AFTER_LAST, @@ -3074,6 +3123,8 @@ enum nl80211_sta_bss_param {   *	with an FCS error (u32, from this station). This count may not include   *	some packets with an FCS error due to TA corruption. Hence this counter   *	might not be fully accurate. + * @NL80211_STA_INFO_CONNECTED_TO_GATE: set to true if STA has a path to a + *	mesh gate (u8, 0 or 1)   * @__NL80211_STA_INFO_AFTER_LAST: internal   * @NL80211_STA_INFO_MAX: highest possible station info attribute   */ @@ -3116,6 +3167,7 @@ enum nl80211_sta_info {  	NL80211_STA_INFO_ACK_SIGNAL_AVG,  	NL80211_STA_INFO_RX_MPDUS,  	NL80211_STA_INFO_FCS_ERROR_COUNT, +	NL80211_STA_INFO_CONNECTED_TO_GATE,  	/* keep last */  	__NL80211_STA_INFO_AFTER_LAST, @@ -3895,6 +3947,11 @@ enum nl80211_mesh_power_mode {   *	remove it from the STA's list of peers. You may set this to 0 to disable   *	the removal of the STA. Default is 30 minutes.   * + * @NL80211_MESHCONF_CONNECTED_TO_GATE: If set to true then this mesh STA + *	will advertise that it is connected to a gate in the mesh formation + *	field.  If left unset then the mesh formation field will only + *	advertise such if there is an active root mesh path. + *   * @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use   */  enum nl80211_meshconf_params { @@ -3927,6 +3984,7 @@ enum nl80211_meshconf_params {  	NL80211_MESHCONF_POWER_MODE,  	NL80211_MESHCONF_AWAKE_WINDOW,  	NL80211_MESHCONF_PLINK_TIMEOUT, +	NL80211_MESHCONF_CONNECTED_TO_GATE,  	/* keep last */  	__NL80211_MESHCONF_ATTR_AFTER_LAST, @@ -4859,7 +4917,7 @@ enum nl80211_iface_limit_attrs {   *	numbers = [ #{STA} <= 1, #{P2P-client,P2P-GO} <= 3 ], max = 4   *	=> allows a STA plus three P2P interfaces   * - * The list of these four possiblities could completely be contained + * The list of these four possibilities could completely be contained   * within the %NL80211_ATTR_INTERFACE_COMBINATIONS attribute to indicate   * that any of these groups must match.   * @@ -4889,7 +4947,7 @@ enum nl80211_if_combination_attrs {   * enum nl80211_plink_state - state of a mesh peer link finite state machine   *   * @NL80211_PLINK_LISTEN: initial state, considered the implicit - *	state of non existant mesh peer links + *	state of non existent mesh peer links   * @NL80211_PLINK_OPN_SNT: mesh plink open frame has been sent to   *	this mesh peer   * @NL80211_PLINK_OPN_RCVD: mesh plink open frame has been received @@ -5381,7 +5439,7 @@ enum nl80211_timeout_reason {   *	request parameters IE in the probe request   * @NL80211_SCAN_FLAG_ACCEPT_BCAST_PROBE_RESP: accept broadcast probe responses   * @NL80211_SCAN_FLAG_OCE_PROBE_REQ_HIGH_TX_RATE: send probe request frames at - *	rate of at least 5.5M. In case non OCE AP is dicovered in the channel, + *	rate of at least 5.5M. In case non OCE AP is discovered in the channel,   *	only the first probe req in the channel will be sent in high rate.   * @NL80211_SCAN_FLAG_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION: allow probe request   *	tx deferral (dot11FILSProbeDelay shall be set to 15ms) @@ -5842,9 +5900,11 @@ enum nl80211_external_auth_action {   * @__NL80211_FTM_RESP_ATTR_INVALID: Invalid   * @NL80211_FTM_RESP_ATTR_ENABLED: FTM responder is enabled   * @NL80211_FTM_RESP_ATTR_LCI: The content of Measurement Report Element - *	(9.4.2.22 in 802.11-2016) with type 8 - LCI (9.4.2.22.10) + *	(9.4.2.22 in 802.11-2016) with type 8 - LCI (9.4.2.22.10), + *	i.e. starting with the measurement token   * @NL80211_FTM_RESP_ATTR_CIVIC: The content of Measurement Report Element - *	(9.4.2.22 in 802.11-2016) with type 11 - Civic (Section 9.4.2.22.13) + *	(9.4.2.22 in 802.11-2016) with type 11 - Civic (Section 9.4.2.22.13), + *	i.e. starting with the measurement token   * @__NL80211_FTM_RESP_ATTR_LAST: Internal   * @NL80211_FTM_RESP_ATTR_MAX: highest FTM responder attribute.   */ @@ -5906,4 +5966,386 @@ enum nl80211_ftm_responder_stats {  	NL80211_FTM_STATS_MAX = __NL80211_FTM_STATS_AFTER_LAST - 1  }; +/** + * enum nl80211_preamble - frame preamble types + * @NL80211_PREAMBLE_LEGACY: legacy (HR/DSSS, OFDM, ERP PHY) preamble + * @NL80211_PREAMBLE_HT: HT preamble + * @NL80211_PREAMBLE_VHT: VHT preamble + * @NL80211_PREAMBLE_DMG: DMG preamble + */ +enum nl80211_preamble { +	NL80211_PREAMBLE_LEGACY, +	NL80211_PREAMBLE_HT, +	NL80211_PREAMBLE_VHT, +	NL80211_PREAMBLE_DMG, +}; + +/** + * enum nl80211_peer_measurement_type - peer measurement types + * @NL80211_PMSR_TYPE_INVALID: invalid/unused, needed as we use + *	these numbers also for attributes + * + * @NL80211_PMSR_TYPE_FTM: flight time measurement + * + * @NUM_NL80211_PMSR_TYPES: internal + * @NL80211_PMSR_TYPE_MAX: highest type number + */ +enum nl80211_peer_measurement_type { +	NL80211_PMSR_TYPE_INVALID, + +	NL80211_PMSR_TYPE_FTM, + +	NUM_NL80211_PMSR_TYPES, +	NL80211_PMSR_TYPE_MAX = NUM_NL80211_PMSR_TYPES - 1 +}; + +/** + * enum nl80211_peer_measurement_status - peer measurement status + * @NL80211_PMSR_STATUS_SUCCESS: measurement completed successfully + * @NL80211_PMSR_STATUS_REFUSED: measurement was locally refused + * @NL80211_PMSR_STATUS_TIMEOUT: measurement timed out + * @NL80211_PMSR_STATUS_FAILURE: measurement failed, a type-dependent + *	reason may be available in the response data + */ +enum nl80211_peer_measurement_status { +	NL80211_PMSR_STATUS_SUCCESS, +	NL80211_PMSR_STATUS_REFUSED, +	NL80211_PMSR_STATUS_TIMEOUT, +	NL80211_PMSR_STATUS_FAILURE, +}; + +/** + * enum nl80211_peer_measurement_req - peer measurement request attributes + * @__NL80211_PMSR_REQ_ATTR_INVALID: invalid + * + * @NL80211_PMSR_REQ_ATTR_DATA: This is a nested attribute with measurement + *	type-specific request data inside. The attributes used are from the + *	enums named nl80211_peer_measurement_<type>_req. + * @NL80211_PMSR_REQ_ATTR_GET_AP_TSF: include AP TSF timestamp, if supported + *	(flag attribute) + * + * @NUM_NL80211_PMSR_REQ_ATTRS: internal + * @NL80211_PMSR_REQ_ATTR_MAX: highest attribute number + */ +enum nl80211_peer_measurement_req { +	__NL80211_PMSR_REQ_ATTR_INVALID, + +	NL80211_PMSR_REQ_ATTR_DATA, +	NL80211_PMSR_REQ_ATTR_GET_AP_TSF, + +	/* keep last */ +	NUM_NL80211_PMSR_REQ_ATTRS, +	NL80211_PMSR_REQ_ATTR_MAX = NUM_NL80211_PMSR_REQ_ATTRS - 1 +}; + +/** + * enum nl80211_peer_measurement_resp - peer measurement response attributes + * @__NL80211_PMSR_RESP_ATTR_INVALID: invalid + * + * @NL80211_PMSR_RESP_ATTR_DATA: This is a nested attribute with measurement + *	type-specific results inside. The attributes used are from the enums + *	named nl80211_peer_measurement_<type>_resp. + * @NL80211_PMSR_RESP_ATTR_STATUS: u32 value with the measurement status + *	(using values from &enum nl80211_peer_measurement_status.) + * @NL80211_PMSR_RESP_ATTR_HOST_TIME: host time (%CLOCK_BOOTTIME) when the + *	result was measured; this value is not expected to be accurate to + *	more than 20ms. (u64, nanoseconds) + * @NL80211_PMSR_RESP_ATTR_AP_TSF: TSF of the AP that the interface + *	doing the measurement is connected to when the result was measured. + *	This shall be accurately reported if supported and requested + *	(u64, usec) + * @NL80211_PMSR_RESP_ATTR_FINAL: If results are sent to the host partially + *	(*e.g. with FTM per-burst data) this flag will be cleared on all but + *	the last result; if all results are combined it's set on the single + *	result. + * @NL80211_PMSR_RESP_ATTR_PAD: padding for 64-bit attributes, ignore + * + * @NUM_NL80211_PMSR_RESP_ATTRS: internal + * @NL80211_PMSR_RESP_ATTR_MAX: highest attribute number + */ +enum nl80211_peer_measurement_resp { +	__NL80211_PMSR_RESP_ATTR_INVALID, + +	NL80211_PMSR_RESP_ATTR_DATA, +	NL80211_PMSR_RESP_ATTR_STATUS, +	NL80211_PMSR_RESP_ATTR_HOST_TIME, +	NL80211_PMSR_RESP_ATTR_AP_TSF, +	NL80211_PMSR_RESP_ATTR_FINAL, +	NL80211_PMSR_RESP_ATTR_PAD, + +	/* keep last */ +	NUM_NL80211_PMSR_RESP_ATTRS, +	NL80211_PMSR_RESP_ATTR_MAX = NUM_NL80211_PMSR_RESP_ATTRS - 1 +}; + +/** + * enum nl80211_peer_measurement_peer_attrs - peer attributes for measurement + * @__NL80211_PMSR_PEER_ATTR_INVALID: invalid + * + * @NL80211_PMSR_PEER_ATTR_ADDR: peer's MAC address + * @NL80211_PMSR_PEER_ATTR_CHAN: channel definition, nested, using top-level + *	attributes like %NL80211_ATTR_WIPHY_FREQ etc. + * @NL80211_PMSR_PEER_ATTR_REQ: This is a nested attribute indexed by + *	measurement type, with attributes from the + *	&enum nl80211_peer_measurement_req inside. + * @NL80211_PMSR_PEER_ATTR_RESP: This is a nested attribute indexed by + *	measurement type, with attributes from the + *	&enum nl80211_peer_measurement_resp inside. + * + * @NUM_NL80211_PMSR_PEER_ATTRS: internal + * @NL80211_PMSR_PEER_ATTR_MAX: highest attribute number + */ +enum nl80211_peer_measurement_peer_attrs { +	__NL80211_PMSR_PEER_ATTR_INVALID, + +	NL80211_PMSR_PEER_ATTR_ADDR, +	NL80211_PMSR_PEER_ATTR_CHAN, +	NL80211_PMSR_PEER_ATTR_REQ, +	NL80211_PMSR_PEER_ATTR_RESP, + +	/* keep last */ +	NUM_NL80211_PMSR_PEER_ATTRS, +	NL80211_PMSR_PEER_ATTR_MAX = NUM_NL80211_PMSR_PEER_ATTRS - 1, +}; + +/** + * enum nl80211_peer_measurement_attrs - peer measurement attributes + * @__NL80211_PMSR_ATTR_INVALID: invalid + * + * @NL80211_PMSR_ATTR_MAX_PEERS: u32 attribute used for capability + *	advertisement only, indicates the maximum number of peers + *	measurements can be done with in a single request + * @NL80211_PMSR_ATTR_REPORT_AP_TSF: flag attribute in capability + *	indicating that the connected AP's TSF can be reported in + *	measurement results + * @NL80211_PMSR_ATTR_RANDOMIZE_MAC_ADDR: flag attribute in capability + *	indicating that MAC address randomization is supported. + * @NL80211_PMSR_ATTR_TYPE_CAPA: capabilities reported by the device, + *	this contains a nesting indexed by measurement type, and + *	type-specific capabilities inside, which are from the enums + *	named nl80211_peer_measurement_<type>_capa. + * @NL80211_PMSR_ATTR_PEERS: nested attribute, the nesting index is + *	meaningless, just a list of peers to measure with, with the + *	sub-attributes taken from + *	&enum nl80211_peer_measurement_peer_attrs. + * + * @NUM_NL80211_PMSR_ATTR: internal + * @NL80211_PMSR_ATTR_MAX: highest attribute number + */ +enum nl80211_peer_measurement_attrs { +	__NL80211_PMSR_ATTR_INVALID, + +	NL80211_PMSR_ATTR_MAX_PEERS, +	NL80211_PMSR_ATTR_REPORT_AP_TSF, +	NL80211_PMSR_ATTR_RANDOMIZE_MAC_ADDR, +	NL80211_PMSR_ATTR_TYPE_CAPA, +	NL80211_PMSR_ATTR_PEERS, + +	/* keep last */ +	NUM_NL80211_PMSR_ATTR, +	NL80211_PMSR_ATTR_MAX = NUM_NL80211_PMSR_ATTR - 1 +}; + +/** + * enum nl80211_peer_measurement_ftm_capa - FTM capabilities + * @__NL80211_PMSR_FTM_CAPA_ATTR_INVALID: invalid + * + * @NL80211_PMSR_FTM_CAPA_ATTR_ASAP: flag attribute indicating ASAP mode + *	is supported + * @NL80211_PMSR_FTM_CAPA_ATTR_NON_ASAP: flag attribute indicating non-ASAP + *	mode is supported + * @NL80211_PMSR_FTM_CAPA_ATTR_REQ_LCI: flag attribute indicating if LCI + *	data can be requested during the measurement + * @NL80211_PMSR_FTM_CAPA_ATTR_REQ_CIVICLOC: flag attribute indicating if civic + *	location data can be requested during the measurement + * @NL80211_PMSR_FTM_CAPA_ATTR_PREAMBLES: u32 bitmap attribute of bits + *	from &enum nl80211_preamble. + * @NL80211_PMSR_FTM_CAPA_ATTR_BANDWIDTHS: bitmap of values from + *	&enum nl80211_chan_width indicating the supported channel + *	bandwidths for FTM. Note that a higher channel bandwidth may be + *	configured to allow for other measurements types with different + *	bandwidth requirement in the same measurement. + * @NL80211_PMSR_FTM_CAPA_ATTR_MAX_BURSTS_EXPONENT: u32 attribute indicating + *	the maximum bursts exponent that can be used (if not present anything + *	is valid) + * @NL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST: u32 attribute indicating + *	the maximum FTMs per burst (if not present anything is valid) + * + * @NUM_NL80211_PMSR_FTM_CAPA_ATTR: internal + * @NL80211_PMSR_FTM_CAPA_ATTR_MAX: highest attribute number + */ +enum nl80211_peer_measurement_ftm_capa { +	__NL80211_PMSR_FTM_CAPA_ATTR_INVALID, + +	NL80211_PMSR_FTM_CAPA_ATTR_ASAP, +	NL80211_PMSR_FTM_CAPA_ATTR_NON_ASAP, +	NL80211_PMSR_FTM_CAPA_ATTR_REQ_LCI, +	NL80211_PMSR_FTM_CAPA_ATTR_REQ_CIVICLOC, +	NL80211_PMSR_FTM_CAPA_ATTR_PREAMBLES, +	NL80211_PMSR_FTM_CAPA_ATTR_BANDWIDTHS, +	NL80211_PMSR_FTM_CAPA_ATTR_MAX_BURSTS_EXPONENT, +	NL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST, + +	/* keep last */ +	NUM_NL80211_PMSR_FTM_CAPA_ATTR, +	NL80211_PMSR_FTM_CAPA_ATTR_MAX = NUM_NL80211_PMSR_FTM_CAPA_ATTR - 1 +}; + +/** + * enum nl80211_peer_measurement_ftm_req - FTM request attributes + * @__NL80211_PMSR_FTM_REQ_ATTR_INVALID: invalid + * + * @NL80211_PMSR_FTM_REQ_ATTR_ASAP: ASAP mode requested (flag) + * @NL80211_PMSR_FTM_REQ_ATTR_PREAMBLE: preamble type (see + *	&enum nl80211_preamble), optional for DMG (u32) + * @NL80211_PMSR_FTM_REQ_ATTR_NUM_BURSTS_EXP: number of bursts exponent as in + *	802.11-2016 9.4.2.168 "Fine Timing Measurement Parameters element" + *	(u8, 0-15, optional with default 15 i.e. "no preference") + * @NL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD: interval between bursts in units + *	of 100ms (u16, optional with default 0) + * @NL80211_PMSR_FTM_REQ_ATTR_BURST_DURATION: burst duration, as in 802.11-2016 + *	Table 9-257 "Burst Duration field encoding" (u8, 0-15, optional with + *	default 15 i.e. "no preference") + * @NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST: number of successful FTM frames + *	requested per burst + *	(u8, 0-31, optional with default 0 i.e. "no preference") + * @NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES: number of FTMR frame retries + *	(u8, default 3) + * @NL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI: request LCI data (flag) + * @NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC: request civic location data + *	(flag) + * + * @NUM_NL80211_PMSR_FTM_REQ_ATTR: internal + * @NL80211_PMSR_FTM_REQ_ATTR_MAX: highest attribute number + */ +enum nl80211_peer_measurement_ftm_req { +	__NL80211_PMSR_FTM_REQ_ATTR_INVALID, + +	NL80211_PMSR_FTM_REQ_ATTR_ASAP, +	NL80211_PMSR_FTM_REQ_ATTR_PREAMBLE, +	NL80211_PMSR_FTM_REQ_ATTR_NUM_BURSTS_EXP, +	NL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD, +	NL80211_PMSR_FTM_REQ_ATTR_BURST_DURATION, +	NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST, +	NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES, +	NL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI, +	NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC, + +	/* keep last */ +	NUM_NL80211_PMSR_FTM_REQ_ATTR, +	NL80211_PMSR_FTM_REQ_ATTR_MAX = NUM_NL80211_PMSR_FTM_REQ_ATTR - 1 +}; + +/** + * enum nl80211_peer_measurement_ftm_failure_reasons - FTM failure reasons + * @NL80211_PMSR_FTM_FAILURE_UNSPECIFIED: unspecified failure, not used + * @NL80211_PMSR_FTM_FAILURE_NO_RESPONSE: no response from the FTM responder + * @NL80211_PMSR_FTM_FAILURE_REJECTED: FTM responder rejected measurement + * @NL80211_PMSR_FTM_FAILURE_WRONG_CHANNEL: we already know the peer is + *	on a different channel, so can't measure (if we didn't know, we'd + *	try and get no response) + * @NL80211_PMSR_FTM_FAILURE_PEER_NOT_CAPABLE: peer can't actually do FTM + * @NL80211_PMSR_FTM_FAILURE_INVALID_TIMESTAMP: invalid T1/T4 timestamps + *	received + * @NL80211_PMSR_FTM_FAILURE_PEER_BUSY: peer reports busy, you may retry + *	later (see %NL80211_PMSR_FTM_RESP_ATTR_BUSY_RETRY_TIME) + * @NL80211_PMSR_FTM_FAILURE_BAD_CHANGED_PARAMS: parameters were changed + *	by the peer and are no longer supported + */ +enum nl80211_peer_measurement_ftm_failure_reasons { +	NL80211_PMSR_FTM_FAILURE_UNSPECIFIED, +	NL80211_PMSR_FTM_FAILURE_NO_RESPONSE, +	NL80211_PMSR_FTM_FAILURE_REJECTED, +	NL80211_PMSR_FTM_FAILURE_WRONG_CHANNEL, +	NL80211_PMSR_FTM_FAILURE_PEER_NOT_CAPABLE, +	NL80211_PMSR_FTM_FAILURE_INVALID_TIMESTAMP, +	NL80211_PMSR_FTM_FAILURE_PEER_BUSY, +	NL80211_PMSR_FTM_FAILURE_BAD_CHANGED_PARAMS, +}; + +/** + * enum nl80211_peer_measurement_ftm_resp - FTM response attributes + * @__NL80211_PMSR_FTM_RESP_ATTR_INVALID: invalid + * + * @NL80211_PMSR_FTM_RESP_ATTR_FAIL_REASON: FTM-specific failure reason + *	(u32, optional) + * @NL80211_PMSR_FTM_RESP_ATTR_BURST_INDEX: optional, if bursts are reported + *	as separate results then it will be the burst index 0...(N-1) and + *	the top level will indicate partial results (u32) + * @NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_ATTEMPTS: number of FTM Request frames + *	transmitted (u32, optional) + * @NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_SUCCESSES: number of FTM Request frames + *	that were acknowleged (u32, optional) + * @NL80211_PMSR_FTM_RESP_ATTR_BUSY_RETRY_TIME: retry time received from the + *	busy peer (u32, seconds) + * @NL80211_PMSR_FTM_RESP_ATTR_NUM_BURSTS_EXP: actual number of bursts exponent + *	used by the responder (similar to request, u8) + * @NL80211_PMSR_FTM_RESP_ATTR_BURST_DURATION: actual burst duration used by + *	the responder (similar to request, u8) + * @NL80211_PMSR_FTM_RESP_ATTR_FTMS_PER_BURST: actual FTMs per burst used + *	by the responder (similar to request, u8) + * @NL80211_PMSR_FTM_RESP_ATTR_RSSI_AVG: average RSSI across all FTM action + *	frames (optional, s32, 1/2 dBm) + * @NL80211_PMSR_FTM_RESP_ATTR_RSSI_SPREAD: RSSI spread across all FTM action + *	frames (optional, s32, 1/2 dBm) + * @NL80211_PMSR_FTM_RESP_ATTR_TX_RATE: bitrate we used for the response to the + *	FTM action frame (optional, nested, using &enum nl80211_rate_info + *	attributes) + * @NL80211_PMSR_FTM_RESP_ATTR_RX_RATE: bitrate the responder used for the FTM + *	action frame (optional, nested, using &enum nl80211_rate_info attrs) + * @NL80211_PMSR_FTM_RESP_ATTR_RTT_AVG: average RTT (s64, picoseconds, optional + *	but one of RTT/DIST must be present) + * @NL80211_PMSR_FTM_RESP_ATTR_RTT_VARIANCE: RTT variance (u64, ps^2, note that + *	standard deviation is the square root of variance, optional) + * @NL80211_PMSR_FTM_RESP_ATTR_RTT_SPREAD: RTT spread (u64, picoseconds, + *	optional) + * @NL80211_PMSR_FTM_RESP_ATTR_DIST_AVG: average distance (s64, mm, optional + *	but one of RTT/DIST must be present) + * @NL80211_PMSR_FTM_RESP_ATTR_DIST_VARIANCE: distance variance (u64, mm^2, note + *	that standard deviation is the square root of variance, optional) + * @NL80211_PMSR_FTM_RESP_ATTR_DIST_SPREAD: distance spread (u64, mm, optional) + * @NL80211_PMSR_FTM_RESP_ATTR_LCI: LCI data from peer (binary, optional); + *	this is the contents of the Measurement Report Element (802.11-2016 + *	9.4.2.22.1) starting with the Measurement Token, with Measurement + *	Type 8. + * @NL80211_PMSR_FTM_RESP_ATTR_CIVICLOC: civic location data from peer + *	(binary, optional); + *	this is the contents of the Measurement Report Element (802.11-2016 + *	9.4.2.22.1) starting with the Measurement Token, with Measurement + *	Type 11. + * @NL80211_PMSR_FTM_RESP_ATTR_PAD: ignore, for u64/s64 padding only + * + * @NUM_NL80211_PMSR_FTM_RESP_ATTR: internal + * @NL80211_PMSR_FTM_RESP_ATTR_MAX: highest attribute number + */ +enum nl80211_peer_measurement_ftm_resp { +	__NL80211_PMSR_FTM_RESP_ATTR_INVALID, + +	NL80211_PMSR_FTM_RESP_ATTR_FAIL_REASON, +	NL80211_PMSR_FTM_RESP_ATTR_BURST_INDEX, +	NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_ATTEMPTS, +	NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_SUCCESSES, +	NL80211_PMSR_FTM_RESP_ATTR_BUSY_RETRY_TIME, +	NL80211_PMSR_FTM_RESP_ATTR_NUM_BURSTS_EXP, +	NL80211_PMSR_FTM_RESP_ATTR_BURST_DURATION, +	NL80211_PMSR_FTM_RESP_ATTR_FTMS_PER_BURST, +	NL80211_PMSR_FTM_RESP_ATTR_RSSI_AVG, +	NL80211_PMSR_FTM_RESP_ATTR_RSSI_SPREAD, +	NL80211_PMSR_FTM_RESP_ATTR_TX_RATE, +	NL80211_PMSR_FTM_RESP_ATTR_RX_RATE, +	NL80211_PMSR_FTM_RESP_ATTR_RTT_AVG, +	NL80211_PMSR_FTM_RESP_ATTR_RTT_VARIANCE, +	NL80211_PMSR_FTM_RESP_ATTR_RTT_SPREAD, +	NL80211_PMSR_FTM_RESP_ATTR_DIST_AVG, +	NL80211_PMSR_FTM_RESP_ATTR_DIST_VARIANCE, +	NL80211_PMSR_FTM_RESP_ATTR_DIST_SPREAD, +	NL80211_PMSR_FTM_RESP_ATTR_LCI, +	NL80211_PMSR_FTM_RESP_ATTR_CIVICLOC, +	NL80211_PMSR_FTM_RESP_ATTR_PAD, + +	/* keep last */ +	NUM_NL80211_PMSR_FTM_RESP_ATTR, +	NL80211_PMSR_FTM_RESP_ATTR_MAX = NUM_NL80211_PMSR_FTM_RESP_ATTR - 1 +}; +  #endif /* __LINUX_NL80211_H */ diff --git a/include/uapi/linux/pkt_cls.h b/include/uapi/linux/pkt_cls.h index 401d0c1e612d..95d0db2a8350 100644 --- a/include/uapi/linux/pkt_cls.h +++ b/include/uapi/linux/pkt_cls.h @@ -485,6 +485,11 @@ enum {  	TCA_FLOWER_IN_HW_COUNT, +	TCA_FLOWER_KEY_PORT_SRC_MIN,	/* be16 */ +	TCA_FLOWER_KEY_PORT_SRC_MAX,	/* be16 */ +	TCA_FLOWER_KEY_PORT_DST_MIN,	/* be16 */ +	TCA_FLOWER_KEY_PORT_DST_MAX,	/* be16 */ +  	__TCA_FLOWER_MAX,  }; @@ -518,6 +523,8 @@ enum {  	TCA_FLOWER_KEY_FLAGS_FRAG_IS_FIRST = (1 << 1),  }; +#define TCA_FLOWER_MASK_FLAGS_RANGE	(1 << 0) /* Range-based match */ +  /* Match-all classifier */  enum { diff --git a/include/uapi/linux/pkt_sched.h b/include/uapi/linux/pkt_sched.h index 89ee47c2f17d..0d18b1d1fbbc 100644 --- a/include/uapi/linux/pkt_sched.h +++ b/include/uapi/linux/pkt_sched.h @@ -291,11 +291,38 @@ enum {         TCA_GRED_DPS,         TCA_GRED_MAX_P,         TCA_GRED_LIMIT, +       TCA_GRED_VQ_LIST,	/* nested TCA_GRED_VQ_ENTRY */         __TCA_GRED_MAX,  };  #define TCA_GRED_MAX (__TCA_GRED_MAX - 1) +enum { +	TCA_GRED_VQ_ENTRY_UNSPEC, +	TCA_GRED_VQ_ENTRY,	/* nested TCA_GRED_VQ_* */ +	__TCA_GRED_VQ_ENTRY_MAX, +}; +#define TCA_GRED_VQ_ENTRY_MAX (__TCA_GRED_VQ_ENTRY_MAX - 1) + +enum { +	TCA_GRED_VQ_UNSPEC, +	TCA_GRED_VQ_PAD, +	TCA_GRED_VQ_DP,			/* u32 */ +	TCA_GRED_VQ_STAT_BYTES,		/* u64 */ +	TCA_GRED_VQ_STAT_PACKETS,	/* u32 */ +	TCA_GRED_VQ_STAT_BACKLOG,	/* u32 */ +	TCA_GRED_VQ_STAT_PROB_DROP,	/* u32 */ +	TCA_GRED_VQ_STAT_PROB_MARK,	/* u32 */ +	TCA_GRED_VQ_STAT_FORCED_DROP,	/* u32 */ +	TCA_GRED_VQ_STAT_FORCED_MARK,	/* u32 */ +	TCA_GRED_VQ_STAT_PDROP,		/* u32 */ +	TCA_GRED_VQ_STAT_OTHER,		/* u32 */ +	TCA_GRED_VQ_FLAGS,		/* u32 */ +	__TCA_GRED_VQ_MAX +}; + +#define TCA_GRED_VQ_MAX (__TCA_GRED_VQ_MAX - 1) +  struct tc_gred_qopt {  	__u32		limit;        /* HARD maximal queue length (bytes)    */  	__u32		qth_min;      /* Min average length threshold (bytes) */ @@ -864,6 +891,8 @@ enum {  	TCA_FQ_LOW_RATE_THRESHOLD, /* per packet delay under this rate */ +	TCA_FQ_CE_THRESHOLD,	/* DCTCP-like CE-marking threshold */ +  	__TCA_FQ_MAX  }; @@ -882,6 +911,7 @@ struct tc_fq_qd_stats {  	__u32	inactive_flows;  	__u32	throttled_flows;  	__u32	unthrottle_latency_ns; +	__u64	ce_mark;		/* packets above ce_threshold */  };  /* Heavy-Hitter Filter */ diff --git a/include/uapi/linux/ptp_clock.h b/include/uapi/linux/ptp_clock.h index 3039bf6a742e..d73d83950265 100644 --- a/include/uapi/linux/ptp_clock.h +++ b/include/uapi/linux/ptp_clock.h @@ -84,6 +84,16 @@ struct ptp_sys_offset {  	struct ptp_clock_time ts[2 * PTP_MAX_SAMPLES + 1];  }; +struct ptp_sys_offset_extended { +	unsigned int n_samples; /* Desired number of measurements. */ +	unsigned int rsv[3];    /* Reserved for future use. */ +	/* +	 * Array of [system, phc, system] time stamps. The kernel will provide +	 * 3*n_samples time stamps. +	 */ +	struct ptp_clock_time ts[PTP_MAX_SAMPLES][3]; +}; +  struct ptp_sys_offset_precise {  	struct ptp_clock_time device;  	struct ptp_clock_time sys_realtime; @@ -136,6 +146,8 @@ struct ptp_pin_desc {  #define PTP_PIN_SETFUNC    _IOW(PTP_CLK_MAGIC, 7, struct ptp_pin_desc)  #define PTP_SYS_OFFSET_PRECISE \  	_IOWR(PTP_CLK_MAGIC, 8, struct ptp_sys_offset_precise) +#define PTP_SYS_OFFSET_EXTENDED \ +	_IOW(PTP_CLK_MAGIC, 9, struct ptp_sys_offset_extended)  struct ptp_extts_event {  	struct ptp_clock_time t; /* Time event occured. */ diff --git a/include/uapi/linux/sctp.h b/include/uapi/linux/sctp.h index c81feb373d3e..d584073532b8 100644 --- a/include/uapi/linux/sctp.h +++ b/include/uapi/linux/sctp.h @@ -129,6 +129,7 @@ typedef __s32 sctp_assoc_t;  #define SCTP_STREAM_SCHEDULER_VALUE	124  #define SCTP_INTERLEAVING_SUPPORTED	125  #define SCTP_SENDMSG_CONNECT	126 +#define SCTP_EVENT	127  /* PR-SCTP policies */  #define SCTP_PR_SCTP_NONE	0x0000 @@ -632,7 +633,9 @@ union sctp_notification {   */  enum sctp_sn_type { -	SCTP_SN_TYPE_BASE     = (1<<15), +	SCTP_SN_TYPE_BASE	= (1<<15), +	SCTP_DATA_IO_EVENT	= SCTP_SN_TYPE_BASE, +#define SCTP_DATA_IO_EVENT		SCTP_DATA_IO_EVENT  	SCTP_ASSOC_CHANGE,  #define SCTP_ASSOC_CHANGE		SCTP_ASSOC_CHANGE  	SCTP_PEER_ADDR_CHANGE, @@ -657,6 +660,8 @@ enum sctp_sn_type {  #define SCTP_ASSOC_RESET_EVENT		SCTP_ASSOC_RESET_EVENT  	SCTP_STREAM_CHANGE_EVENT,  #define SCTP_STREAM_CHANGE_EVENT	SCTP_STREAM_CHANGE_EVENT +	SCTP_SN_TYPE_MAX	= SCTP_STREAM_CHANGE_EVENT, +#define SCTP_SN_TYPE_MAX		SCTP_SN_TYPE_MAX  };  /* Notification error codes used to fill up the error fields in some @@ -1150,6 +1155,12 @@ struct sctp_add_streams {  	uint16_t sas_outstrms;  }; +struct sctp_event { +	sctp_assoc_t se_assoc_id; +	uint16_t se_type; +	uint8_t se_on; +}; +  /* SCTP Stream schedulers */  enum sctp_sched_type {  	SCTP_SS_FCFS, diff --git a/include/uapi/linux/seccomp.h b/include/uapi/linux/seccomp.h index 9efc0e73d50b..90734aa5aa36 100644 --- a/include/uapi/linux/seccomp.h +++ b/include/uapi/linux/seccomp.h @@ -15,11 +15,13 @@  #define SECCOMP_SET_MODE_STRICT		0  #define SECCOMP_SET_MODE_FILTER		1  #define SECCOMP_GET_ACTION_AVAIL	2 +#define SECCOMP_GET_NOTIF_SIZES		3  /* Valid flags for SECCOMP_SET_MODE_FILTER */ -#define SECCOMP_FILTER_FLAG_TSYNC	(1UL << 0) -#define SECCOMP_FILTER_FLAG_LOG		(1UL << 1) -#define SECCOMP_FILTER_FLAG_SPEC_ALLOW	(1UL << 2) +#define SECCOMP_FILTER_FLAG_TSYNC		(1UL << 0) +#define SECCOMP_FILTER_FLAG_LOG			(1UL << 1) +#define SECCOMP_FILTER_FLAG_SPEC_ALLOW		(1UL << 2) +#define SECCOMP_FILTER_FLAG_NEW_LISTENER	(1UL << 3)  /*   * All BPF programs must return a 32-bit value. @@ -35,6 +37,7 @@  #define SECCOMP_RET_KILL	 SECCOMP_RET_KILL_THREAD  #define SECCOMP_RET_TRAP	 0x00030000U /* disallow and force a SIGSYS */  #define SECCOMP_RET_ERRNO	 0x00050000U /* returns an errno */ +#define SECCOMP_RET_USER_NOTIF	 0x7fc00000U /* notifies userspace */  #define SECCOMP_RET_TRACE	 0x7ff00000U /* pass to a tracer or disallow */  #define SECCOMP_RET_LOG		 0x7ffc0000U /* allow after logging */  #define SECCOMP_RET_ALLOW	 0x7fff0000U /* allow */ @@ -60,4 +63,35 @@ struct seccomp_data {  	__u64 args[6];  }; +struct seccomp_notif_sizes { +	__u16 seccomp_notif; +	__u16 seccomp_notif_resp; +	__u16 seccomp_data; +}; + +struct seccomp_notif { +	__u64 id; +	__u32 pid; +	__u32 flags; +	struct seccomp_data data; +}; + +struct seccomp_notif_resp { +	__u64 id; +	__s64 val; +	__s32 error; +	__u32 flags; +}; + +#define SECCOMP_IOC_MAGIC		'!' +#define SECCOMP_IO(nr)			_IO(SECCOMP_IOC_MAGIC, nr) +#define SECCOMP_IOR(nr, type)		_IOR(SECCOMP_IOC_MAGIC, nr, type) +#define SECCOMP_IOW(nr, type)		_IOW(SECCOMP_IOC_MAGIC, nr, type) +#define SECCOMP_IOWR(nr, type)		_IOWR(SECCOMP_IOC_MAGIC, nr, type) + +/* Flags for seccomp notification fd ioctl. */ +#define SECCOMP_IOCTL_NOTIF_RECV	SECCOMP_IOWR(0, struct seccomp_notif) +#define SECCOMP_IOCTL_NOTIF_SEND	SECCOMP_IOWR(1,	\ +						struct seccomp_notif_resp) +#define SECCOMP_IOCTL_NOTIF_ID_VALID	SECCOMP_IOR(2, __u64)  #endif /* _UAPI_LINUX_SECCOMP_H */ diff --git a/include/uapi/linux/serial_core.h b/include/uapi/linux/serial_core.h index dce5f9dae121..df4a7534e239 100644 --- a/include/uapi/linux/serial_core.h +++ b/include/uapi/linux/serial_core.h @@ -281,4 +281,7 @@  /* MediaTek BTIF */  #define PORT_MTK_BTIF	117 +/* RDA UART */ +#define PORT_RDA	118 +  #endif /* _UAPILINUX_SERIAL_CORE_H */ diff --git a/include/uapi/linux/snmp.h b/include/uapi/linux/snmp.h index f80135e5feaa..86dc24a96c90 100644 --- a/include/uapi/linux/snmp.h +++ b/include/uapi/linux/snmp.h @@ -243,6 +243,7 @@ enum  	LINUX_MIB_TCPREQQFULLDROP,		/* TCPReqQFullDrop */  	LINUX_MIB_TCPRETRANSFAIL,		/* TCPRetransFail */  	LINUX_MIB_TCPRCVCOALESCE,		/* TCPRcvCoalesce */ +	LINUX_MIB_TCPBACKLOGCOALESCE,		/* TCPBacklogCoalesce */  	LINUX_MIB_TCPOFOQUEUE,			/* TCPOFOQueue */  	LINUX_MIB_TCPOFODROP,			/* TCPOFODrop */  	LINUX_MIB_TCPOFOMERGE,			/* TCPOFOMerge */ diff --git a/include/uapi/linux/sysctl.h b/include/uapi/linux/sysctl.h index d71013fffaf6..87aa2a6d9125 100644 --- a/include/uapi/linux/sysctl.h +++ b/include/uapi/linux/sysctl.h @@ -153,6 +153,7 @@ enum  	KERN_NMI_WATCHDOG=75, /* int: enable/disable nmi watchdog */  	KERN_PANIC_ON_NMI=76, /* int: whether we will panic on an unrecovered */  	KERN_PANIC_ON_WARN=77, /* int: call panic() in WARN() functions */ +	KERN_PANIC_PRINT=78, /* ulong: bitmask to print system info on panic */  }; diff --git a/include/uapi/linux/tcp.h b/include/uapi/linux/tcp.h index e02d31986ff9..8bb6cc5f3235 100644 --- a/include/uapi/linux/tcp.h +++ b/include/uapi/linux/tcp.h @@ -266,6 +266,7 @@ enum {  	TCP_NLA_BYTES_RETRANS,	/* Data bytes retransmitted */  	TCP_NLA_DSACK_DUPS,	/* DSACK blocks received */  	TCP_NLA_REORD_SEEN,	/* reordering events seen */ +	TCP_NLA_SRTT,		/* smoothed RTT in usecs */  };  /* for TCP_MD5SIG socket option */ diff --git a/include/uapi/linux/udp.h b/include/uapi/linux/udp.h index 09502de447f5..30baccb6c9c4 100644 --- a/include/uapi/linux/udp.h +++ b/include/uapi/linux/udp.h @@ -33,6 +33,7 @@ struct udphdr {  #define UDP_NO_CHECK6_TX 101	/* Disable sending checksum for UDP6X */  #define UDP_NO_CHECK6_RX 102	/* Disable accpeting checksum for UDP6 */  #define UDP_SEGMENT	103	/* Set GSO segmentation size */ +#define UDP_GRO		104	/* This socket can receive UDP GRO packets */  /* UDP encapsulation types */  #define UDP_ENCAP_ESPINUDP_NON_IKE	1 /* draft-ietf-ipsec-nat-t-ike-00/01 */ diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h index 813102810f53..02bb7ad6e986 100644 --- a/include/uapi/linux/vfio.h +++ b/include/uapi/linux/vfio.h @@ -354,6 +354,21 @@ struct vfio_region_gfx_edid {  };  /* + * 10de vendor sub-type + * + * NVIDIA GPU NVlink2 RAM is coherent RAM mapped onto the host address space. + */ +#define VFIO_REGION_SUBTYPE_NVIDIA_NVLINK2_RAM	(1) + +/* + * 1014 vendor sub-type + * + * IBM NPU NVlink2 ATSD (Address Translation Shootdown) register of NPU + * to do TLB invalidation on a GPU. + */ +#define VFIO_REGION_SUBTYPE_IBM_NVLINK2_ATSD	(1) + +/*   * The MSIX mappable capability informs that MSIX data of a BAR can be mmapped   * which allows direct access to non-MSIX registers which happened to be within   * the same system page. @@ -363,6 +378,33 @@ struct vfio_region_gfx_edid {   */  #define VFIO_REGION_INFO_CAP_MSIX_MAPPABLE	3 +/* + * Capability with compressed real address (aka SSA - small system address) + * where GPU RAM is mapped on a system bus. Used by a GPU for DMA routing + * and by the userspace to associate a NVLink bridge with a GPU. + */ +#define VFIO_REGION_INFO_CAP_NVLINK2_SSATGT	4 + +struct vfio_region_info_cap_nvlink2_ssatgt { +	struct vfio_info_cap_header header; +	__u64 tgt; +}; + +/* + * Capability with an NVLink link speed. The value is read by + * the NVlink2 bridge driver from the bridge's "ibm,nvlink-speed" + * property in the device tree. The value is fixed in the hardware + * and failing to provide the correct value results in the link + * not working with no indication from the driver why. + */ +#define VFIO_REGION_INFO_CAP_NVLINK2_LNKSPD	5 + +struct vfio_region_info_cap_nvlink2_lnkspd { +	struct vfio_info_cap_header header; +	__u32 link_speed; +	__u32 __pad; +}; +  /**   * VFIO_DEVICE_GET_IRQ_INFO - _IOWR(VFIO_TYPE, VFIO_BASE + 9,   *				    struct vfio_irq_info) diff --git a/include/uapi/linux/vhost.h b/include/uapi/linux/vhost.h index 84c3de89696a..40d028eed645 100644 --- a/include/uapi/linux/vhost.h +++ b/include/uapi/linux/vhost.h @@ -11,94 +11,9 @@   * device configuration.   */ +#include <linux/vhost_types.h>  #include <linux/types.h> -#include <linux/compiler.h>  #include <linux/ioctl.h> -#include <linux/virtio_config.h> -#include <linux/virtio_ring.h> - -struct vhost_vring_state { -	unsigned int index; -	unsigned int num; -}; - -struct vhost_vring_file { -	unsigned int index; -	int fd; /* Pass -1 to unbind from file. */ - -}; - -struct vhost_vring_addr { -	unsigned int index; -	/* Option flags. */ -	unsigned int flags; -	/* Flag values: */ -	/* Whether log address is valid. If set enables logging. */ -#define VHOST_VRING_F_LOG 0 - -	/* Start of array of descriptors (virtually contiguous) */ -	__u64 desc_user_addr; -	/* Used structure address. Must be 32 bit aligned */ -	__u64 used_user_addr; -	/* Available structure address. Must be 16 bit aligned */ -	__u64 avail_user_addr; -	/* Logging support. */ -	/* Log writes to used structure, at offset calculated from specified -	 * address. Address must be 32 bit aligned. */ -	__u64 log_guest_addr; -}; - -/* no alignment requirement */ -struct vhost_iotlb_msg { -	__u64 iova; -	__u64 size; -	__u64 uaddr; -#define VHOST_ACCESS_RO      0x1 -#define VHOST_ACCESS_WO      0x2 -#define VHOST_ACCESS_RW      0x3 -	__u8 perm; -#define VHOST_IOTLB_MISS           1 -#define VHOST_IOTLB_UPDATE         2 -#define VHOST_IOTLB_INVALIDATE     3 -#define VHOST_IOTLB_ACCESS_FAIL    4 -	__u8 type; -}; - -#define VHOST_IOTLB_MSG 0x1 -#define VHOST_IOTLB_MSG_V2 0x2 - -struct vhost_msg { -	int type; -	union { -		struct vhost_iotlb_msg iotlb; -		__u8 padding[64]; -	}; -}; - -struct vhost_msg_v2 { -	__u32 type; -	__u32 reserved; -	union { -		struct vhost_iotlb_msg iotlb; -		__u8 padding[64]; -	}; -}; - -struct vhost_memory_region { -	__u64 guest_phys_addr; -	__u64 memory_size; /* bytes */ -	__u64 userspace_addr; -	__u64 flags_padding; /* No flags are currently specified. */ -}; - -/* All region addresses and sizes must be 4K aligned. */ -#define VHOST_PAGE_SIZE 0x1000 - -struct vhost_memory { -	__u32 nregions; -	__u32 padding; -	struct vhost_memory_region regions[0]; -};  /* ioctls */ @@ -186,31 +101,7 @@ struct vhost_memory {   * device.  This can be used to stop the ring (e.g. for migration). */  #define VHOST_NET_SET_BACKEND _IOW(VHOST_VIRTIO, 0x30, struct vhost_vring_file) -/* Feature bits */ -/* Log all write descriptors. Can be changed while device is active. */ -#define VHOST_F_LOG_ALL 26 -/* vhost-net should add virtio_net_hdr for RX, and strip for TX packets. */ -#define VHOST_NET_F_VIRTIO_NET_HDR 27 - -/* VHOST_SCSI specific definitions */ - -/* - * Used by QEMU userspace to ensure a consistent vhost-scsi ABI. - * - * ABI Rev 0: July 2012 version starting point for v3.6-rc merge candidate + - *            RFC-v2 vhost-scsi userspace.  Add GET_ABI_VERSION ioctl usage - * ABI Rev 1: January 2013. Ignore vhost_tpgt filed in struct vhost_scsi_target. - *            All the targets under vhost_wwpn can be seen and used by guset. - */ - -#define VHOST_SCSI_ABI_VERSION	1 - -struct vhost_scsi_target { -	int abi_version; -	char vhost_wwpn[224]; /* TRANSPORT_IQN_LEN */ -	unsigned short vhost_tpgt; -	unsigned short reserved; -}; +/* VHOST_SCSI specific defines */  #define VHOST_SCSI_SET_ENDPOINT _IOW(VHOST_VIRTIO, 0x40, struct vhost_scsi_target)  #define VHOST_SCSI_CLEAR_ENDPOINT _IOW(VHOST_VIRTIO, 0x41, struct vhost_scsi_target) diff --git a/include/uapi/linux/vhost_types.h b/include/uapi/linux/vhost_types.h new file mode 100644 index 000000000000..c907290ff065 --- /dev/null +++ b/include/uapi/linux/vhost_types.h @@ -0,0 +1,128 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _LINUX_VHOST_TYPES_H +#define _LINUX_VHOST_TYPES_H +/* Userspace interface for in-kernel virtio accelerators. */ + +/* vhost is used to reduce the number of system calls involved in virtio. + * + * Existing virtio net code is used in the guest without modification. + * + * This header includes interface used by userspace hypervisor for + * device configuration. + */ + +#include <linux/types.h> +#include <linux/compiler.h> +#include <linux/virtio_config.h> +#include <linux/virtio_ring.h> + +struct vhost_vring_state { +	unsigned int index; +	unsigned int num; +}; + +struct vhost_vring_file { +	unsigned int index; +	int fd; /* Pass -1 to unbind from file. */ + +}; + +struct vhost_vring_addr { +	unsigned int index; +	/* Option flags. */ +	unsigned int flags; +	/* Flag values: */ +	/* Whether log address is valid. If set enables logging. */ +#define VHOST_VRING_F_LOG 0 + +	/* Start of array of descriptors (virtually contiguous) */ +	__u64 desc_user_addr; +	/* Used structure address. Must be 32 bit aligned */ +	__u64 used_user_addr; +	/* Available structure address. Must be 16 bit aligned */ +	__u64 avail_user_addr; +	/* Logging support. */ +	/* Log writes to used structure, at offset calculated from specified +	 * address. Address must be 32 bit aligned. */ +	__u64 log_guest_addr; +}; + +/* no alignment requirement */ +struct vhost_iotlb_msg { +	__u64 iova; +	__u64 size; +	__u64 uaddr; +#define VHOST_ACCESS_RO      0x1 +#define VHOST_ACCESS_WO      0x2 +#define VHOST_ACCESS_RW      0x3 +	__u8 perm; +#define VHOST_IOTLB_MISS           1 +#define VHOST_IOTLB_UPDATE         2 +#define VHOST_IOTLB_INVALIDATE     3 +#define VHOST_IOTLB_ACCESS_FAIL    4 +	__u8 type; +}; + +#define VHOST_IOTLB_MSG 0x1 +#define VHOST_IOTLB_MSG_V2 0x2 + +struct vhost_msg { +	int type; +	union { +		struct vhost_iotlb_msg iotlb; +		__u8 padding[64]; +	}; +}; + +struct vhost_msg_v2 { +	__u32 type; +	__u32 reserved; +	union { +		struct vhost_iotlb_msg iotlb; +		__u8 padding[64]; +	}; +}; + +struct vhost_memory_region { +	__u64 guest_phys_addr; +	__u64 memory_size; /* bytes */ +	__u64 userspace_addr; +	__u64 flags_padding; /* No flags are currently specified. */ +}; + +/* All region addresses and sizes must be 4K aligned. */ +#define VHOST_PAGE_SIZE 0x1000 + +struct vhost_memory { +	__u32 nregions; +	__u32 padding; +	struct vhost_memory_region regions[0]; +}; + +/* VHOST_SCSI specific definitions */ + +/* + * Used by QEMU userspace to ensure a consistent vhost-scsi ABI. + * + * ABI Rev 0: July 2012 version starting point for v3.6-rc merge candidate + + *            RFC-v2 vhost-scsi userspace.  Add GET_ABI_VERSION ioctl usage + * ABI Rev 1: January 2013. Ignore vhost_tpgt field in struct vhost_scsi_target. + *            All the targets under vhost_wwpn can be seen and used by guset. + */ + +#define VHOST_SCSI_ABI_VERSION	1 + +struct vhost_scsi_target { +	int abi_version; +	char vhost_wwpn[224]; /* TRANSPORT_IQN_LEN */ +	unsigned short vhost_tpgt; +	unsigned short reserved; +}; + +/* Feature bits */ +/* Log all write descriptors. Can be changed while device is active. */ +#define VHOST_F_LOG_ALL 26 +/* vhost-net should add virtio_net_hdr for RX, and strip for TX packets. */ +#define VHOST_NET_F_VIRTIO_NET_HDR 27 + +#endif diff --git a/include/uapi/linux/virtio_blk.h b/include/uapi/linux/virtio_blk.h index 9ebe4d968dd5..0f99d7b49ede 100644 --- a/include/uapi/linux/virtio_blk.h +++ b/include/uapi/linux/virtio_blk.h @@ -38,6 +38,8 @@  #define VIRTIO_BLK_F_BLK_SIZE	6	/* Block size of disk is available*/  #define VIRTIO_BLK_F_TOPOLOGY	10	/* Topology information is available */  #define VIRTIO_BLK_F_MQ		12	/* support more than one vq */ +#define VIRTIO_BLK_F_DISCARD	13	/* DISCARD is supported */ +#define VIRTIO_BLK_F_WRITE_ZEROES	14	/* WRITE ZEROES is supported */  /* Legacy feature bits */  #ifndef VIRTIO_BLK_NO_LEGACY @@ -86,6 +88,39 @@ struct virtio_blk_config {  	/* number of vqs, only available when VIRTIO_BLK_F_MQ is set */  	__u16 num_queues; + +	/* the next 3 entries are guarded by VIRTIO_BLK_F_DISCARD */ +	/* +	 * The maximum discard sectors (in 512-byte sectors) for +	 * one segment. +	 */ +	__u32 max_discard_sectors; +	/* +	 * The maximum number of discard segments in a +	 * discard command. +	 */ +	__u32 max_discard_seg; +	/* Discard commands must be aligned to this number of sectors. */ +	__u32 discard_sector_alignment; + +	/* the next 3 entries are guarded by VIRTIO_BLK_F_WRITE_ZEROES */ +	/* +	 * The maximum number of write zeroes sectors (in 512-byte sectors) in +	 * one segment. +	 */ +	__u32 max_write_zeroes_sectors; +	/* +	 * The maximum number of segments in a write zeroes +	 * command. +	 */ +	__u32 max_write_zeroes_seg; +	/* +	 * Set if a VIRTIO_BLK_T_WRITE_ZEROES request may result in the +	 * deallocation of one or more of the sectors. +	 */ +	__u8 write_zeroes_may_unmap; + +	__u8 unused1[3];  } __attribute__((packed));  /* @@ -114,6 +149,12 @@ struct virtio_blk_config {  /* Get device ID command */  #define VIRTIO_BLK_T_GET_ID    8 +/* Discard command */ +#define VIRTIO_BLK_T_DISCARD	11 + +/* Write zeroes command */ +#define VIRTIO_BLK_T_WRITE_ZEROES	13 +  #ifndef VIRTIO_BLK_NO_LEGACY  /* Barrier before this op. */  #define VIRTIO_BLK_T_BARRIER	0x80000000 @@ -133,6 +174,19 @@ struct virtio_blk_outhdr {  	__virtio64 sector;  }; +/* Unmap this range (only valid for write zeroes command) */ +#define VIRTIO_BLK_WRITE_ZEROES_FLAG_UNMAP	0x00000001 + +/* Discard/write zeroes range for each request. */ +struct virtio_blk_discard_write_zeroes { +	/* discard/write zeroes start sector */ +	__le64 sector; +	/* number of discard/write zeroes sectors */ +	__le32 num_sectors; +	/* flags for this range */ +	__le32 flags; +}; +  #ifndef VIRTIO_BLK_NO_LEGACY  struct virtio_scsi_inhdr {  	__virtio32 errors; diff --git a/include/uapi/linux/virtio_config.h b/include/uapi/linux/virtio_config.h index 449132c76b1c..1196e1c1d4f6 100644 --- a/include/uapi/linux/virtio_config.h +++ b/include/uapi/linux/virtio_config.h @@ -75,6 +75,9 @@   */  #define VIRTIO_F_IOMMU_PLATFORM		33 +/* This feature indicates support for the packed virtqueue layout. */ +#define VIRTIO_F_RING_PACKED		34 +  /*   * Does the device support Single Root I/O Virtualization?   */ diff --git a/include/uapi/linux/virtio_ring.h b/include/uapi/linux/virtio_ring.h index 6d5d5faa989b..2414f8af26b3 100644 --- a/include/uapi/linux/virtio_ring.h +++ b/include/uapi/linux/virtio_ring.h @@ -44,6 +44,13 @@  /* This means the buffer contains a list of buffer descriptors. */  #define VRING_DESC_F_INDIRECT	4 +/* + * Mark a descriptor as available or used in packed ring. + * Notice: they are defined as shifts instead of shifted values. + */ +#define VRING_PACKED_DESC_F_AVAIL	7 +#define VRING_PACKED_DESC_F_USED	15 +  /* The Host uses this in used->flags to advise the Guest: don't kick me when   * you add a buffer.  It's unreliable, so it's simply an optimization.  Guest   * will still kick if it's out of buffers. */ @@ -53,6 +60,23 @@   * optimization.  */  #define VRING_AVAIL_F_NO_INTERRUPT	1 +/* Enable events in packed ring. */ +#define VRING_PACKED_EVENT_FLAG_ENABLE	0x0 +/* Disable events in packed ring. */ +#define VRING_PACKED_EVENT_FLAG_DISABLE	0x1 +/* + * Enable events for a specific descriptor in packed ring. + * (as specified by Descriptor Ring Change Event Offset/Wrap Counter). + * Only valid if VIRTIO_RING_F_EVENT_IDX has been negotiated. + */ +#define VRING_PACKED_EVENT_FLAG_DESC	0x2 + +/* + * Wrap counter bit shift in event suppression structure + * of packed ring. + */ +#define VRING_PACKED_EVENT_F_WRAP_CTR	15 +  /* We support indirect buffer descriptors */  #define VIRTIO_RING_F_INDIRECT_DESC	28 @@ -171,4 +195,32 @@ static inline int vring_need_event(__u16 event_idx, __u16 new_idx, __u16 old)  	return (__u16)(new_idx - event_idx - 1) < (__u16)(new_idx - old);  } +struct vring_packed_desc_event { +	/* Descriptor Ring Change Event Offset/Wrap Counter. */ +	__le16 off_wrap; +	/* Descriptor Ring Change Event Flags. */ +	__le16 flags; +}; + +struct vring_packed_desc { +	/* Buffer Address. */ +	__le64 addr; +	/* Buffer Length. */ +	__le32 len; +	/* Buffer ID. */ +	__le16 id; +	/* The flags depending on descriptor type. */ +	__le16 flags; +}; + +struct vring_packed { +	unsigned int num; + +	struct vring_packed_desc *desc; + +	struct vring_packed_desc_event *driver; + +	struct vring_packed_desc_event *device; +}; +  #endif /* _UAPI_LINUX_VIRTIO_RING_H */  | 
