1d6b92ffaSHans Petter Selasky /* 2d6b92ffaSHans Petter Selasky * Copyright (c) 2005-2012 Intel Corporation. All rights reserved. 3d6b92ffaSHans Petter Selasky * 4d6b92ffaSHans Petter Selasky * This software is available to you under a choice of one of two 5d6b92ffaSHans Petter Selasky * licenses. You may choose to be licensed under the terms of the GNU 6d6b92ffaSHans Petter Selasky * General Public License (GPL) Version 2, available from the file 7d6b92ffaSHans Petter Selasky * COPYING in the main directory of this source tree, or the 8d6b92ffaSHans Petter Selasky * OpenIB.org BSD license below: 9d6b92ffaSHans Petter Selasky * 10d6b92ffaSHans Petter Selasky * Redistribution and use in source and binary forms, with or 11d6b92ffaSHans Petter Selasky * without modification, are permitted provided that the following 12d6b92ffaSHans Petter Selasky * conditions are met: 13d6b92ffaSHans Petter Selasky * 14d6b92ffaSHans Petter Selasky * - Redistributions of source code must retain the above 15d6b92ffaSHans Petter Selasky * copyright notice, this list of conditions and the following 16d6b92ffaSHans Petter Selasky * disclaimer. 17d6b92ffaSHans Petter Selasky * 18d6b92ffaSHans Petter Selasky * - Redistributions in binary form must reproduce the above 19d6b92ffaSHans Petter Selasky * copyright notice, this list of conditions and the following 20d6b92ffaSHans Petter Selasky * disclaimer in the documentation and/or other materials 21d6b92ffaSHans Petter Selasky * provided with the distribution. 22d6b92ffaSHans Petter Selasky * 23d6b92ffaSHans Petter Selasky * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24d6b92ffaSHans Petter Selasky * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25d6b92ffaSHans Petter Selasky * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26d6b92ffaSHans Petter Selasky * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27d6b92ffaSHans Petter Selasky * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28d6b92ffaSHans Petter Selasky * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29d6b92ffaSHans Petter Selasky * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30d6b92ffaSHans Petter Selasky * SOFTWARE. 31d6b92ffaSHans Petter Selasky * 32d6b92ffaSHans Petter Selasky * $Id$ 33d6b92ffaSHans Petter Selasky */ 34d6b92ffaSHans Petter Selasky 35d6b92ffaSHans Petter Selasky #include <stdlib.h> 36d6b92ffaSHans Petter Selasky #include <sys/types.h> 37d6b92ffaSHans Petter Selasky #include <infiniband/endian.h> 38d6b92ffaSHans Petter Selasky #include <poll.h> 39d6b92ffaSHans Petter Selasky 40d6b92ffaSHans Petter Selasky #include <rdma/rdma_cma.h> 41d6b92ffaSHans Petter Selasky #include <rdma/rsocket.h> 42d6b92ffaSHans Petter Selasky #include <infiniband/ib.h> 43d6b92ffaSHans Petter Selasky 44d6b92ffaSHans Petter Selasky extern int use_rs; 45d6b92ffaSHans Petter Selasky 46d6b92ffaSHans Petter Selasky #define rs_socket(f,t,p) use_rs ? rsocket(f,t,p) : socket(f,t,p) 47d6b92ffaSHans Petter Selasky #define rs_bind(s,a,l) use_rs ? rbind(s,a,l) : bind(s,a,l) 48d6b92ffaSHans Petter Selasky #define rs_listen(s,b) use_rs ? rlisten(s,b) : listen(s,b) 49d6b92ffaSHans Petter Selasky #define rs_connect(s,a,l) use_rs ? rconnect(s,a,l) : connect(s,a,l) 50d6b92ffaSHans Petter Selasky #define rs_accept(s,a,l) use_rs ? raccept(s,a,l) : accept(s,a,l) 51d6b92ffaSHans Petter Selasky #define rs_shutdown(s,h) use_rs ? rshutdown(s,h) : shutdown(s,h) 52d6b92ffaSHans Petter Selasky #define rs_close(s) use_rs ? rclose(s) : close(s) 53d6b92ffaSHans Petter Selasky #define rs_recv(s,b,l,f) use_rs ? rrecv(s,b,l,f) : recv(s,b,l,f) 54d6b92ffaSHans Petter Selasky #define rs_send(s,b,l,f) use_rs ? rsend(s,b,l,f) : send(s,b,l,f) 55d6b92ffaSHans Petter Selasky #define rs_recvfrom(s,b,l,f,a,al) \ 56d6b92ffaSHans Petter Selasky use_rs ? rrecvfrom(s,b,l,f,a,al) : recvfrom(s,b,l,f,a,al) 57d6b92ffaSHans Petter Selasky #define rs_sendto(s,b,l,f,a,al) \ 58d6b92ffaSHans Petter Selasky use_rs ? rsendto(s,b,l,f,a,al) : sendto(s,b,l,f,a,al) 59d6b92ffaSHans Petter Selasky #define rs_poll(f,n,t) use_rs ? rpoll(f,n,t) : poll(f,n,t) 60d6b92ffaSHans Petter Selasky #define rs_fcntl(s,c,p) use_rs ? rfcntl(s,c,p) : fcntl(s,c,p) 61d6b92ffaSHans Petter Selasky #define rs_setsockopt(s,l,n,v,ol) \ 62d6b92ffaSHans Petter Selasky use_rs ? rsetsockopt(s,l,n,v,ol) : setsockopt(s,l,n,v,ol) 63d6b92ffaSHans Petter Selasky #define rs_getsockopt(s,l,n,v,ol) \ 64d6b92ffaSHans Petter Selasky use_rs ? rgetsockopt(s,l,n,v,ol) : getsockopt(s,l,n,v,ol) 65d6b92ffaSHans Petter Selasky 66d6b92ffaSHans Petter Selasky union socket_addr { 67d6b92ffaSHans Petter Selasky struct sockaddr sa; 68d6b92ffaSHans Petter Selasky struct sockaddr_in sin; 69d6b92ffaSHans Petter Selasky struct sockaddr_in6 sin6; 70d6b92ffaSHans Petter Selasky }; 71d6b92ffaSHans Petter Selasky 72d6b92ffaSHans Petter Selasky enum rs_optimization { 73d6b92ffaSHans Petter Selasky opt_mixed, 74d6b92ffaSHans Petter Selasky opt_latency, 75d6b92ffaSHans Petter Selasky opt_bandwidth 76d6b92ffaSHans Petter Selasky }; 77d6b92ffaSHans Petter Selasky 78d6b92ffaSHans Petter Selasky int get_rdma_addr(const char *src, const char *dst, const char *port, 79d6b92ffaSHans Petter Selasky struct rdma_addrinfo *hints, struct rdma_addrinfo **rai); 80d6b92ffaSHans Petter Selasky 81d6b92ffaSHans Petter Selasky void size_str(char *str, size_t ssize, long long size); 82d6b92ffaSHans Petter Selasky void cnt_str(char *str, size_t ssize, long long cnt); 83d6b92ffaSHans Petter Selasky int size_to_count(int size); 84d6b92ffaSHans Petter Selasky void format_buf(void *buf, int size); 85d6b92ffaSHans Petter Selasky int verify_buf(void *buf, int size); 86d6b92ffaSHans Petter Selasky int do_poll(struct pollfd *fds, int timeout); 87