From 6b4ffb21884b0c03bc9faa710821fc936462e069 Mon Sep 17 00:00:00 2001 From: Andrey Konovalov Date: Tue, 4 Apr 2017 14:49:59 +0200 Subject: sys: add more socket ioctls --- sys/socket.txt | 92 +++++++++++++++++++++++++++++++++++++++++++----- sys/socket_amd64.const | 70 ++++++++++++++++++++++++++++++++++++ sys/socket_arm64.const | 70 ++++++++++++++++++++++++++++++++++++ sys/socket_ppc64le.const | 70 ++++++++++++++++++++++++++++++++++++ 4 files changed, 293 insertions(+), 9 deletions(-) (limited to 'sys') 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 include -include +include include include include +include include -include 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 -- cgit mrf-deployment