unix: implement Linux AF_XDP sockets

Provides access to the Linux AF_XDP socket family.  For more
information on AF_XDP, see:
https://www.kernel.org/doc/html/latest/networking/af_xdp.html.

Change-Id: I7efb82c4a67da3e15932e3c0d882f0bad7ba16ef
Reviewed-on: https://go-review.googlesource.com/136695
Run-TryBot: Matt Layher <mdlayher@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 04997d1..bc534f3 100644
--- a/unix/linux/types.go
+++ b/unix/linux/types.go
@@ -75,6 +75,7 @@
 #include <linux/rtc.h>
 #include <linux/blkpg.h>
 #include <linux/net_namespace.h>
+#include <linux/if_xdp.h>
 
 // abi/abi.h generated by mkall.go.
 #include "abi/abi.h"
@@ -427,6 +428,8 @@
 
 type RawSockaddrVM C.struct_sockaddr_vm
 
+type RawSockaddrXDP C.struct_sockaddr_xdp
+
 type RawSockaddr C.struct_sockaddr
 
 type RawSockaddrAny C.struct_sockaddr_any
@@ -474,6 +477,7 @@
 	SizeofSockaddrCAN       = C.sizeof_struct_sockaddr_can
 	SizeofSockaddrALG       = C.sizeof_struct_sockaddr_alg
 	SizeofSockaddrVM        = C.sizeof_struct_sockaddr_vm
+	SizeofSockaddrXDP       = C.sizeof_struct_sockaddr_xdp
 	SizeofLinger            = C.sizeof_struct_linger
 	SizeofIovec             = C.sizeof_struct_iovec
 	SizeofIPMreq            = C.sizeof_struct_ip_mreq
@@ -1565,3 +1569,15 @@
 	NETNSA_PID  = C.NETNSA_PID
 	NETNSA_FD   = C.NETNSA_FD
 )
+
+// AF_XDP:
+
+type XDPRingOffset C.struct_xdp_ring_offset
+
+type XDPMmapOffsets C.struct_xdp_mmap_offsets
+
+type XDPUmemReg C.struct_xdp_umem_reg
+
+type XDPStatistics C.struct_xdp_statistics
+
+type XDPDesc C.struct_xdp_desc
diff --git a/unix/mkerrors.sh b/unix/mkerrors.sh
index c8449cf..6f4467f 100755
--- a/unix/mkerrors.sh
+++ b/unix/mkerrors.sh
@@ -216,6 +216,7 @@
 #include <linux/watchdog.h>
 #include <linux/hdreg.h>
 #include <linux/rtc.h>
+#include <linux/if_xdp.h>
 #include <mtd/ubi-user.h>
 #include <net/route.h>
 #include <asm/termbits.h>
@@ -246,6 +247,16 @@
 #define FS_KEY_DESC_PREFIX              "fscrypt:"
 #define FS_KEY_DESC_PREFIX_SIZE         8
 #define FS_MAX_KEY_SIZE                 64
+
+// XDP socket constants do not appear to be picked up otherwise.
+// Copied from samples/bpf/xdpsock_user.c.
+#ifndef SOL_XDP
+#define SOL_XDP 283
+#endif
+
+#ifndef AF_XDP
+#define AF_XDP 44
+#endif
 '
 
 includes_NetBSD='
@@ -476,6 +487,7 @@
 		$2 ~ /^FSOPT_/ ||
 		$2 ~ /^WDIOC_/ ||
 		$2 ~ /^NFN/ ||
+		$2 ~ /^XDP_/ ||
 		$2 ~ /^(HDIO|WIN|SMART)_/ ||
 		$2 !~ "WMESGLEN" &&
 		$2 ~ /^W[A-Z0-9]+$/ ||
diff --git a/unix/syscall_linux.go b/unix/syscall_linux.go
index e193fd3..6c92962 100644
--- a/unix/syscall_linux.go
+++ b/unix/syscall_linux.go
@@ -692,6 +692,24 @@
 	return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil
 }
 
+type SockaddrXDP struct {
+	Flags        uint16
+	Ifindex      uint32
+	QueueID      uint32
+	SharedUmemFD uint32
+	raw          RawSockaddrXDP
+}
+
+func (sa *SockaddrXDP) sockaddr() (unsafe.Pointer, _Socklen, error) {
+	sa.raw.Family = AF_XDP
+	sa.raw.Flags = sa.Flags
+	sa.raw.Ifindex = sa.Ifindex
+	sa.raw.Queue_id = sa.QueueID
+	sa.raw.Shared_umem_fd = sa.SharedUmemFD
+
+	return unsafe.Pointer(&sa.raw), SizeofSockaddrXDP, nil
+}
+
 func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
 	switch rsa.Addr.Family {
 	case AF_NETLINK:
@@ -793,6 +811,15 @@
 			}
 			return sa, nil
 		}
+	case AF_XDP:
+		pp := (*RawSockaddrXDP)(unsafe.Pointer(rsa))
+		sa := &SockaddrXDP{
+			Flags:        pp.Flags,
+			Ifindex:      pp.Ifindex,
+			QueueID:      pp.Queue_id,
+			SharedUmemFD: pp.Shared_umem_fd,
+		}
+		return sa, nil
 	}
 	return nil, EAFNOSUPPORT
 }
diff --git a/unix/zerrors_linux_386.go b/unix/zerrors_linux_386.go
index 3800ff3..fe56416 100644
--- a/unix/zerrors_linux_386.go
+++ b/unix/zerrors_linux_386.go
@@ -64,6 +64,7 @@
 	AF_VSOCK                             = 0x28
 	AF_WANPIPE                           = 0x19
 	AF_X25                               = 0x9
+	AF_XDP                               = 0x2c
 	ALG_OP_DECRYPT                       = 0x0
 	ALG_OP_ENCRYPT                       = 0x1
 	ALG_SET_AEAD_ASSOCLEN                = 0x4
@@ -1811,6 +1812,7 @@
 	SOL_TIPC                             = 0x10f
 	SOL_TLS                              = 0x11a
 	SOL_X25                              = 0x106
+	SOL_XDP                              = 0x11b
 	SOMAXCONN                            = 0x80
 	SO_ACCEPTCONN                        = 0x1e
 	SO_ATTACH_BPF                        = 0x32
@@ -2293,6 +2295,26 @@
 	XATTR_CREATE                         = 0x1
 	XATTR_REPLACE                        = 0x2
 	XCASE                                = 0x4
+	XDP_COPY                             = 0x2
+	XDP_FLAGS_DRV_MODE                   = 0x4
+	XDP_FLAGS_HW_MODE                    = 0x8
+	XDP_FLAGS_MASK                       = 0xf
+	XDP_FLAGS_MODES                      = 0xe
+	XDP_FLAGS_SKB_MODE                   = 0x2
+	XDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1
+	XDP_MMAP_OFFSETS                     = 0x1
+	XDP_PGOFF_RX_RING                    = 0x0
+	XDP_PGOFF_TX_RING                    = 0x80000000
+	XDP_RX_RING                          = 0x2
+	XDP_SHARED_UMEM                      = 0x1
+	XDP_STATISTICS                       = 0x7
+	XDP_TX_RING                          = 0x3
+	XDP_UMEM_COMPLETION_RING             = 0x6
+	XDP_UMEM_FILL_RING                   = 0x5
+	XDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000
+	XDP_UMEM_PGOFF_FILL_RING             = 0x100000000
+	XDP_UMEM_REG                         = 0x4
+	XDP_ZEROCOPY                         = 0x4
 	XENFS_SUPER_MAGIC                    = 0xabba1974
 	XTABS                                = 0x1800
 	ZSMALLOC_MAGIC                       = 0x58295829
diff --git a/unix/zerrors_linux_amd64.go b/unix/zerrors_linux_amd64.go
index 9c204cf..dcfa667 100644
--- a/unix/zerrors_linux_amd64.go
+++ b/unix/zerrors_linux_amd64.go
@@ -64,6 +64,7 @@
 	AF_VSOCK                             = 0x28
 	AF_WANPIPE                           = 0x19
 	AF_X25                               = 0x9
+	AF_XDP                               = 0x2c
 	ALG_OP_DECRYPT                       = 0x0
 	ALG_OP_ENCRYPT                       = 0x1
 	ALG_SET_AEAD_ASSOCLEN                = 0x4
@@ -1812,6 +1813,7 @@
 	SOL_TIPC                             = 0x10f
 	SOL_TLS                              = 0x11a
 	SOL_X25                              = 0x106
+	SOL_XDP                              = 0x11b
 	SOMAXCONN                            = 0x80
 	SO_ACCEPTCONN                        = 0x1e
 	SO_ATTACH_BPF                        = 0x32
@@ -2293,6 +2295,26 @@
 	XATTR_CREATE                         = 0x1
 	XATTR_REPLACE                        = 0x2
 	XCASE                                = 0x4
+	XDP_COPY                             = 0x2
+	XDP_FLAGS_DRV_MODE                   = 0x4
+	XDP_FLAGS_HW_MODE                    = 0x8
+	XDP_FLAGS_MASK                       = 0xf
+	XDP_FLAGS_MODES                      = 0xe
+	XDP_FLAGS_SKB_MODE                   = 0x2
+	XDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1
+	XDP_MMAP_OFFSETS                     = 0x1
+	XDP_PGOFF_RX_RING                    = 0x0
+	XDP_PGOFF_TX_RING                    = 0x80000000
+	XDP_RX_RING                          = 0x2
+	XDP_SHARED_UMEM                      = 0x1
+	XDP_STATISTICS                       = 0x7
+	XDP_TX_RING                          = 0x3
+	XDP_UMEM_COMPLETION_RING             = 0x6
+	XDP_UMEM_FILL_RING                   = 0x5
+	XDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000
+	XDP_UMEM_PGOFF_FILL_RING             = 0x100000000
+	XDP_UMEM_REG                         = 0x4
+	XDP_ZEROCOPY                         = 0x4
 	XENFS_SUPER_MAGIC                    = 0xabba1974
 	XTABS                                = 0x1800
 	ZSMALLOC_MAGIC                       = 0x58295829
diff --git a/unix/zerrors_linux_arm.go b/unix/zerrors_linux_arm.go
index 03e2b34..c2ef50c 100644
--- a/unix/zerrors_linux_arm.go
+++ b/unix/zerrors_linux_arm.go
@@ -64,6 +64,7 @@
 	AF_VSOCK                             = 0x28
 	AF_WANPIPE                           = 0x19
 	AF_X25                               = 0x9
+	AF_XDP                               = 0x2c
 	ALG_OP_DECRYPT                       = 0x0
 	ALG_OP_ENCRYPT                       = 0x1
 	ALG_SET_AEAD_ASSOCLEN                = 0x4
@@ -1818,6 +1819,7 @@
 	SOL_TIPC                             = 0x10f
 	SOL_TLS                              = 0x11a
 	SOL_X25                              = 0x106
+	SOL_XDP                              = 0x11b
 	SOMAXCONN                            = 0x80
 	SO_ACCEPTCONN                        = 0x1e
 	SO_ATTACH_BPF                        = 0x32
@@ -2299,6 +2301,26 @@
 	XATTR_CREATE                         = 0x1
 	XATTR_REPLACE                        = 0x2
 	XCASE                                = 0x4
+	XDP_COPY                             = 0x2
+	XDP_FLAGS_DRV_MODE                   = 0x4
+	XDP_FLAGS_HW_MODE                    = 0x8
+	XDP_FLAGS_MASK                       = 0xf
+	XDP_FLAGS_MODES                      = 0xe
+	XDP_FLAGS_SKB_MODE                   = 0x2
+	XDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1
+	XDP_MMAP_OFFSETS                     = 0x1
+	XDP_PGOFF_RX_RING                    = 0x0
+	XDP_PGOFF_TX_RING                    = 0x80000000
+	XDP_RX_RING                          = 0x2
+	XDP_SHARED_UMEM                      = 0x1
+	XDP_STATISTICS                       = 0x7
+	XDP_TX_RING                          = 0x3
+	XDP_UMEM_COMPLETION_RING             = 0x6
+	XDP_UMEM_FILL_RING                   = 0x5
+	XDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000
+	XDP_UMEM_PGOFF_FILL_RING             = 0x100000000
+	XDP_UMEM_REG                         = 0x4
+	XDP_ZEROCOPY                         = 0x4
 	XENFS_SUPER_MAGIC                    = 0xabba1974
 	XTABS                                = 0x1800
 	ZSMALLOC_MAGIC                       = 0x58295829
diff --git a/unix/zerrors_linux_arm64.go b/unix/zerrors_linux_arm64.go
index bc9a8bb..1a820d6 100644
--- a/unix/zerrors_linux_arm64.go
+++ b/unix/zerrors_linux_arm64.go
@@ -64,6 +64,7 @@
 	AF_VSOCK                             = 0x28
 	AF_WANPIPE                           = 0x19
 	AF_X25                               = 0x9
+	AF_XDP                               = 0x2c
 	ALG_OP_DECRYPT                       = 0x0
 	ALG_OP_ENCRYPT                       = 0x1
 	ALG_SET_AEAD_ASSOCLEN                = 0x4
@@ -1802,6 +1803,7 @@
 	SOL_TIPC                             = 0x10f
 	SOL_TLS                              = 0x11a
 	SOL_X25                              = 0x106
+	SOL_XDP                              = 0x11b
 	SOMAXCONN                            = 0x80
 	SO_ACCEPTCONN                        = 0x1e
 	SO_ATTACH_BPF                        = 0x32
@@ -2284,6 +2286,26 @@
 	XATTR_CREATE                         = 0x1
 	XATTR_REPLACE                        = 0x2
 	XCASE                                = 0x4
+	XDP_COPY                             = 0x2
+	XDP_FLAGS_DRV_MODE                   = 0x4
+	XDP_FLAGS_HW_MODE                    = 0x8
+	XDP_FLAGS_MASK                       = 0xf
+	XDP_FLAGS_MODES                      = 0xe
+	XDP_FLAGS_SKB_MODE                   = 0x2
+	XDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1
+	XDP_MMAP_OFFSETS                     = 0x1
+	XDP_PGOFF_RX_RING                    = 0x0
+	XDP_PGOFF_TX_RING                    = 0x80000000
+	XDP_RX_RING                          = 0x2
+	XDP_SHARED_UMEM                      = 0x1
+	XDP_STATISTICS                       = 0x7
+	XDP_TX_RING                          = 0x3
+	XDP_UMEM_COMPLETION_RING             = 0x6
+	XDP_UMEM_FILL_RING                   = 0x5
+	XDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000
+	XDP_UMEM_PGOFF_FILL_RING             = 0x100000000
+	XDP_UMEM_REG                         = 0x4
+	XDP_ZEROCOPY                         = 0x4
 	XENFS_SUPER_MAGIC                    = 0xabba1974
 	XTABS                                = 0x1800
 	ZSMALLOC_MAGIC                       = 0x58295829
diff --git a/unix/zerrors_linux_mips.go b/unix/zerrors_linux_mips.go
index 2309829..b515b2a 100644
--- a/unix/zerrors_linux_mips.go
+++ b/unix/zerrors_linux_mips.go
@@ -64,6 +64,7 @@
 	AF_VSOCK                             = 0x28
 	AF_WANPIPE                           = 0x19
 	AF_X25                               = 0x9
+	AF_XDP                               = 0x2c
 	ALG_OP_DECRYPT                       = 0x0
 	ALG_OP_ENCRYPT                       = 0x1
 	ALG_SET_AEAD_ASSOCLEN                = 0x4
@@ -1811,6 +1812,7 @@
 	SOL_TIPC                             = 0x10f
 	SOL_TLS                              = 0x11a
 	SOL_X25                              = 0x106
+	SOL_XDP                              = 0x11b
 	SOMAXCONN                            = 0x80
 	SO_ACCEPTCONN                        = 0x1009
 	SO_ATTACH_BPF                        = 0x32
@@ -2295,6 +2297,26 @@
 	XATTR_CREATE                         = 0x1
 	XATTR_REPLACE                        = 0x2
 	XCASE                                = 0x4
+	XDP_COPY                             = 0x2
+	XDP_FLAGS_DRV_MODE                   = 0x4
+	XDP_FLAGS_HW_MODE                    = 0x8
+	XDP_FLAGS_MASK                       = 0xf
+	XDP_FLAGS_MODES                      = 0xe
+	XDP_FLAGS_SKB_MODE                   = 0x2
+	XDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1
+	XDP_MMAP_OFFSETS                     = 0x1
+	XDP_PGOFF_RX_RING                    = 0x0
+	XDP_PGOFF_TX_RING                    = 0x80000000
+	XDP_RX_RING                          = 0x2
+	XDP_SHARED_UMEM                      = 0x1
+	XDP_STATISTICS                       = 0x7
+	XDP_TX_RING                          = 0x3
+	XDP_UMEM_COMPLETION_RING             = 0x6
+	XDP_UMEM_FILL_RING                   = 0x5
+	XDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000
+	XDP_UMEM_PGOFF_FILL_RING             = 0x100000000
+	XDP_UMEM_REG                         = 0x4
+	XDP_ZEROCOPY                         = 0x4
 	XENFS_SUPER_MAGIC                    = 0xabba1974
 	XTABS                                = 0x1800
 	ZSMALLOC_MAGIC                       = 0x58295829
diff --git a/unix/zerrors_linux_mips64.go b/unix/zerrors_linux_mips64.go
index 0660b02..29a88f0 100644
--- a/unix/zerrors_linux_mips64.go
+++ b/unix/zerrors_linux_mips64.go
@@ -64,6 +64,7 @@
 	AF_VSOCK                             = 0x28
 	AF_WANPIPE                           = 0x19
 	AF_X25                               = 0x9
+	AF_XDP                               = 0x2c
 	ALG_OP_DECRYPT                       = 0x0
 	ALG_OP_ENCRYPT                       = 0x1
 	ALG_SET_AEAD_ASSOCLEN                = 0x4
@@ -1811,6 +1812,7 @@
 	SOL_TIPC                             = 0x10f
 	SOL_TLS                              = 0x11a
 	SOL_X25                              = 0x106
+	SOL_XDP                              = 0x11b
 	SOMAXCONN                            = 0x80
 	SO_ACCEPTCONN                        = 0x1009
 	SO_ATTACH_BPF                        = 0x32
@@ -2295,6 +2297,26 @@
 	XATTR_CREATE                         = 0x1
 	XATTR_REPLACE                        = 0x2
 	XCASE                                = 0x4
+	XDP_COPY                             = 0x2
+	XDP_FLAGS_DRV_MODE                   = 0x4
+	XDP_FLAGS_HW_MODE                    = 0x8
+	XDP_FLAGS_MASK                       = 0xf
+	XDP_FLAGS_MODES                      = 0xe
+	XDP_FLAGS_SKB_MODE                   = 0x2
+	XDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1
+	XDP_MMAP_OFFSETS                     = 0x1
+	XDP_PGOFF_RX_RING                    = 0x0
+	XDP_PGOFF_TX_RING                    = 0x80000000
+	XDP_RX_RING                          = 0x2
+	XDP_SHARED_UMEM                      = 0x1
+	XDP_STATISTICS                       = 0x7
+	XDP_TX_RING                          = 0x3
+	XDP_UMEM_COMPLETION_RING             = 0x6
+	XDP_UMEM_FILL_RING                   = 0x5
+	XDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000
+	XDP_UMEM_PGOFF_FILL_RING             = 0x100000000
+	XDP_UMEM_REG                         = 0x4
+	XDP_ZEROCOPY                         = 0x4
 	XENFS_SUPER_MAGIC                    = 0xabba1974
 	XTABS                                = 0x1800
 	ZSMALLOC_MAGIC                       = 0x58295829
diff --git a/unix/zerrors_linux_mips64le.go b/unix/zerrors_linux_mips64le.go
index 2761f2a..0767ac1 100644
--- a/unix/zerrors_linux_mips64le.go
+++ b/unix/zerrors_linux_mips64le.go
@@ -64,6 +64,7 @@
 	AF_VSOCK                             = 0x28
 	AF_WANPIPE                           = 0x19
 	AF_X25                               = 0x9
+	AF_XDP                               = 0x2c
 	ALG_OP_DECRYPT                       = 0x0
 	ALG_OP_ENCRYPT                       = 0x1
 	ALG_SET_AEAD_ASSOCLEN                = 0x4
@@ -1811,6 +1812,7 @@
 	SOL_TIPC                             = 0x10f
 	SOL_TLS                              = 0x11a
 	SOL_X25                              = 0x106
+	SOL_XDP                              = 0x11b
 	SOMAXCONN                            = 0x80
 	SO_ACCEPTCONN                        = 0x1009
 	SO_ATTACH_BPF                        = 0x32
@@ -2295,6 +2297,26 @@
 	XATTR_CREATE                         = 0x1
 	XATTR_REPLACE                        = 0x2
 	XCASE                                = 0x4
+	XDP_COPY                             = 0x2
+	XDP_FLAGS_DRV_MODE                   = 0x4
+	XDP_FLAGS_HW_MODE                    = 0x8
+	XDP_FLAGS_MASK                       = 0xf
+	XDP_FLAGS_MODES                      = 0xe
+	XDP_FLAGS_SKB_MODE                   = 0x2
+	XDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1
+	XDP_MMAP_OFFSETS                     = 0x1
+	XDP_PGOFF_RX_RING                    = 0x0
+	XDP_PGOFF_TX_RING                    = 0x80000000
+	XDP_RX_RING                          = 0x2
+	XDP_SHARED_UMEM                      = 0x1
+	XDP_STATISTICS                       = 0x7
+	XDP_TX_RING                          = 0x3
+	XDP_UMEM_COMPLETION_RING             = 0x6
+	XDP_UMEM_FILL_RING                   = 0x5
+	XDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000
+	XDP_UMEM_PGOFF_FILL_RING             = 0x100000000
+	XDP_UMEM_REG                         = 0x4
+	XDP_ZEROCOPY                         = 0x4
 	XENFS_SUPER_MAGIC                    = 0xabba1974
 	XTABS                                = 0x1800
 	ZSMALLOC_MAGIC                       = 0x58295829
diff --git a/unix/zerrors_linux_mipsle.go b/unix/zerrors_linux_mipsle.go
index 127bf06..269b813 100644
--- a/unix/zerrors_linux_mipsle.go
+++ b/unix/zerrors_linux_mipsle.go
@@ -64,6 +64,7 @@
 	AF_VSOCK                             = 0x28
 	AF_WANPIPE                           = 0x19
 	AF_X25                               = 0x9
+	AF_XDP                               = 0x2c
 	ALG_OP_DECRYPT                       = 0x0
 	ALG_OP_ENCRYPT                       = 0x1
 	ALG_SET_AEAD_ASSOCLEN                = 0x4
@@ -1811,6 +1812,7 @@
 	SOL_TIPC                             = 0x10f
 	SOL_TLS                              = 0x11a
 	SOL_X25                              = 0x106
+	SOL_XDP                              = 0x11b
 	SOMAXCONN                            = 0x80
 	SO_ACCEPTCONN                        = 0x1009
 	SO_ATTACH_BPF                        = 0x32
@@ -2295,6 +2297,26 @@
 	XATTR_CREATE                         = 0x1
 	XATTR_REPLACE                        = 0x2
 	XCASE                                = 0x4
+	XDP_COPY                             = 0x2
+	XDP_FLAGS_DRV_MODE                   = 0x4
+	XDP_FLAGS_HW_MODE                    = 0x8
+	XDP_FLAGS_MASK                       = 0xf
+	XDP_FLAGS_MODES                      = 0xe
+	XDP_FLAGS_SKB_MODE                   = 0x2
+	XDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1
+	XDP_MMAP_OFFSETS                     = 0x1
+	XDP_PGOFF_RX_RING                    = 0x0
+	XDP_PGOFF_TX_RING                    = 0x80000000
+	XDP_RX_RING                          = 0x2
+	XDP_SHARED_UMEM                      = 0x1
+	XDP_STATISTICS                       = 0x7
+	XDP_TX_RING                          = 0x3
+	XDP_UMEM_COMPLETION_RING             = 0x6
+	XDP_UMEM_FILL_RING                   = 0x5
+	XDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000
+	XDP_UMEM_PGOFF_FILL_RING             = 0x100000000
+	XDP_UMEM_REG                         = 0x4
+	XDP_ZEROCOPY                         = 0x4
 	XENFS_SUPER_MAGIC                    = 0xabba1974
 	XTABS                                = 0x1800
 	ZSMALLOC_MAGIC                       = 0x58295829
diff --git a/unix/zerrors_linux_ppc64.go b/unix/zerrors_linux_ppc64.go
index d972fd8..eb52e96 100644
--- a/unix/zerrors_linux_ppc64.go
+++ b/unix/zerrors_linux_ppc64.go
@@ -64,6 +64,7 @@
 	AF_VSOCK                             = 0x28
 	AF_WANPIPE                           = 0x19
 	AF_X25                               = 0x9
+	AF_XDP                               = 0x2c
 	ALG_OP_DECRYPT                       = 0x0
 	ALG_OP_ENCRYPT                       = 0x1
 	ALG_SET_AEAD_ASSOCLEN                = 0x4
@@ -1867,6 +1868,7 @@
 	SOL_TIPC                             = 0x10f
 	SOL_TLS                              = 0x11a
 	SOL_X25                              = 0x106
+	SOL_XDP                              = 0x11b
 	SOMAXCONN                            = 0x80
 	SO_ACCEPTCONN                        = 0x1e
 	SO_ATTACH_BPF                        = 0x32
@@ -2352,6 +2354,26 @@
 	XATTR_CREATE                         = 0x1
 	XATTR_REPLACE                        = 0x2
 	XCASE                                = 0x4000
+	XDP_COPY                             = 0x2
+	XDP_FLAGS_DRV_MODE                   = 0x4
+	XDP_FLAGS_HW_MODE                    = 0x8
+	XDP_FLAGS_MASK                       = 0xf
+	XDP_FLAGS_MODES                      = 0xe
+	XDP_FLAGS_SKB_MODE                   = 0x2
+	XDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1
+	XDP_MMAP_OFFSETS                     = 0x1
+	XDP_PGOFF_RX_RING                    = 0x0
+	XDP_PGOFF_TX_RING                    = 0x80000000
+	XDP_RX_RING                          = 0x2
+	XDP_SHARED_UMEM                      = 0x1
+	XDP_STATISTICS                       = 0x7
+	XDP_TX_RING                          = 0x3
+	XDP_UMEM_COMPLETION_RING             = 0x6
+	XDP_UMEM_FILL_RING                   = 0x5
+	XDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000
+	XDP_UMEM_PGOFF_FILL_RING             = 0x100000000
+	XDP_UMEM_REG                         = 0x4
+	XDP_ZEROCOPY                         = 0x4
 	XENFS_SUPER_MAGIC                    = 0xabba1974
 	XTABS                                = 0xc00
 	ZSMALLOC_MAGIC                       = 0x58295829
diff --git a/unix/zerrors_linux_ppc64le.go b/unix/zerrors_linux_ppc64le.go
index b6e169a..0563d34 100644
--- a/unix/zerrors_linux_ppc64le.go
+++ b/unix/zerrors_linux_ppc64le.go
@@ -64,6 +64,7 @@
 	AF_VSOCK                             = 0x28
 	AF_WANPIPE                           = 0x19
 	AF_X25                               = 0x9
+	AF_XDP                               = 0x2c
 	ALG_OP_DECRYPT                       = 0x0
 	ALG_OP_ENCRYPT                       = 0x1
 	ALG_SET_AEAD_ASSOCLEN                = 0x4
@@ -1867,6 +1868,7 @@
 	SOL_TIPC                             = 0x10f
 	SOL_TLS                              = 0x11a
 	SOL_X25                              = 0x106
+	SOL_XDP                              = 0x11b
 	SOMAXCONN                            = 0x80
 	SO_ACCEPTCONN                        = 0x1e
 	SO_ATTACH_BPF                        = 0x32
@@ -2352,6 +2354,26 @@
 	XATTR_CREATE                         = 0x1
 	XATTR_REPLACE                        = 0x2
 	XCASE                                = 0x4000
+	XDP_COPY                             = 0x2
+	XDP_FLAGS_DRV_MODE                   = 0x4
+	XDP_FLAGS_HW_MODE                    = 0x8
+	XDP_FLAGS_MASK                       = 0xf
+	XDP_FLAGS_MODES                      = 0xe
+	XDP_FLAGS_SKB_MODE                   = 0x2
+	XDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1
+	XDP_MMAP_OFFSETS                     = 0x1
+	XDP_PGOFF_RX_RING                    = 0x0
+	XDP_PGOFF_TX_RING                    = 0x80000000
+	XDP_RX_RING                          = 0x2
+	XDP_SHARED_UMEM                      = 0x1
+	XDP_STATISTICS                       = 0x7
+	XDP_TX_RING                          = 0x3
+	XDP_UMEM_COMPLETION_RING             = 0x6
+	XDP_UMEM_FILL_RING                   = 0x5
+	XDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000
+	XDP_UMEM_PGOFF_FILL_RING             = 0x100000000
+	XDP_UMEM_REG                         = 0x4
+	XDP_ZEROCOPY                         = 0x4
 	XENFS_SUPER_MAGIC                    = 0xabba1974
 	XTABS                                = 0xc00
 	ZSMALLOC_MAGIC                       = 0x58295829
diff --git a/unix/zerrors_linux_riscv64.go b/unix/zerrors_linux_riscv64.go
index de94141..e95e3f6 100644
--- a/unix/zerrors_linux_riscv64.go
+++ b/unix/zerrors_linux_riscv64.go
@@ -64,6 +64,7 @@
 	AF_VSOCK                             = 0x28
 	AF_WANPIPE                           = 0x19
 	AF_X25                               = 0x9
+	AF_XDP                               = 0x2c
 	ALG_OP_DECRYPT                       = 0x0
 	ALG_OP_ENCRYPT                       = 0x1
 	ALG_SET_AEAD_ASSOCLEN                = 0x4
@@ -1799,6 +1800,7 @@
 	SOL_TIPC                             = 0x10f
 	SOL_TLS                              = 0x11a
 	SOL_X25                              = 0x106
+	SOL_XDP                              = 0x11b
 	SOMAXCONN                            = 0x80
 	SO_ACCEPTCONN                        = 0x1e
 	SO_ATTACH_BPF                        = 0x32
@@ -2280,6 +2282,26 @@
 	XATTR_CREATE                         = 0x1
 	XATTR_REPLACE                        = 0x2
 	XCASE                                = 0x4
+	XDP_COPY                             = 0x2
+	XDP_FLAGS_DRV_MODE                   = 0x4
+	XDP_FLAGS_HW_MODE                    = 0x8
+	XDP_FLAGS_MASK                       = 0xf
+	XDP_FLAGS_MODES                      = 0xe
+	XDP_FLAGS_SKB_MODE                   = 0x2
+	XDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1
+	XDP_MMAP_OFFSETS                     = 0x1
+	XDP_PGOFF_RX_RING                    = 0x0
+	XDP_PGOFF_TX_RING                    = 0x80000000
+	XDP_RX_RING                          = 0x2
+	XDP_SHARED_UMEM                      = 0x1
+	XDP_STATISTICS                       = 0x7
+	XDP_TX_RING                          = 0x3
+	XDP_UMEM_COMPLETION_RING             = 0x6
+	XDP_UMEM_FILL_RING                   = 0x5
+	XDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000
+	XDP_UMEM_PGOFF_FILL_RING             = 0x100000000
+	XDP_UMEM_REG                         = 0x4
+	XDP_ZEROCOPY                         = 0x4
 	XENFS_SUPER_MAGIC                    = 0xabba1974
 	XTABS                                = 0x1800
 	ZSMALLOC_MAGIC                       = 0x58295829
diff --git a/unix/zerrors_linux_s390x.go b/unix/zerrors_linux_s390x.go
index 0e4dba1..bad1741 100644
--- a/unix/zerrors_linux_s390x.go
+++ b/unix/zerrors_linux_s390x.go
@@ -64,6 +64,7 @@
 	AF_VSOCK                             = 0x28
 	AF_WANPIPE                           = 0x19
 	AF_X25                               = 0x9
+	AF_XDP                               = 0x2c
 	ALG_OP_DECRYPT                       = 0x0
 	ALG_OP_ENCRYPT                       = 0x1
 	ALG_SET_AEAD_ASSOCLEN                = 0x4
@@ -1872,6 +1873,7 @@
 	SOL_TIPC                             = 0x10f
 	SOL_TLS                              = 0x11a
 	SOL_X25                              = 0x106
+	SOL_XDP                              = 0x11b
 	SOMAXCONN                            = 0x80
 	SO_ACCEPTCONN                        = 0x1e
 	SO_ATTACH_BPF                        = 0x32
@@ -2353,6 +2355,26 @@
 	XATTR_CREATE                         = 0x1
 	XATTR_REPLACE                        = 0x2
 	XCASE                                = 0x4
+	XDP_COPY                             = 0x2
+	XDP_FLAGS_DRV_MODE                   = 0x4
+	XDP_FLAGS_HW_MODE                    = 0x8
+	XDP_FLAGS_MASK                       = 0xf
+	XDP_FLAGS_MODES                      = 0xe
+	XDP_FLAGS_SKB_MODE                   = 0x2
+	XDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1
+	XDP_MMAP_OFFSETS                     = 0x1
+	XDP_PGOFF_RX_RING                    = 0x0
+	XDP_PGOFF_TX_RING                    = 0x80000000
+	XDP_RX_RING                          = 0x2
+	XDP_SHARED_UMEM                      = 0x1
+	XDP_STATISTICS                       = 0x7
+	XDP_TX_RING                          = 0x3
+	XDP_UMEM_COMPLETION_RING             = 0x6
+	XDP_UMEM_FILL_RING                   = 0x5
+	XDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000
+	XDP_UMEM_PGOFF_FILL_RING             = 0x100000000
+	XDP_UMEM_REG                         = 0x4
+	XDP_ZEROCOPY                         = 0x4
 	XENFS_SUPER_MAGIC                    = 0xabba1974
 	XTABS                                = 0x1800
 	ZSMALLOC_MAGIC                       = 0x58295829
diff --git a/unix/ztypes_linux_386.go b/unix/ztypes_linux_386.go
index 9649317..793b3fd 100644
--- a/unix/ztypes_linux_386.go
+++ b/unix/ztypes_linux_386.go
@@ -278,6 +278,14 @@
 	Zero      [4]uint8
 }
 
+type RawSockaddrXDP struct {
+	Family         uint16
+	Flags          uint16
+	Ifindex        uint32
+	Queue_id       uint32
+	Shared_umem_fd uint32
+}
+
 type RawSockaddr struct {
 	Family uint16
 	Data   [14]int8
@@ -412,6 +420,7 @@
 	SizeofSockaddrCAN       = 0x10
 	SizeofSockaddrALG       = 0x58
 	SizeofSockaddrVM        = 0x10
+	SizeofSockaddrXDP       = 0x10
 	SizeofLinger            = 0x8
 	SizeofIovec             = 0x8
 	SizeofIPMreq            = 0x8
@@ -1896,3 +1905,35 @@
 	NETNSA_PID  = 0x2
 	NETNSA_FD   = 0x3
 )
+
+type XDPRingOffset struct {
+	Producer uint64
+	Consumer uint64
+	Desc     uint64
+}
+
+type XDPMmapOffsets struct {
+	Rx XDPRingOffset
+	Tx XDPRingOffset
+	Fr XDPRingOffset
+	Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+	Addr     uint64
+	Len      uint64
+	Size     uint32
+	Headroom uint32
+}
+
+type XDPStatistics struct {
+	Rx_dropped       uint64
+	Rx_invalid_descs uint64
+	Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+	Addr    uint64
+	Len     uint32
+	Options uint32
+}
diff --git a/unix/ztypes_linux_amd64.go b/unix/ztypes_linux_amd64.go
index 5408e88..c354884 100644
--- a/unix/ztypes_linux_amd64.go
+++ b/unix/ztypes_linux_amd64.go
@@ -280,6 +280,14 @@
 	Zero      [4]uint8
 }
 
+type RawSockaddrXDP struct {
+	Family         uint16
+	Flags          uint16
+	Ifindex        uint32
+	Queue_id       uint32
+	Shared_umem_fd uint32
+}
+
 type RawSockaddr struct {
 	Family uint16
 	Data   [14]int8
@@ -416,6 +424,7 @@
 	SizeofSockaddrCAN       = 0x10
 	SizeofSockaddrALG       = 0x58
 	SizeofSockaddrVM        = 0x10
+	SizeofSockaddrXDP       = 0x10
 	SizeofLinger            = 0x8
 	SizeofIovec             = 0x10
 	SizeofIPMreq            = 0x8
@@ -1918,3 +1927,35 @@
 	NETNSA_PID  = 0x2
 	NETNSA_FD   = 0x3
 )
+
+type XDPRingOffset struct {
+	Producer uint64
+	Consumer uint64
+	Desc     uint64
+}
+
+type XDPMmapOffsets struct {
+	Rx XDPRingOffset
+	Tx XDPRingOffset
+	Fr XDPRingOffset
+	Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+	Addr     uint64
+	Len      uint64
+	Size     uint32
+	Headroom uint32
+}
+
+type XDPStatistics struct {
+	Rx_dropped       uint64
+	Rx_invalid_descs uint64
+	Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+	Addr    uint64
+	Len     uint32
+	Options uint32
+}
diff --git a/unix/ztypes_linux_arm.go b/unix/ztypes_linux_arm.go
index 5c7c052..c7b6994 100644
--- a/unix/ztypes_linux_arm.go
+++ b/unix/ztypes_linux_arm.go
@@ -281,6 +281,14 @@
 	Zero      [4]uint8
 }
 
+type RawSockaddrXDP struct {
+	Family         uint16
+	Flags          uint16
+	Ifindex        uint32
+	Queue_id       uint32
+	Shared_umem_fd uint32
+}
+
 type RawSockaddr struct {
 	Family uint16
 	Data   [14]uint8
@@ -415,6 +423,7 @@
 	SizeofSockaddrCAN       = 0x10
 	SizeofSockaddrALG       = 0x58
 	SizeofSockaddrVM        = 0x10
+	SizeofSockaddrXDP       = 0x10
 	SizeofLinger            = 0x8
 	SizeofIovec             = 0x8
 	SizeofIPMreq            = 0x8
@@ -1886,3 +1895,35 @@
 	NETNSA_PID  = 0x2
 	NETNSA_FD   = 0x3
 )
+
+type XDPRingOffset struct {
+	Producer uint64
+	Consumer uint64
+	Desc     uint64
+}
+
+type XDPMmapOffsets struct {
+	Rx XDPRingOffset
+	Tx XDPRingOffset
+	Fr XDPRingOffset
+	Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+	Addr     uint64
+	Len      uint64
+	Size     uint32
+	Headroom uint32
+}
+
+type XDPStatistics struct {
+	Rx_dropped       uint64
+	Rx_invalid_descs uint64
+	Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+	Addr    uint64
+	Len     uint32
+	Options uint32
+}
diff --git a/unix/ztypes_linux_arm64.go b/unix/ztypes_linux_arm64.go
index 99192a2..2339b21 100644
--- a/unix/ztypes_linux_arm64.go
+++ b/unix/ztypes_linux_arm64.go
@@ -281,6 +281,14 @@
 	Zero      [4]uint8
 }
 
+type RawSockaddrXDP struct {
+	Family         uint16
+	Flags          uint16
+	Ifindex        uint32
+	Queue_id       uint32
+	Shared_umem_fd uint32
+}
+
 type RawSockaddr struct {
 	Family uint16
 	Data   [14]int8
@@ -417,6 +425,7 @@
 	SizeofSockaddrCAN       = 0x10
 	SizeofSockaddrALG       = 0x58
 	SizeofSockaddrVM        = 0x10
+	SizeofSockaddrXDP       = 0x10
 	SizeofLinger            = 0x8
 	SizeofIovec             = 0x10
 	SizeofIPMreq            = 0x8
@@ -1897,3 +1906,35 @@
 	NETNSA_PID  = 0x2
 	NETNSA_FD   = 0x3
 )
+
+type XDPRingOffset struct {
+	Producer uint64
+	Consumer uint64
+	Desc     uint64
+}
+
+type XDPMmapOffsets struct {
+	Rx XDPRingOffset
+	Tx XDPRingOffset
+	Fr XDPRingOffset
+	Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+	Addr     uint64
+	Len      uint64
+	Size     uint32
+	Headroom uint32
+}
+
+type XDPStatistics struct {
+	Rx_dropped       uint64
+	Rx_invalid_descs uint64
+	Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+	Addr    uint64
+	Len     uint32
+	Options uint32
+}
diff --git a/unix/ztypes_linux_mips.go b/unix/ztypes_linux_mips.go
index 97fd2a3..013462b 100644
--- a/unix/ztypes_linux_mips.go
+++ b/unix/ztypes_linux_mips.go
@@ -279,6 +279,14 @@
 	Zero      [4]uint8
 }
 
+type RawSockaddrXDP struct {
+	Family         uint16
+	Flags          uint16
+	Ifindex        uint32
+	Queue_id       uint32
+	Shared_umem_fd uint32
+}
+
 type RawSockaddr struct {
 	Family uint16
 	Data   [14]int8
@@ -413,6 +421,7 @@
 	SizeofSockaddrCAN       = 0x10
 	SizeofSockaddrALG       = 0x58
 	SizeofSockaddrVM        = 0x10
+	SizeofSockaddrXDP       = 0x10
 	SizeofLinger            = 0x8
 	SizeofIovec             = 0x8
 	SizeofIPMreq            = 0x8
@@ -1891,3 +1900,35 @@
 	NETNSA_PID  = 0x2
 	NETNSA_FD   = 0x3
 )
+
+type XDPRingOffset struct {
+	Producer uint64
+	Consumer uint64
+	Desc     uint64
+}
+
+type XDPMmapOffsets struct {
+	Rx XDPRingOffset
+	Tx XDPRingOffset
+	Fr XDPRingOffset
+	Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+	Addr     uint64
+	Len      uint64
+	Size     uint32
+	Headroom uint32
+}
+
+type XDPStatistics struct {
+	Rx_dropped       uint64
+	Rx_invalid_descs uint64
+	Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+	Addr    uint64
+	Len     uint32
+	Options uint32
+}
diff --git a/unix/ztypes_linux_mips64.go b/unix/ztypes_linux_mips64.go
index af92468..86f0ab5 100644
--- a/unix/ztypes_linux_mips64.go
+++ b/unix/ztypes_linux_mips64.go
@@ -281,6 +281,14 @@
 	Zero      [4]uint8
 }
 
+type RawSockaddrXDP struct {
+	Family         uint16
+	Flags          uint16
+	Ifindex        uint32
+	Queue_id       uint32
+	Shared_umem_fd uint32
+}
+
 type RawSockaddr struct {
 	Family uint16
 	Data   [14]int8
@@ -417,6 +425,7 @@
 	SizeofSockaddrCAN       = 0x10
 	SizeofSockaddrALG       = 0x58
 	SizeofSockaddrVM        = 0x10
+	SizeofSockaddrXDP       = 0x10
 	SizeofLinger            = 0x8
 	SizeofIovec             = 0x10
 	SizeofIPMreq            = 0x8
@@ -1899,3 +1908,35 @@
 	NETNSA_PID  = 0x2
 	NETNSA_FD   = 0x3
 )
+
+type XDPRingOffset struct {
+	Producer uint64
+	Consumer uint64
+	Desc     uint64
+}
+
+type XDPMmapOffsets struct {
+	Rx XDPRingOffset
+	Tx XDPRingOffset
+	Fr XDPRingOffset
+	Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+	Addr     uint64
+	Len      uint64
+	Size     uint32
+	Headroom uint32
+}
+
+type XDPStatistics struct {
+	Rx_dropped       uint64
+	Rx_invalid_descs uint64
+	Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+	Addr    uint64
+	Len     uint32
+	Options uint32
+}
diff --git a/unix/ztypes_linux_mips64le.go b/unix/ztypes_linux_mips64le.go
index 835e8e3..007537b 100644
--- a/unix/ztypes_linux_mips64le.go
+++ b/unix/ztypes_linux_mips64le.go
@@ -281,6 +281,14 @@
 	Zero      [4]uint8
 }
 
+type RawSockaddrXDP struct {
+	Family         uint16
+	Flags          uint16
+	Ifindex        uint32
+	Queue_id       uint32
+	Shared_umem_fd uint32
+}
+
 type RawSockaddr struct {
 	Family uint16
 	Data   [14]int8
@@ -417,6 +425,7 @@
 	SizeofSockaddrCAN       = 0x10
 	SizeofSockaddrALG       = 0x58
 	SizeofSockaddrVM        = 0x10
+	SizeofSockaddrXDP       = 0x10
 	SizeofLinger            = 0x8
 	SizeofIovec             = 0x10
 	SizeofIPMreq            = 0x8
@@ -1899,3 +1908,35 @@
 	NETNSA_PID  = 0x2
 	NETNSA_FD   = 0x3
 )
+
+type XDPRingOffset struct {
+	Producer uint64
+	Consumer uint64
+	Desc     uint64
+}
+
+type XDPMmapOffsets struct {
+	Rx XDPRingOffset
+	Tx XDPRingOffset
+	Fr XDPRingOffset
+	Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+	Addr     uint64
+	Len      uint64
+	Size     uint32
+	Headroom uint32
+}
+
+type XDPStatistics struct {
+	Rx_dropped       uint64
+	Rx_invalid_descs uint64
+	Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+	Addr    uint64
+	Len     uint32
+	Options uint32
+}
diff --git a/unix/ztypes_linux_mipsle.go b/unix/ztypes_linux_mipsle.go
index 17190b2..fc4a159 100644
--- a/unix/ztypes_linux_mipsle.go
+++ b/unix/ztypes_linux_mipsle.go
@@ -279,6 +279,14 @@
 	Zero      [4]uint8
 }
 
+type RawSockaddrXDP struct {
+	Family         uint16
+	Flags          uint16
+	Ifindex        uint32
+	Queue_id       uint32
+	Shared_umem_fd uint32
+}
+
 type RawSockaddr struct {
 	Family uint16
 	Data   [14]int8
@@ -413,6 +421,7 @@
 	SizeofSockaddrCAN       = 0x10
 	SizeofSockaddrALG       = 0x58
 	SizeofSockaddrVM        = 0x10
+	SizeofSockaddrXDP       = 0x10
 	SizeofLinger            = 0x8
 	SizeofIovec             = 0x8
 	SizeofIPMreq            = 0x8
@@ -1891,3 +1900,35 @@
 	NETNSA_PID  = 0x2
 	NETNSA_FD   = 0x3
 )
+
+type XDPRingOffset struct {
+	Producer uint64
+	Consumer uint64
+	Desc     uint64
+}
+
+type XDPMmapOffsets struct {
+	Rx XDPRingOffset
+	Tx XDPRingOffset
+	Fr XDPRingOffset
+	Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+	Addr     uint64
+	Len      uint64
+	Size     uint32
+	Headroom uint32
+}
+
+type XDPStatistics struct {
+	Rx_dropped       uint64
+	Rx_invalid_descs uint64
+	Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+	Addr    uint64
+	Len     uint32
+	Options uint32
+}
diff --git a/unix/ztypes_linux_ppc64.go b/unix/ztypes_linux_ppc64.go
index 17d8283..377e9ef 100644
--- a/unix/ztypes_linux_ppc64.go
+++ b/unix/ztypes_linux_ppc64.go
@@ -282,6 +282,14 @@
 	Zero      [4]uint8
 }
 
+type RawSockaddrXDP struct {
+	Family         uint16
+	Flags          uint16
+	Ifindex        uint32
+	Queue_id       uint32
+	Shared_umem_fd uint32
+}
+
 type RawSockaddr struct {
 	Family uint16
 	Data   [14]uint8
@@ -418,6 +426,7 @@
 	SizeofSockaddrCAN       = 0x10
 	SizeofSockaddrALG       = 0x58
 	SizeofSockaddrVM        = 0x10
+	SizeofSockaddrXDP       = 0x10
 	SizeofLinger            = 0x8
 	SizeofIovec             = 0x10
 	SizeofIPMreq            = 0x8
@@ -1907,3 +1916,35 @@
 	NETNSA_PID  = 0x2
 	NETNSA_FD   = 0x3
 )
+
+type XDPRingOffset struct {
+	Producer uint64
+	Consumer uint64
+	Desc     uint64
+}
+
+type XDPMmapOffsets struct {
+	Rx XDPRingOffset
+	Tx XDPRingOffset
+	Fr XDPRingOffset
+	Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+	Addr     uint64
+	Len      uint64
+	Size     uint32
+	Headroom uint32
+}
+
+type XDPStatistics struct {
+	Rx_dropped       uint64
+	Rx_invalid_descs uint64
+	Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+	Addr    uint64
+	Len     uint32
+	Options uint32
+}
diff --git a/unix/ztypes_linux_ppc64le.go b/unix/ztypes_linux_ppc64le.go
index 19bda5b..595ba63 100644
--- a/unix/ztypes_linux_ppc64le.go
+++ b/unix/ztypes_linux_ppc64le.go
@@ -282,6 +282,14 @@
 	Zero      [4]uint8
 }
 
+type RawSockaddrXDP struct {
+	Family         uint16
+	Flags          uint16
+	Ifindex        uint32
+	Queue_id       uint32
+	Shared_umem_fd uint32
+}
+
 type RawSockaddr struct {
 	Family uint16
 	Data   [14]uint8
@@ -418,6 +426,7 @@
 	SizeofSockaddrCAN       = 0x10
 	SizeofSockaddrALG       = 0x58
 	SizeofSockaddrVM        = 0x10
+	SizeofSockaddrXDP       = 0x10
 	SizeofLinger            = 0x8
 	SizeofIovec             = 0x10
 	SizeofIPMreq            = 0x8
@@ -1907,3 +1916,35 @@
 	NETNSA_PID  = 0x2
 	NETNSA_FD   = 0x3
 )
+
+type XDPRingOffset struct {
+	Producer uint64
+	Consumer uint64
+	Desc     uint64
+}
+
+type XDPMmapOffsets struct {
+	Rx XDPRingOffset
+	Tx XDPRingOffset
+	Fr XDPRingOffset
+	Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+	Addr     uint64
+	Len      uint64
+	Size     uint32
+	Headroom uint32
+}
+
+type XDPStatistics struct {
+	Rx_dropped       uint64
+	Rx_invalid_descs uint64
+	Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+	Addr    uint64
+	Len     uint32
+	Options uint32
+}
diff --git a/unix/ztypes_linux_riscv64.go b/unix/ztypes_linux_riscv64.go
index 97875c3..0ccf5bc 100644
--- a/unix/ztypes_linux_riscv64.go
+++ b/unix/ztypes_linux_riscv64.go
@@ -281,6 +281,14 @@
 	Zero      [4]uint8
 }
 
+type RawSockaddrXDP struct {
+	Family         uint16
+	Flags          uint16
+	Ifindex        uint32
+	Queue_id       uint32
+	Shared_umem_fd uint32
+}
+
 type RawSockaddr struct {
 	Family uint16
 	Data   [14]uint8
@@ -417,6 +425,7 @@
 	SizeofSockaddrCAN       = 0x10
 	SizeofSockaddrALG       = 0x58
 	SizeofSockaddrVM        = 0x10
+	SizeofSockaddrXDP       = 0x10
 	SizeofLinger            = 0x8
 	SizeofIovec             = 0x10
 	SizeofIPMreq            = 0x8
@@ -1924,3 +1933,35 @@
 	NETNSA_PID  = 0x2
 	NETNSA_FD   = 0x3
 )
+
+type XDPRingOffset struct {
+	Producer uint64
+	Consumer uint64
+	Desc     uint64
+}
+
+type XDPMmapOffsets struct {
+	Rx XDPRingOffset
+	Tx XDPRingOffset
+	Fr XDPRingOffset
+	Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+	Addr     uint64
+	Len      uint64
+	Size     uint32
+	Headroom uint32
+}
+
+type XDPStatistics struct {
+	Rx_dropped       uint64
+	Rx_invalid_descs uint64
+	Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+	Addr    uint64
+	Len     uint32
+	Options uint32
+}
diff --git a/unix/ztypes_linux_s390x.go b/unix/ztypes_linux_s390x.go
index 705f123..06b0785 100644
--- a/unix/ztypes_linux_s390x.go
+++ b/unix/ztypes_linux_s390x.go
@@ -280,6 +280,14 @@
 	Zero      [4]uint8
 }
 
+type RawSockaddrXDP struct {
+	Family         uint16
+	Flags          uint16
+	Ifindex        uint32
+	Queue_id       uint32
+	Shared_umem_fd uint32
+}
+
 type RawSockaddr struct {
 	Family uint16
 	Data   [14]int8
@@ -416,6 +424,7 @@
 	SizeofSockaddrCAN       = 0x10
 	SizeofSockaddrALG       = 0x58
 	SizeofSockaddrVM        = 0x10
+	SizeofSockaddrXDP       = 0x10
 	SizeofLinger            = 0x8
 	SizeofIovec             = 0x10
 	SizeofIPMreq            = 0x8
@@ -1924,3 +1933,35 @@
 	NETNSA_PID  = 0x2
 	NETNSA_FD   = 0x3
 )
+
+type XDPRingOffset struct {
+	Producer uint64
+	Consumer uint64
+	Desc     uint64
+}
+
+type XDPMmapOffsets struct {
+	Rx XDPRingOffset
+	Tx XDPRingOffset
+	Fr XDPRingOffset
+	Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+	Addr     uint64
+	Len      uint64
+	Size     uint32
+	Headroom uint32
+}
+
+type XDPStatistics struct {
+	Rx_dropped       uint64
+	Rx_invalid_descs uint64
+	Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+	Addr    uint64
+	Len     uint32
+	Options uint32
+}