diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2018-01-19 13:45:12 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2018-01-19 18:06:43 +0100 |
| commit | 02dc66caa8095ccfe9683e81788faa41a4768897 (patch) | |
| tree | 53ebaa756dff85f12da2173f05bf8b6e24343476 /sys/linux/socket_rds.txt | |
| parent | 4c17ea3e18b6708359865f8ee3a578f310e1e478 (diff) | |
sys/linux: add AF_RDS descriptions
Diffstat (limited to 'sys/linux/socket_rds.txt')
| -rw-r--r-- | sys/linux/socket_rds.txt | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/sys/linux/socket_rds.txt b/sys/linux/socket_rds.txt new file mode 100644 index 000000000..ce63b7902 --- /dev/null +++ b/sys/linux/socket_rds.txt @@ -0,0 +1,109 @@ +# Copyright 2018 syzkaller project authors. All rights reserved. +# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. + +# AF_RDS support. + +include <linux/socket.h> +include <linux/net.h> +include <uapi/linux/rds.h> + +resource sock_rds[sock] + +socket$rds(domain const[AF_RDS], type const[SOCK_SEQPACKET], proto const[0]) sock_rds +bind$rds(fd sock_rds, addr ptr[in, sockaddr_in], addrlen len[addr]) +connect$rds(fd sock_rds, addr ptr[in, sockaddr_in], addrlen len[addr]) +sendmsg$rds(fd sock_rds, msg ptr[in, msghdr_rds], f flags[send_flags]) + +setsockopt$RDS_CANCEL_SENT_TO(fd sock_rds, level const[SOL_RDS], opt const[RDS_CANCEL_SENT_TO], val ptr[in, sockaddr_in], len len[val]) +setsockopt$RDS_GET_MR(fd sock_rds, level const[SOL_RDS], opt const[RDS_GET_MR], val ptr[in, rds_get_mr_args], len len[val]) +setsockopt$RDS_GET_MR_FOR_DEST(fd sock_rds, level const[SOL_RDS], opt const[RDS_GET_MR_FOR_DEST], val ptr[in, rds_get_mr_for_dest_args], len len[val]) +setsockopt$RDS_FREE_MR(fd sock_rds, level const[SOL_RDS], opt const[RDS_FREE_MR], val ptr[in, rds_free_mr_args], len len[val]) +setsockopt$RDS_RECVERR(fd sock_rds, level const[SOL_RDS], opt const[RDS_RECVERR], val ptr[in, bool32], len len[val]) +setsockopt$RDS_CONG_MONITOR(fd sock_rds, level const[SOL_RDS], opt const[RDS_CONG_MONITOR], val ptr[in, bool32], len len[val]) +setsockopt$SO_RDS_TRANSPORT(fd sock_rds, level const[SOL_RDS], opt const[SO_RDS_TRANSPORT], val ptr[in, flags[rds_transport, int32]], len len[val]) +setsockopt$SO_RDS_MSG_RXPATH_LATENCY(fd sock_rds, level const[SOL_RDS], opt const[SO_RDS_MSG_RXPATH_LATENCY], val ptr[in, rds_rx_trace_so], len len[val]) + +msghdr_rds { + addr ptr[in, sockaddr_in, opt] + addrlen len[addr, int32] + vec ptr[in, array[iovec[out, array[int8]]]] + vlen len[vec, intptr] + ctrl ptr[in, array[cmsghdr_rds], opt] + ctrllen bytesize[ctrl, intptr] + f flags[send_flags, int32] +} + +cmsghdr_rds [ + rdma_args cmsghdr_rds_t[RDS_CMSG_RDMA_ARGS, rds_rdma_args] + rdma_dest cmsghdr_rds_t[RDS_CMSG_RDMA_DEST, rds_rdma_cookie_t] + rdma_map cmsghdr_rds_t[RDS_CMSG_RDMA_MAP, rds_get_mr_args] + fadd cmsghdr_rds_t[RDS_CMSG_ATOMIC_FADD, rds_atomic_args] + cswp cmsghdr_rds_t[RDS_CMSG_ATOMIC_CSWP, rds_atomic_args] + mask_fadd cmsghdr_rds_t[RDS_CMSG_MASKED_ATOMIC_FADD, rds_atomic_args] + mask_cswp cmsghdr_rds_t[RDS_CMSG_MASKED_ATOMIC_CSWP, rds_atomic_args] +] [varlen] + +type cmsghdr_rds_t[TYPE, DATA] { + cmsg_len len[parent, intptr] + cmsg_level const[SOL_RDS, int32] + cmsg_type const[TYPE, int32] + data DATA +} [align_ptr] + +rds_rdma_args { + cookie rds_rdma_cookie_t + remote_vec rds_iovec + local_vec ptr64[in, array[rds_iovec]] + nr_local len[local_vec, int64] + flags flags[rds_rdma_flags, int64] + user_token int64 +} + +rds_atomic_args { + cookie rds_rdma_cookie_t + local_addr ptr64[in, int64] + remote_addr ptr64[in, int64] + arg1 int64 + arg2 int64 + mask1 int64 + mask2 int64 + flags flags[rds_rdma_flags, int64] + user_token int64 +} + +rds_get_mr_args { + vec rds_iovec + cookie_addr ptr[out, int8] + flags flags[rds_rdma_flags, int64] +} + +rds_get_mr_for_dest_args { + dest_addr sockaddr_storage + vec rds_iovec + cookie_addr ptr[out, int8] + flags flags[rds_rdma_flags, int64] +} [packed] + +rds_free_mr_args { + cookie rds_rdma_cookie_t + flags flags[rds_rdma_flags, int64] +} + +rds_rx_trace_so { + rx_traces len[rx_trace_pos, int8] + rx_trace_pos array[int8, 0:RDS_MSG_RX_DGRAM_TRACE_MAX] +} + +rds_iovec { + addr ptr64[out, array[int8]] + bytes len[addr, int64] +} + +rds_rdma_cookie_t { +# This should be a resource, but it's unclear how to obtain it. + key int32 + off int32 +} [align_8] + +rds_transport = RDS_TRANS_IB, RDS_TRANS_IWARP, RDS_TRANS_TCP, RDS_TRANS_NONE +rds_rdma_flags = RDS_RDMA_READWRITE, RDS_RDMA_FENCE, RDS_RDMA_INVALIDATE, RDS_RDMA_USE_ONCE, RDS_RDMA_DONTWAIT, RDS_RDMA_NOTIFY_ME, RDS_RDMA_SILENT |
