unix: add SetsockoptTCPRepairOpt on Linux

There is currently no function to allow for setting repair options for sockets in repair mode.
There are 4 options catered for in the linux implementation.

TCPOPT_WINDOW
TCPOPT_MAXSEG
TCPOPT_SACK_PERMITTED
TCPOPT_TIMESTAMP

Details of the patch to the kernel and the thinking behind it is here  https://lwn.net/Articles/495304

Work done in this commit
Included the tcp options type and length for inclusion in the Docker build
Added TCPOPT to the regular expression in mkerrors.sh. There was only TCP_ previously
Add the new function to syscall_unix.go

I have tested locally and verified each option with ss -i

I am not sure whether to commit tests because I don't know if socket creation is possible on the test runs in the offical pipeline.
I did check for existing tests but didn't see any that created sockets, only one that validated a string option.

Fixes golang/go#46984

Change-Id: Iade0434c05cebf2fbdfb5f04b2a7b51c8b358423
Reviewed-on: https://go-review.googlesource.com/c/sys/+/332709
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
This commit is contained in:
Mark Jeffery authored and Tobias Klauser committed 2021-08-19 07:21:35 +00:00
1 parent 44f02d92fd
commit bce67f0961
5 files changed
+25 -1

No files matched your search

+3
View File
@@ -637,6 +637,8 @@ type CanFilter C.struct_can_filter
type ifreq C.struct_ifreq
type TCPRepairOpt C.struct_tcp_repair_opt
const (
SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in
SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
@@ -673,6 +675,7 @@ const (
SizeofUcred = C.sizeof_struct_ucred
SizeofTCPInfo = C.sizeof_struct_tcp_info
SizeofCanFilter = C.sizeof_struct_can_filter
SizeofTCPRepairOpt = C.sizeof_struct_tcp_repair_opt
)
// Netlink routing and interface messages