unix: add tcp_md5sig on Linux

This structure is used with setsockopt in BGP speaker implementations.

For more information, please see:
https://criticalindirection.com/2015/05/12/tcp_md5sig/.

Fixes golang/go#24830

Change-Id: Ic2137e843ad502dbe9a4227362b63164789c5877
Reviewed-on: https://go-review.googlesource.com/106656
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/unix/linux/types.go b/unix/linux/types.go
index 7e3835b..06b4f7d 100644
--- a/unix/linux/types.go
+++ b/unix/linux/types.go
@@ -67,6 +67,7 @@
 #include <linux/taskstats.h>
 #include <linux/cgroupstats.h>
 #include <linux/genetlink.h>
+#include <linux/socket.h>
 
 // abi/abi.h generated by mkall.go.
 #include "abi/abi.h"
@@ -956,3 +957,9 @@
 	CBitFieldMaskBit62 = C.BITFIELD_MASK_62
 	CBitFieldMaskBit63 = C.BITFIELD_MASK_63
 )
+
+// TCP-MD5 signature.
+
+type SockaddrStorage C.struct_sockaddr_storage
+
+type TCPMD5Sig C.struct_tcp_md5sig
diff --git a/unix/ztypes_linux_386.go b/unix/ztypes_linux_386.go
index b07e048..ce7ca81 100644
--- a/unix/ztypes_linux_386.go
+++ b/unix/ztypes_linux_386.go
@@ -1133,3 +1133,18 @@
 	CBitFieldMaskBit62 = 0x4000000000000000
 	CBitFieldMaskBit63 = 0x8000000000000000
 )
+
+type SockaddrStorage struct {
+	Family uint16
+	_      [122]int8
+	_      uint32
+}
+
+type TCPMD5Sig struct {
+	Addr      SockaddrStorage
+	Flags     uint8
+	Prefixlen uint8
+	Keylen    uint16
+	_         uint32
+	Key       [80]uint8
+}
diff --git a/unix/ztypes_linux_amd64.go b/unix/ztypes_linux_amd64.go
index d6f2082..132e279 100644
--- a/unix/ztypes_linux_amd64.go
+++ b/unix/ztypes_linux_amd64.go
@@ -1151,3 +1151,18 @@
 	CBitFieldMaskBit62 = 0x4000000000000000
 	CBitFieldMaskBit63 = 0x8000000000000000
 )
+
+type SockaddrStorage struct {
+	Family uint16
+	_      [118]int8
+	_      uint64
+}
+
+type TCPMD5Sig struct {
+	Addr      SockaddrStorage
+	Flags     uint8
+	Prefixlen uint8
+	Keylen    uint16
+	_         uint32
+	Key       [80]uint8
+}
diff --git a/unix/ztypes_linux_arm.go b/unix/ztypes_linux_arm.go
index 0920891..197633f 100644
--- a/unix/ztypes_linux_arm.go
+++ b/unix/ztypes_linux_arm.go
@@ -1122,3 +1122,18 @@
 	CBitFieldMaskBit62 = 0x4000000000000000
 	CBitFieldMaskBit63 = 0x8000000000000000
 )
+
+type SockaddrStorage struct {
+	Family uint16
+	_      [122]uint8
+	_      uint32
+}
+
+type TCPMD5Sig struct {
+	Addr      SockaddrStorage
+	Flags     uint8
+	Prefixlen uint8
+	Keylen    uint16
+	_         uint32
+	Key       [80]uint8
+}
diff --git a/unix/ztypes_linux_arm64.go b/unix/ztypes_linux_arm64.go
index d35d5ba..4b9a402 100644
--- a/unix/ztypes_linux_arm64.go
+++ b/unix/ztypes_linux_arm64.go
@@ -1130,3 +1130,18 @@
 	CBitFieldMaskBit62 = 0x4000000000000000
 	CBitFieldMaskBit63 = 0x8000000000000000
 )
+
+type SockaddrStorage struct {
+	Family uint16
+	_      [118]int8
+	_      uint64
+}
+
+type TCPMD5Sig struct {
+	Addr      SockaddrStorage
+	Flags     uint8
+	Prefixlen uint8
+	Keylen    uint16
+	_         uint32
+	Key       [80]uint8
+}
diff --git a/unix/ztypes_linux_mips.go b/unix/ztypes_linux_mips.go
index f100674..b56e542 100644
--- a/unix/ztypes_linux_mips.go
+++ b/unix/ztypes_linux_mips.go
@@ -1127,3 +1127,18 @@
 	CBitFieldMaskBit62 = 0x2
 	CBitFieldMaskBit63 = 0x1
 )
+
+type SockaddrStorage struct {
+	Family uint16
+	_      [122]int8
+	_      uint32
+}
+
+type TCPMD5Sig struct {
+	Addr      SockaddrStorage
+	Flags     uint8
+	Prefixlen uint8
+	Keylen    uint16
+	_         uint32
+	Key       [80]uint8
+}
diff --git a/unix/ztypes_linux_mips64.go b/unix/ztypes_linux_mips64.go
index 1bc01bd..d577f56 100644
--- a/unix/ztypes_linux_mips64.go
+++ b/unix/ztypes_linux_mips64.go
@@ -1132,3 +1132,18 @@
 	CBitFieldMaskBit62 = 0x2
 	CBitFieldMaskBit63 = 0x1
 )
+
+type SockaddrStorage struct {
+	Family uint16
+	_      [118]int8
+	_      uint64
+}
+
+type TCPMD5Sig struct {
+	Addr      SockaddrStorage
+	Flags     uint8
+	Prefixlen uint8
+	Keylen    uint16
+	_         uint32
+	Key       [80]uint8
+}
diff --git a/unix/ztypes_linux_mips64le.go b/unix/ztypes_linux_mips64le.go
index af22a07..ac30540 100644
--- a/unix/ztypes_linux_mips64le.go
+++ b/unix/ztypes_linux_mips64le.go
@@ -1132,3 +1132,18 @@
 	CBitFieldMaskBit62 = 0x4000000000000000
 	CBitFieldMaskBit63 = 0x8000000000000000
 )
+
+type SockaddrStorage struct {
+	Family uint16
+	_      [118]int8
+	_      uint64
+}
+
+type TCPMD5Sig struct {
+	Addr      SockaddrStorage
+	Flags     uint8
+	Prefixlen uint8
+	Keylen    uint16
+	_         uint32
+	Key       [80]uint8
+}
diff --git a/unix/ztypes_linux_mipsle.go b/unix/ztypes_linux_mipsle.go
index 67ac81e..b9e57eb 100644
--- a/unix/ztypes_linux_mipsle.go
+++ b/unix/ztypes_linux_mipsle.go
@@ -1127,3 +1127,18 @@
 	CBitFieldMaskBit62 = 0x4000000000000000
 	CBitFieldMaskBit63 = 0x8000000000000000
 )
+
+type SockaddrStorage struct {
+	Family uint16
+	_      [122]int8
+	_      uint32
+}
+
+type TCPMD5Sig struct {
+	Addr      SockaddrStorage
+	Flags     uint8
+	Prefixlen uint8
+	Keylen    uint16
+	_         uint32
+	Key       [80]uint8
+}
diff --git a/unix/ztypes_linux_ppc64.go b/unix/ztypes_linux_ppc64.go
index 0c3b056..c3a5ea6 100644
--- a/unix/ztypes_linux_ppc64.go
+++ b/unix/ztypes_linux_ppc64.go
@@ -1140,3 +1140,18 @@
 	CBitFieldMaskBit62 = 0x2
 	CBitFieldMaskBit63 = 0x1
 )
+
+type SockaddrStorage struct {
+	Family uint16
+	_      [118]uint8
+	_      uint64
+}
+
+type TCPMD5Sig struct {
+	Addr      SockaddrStorage
+	Flags     uint8
+	Prefixlen uint8
+	Keylen    uint16
+	_         uint32
+	Key       [80]uint8
+}
diff --git a/unix/ztypes_linux_ppc64le.go b/unix/ztypes_linux_ppc64le.go
index 03a721e..b2c4b24 100644
--- a/unix/ztypes_linux_ppc64le.go
+++ b/unix/ztypes_linux_ppc64le.go
@@ -1140,3 +1140,18 @@
 	CBitFieldMaskBit62 = 0x4000000000000000
 	CBitFieldMaskBit63 = 0x8000000000000000
 )
+
+type SockaddrStorage struct {
+	Family uint16
+	_      [118]uint8
+	_      uint64
+}
+
+type TCPMD5Sig struct {
+	Addr      SockaddrStorage
+	Flags     uint8
+	Prefixlen uint8
+	Keylen    uint16
+	_         uint32
+	Key       [80]uint8
+}
diff --git a/unix/ztypes_linux_s390x.go b/unix/ztypes_linux_s390x.go
index a0217ff..3e89436 100644
--- a/unix/ztypes_linux_s390x.go
+++ b/unix/ztypes_linux_s390x.go
@@ -1157,3 +1157,18 @@
 	CBitFieldMaskBit62 = 0x2
 	CBitFieldMaskBit63 = 0x1
 )
+
+type SockaddrStorage struct {
+	Family uint16
+	_      [118]int8
+	_      uint64
+}
+
+type TCPMD5Sig struct {
+	Addr      SockaddrStorage
+	Flags     uint8
+	Prefixlen uint8
+	Keylen    uint16
+	_         uint32
+	Key       [80]uint8
+}