1 /* 2 * Copyright (c) 2011-2012 Intel Corporation. All rights reserved. 3 * 4 * This software is available to you under a choice of one of two 5 * licenses. You may choose to be licensed under the terms of the GNU 6 * General Public License (GPL) Version 2, available from the file 7 * COPYING in the main directory of this source tree, or the 8 * OpenIB.org BSD license below: 9 * 10 * Redistribution and use in source and binary forms, with or 11 * without modification, are permitted provided that the following 12 * conditions are met: 13 * 14 * - Redistributions of source code must retain the above 15 * copyright notice, this list of conditions and the following 16 * disclaimer. 17 * 18 * - Redistributions in binary form must reproduce the above 19 * copyright notice, this list of conditions and the following 20 * disclaimer in the documentation and/or other materials 21 * provided with the distribution. 22 * 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30 * SOFTWARE. 31 */ 32 33 #if !defined(RSOCKET_H) 34 #define RSOCKET_H 35 36 #include <infiniband/verbs.h> 37 #include <rdma/rdma_cma.h> 38 #include <sys/socket.h> 39 #include <errno.h> 40 #include <poll.h> 41 #include <sys/select.h> 42 #include <sys/mman.h> 43 44 #ifdef __cplusplus 45 extern "C" { 46 #endif 47 48 int rsocket(int domain, int type, int protocol); 49 int rbind(int socket, const struct sockaddr *addr, socklen_t addrlen); 50 int rlisten(int socket, int backlog); 51 int raccept(int socket, struct sockaddr *addr, socklen_t *addrlen); 52 int rconnect(int socket, const struct sockaddr *addr, socklen_t addrlen); 53 int rshutdown(int socket, int how); 54 int rclose(int socket); 55 56 ssize_t rrecv(int socket, void *buf, size_t len, int flags); 57 ssize_t rrecvfrom(int socket, void *buf, size_t len, int flags, 58 struct sockaddr *src_addr, socklen_t *addrlen); 59 ssize_t rrecvmsg(int socket, struct msghdr *msg, int flags); 60 ssize_t rsend(int socket, const void *buf, size_t len, int flags); 61 ssize_t rsendto(int socket, const void *buf, size_t len, int flags, 62 const struct sockaddr *dest_addr, socklen_t addrlen); 63 ssize_t rsendmsg(int socket, const struct msghdr *msg, int flags); 64 ssize_t rread(int socket, void *buf, size_t count); 65 ssize_t rreadv(int socket, const struct iovec *iov, int iovcnt); 66 ssize_t rwrite(int socket, const void *buf, size_t count); 67 ssize_t rwritev(int socket, const struct iovec *iov, int iovcnt); 68 69 int rpoll(struct pollfd *fds, nfds_t nfds, int timeout); 70 int rselect(int nfds, fd_set *readfds, fd_set *writefds, 71 fd_set *exceptfds, struct timeval *timeout); 72 73 int rgetpeername(int socket, struct sockaddr *addr, socklen_t *addrlen); 74 int rgetsockname(int socket, struct sockaddr *addr, socklen_t *addrlen); 75 76 #define SOL_RDMA 0x10000 77 enum { 78 RDMA_SQSIZE, 79 RDMA_RQSIZE, 80 RDMA_INLINE, 81 RDMA_IOMAPSIZE, 82 RDMA_ROUTE 83 }; 84 85 int rsetsockopt(int socket, int level, int optname, 86 const void *optval, socklen_t optlen); 87 int rgetsockopt(int socket, int level, int optname, 88 void *optval, socklen_t *optlen); 89 int rfcntl(int socket, int cmd, ... /* arg */ ); 90 91 off_t riomap(int socket, void *buf, size_t len, int prot, int flags, off_t offset); 92 int riounmap(int socket, void *buf, size_t len); 93 size_t riowrite(int socket, const void *buf, size_t count, off_t offset, int flags); 94 95 #ifdef __cplusplus 96 } 97 #endif 98 99 #endif /* RSOCKET_H */ 100