[TOOLS] fix send_bw test for UD.
[mirror/winof/.git] / tools / perftests / user / perf_defs.h
1 /*
2  * Copyright (c) 2005 Mellanox Technologies Ltd.  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  * $Id$
33  *
34  * Author: Yossi Leybovich  <sleybo@mellanox.co.il>
35  */
36
37 #ifndef H_PERF_SOCK_H
38 #define H_PERF_SOCK_H
39
40
41 #include <WINSOCK2.h>
42 #include <Ws2tcpip.h>
43
44 #include <stdio.h>
45 #include <stdlib.h>
46 #include <string.h>
47 #include <malloc.h>
48 #include <time.h>
49 #include <limits.h>
50
51
52 #include <iba/ib_types.h>
53 #include <iba/ib_al.h>
54
55 #define KEY_MSG_SIZE (sizeof "0000:000000:000000:00000000:0000000000000000")
56 #define KEY_PRINT_FMT "%04x:%06x:%06x:%08x:%x"
57 #define KEY_SCAN_FMT "%x:%x:%x:%x:%x"
58
59 #define VERSION 2.0
60 #define ALL 1
61
62 #define RC 0
63 #define UC 1
64 #define UD 3
65
66
67 #define PINGPONG_SEND_WRID  1
68 #define PINGPONG_RECV_WRID  2
69 #define PINGPONG_RDMA_WRID      3
70
71
72 #if 0
73 #define PERF_ENTER      printf("%s: ===>\n",__FUNCTION__);
74 #define PERF_EXIT printf("%s: <===\n",__FUNCTION__);
75 #define PERF_DEBUG      printf
76 #else
77 #define PERF_ENTER
78 #define PERF_EXIT
79 #define PERF_DEBUG //
80 #endif
81
82 struct pingpong_context {
83         ib_ca_handle_t  context;
84         ib_ca_handle_t  ca;
85         ib_ca_attr_t            *ca_attr;
86         ib_al_handle_t          al;
87 //PORTED        struct ibv_comp_channel *channel;
88         void*                           channel; //PORTED REMOVE
89         ib_pd_handle_t  pd;
90         ib_mr_handle_t  mr;
91         uint32_t                        rkey;
92         uint32_t                        lkey;
93         ib_cq_handle_t  scq;
94         ib_cq_handle_t  rcq;
95         ib_qp_handle_t  *qp;
96         ib_qp_attr_t            *qp_attr;
97         void                            *buf;
98         unsigned                        size;
99         int                             tx_depth;
100
101         ib_local_ds_t           list;
102         ib_local_ds_t           recv_list;
103         ib_send_wr_t            wr;
104         ib_recv_wr_t            rwr;
105
106         ib_av_handle_t  av;
107
108         volatile char           *post_buf;
109         volatile char           *poll_buf;
110
111         int                             *scnt,*ccnt;
112 };
113
114
115 struct pingpong_dest {
116         ib_net16_t      lid;
117         ib_net32_t      qpn;
118         ib_net32_t      psn;
119         uint32_t                rkey;
120         uint64_t                vaddr;
121 };
122
123
124 static int pp_write_keys(SOCKET sockfd, const struct pingpong_dest *my_dest);
125 static int pp_read_keys(SOCKET sockfd, struct pingpong_dest *rem_dest);
126  SOCKET pp_client_connect(const char *servername, int port);
127
128  int pp_client_exch_dest(SOCKET sockfd, const struct pingpong_dest *my_dest,
129                                 struct pingpong_dest *rem_dest);
130
131 SOCKET pp_server_connect(int port);
132 int pp_server_exch_dest(SOCKET sockfd, const struct pingpong_dest *my_dest,
133         struct pingpong_dest* rem_dest);
134
135
136
137 #endif