aboutsummaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorAndrey Konovalov <andreyknvl@gmail.com>2017-04-08 20:23:19 +0200
committerGitHub <noreply@github.com>2017-04-08 20:23:19 +0200
commit61c890d8ffd6981f2652871649d555136e70823a (patch)
tree808b8febbdaed8e3c9fecbb0b0f3e294225d25eb /sys
parentf6f7c2edd8c853324638825048ee7784b5dbf61d (diff)
parent941170a7e2ba713853d9b63b259a00bd634518fc (diff)
Merge pull request #161 from xairy/up-improve-sockets-2
Add more socket ioctls
Diffstat (limited to 'sys')
-rw-r--r--sys/socket_inet.txt55
-rw-r--r--sys/socket_inet6.txt55
-rw-r--r--sys/socket_inet6_amd64.const31
-rw-r--r--sys/socket_inet6_arm64.const31
-rw-r--r--sys/socket_inet6_ppc64le.const31
-rw-r--r--sys/socket_inet_amd64.const11
-rw-r--r--sys/socket_inet_arm64.const11
-rw-r--r--sys/socket_inet_ppc64le.const11
-rw-r--r--sys/socket_inet_tcp.txt67
-rw-r--r--sys/socket_inet_tcp_amd64.const10
-rw-r--r--sys/socket_inet_tcp_arm64.const10
-rw-r--r--sys/socket_inet_tcp_ppc64le.const10
-rw-r--r--sys/socket_inet_udp.txt10
-rw-r--r--sys/socket_inet_udp_amd64.const3
-rw-r--r--sys/socket_inet_udp_arm64.const3
-rw-r--r--sys/socket_inet_udp_ppc64le.const3
-rw-r--r--sys/vnet.txt5
17 files changed, 313 insertions, 44 deletions
diff --git a/sys/socket_inet.txt b/sys/socket_inet.txt
index a9e1834f5..7ebc92cb3 100644
--- a/sys/socket_inet.txt
+++ b/sys/socket_inet.txt
@@ -16,19 +16,10 @@ sock_in_pair {
f1 sock_in
}
-in_addr [
-# 0.0.0.0
- empty const[0x00000000, int32be]
-# 127.0.0.1
- loopback const[0x7f000001, int32be]
-# 255.255.255.255
- broadcast const[0xffffffff, int32be]
-]
-
sockaddr_in {
family const[AF_INET, int16]
port proc[int16be, 20000, 4]
- addr in_addr
+ addr ipv4_addr
pad array[const[0, int8], 8]
}
@@ -79,34 +70,34 @@ ip_msfilter_mode = MCAST_INCLUDE, MCAST_EXCLUDE
ip_mtu_discover = IP_PMTUDISC_DONT, IP_PMTUDISC_WANT, IP_PMTUDISC_DO, IP_PMTUDISC_PROBE, IP_PMTUDISC_INTERFACE, IP_PMTUDISC_OMIT
ip_mreq {
- multi in_addr
- addr in_addr
+ multi ipv4_addr
+ addr ipv4_addr
}
ip_mreqn {
- multi in_addr
- addr in_addr
+ multi ipv4_addr
+ addr ipv4_addr
ifindex int32
}
ip_mreq_source {
- multi in_addr
- iface in_addr
- source in_addr
+ multi ipv4_addr
+ iface ipv4_addr
+ source ipv4_addr
}
ip_msfilter {
- multi in_addr
- iface in_addr
+ multi ipv4_addr
+ iface ipv4_addr
fmode flags[ip_msfilter_mode, int32]
numsrc len[slist, int32]
- slist array[in_addr]
+ slist array[ipv4_addr]
}
in_pktinfo {
ifindex int32
- dst in_addr
- addr in_addr
+ dst ipv4_addr
+ addr ipv4_addr
}
xfrm_filer {
@@ -179,13 +170,13 @@ xfrm_id {
}
xfrm_in_addr [
- in in_addr
- in6 in6_addr
+ in ipv4_addr
+ in6 ipv6_addr
]
# IP ioctls
-# http://lxr.free-electrons.com/source/include/uapi/linux/sockios.h
+# http://lxr.free-electrons.com/ident?i=inet_ioctl
ioctl$sock_inet_SIOCADDRT(fd sock_in, cmd const[SIOCADDRT], arg ptr[in, rtentry_in])
ioctl$sock_inet_SIOCDELRT(fd sock_in, cmd const[SIOCDELRT], arg ptr[in, rtentry_in])
@@ -195,7 +186,9 @@ ioctl$sock_inet_SIOCDARP(fd sock_in, cmd const[SIOCDARP], arg ptr[in, arpreq_in]
ioctl$sock_inet_SIOCGARP(fd sock_in, cmd const[SIOCGARP], arg ptr[inout, arpreq_in])
ioctl$sock_inet_SIOCSARP(fd sock_in, cmd const[SIOCSARP], arg ptr[in, arpreq_in])
-# TODO: more here
+inet_ifreq_ioctls = SIOCGIFADDR, SIOCSIFADDR, SIOCGIFBRDADDR, SIOCSIFBRDADDR, SIOCGIFNETMASK, SIOCSIFNETMASK, SIOCGIFDSTADDR, SIOCSIFDSTADDR, SIOCSIFPFLAGS, SIOCGIFPFLAGS, SIOCSIFFLAGS
+
+ioctl$sock_inet_ifreq(fd sock, cmd flags[inet_ifreq_ioctls], arg ptr[inout, ifreq_in])
rt_flags = RTF_UP, RTF_GATEWAY, RTF_HOST, RTF_REINSTATE, RTF_DYNAMIC, RTF_MODIFIED, RTF_MTU, RTF_WINDOW, RTF_IRTT, RTF_REJECT
@@ -232,3 +225,13 @@ arpreq_in {
arp_netmask sockaddr_in
arp_dev devname
}
+
+ifreq_in {
+ ifr_ifrn devname
+ ifr_ifru ifr_ifru_in
+}
+
+ifr_ifru_in [
+ ifru_addrs sockaddr_in
+ ifru_flags flags[ifru_flags, int16]
+]
diff --git a/sys/socket_inet6.txt b/sys/socket_inet6.txt
index c0bd80e2c..14be9aece 100644
--- a/sys/socket_inet6.txt
+++ b/sys/socket_inet6.txt
@@ -4,6 +4,8 @@
include <linux/ip.h>
include <linux/ipv6.h>
include <linux/route.h>
+include <uapi/linux/route.h>
+include <uapi/linux/ipv6_route.h>
include <uapi/linux/netfilter_ipv6/ip6_tables.h>
# IPv6 sockets
@@ -16,26 +18,11 @@ sock_in6_pair {
}
-in6_addr_empty {
- a0 const[0, int64be]
- a1 const[0, int64be]
-}
-
-in6_addr_loopback {
- a0 const[0, int64be]
- a1 const[1, int64be]
-}
-
-in6_addr [
- empty in6_addr_empty
- loopback in6_addr_loopback
-]
-
sockaddr_in6 {
family const[AF_INET6, int16]
port proc[int16be, 20000, 4]
flow int32
- addr in6_addr
+ addr ipv6_addr
scope int32
}
@@ -74,8 +61,40 @@ sockopt_opt_ipv6_int = IPV6_ADDRFORM, IPV6_MTU, IPV6_MULTICAST_HOPS, IPV6_MULTIC
sockopt_opt_ipv6_mreq = IPV6_ADD_MEMBERSHIP, IPV6_DROP_MEMBERSHIP, IPV6_JOIN_ANYCAST, IPV6_LEAVE_ANYCAST
ipv6_mreq {
- multi in6_addr
+ multi ipv6_addr
ifindex int32
}
-# TODO: ipv6 ioctls
+# IPv6 ioctls
+
+# TODO: http://lxr.free-electrons.com/ident?i=inet6_ioctl
+
+ioctl$sock_inet6_SIOCADDRT(fd sock_in6, cmd const[SIOCADDRT], arg ptr[in, in6_rtmsg])
+ioctl$sock_inet6_SIOCDELRT(fd sock_in6, cmd const[SIOCDELRT], arg ptr[in, in6_rtmsg])
+
+ioctl$sock_inet6_SIOCSIFADDR(fd sock_in6, cmd const[SIOCSIFADDR], arg ptr[in, in6_ifreq])
+ioctl$sock_inet6_SIOCDIFADDR(fd sock_in6, cmd const[SIOCDIFADDR], arg ptr[in, in6_ifreq])
+ioctl$sock_inet6_SIOCSIFDSTADDR(fd sock_in6, cmd const[SIOCSIFDSTADDR], arg ptr[in, in6_ifreq])
+
+rtmsg_metrics = IP6_RT_PRIO_USER, IP6_RT_PRIO_ADDRCONF
+
+rtmsg_flags = RTF_UP, RTF_GATEWAY, RTF_HOST, RTF_REINSTATE, RTF_DYNAMIC, RTF_MODIFIED, RTF_MTU, RTF_WINDOW, RTF_IRTT, RTF_REJECT, RTF_DEFAULT, RTF_ALLONLINK, RTF_ADDRCONF, RTF_PREFIX_RT, RTF_ANYCAST, RTF_NONEXTHOP, RTF_EXPIRES, RTF_ROUTEINFO, RTF_CACHE, RTF_FLOW, RTF_POLICY, RTF_PCPU, RTF_LOCAL
+
+in6_rtmsg {
+ rtmsg_dst ipv6_addr
+ rtmsg_src ipv6_addr
+ rtmsg_gateway ipv6_addr
+ rtmsg_type int32
+ rtmsg_dst_len int16
+ rtmsg_src_len int16
+ rtmsg_metric flags[rtmsg_metrics, int32]
+ rtmsg_info int64
+ rtmsg_flags flags[rtmsg_flags, int32]
+ rtmsg_ifindex int32
+}
+
+in6_ifreq {
+ ifr6_addr ipv6_addr
+ ifr6_prefixlen int32
+ ifr6_ifindex int32
+}
diff --git a/sys/socket_inet6_amd64.const b/sys/socket_inet6_amd64.const
index 73d453519..88c853a06 100644
--- a/sys/socket_inet6_amd64.const
+++ b/sys/socket_inet6_amd64.const
@@ -3,6 +3,8 @@ AF_INET6 = 10
IP6T_SO_GET_REVISION_MATCH = 68
IP6T_SO_GET_REVISION_TARGET = 69
IP6T_SO_ORIGINAL_DST = 80
+IP6_RT_PRIO_ADDRCONF = 256
+IP6_RT_PRIO_USER = 1024
IPPROTO_IPV6 = 41
IPV6_2292DSTOPTS = 4
IPV6_2292HOPLIMIT = 8
@@ -62,6 +64,34 @@ MCAST_LEAVE_GROUP = 45
MCAST_LEAVE_SOURCE_GROUP = 47
MCAST_MSFILTER = 48
MCAST_UNBLOCK_SOURCE = 44
+RTF_ADDRCONF = 262144
+RTF_ALLONLINK = 131072
+RTF_ANYCAST = 1048576
+RTF_CACHE = 16777216
+RTF_DEFAULT = 65536
+RTF_DYNAMIC = 16
+RTF_EXPIRES = 4194304
+RTF_FLOW = 33554432
+RTF_GATEWAY = 2
+RTF_HOST = 4
+RTF_IRTT = 256
+RTF_LOCAL = 2147483648
+RTF_MODIFIED = 32
+RTF_MTU = 64
+RTF_NONEXTHOP = 2097152
+RTF_PCPU = 1073741824
+RTF_POLICY = 67108864
+RTF_PREFIX_RT = 524288
+RTF_REINSTATE = 8
+RTF_REJECT = 512
+RTF_ROUTEINFO = 8388608
+RTF_UP = 1
+RTF_WINDOW = 128
+SIOCADDRT = 35083
+SIOCDELRT = 35084
+SIOCDIFADDR = 35126
+SIOCSIFADDR = 35094
+SIOCSIFDSTADDR = 35096
__NR_accept = 43
__NR_accept4 = 288
__NR_bind = 49
@@ -69,6 +99,7 @@ __NR_connect = 42
__NR_getpeername = 52
__NR_getsockname = 51
__NR_getsockopt = 55
+__NR_ioctl = 16
__NR_recvfrom = 45
__NR_sendto = 44
__NR_setsockopt = 54
diff --git a/sys/socket_inet6_arm64.const b/sys/socket_inet6_arm64.const
index 41e764410..ae90cafee 100644
--- a/sys/socket_inet6_arm64.const
+++ b/sys/socket_inet6_arm64.const
@@ -3,6 +3,8 @@ AF_INET6 = 10
IP6T_SO_GET_REVISION_MATCH = 68
IP6T_SO_GET_REVISION_TARGET = 69
IP6T_SO_ORIGINAL_DST = 80
+IP6_RT_PRIO_ADDRCONF = 256
+IP6_RT_PRIO_USER = 1024
IPPROTO_IPV6 = 41
IPV6_2292DSTOPTS = 4
IPV6_2292HOPLIMIT = 8
@@ -62,6 +64,34 @@ MCAST_LEAVE_GROUP = 45
MCAST_LEAVE_SOURCE_GROUP = 47
MCAST_MSFILTER = 48
MCAST_UNBLOCK_SOURCE = 44
+RTF_ADDRCONF = 262144
+RTF_ALLONLINK = 131072
+RTF_ANYCAST = 1048576
+RTF_CACHE = 16777216
+RTF_DEFAULT = 65536
+RTF_DYNAMIC = 16
+RTF_EXPIRES = 4194304
+RTF_FLOW = 33554432
+RTF_GATEWAY = 2
+RTF_HOST = 4
+RTF_IRTT = 256
+RTF_LOCAL = 2147483648
+RTF_MODIFIED = 32
+RTF_MTU = 64
+RTF_NONEXTHOP = 2097152
+RTF_PCPU = 1073741824
+RTF_POLICY = 67108864
+RTF_PREFIX_RT = 524288
+RTF_REINSTATE = 8
+RTF_REJECT = 512
+RTF_ROUTEINFO = 8388608
+RTF_UP = 1
+RTF_WINDOW = 128
+SIOCADDRT = 35083
+SIOCDELRT = 35084
+SIOCDIFADDR = 35126
+SIOCSIFADDR = 35094
+SIOCSIFDSTADDR = 35096
__NR_accept = 202
__NR_accept4 = 242
__NR_bind = 200
@@ -69,6 +99,7 @@ __NR_connect = 203
__NR_getpeername = 205
__NR_getsockname = 204
__NR_getsockopt = 209
+__NR_ioctl = 29
__NR_recvfrom = 207
__NR_sendto = 206
__NR_setsockopt = 208
diff --git a/sys/socket_inet6_ppc64le.const b/sys/socket_inet6_ppc64le.const
index 5c4bd7348..df3a66d05 100644
--- a/sys/socket_inet6_ppc64le.const
+++ b/sys/socket_inet6_ppc64le.const
@@ -3,6 +3,8 @@ AF_INET6 = 10
IP6T_SO_GET_REVISION_MATCH = 68
IP6T_SO_GET_REVISION_TARGET = 69
IP6T_SO_ORIGINAL_DST = 80
+IP6_RT_PRIO_ADDRCONF = 256
+IP6_RT_PRIO_USER = 1024
IPPROTO_IPV6 = 41
IPV6_2292DSTOPTS = 4
IPV6_2292HOPLIMIT = 8
@@ -62,6 +64,34 @@ MCAST_LEAVE_GROUP = 45
MCAST_LEAVE_SOURCE_GROUP = 47
MCAST_MSFILTER = 48
MCAST_UNBLOCK_SOURCE = 44
+RTF_ADDRCONF = 262144
+RTF_ALLONLINK = 131072
+RTF_ANYCAST = 1048576
+RTF_CACHE = 16777216
+RTF_DEFAULT = 65536
+RTF_DYNAMIC = 16
+RTF_EXPIRES = 4194304
+RTF_FLOW = 33554432
+RTF_GATEWAY = 2
+RTF_HOST = 4
+RTF_IRTT = 256
+RTF_LOCAL = 2147483648
+RTF_MODIFIED = 32
+RTF_MTU = 64
+RTF_NONEXTHOP = 2097152
+RTF_PCPU = 1073741824
+RTF_POLICY = 67108864
+RTF_PREFIX_RT = 524288
+RTF_REINSTATE = 8
+RTF_REJECT = 512
+RTF_ROUTEINFO = 8388608
+RTF_UP = 1
+RTF_WINDOW = 128
+SIOCADDRT = 35083
+SIOCDELRT = 35084
+SIOCDIFADDR = 35126
+SIOCSIFADDR = 35094
+SIOCSIFDSTADDR = 35096
__NR_accept = 330
__NR_accept4 = 344
__NR_bind = 327
@@ -69,6 +99,7 @@ __NR_connect = 328
__NR_getpeername = 332
__NR_getsockname = 331
__NR_getsockopt = 340
+__NR_ioctl = 54
__NR_recvfrom = 337
__NR_sendto = 335
__NR_setsockopt = 339
diff --git a/sys/socket_inet_amd64.const b/sys/socket_inet_amd64.const
index 116e43ae3..7ad4f46a6 100644
--- a/sys/socket_inet_amd64.const
+++ b/sys/socket_inet_amd64.const
@@ -75,8 +75,19 @@ SIOCADDRT = 35083
SIOCDARP = 35155
SIOCDELRT = 35084
SIOCGARP = 35156
+SIOCGIFADDR = 35093
+SIOCGIFBRDADDR = 35097
+SIOCGIFDSTADDR = 35095
+SIOCGIFNETMASK = 35099
+SIOCGIFPFLAGS = 35125
SIOCRTMSG = 35085
SIOCSARP = 35157
+SIOCSIFADDR = 35094
+SIOCSIFBRDADDR = 35098
+SIOCSIFDSTADDR = 35096
+SIOCSIFFLAGS = 35092
+SIOCSIFNETMASK = 35100
+SIOCSIFPFLAGS = 35124
__NR_accept = 43
__NR_accept4 = 288
__NR_bind = 49
diff --git a/sys/socket_inet_arm64.const b/sys/socket_inet_arm64.const
index aaba7ef8d..c3589f412 100644
--- a/sys/socket_inet_arm64.const
+++ b/sys/socket_inet_arm64.const
@@ -75,8 +75,19 @@ SIOCADDRT = 35083
SIOCDARP = 35155
SIOCDELRT = 35084
SIOCGARP = 35156
+SIOCGIFADDR = 35093
+SIOCGIFBRDADDR = 35097
+SIOCGIFDSTADDR = 35095
+SIOCGIFNETMASK = 35099
+SIOCGIFPFLAGS = 35125
SIOCRTMSG = 35085
SIOCSARP = 35157
+SIOCSIFADDR = 35094
+SIOCSIFBRDADDR = 35098
+SIOCSIFDSTADDR = 35096
+SIOCSIFFLAGS = 35092
+SIOCSIFNETMASK = 35100
+SIOCSIFPFLAGS = 35124
__NR_accept = 202
__NR_accept4 = 242
__NR_bind = 200
diff --git a/sys/socket_inet_ppc64le.const b/sys/socket_inet_ppc64le.const
index 238b647d8..e81c0d3d3 100644
--- a/sys/socket_inet_ppc64le.const
+++ b/sys/socket_inet_ppc64le.const
@@ -75,8 +75,19 @@ SIOCADDRT = 35083
SIOCDARP = 35155
SIOCDELRT = 35084
SIOCGARP = 35156
+SIOCGIFADDR = 35093
+SIOCGIFBRDADDR = 35097
+SIOCGIFDSTADDR = 35095
+SIOCGIFNETMASK = 35099
+SIOCGIFPFLAGS = 35125
SIOCRTMSG = 35085
SIOCSARP = 35157
+SIOCSIFADDR = 35094
+SIOCSIFBRDADDR = 35098
+SIOCSIFDSTADDR = 35096
+SIOCSIFFLAGS = 35092
+SIOCSIFNETMASK = 35100
+SIOCSIFPFLAGS = 35124
__NR_accept = 330
__NR_accept4 = 344
__NR_bind = 327
diff --git a/sys/socket_inet_tcp.txt b/sys/socket_inet_tcp.txt
index 5dfe0c31c..124151fd8 100644
--- a/sys/socket_inet_tcp.txt
+++ b/sys/socket_inet_tcp.txt
@@ -3,7 +3,10 @@
# AF_INET and AF_INET6: TCP support
+include <asm/ioctls.h>
include <linux/tcp.h>
+include <net/tcp.h>
+include <uapi/linux/sockios.h>
resource sock_tcp[sock_in]
@@ -40,3 +43,67 @@ getsockopt$inet_tcp_buf(fd sock_tcp, level const[IPPROTO_TCP], optname flags[tcp
setsockopt$inet_tcp_buf(fd sock_tcp, level const[IPPROTO_TCP], optname flags[tcp_option_types_buf], optval buffer[in], optlen len[optval])
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
+
+ioctl$sock_inet_tcp_SIOCINQ(fd sock_tcp, cmd const[SIOCINQ], arg ptr[out, int32])
+ioctl$sock_inet6_tcp_SIOCINQ(fd sock_tcp6, cmd const[SIOCINQ], arg ptr[out, int32])
+
+ioctl$sock_inet_tcp_SIOCATMARK(fd sock_tcp, cmd const[SIOCATMARK], arg ptr[out, int32])
+ioctl$sock_inet6_tcp_SIOCATMARK(fd sock_tcp6, cmd const[SIOCATMARK], arg ptr[out, int32])
+
+ioctl$sock_inet_tcp_SIOCOUTQ(fd sock_tcp, cmd const[SIOCOUTQ], arg ptr[out, int32])
+ioctl$sock_inet6_tcp_SIOCOUTQ(fd sock_tcp6, cmd const[SIOCOUTQ], arg ptr[out, int32])
+
+ioctl$sock_inet_tcp_SIOCOUTQNSD(fd sock_tcp, cmd const[SIOCOUTQNSD], arg ptr[out, int32])
+ioctl$sock_inet6_tcp_SIOCOUTQNSD(fd sock_tcp6, cmd const[SIOCOUTQNSD], arg ptr[out, int32])
diff --git a/sys/socket_inet_tcp_amd64.const b/sys/socket_inet_tcp_amd64.const
index c91e484b6..f9e773af7 100644
--- a/sys/socket_inet_tcp_amd64.const
+++ b/sys/socket_inet_tcp_amd64.const
@@ -2,7 +2,15 @@
AF_INET = 2
AF_INET6 = 10
IPPROTO_TCP = 6
+SIOCATMARK = 35077
+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
@@ -15,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
@@ -32,6 +41,7 @@ TCP_TIMESTAMP = 24
TCP_USER_TIMEOUT = 18
TCP_WINDOW_CLAMP = 10
__NR_getsockopt = 55
+__NR_ioctl = 16
__NR_setsockopt = 54
__NR_socket = 41
__NR_socketpair = 53
diff --git a/sys/socket_inet_tcp_arm64.const b/sys/socket_inet_tcp_arm64.const
index 90b7b1a89..55aaf3703 100644
--- a/sys/socket_inet_tcp_arm64.const
+++ b/sys/socket_inet_tcp_arm64.const
@@ -2,7 +2,15 @@
AF_INET = 2
AF_INET6 = 10
IPPROTO_TCP = 6
+SIOCATMARK = 35077
+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
@@ -15,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
@@ -32,6 +41,7 @@ TCP_TIMESTAMP = 24
TCP_USER_TIMEOUT = 18
TCP_WINDOW_CLAMP = 10
__NR_getsockopt = 209
+__NR_ioctl = 29
__NR_setsockopt = 208
__NR_socket = 198
__NR_socketpair = 199
diff --git a/sys/socket_inet_tcp_ppc64le.const b/sys/socket_inet_tcp_ppc64le.const
index e4187f236..30cadff8b 100644
--- a/sys/socket_inet_tcp_ppc64le.const
+++ b/sys/socket_inet_tcp_ppc64le.const
@@ -2,7 +2,15 @@
AF_INET = 2
AF_INET6 = 10
IPPROTO_TCP = 6
+SIOCATMARK = 35077
+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
@@ -15,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
@@ -32,6 +41,7 @@ TCP_TIMESTAMP = 24
TCP_USER_TIMEOUT = 18
TCP_WINDOW_CLAMP = 10
__NR_getsockopt = 340
+__NR_ioctl = 54
__NR_setsockopt = 339
__NR_socket = 326
__NR_socketpair = 333
diff --git a/sys/socket_inet_udp.txt b/sys/socket_inet_udp.txt
index dddb4bb20..52073b21e 100644
--- a/sys/socket_inet_udp.txt
+++ b/sys/socket_inet_udp.txt
@@ -3,7 +3,9 @@
# AF_INET and AF_INET6: UDP support
+include <asm/ioctls.h>
include <linux/udp.h>
+include <uapi/linux/sockios.h>
resource sock_udp[sock_in]
@@ -42,3 +44,11 @@ setsockopt$inet_udp_encap(fd sock_udp, level const[IPPROTO_UDP], optname const[U
setsockopt$inet6_udp_encap(fd sock_udp6, level const[IPPROTO_UDP], optname const[UDP_ENCAP], optval ptr[in, flags[udp_encap_option_values, int32]], optlen len[optval])
# TODO: UDPLITE_SEND_CSCOV, UDPLITE_RECV_CSCOV
+
+# UDP ioctls
+
+ioctl$sock_inet_udp_SIOCINQ(fd sock_udp, cmd const[SIOCINQ], arg ptr[out, int32])
+ioctl$sock_inet6_udp_SIOCINQ(fd sock_udp6, cmd const[SIOCINQ], arg ptr[out, int32])
+
+ioctl$sock_inet_udp_SIOCOUTQ(fd sock_udp, cmd const[SIOCOUTQ], arg ptr[out, int32])
+ioctl$sock_inet6_udp_SIOCOUTQ(fd sock_udp6, cmd const[SIOCOUTQ], arg ptr[out, int32])
diff --git a/sys/socket_inet_udp_amd64.const b/sys/socket_inet_udp_amd64.const
index 4fcd3dfa7..04a4d2b49 100644
--- a/sys/socket_inet_udp_amd64.const
+++ b/sys/socket_inet_udp_amd64.const
@@ -2,6 +2,8 @@
AF_INET = 2
AF_INET6 = 10
IPPROTO_UDP = 17
+SIOCINQ = 21531
+SIOCOUTQ = 21521
SOCK_DGRAM = 2
UDP_CORK = 1
UDP_ENCAP = 100
@@ -13,6 +15,7 @@ UDP_ENCAP_L2TPINUDP = 3
UDP_NO_CHECK6_RX = 102
UDP_NO_CHECK6_TX = 101
__NR_getsockopt = 55
+__NR_ioctl = 16
__NR_setsockopt = 54
__NR_socket = 41
__NR_socketpair = 53
diff --git a/sys/socket_inet_udp_arm64.const b/sys/socket_inet_udp_arm64.const
index 111726315..ba6764344 100644
--- a/sys/socket_inet_udp_arm64.const
+++ b/sys/socket_inet_udp_arm64.const
@@ -2,6 +2,8 @@
AF_INET = 2
AF_INET6 = 10
IPPROTO_UDP = 17
+SIOCINQ = 21531
+SIOCOUTQ = 21521
SOCK_DGRAM = 2
UDP_CORK = 1
UDP_ENCAP = 100
@@ -13,6 +15,7 @@ UDP_ENCAP_L2TPINUDP = 3
UDP_NO_CHECK6_RX = 102
UDP_NO_CHECK6_TX = 101
__NR_getsockopt = 209
+__NR_ioctl = 29
__NR_setsockopt = 208
__NR_socket = 198
__NR_socketpair = 199
diff --git a/sys/socket_inet_udp_ppc64le.const b/sys/socket_inet_udp_ppc64le.const
index d30a309f5..95e285816 100644
--- a/sys/socket_inet_udp_ppc64le.const
+++ b/sys/socket_inet_udp_ppc64le.const
@@ -2,6 +2,8 @@
AF_INET = 2
AF_INET6 = 10
IPPROTO_UDP = 17
+SIOCINQ = 1074030207
+SIOCOUTQ = 1074033779
SOCK_DGRAM = 2
UDP_CORK = 1
UDP_ENCAP = 100
@@ -13,6 +15,7 @@ UDP_ENCAP_L2TPINUDP = 3
UDP_NO_CHECK6_RX = 102
UDP_NO_CHECK6_TX = 101
__NR_getsockopt = 340
+__NR_ioctl = 54
__NR_setsockopt = 339
__NR_socket = 326
__NR_socketpair = 333
diff --git a/sys/vnet.txt b/sys/vnet.txt
index 56c9b88fd..cf439c36e 100644
--- a/sys/vnet.txt
+++ b/sys/vnet.txt
@@ -436,6 +436,10 @@ include <net/ipv6.h>
ipv6_types = IPPROTO_IP, IPPROTO_ICMP, IPPROTO_IGMP, IPPROTO_IPIP, IPPROTO_TCP, IPPROTO_EGP, IPPROTO_PUP, IPPROTO_UDP, IPPROTO_IDP, IPPROTO_TP, IPPROTO_DCCP, IPPROTO_IPV6, IPPROTO_RSVP, IPPROTO_GRE, IPPROTO_ESP, IPPROTO_AH, IPPROTO_MTP, IPPROTO_BEETPH, IPPROTO_ENCAP, IPPROTO_PIM, IPPROTO_COMP, IPPROTO_SCTP, IPPROTO_UDPLITE, IPPROTO_MPLS, IPPROTO_RAW, IPPROTO_HOPOPTS, IPPROTO_ROUTING, IPPROTO_FRAGMENT, IPPROTO_ICMPV6, IPPROTO_NONE, IPPROTO_DSTOPTS, IPPROTO_MH, NEXTHDR_HOP, NEXTHDR_TCP, NEXTHDR_UDP, NEXTHDR_IPV6, NEXTHDR_ROUTING, NEXTHDR_FRAGMENT, NEXTHDR_GRE, NEXTHDR_ESP, NEXTHDR_AUTH, NEXTHDR_ICMP, NEXTHDR_NONE, NEXTHDR_DEST, NEXTHDR_SCTP, NEXTHDR_MOBILITY
+ipv6_addr_empty {
+ a0 array[const[0x00, int8], 16]
+}
+
# This corresponds to LOCAL_IPV6 ("fd00::%02hxaa" % pid) in executor/common.h
ipv6_addr_local {
a0 const[0xfd, int8]
@@ -458,6 +462,7 @@ ipv6_addr_loopback {
} [packed]
ipv6_addr [
+ empty ipv6_addr_empty
local ipv6_addr_local
remote ipv6_addr_remote
loopback ipv6_addr_loopback