unix: add nftables_compat defines and types

Some types from nftables compatibility header are missing
in unix package and this change adds those missing types

Fixes golang/go#40898

Change-Id: I9a33aa4e4c6e1938fa40900ac74c1fc07ed00df2
GitHub-Last-Rev: 57a6fa7ca74fa5bae5c6356ec059a654f8aba875
GitHub-Pull-Request: golang/sys#80
Reviewed-on: https://go-review.googlesource.com/c/sys/+/249237
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
diff --git a/unix/linux/types.go b/unix/linux/types.go
index 8202d0c..1f9176b 100644
--- a/unix/linux/types.go
+++ b/unix/linux/types.go
@@ -105,6 +105,7 @@
 #include <linux/net_namespace.h>
 #include <linux/net_tstamp.h>
 #include <linux/netfilter/nf_tables.h>
+#include <linux/netfilter/nf_tables_compat.h>
 #include <linux/netfilter/nfnetlink.h>
 #include <linux/netfilter.h>
 #include <linux/netlink.h>
@@ -1742,6 +1743,24 @@
 	NFT_NG_RANDOM                     = C.NFT_NG_RANDOM
 )
 
+// netfilter nf_tables_compat
+// generated using:
+// perl -nlE '/^\s*(NFT\w+)/ && say "$1 = C.$1"' /usr/include/linux/netfilter/nf_tables_compat.h
+const (
+	NFTA_TARGET_UNSPEC = C.NFTA_TARGET_UNSPEC
+	NFTA_TARGET_NAME   = C.NFTA_TARGET_NAME
+	NFTA_TARGET_REV    = C.NFTA_TARGET_REV
+	NFTA_TARGET_INFO   = C.NFTA_TARGET_INFO
+	NFTA_MATCH_UNSPEC  = C.NFTA_MATCH_UNSPEC
+	NFTA_MATCH_NAME    = C.NFTA_MATCH_NAME
+	NFTA_MATCH_REV     = C.NFTA_MATCH_REV
+	NFTA_MATCH_INFO    = C.NFTA_MATCH_INFO
+	NFTA_COMPAT_UNSPEC = C.NFTA_COMPAT_UNSPEC
+	NFTA_COMPAT_NAME   = C.NFTA_COMPAT_NAME
+	NFTA_COMPAT_REV    = C.NFTA_COMPAT_REV
+	NFTA_COMPAT_TYPE   = C.NFTA_COMPAT_TYPE
+)
+
 type RTCTime C.struct_rtc_time
 
 type RTCWkAlrm C.struct_rtc_wkalrm
diff --git a/unix/ztypes_linux.go b/unix/ztypes_linux.go
index 256d3e6..953166c 100644
--- a/unix/ztypes_linux.go
+++ b/unix/ztypes_linux.go
@@ -1752,6 +1752,21 @@
 	NFT_NG_RANDOM                     = 0x1
 )
 
+const (
+	NFTA_TARGET_UNSPEC = 0x0
+	NFTA_TARGET_NAME   = 0x1
+	NFTA_TARGET_REV    = 0x2
+	NFTA_TARGET_INFO   = 0x3
+	NFTA_MATCH_UNSPEC  = 0x0
+	NFTA_MATCH_NAME    = 0x1
+	NFTA_MATCH_REV     = 0x2
+	NFTA_MATCH_INFO    = 0x3
+	NFTA_COMPAT_UNSPEC = 0x0
+	NFTA_COMPAT_NAME   = 0x1
+	NFTA_COMPAT_REV    = 0x2
+	NFTA_COMPAT_TYPE   = 0x3
+)
+
 type RTCTime struct {
 	Sec   int32
 	Min   int32