aboutsummaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorAndrey Konovalov <andreyknvl@google.com>2017-04-07 19:22:56 +0200
committerAndrey Konovalov <andreyknvl@google.com>2017-04-08 20:20:38 +0200
commit941170a7e2ba713853d9b63b259a00bd634518fc (patch)
tree808b8febbdaed8e3c9fecbb0b0f3e294225d25eb /sys
parent822b1269b30114d4bec447845fc71afca97c5b63 (diff)
sys: add more tcp socket options
Diffstat (limited to 'sys')
-rw-r--r--sys/socket_inet_tcp.txt49
-rw-r--r--sys/socket_inet_tcp_amd64.const5
-rw-r--r--sys/socket_inet_tcp_arm64.const5
-rw-r--r--sys/socket_inet_tcp_ppc64le.const5
4 files changed, 64 insertions, 0 deletions
diff --git a/sys/socket_inet_tcp.txt b/sys/socket_inet_tcp.txt
index 4626511ad..124151fd8 100644
--- a/sys/socket_inet_tcp.txt
+++ b/sys/socket_inet_tcp.txt
@@ -5,6 +5,7 @@
include <asm/ioctls.h>
include <linux/tcp.h>
+include <net/tcp.h>
include <uapi/linux/sockios.h>
resource sock_tcp[sock_in]
@@ -43,6 +44,54 @@ setsockopt$inet_tcp_buf(fd sock_tcp, level const[IPPROTO_TCP], optname flags[tcp
getsockopt$inet6_tcp_buf(fd sock_tcp6, level const[IPPROTO_TCP], optname flags[tcp_option_types_buf], optval buffer[out], optlen ptr[inout, len[optval, int32]])
setsockopt$inet6_tcp_buf(fd sock_tcp6, level const[IPPROTO_TCP], optname flags[tcp_option_types_buf], optval buffer[in], optlen len[optval])
+# Specific TCP socket options
+
+# TODO: use TCP_SAVED_SYN to extract sequence numbers
+
+setsockopt$inet_tcp_TCP_CONGESTION(fd sock_tcp, level const[IPPROTO_TCP], optname const[TCP_CONGESTION], optval ptr[in, string[tcp_congestion_control_alg_names]], optlen len[optval])
+setsockopt$inet6_tcp_TCP_CONGESTION(fd sock_tcp6, level const[IPPROTO_TCP], optname const[TCP_CONGESTION], optval ptr[in, string[tcp_congestion_control_alg_names]], optlen len[optval])
+
+setsockopt$inet_tcp_TCP_MD5SIG(fd sock_tcp, level const[IPPROTO_TCP], optname const[TCP_MD5SIG], optval ptr[in, tcp_md5sig], optlen len[optval])
+setsockopt$inet6_tcp_TCP_MD5SIG(fd sock_tcp6, level const[IPPROTO_TCP], optname const[TCP_MD5SIG], optval ptr[in, tcp_md5sig], optlen len[optval])
+
+setsockopt$inet_tcp_TCP_REPAIR_OPTIONS(fd sock_tcp, level const[IPPROTO_TCP], optname const[TCP_REPAIR_OPTIONS], optval ptr[in, array[tcp_repair_opt]], optlen len[optval])
+setsockopt$inet6_tcp_TCP_REPAIR_OPTIONS(fd sock_tcp6, level const[IPPROTO_TCP], optname const[TCP_REPAIR_OPTIONS], optval ptr[in, array[tcp_repair_opt]], optlen len[optval])
+
+getsockopt$inet_tcp_TCP_REPAIR_WINDOW(fd sock_tcp, level const[IPPROTO_TCP], optname const[TCP_REPAIR_WINDOW], optval ptr[out, tcp_repair_window], optlen ptr[inout, len[optval, int32]])
+setsockopt$inet_tcp_TCP_REPAIR_WINDOW(fd sock_tcp, level const[IPPROTO_TCP], optname const[TCP_REPAIR_WINDOW], optval ptr[in, tcp_repair_window], optlen len[optval])
+getsockopt$inet6_tcp_TCP_REPAIR_WINDOW(fd sock_tcp6, level const[IPPROTO_TCP], optname const[TCP_REPAIR_WINDOW], optval ptr[out, tcp_repair_window], optlen ptr[inout, len[optval, int32]])
+setsockopt$inet6_tcp_TCP_REPAIR_WINDOW(fd sock_tcp6, level const[IPPROTO_TCP], optname const[TCP_REPAIR_WINDOW], optval ptr[in, tcp_repair_window], optlen len[optval])
+
+tcp_congestion_control_alg_names = "cubic", "reno", "bic", "cdg", "dctcp", "westwood", "highspeed", "hybla", "htcp", "vegas", "nv", "veno", "scalable", "lp", "yeah", "illinois"
+
+tcp_repair_window {
+ snd_wl1 int32
+ snd_wnd int32
+ max_window int32
+ rcv_wnd int32
+ rcv_wup int32
+}
+
+sockaddr_storage_tcp {
+ in sockaddr_storage_in
+ in6 sockaddr_storage_in6
+}
+
+tcp_md5sig {
+ tcpm_addr sockaddr_storage_tcp
+ __tcpm_pad1 int16
+ tcpm_keylen int16
+ __tcpm_pad2 int32
+ tcpm_key array[int8, TCP_MD5SIG_MAXKEYLEN]
+}
+
+tcp_repair_opt_codes = TCPOPT_MSS, TCPOPT_WINDOW, TCPOPT_SACK_PERM, TCPOPT_TIMESTAMP
+
+tcp_repair_opt {
+ opt_code flags[tcp_repair_opt_codes, int32]
+ opt_val int32
+}
+
# TCP ioctls
# http://lxr.free-electrons.com/ident?i=tcp_ioctl
diff --git a/sys/socket_inet_tcp_amd64.const b/sys/socket_inet_tcp_amd64.const
index 8049cc498..f9e773af7 100644
--- a/sys/socket_inet_tcp_amd64.const
+++ b/sys/socket_inet_tcp_amd64.const
@@ -7,6 +7,10 @@ SIOCINQ = 21531
SIOCOUTQ = 21521
SIOCOUTQNSD = 35147
SOCK_STREAM = 1
+TCPOPT_MSS = 2
+TCPOPT_SACK_PERM = 4
+TCPOPT_TIMESTAMP = 8
+TCPOPT_WINDOW = 3
TCP_CC_INFO = 26
TCP_CONGESTION = 13
TCP_CORK = 3
@@ -19,6 +23,7 @@ TCP_KEEPINTVL = 5
TCP_LINGER2 = 8
TCP_MAXSEG = 2
TCP_MD5SIG = 14
+TCP_MD5SIG_MAXKEYLEN = 80
TCP_NODELAY = 1
TCP_NOTSENT_LOWAT = 25
TCP_QUEUE_SEQ = 21
diff --git a/sys/socket_inet_tcp_arm64.const b/sys/socket_inet_tcp_arm64.const
index d15a5eae7..55aaf3703 100644
--- a/sys/socket_inet_tcp_arm64.const
+++ b/sys/socket_inet_tcp_arm64.const
@@ -7,6 +7,10 @@ SIOCINQ = 21531
SIOCOUTQ = 21521
SIOCOUTQNSD = 35147
SOCK_STREAM = 1
+TCPOPT_MSS = 2
+TCPOPT_SACK_PERM = 4
+TCPOPT_TIMESTAMP = 8
+TCPOPT_WINDOW = 3
TCP_CC_INFO = 26
TCP_CONGESTION = 13
TCP_CORK = 3
@@ -19,6 +23,7 @@ TCP_KEEPINTVL = 5
TCP_LINGER2 = 8
TCP_MAXSEG = 2
TCP_MD5SIG = 14
+TCP_MD5SIG_MAXKEYLEN = 80
TCP_NODELAY = 1
TCP_NOTSENT_LOWAT = 25
TCP_QUEUE_SEQ = 21
diff --git a/sys/socket_inet_tcp_ppc64le.const b/sys/socket_inet_tcp_ppc64le.const
index 2a1a6be64..30cadff8b 100644
--- a/sys/socket_inet_tcp_ppc64le.const
+++ b/sys/socket_inet_tcp_ppc64le.const
@@ -7,6 +7,10 @@ SIOCINQ = 1074030207
SIOCOUTQ = 1074033779
SIOCOUTQNSD = 35147
SOCK_STREAM = 1
+TCPOPT_MSS = 2
+TCPOPT_SACK_PERM = 4
+TCPOPT_TIMESTAMP = 8
+TCPOPT_WINDOW = 3
TCP_CC_INFO = 26
TCP_CONGESTION = 13
TCP_CORK = 3
@@ -19,6 +23,7 @@ TCP_KEEPINTVL = 5
TCP_LINGER2 = 8
TCP_MAXSEG = 2
TCP_MD5SIG = 14
+TCP_MD5SIG_MAXKEYLEN = 80
TCP_NODELAY = 1
TCP_NOTSENT_LOWAT = 25
TCP_QUEUE_SEQ = 21