naccyde / rpms / iproute

Forked from rpms/iproute 7 months ago
Clone

Blame SOURCES/0024-Update-linux-headers.patch

36cfb7
From 7f123fac8aa0ff7741777935121e1b394c56e75a Mon Sep 17 00:00:00 2001
36cfb7
From: Phil Sutter <psutter@redhat.com>
36cfb7
Date: Fri, 10 Nov 2017 10:19:43 +0100
36cfb7
Subject: [PATCH] Update linux headers
36cfb7
36cfb7
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1456539
36cfb7
36cfb7
This updates include/linux to the state just before commit 596b1c94aa38e
36cfb7
("iproute: build more easily on Android").
36cfb7
---
e138d9
 include/linux/bpf.h                  | 253 +++++++++++++++++-
e138d9
 include/linux/can/vxcan.h            |  12 +
e138d9
 include/linux/devlink.h              |  92 ++++++-
36cfb7
 include/linux/elf-em.h               |   1 -
36cfb7
 include/linux/if_arp.h               |   2 +
36cfb7
 include/linux/if_ether.h             |   6 +
e138d9
 include/linux/if_link.h              |  37 ++-
36cfb7
 include/linux/if_packet.h            |   1 +
36cfb7
 include/linux/if_tunnel.h            |   4 +
36cfb7
 include/linux/inet_diag.h            |   2 +
e138d9
 include/linux/ipsec.h                |  47 ++++
36cfb7
 include/linux/lwtunnel.h             |   1 +
36cfb7
 include/linux/magic.h                |   3 +
36cfb7
 include/linux/mpls_iptunnel.h        |   2 +
36cfb7
 include/linux/neighbour.h            |   1 +
e138d9
 include/linux/netlink.h              |  67 ++++-
36cfb7
 include/linux/netlink_diag.h         |  10 +
e138d9
 include/linux/pfkeyv2.h              | 383 +++++++++++++++++++++++++++
e138d9
 include/linux/pkt_cls.h              |  37 ++-
36cfb7
 include/linux/pkt_sched.h            |   8 +
e138d9
 include/linux/rtnetlink.h            |  36 ++-
e138d9
 include/linux/sctp.h                 |  38 +++
e138d9
 include/linux/seg6.h                 |  54 ++++
36cfb7
 include/linux/seg6_genl.h            |  32 +++
36cfb7
 include/linux/seg6_hmac.h            |  22 ++
e138d9
 include/linux/seg6_iptunnel.h        |  40 +++
e138d9
 include/linux/seg6_local.h           |  68 +++++
36cfb7
 include/linux/tc_act/tc_bpf.h        |   1 +
36cfb7
 include/linux/tc_act/tc_tunnel_key.h |   1 +
e138d9
 include/linux/tcp.h                  |  27 +-
36cfb7
 include/linux/xfrm.h                 |   9 +
36cfb7
 31 files changed, 1272 insertions(+), 25 deletions(-)
36cfb7
 create mode 100644 include/linux/can/vxcan.h
36cfb7
 create mode 100644 include/linux/ipsec.h
36cfb7
 create mode 100644 include/linux/pfkeyv2.h
36cfb7
 create mode 100644 include/linux/seg6.h
36cfb7
 create mode 100644 include/linux/seg6_genl.h
36cfb7
 create mode 100644 include/linux/seg6_hmac.h
36cfb7
 create mode 100644 include/linux/seg6_iptunnel.h
36cfb7
 create mode 100644 include/linux/seg6_local.h
36cfb7
36cfb7
diff --git a/include/linux/bpf.h b/include/linux/bpf.h
e138d9
index 178e20c388852..0895a529cc90b 100644
36cfb7
--- a/include/linux/bpf.h
36cfb7
+++ b/include/linux/bpf.h
36cfb7
@@ -30,9 +30,14 @@
36cfb7
 #define BPF_FROM_LE	BPF_TO_LE
36cfb7
 #define BPF_FROM_BE	BPF_TO_BE
36cfb7
 
36cfb7
+/* jmp encodings */
36cfb7
 #define BPF_JNE		0x50	/* jump != */
36cfb7
+#define BPF_JLT		0xa0	/* LT is unsigned, '<' */
36cfb7
+#define BPF_JLE		0xb0	/* LE is unsigned, '<=' */
36cfb7
 #define BPF_JSGT	0x60	/* SGT is signed '>', GT in x86 */
36cfb7
 #define BPF_JSGE	0x70	/* SGE is signed '>=', GE in x86 */
36cfb7
+#define BPF_JSLT	0xc0	/* SLT is signed, '<' */
36cfb7
+#define BPF_JSLE	0xd0	/* SLE is signed, '<=' */
36cfb7
 #define BPF_CALL	0x80	/* function call */
36cfb7
 #define BPF_EXIT	0x90	/* function return */
36cfb7
 
36cfb7
@@ -81,6 +86,12 @@ enum bpf_cmd {
36cfb7
 	BPF_OBJ_GET,
36cfb7
 	BPF_PROG_ATTACH,
36cfb7
 	BPF_PROG_DETACH,
36cfb7
+	BPF_PROG_TEST_RUN,
36cfb7
+	BPF_PROG_GET_NEXT_ID,
36cfb7
+	BPF_MAP_GET_NEXT_ID,
36cfb7
+	BPF_PROG_GET_FD_BY_ID,
36cfb7
+	BPF_MAP_GET_FD_BY_ID,
36cfb7
+	BPF_OBJ_GET_INFO_BY_FD,
36cfb7
 };
36cfb7
 
36cfb7
 enum bpf_map_type {
36cfb7
@@ -96,6 +107,10 @@ enum bpf_map_type {
36cfb7
 	BPF_MAP_TYPE_LRU_HASH,
36cfb7
 	BPF_MAP_TYPE_LRU_PERCPU_HASH,
36cfb7
 	BPF_MAP_TYPE_LPM_TRIE,
36cfb7
+	BPF_MAP_TYPE_ARRAY_OF_MAPS,
36cfb7
+	BPF_MAP_TYPE_HASH_OF_MAPS,
36cfb7
+	BPF_MAP_TYPE_DEVMAP,
36cfb7
+	BPF_MAP_TYPE_SOCKMAP,
36cfb7
 };
36cfb7
 
36cfb7
 enum bpf_prog_type {
36cfb7
@@ -112,12 +127,17 @@ enum bpf_prog_type {
36cfb7
 	BPF_PROG_TYPE_LWT_IN,
36cfb7
 	BPF_PROG_TYPE_LWT_OUT,
36cfb7
 	BPF_PROG_TYPE_LWT_XMIT,
36cfb7
+	BPF_PROG_TYPE_SOCK_OPS,
36cfb7
+	BPF_PROG_TYPE_SK_SKB,
36cfb7
 };
36cfb7
 
36cfb7
 enum bpf_attach_type {
36cfb7
 	BPF_CGROUP_INET_INGRESS,
36cfb7
 	BPF_CGROUP_INET_EGRESS,
36cfb7
 	BPF_CGROUP_INET_SOCK_CREATE,
36cfb7
+	BPF_CGROUP_SOCK_OPS,
36cfb7
+	BPF_SK_SKB_STREAM_PARSER,
36cfb7
+	BPF_SK_SKB_STREAM_VERDICT,
36cfb7
 	__MAX_BPF_ATTACH_TYPE
36cfb7
 };
36cfb7
 
36cfb7
@@ -129,6 +149,13 @@ enum bpf_attach_type {
36cfb7
  */
36cfb7
 #define BPF_F_ALLOW_OVERRIDE	(1U << 0)
36cfb7
 
36cfb7
+/* If BPF_F_STRICT_ALIGNMENT is used in BPF_PROG_LOAD command, the
36cfb7
+ * verifier will perform strict alignment checking as if the kernel
36cfb7
+ * has been built with CONFIG_EFFICIENT_UNALIGNED_ACCESS not set,
36cfb7
+ * and NET_IP_ALIGN defined to 2.
36cfb7
+ */
36cfb7
+#define BPF_F_STRICT_ALIGNMENT	(1U << 0)
36cfb7
+
36cfb7
 #define BPF_PSEUDO_MAP_FD	1
36cfb7
 
36cfb7
 /* flags for BPF_MAP_UPDATE_ELEM command */
36cfb7
@@ -136,6 +163,7 @@ enum bpf_attach_type {
36cfb7
 #define BPF_NOEXIST	1 /* create new element if it didn't exist */
36cfb7
 #define BPF_EXIST	2 /* update existing element */
36cfb7
 
36cfb7
+/* flags for BPF_MAP_CREATE command */
36cfb7
 #define BPF_F_NO_PREALLOC	(1U << 0)
36cfb7
 /* Instead of having one common LRU list in the
36cfb7
  * BPF_MAP_TYPE_LRU_[PERCPU_]HASH map, use a percpu LRU list
36cfb7
@@ -144,6 +172,8 @@ enum bpf_attach_type {
36cfb7
  * across different LRU lists.
36cfb7
  */
36cfb7
 #define BPF_F_NO_COMMON_LRU	(1U << 1)
36cfb7
+/* Specify numa node during map creation */
36cfb7
+#define BPF_F_NUMA_NODE		(1U << 2)
36cfb7
 
36cfb7
 union bpf_attr {
36cfb7
 	struct { /* anonymous struct used by BPF_MAP_CREATE command */
36cfb7
@@ -151,7 +181,13 @@ union bpf_attr {
36cfb7
 		__u32	key_size;	/* size of key in bytes */
36cfb7
 		__u32	value_size;	/* size of value in bytes */
36cfb7
 		__u32	max_entries;	/* max number of entries in a map */
36cfb7
-		__u32	map_flags;	/* prealloc or not */
36cfb7
+		__u32	map_flags;	/* BPF_MAP_CREATE related
36cfb7
+					 * flags defined above.
36cfb7
+					 */
36cfb7
+		__u32	inner_map_fd;	/* fd pointing to the inner map */
36cfb7
+		__u32	numa_node;	/* numa node (effective only if
36cfb7
+					 * BPF_F_NUMA_NODE is set).
36cfb7
+					 */
36cfb7
 	};
36cfb7
 
36cfb7
 	struct { /* anonymous struct used by BPF_MAP_*_ELEM commands */
36cfb7
@@ -173,6 +209,7 @@ union bpf_attr {
36cfb7
 		__u32		log_size;	/* size of user buffer */
36cfb7
 		__aligned_u64	log_buf;	/* user supplied buffer */
36cfb7
 		__u32		kern_version;	/* checked when prog_type=kprobe */
36cfb7
+		__u32		prog_flags;
36cfb7
 	};
36cfb7
 
36cfb7
 	struct { /* anonymous struct used by BPF_OBJ_* commands */
36cfb7
@@ -186,6 +223,32 @@ union bpf_attr {
36cfb7
 		__u32		attach_type;
36cfb7
 		__u32		attach_flags;
36cfb7
 	};
36cfb7
+
36cfb7
+	struct { /* anonymous struct used by BPF_PROG_TEST_RUN command */
36cfb7
+		__u32		prog_fd;
36cfb7
+		__u32		retval;
36cfb7
+		__u32		data_size_in;
36cfb7
+		__u32		data_size_out;
36cfb7
+		__aligned_u64	data_in;
36cfb7
+		__aligned_u64	data_out;
36cfb7
+		__u32		repeat;
36cfb7
+		__u32		duration;
36cfb7
+	} test;
36cfb7
+
36cfb7
+	struct { /* anonymous struct used by BPF_*_GET_*_ID */
36cfb7
+		union {
36cfb7
+			__u32		start_id;
36cfb7
+			__u32		prog_id;
36cfb7
+			__u32		map_id;
36cfb7
+		};
36cfb7
+		__u32		next_id;
36cfb7
+	};
36cfb7
+
36cfb7
+	struct { /* anonymous struct used by BPF_OBJ_GET_INFO_BY_FD */
36cfb7
+		__u32		bpf_fd;
36cfb7
+		__u32		info_len;
36cfb7
+		__aligned_u64	info;
36cfb7
+	} info;
36cfb7
 } __attribute__((aligned(8)));
36cfb7
 
36cfb7
 /* BPF helper function descriptions:
36cfb7
@@ -290,26 +353,40 @@ union bpf_attr {
36cfb7
  *     @flags: room for future extensions
36cfb7
  *     Return: 0 on success or negative error
36cfb7
  *
36cfb7
- * u64 bpf_perf_event_read(&map, index)
36cfb7
- *     Return: Number events read or error code
36cfb7
+ * u64 bpf_perf_event_read(map, flags)
36cfb7
+ *     read perf event counter value
36cfb7
+ *     @map: pointer to perf_event_array map
36cfb7
+ *     @flags: index of event in the map or bitmask flags
36cfb7
+ *     Return: value of perf event counter read or error code
36cfb7
  *
36cfb7
  * int bpf_redirect(ifindex, flags)
36cfb7
  *     redirect to another netdev
36cfb7
  *     @ifindex: ifindex of the net device
36cfb7
- *     @flags: bit 0 - if set, redirect to ingress instead of egress
36cfb7
- *             other bits - reserved
36cfb7
- *     Return: TC_ACT_REDIRECT
36cfb7
+ *     @flags:
36cfb7
+ *	  cls_bpf:
36cfb7
+ *          bit 0 - if set, redirect to ingress instead of egress
36cfb7
+ *          other bits - reserved
36cfb7
+ *	  xdp_bpf:
36cfb7
+ *	    all bits - reserved
36cfb7
+ *     Return: cls_bpf: TC_ACT_REDIRECT on success or TC_ACT_SHOT on error
36cfb7
+ *	       xdp_bfp: XDP_REDIRECT on success or XDP_ABORT on error
36cfb7
+ * int bpf_redirect_map(map, key, flags)
36cfb7
+ *     redirect to endpoint in map
36cfb7
+ *     @map: pointer to dev map
36cfb7
+ *     @key: index in map to lookup
36cfb7
+ *     @flags: --
36cfb7
+ *     Return: XDP_REDIRECT on success or XDP_ABORT on error
36cfb7
  *
36cfb7
  * u32 bpf_get_route_realm(skb)
36cfb7
  *     retrieve a dst's tclassid
36cfb7
  *     @skb: pointer to skb
36cfb7
  *     Return: realm if != 0
36cfb7
  *
36cfb7
- * int bpf_perf_event_output(ctx, map, index, data, size)
36cfb7
+ * int bpf_perf_event_output(ctx, map, flags, data, size)
36cfb7
  *     output perf raw sample
36cfb7
  *     @ctx: struct pt_regs*
36cfb7
  *     @map: pointer to perf_event_array map
36cfb7
- *     @index: index of event in the map
36cfb7
+ *     @flags: index of event in the map or bitmask flags
36cfb7
  *     @data: data on stack to be output as raw data
36cfb7
  *     @size: size of data
36cfb7
  *     Return: 0 on success or negative error
36cfb7
@@ -456,6 +533,55 @@ union bpf_attr {
36cfb7
  *     Return:
36cfb7
  *       > 0 length of the string including the trailing NUL on success
36cfb7
  *       < 0 error
36cfb7
+ *
36cfb7
+ * u64 bpf_get_socket_cookie(skb)
36cfb7
+ *     Get the cookie for the socket stored inside sk_buff.
36cfb7
+ *     @skb: pointer to skb
36cfb7
+ *     Return: 8 Bytes non-decreasing number on success or 0 if the socket
36cfb7
+ *     field is missing inside sk_buff
36cfb7
+ *
36cfb7
+ * u32 bpf_get_socket_uid(skb)
36cfb7
+ *     Get the owner uid of the socket stored inside sk_buff.
36cfb7
+ *     @skb: pointer to skb
36cfb7
+ *     Return: uid of the socket owner on success or overflowuid if failed.
36cfb7
+ *
36cfb7
+ * u32 bpf_set_hash(skb, hash)
36cfb7
+ *     Set full skb->hash.
36cfb7
+ *     @skb: pointer to skb
36cfb7
+ *     @hash: hash to set
36cfb7
+ *
36cfb7
+ * int bpf_setsockopt(bpf_socket, level, optname, optval, optlen)
36cfb7
+ *     Calls setsockopt. Not all opts are available, only those with
36cfb7
+ *     integer optvals plus TCP_CONGESTION.
36cfb7
+ *     Supported levels: SOL_SOCKET and IPROTO_TCP
36cfb7
+ *     @bpf_socket: pointer to bpf_socket
36cfb7
+ *     @level: SOL_SOCKET or IPROTO_TCP
36cfb7
+ *     @optname: option name
36cfb7
+ *     @optval: pointer to option value
36cfb7
+ *     @optlen: length of optval in byes
36cfb7
+ *     Return: 0 or negative error
36cfb7
+ *
36cfb7
+ * int bpf_skb_adjust_room(skb, len_diff, mode, flags)
36cfb7
+ *     Grow or shrink room in sk_buff.
36cfb7
+ *     @skb: pointer to skb
36cfb7
+ *     @len_diff: (signed) amount of room to grow/shrink
36cfb7
+ *     @mode: operation mode (enum bpf_adj_room_mode)
36cfb7
+ *     @flags: reserved for future use
36cfb7
+ *     Return: 0 on success or negative error code
36cfb7
+ *
36cfb7
+ * int bpf_sk_redirect_map(map, key, flags)
36cfb7
+ *     Redirect skb to a sock in map using key as a lookup key for the
36cfb7
+ *     sock in map.
36cfb7
+ *     @map: pointer to sockmap
36cfb7
+ *     @key: key to lookup sock in map
36cfb7
+ *     @flags: reserved for future use
36cfb7
+ *     Return: SK_REDIRECT
36cfb7
+ *
36cfb7
+ * int bpf_sock_map_update(skops, map, key, flags)
36cfb7
+ *	@skops: pointer to bpf_sock_ops
36cfb7
+ *	@map: pointer to sockmap to update
36cfb7
+ *	@key: key to insert/update sock in map
36cfb7
+ *	@flags: same flags as map update elem
36cfb7
  */
36cfb7
 #define __BPF_FUNC_MAPPER(FN)		\
36cfb7
 	FN(unspec),			\
36cfb7
@@ -503,7 +629,15 @@ union bpf_attr {
36cfb7
 	FN(get_numa_node_id),		\
36cfb7
 	FN(skb_change_head),		\
36cfb7
 	FN(xdp_adjust_head),		\
36cfb7
-	FN(probe_read_str),
36cfb7
+	FN(probe_read_str),		\
36cfb7
+	FN(get_socket_cookie),		\
36cfb7
+	FN(get_socket_uid),		\
36cfb7
+	FN(set_hash),			\
36cfb7
+	FN(setsockopt),			\
36cfb7
+	FN(skb_adjust_room),		\
36cfb7
+	FN(redirect_map),		\
36cfb7
+	FN(sk_redirect_map),		\
36cfb7
+	FN(sock_map_update),		\
36cfb7
 
36cfb7
 /* integer value in 'imm' field of BPF_CALL instruction selects which helper
36cfb7
  * function eBPF program intends to call
36cfb7
@@ -553,6 +687,11 @@ enum bpf_func_id {
36cfb7
 /* BPF_FUNC_perf_event_output for sk_buff input context. */
36cfb7
 #define BPF_F_CTXLEN_MASK		(0xfffffULL << 32)
36cfb7
 
36cfb7
+/* Mode for BPF_FUNC_skb_adjust_room helper. */
36cfb7
+enum bpf_adj_room_mode {
36cfb7
+	BPF_ADJ_ROOM_NET,
36cfb7
+};
36cfb7
+
36cfb7
 /* user accessible mirror of in-kernel sk_buff.
36cfb7
  * new fields can only be added to the end of this structure
36cfb7
  */
36cfb7
@@ -574,6 +713,16 @@ struct __sk_buff {
36cfb7
 	__u32 tc_classid;
36cfb7
 	__u32 data;
36cfb7
 	__u32 data_end;
36cfb7
+	__u32 napi_id;
36cfb7
+
36cfb7
+	/* accessed by BPF_PROG_TYPE_sk_skb types */
36cfb7
+	__u32 family;
36cfb7
+	__u32 remote_ip4;	/* Stored in network byte order */
36cfb7
+	__u32 local_ip4;	/* Stored in network byte order */
36cfb7
+	__u32 remote_ip6[4];	/* Stored in network byte order */
36cfb7
+	__u32 local_ip6[4];	/* Stored in network byte order */
36cfb7
+	__u32 remote_port;	/* Stored in network byte order */
36cfb7
+	__u32 local_port;	/* stored in host byte order */
36cfb7
 };
36cfb7
 
36cfb7
 struct bpf_tunnel_key {
36cfb7
@@ -609,20 +758,23 @@ struct bpf_sock {
36cfb7
 	__u32 family;
36cfb7
 	__u32 type;
36cfb7
 	__u32 protocol;
36cfb7
+	__u32 mark;
36cfb7
+	__u32 priority;
36cfb7
 };
36cfb7
 
36cfb7
 #define XDP_PACKET_HEADROOM 256
36cfb7
 
36cfb7
 /* User return codes for XDP prog type.
36cfb7
  * A valid XDP program must return one of these defined values. All other
36cfb7
- * return codes are reserved for future use. Unknown return codes will result
36cfb7
- * in packet drop.
36cfb7
+ * return codes are reserved for future use. Unknown return codes will
36cfb7
+ * result in packet drops and a warning via bpf_warn_invalid_xdp_action().
36cfb7
  */
36cfb7
 enum xdp_action {
36cfb7
 	XDP_ABORTED = 0,
36cfb7
 	XDP_DROP,
36cfb7
 	XDP_PASS,
36cfb7
 	XDP_TX,
36cfb7
+	XDP_REDIRECT,
36cfb7
 };
36cfb7
 
36cfb7
 /* user accessible metadata for XDP packet hook
36cfb7
@@ -633,4 +785,83 @@ struct xdp_md {
36cfb7
 	__u32 data_end;
36cfb7
 };
36cfb7
 
36cfb7
+enum sk_action {
36cfb7
+	SK_ABORTED = 0,
36cfb7
+	SK_DROP,
36cfb7
+	SK_REDIRECT,
36cfb7
+};
36cfb7
+
36cfb7
+#define BPF_TAG_SIZE	8
36cfb7
+
36cfb7
+struct bpf_prog_info {
36cfb7
+	__u32 type;
36cfb7
+	__u32 id;
36cfb7
+	__u8  tag[BPF_TAG_SIZE];
36cfb7
+	__u32 jited_prog_len;
36cfb7
+	__u32 xlated_prog_len;
36cfb7
+	__aligned_u64 jited_prog_insns;
36cfb7
+	__aligned_u64 xlated_prog_insns;
36cfb7
+} __attribute__((aligned(8)));
36cfb7
+
36cfb7
+struct bpf_map_info {
36cfb7
+	__u32 type;
36cfb7
+	__u32 id;
36cfb7
+	__u32 key_size;
36cfb7
+	__u32 value_size;
36cfb7
+	__u32 max_entries;
36cfb7
+	__u32 map_flags;
36cfb7
+} __attribute__((aligned(8)));
36cfb7
+
36cfb7
+/* User bpf_sock_ops struct to access socket values and specify request ops
36cfb7
+ * and their replies.
36cfb7
+ * Some of this fields are in network (bigendian) byte order and may need
36cfb7
+ * to be converted before use (bpf_ntohl() defined in samples/bpf/bpf_endian.h).
36cfb7
+ * New fields can only be added at the end of this structure
36cfb7
+ */
36cfb7
+struct bpf_sock_ops {
36cfb7
+	__u32 op;
36cfb7
+	union {
36cfb7
+		__u32 reply;
36cfb7
+		__u32 replylong[4];
36cfb7
+	};
36cfb7
+	__u32 family;
36cfb7
+	__u32 remote_ip4;	/* Stored in network byte order */
36cfb7
+	__u32 local_ip4;	/* Stored in network byte order */
36cfb7
+	__u32 remote_ip6[4];	/* Stored in network byte order */
36cfb7
+	__u32 local_ip6[4];	/* Stored in network byte order */
36cfb7
+	__u32 remote_port;	/* Stored in network byte order */
36cfb7
+	__u32 local_port;	/* stored in host byte order */
36cfb7
+};
36cfb7
+
36cfb7
+/* List of known BPF sock_ops operators.
36cfb7
+ * New entries can only be added at the end
36cfb7
+ */
36cfb7
+enum {
36cfb7
+	BPF_SOCK_OPS_VOID,
36cfb7
+	BPF_SOCK_OPS_TIMEOUT_INIT,	/* Should return SYN-RTO value to use or
36cfb7
+					 * -1 if default value should be used
36cfb7
+					 */
36cfb7
+	BPF_SOCK_OPS_RWND_INIT,		/* Should return initial advertized
36cfb7
+					 * window (in packets) or -1 if default
36cfb7
+					 * value should be used
36cfb7
+					 */
36cfb7
+	BPF_SOCK_OPS_TCP_CONNECT_CB,	/* Calls BPF program right before an
36cfb7
+					 * active connection is initialized
36cfb7
+					 */
36cfb7
+	BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB,	/* Calls BPF program when an
36cfb7
+						 * active connection is
36cfb7
+						 * established
36cfb7
+						 */
36cfb7
+	BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB,	/* Calls BPF program when a
36cfb7
+						 * passive connection is
36cfb7
+						 * established
36cfb7
+						 */
36cfb7
+	BPF_SOCK_OPS_NEEDS_ECN,		/* If connection's congestion control
36cfb7
+					 * needs ECN
36cfb7
+					 */
36cfb7
+};
36cfb7
+
36cfb7
+#define TCP_BPF_IW		1001	/* Set TCP initial congestion window */
36cfb7
+#define TCP_BPF_SNDCWND_CLAMP	1002	/* Set sndcwnd_clamp */
36cfb7
+
36cfb7
 #endif /* __LINUX_BPF_H__ */
36cfb7
diff --git a/include/linux/can/vxcan.h b/include/linux/can/vxcan.h
36cfb7
new file mode 100644
e138d9
index 0000000000000..5b29e8a7bc274
36cfb7
--- /dev/null
36cfb7
+++ b/include/linux/can/vxcan.h
36cfb7
@@ -0,0 +1,12 @@
36cfb7
+#ifndef _CAN_VXCAN_H
36cfb7
+#define _CAN_VXCAN_H
36cfb7
+
36cfb7
+enum {
36cfb7
+	VXCAN_INFO_UNSPEC,
36cfb7
+	VXCAN_INFO_PEER,
36cfb7
+
36cfb7
+	__VXCAN_INFO_MAX
36cfb7
+#define VXCAN_INFO_MAX	(__VXCAN_INFO_MAX - 1)
36cfb7
+};
36cfb7
+
36cfb7
+#endif
36cfb7
diff --git a/include/linux/devlink.h b/include/linux/devlink.h
e138d9
index 2ad3585b417ae..a62695e2d86e8 100644
36cfb7
--- a/include/linux/devlink.h
36cfb7
+++ b/include/linux/devlink.h
36cfb7
@@ -65,8 +65,12 @@ enum devlink_command {
36cfb7
 #define DEVLINK_CMD_ESWITCH_MODE_SET /* obsolete, never use this! */ \
36cfb7
 	DEVLINK_CMD_ESWITCH_SET
36cfb7
 
36cfb7
-	/* add new commands above here */
36cfb7
+	DEVLINK_CMD_DPIPE_TABLE_GET,
36cfb7
+	DEVLINK_CMD_DPIPE_ENTRIES_GET,
36cfb7
+	DEVLINK_CMD_DPIPE_HEADERS_GET,
36cfb7
+	DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET,
36cfb7
 
36cfb7
+	/* add new commands above here */
36cfb7
 	__DEVLINK_CMD_MAX,
36cfb7
 	DEVLINK_CMD_MAX = __DEVLINK_CMD_MAX - 1
36cfb7
 };
36cfb7
@@ -115,6 +119,11 @@ enum devlink_eswitch_inline_mode {
36cfb7
 	DEVLINK_ESWITCH_INLINE_MODE_TRANSPORT,
36cfb7
 };
36cfb7
 
36cfb7
+enum devlink_eswitch_encap_mode {
36cfb7
+	DEVLINK_ESWITCH_ENCAP_MODE_NONE,
36cfb7
+	DEVLINK_ESWITCH_ENCAP_MODE_BASIC,
36cfb7
+};
36cfb7
+
36cfb7
 enum devlink_attr {
36cfb7
 	/* don't change the order or add anything between, this is ABI! */
36cfb7
 	DEVLINK_ATTR_UNSPEC,
36cfb7
@@ -148,10 +157,91 @@ enum devlink_attr {
36cfb7
 	DEVLINK_ATTR_ESWITCH_MODE,		/* u16 */
36cfb7
 	DEVLINK_ATTR_ESWITCH_INLINE_MODE,	/* u8 */
36cfb7
 
36cfb7
+	DEVLINK_ATTR_DPIPE_TABLES,		/* nested */
36cfb7
+	DEVLINK_ATTR_DPIPE_TABLE,		/* nested */
36cfb7
+	DEVLINK_ATTR_DPIPE_TABLE_NAME,		/* string */
36cfb7
+	DEVLINK_ATTR_DPIPE_TABLE_SIZE,		/* u64 */
36cfb7
+	DEVLINK_ATTR_DPIPE_TABLE_MATCHES,	/* nested */
36cfb7
+	DEVLINK_ATTR_DPIPE_TABLE_ACTIONS,	/* nested */
36cfb7
+	DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED,	/* u8 */
36cfb7
+
36cfb7
+	DEVLINK_ATTR_DPIPE_ENTRIES,		/* nested */
36cfb7
+	DEVLINK_ATTR_DPIPE_ENTRY,		/* nested */
36cfb7
+	DEVLINK_ATTR_DPIPE_ENTRY_INDEX,		/* u64 */
36cfb7
+	DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES,	/* nested */
36cfb7
+	DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES,	/* nested */
36cfb7
+	DEVLINK_ATTR_DPIPE_ENTRY_COUNTER,	/* u64 */
36cfb7
+
36cfb7
+	DEVLINK_ATTR_DPIPE_MATCH,		/* nested */
36cfb7
+	DEVLINK_ATTR_DPIPE_MATCH_VALUE,		/* nested */
36cfb7
+	DEVLINK_ATTR_DPIPE_MATCH_TYPE,		/* u32 */
36cfb7
+
36cfb7
+	DEVLINK_ATTR_DPIPE_ACTION,		/* nested */
36cfb7
+	DEVLINK_ATTR_DPIPE_ACTION_VALUE,	/* nested */
36cfb7
+	DEVLINK_ATTR_DPIPE_ACTION_TYPE,		/* u32 */
36cfb7
+
36cfb7
+	DEVLINK_ATTR_DPIPE_VALUE,
36cfb7
+	DEVLINK_ATTR_DPIPE_VALUE_MASK,
36cfb7
+	DEVLINK_ATTR_DPIPE_VALUE_MAPPING,	/* u32 */
36cfb7
+
36cfb7
+	DEVLINK_ATTR_DPIPE_HEADERS,		/* nested */
36cfb7
+	DEVLINK_ATTR_DPIPE_HEADER,		/* nested */
36cfb7
+	DEVLINK_ATTR_DPIPE_HEADER_NAME,		/* string */
36cfb7
+	DEVLINK_ATTR_DPIPE_HEADER_ID,		/* u32 */
36cfb7
+	DEVLINK_ATTR_DPIPE_HEADER_FIELDS,	/* nested */
36cfb7
+	DEVLINK_ATTR_DPIPE_HEADER_GLOBAL,	/* u8 */
36cfb7
+	DEVLINK_ATTR_DPIPE_HEADER_INDEX,	/* u32 */
36cfb7
+
36cfb7
+	DEVLINK_ATTR_DPIPE_FIELD,		/* nested */
36cfb7
+	DEVLINK_ATTR_DPIPE_FIELD_NAME,		/* string */
36cfb7
+	DEVLINK_ATTR_DPIPE_FIELD_ID,		/* u32 */
36cfb7
+	DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH,	/* u32 */
36cfb7
+	DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE,	/* u32 */
36cfb7
+
36cfb7
+	DEVLINK_ATTR_PAD,
36cfb7
+
36cfb7
+	DEVLINK_ATTR_ESWITCH_ENCAP_MODE,	/* u8 */
36cfb7
+
36cfb7
 	/* add new attributes above here, update the policy in devlink.c */
36cfb7
 
36cfb7
 	__DEVLINK_ATTR_MAX,
36cfb7
 	DEVLINK_ATTR_MAX = __DEVLINK_ATTR_MAX - 1
36cfb7
 };
36cfb7
 
36cfb7
+/* Mapping between internal resource described by the field and system
36cfb7
+ * structure
36cfb7
+ */
36cfb7
+enum devlink_dpipe_field_mapping_type {
36cfb7
+	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE,
36cfb7
+	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX,
36cfb7
+};
36cfb7
+
36cfb7
+/* Match type - specify the type of the match */
36cfb7
+enum devlink_dpipe_match_type {
36cfb7
+	DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT,
36cfb7
+};
36cfb7
+
36cfb7
+/* Action type - specify the action type */
36cfb7
+enum devlink_dpipe_action_type {
36cfb7
+	DEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY,
36cfb7
+};
36cfb7
+
36cfb7
+enum devlink_dpipe_field_ethernet_id {
36cfb7
+	DEVLINK_DPIPE_FIELD_ETHERNET_DST_MAC,
36cfb7
+};
36cfb7
+
36cfb7
+enum devlink_dpipe_field_ipv4_id {
36cfb7
+	DEVLINK_DPIPE_FIELD_IPV4_DST_IP,
36cfb7
+};
36cfb7
+
36cfb7
+enum devlink_dpipe_field_ipv6_id {
36cfb7
+	DEVLINK_DPIPE_FIELD_IPV6_DST_IP,
36cfb7
+};
36cfb7
+
36cfb7
+enum devlink_dpipe_header_id {
36cfb7
+	DEVLINK_DPIPE_HEADER_ETHERNET,
36cfb7
+	DEVLINK_DPIPE_HEADER_IPV4,
36cfb7
+	DEVLINK_DPIPE_HEADER_IPV6,
36cfb7
+};
36cfb7
+
36cfb7
 #endif /* _LINUX_DEVLINK_H_ */
36cfb7
diff --git a/include/linux/elf-em.h b/include/linux/elf-em.h
e138d9
index cb5d1a5192027..9cd1de954c0ac 100644
36cfb7
--- a/include/linux/elf-em.h
36cfb7
+++ b/include/linux/elf-em.h
36cfb7
@@ -42,7 +42,6 @@
36cfb7
 #define EM_TILEGX	191	/* Tilera TILE-Gx */
36cfb7
 #define EM_BPF		247	/* Linux BPF - in-kernel virtual machine */
36cfb7
 #define EM_FRV		0x5441	/* Fujitsu FR-V */
36cfb7
-#define EM_AVR32	0x18ad	/* Atmel AVR32 */
36cfb7
 
36cfb7
 /*
36cfb7
  * This is an interim value that we will use until the committee comes
36cfb7
diff --git a/include/linux/if_arp.h b/include/linux/if_arp.h
e138d9
index d001bdb276b76..199f253bd1f66 100644
36cfb7
--- a/include/linux/if_arp.h
36cfb7
+++ b/include/linux/if_arp.h
36cfb7
@@ -59,6 +59,7 @@
36cfb7
 #define ARPHRD_LAPB	516		/* LAPB				*/
36cfb7
 #define ARPHRD_DDCMP    517		/* Digital's DDCMP protocol     */
36cfb7
 #define ARPHRD_RAWHDLC	518		/* Raw HDLC			*/
36cfb7
+#define ARPHRD_RAWIP    519		/* Raw IP                       */
36cfb7
 
36cfb7
 #define ARPHRD_TUNNEL	768		/* IPIP tunnel			*/
36cfb7
 #define ARPHRD_TUNNEL6	769		/* IP6IP6 tunnel       		*/
36cfb7
@@ -95,6 +96,7 @@
36cfb7
 #define ARPHRD_IP6GRE	823		/* GRE over IPv6		*/
36cfb7
 #define ARPHRD_NETLINK	824		/* Netlink header		*/
36cfb7
 #define ARPHRD_6LOWPAN	825		/* IPv6 over LoWPAN             */
36cfb7
+#define ARPHRD_VSOCKMON	826		/* Vsock monitor header		*/
36cfb7
 
36cfb7
 #define ARPHRD_VOID	  0xFFFF	/* Void type, nothing is known */
36cfb7
 #define ARPHRD_NONE	  0xFFFE	/* zero header length */
36cfb7
diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h
e138d9
index b7d3beb50ce2d..7dde037a0cca6 100644
36cfb7
--- a/include/linux/if_ether.h
36cfb7
+++ b/include/linux/if_ether.h
36cfb7
@@ -66,6 +66,7 @@
36cfb7
 #define ETH_P_ATALK	0x809B		/* Appletalk DDP		*/
36cfb7
 #define ETH_P_AARP	0x80F3		/* Appletalk AARP		*/
36cfb7
 #define ETH_P_8021Q	0x8100          /* 802.1Q VLAN Extended Header  */
36cfb7
+#define ETH_P_ERSPAN	0x88BE		/* ERSPAN type II		*/
36cfb7
 #define ETH_P_IPX	0x8137		/* IPX over DIX			*/
36cfb7
 #define ETH_P_IPV6	0x86DD		/* IPv6 over bluebook		*/
36cfb7
 #define ETH_P_PAUSE	0x8808		/* IEEE Pause frames. See 802.3 31B */
36cfb7
@@ -98,11 +99,13 @@
36cfb7
 #define ETH_P_FIP	0x8914		/* FCoE Initialization Protocol */
36cfb7
 #define ETH_P_80221	0x8917		/* IEEE 802.21 Media Independent Handover Protocol */
36cfb7
 #define ETH_P_HSR	0x892F		/* IEC 62439-3 HSRv1	*/
36cfb7
+#define ETH_P_NSH	0x894F		/* Network Service Header */
36cfb7
 #define ETH_P_LOOPBACK	0x9000		/* Ethernet loopback packet, per IEEE 802.3 */
36cfb7
 #define ETH_P_QINQ1	0x9100		/* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */
36cfb7
 #define ETH_P_QINQ2	0x9200		/* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */
36cfb7
 #define ETH_P_QINQ3	0x9300		/* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */
36cfb7
 #define ETH_P_EDSA	0xDADA		/* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */
36cfb7
+#define ETH_P_IFE	0xED3E		/* ForCES inter-FE LFB type */
36cfb7
 #define ETH_P_AF_IUCV   0xFBFB		/* IBM af_iucv [ NOT AN OFFICIALLY REGISTERED ID ] */
36cfb7
 
36cfb7
 #define ETH_P_802_3_MIN	0x0600		/* If the value in the ethernet type is less than this value
36cfb7
@@ -137,6 +140,9 @@
36cfb7
 #define ETH_P_IEEE802154 0x00F6		/* IEEE802.15.4 frame		*/
36cfb7
 #define ETH_P_CAIF	0x00F7		/* ST-Ericsson CAIF protocol	*/
36cfb7
 #define ETH_P_XDSA	0x00F8		/* Multiplexed DSA protocol	*/
36cfb7
+#define ETH_P_MAP	0x00F9		/* Qualcomm multiplexing and
36cfb7
+					 * aggregation protocol
36cfb7
+					 */
36cfb7
 
36cfb7
 /*
36cfb7
  *	This is an Ethernet frame header.
36cfb7
diff --git a/include/linux/if_link.h b/include/linux/if_link.h
e138d9
index b0bdbd6e16c04..1f97d0560b6cb 100644
36cfb7
--- a/include/linux/if_link.h
36cfb7
+++ b/include/linux/if_link.h
36cfb7
@@ -157,6 +157,7 @@ enum {
36cfb7
 	IFLA_GSO_MAX_SIZE,
36cfb7
 	IFLA_PAD,
36cfb7
 	IFLA_XDP,
36cfb7
+	IFLA_EVENT,
36cfb7
 	__IFLA_MAX
36cfb7
 };
36cfb7
 
36cfb7
@@ -321,6 +322,7 @@ enum {
36cfb7
 	IFLA_BRPORT_MCAST_FLOOD,
36cfb7
 	IFLA_BRPORT_MCAST_TO_UCAST,
36cfb7
 	IFLA_BRPORT_VLAN_TUNNEL,
36cfb7
+	IFLA_BRPORT_BCAST_FLOOD,
36cfb7
 	__IFLA_BRPORT_MAX
36cfb7
 };
36cfb7
 #define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1)
36cfb7
@@ -536,11 +538,18 @@ enum {
36cfb7
 #define IFLA_PPP_MAX (__IFLA_PPP_MAX - 1)
36cfb7
 
36cfb7
 /* GTP section */
36cfb7
+
36cfb7
+enum ifla_gtp_role {
36cfb7
+	GTP_ROLE_GGSN = 0,
36cfb7
+	GTP_ROLE_SGSN,
36cfb7
+};
36cfb7
+
36cfb7
 enum {
36cfb7
 	IFLA_GTP_UNSPEC,
36cfb7
 	IFLA_GTP_FD0,
36cfb7
 	IFLA_GTP_FD1,
36cfb7
 	IFLA_GTP_PDP_HASHSIZE,
36cfb7
+	IFLA_GTP_ROLE,
36cfb7
 	__IFLA_GTP_MAX,
36cfb7
 };
36cfb7
 #define IFLA_GTP_MAX (__IFLA_GTP_MAX - 1)
36cfb7
@@ -878,16 +887,42 @@ enum {
36cfb7
 /* XDP section */
36cfb7
 
36cfb7
 #define XDP_FLAGS_UPDATE_IF_NOEXIST	(1U << 0)
36cfb7
-#define XDP_FLAGS_MASK			(XDP_FLAGS_UPDATE_IF_NOEXIST)
36cfb7
+#define XDP_FLAGS_SKB_MODE		(1U << 1)
36cfb7
+#define XDP_FLAGS_DRV_MODE		(1U << 2)
36cfb7
+#define XDP_FLAGS_HW_MODE		(1U << 3)
36cfb7
+#define XDP_FLAGS_MODES			(XDP_FLAGS_SKB_MODE | \
36cfb7
+					 XDP_FLAGS_DRV_MODE | \
36cfb7
+					 XDP_FLAGS_HW_MODE)
36cfb7
+#define XDP_FLAGS_MASK			(XDP_FLAGS_UPDATE_IF_NOEXIST | \
36cfb7
+					 XDP_FLAGS_MODES)
36cfb7
+
36cfb7
+/* These are stored into IFLA_XDP_ATTACHED on dump. */
36cfb7
+enum {
36cfb7
+	XDP_ATTACHED_NONE = 0,
36cfb7
+	XDP_ATTACHED_DRV,
36cfb7
+	XDP_ATTACHED_SKB,
36cfb7
+	XDP_ATTACHED_HW,
36cfb7
+};
36cfb7
 
36cfb7
 enum {
36cfb7
 	IFLA_XDP_UNSPEC,
36cfb7
 	IFLA_XDP_FD,
36cfb7
 	IFLA_XDP_ATTACHED,
36cfb7
 	IFLA_XDP_FLAGS,
36cfb7
+	IFLA_XDP_PROG_ID,
36cfb7
 	__IFLA_XDP_MAX,
36cfb7
 };
36cfb7
 
36cfb7
 #define IFLA_XDP_MAX (__IFLA_XDP_MAX - 1)
36cfb7
 
36cfb7
+enum {
36cfb7
+	IFLA_EVENT_NONE,
36cfb7
+	IFLA_EVENT_REBOOT,		/* internal reset / reboot */
36cfb7
+	IFLA_EVENT_FEATURES,		/* change in offload features */
36cfb7
+	IFLA_EVENT_BONDING_FAILOVER,	/* change in active slave */
36cfb7
+	IFLA_EVENT_NOTIFY_PEERS,	/* re-sent grat. arp/ndisc */
36cfb7
+	IFLA_EVENT_IGMP_RESEND,		/* re-sent IGMP JOIN */
36cfb7
+	IFLA_EVENT_BONDING_OPTIONS,	/* change in bonding options */
36cfb7
+};
36cfb7
+
36cfb7
 #endif /* _LINUX_IF_LINK_H */
36cfb7
diff --git a/include/linux/if_packet.h b/include/linux/if_packet.h
e138d9
index 9e7edfd8141e5..4df96a7dd4fae 100644
36cfb7
--- a/include/linux/if_packet.h
36cfb7
+++ b/include/linux/if_packet.h
36cfb7
@@ -66,6 +66,7 @@ struct sockaddr_ll {
36cfb7
 #define PACKET_FANOUT_CBPF		6
36cfb7
 #define PACKET_FANOUT_EBPF		7
36cfb7
 #define PACKET_FANOUT_FLAG_ROLLOVER	0x1000
36cfb7
+#define PACKET_FANOUT_FLAG_UNIQUEID	0x2000
36cfb7
 #define PACKET_FANOUT_FLAG_DEFRAG	0x8000
36cfb7
 
36cfb7
 struct tpacket_stats {
36cfb7
diff --git a/include/linux/if_tunnel.h b/include/linux/if_tunnel.h
e138d9
index 4f975f5704d8f..21834cac4c0d5 100644
36cfb7
--- a/include/linux/if_tunnel.h
36cfb7
+++ b/include/linux/if_tunnel.h
36cfb7
@@ -75,6 +75,7 @@ enum {
36cfb7
 	IFLA_IPTUN_ENCAP_SPORT,
36cfb7
 	IFLA_IPTUN_ENCAP_DPORT,
36cfb7
 	IFLA_IPTUN_COLLECT_METADATA,
36cfb7
+	IFLA_IPTUN_FWMARK,
36cfb7
 	__IFLA_IPTUN_MAX,
36cfb7
 };
36cfb7
 #define IFLA_IPTUN_MAX	(__IFLA_IPTUN_MAX - 1)
36cfb7
@@ -132,6 +133,8 @@ enum {
36cfb7
 	IFLA_GRE_ENCAP_DPORT,
36cfb7
 	IFLA_GRE_COLLECT_METADATA,
36cfb7
 	IFLA_GRE_IGNORE_DF,
36cfb7
+	IFLA_GRE_FWMARK,
36cfb7
+	IFLA_GRE_ERSPAN_INDEX,
36cfb7
 	__IFLA_GRE_MAX,
36cfb7
 };
36cfb7
 
36cfb7
@@ -147,6 +150,7 @@ enum {
36cfb7
 	IFLA_VTI_OKEY,
36cfb7
 	IFLA_VTI_LOCAL,
36cfb7
 	IFLA_VTI_REMOTE,
36cfb7
+	IFLA_VTI_FWMARK,
36cfb7
 	__IFLA_VTI_MAX,
36cfb7
 };
36cfb7
 
36cfb7
diff --git a/include/linux/inet_diag.h b/include/linux/inet_diag.h
e138d9
index f7bf7819e9243..bada4d7b6c8e6 100644
36cfb7
--- a/include/linux/inet_diag.h
36cfb7
+++ b/include/linux/inet_diag.h
36cfb7
@@ -142,6 +142,8 @@ enum {
36cfb7
 	INET_DIAG_PAD,
36cfb7
 	INET_DIAG_MARK,
36cfb7
 	INET_DIAG_BBRINFO,
36cfb7
+	INET_DIAG_CLASS_ID,
36cfb7
+	INET_DIAG_MD5SIG,
36cfb7
 	__INET_DIAG_MAX,
36cfb7
 };
36cfb7
 
36cfb7
diff --git a/include/linux/ipsec.h b/include/linux/ipsec.h
36cfb7
new file mode 100644
e138d9
index 0000000000000..d17a6302a0e96
36cfb7
--- /dev/null
36cfb7
+++ b/include/linux/ipsec.h
36cfb7
@@ -0,0 +1,47 @@
36cfb7
+#ifndef _LINUX_IPSEC_H
36cfb7
+#define _LINUX_IPSEC_H
36cfb7
+
36cfb7
+/* The definitions, required to talk to KAME racoon IKE. */
36cfb7
+
36cfb7
+#include <linux/pfkeyv2.h>
36cfb7
+
36cfb7
+#define IPSEC_PORT_ANY		0
36cfb7
+#define IPSEC_ULPROTO_ANY	255
36cfb7
+#define IPSEC_PROTO_ANY		255
36cfb7
+
36cfb7
+enum {
36cfb7
+	IPSEC_MODE_ANY		= 0,	/* We do not support this for SA */
36cfb7
+	IPSEC_MODE_TRANSPORT	= 1,
36cfb7
+	IPSEC_MODE_TUNNEL	= 2,
36cfb7
+	IPSEC_MODE_BEET         = 3
36cfb7
+};
36cfb7
+
36cfb7
+enum {
36cfb7
+	IPSEC_DIR_ANY		= 0,
36cfb7
+	IPSEC_DIR_INBOUND	= 1,
36cfb7
+	IPSEC_DIR_OUTBOUND	= 2,
36cfb7
+	IPSEC_DIR_FWD		= 3,	/* It is our own */
36cfb7
+	IPSEC_DIR_MAX		= 4,
36cfb7
+	IPSEC_DIR_INVALID	= 5
36cfb7
+};
36cfb7
+
36cfb7
+enum {
36cfb7
+	IPSEC_POLICY_DISCARD	= 0,
36cfb7
+	IPSEC_POLICY_NONE	= 1,
36cfb7
+	IPSEC_POLICY_IPSEC	= 2,
36cfb7
+	IPSEC_POLICY_ENTRUST	= 3,
36cfb7
+	IPSEC_POLICY_BYPASS	= 4
36cfb7
+};
36cfb7
+
36cfb7
+enum {
36cfb7
+	IPSEC_LEVEL_DEFAULT	= 0,
36cfb7
+	IPSEC_LEVEL_USE		= 1,
36cfb7
+	IPSEC_LEVEL_REQUIRE	= 2,
36cfb7
+	IPSEC_LEVEL_UNIQUE	= 3
36cfb7
+};
36cfb7
+
36cfb7
+#define IPSEC_MANUAL_REQID_MAX	0x3fff
36cfb7
+
36cfb7
+#define IPSEC_REPLAYWSIZE  32
36cfb7
+
36cfb7
+#endif	/* _LINUX_IPSEC_H */
36cfb7
diff --git a/include/linux/lwtunnel.h b/include/linux/lwtunnel.h
e138d9
index faa6eabee2040..329842627162b 100644
36cfb7
--- a/include/linux/lwtunnel.h
36cfb7
+++ b/include/linux/lwtunnel.h
36cfb7
@@ -11,6 +11,7 @@ enum lwtunnel_encap_types {
36cfb7
 	LWTUNNEL_ENCAP_IP6,
36cfb7
 	LWTUNNEL_ENCAP_SEG6,
36cfb7
 	LWTUNNEL_ENCAP_BPF,
36cfb7
+	LWTUNNEL_ENCAP_SEG6_LOCAL,
36cfb7
 	__LWTUNNEL_ENCAP_MAX,
36cfb7
 };
36cfb7
 
36cfb7
diff --git a/include/linux/magic.h b/include/linux/magic.h
e138d9
index e230af2e68558..e439565df838a 100644
36cfb7
--- a/include/linux/magic.h
36cfb7
+++ b/include/linux/magic.h
36cfb7
@@ -42,6 +42,7 @@
36cfb7
 #define MSDOS_SUPER_MAGIC	0x4d44		/* MD */
36cfb7
 #define NCP_SUPER_MAGIC		0x564c		/* Guess, what 0x564c is :-) */
36cfb7
 #define NFS_SUPER_MAGIC		0x6969
36cfb7
+#define OCFS2_SUPER_MAGIC	0x7461636f
36cfb7
 #define OPENPROM_SUPER_MAGIC	0x9fa1
36cfb7
 #define QNX4_SUPER_MAGIC	0x002f		/* qnx4 fs detection */
36cfb7
 #define QNX6_SUPER_MAGIC	0x68191122	/* qnx6 fs detection */
36cfb7
@@ -80,6 +81,8 @@
36cfb7
 #define BTRFS_TEST_MAGIC	0x73727279
36cfb7
 #define NSFS_MAGIC		0x6e736673
36cfb7
 #define BPF_FS_MAGIC		0xcafe4a11
36cfb7
+#define AAFS_MAGIC		0x5a3c69f0
36cfb7
+
36cfb7
 /* Since UDF 2.01 is ISO 13346 based... */
36cfb7
 #define UDF_SUPER_MAGIC		0x15013346
36cfb7
 #define BALLOON_KVM_MAGIC	0x13661366
36cfb7
diff --git a/include/linux/mpls_iptunnel.h b/include/linux/mpls_iptunnel.h
e138d9
index 4132c3c59572b..1a0e57b45a8ce 100644
36cfb7
--- a/include/linux/mpls_iptunnel.h
36cfb7
+++ b/include/linux/mpls_iptunnel.h
36cfb7
@@ -16,11 +16,13 @@
36cfb7
 /* MPLS tunnel attributes
36cfb7
  * [RTA_ENCAP] = {
36cfb7
  *     [MPLS_IPTUNNEL_DST]
36cfb7
+ *     [MPLS_IPTUNNEL_TTL]
36cfb7
  * }
36cfb7
  */
36cfb7
 enum {
36cfb7
 	MPLS_IPTUNNEL_UNSPEC,
36cfb7
 	MPLS_IPTUNNEL_DST,
36cfb7
+	MPLS_IPTUNNEL_TTL,
36cfb7
 	__MPLS_IPTUNNEL_MAX,
36cfb7
 };
36cfb7
 #define MPLS_IPTUNNEL_MAX (__MPLS_IPTUNNEL_MAX - 1)
36cfb7
diff --git a/include/linux/neighbour.h b/include/linux/neighbour.h
e138d9
index f3d16dbe09d64..3199d28980b35 100644
36cfb7
--- a/include/linux/neighbour.h
36cfb7
+++ b/include/linux/neighbour.h
36cfb7
@@ -41,6 +41,7 @@ enum {
36cfb7
 #define NTF_MASTER	0x04
36cfb7
 #define NTF_PROXY	0x08	/* == ATF_PUBL */
36cfb7
 #define NTF_EXT_LEARNED	0x10
36cfb7
+#define NTF_OFFLOADED   0x20
36cfb7
 #define NTF_ROUTER	0x80
36cfb7
 
36cfb7
 /*
36cfb7
diff --git a/include/linux/netlink.h b/include/linux/netlink.h
e138d9
index d1e26a2bcdcbb..ec0690b506471 100644
36cfb7
--- a/include/linux/netlink.h
36cfb7
+++ b/include/linux/netlink.h
36cfb7
@@ -50,12 +50,12 @@ struct nlmsghdr {
36cfb7
 
36cfb7
 /* Flags values */
36cfb7
 
36cfb7
-#define NLM_F_REQUEST		1	/* It is request message. 	*/
36cfb7
-#define NLM_F_MULTI		2	/* Multipart message, terminated by NLMSG_DONE */
36cfb7
-#define NLM_F_ACK		4	/* Reply with ack, with zero or error code */
36cfb7
-#define NLM_F_ECHO		8	/* Echo this request 		*/
36cfb7
-#define NLM_F_DUMP_INTR		16	/* Dump was inconsistent due to sequence change */
36cfb7
-#define NLM_F_DUMP_FILTERED	32	/* Dump was filtered as requested */
36cfb7
+#define NLM_F_REQUEST		0x01	/* It is request message. 	*/
36cfb7
+#define NLM_F_MULTI		0x02	/* Multipart message, terminated by NLMSG_DONE */
36cfb7
+#define NLM_F_ACK		0x04	/* Reply with ack, with zero or error code */
36cfb7
+#define NLM_F_ECHO		0x08	/* Echo this request 		*/
36cfb7
+#define NLM_F_DUMP_INTR		0x10	/* Dump was inconsistent due to sequence change */
36cfb7
+#define NLM_F_DUMP_FILTERED	0x20	/* Dump was filtered as requested */
36cfb7
 
36cfb7
 /* Modifiers to GET request */
36cfb7
 #define NLM_F_ROOT	0x100	/* specify tree	root	*/
36cfb7
@@ -69,6 +69,13 @@ struct nlmsghdr {
36cfb7
 #define NLM_F_CREATE	0x400	/* Create, if it does not exist	*/
36cfb7
 #define NLM_F_APPEND	0x800	/* Add to end of list		*/
36cfb7
 
36cfb7
+/* Modifiers to DELETE request */
36cfb7
+#define NLM_F_NONREC	0x100	/* Do not delete recursively	*/
36cfb7
+
36cfb7
+/* Flags for ACK message */
36cfb7
+#define NLM_F_CAPPED	0x100	/* request was capped */
36cfb7
+#define NLM_F_ACK_TLVS	0x200	/* extended ACK TVLs were included */
36cfb7
+
36cfb7
 /*
36cfb7
    4.4BSD ADD		NLM_F_CREATE|NLM_F_EXCL
36cfb7
    4.4BSD CHANGE	NLM_F_REPLACE
36cfb7
@@ -101,6 +108,37 @@ struct nlmsghdr {
36cfb7
 struct nlmsgerr {
36cfb7
 	int		error;
36cfb7
 	struct nlmsghdr msg;
36cfb7
+	/*
36cfb7
+	 * followed by the message contents unless NETLINK_CAP_ACK was set
36cfb7
+	 * or the ACK indicates success (error == 0)
36cfb7
+	 * message length is aligned with NLMSG_ALIGN()
36cfb7
+	 */
36cfb7
+	/*
36cfb7
+	 * followed by TLVs defined in enum nlmsgerr_attrs
36cfb7
+	 * if NETLINK_EXT_ACK was set
36cfb7
+	 */
36cfb7
+};
36cfb7
+
36cfb7
+/**
36cfb7
+ * enum nlmsgerr_attrs - nlmsgerr attributes
36cfb7
+ * @NLMSGERR_ATTR_UNUSED: unused
36cfb7
+ * @NLMSGERR_ATTR_MSG: error message string (string)
36cfb7
+ * @NLMSGERR_ATTR_OFFS: offset of the invalid attribute in the original
36cfb7
+ *	 message, counting from the beginning of the header (u32)
36cfb7
+ * @NLMSGERR_ATTR_COOKIE: arbitrary subsystem specific cookie to
36cfb7
+ *	be used - in the success case - to identify a created
36cfb7
+ *	object or operation or similar (binary)
36cfb7
+ * @__NLMSGERR_ATTR_MAX: number of attributes
36cfb7
+ * @NLMSGERR_ATTR_MAX: highest attribute number
36cfb7
+ */
36cfb7
+enum nlmsgerr_attrs {
36cfb7
+	NLMSGERR_ATTR_UNUSED,
36cfb7
+	NLMSGERR_ATTR_MSG,
36cfb7
+	NLMSGERR_ATTR_OFFS,
36cfb7
+	NLMSGERR_ATTR_COOKIE,
36cfb7
+
36cfb7
+	__NLMSGERR_ATTR_MAX,
36cfb7
+	NLMSGERR_ATTR_MAX = __NLMSGERR_ATTR_MAX - 1
36cfb7
 };
36cfb7
 
36cfb7
 #define NETLINK_ADD_MEMBERSHIP		1
36cfb7
@@ -187,5 +225,22 @@ struct nlattr {
36cfb7
 #define NLA_ALIGN(len)		(((len) + NLA_ALIGNTO - 1) & ~(NLA_ALIGNTO - 1))
36cfb7
 #define NLA_HDRLEN		((int) NLA_ALIGN(sizeof(struct nlattr)))
36cfb7
 
36cfb7
+/* Generic 32 bitflags attribute content sent to the kernel.
36cfb7
+ *
36cfb7
+ * The value is a bitmap that defines the values being set
36cfb7
+ * The selector is a bitmask that defines which value is legit
36cfb7
+ *
36cfb7
+ * Examples:
36cfb7
+ *  value = 0x0, and selector = 0x1
36cfb7
+ *  implies we are selecting bit 1 and we want to set its value to 0.
36cfb7
+ *
36cfb7
+ *  value = 0x2, and selector = 0x2
36cfb7
+ *  implies we are selecting bit 2 and we want to set its value to 1.
36cfb7
+ *
36cfb7
+ */
36cfb7
+struct nla_bitfield32 {
36cfb7
+	__u32 value;
36cfb7
+	__u32 selector;
36cfb7
+};
36cfb7
 
36cfb7
 #endif /* __LINUX_NETLINK_H */
36cfb7
diff --git a/include/linux/netlink_diag.h b/include/linux/netlink_diag.h
e138d9
index defd25fb5f5af..c8c8c7d2e530b 100644
36cfb7
--- a/include/linux/netlink_diag.h
36cfb7
+++ b/include/linux/netlink_diag.h
36cfb7
@@ -38,6 +38,7 @@ enum {
36cfb7
 	NETLINK_DIAG_GROUPS,
36cfb7
 	NETLINK_DIAG_RX_RING,
36cfb7
 	NETLINK_DIAG_TX_RING,
36cfb7
+	NETLINK_DIAG_FLAGS,
36cfb7
 
36cfb7
 	__NETLINK_DIAG_MAX,
36cfb7
 };
36cfb7
@@ -50,5 +51,14 @@ enum {
36cfb7
 #define NDIAG_SHOW_GROUPS	0x00000002 /* show groups of a netlink socket */
36cfb7
 /* deprecated since 4.6 */
36cfb7
 #define NDIAG_SHOW_RING_CFG	0x00000004 /* show ring configuration */
36cfb7
+#define NDIAG_SHOW_FLAGS	0x00000008 /* show flags of a netlink socket */
36cfb7
+
36cfb7
+/* flags */
36cfb7
+#define NDIAG_FLAG_CB_RUNNING		0x00000001
36cfb7
+#define NDIAG_FLAG_PKTINFO		0x00000002
36cfb7
+#define NDIAG_FLAG_BROADCAST_ERROR	0x00000004
36cfb7
+#define NDIAG_FLAG_NO_ENOBUFS		0x00000008
36cfb7
+#define NDIAG_FLAG_LISTEN_ALL_NSID	0x00000010
36cfb7
+#define NDIAG_FLAG_CAP_ACK		0x00000020
36cfb7
 
36cfb7
 #endif
36cfb7
diff --git a/include/linux/pfkeyv2.h b/include/linux/pfkeyv2.h
36cfb7
new file mode 100644
e138d9
index 0000000000000..ada7f0171cccd
36cfb7
--- /dev/null
36cfb7
+++ b/include/linux/pfkeyv2.h
36cfb7
@@ -0,0 +1,383 @@
36cfb7
+/* PF_KEY user interface, this is defined by rfc2367 so
36cfb7
+ * do not make arbitrary modifications or else this header
36cfb7
+ * file will not be compliant.
36cfb7
+ */
36cfb7
+
36cfb7
+#ifndef _LINUX_PFKEY2_H
36cfb7
+#define _LINUX_PFKEY2_H
36cfb7
+
36cfb7
+#include <linux/types.h>
36cfb7
+
36cfb7
+#define PF_KEY_V2		2
36cfb7
+#define PFKEYV2_REVISION	199806L
36cfb7
+
36cfb7
+struct sadb_msg {
36cfb7
+	__u8		sadb_msg_version;
36cfb7
+	__u8		sadb_msg_type;
36cfb7
+	__u8		sadb_msg_errno;
36cfb7
+	__u8		sadb_msg_satype;
36cfb7
+	__u16	sadb_msg_len;
36cfb7
+	__u16	sadb_msg_reserved;
36cfb7
+	__u32	sadb_msg_seq;
36cfb7
+	__u32	sadb_msg_pid;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_msg) == 16 */
36cfb7
+
36cfb7
+struct sadb_ext {
36cfb7
+	__u16	sadb_ext_len;
36cfb7
+	__u16	sadb_ext_type;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_ext) == 4 */
36cfb7
+
36cfb7
+struct sadb_sa {
36cfb7
+	__u16	sadb_sa_len;
36cfb7
+	__u16	sadb_sa_exttype;
36cfb7
+	__be32		sadb_sa_spi;
36cfb7
+	__u8		sadb_sa_replay;
36cfb7
+	__u8		sadb_sa_state;
36cfb7
+	__u8		sadb_sa_auth;
36cfb7
+	__u8		sadb_sa_encrypt;
36cfb7
+	__u32	sadb_sa_flags;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_sa) == 16 */
36cfb7
+
36cfb7
+struct sadb_lifetime {
36cfb7
+	__u16	sadb_lifetime_len;
36cfb7
+	__u16	sadb_lifetime_exttype;
36cfb7
+	__u32	sadb_lifetime_allocations;
36cfb7
+	__u64	sadb_lifetime_bytes;
36cfb7
+	__u64	sadb_lifetime_addtime;
36cfb7
+	__u64	sadb_lifetime_usetime;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_lifetime) == 32 */
36cfb7
+
36cfb7
+struct sadb_address {
36cfb7
+	__u16	sadb_address_len;
36cfb7
+	__u16	sadb_address_exttype;
36cfb7
+	__u8		sadb_address_proto;
36cfb7
+	__u8		sadb_address_prefixlen;
36cfb7
+	__u16	sadb_address_reserved;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_address) == 8 */
36cfb7
+
36cfb7
+struct sadb_key {
36cfb7
+	__u16	sadb_key_len;
36cfb7
+	__u16	sadb_key_exttype;
36cfb7
+	__u16	sadb_key_bits;
36cfb7
+	__u16	sadb_key_reserved;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_key) == 8 */
36cfb7
+
36cfb7
+struct sadb_ident {
36cfb7
+	__u16	sadb_ident_len;
36cfb7
+	__u16	sadb_ident_exttype;
36cfb7
+	__u16	sadb_ident_type;
36cfb7
+	__u16	sadb_ident_reserved;
36cfb7
+	__u64	sadb_ident_id;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_ident) == 16 */
36cfb7
+
36cfb7
+struct sadb_sens {
36cfb7
+	__u16	sadb_sens_len;
36cfb7
+	__u16	sadb_sens_exttype;
36cfb7
+	__u32	sadb_sens_dpd;
36cfb7
+	__u8		sadb_sens_sens_level;
36cfb7
+	__u8		sadb_sens_sens_len;
36cfb7
+	__u8		sadb_sens_integ_level;
36cfb7
+	__u8		sadb_sens_integ_len;
36cfb7
+	__u32	sadb_sens_reserved;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_sens) == 16 */
36cfb7
+
36cfb7
+/* followed by:
36cfb7
+	__u64	sadb_sens_bitmap[sens_len];
36cfb7
+	__u64	sadb_integ_bitmap[integ_len];  */
36cfb7
+
36cfb7
+struct sadb_prop {
36cfb7
+	__u16	sadb_prop_len;
36cfb7
+	__u16	sadb_prop_exttype;
36cfb7
+	__u8		sadb_prop_replay;
36cfb7
+	__u8		sadb_prop_reserved[3];
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_prop) == 8 */
36cfb7
+
36cfb7
+/* followed by:
36cfb7
+	struct sadb_comb sadb_combs[(sadb_prop_len +
36cfb7
+		sizeof(__u64) - sizeof(struct sadb_prop)) /
36cfb7
+		sizeof(struct sadb_comb)]; */
36cfb7
+
36cfb7
+struct sadb_comb {
36cfb7
+	__u8		sadb_comb_auth;
36cfb7
+	__u8		sadb_comb_encrypt;
36cfb7
+	__u16	sadb_comb_flags;
36cfb7
+	__u16	sadb_comb_auth_minbits;
36cfb7
+	__u16	sadb_comb_auth_maxbits;
36cfb7
+	__u16	sadb_comb_encrypt_minbits;
36cfb7
+	__u16	sadb_comb_encrypt_maxbits;
36cfb7
+	__u32	sadb_comb_reserved;
36cfb7
+	__u32	sadb_comb_soft_allocations;
36cfb7
+	__u32	sadb_comb_hard_allocations;
36cfb7
+	__u64	sadb_comb_soft_bytes;
36cfb7
+	__u64	sadb_comb_hard_bytes;
36cfb7
+	__u64	sadb_comb_soft_addtime;
36cfb7
+	__u64	sadb_comb_hard_addtime;
36cfb7
+	__u64	sadb_comb_soft_usetime;
36cfb7
+	__u64	sadb_comb_hard_usetime;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_comb) == 72 */
36cfb7
+
36cfb7
+struct sadb_supported {
36cfb7
+	__u16	sadb_supported_len;
36cfb7
+	__u16	sadb_supported_exttype;
36cfb7
+	__u32	sadb_supported_reserved;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_supported) == 8 */
36cfb7
+
36cfb7
+/* followed by:
36cfb7
+	struct sadb_alg sadb_algs[(sadb_supported_len +
36cfb7
+		sizeof(__u64) - sizeof(struct sadb_supported)) /
36cfb7
+		sizeof(struct sadb_alg)]; */
36cfb7
+
36cfb7
+struct sadb_alg {
36cfb7
+	__u8		sadb_alg_id;
36cfb7
+	__u8		sadb_alg_ivlen;
36cfb7
+	__u16	sadb_alg_minbits;
36cfb7
+	__u16	sadb_alg_maxbits;
36cfb7
+	__u16	sadb_alg_reserved;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_alg) == 8 */
36cfb7
+
36cfb7
+struct sadb_spirange {
36cfb7
+	__u16	sadb_spirange_len;
36cfb7
+	__u16	sadb_spirange_exttype;
36cfb7
+	__u32	sadb_spirange_min;
36cfb7
+	__u32	sadb_spirange_max;
36cfb7
+	__u32	sadb_spirange_reserved;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_spirange) == 16 */
36cfb7
+
36cfb7
+struct sadb_x_kmprivate {
36cfb7
+	__u16	sadb_x_kmprivate_len;
36cfb7
+	__u16	sadb_x_kmprivate_exttype;
36cfb7
+	__u32	sadb_x_kmprivate_reserved;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_x_kmprivate) == 8 */
36cfb7
+
36cfb7
+struct sadb_x_sa2 {
36cfb7
+	__u16	sadb_x_sa2_len;
36cfb7
+	__u16	sadb_x_sa2_exttype;
36cfb7
+	__u8		sadb_x_sa2_mode;
36cfb7
+	__u8		sadb_x_sa2_reserved1;
36cfb7
+	__u16	sadb_x_sa2_reserved2;
36cfb7
+	__u32	sadb_x_sa2_sequence;
36cfb7
+	__u32	sadb_x_sa2_reqid;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_x_sa2) == 16 */
36cfb7
+
36cfb7
+struct sadb_x_policy {
36cfb7
+	__u16	sadb_x_policy_len;
36cfb7
+	__u16	sadb_x_policy_exttype;
36cfb7
+	__u16	sadb_x_policy_type;
36cfb7
+	__u8		sadb_x_policy_dir;
36cfb7
+	__u8		sadb_x_policy_reserved;
36cfb7
+	__u32	sadb_x_policy_id;
36cfb7
+	__u32	sadb_x_policy_priority;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_x_policy) == 16 */
36cfb7
+
36cfb7
+struct sadb_x_ipsecrequest {
36cfb7
+	__u16	sadb_x_ipsecrequest_len;
36cfb7
+	__u16	sadb_x_ipsecrequest_proto;
36cfb7
+	__u8		sadb_x_ipsecrequest_mode;
36cfb7
+	__u8		sadb_x_ipsecrequest_level;
36cfb7
+	__u16	sadb_x_ipsecrequest_reserved1;
36cfb7
+	__u32	sadb_x_ipsecrequest_reqid;
36cfb7
+	__u32	sadb_x_ipsecrequest_reserved2;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_x_ipsecrequest) == 16 */
36cfb7
+
36cfb7
+/* This defines the TYPE of Nat Traversal in use.  Currently only one
36cfb7
+ * type of NAT-T is supported, draft-ietf-ipsec-udp-encaps-06
36cfb7
+ */
36cfb7
+struct sadb_x_nat_t_type {
36cfb7
+	__u16	sadb_x_nat_t_type_len;
36cfb7
+	__u16	sadb_x_nat_t_type_exttype;
36cfb7
+	__u8		sadb_x_nat_t_type_type;
36cfb7
+	__u8		sadb_x_nat_t_type_reserved[3];
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_x_nat_t_type) == 8 */
36cfb7
+
36cfb7
+/* Pass a NAT Traversal port (Source or Dest port) */
36cfb7
+struct sadb_x_nat_t_port {
36cfb7
+	__u16	sadb_x_nat_t_port_len;
36cfb7
+	__u16	sadb_x_nat_t_port_exttype;
36cfb7
+	__be16		sadb_x_nat_t_port_port;
36cfb7
+	__u16	sadb_x_nat_t_port_reserved;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_x_nat_t_port) == 8 */
36cfb7
+
36cfb7
+/* Generic LSM security context */
36cfb7
+struct sadb_x_sec_ctx {
36cfb7
+	__u16	sadb_x_sec_len;
36cfb7
+	__u16	sadb_x_sec_exttype;
36cfb7
+	__u8		sadb_x_ctx_alg;  /* LSMs: e.g., selinux == 1 */
36cfb7
+	__u8		sadb_x_ctx_doi;
36cfb7
+	__u16	sadb_x_ctx_len;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_sec_ctx) = 8 */
36cfb7
+
36cfb7
+/* Used by MIGRATE to pass addresses IKE will use to perform
36cfb7
+ * negotiation with the peer */
36cfb7
+struct sadb_x_kmaddress {
36cfb7
+	__u16	sadb_x_kmaddress_len;
36cfb7
+	__u16	sadb_x_kmaddress_exttype;
36cfb7
+	__u32	sadb_x_kmaddress_reserved;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_x_kmaddress) == 8 */
36cfb7
+
36cfb7
+/* To specify the SA dump filter */
36cfb7
+struct sadb_x_filter {
36cfb7
+	__u16	sadb_x_filter_len;
36cfb7
+	__u16	sadb_x_filter_exttype;
36cfb7
+	__u32	sadb_x_filter_saddr[4];
36cfb7
+	__u32	sadb_x_filter_daddr[4];
36cfb7
+	__u16	sadb_x_filter_family;
36cfb7
+	__u8	sadb_x_filter_splen;
36cfb7
+	__u8	sadb_x_filter_dplen;
36cfb7
+} __attribute__((packed));
36cfb7
+/* sizeof(struct sadb_x_filter) == 40 */
36cfb7
+
36cfb7
+/* Message types */
36cfb7
+#define SADB_RESERVED		0
36cfb7
+#define SADB_GETSPI		1
36cfb7
+#define SADB_UPDATE		2
36cfb7
+#define SADB_ADD		3
36cfb7
+#define SADB_DELETE		4
36cfb7
+#define SADB_GET		5
36cfb7
+#define SADB_ACQUIRE		6
36cfb7
+#define SADB_REGISTER		7
36cfb7
+#define SADB_EXPIRE		8
36cfb7
+#define SADB_FLUSH		9
36cfb7
+#define SADB_DUMP		10
36cfb7
+#define SADB_X_PROMISC		11
36cfb7
+#define SADB_X_PCHANGE		12
36cfb7
+#define SADB_X_SPDUPDATE	13
36cfb7
+#define SADB_X_SPDADD		14
36cfb7
+#define SADB_X_SPDDELETE	15
36cfb7
+#define SADB_X_SPDGET		16
36cfb7
+#define SADB_X_SPDACQUIRE	17
36cfb7
+#define SADB_X_SPDDUMP		18
36cfb7
+#define SADB_X_SPDFLUSH		19
36cfb7
+#define SADB_X_SPDSETIDX	20
36cfb7
+#define SADB_X_SPDEXPIRE	21
36cfb7
+#define SADB_X_SPDDELETE2	22
36cfb7
+#define SADB_X_NAT_T_NEW_MAPPING	23
36cfb7
+#define SADB_X_MIGRATE		24
36cfb7
+#define SADB_MAX		24
36cfb7
+
36cfb7
+/* Security Association flags */
36cfb7
+#define SADB_SAFLAGS_PFS	1
36cfb7
+#define SADB_SAFLAGS_NOPMTUDISC	0x20000000
36cfb7
+#define SADB_SAFLAGS_DECAP_DSCP	0x40000000
36cfb7
+#define SADB_SAFLAGS_NOECN	0x80000000
36cfb7
+
36cfb7
+/* Security Association states */
36cfb7
+#define SADB_SASTATE_LARVAL	0
36cfb7
+#define SADB_SASTATE_MATURE	1
36cfb7
+#define SADB_SASTATE_DYING	2
36cfb7
+#define SADB_SASTATE_DEAD	3
36cfb7
+#define SADB_SASTATE_MAX	3
36cfb7
+
36cfb7
+/* Security Association types */
36cfb7
+#define SADB_SATYPE_UNSPEC	0
36cfb7
+#define SADB_SATYPE_AH		2
36cfb7
+#define SADB_SATYPE_ESP		3
36cfb7
+#define SADB_SATYPE_RSVP	5
36cfb7
+#define SADB_SATYPE_OSPFV2	6
36cfb7
+#define SADB_SATYPE_RIPV2	7
36cfb7
+#define SADB_SATYPE_MIP		8
36cfb7
+#define SADB_X_SATYPE_IPCOMP	9
36cfb7
+#define SADB_SATYPE_MAX		9
36cfb7
+
36cfb7
+/* Authentication algorithms */
36cfb7
+#define SADB_AALG_NONE			0
36cfb7
+#define SADB_AALG_MD5HMAC		2
36cfb7
+#define SADB_AALG_SHA1HMAC		3
36cfb7
+#define SADB_X_AALG_SHA2_256HMAC	5
36cfb7
+#define SADB_X_AALG_SHA2_384HMAC	6
36cfb7
+#define SADB_X_AALG_SHA2_512HMAC	7
36cfb7
+#define SADB_X_AALG_RIPEMD160HMAC	8
36cfb7
+#define SADB_X_AALG_AES_XCBC_MAC	9
36cfb7
+#define SADB_X_AALG_NULL		251	/* kame */
36cfb7
+#define SADB_AALG_MAX			251
36cfb7
+
36cfb7
+/* Encryption algorithms */
36cfb7
+#define SADB_EALG_NONE			0
36cfb7
+#define SADB_EALG_DESCBC		2
36cfb7
+#define SADB_EALG_3DESCBC		3
36cfb7
+#define SADB_X_EALG_CASTCBC		6
36cfb7
+#define SADB_X_EALG_BLOWFISHCBC		7
36cfb7
+#define SADB_EALG_NULL			11
36cfb7
+#define SADB_X_EALG_AESCBC		12
36cfb7
+#define SADB_X_EALG_AESCTR		13
36cfb7
+#define SADB_X_EALG_AES_CCM_ICV8	14
36cfb7
+#define SADB_X_EALG_AES_CCM_ICV12	15
36cfb7
+#define SADB_X_EALG_AES_CCM_ICV16	16
36cfb7
+#define SADB_X_EALG_AES_GCM_ICV8	18
36cfb7
+#define SADB_X_EALG_AES_GCM_ICV12	19
36cfb7
+#define SADB_X_EALG_AES_GCM_ICV16	20
36cfb7
+#define SADB_X_EALG_CAMELLIACBC		22
36cfb7
+#define SADB_X_EALG_NULL_AES_GMAC	23
36cfb7
+#define SADB_EALG_MAX                   253 /* last EALG */
36cfb7
+/* private allocations should use 249-255 (RFC2407) */
36cfb7
+#define SADB_X_EALG_SERPENTCBC  252     /* draft-ietf-ipsec-ciph-aes-cbc-00 */
36cfb7
+#define SADB_X_EALG_TWOFISHCBC  253     /* draft-ietf-ipsec-ciph-aes-cbc-00 */
36cfb7
+
36cfb7
+/* Compression algorithms */
36cfb7
+#define SADB_X_CALG_NONE		0
36cfb7
+#define SADB_X_CALG_OUI			1
36cfb7
+#define SADB_X_CALG_DEFLATE		2
36cfb7
+#define SADB_X_CALG_LZS			3
36cfb7
+#define SADB_X_CALG_LZJH		4
36cfb7
+#define SADB_X_CALG_MAX			4
36cfb7
+
36cfb7
+/* Extension Header values */
36cfb7
+#define SADB_EXT_RESERVED		0
36cfb7
+#define SADB_EXT_SA			1
36cfb7
+#define SADB_EXT_LIFETIME_CURRENT	2
36cfb7
+#define SADB_EXT_LIFETIME_HARD		3
36cfb7
+#define SADB_EXT_LIFETIME_SOFT		4
36cfb7
+#define SADB_EXT_ADDRESS_SRC		5
36cfb7
+#define SADB_EXT_ADDRESS_DST		6
36cfb7
+#define SADB_EXT_ADDRESS_PROXY		7
36cfb7
+#define SADB_EXT_KEY_AUTH		8
36cfb7
+#define SADB_EXT_KEY_ENCRYPT		9
36cfb7
+#define SADB_EXT_IDENTITY_SRC		10
36cfb7
+#define SADB_EXT_IDENTITY_DST		11
36cfb7
+#define SADB_EXT_SENSITIVITY		12
36cfb7
+#define SADB_EXT_PROPOSAL		13
36cfb7
+#define SADB_EXT_SUPPORTED_AUTH		14
36cfb7
+#define SADB_EXT_SUPPORTED_ENCRYPT	15
36cfb7
+#define SADB_EXT_SPIRANGE		16
36cfb7
+#define SADB_X_EXT_KMPRIVATE		17
36cfb7
+#define SADB_X_EXT_POLICY		18
36cfb7
+#define SADB_X_EXT_SA2			19
36cfb7
+/* The next four entries are for setting up NAT Traversal */
36cfb7
+#define SADB_X_EXT_NAT_T_TYPE		20
36cfb7
+#define SADB_X_EXT_NAT_T_SPORT		21
36cfb7
+#define SADB_X_EXT_NAT_T_DPORT		22
36cfb7
+#define SADB_X_EXT_NAT_T_OA		23
36cfb7
+#define SADB_X_EXT_SEC_CTX		24
36cfb7
+/* Used with MIGRATE to pass @ to IKE for negotiation */
36cfb7
+#define SADB_X_EXT_KMADDRESS		25
36cfb7
+#define SADB_X_EXT_FILTER		26
36cfb7
+#define SADB_EXT_MAX			26
36cfb7
+
36cfb7
+/* Identity Extension values */
36cfb7
+#define SADB_IDENTTYPE_RESERVED	0
36cfb7
+#define SADB_IDENTTYPE_PREFIX	1
36cfb7
+#define SADB_IDENTTYPE_FQDN	2
36cfb7
+#define SADB_IDENTTYPE_USERFQDN	3
36cfb7
+#define SADB_IDENTTYPE_MAX	3
36cfb7
+
36cfb7
+#endif /* !(_LINUX_PFKEY2_H) */
36cfb7
diff --git a/include/linux/pkt_cls.h b/include/linux/pkt_cls.h
e138d9
index 7a69f2a4ca0c0..d5e2bf68d0d40 100644
36cfb7
--- a/include/linux/pkt_cls.h
36cfb7
+++ b/include/linux/pkt_cls.h
36cfb7
@@ -37,7 +37,28 @@ enum {
36cfb7
 #define TC_ACT_QUEUED		5
36cfb7
 #define TC_ACT_REPEAT		6
36cfb7
 #define TC_ACT_REDIRECT		7
36cfb7
-#define TC_ACT_JUMP		0x10000000
36cfb7
+#define TC_ACT_TRAP		8 /* For hw path, this means "trap to cpu"
36cfb7
+				   * and don't further process the frame
36cfb7
+				   * in hardware. For sw path, this is
36cfb7
+				   * equivalent of TC_ACT_STOLEN - drop
36cfb7
+				   * the skb and act like everything
36cfb7
+				   * is alright.
36cfb7
+				   */
36cfb7
+
36cfb7
+/* There is a special kind of actions called "extended actions",
36cfb7
+ * which need a value parameter. These have a local opcode located in
36cfb7
+ * the highest nibble, starting from 1. The rest of the bits
36cfb7
+ * are used to carry the value. These two parts together make
36cfb7
+ * a combined opcode.
36cfb7
+ */
36cfb7
+#define __TC_ACT_EXT_SHIFT 28
36cfb7
+#define __TC_ACT_EXT(local) ((local) << __TC_ACT_EXT_SHIFT)
36cfb7
+#define TC_ACT_EXT_VAL_MASK ((1 << __TC_ACT_EXT_SHIFT) - 1)
36cfb7
+#define TC_ACT_EXT_CMP(combined, opcode) \
36cfb7
+	(((combined) & (~TC_ACT_EXT_VAL_MASK)) == opcode)
36cfb7
+
36cfb7
+#define TC_ACT_JUMP __TC_ACT_EXT(1)
36cfb7
+#define TC_ACT_GOTO_CHAIN __TC_ACT_EXT(2)
36cfb7
 
36cfb7
 /* Action type identifiers*/
36cfb7
 enum {
36cfb7
@@ -348,6 +369,7 @@ enum {
36cfb7
 	TCA_BPF_FLAGS,
36cfb7
 	TCA_BPF_FLAGS_GEN,
36cfb7
 	TCA_BPF_TAG,
36cfb7
+	TCA_BPF_ID,
36cfb7
 	__TCA_BPF_MAX,
36cfb7
 };
36cfb7
 
36cfb7
@@ -432,6 +454,19 @@ enum {
36cfb7
 	TCA_FLOWER_KEY_ARP_THA,		/* ETH_ALEN */
36cfb7
 	TCA_FLOWER_KEY_ARP_THA_MASK,	/* ETH_ALEN */
36cfb7
 
36cfb7
+	TCA_FLOWER_KEY_MPLS_TTL,	/* u8 - 8 bits */
36cfb7
+	TCA_FLOWER_KEY_MPLS_BOS,	/* u8 - 1 bit */
36cfb7
+	TCA_FLOWER_KEY_MPLS_TC,		/* u8 - 3 bits */
36cfb7
+	TCA_FLOWER_KEY_MPLS_LABEL,	/* be32 - 20 bits */
36cfb7
+
36cfb7
+	TCA_FLOWER_KEY_TCP_FLAGS,	/* be16 */
36cfb7
+	TCA_FLOWER_KEY_TCP_FLAGS_MASK,	/* be16 */
36cfb7
+
36cfb7
+	TCA_FLOWER_KEY_IP_TOS,		/* u8 */
36cfb7
+	TCA_FLOWER_KEY_IP_TOS_MASK,	/* u8 */
36cfb7
+	TCA_FLOWER_KEY_IP_TTL,		/* u8 */
36cfb7
+	TCA_FLOWER_KEY_IP_TTL_MASK,	/* u8 */
36cfb7
+
36cfb7
 	__TCA_FLOWER_MAX,
36cfb7
 };
36cfb7
 
36cfb7
diff --git a/include/linux/pkt_sched.h b/include/linux/pkt_sched.h
e138d9
index df7451d351311..099bf5528fed3 100644
36cfb7
--- a/include/linux/pkt_sched.h
36cfb7
+++ b/include/linux/pkt_sched.h
36cfb7
@@ -617,6 +617,14 @@ struct tc_drr_stats {
36cfb7
 #define TC_QOPT_BITMASK 15
36cfb7
 #define TC_QOPT_MAX_QUEUE 16
36cfb7
 
36cfb7
+enum {
36cfb7
+	TC_MQPRIO_HW_OFFLOAD_NONE,	/* no offload requested */
36cfb7
+	TC_MQPRIO_HW_OFFLOAD_TCS,	/* offload TCs, no queue counts */
36cfb7
+	__TC_MQPRIO_HW_OFFLOAD_MAX
36cfb7
+};
36cfb7
+
36cfb7
+#define TC_MQPRIO_HW_OFFLOAD_MAX (__TC_MQPRIO_HW_OFFLOAD_MAX - 1)
36cfb7
+
36cfb7
 struct tc_mqprio_qopt {
36cfb7
 	__u8	num_tc;
36cfb7
 	__u8	prio_tc_map[TC_QOPT_BITMASK + 1];
36cfb7
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h
e138d9
index d42fe83cec694..813e9e0767d33 100644
36cfb7
--- a/include/linux/rtnetlink.h
36cfb7
+++ b/include/linux/rtnetlink.h
36cfb7
@@ -122,6 +122,8 @@ enum {
36cfb7
 
36cfb7
 	RTM_NEWNETCONF = 80,
36cfb7
 #define RTM_NEWNETCONF RTM_NEWNETCONF
36cfb7
+	RTM_DELNETCONF,
36cfb7
+#define RTM_DELNETCONF RTM_DELNETCONF
36cfb7
 	RTM_GETNETCONF = 82,
36cfb7
 #define RTM_GETNETCONF RTM_GETNETCONF
36cfb7
 
36cfb7
@@ -144,6 +146,9 @@ enum {
36cfb7
 	RTM_GETSTATS = 94,
36cfb7
 #define RTM_GETSTATS RTM_GETSTATS
36cfb7
 
36cfb7
+	RTM_NEWCACHEREPORT = 96,
36cfb7
+#define RTM_NEWCACHEREPORT RTM_NEWCACHEREPORT
36cfb7
+
36cfb7
 	__RTM_MAX,
36cfb7
 #define RTM_MAX		(((__RTM_MAX + 3) & ~3) - 1)
36cfb7
 };
36cfb7
@@ -276,6 +281,7 @@ enum rt_scope_t {
36cfb7
 #define RTM_F_EQUALIZE		0x400	/* Multipath equalizer: NI	*/
36cfb7
 #define RTM_F_PREFIX		0x800	/* Prefix addresses		*/
36cfb7
 #define RTM_F_LOOKUP_TABLE	0x1000	/* set rtm_table to FIB lookup result */
36cfb7
+#define RTM_F_FIB_MATCH	        0x2000	/* return full fib lookup match */
36cfb7
 
36cfb7
 /* Reserved table identifiers */
36cfb7
 
36cfb7
@@ -319,6 +325,7 @@ enum rtattr_type_t {
36cfb7
 	RTA_EXPIRES,
36cfb7
 	RTA_PAD,
36cfb7
 	RTA_UID,
36cfb7
+	RTA_TTL_PROPAGATE,
36cfb7
 	__RTA_MAX
36cfb7
 };
36cfb7
 
36cfb7
@@ -545,6 +552,8 @@ enum {
36cfb7
 	TCA_STATS2,
36cfb7
 	TCA_STAB,
36cfb7
 	TCA_PAD,
36cfb7
+	TCA_DUMP_INVISIBLE,
36cfb7
+	TCA_CHAIN,
36cfb7
 	__TCA_MAX
36cfb7
 };
36cfb7
 
36cfb7
@@ -658,6 +667,10 @@ enum rtnetlink_groups {
36cfb7
 #define RTNLGRP_NSID		RTNLGRP_NSID
36cfb7
 	RTNLGRP_MPLS_NETCONF,
36cfb7
 #define RTNLGRP_MPLS_NETCONF	RTNLGRP_MPLS_NETCONF
36cfb7
+	RTNLGRP_IPV4_MROUTE_R,
36cfb7
+#define RTNLGRP_IPV4_MROUTE_R	RTNLGRP_IPV4_MROUTE_R
36cfb7
+	RTNLGRP_IPV6_MROUTE_R,
36cfb7
+#define RTNLGRP_IPV6_MROUTE_R	RTNLGRP_IPV6_MROUTE_R
36cfb7
 	__RTNLGRP_MAX
36cfb7
 };
36cfb7
 #define RTNLGRP_MAX	(__RTNLGRP_MAX - 1)
36cfb7
@@ -668,10 +681,29 @@ struct tcamsg {
36cfb7
 	unsigned char	tca__pad1;
36cfb7
 	unsigned short	tca__pad2;
36cfb7
 };
36cfb7
+
36cfb7
+enum {
36cfb7
+	TCA_ROOT_UNSPEC,
36cfb7
+	TCA_ROOT_TAB,
36cfb7
+#define TCA_ACT_TAB TCA_ROOT_TAB
36cfb7
+#define TCAA_MAX TCA_ROOT_TAB
36cfb7
+	TCA_ROOT_FLAGS,
36cfb7
+	TCA_ROOT_COUNT,
36cfb7
+	TCA_ROOT_TIME_DELTA, /* in msecs */
36cfb7
+	__TCA_ROOT_MAX,
36cfb7
+#define	TCA_ROOT_MAX (__TCA_ROOT_MAX - 1)
36cfb7
+};
36cfb7
+
36cfb7
 #define TA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg))))
36cfb7
 #define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg))
36cfb7
-#define TCA_ACT_TAB 1 /* attr type must be >=1 */	
36cfb7
-#define TCAA_MAX 1
36cfb7
+/* tcamsg flags stored in attribute TCA_ROOT_FLAGS
36cfb7
+ *
36cfb7
+ * TCA_FLAG_LARGE_DUMP_ON user->kernel to request for larger than TCA_ACT_MAX_PRIO
36cfb7
+ * actions in a dump. All dump responses will contain the number of actions
36cfb7
+ * being dumped stored in for user app's consumption in TCA_ROOT_COUNT
36cfb7
+ *
36cfb7
+ */
36cfb7
+#define TCA_FLAG_LARGE_DUMP_ON		(1 << 0)
36cfb7
 
36cfb7
 /* New extended info filters for IFLA_EXT_MASK */
36cfb7
 #define RTEXT_FILTER_VF		(1 << 0)
36cfb7
diff --git a/include/linux/sctp.h b/include/linux/sctp.h
e138d9
index 5e08b3de809eb..fec24c41405b9 100644
36cfb7
--- a/include/linux/sctp.h
36cfb7
+++ b/include/linux/sctp.h
36cfb7
@@ -115,10 +115,13 @@ typedef __s32 sctp_assoc_t;
36cfb7
 #define SCTP_PR_SUPPORTED	113
36cfb7
 #define SCTP_DEFAULT_PRINFO	114
36cfb7
 #define SCTP_PR_ASSOC_STATUS	115
36cfb7
+#define SCTP_PR_STREAM_STATUS	116
36cfb7
+#define SCTP_RECONFIG_SUPPORTED	117
36cfb7
 #define SCTP_ENABLE_STREAM_RESET	118
36cfb7
 #define SCTP_RESET_STREAMS	119
36cfb7
 #define SCTP_RESET_ASSOC	120
36cfb7
 #define SCTP_ADD_STREAMS	121
36cfb7
+#define SCTP_SOCKOPT_PEELOFF_FLAGS 122
36cfb7
 
36cfb7
 /* PR-SCTP policies */
36cfb7
 #define SCTP_PR_SCTP_NONE	0x0000
36cfb7
@@ -502,6 +505,28 @@ struct sctp_stream_reset_event {
36cfb7
 	__u16 strreset_stream_list[];
36cfb7
 };
36cfb7
 
36cfb7
+#define SCTP_ASSOC_RESET_DENIED		0x0004
36cfb7
+#define SCTP_ASSOC_RESET_FAILED		0x0008
36cfb7
+struct sctp_assoc_reset_event {
36cfb7
+	__u16 assocreset_type;
36cfb7
+	__u16 assocreset_flags;
36cfb7
+	__u32 assocreset_length;
36cfb7
+	sctp_assoc_t assocreset_assoc_id;
36cfb7
+	__u32 assocreset_local_tsn;
36cfb7
+	__u32 assocreset_remote_tsn;
36cfb7
+};
36cfb7
+
36cfb7
+#define SCTP_ASSOC_CHANGE_DENIED	0x0004
36cfb7
+#define SCTP_ASSOC_CHANGE_FAILED	0x0008
36cfb7
+struct sctp_stream_change_event {
36cfb7
+	__u16 strchange_type;
36cfb7
+	__u16 strchange_flags;
36cfb7
+	__u32 strchange_length;
36cfb7
+	sctp_assoc_t strchange_assoc_id;
36cfb7
+	__u16 strchange_instrms;
36cfb7
+	__u16 strchange_outstrms;
36cfb7
+};
36cfb7
+
36cfb7
 /*
36cfb7
  * Described in Section 7.3
36cfb7
  *   Ancillary Data and Notification Interest Options
36cfb7
@@ -518,6 +543,8 @@ struct sctp_event_subscribe {
36cfb7
 	__u8 sctp_authentication_event;
36cfb7
 	__u8 sctp_sender_dry_event;
36cfb7
 	__u8 sctp_stream_reset_event;
36cfb7
+	__u8 sctp_assoc_reset_event;
36cfb7
+	__u8 sctp_stream_change_event;
36cfb7
 };
36cfb7
 
36cfb7
 /*
36cfb7
@@ -543,6 +570,8 @@ union sctp_notification {
36cfb7
 	struct sctp_authkey_event sn_authkey_event;
36cfb7
 	struct sctp_sender_dry_event sn_sender_dry_event;
36cfb7
 	struct sctp_stream_reset_event sn_strreset_event;
36cfb7
+	struct sctp_assoc_reset_event sn_assocreset_event;
36cfb7
+	struct sctp_stream_change_event sn_strchange_event;
36cfb7
 };
36cfb7
 
36cfb7
 /* Section 5.3.1
36cfb7
@@ -572,6 +601,10 @@ enum sctp_sn_type {
36cfb7
 #define SCTP_SENDER_DRY_EVENT		SCTP_SENDER_DRY_EVENT
36cfb7
 	SCTP_STREAM_RESET_EVENT,
36cfb7
 #define SCTP_STREAM_RESET_EVENT		SCTP_STREAM_RESET_EVENT
36cfb7
+	SCTP_ASSOC_RESET_EVENT,
36cfb7
+#define SCTP_ASSOC_RESET_EVENT		SCTP_ASSOC_RESET_EVENT
36cfb7
+	SCTP_STREAM_CHANGE_EVENT,
36cfb7
+#define SCTP_STREAM_CHANGE_EVENT	SCTP_STREAM_CHANGE_EVENT
36cfb7
 };
36cfb7
 
36cfb7
 /* Notification error codes used to fill up the error fields in some
36cfb7
@@ -940,6 +973,11 @@ typedef struct {
36cfb7
 	int sd;
36cfb7
 } sctp_peeloff_arg_t;
36cfb7
 
36cfb7
+typedef struct {
36cfb7
+	sctp_peeloff_arg_t p_arg;
36cfb7
+	unsigned flags;
36cfb7
+} sctp_peeloff_flags_arg_t;
36cfb7
+
36cfb7
 /*
36cfb7
  *  Peer Address Thresholds socket option
36cfb7
  */
36cfb7
diff --git a/include/linux/seg6.h b/include/linux/seg6.h
36cfb7
new file mode 100644
e138d9
index 0000000000000..07152792e61d2
36cfb7
--- /dev/null
36cfb7
+++ b/include/linux/seg6.h
36cfb7
@@ -0,0 +1,54 @@
36cfb7
+/*
36cfb7
+ *  SR-IPv6 implementation
36cfb7
+ *
36cfb7
+ *  Author:
36cfb7
+ *  David Lebrun <david.lebrun@uclouvain.be>
36cfb7
+ *
36cfb7
+ *
36cfb7
+ *  This program is free software; you can redistribute it and/or
36cfb7
+ *      modify it under the terms of the GNU General Public License
36cfb7
+ *      as published by the Free Software Foundation; either version
36cfb7
+ *      2 of the License, or (at your option) any later version.
36cfb7
+ */
36cfb7
+
36cfb7
+#ifndef _LINUX_SEG6_H
36cfb7
+#define _LINUX_SEG6_H
36cfb7
+
36cfb7
+#include <linux/types.h>
36cfb7
+#include <linux/in6.h>		/* For struct in6_addr. */
36cfb7
+
36cfb7
+/*
36cfb7
+ * SRH
36cfb7
+ */
36cfb7
+struct ipv6_sr_hdr {
36cfb7
+	__u8	nexthdr;
36cfb7
+	__u8	hdrlen;
36cfb7
+	__u8	type;
36cfb7
+	__u8	segments_left;
36cfb7
+	__u8	first_segment;
36cfb7
+	__u8	flags;
36cfb7
+	__u16	reserved;
36cfb7
+
36cfb7
+	struct in6_addr segments[0];
36cfb7
+};
36cfb7
+
36cfb7
+#define SR6_FLAG1_PROTECTED	(1 << 6)
36cfb7
+#define SR6_FLAG1_OAM		(1 << 5)
36cfb7
+#define SR6_FLAG1_ALERT		(1 << 4)
36cfb7
+#define SR6_FLAG1_HMAC		(1 << 3)
36cfb7
+
36cfb7
+#define SR6_TLV_INGRESS		1
36cfb7
+#define SR6_TLV_EGRESS		2
36cfb7
+#define SR6_TLV_OPAQUE		3
36cfb7
+#define SR6_TLV_PADDING		4
36cfb7
+#define SR6_TLV_HMAC		5
36cfb7
+
36cfb7
+#define sr_has_hmac(srh) ((srh)->flags & SR6_FLAG1_HMAC)
36cfb7
+
36cfb7
+struct sr6_tlv {
36cfb7
+	__u8 type;
36cfb7
+	__u8 len;
36cfb7
+	__u8 data[0];
36cfb7
+};
36cfb7
+
36cfb7
+#endif
36cfb7
diff --git a/include/linux/seg6_genl.h b/include/linux/seg6_genl.h
36cfb7
new file mode 100644
e138d9
index 0000000000000..99382f94fa0a3
36cfb7
--- /dev/null
36cfb7
+++ b/include/linux/seg6_genl.h
36cfb7
@@ -0,0 +1,32 @@
36cfb7
+#ifndef _LINUX_SEG6_GENL_H
36cfb7
+#define _LINUX_SEG6_GENL_H
36cfb7
+
36cfb7
+#define SEG6_GENL_NAME		"SEG6"
36cfb7
+#define SEG6_GENL_VERSION	0x1
36cfb7
+
36cfb7
+enum {
36cfb7
+	SEG6_ATTR_UNSPEC,
36cfb7
+	SEG6_ATTR_DST,
36cfb7
+	SEG6_ATTR_DSTLEN,
36cfb7
+	SEG6_ATTR_HMACKEYID,
36cfb7
+	SEG6_ATTR_SECRET,
36cfb7
+	SEG6_ATTR_SECRETLEN,
36cfb7
+	SEG6_ATTR_ALGID,
36cfb7
+	SEG6_ATTR_HMACINFO,
36cfb7
+	__SEG6_ATTR_MAX,
36cfb7
+};
36cfb7
+
36cfb7
+#define SEG6_ATTR_MAX (__SEG6_ATTR_MAX - 1)
36cfb7
+
36cfb7
+enum {
36cfb7
+	SEG6_CMD_UNSPEC,
36cfb7
+	SEG6_CMD_SETHMAC,
36cfb7
+	SEG6_CMD_DUMPHMAC,
36cfb7
+	SEG6_CMD_SET_TUNSRC,
36cfb7
+	SEG6_CMD_GET_TUNSRC,
36cfb7
+	__SEG6_CMD_MAX,
36cfb7
+};
36cfb7
+
36cfb7
+#define SEG6_CMD_MAX (__SEG6_CMD_MAX - 1)
36cfb7
+
36cfb7
+#endif
36cfb7
diff --git a/include/linux/seg6_hmac.h b/include/linux/seg6_hmac.h
36cfb7
new file mode 100644
e138d9
index 0000000000000..704f93e80b417
36cfb7
--- /dev/null
36cfb7
+++ b/include/linux/seg6_hmac.h
36cfb7
@@ -0,0 +1,22 @@
36cfb7
+#ifndef _LINUX_SEG6_HMAC_H
36cfb7
+#define _LINUX_SEG6_HMAC_H
36cfb7
+
36cfb7
+#include <linux/types.h>
36cfb7
+#include <linux/seg6.h>
36cfb7
+
36cfb7
+#define SEG6_HMAC_SECRET_LEN	64
36cfb7
+#define SEG6_HMAC_FIELD_LEN	32
36cfb7
+
36cfb7
+struct sr6_tlv_hmac {
36cfb7
+	struct sr6_tlv tlvhdr;
36cfb7
+	__u16 reserved;
36cfb7
+	__be32 hmackeyid;
36cfb7
+	__u8 hmac[SEG6_HMAC_FIELD_LEN];
36cfb7
+};
36cfb7
+
36cfb7
+enum {
36cfb7
+	SEG6_HMAC_ALGO_SHA1 = 1,
36cfb7
+	SEG6_HMAC_ALGO_SHA256 = 2,
36cfb7
+};
36cfb7
+
36cfb7
+#endif
36cfb7
diff --git a/include/linux/seg6_iptunnel.h b/include/linux/seg6_iptunnel.h
36cfb7
new file mode 100644
e138d9
index 0000000000000..a5dc05a1cbba3
36cfb7
--- /dev/null
36cfb7
+++ b/include/linux/seg6_iptunnel.h
36cfb7
@@ -0,0 +1,40 @@
36cfb7
+/*
36cfb7
+ *  SR-IPv6 implementation
36cfb7
+ *
36cfb7
+ *  Author:
36cfb7
+ *  David Lebrun <david.lebrun@uclouvain.be>
36cfb7
+ *
36cfb7
+ *
36cfb7
+ *  This program is free software; you can redistribute it and/or
36cfb7
+ *      modify it under the terms of the GNU General Public License
36cfb7
+ *      as published by the Free Software Foundation; either version
36cfb7
+ *      2 of the License, or (at your option) any later version.
36cfb7
+ */
36cfb7
+
36cfb7
+#ifndef _LINUX_SEG6_IPTUNNEL_H
36cfb7
+#define _LINUX_SEG6_IPTUNNEL_H
36cfb7
+
36cfb7
+#include <linux/seg6.h>		/* For struct ipv6_sr_hdr. */
36cfb7
+
36cfb7
+enum {
36cfb7
+	SEG6_IPTUNNEL_UNSPEC,
36cfb7
+	SEG6_IPTUNNEL_SRH,
36cfb7
+	__SEG6_IPTUNNEL_MAX,
36cfb7
+};
36cfb7
+#define SEG6_IPTUNNEL_MAX (__SEG6_IPTUNNEL_MAX - 1)
36cfb7
+
36cfb7
+struct seg6_iptunnel_encap {
36cfb7
+	int mode;
36cfb7
+	struct ipv6_sr_hdr srh[0];
36cfb7
+};
36cfb7
+
36cfb7
+#define SEG6_IPTUN_ENCAP_SIZE(x) ((sizeof(*x)) + (((x)->srh->hdrlen + 1) << 3))
36cfb7
+
36cfb7
+enum {
36cfb7
+	SEG6_IPTUN_MODE_INLINE,
36cfb7
+	SEG6_IPTUN_MODE_ENCAP,
36cfb7
+	SEG6_IPTUN_MODE_L2ENCAP,
36cfb7
+};
36cfb7
+
36cfb7
+
36cfb7
+#endif
36cfb7
diff --git a/include/linux/seg6_local.h b/include/linux/seg6_local.h
36cfb7
new file mode 100644
e138d9
index 0000000000000..76b90d60c7ea7
36cfb7
--- /dev/null
36cfb7
+++ b/include/linux/seg6_local.h
36cfb7
@@ -0,0 +1,68 @@
36cfb7
+/*
36cfb7
+ *  SR-IPv6 implementation
36cfb7
+ *
36cfb7
+ *  Author:
36cfb7
+ *  David Lebrun <david.lebrun@uclouvain.be>
36cfb7
+ *
36cfb7
+ *
36cfb7
+ *  This program is free software; you can redistribute it and/or
36cfb7
+ *      modify it under the terms of the GNU General Public License
36cfb7
+ *      as published by the Free Software Foundation; either version
36cfb7
+ *      2 of the License, or (at your option) any later version.
36cfb7
+ */
36cfb7
+
36cfb7
+#ifndef _LINUX_SEG6_LOCAL_H
36cfb7
+#define _LINUX_SEG6_LOCAL_H
36cfb7
+
36cfb7
+#include <linux/seg6.h>
36cfb7
+
36cfb7
+enum {
36cfb7
+	SEG6_LOCAL_UNSPEC,
36cfb7
+	SEG6_LOCAL_ACTION,
36cfb7
+	SEG6_LOCAL_SRH,
36cfb7
+	SEG6_LOCAL_TABLE,
36cfb7
+	SEG6_LOCAL_NH4,
36cfb7
+	SEG6_LOCAL_NH6,
36cfb7
+	SEG6_LOCAL_IIF,
36cfb7
+	SEG6_LOCAL_OIF,
36cfb7
+	__SEG6_LOCAL_MAX,
36cfb7
+};
36cfb7
+#define SEG6_LOCAL_MAX (__SEG6_LOCAL_MAX - 1)
36cfb7
+
36cfb7
+enum {
36cfb7
+	SEG6_LOCAL_ACTION_UNSPEC	= 0,
36cfb7
+	/* node segment */
36cfb7
+	SEG6_LOCAL_ACTION_END		= 1,
36cfb7
+	/* adjacency segment (IPv6 cross-connect) */
36cfb7
+	SEG6_LOCAL_ACTION_END_X		= 2,
36cfb7
+	/* lookup of next seg NH in table */
36cfb7
+	SEG6_LOCAL_ACTION_END_T		= 3,
36cfb7
+	/* decap and L2 cross-connect */
36cfb7
+	SEG6_LOCAL_ACTION_END_DX2	= 4,
36cfb7
+	/* decap and IPv6 cross-connect */
36cfb7
+	SEG6_LOCAL_ACTION_END_DX6	= 5,
36cfb7
+	/* decap and IPv4 cross-connect */
36cfb7
+	SEG6_LOCAL_ACTION_END_DX4	= 6,
36cfb7
+	/* decap and lookup of DA in v6 table */
36cfb7
+	SEG6_LOCAL_ACTION_END_DT6	= 7,
36cfb7
+	/* decap and lookup of DA in v4 table */
36cfb7
+	SEG6_LOCAL_ACTION_END_DT4	= 8,
36cfb7
+	/* binding segment with insertion */
36cfb7
+	SEG6_LOCAL_ACTION_END_B6	= 9,
36cfb7
+	/* binding segment with encapsulation */
36cfb7
+	SEG6_LOCAL_ACTION_END_B6_ENCAP	= 10,
36cfb7
+	/* binding segment with MPLS encap */
36cfb7
+	SEG6_LOCAL_ACTION_END_BM	= 11,
36cfb7
+	/* lookup last seg in table */
36cfb7
+	SEG6_LOCAL_ACTION_END_S		= 12,
36cfb7
+	/* forward to SR-unaware VNF with static proxy */
36cfb7
+	SEG6_LOCAL_ACTION_END_AS	= 13,
36cfb7
+	/* forward to SR-unaware VNF with masquerading */
36cfb7
+	SEG6_LOCAL_ACTION_END_AM	= 14,
36cfb7
+
36cfb7
+	__SEG6_LOCAL_ACTION_MAX,
36cfb7
+};
36cfb7
+
36cfb7
+#define SEG6_LOCAL_ACTION_MAX (__SEG6_LOCAL_ACTION_MAX - 1)
36cfb7
+
36cfb7
+#endif
36cfb7
diff --git a/include/linux/tc_act/tc_bpf.h b/include/linux/tc_act/tc_bpf.h
e138d9
index 975b50dc8d1d4..8dc2ac05eecf0 100644
36cfb7
--- a/include/linux/tc_act/tc_bpf.h
36cfb7
+++ b/include/linux/tc_act/tc_bpf.h
36cfb7
@@ -28,6 +28,7 @@ enum {
36cfb7
 	TCA_ACT_BPF_NAME,
36cfb7
 	TCA_ACT_BPF_PAD,
36cfb7
 	TCA_ACT_BPF_TAG,
36cfb7
+	TCA_ACT_BPF_ID,
36cfb7
 	__TCA_ACT_BPF_MAX,
36cfb7
 };
36cfb7
 #define TCA_ACT_BPF_MAX (__TCA_ACT_BPF_MAX - 1)
36cfb7
diff --git a/include/linux/tc_act/tc_tunnel_key.h b/include/linux/tc_act/tc_tunnel_key.h
e138d9
index 84ea55e1076b6..afcd4be953e27 100644
36cfb7
--- a/include/linux/tc_act/tc_tunnel_key.h
36cfb7
+++ b/include/linux/tc_act/tc_tunnel_key.h
36cfb7
@@ -34,6 +34,7 @@ enum {
36cfb7
 	TCA_TUNNEL_KEY_ENC_KEY_ID,	/* be64 */
36cfb7
 	TCA_TUNNEL_KEY_PAD,
36cfb7
 	TCA_TUNNEL_KEY_ENC_DST_PORT,	/* be16 */
36cfb7
+	TCA_TUNNEL_KEY_NO_CSUM,		/* u8 */
36cfb7
 	__TCA_TUNNEL_KEY_MAX,
36cfb7
 };
36cfb7
 
36cfb7
diff --git a/include/linux/tcp.h b/include/linux/tcp.h
e138d9
index d34fb5c5aa753..8edad3f942686 100644
36cfb7
--- a/include/linux/tcp.h
36cfb7
+++ b/include/linux/tcp.h
36cfb7
@@ -117,6 +117,8 @@ enum {
36cfb7
 #define TCP_SAVED_SYN		28	/* Get SYN headers recorded for connection */
36cfb7
 #define TCP_REPAIR_WINDOW	29	/* Get/set window parameters */
36cfb7
 #define TCP_FASTOPEN_CONNECT	30	/* Attempt FastOpen with connect */
36cfb7
+#define TCP_ULP			31	/* Attach a ULP to a TCP connection */
36cfb7
+#define TCP_MD5SIG_EXT		32	/* TCP MD5 Signature with extensions */
36cfb7
 
36cfb7
 struct tcp_repair_opt {
36cfb7
 	__u32	opt_code;
36cfb7
@@ -229,17 +231,38 @@ enum {
36cfb7
 	TCP_NLA_SNDBUF_LIMITED,	/* Time (usec) limited by send buffer */
36cfb7
 	TCP_NLA_DATA_SEGS_OUT,	/* Data pkts sent including retransmission */
36cfb7
 	TCP_NLA_TOTAL_RETRANS,	/* Data pkts retransmitted */
36cfb7
+	TCP_NLA_PACING_RATE,    /* Pacing rate in bytes per second */
36cfb7
+	TCP_NLA_DELIVERY_RATE,  /* Delivery rate in bytes per second */
36cfb7
+	TCP_NLA_SND_CWND,       /* Sending congestion window */
36cfb7
+	TCP_NLA_REORDERING,     /* Reordering metric */
36cfb7
+	TCP_NLA_MIN_RTT,        /* minimum RTT */
36cfb7
+	TCP_NLA_RECUR_RETRANS,  /* Recurring retransmits for the current pkt */
36cfb7
+	TCP_NLA_DELIVERY_RATE_APP_LMT, /* delivery rate application limited ? */
36cfb7
+
36cfb7
 };
36cfb7
 
36cfb7
 /* for TCP_MD5SIG socket option */
36cfb7
 #define TCP_MD5SIG_MAXKEYLEN	80
36cfb7
 
36cfb7
+/* tcp_md5sig extension flags for TCP_MD5SIG_EXT */
36cfb7
+#define TCP_MD5SIG_FLAG_PREFIX		1	/* address prefix length */
36cfb7
+
36cfb7
 struct tcp_md5sig {
36cfb7
 	struct __kernel_sockaddr_storage tcpm_addr;	/* address associated */
36cfb7
-	__u16	__tcpm_pad1;				/* zero */
36cfb7
+	__u8	tcpm_flags;				/* extension flags */
36cfb7
+	__u8	tcpm_prefixlen;				/* address prefix */
36cfb7
 	__u16	tcpm_keylen;				/* key length */
36cfb7
-	__u32	__tcpm_pad2;				/* zero */
36cfb7
+	__u32	__tcpm_pad;				/* zero */
36cfb7
 	__u8	tcpm_key[TCP_MD5SIG_MAXKEYLEN];		/* key (binary) */
36cfb7
 };
36cfb7
 
36cfb7
+/* INET_DIAG_MD5SIG */
36cfb7
+struct tcp_diag_md5sig {
36cfb7
+	__u8	tcpm_family;
36cfb7
+	__u8	tcpm_prefixlen;
36cfb7
+	__u16	tcpm_keylen;
36cfb7
+	__be32	tcpm_addr[4];
36cfb7
+	__u8	tcpm_key[TCP_MD5SIG_MAXKEYLEN];
36cfb7
+};
36cfb7
+
36cfb7
 #endif /* _LINUX_TCP_H */
36cfb7
diff --git a/include/linux/xfrm.h b/include/linux/xfrm.h
e138d9
index d2dd1fd65e77a..5790293b7fc46 100644
36cfb7
--- a/include/linux/xfrm.h
36cfb7
+++ b/include/linux/xfrm.h
36cfb7
@@ -303,6 +303,8 @@ enum xfrm_attr_type_t {
36cfb7
 	XFRMA_PROTO,		/* __u8 */
36cfb7
 	XFRMA_ADDRESS_FILTER,	/* struct xfrm_address_filter */
36cfb7
 	XFRMA_PAD,
36cfb7
+	XFRMA_OFFLOAD_DEV,	/* struct xfrm_state_offload */
36cfb7
+	XFRMA_OUTPUT_MARK,	/* __u32 */
36cfb7
 	__XFRMA_MAX
36cfb7
 
36cfb7
 #define XFRMA_MAX (__XFRMA_MAX - 1)
36cfb7
@@ -494,6 +496,13 @@ struct xfrm_address_filter {
36cfb7
 	__u8				dplen;
36cfb7
 };
36cfb7
 
36cfb7
+struct xfrm_user_offload {
36cfb7
+	int				ifindex;
36cfb7
+	__u8				flags;
36cfb7
+};
36cfb7
+#define XFRM_OFFLOAD_IPV6	1
36cfb7
+#define XFRM_OFFLOAD_INBOUND	2
36cfb7
+
36cfb7
 /* backwards compatibility for userspace */
36cfb7
 #define XFRMGRP_ACQUIRE		1
36cfb7
 #define XFRMGRP_EXPIRE		2
36cfb7
-- 
e138d9
2.21.0
36cfb7