unix: add Linux lwtunnel constants for use with rtnetlink APIs

Change-Id: Ibe39b315321c18916870dcfc97b083a18b91be2b
Reviewed-on: https://go-review.googlesource.com/c/sys/+/271077
Run-TryBot: Matt Layher <mdlayher@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Matt Layher <mdlayher@gmail.com>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
diff --git a/unix/linux/types.go b/unix/linux/types.go
index f80776a..84c7c0d 100644
--- a/unix/linux/types.go
+++ b/unix/linux/types.go
@@ -102,6 +102,7 @@
 #include <linux/if_xdp.h>
 #include <linux/keyctl.h>
 #include <linux/loop.h>
+#include <linux/lwtunnel.h>
 #include <linux/ncsi.h>
 #include <linux/net_namespace.h>
 #include <linux/net_tstamp.h>
@@ -2921,3 +2922,18 @@
 	PPS_GETCAP    = C.PPS_GETCAP
 	PPS_FETCH     = C.PPS_FETCH
 )
+
+// lwtunnel APIs
+
+const (
+	LWTUNNEL_ENCAP_NONE       = C.LWTUNNEL_ENCAP_NONE
+	LWTUNNEL_ENCAP_MPLS       = C.LWTUNNEL_ENCAP_MPLS
+	LWTUNNEL_ENCAP_IP         = C.LWTUNNEL_ENCAP_IP
+	LWTUNNEL_ENCAP_ILA        = C.LWTUNNEL_ENCAP_ILA
+	LWTUNNEL_ENCAP_IP6        = C.LWTUNNEL_ENCAP_IP6
+	LWTUNNEL_ENCAP_SEG6       = C.LWTUNNEL_ENCAP_SEG6
+	LWTUNNEL_ENCAP_BPF        = C.LWTUNNEL_ENCAP_BPF
+	LWTUNNEL_ENCAP_SEG6_LOCAL = C.LWTUNNEL_ENCAP_SEG6_LOCAL
+	LWTUNNEL_ENCAP_RPL        = C.LWTUNNEL_ENCAP_RPL
+	LWTUNNEL_ENCAP_MAX        = C.LWTUNNEL_ENCAP_MAX
+)
diff --git a/unix/mkerrors.sh b/unix/mkerrors.sh
index 0c9a5c4..c0f9f2d 100755
--- a/unix/mkerrors.sh
+++ b/unix/mkerrors.sh
@@ -225,6 +225,7 @@
 #include <linux/kexec.h>
 #include <linux/keyctl.h>
 #include <linux/loop.h>
+#include <linux/lwtunnel.h>
 #include <linux/magic.h>
 #include <linux/memfd.h>
 #include <linux/module.h>
@@ -561,6 +562,7 @@
 		$2 ~ /^CRYPTO_/ ||
 		$2 ~ /^TIPC_/ ||
 		$2 ~ /^DEVLINK_/ ||
+		$2 ~ /^LWTUNNEL_IP/ ||
 		$2 !~ "WMESGLEN" &&
 		$2 ~ /^W[A-Z0-9]+$/ ||
 		$2 ~/^PPPIOC/ ||
diff --git a/unix/zerrors_linux.go b/unix/zerrors_linux.go
index 2069fb8..b461103 100644
--- a/unix/zerrors_linux.go
+++ b/unix/zerrors_linux.go
@@ -1217,6 +1217,12 @@
 	LOOP_SET_STATUS_SETTABLE_FLAGS              = 0xc
 	LO_KEY_SIZE                                 = 0x20
 	LO_NAME_SIZE                                = 0x40
+	LWTUNNEL_IP6_MAX                            = 0x8
+	LWTUNNEL_IP_MAX                             = 0x8
+	LWTUNNEL_IP_OPTS_MAX                        = 0x3
+	LWTUNNEL_IP_OPT_ERSPAN_MAX                  = 0x4
+	LWTUNNEL_IP_OPT_GENEVE_MAX                  = 0x3
+	LWTUNNEL_IP_OPT_VXLAN_MAX                   = 0x1
 	MADV_COLD                                   = 0x14
 	MADV_DODUMP                                 = 0x11
 	MADV_DOFORK                                 = 0xb
diff --git a/unix/ztypes_linux.go b/unix/ztypes_linux.go
index a96ad4c..22e67b2 100644
--- a/unix/ztypes_linux.go
+++ b/unix/ztypes_linux.go
@@ -2981,3 +2981,16 @@
 	Nsec  int32
 	Flags uint32
 }
+
+const (
+	LWTUNNEL_ENCAP_NONE       = 0x0
+	LWTUNNEL_ENCAP_MPLS       = 0x1
+	LWTUNNEL_ENCAP_IP         = 0x2
+	LWTUNNEL_ENCAP_ILA        = 0x3
+	LWTUNNEL_ENCAP_IP6        = 0x4
+	LWTUNNEL_ENCAP_SEG6       = 0x5
+	LWTUNNEL_ENCAP_BPF        = 0x6
+	LWTUNNEL_ENCAP_SEG6_LOCAL = 0x7
+	LWTUNNEL_ENCAP_RPL        = 0x8
+	LWTUNNEL_ENCAP_MAX        = 0x8
+)