aboutsummaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorAndrey Konovalov <andreyknvl@google.com>2017-04-04 14:49:59 +0200
committerAndrey Konovalov <andreyknvl@google.com>2017-04-07 16:15:16 +0200
commit6b4ffb21884b0c03bc9faa710821fc936462e069 (patch)
treefc277f36de81f49999f5aa7723d5d43e95a519ae /sys
parent334de6f374bbf575e0a81c7f8b70486e75be7287 (diff)
sys: add more socket ioctls
Diffstat (limited to 'sys')
-rw-r--r--sys/socket.txt92
-rw-r--r--sys/socket_amd64.const70
-rw-r--r--sys/socket_arm64.const70
-rw-r--r--sys/socket_ppc64le.const70
4 files changed, 293 insertions, 9 deletions
diff --git a/sys/socket.txt b/sys/socket.txt
index e36d40366..988921d2e 100644
--- a/sys/socket.txt
+++ b/sys/socket.txt
@@ -3,13 +3,14 @@
# TODO: due to autobind a socket can bind to port 0, that will result in a random port which is not reproducible
+include <asm/ioctls.h>
include <linux/if_tun.h>
-include <linux/socket.h>
+include <linux/if_bridge.h>
include <linux/net.h>
include <linux/net_tstamp.h>
include <linux/route.h>
+include <linux/socket.h>
include <uapi/linux/in.h>
-include <asm/ioctls.h>
resource sock[fd]
@@ -164,7 +165,9 @@ cmsghdr {
data array[int8]
} [align_ptr]
-# Generic socket options
+# Socket options
+
+# http://lxr.free-electrons.com/source/include/uapi/asm-generic/socket.h
setsockopt$sock_void(fd sock, level const[SOL_SOCKET], optname flags[sockopt_opt_sock_void], optval const[0], optlen const[0])
getsockopt$sock_int(fd sock, level const[SOL_SOCKET], optname flags[sockopt_opt_sock_int], optval ptr[out, int32], optlen ptr[inout, len[optval, int32]])
@@ -180,27 +183,67 @@ setsockopt$sock_attach_bpf(fd sock, level const[SOL_SOCKET], optname const[SO_AT
setsockopt$SO_TIMESTAMPING(fd sock, level const[SOL_SOCKET], optname const[SO_TIMESTAMPING], optval ptr[in, flags[sockopt_so_timestamping, int32]], optlen len[optval])
getsockopt$SO_TIMESTAMPING(fd sock, level const[SOL_SOCKET], optname const[SO_TIMESTAMPING], optval ptr[out, int32], optlen ptr[inout, len[optval, int32]])
setsockopt$SO_ATTACH_FILTER(fd sock, level const[SOL_SOCKET], optname const[SO_ATTACH_FILTER], optval ptr[in, sock_fprog], optlen len[optval])
+setsockopt$SO_BINDTODEVICE(fd sock, level const[SOL_SOCKET], optname const[SO_BINDTODEVICE], optval ptr[in, devname], optlen len[optval])
+getsockopt$SO_BINDTODEVICE(fd sock, level const[SOL_SOCKET], optname const[SO_BINDTODEVICE], optval ptr[out, devname], optlen len[optval])
+getsockopt$SO_PEERCRED(fd sock, level const[SOL_SOCKET], optname const[SO_PEERCRED], optval ptr[out, ucred], optlen len[optval])
getsockopt$sock_buf(fd sock, level const[SOL_SOCKET], optname flags[sockopt_opt_sock_buf], optval buffer[out], optlen ptr[inout, len[optval, int32]])
sockopt_opt_sock_void = SO_DETACH_FILTER, SO_MARK
sockopt_opt_sock_int = SO_ACCEPTCONN, SO_BROADCAST, SO_DEBUG, SO_DOMAIN, SO_ERROR, SO_DONTROUTE, SO_KEEPALIVE, SO_PEEK_OFF, SO_PRIORITY, SO_PROTOCOL, SO_RCVBUF, SO_RCVBUFFORCE, SO_RCVLOWAT, SO_SNDLOWAT, SO_REUSEADDR, SO_SNDBUF, SO_SNDBUFFORCE, SO_TIMESTAMP, SO_TYPE, SO_REUSEPORT, SO_OOBINLINE, SO_NO_CHECK, SO_PASSCRED, SO_TIMESTAMPNS, SO_LOCK_FILTER, SO_PASSSEC, SO_RXQ_OVFL, SO_WIFI_STATUS, SO_NOFCS, SO_SELECT_ERR_QUEUE, SO_BUSY_POLL, SO_MAX_PACING_RATE
sockopt_opt_sock_timeval = SO_RCVTIMEO, SO_SNDTIMEO
-sockopt_opt_sock_buf = SO_BINDTODEVICE, SO_PEERCRED, SO_PEERNAME, SO_PEERSEC, SO_GET_FILTER
+sockopt_opt_sock_buf = SO_PEERNAME, SO_PEERSEC, SO_GET_FILTER
sockopt_so_timestamping = SOF_TIMESTAMPING_TX_HARDWARE, SOF_TIMESTAMPING_TX_SOFTWARE, SOF_TIMESTAMPING_RX_HARDWARE, SOF_TIMESTAMPING_RX_SOFTWARE, SOF_TIMESTAMPING_SOFTWARE, SOF_TIMESTAMPING_SYS_HARDWARE, SOF_TIMESTAMPING_RAW_HARDWARE, SOF_TIMESTAMPING_OPT_ID, SOF_TIMESTAMPING_TX_SCHED, SOF_TIMESTAMPING_TX_ACK, SOF_TIMESTAMPING_OPT_CMSG, SOF_TIMESTAMPING_OPT_TSONLY
-# Generic socket ioctls
+# Socket ioctls
+
+# Since some socket ioctls are forwarded to the network device, adding device ioctls here as well.
# http://lxr.free-electrons.com/source/include/uapi/linux/sockios.h
+# http://lxr.free-electrons.com/source/include/uapi/asm-generic/sockios.h
+
+# TODO: SIOCADDRT, SIOCDELRT, SIOCRTMSG
+# TODO: ETHTOOL commands (SIOCETHTOOL, ...)
+# TODO: SIOCDARP, SIOCGARP, SIOCSARP, SIOCDRARP, SIOCGRARP, SIOCSRARP
+# TODO: SIOCGIFVLAN, SIOCSIFVLAN
+# TODO: SIOCGSTAMP, SIOCGSTAMPNS
+
ioctl$SIOCOUTQ(fd sock, cmd const[SIOCOUTQ], arg ptr[out, int32])
ioctl$SIOCINQ(fd sock, cmd const[SIOCINQ], arg ptr[out, int32])
-ioctl$SIOCGIFNAME(fd sock, cmd const[SIOCGIFNAME], arg ptr[inout, ifreq])
-
-# SIOCSIFLINK not used
ioctl$SIOCGIFCONF(fd sock, cmd const[SIOCGIFNAME], arg ptr[inout, ifconf])
-# TODO: more here
+ifreq_ioctls = SIOCGIFNAME, SIOCSIFLINK, SIOCGIFFLAGS, SIOCSIFFLAGS, SIOCGIFADDR, SIOCSIFADDR, SIOCGIFDSTADDR, SIOCSIFDSTADDR, SIOCGIFBRDADDR, SIOCSIFBRDADDR, SIOCGIFNETMASK, SIOCSIFNETMASK, SIOCGIFMETRIC, SIOCSIFMETRIC, SIOCGIFMEM, SIOCSIFMEM, SIOCGIFMTU, SIOCSIFMTU, SIOCSIFNAME, SIOCSIFHWADDR, SIOCGIFENCAP, SIOCSIFENCAP, SIOCGIFHWADDR, SIOCGIFSLAVE, SIOCSIFSLAVE, SIOCADDMULTI, SIOCDELMULTI, SIOCGIFINDEX, SIOCSIFPFLAGS, SIOCGIFPFLAGS, SIOCDIFADDR, SIOCSIFHWBROADCAST, SIOCGIFCOUNT, SIOCGIFTXQLEN, SIOCSIFTXQLEN, SIOCETHTOOL, SIOCGMIIPHY, SIOCGMIIREG, SIOCSMIIREG, SIOCWANDEV, SIOCGIFMAP, SIOCSIFMAP, SIOCBONDENSLAVE, SIOCBONDRELEASE, SIOCBONDSETHWADDR, SIOCBONDSLAVEINFOQUERY, SIOCBONDINFOQUERY, SIOCBONDCHANGEACTIVE, SIOCBRADDIF, SIOCBRDELIF, SIOCSHWTSTAMP, SIOCGHWTSTAMP
+
+ioctl$ifreq(fd sock, cmd flags[ifreq_ioctls], arg ptr[inout, ifreq])
+
+ioctl$SIOCGIFBR(fd sock, cmd const[SIOCGIFBR], arg ptr[inout, brctl_arg])
+ioctl$SIOCSIFBR(fd sock, cmd const[SIOCGIFBR], arg ptr[inout, brctl_arg])
+
+ioctl$SIOCOUTQNSD(fd sock, cmd const[SIOCOUTQNSD], arg ptr[out, int32])
+
+ioctl$SIOCGSKNS(fd sock, cmd const[SIOCGSKNS], arg ptr[inout, int32])
+
+ioctl$SIOCADDDLCI(fd sock, cmd const[SIOCADDDLCI], arg ptr[inout, dlci_add])
+ioctl$SIOCDELDLCI(fd sock, cmd const[SIOCDELDLCI], arg ptr[in, dlci_add])
+
+ioctl$SIOCBRADDBR(fd sock, cmd const[SIOCBRADDBR], arg ptr[in, devname])
+ioctl$SIOCBRDELBR(fd sock, cmd const[SIOCBRDELBR], arg ptr[in, devname])
+
+define SIOCDEVPRIVATE_BEG (SIOCDEVPRIVATE)
+define SIOCDEVPRIVATE_END (SIOCDEVPRIVATE + 15)
+
+define SIOCPROTOPRIVATE_BEG (SIOCPROTOPRIVATE)
+define SIOCPROTOPRIVATE_END (SIOCPROTOPRIVATE + 15)
+
+ioctl$netdev_private(fd sock, cmd int16[SIOCDEVPRIVATE_BEG:SIOCDEVPRIVATE_END], arg ptr[in, array[int8]])
+ioctl$proto_private(fd sock, cmd int16[SIOCPROTOPRIVATE_BEG:SIOCPROTOPRIVATE_END], arg ptr[in, array[int8]])
+
+ioctl$FIOSETOWN(fd sock, cmd const[FIOSETOWN], arg ptr[in, pid])
+ioctl$SIOCSPGRP(fd sock, cmd const[SIOCSPGRP], arg ptr[in, pid])
+
+ioctl$FIOGETOWN(fd sock, cmd const[FIOGETOWN], arg ptr[out, pid])
+ioctl$SIOCGPGRP(fd sock, cmd const[SIOCGPGRP], arg ptr[out, pid])
ifreq {
ifr_ifrn devname
@@ -315,3 +358,34 @@ ifconf_req {
ifc_len len[ifcu_req, int32]
ifcu_req ptr[inout, ifreq, opt]
}
+
+brctl_cmds = BRCTL_GET_VERSION, BRCTL_GET_BRIDGES, BRCTL_ADD_BRIDGE, BRCTL_DEL_BRIDGE
+
+brctl_arg [
+ get brctl_arg_get
+ add_del brctl_arg_add_del
+ generic brctl_arg_generic
+]
+
+brctl_arg_get {
+ cmd const[BRCTL_GET_BRIDGES, int64]
+ buf ptr[out, array[int8]]
+ indices int64
+}
+
+brctl_arg_add_del {
+ cmd const[BRCTL_ADD_BRIDGE, int64]
+ devname ptr[in, devname]
+ pad int64
+}
+
+brctl_arg_generic {
+ a0 int64
+ a1 int64
+ a2 int64
+}
+
+dlci_add {
+ devname devname
+ dlci int16
+}
diff --git a/sys/socket_amd64.const b/sys/socket_amd64.const
index 2da848af5..894687482 100644
--- a/sys/socket_amd64.const
+++ b/sys/socket_amd64.const
@@ -9,6 +9,12 @@ AF_NETLINK = 16
AF_PACKET = 17
AF_UNIX = 1
AF_X25 = 9
+BRCTL_ADD_BRIDGE = 2
+BRCTL_DEL_BRIDGE = 3
+BRCTL_GET_BRIDGES = 1
+BRCTL_GET_VERSION = 0
+FIOGETOWN = 35075
+FIOSETOWN = 35073
IFF_ATTACH_QUEUE = 512
IFF_DETACH_QUEUE = 1024
IFF_MULTI_QUEUE = 256
@@ -40,9 +46,73 @@ MSG_WAITALL = 256
MSG_WAITFORONE = 65536
SHUT_RD = 0
SHUT_WR = 1
+SIOCADDDLCI = 35200
+SIOCADDMULTI = 35121
+SIOCBONDCHANGEACTIVE = 35221
+SIOCBONDENSLAVE = 35216
+SIOCBONDINFOQUERY = 35220
+SIOCBONDRELEASE = 35217
+SIOCBONDSETHWADDR = 35218
+SIOCBONDSLAVEINFOQUERY = 35219
+SIOCBRADDBR = 35232
+SIOCBRADDIF = 35234
+SIOCBRDELBR = 35233
+SIOCBRDELIF = 35235
+SIOCDELDLCI = 35201
+SIOCDELMULTI = 35122
+SIOCDEVPRIVATE_BEG = 35312
+SIOCDEVPRIVATE_END = 35327
+SIOCDIFADDR = 35126
+SIOCETHTOOL = 35142
+SIOCGHWTSTAMP = 35249
+SIOCGIFADDR = 35093
+SIOCGIFBR = 35136
+SIOCGIFBRDADDR = 35097
+SIOCGIFCOUNT = 35128
+SIOCGIFDSTADDR = 35095
+SIOCGIFENCAP = 35109
+SIOCGIFFLAGS = 35091
+SIOCGIFHWADDR = 35111
+SIOCGIFINDEX = 35123
+SIOCGIFMAP = 35184
+SIOCGIFMEM = 35103
+SIOCGIFMETRIC = 35101
+SIOCGIFMTU = 35105
SIOCGIFNAME = 35088
+SIOCGIFNETMASK = 35099
+SIOCGIFPFLAGS = 35125
+SIOCGIFSLAVE = 35113
+SIOCGIFTXQLEN = 35138
+SIOCGMIIPHY = 35143
+SIOCGMIIREG = 35144
+SIOCGPGRP = 35076
+SIOCGSKNS = 35148
SIOCINQ = 21531
SIOCOUTQ = 21521
+SIOCOUTQNSD = 35147
+SIOCPROTOPRIVATE_BEG = 35296
+SIOCPROTOPRIVATE_END = 35311
+SIOCSHWTSTAMP = 35248
+SIOCSIFADDR = 35094
+SIOCSIFBRDADDR = 35098
+SIOCSIFDSTADDR = 35096
+SIOCSIFENCAP = 35110
+SIOCSIFFLAGS = 35092
+SIOCSIFHWADDR = 35108
+SIOCSIFHWBROADCAST = 35127
+SIOCSIFLINK = 35089
+SIOCSIFMAP = 35185
+SIOCSIFMEM = 35104
+SIOCSIFMETRIC = 35102
+SIOCSIFMTU = 35106
+SIOCSIFNAME = 35107
+SIOCSIFNETMASK = 35100
+SIOCSIFPFLAGS = 35124
+SIOCSIFSLAVE = 35120
+SIOCSIFTXQLEN = 35139
+SIOCSMIIREG = 35145
+SIOCSPGRP = 35074
+SIOCWANDEV = 35146
SOCK_CLOEXEC = 524288
SOCK_DGRAM = 2
SOCK_NONBLOCK = 2048
diff --git a/sys/socket_arm64.const b/sys/socket_arm64.const
index aef08d7a2..bbf0e6628 100644
--- a/sys/socket_arm64.const
+++ b/sys/socket_arm64.const
@@ -9,6 +9,12 @@ AF_NETLINK = 16
AF_PACKET = 17
AF_UNIX = 1
AF_X25 = 9
+BRCTL_ADD_BRIDGE = 2
+BRCTL_DEL_BRIDGE = 3
+BRCTL_GET_BRIDGES = 1
+BRCTL_GET_VERSION = 0
+FIOGETOWN = 35075
+FIOSETOWN = 35073
IFF_ATTACH_QUEUE = 512
IFF_DETACH_QUEUE = 1024
IFF_MULTI_QUEUE = 256
@@ -40,9 +46,73 @@ MSG_WAITALL = 256
MSG_WAITFORONE = 65536
SHUT_RD = 0
SHUT_WR = 1
+SIOCADDDLCI = 35200
+SIOCADDMULTI = 35121
+SIOCBONDCHANGEACTIVE = 35221
+SIOCBONDENSLAVE = 35216
+SIOCBONDINFOQUERY = 35220
+SIOCBONDRELEASE = 35217
+SIOCBONDSETHWADDR = 35218
+SIOCBONDSLAVEINFOQUERY = 35219
+SIOCBRADDBR = 35232
+SIOCBRADDIF = 35234
+SIOCBRDELBR = 35233
+SIOCBRDELIF = 35235
+SIOCDELDLCI = 35201
+SIOCDELMULTI = 35122
+SIOCDEVPRIVATE_BEG = 35312
+SIOCDEVPRIVATE_END = 35327
+SIOCDIFADDR = 35126
+SIOCETHTOOL = 35142
+SIOCGHWTSTAMP = 35249
+SIOCGIFADDR = 35093
+SIOCGIFBR = 35136
+SIOCGIFBRDADDR = 35097
+SIOCGIFCOUNT = 35128
+SIOCGIFDSTADDR = 35095
+SIOCGIFENCAP = 35109
+SIOCGIFFLAGS = 35091
+SIOCGIFHWADDR = 35111
+SIOCGIFINDEX = 35123
+SIOCGIFMAP = 35184
+SIOCGIFMEM = 35103
+SIOCGIFMETRIC = 35101
+SIOCGIFMTU = 35105
SIOCGIFNAME = 35088
+SIOCGIFNETMASK = 35099
+SIOCGIFPFLAGS = 35125
+SIOCGIFSLAVE = 35113
+SIOCGIFTXQLEN = 35138
+SIOCGMIIPHY = 35143
+SIOCGMIIREG = 35144
+SIOCGPGRP = 35076
+SIOCGSKNS = 35148
SIOCINQ = 21531
SIOCOUTQ = 21521
+SIOCOUTQNSD = 35147
+SIOCPROTOPRIVATE_BEG = 35296
+SIOCPROTOPRIVATE_END = 35311
+SIOCSHWTSTAMP = 35248
+SIOCSIFADDR = 35094
+SIOCSIFBRDADDR = 35098
+SIOCSIFDSTADDR = 35096
+SIOCSIFENCAP = 35110
+SIOCSIFFLAGS = 35092
+SIOCSIFHWADDR = 35108
+SIOCSIFHWBROADCAST = 35127
+SIOCSIFLINK = 35089
+SIOCSIFMAP = 35185
+SIOCSIFMEM = 35104
+SIOCSIFMETRIC = 35102
+SIOCSIFMTU = 35106
+SIOCSIFNAME = 35107
+SIOCSIFNETMASK = 35100
+SIOCSIFPFLAGS = 35124
+SIOCSIFSLAVE = 35120
+SIOCSIFTXQLEN = 35139
+SIOCSMIIREG = 35145
+SIOCSPGRP = 35074
+SIOCWANDEV = 35146
SOCK_CLOEXEC = 524288
SOCK_DGRAM = 2
SOCK_NONBLOCK = 2048
diff --git a/sys/socket_ppc64le.const b/sys/socket_ppc64le.const
index d4243b037..d66e232e1 100644
--- a/sys/socket_ppc64le.const
+++ b/sys/socket_ppc64le.const
@@ -9,6 +9,12 @@ AF_NETLINK = 16
AF_PACKET = 17
AF_UNIX = 1
AF_X25 = 9
+BRCTL_ADD_BRIDGE = 2
+BRCTL_DEL_BRIDGE = 3
+BRCTL_GET_BRIDGES = 1
+BRCTL_GET_VERSION = 0
+FIOGETOWN = 35075
+FIOSETOWN = 35073
IFF_ATTACH_QUEUE = 512
IFF_DETACH_QUEUE = 1024
IFF_MULTI_QUEUE = 256
@@ -40,9 +46,73 @@ MSG_WAITALL = 256
MSG_WAITFORONE = 65536
SHUT_RD = 0
SHUT_WR = 1
+SIOCADDDLCI = 35200
+SIOCADDMULTI = 35121
+SIOCBONDCHANGEACTIVE = 35221
+SIOCBONDENSLAVE = 35216
+SIOCBONDINFOQUERY = 35220
+SIOCBONDRELEASE = 35217
+SIOCBONDSETHWADDR = 35218
+SIOCBONDSLAVEINFOQUERY = 35219
+SIOCBRADDBR = 35232
+SIOCBRADDIF = 35234
+SIOCBRDELBR = 35233
+SIOCBRDELIF = 35235
+SIOCDELDLCI = 35201
+SIOCDELMULTI = 35122
+SIOCDEVPRIVATE_BEG = 35312
+SIOCDEVPRIVATE_END = 35327
+SIOCDIFADDR = 35126
+SIOCETHTOOL = 35142
+SIOCGHWTSTAMP = 35249
+SIOCGIFADDR = 35093
+SIOCGIFBR = 35136
+SIOCGIFBRDADDR = 35097
+SIOCGIFCOUNT = 35128
+SIOCGIFDSTADDR = 35095
+SIOCGIFENCAP = 35109
+SIOCGIFFLAGS = 35091
+SIOCGIFHWADDR = 35111
+SIOCGIFINDEX = 35123
+SIOCGIFMAP = 35184
+SIOCGIFMEM = 35103
+SIOCGIFMETRIC = 35101
+SIOCGIFMTU = 35105
SIOCGIFNAME = 35088
+SIOCGIFNETMASK = 35099
+SIOCGIFPFLAGS = 35125
+SIOCGIFSLAVE = 35113
+SIOCGIFTXQLEN = 35138
+SIOCGMIIPHY = 35143
+SIOCGMIIREG = 35144
+SIOCGPGRP = 35076
+SIOCGSKNS = 35148
SIOCINQ = 1074030207
SIOCOUTQ = 1074033779
+SIOCOUTQNSD = 35147
+SIOCPROTOPRIVATE_BEG = 35296
+SIOCPROTOPRIVATE_END = 35311
+SIOCSHWTSTAMP = 35248
+SIOCSIFADDR = 35094
+SIOCSIFBRDADDR = 35098
+SIOCSIFDSTADDR = 35096
+SIOCSIFENCAP = 35110
+SIOCSIFFLAGS = 35092
+SIOCSIFHWADDR = 35108
+SIOCSIFHWBROADCAST = 35127
+SIOCSIFLINK = 35089
+SIOCSIFMAP = 35185
+SIOCSIFMEM = 35104
+SIOCSIFMETRIC = 35102
+SIOCSIFMTU = 35106
+SIOCSIFNAME = 35107
+SIOCSIFNETMASK = 35100
+SIOCSIFPFLAGS = 35124
+SIOCSIFSLAVE = 35120
+SIOCSIFTXQLEN = 35139
+SIOCSMIIREG = 35145
+SIOCSPGRP = 35074
+SIOCWANDEV = 35146
SOCK_CLOEXEC = 524288
SOCK_DGRAM = 2
SOCK_NONBLOCK = 2048