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