From dd717f262b4b2d6727ff6b31bcedb144f6249ed5 Mon Sep 17 00:00:00 2001 From: Andrey Konovalov Date: Mon, 10 Apr 2017 20:01:26 +0200 Subject: sys: fix sendmmsg and recvmmsg --- sys/socket.txt | 59 ++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 24 deletions(-) (limited to 'sys/socket.txt') diff --git a/sys/socket.txt b/sys/socket.txt index 686b6aee1..3ea218915 100644 --- a/sys/socket.txt +++ b/sys/socket.txt @@ -25,23 +25,24 @@ recvfrom(fd sock, buf buffer[out], len len[buf], f flags[recv_flags], addr ptr[i getsockname(fd sock, addr ptr[out, sockaddr_all], addrlen ptr[inout, len[addr, int32]]) getpeername(fd sock, peer ptr[out, sockaddr_all], peerlen ptr[inout, len[peer, int32]]) -listen(fd sock, backlog int32) -shutdown(fd sock, how flags[shutdown_flags]) sendmsg(fd sock, msg ptr[in, send_msghdr], f flags[send_flags]) -sendmmsg(fd sock, mmsg ptr[in, array[send_msghdr]], vlen len[mmsg], f flags[send_flags]) +sendmmsg(fd sock, mmsg ptr[in, array[send_mmsghdr]], vlen len[mmsg], f flags[send_flags]) recvmsg(fd sock, msg ptr[in, recv_msghdr], f flags[recv_flags]) -recvmmsg(fd sock, mmsg ptr[in, array[recv_msghdr]], vlen len[mmsg], f flags[recv_flags]) +recvmmsg(fd sock, mmsg ptr[in, array[recv_mmsghdr]], vlen len[mmsg], f flags[recv_flags]) + +listen(fd sock, backlog int32) +shutdown(fd sock, how flags[shutdown_flags]) getsockopt(fd sock, level int32, optname int32, optval buffer[out], optlen ptr[inout, len[optval, int32]]) setsockopt(fd sock, level int32, optname int32, optval buffer[in], optlen len[optval]) socket_domain = AF_UNIX, AF_INET, AF_INET6, AF_IPX, AF_NETLINK, AF_X25, AF_AX25, AF_ATMPVC, AF_APPLETALK, AF_PACKET -socket_type = SOCK_STREAM, SOCK_DGRAM, SOCK_SEQPACKET, SOCK_RAW, SOCK_RDM, SOCK_PACKET, SOCK_NONBLOCK, SOCK_CLOEXEC +socket_type = SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, SOCK_RDM, SOCK_SEQPACKET, SOCK_DCCP, SOCK_PACKET, SOCK_NONBLOCK, SOCK_CLOEXEC accept_flags = SOCK_NONBLOCK, SOCK_CLOEXEC shutdown_flags = SHUT_RD, SHUT_WR send_flags = MSG_CONFIRM, MSG_DONTROUTE, MSG_DONTWAIT, MSG_EOR, MSG_MORE, MSG_NOSIGNAL, MSG_OOB, MSG_PROBE, MSG_BATCH, MSG_FASTOPEN recv_flags = MSG_CMSG_CLOEXEC, MSG_DONTWAIT, MSG_ERRQUEUE, MSG_OOB, MSG_PEEK, MSG_TRUNC, MSG_WAITALL, MSG_WAITFORONE -sock_level = IPPROTO_ICMP, SOL_IP, SOL_TCP, SOL_UDP, SOL_IPV6, SOL_ICMPV6, SOL_SCTP, SOL_UDPLITE, SOL_RAW, SOL_IPX, SOL_AX25, SOL_ATALK, SOL_NETROM, SOL_ROSE, SOL_DECNET, SOL_PACKET, SOL_ATM, SOL_AAL, SOL_IRDA, SOL_NETBEUI, SOL_LLC, SOL_DCCP, SOL_NETLINK, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE, SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM +cmsg_levels = SOL_SOCKET, IPPROTO_ICMP, SOL_IP, SOL_TCP, SOL_UDP, SOL_IPV6, SOL_ICMPV6, SOL_SCTP, SOL_UDPLITE, SOL_RAW, SOL_IPX, SOL_AX25, SOL_ATALK, SOL_NETROM, SOL_ROSE, SOL_DECNET, SOL_PACKET, SOL_ATM, SOL_AAL, SOL_IRDA, SOL_NETBEUI, SOL_LLC, SOL_DCCP, SOL_NETLINK, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE, SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM # This sockaddr type corresponds to the struct sockaddr and is 16 bytes or less. sockaddr [ @@ -141,30 +142,40 @@ sockaddr_all_generic { } send_msghdr { - addr ptr[in, sockaddr_all, opt] - addrlen len[addr, int32] - vec ptr[in, array[iovec_in]] - vlen len[vec, intptr] - ctrl ptr[in, array[cmsghdr]] - ctrllen len[ctrl, intptr] - f flags[send_flags, int32] + msg_name ptr[in, sockaddr_all, opt] + msg_namelen len[msg_name, int32] + msg_iov ptr[in, array[iovec_in]] + msg_iovlen len[msg_iov, intptr] + msg_control ptr[in, array[cmsghdr]] + msg_controllen len[msg_control, intptr] + msg_flags flags[send_flags, int32] +} + +send_mmsghdr { + msg_hdr send_msghdr + msg_len int32 } recv_msghdr { - addr ptr[out, sockaddr_all, opt] - addrlen len[addr, int32] - vec ptr[in, array[iovec_out]] - vlen len[vec, intptr] - ctrl buffer[out] - ctrllen len[ctrl, intptr] - f int32 + msg_name ptr[out, sockaddr_all, opt] + msg_namelen len[msg_name, int32] + msg_iov ptr[in, array[iovec_out]] + msg_iovlen len[msg_iov, intptr] + msg_control buffer[out] + msg_controllen len[msg_control, intptr] + msg_flags int32 +} + +recv_mmsghdr { + msg_hdr recv_msghdr + msg_len int32 } cmsghdr { - len len[parent, intptr] - level flags[sock_level, int32] - type int32 - data array[int8] + cmsg_len len[parent, intptr] + cmsg_level flags[cmsg_levels, int32] + cmsg_type int32 + data array[int8] } [align_ptr] # Socket options -- cgit mrf-deployment From 116bba9de7452253190bacb8c740aedaaa4932df Mon Sep 17 00:00:00 2001 From: Andrey Konovalov Date: Tue, 11 Apr 2017 13:43:17 +0200 Subject: sys: rename sockaddr_all to sockaddr_storage --- sys/socket.txt | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'sys/socket.txt') diff --git a/sys/socket.txt b/sys/socket.txt index 3ea218915..13002b6b6 100644 --- a/sys/socket.txt +++ b/sys/socket.txt @@ -16,14 +16,14 @@ resource sock[fd] socket(domain flags[socket_domain], type flags[socket_type], proto int8) sock socketpair(domain flags[socket_domain], type flags[socket_type], proto int8, fds ptr[out, pipefd]) -bind(fd sock, addr ptr[in, sockaddr_all], addrlen len[addr]) -connect(fd sock, addr ptr[in, sockaddr_all], addrlen len[addr]) -accept(fd sock, peer ptr[out, sockaddr_all, opt], peerlen ptr[inout, len[peer, int32]]) sock -accept4(fd sock, peer ptr[out, sockaddr_all, opt], peerlen ptr[inout, len[peer, int32]], flags flags[accept_flags]) sock -sendto(fd sock, buf buffer[in], len len[buf], f flags[send_flags], addr ptr[in, sockaddr_all, opt], addrlen len[addr]) -recvfrom(fd sock, buf buffer[out], len len[buf], f flags[recv_flags], addr ptr[in, sockaddr_all, opt], addrlen len[addr]) -getsockname(fd sock, addr ptr[out, sockaddr_all], addrlen ptr[inout, len[addr, int32]]) -getpeername(fd sock, peer ptr[out, sockaddr_all], peerlen ptr[inout, len[peer, int32]]) +bind(fd sock, addr ptr[in, sockaddr_storage], addrlen len[addr]) +connect(fd sock, addr ptr[in, sockaddr_storage], addrlen len[addr]) +accept(fd sock, peer ptr[out, sockaddr_storage, opt], peerlen ptr[inout, len[peer, int32]]) sock +accept4(fd sock, peer ptr[out, sockaddr_storage, opt], peerlen ptr[inout, len[peer, int32]], flags flags[accept_flags]) sock +sendto(fd sock, buf buffer[in], len len[buf], f flags[send_flags], addr ptr[in, sockaddr_storage, opt], addrlen len[addr]) +recvfrom(fd sock, buf buffer[out], len len[buf], f flags[recv_flags], addr ptr[in, sockaddr_storage, opt], addrlen len[addr]) +getsockname(fd sock, addr ptr[out, sockaddr_storage], addrlen ptr[inout, len[addr, int32]]) +getpeername(fd sock, peer ptr[out, sockaddr_storage], peerlen ptr[inout, len[peer, int32]]) sendmsg(fd sock, msg ptr[in, send_msghdr], f flags[send_flags]) sendmmsg(fd sock, mmsg ptr[in, array[send_mmsghdr]], vlen len[mmsg], f flags[send_flags]) @@ -87,8 +87,8 @@ sockaddr [ generic sockaddr_generic ] -# This sockaddr can be of arbitrary size and it's meant to be passed as a pointer. -sockaddr_all [ +# This sockaddr type corresponds to the sockaddr_storage type and is 128 bytes size. +sockaddr_storage [ un sockaddr_un in sockaddr_in ax25 sockaddr_ax25 @@ -128,7 +128,7 @@ sockaddr_all [ # TODO: AF_VSOCK # TODO: AF_QIPCRTR ethernet sockaddr_ethernet - generic sockaddr_all_generic + generic sockaddr_storage_generic ] [varlen] sockaddr_generic { @@ -136,13 +136,13 @@ sockaddr_generic { sa_data array[int8, 14] } -sockaddr_all_generic { +sockaddr_storage_generic { sa_family flags[socket_domain, int16] sa_data array[int8, 126] } send_msghdr { - msg_name ptr[in, sockaddr_all, opt] + msg_name ptr[in, sockaddr_storage, opt] msg_namelen len[msg_name, int32] msg_iov ptr[in, array[iovec_in]] msg_iovlen len[msg_iov, intptr] @@ -157,7 +157,7 @@ send_mmsghdr { } recv_msghdr { - msg_name ptr[out, sockaddr_all, opt] + msg_name ptr[out, sockaddr_storage, opt] msg_namelen len[msg_name, int32] msg_iov ptr[in, array[iovec_out]] msg_iovlen len[msg_iov, intptr] -- cgit mrf-deployment