naccyde / rpms / iproute

Forked from rpms/iproute 5 months ago
Clone

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

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