1*c39526b7SPramod Gunjikar /*
2*c39526b7SPramod Gunjikar  * This file contains definitions used in OFED defined user/kernel
3*c39526b7SPramod Gunjikar  * interfaces. These are imported from the OFED header rdma_user_cm.h. Oracle
4*c39526b7SPramod Gunjikar  * elects to have and use the contents of rdma_user_cm.h under and governed
5*c39526b7SPramod Gunjikar  * by the OpenIB.org BSD license (see below for for full license text).
6*c39526b7SPramod Gunjikar  * However, * the following notice accompanied the original version of this
7*c39526b7SPramod Gunjikar  * file:
8*c39526b7SPramod Gunjikar  */
9*c39526b7SPramod Gunjikar 
10*c39526b7SPramod Gunjikar /*
11*c39526b7SPramod Gunjikar  * Copyright (c) 2005-2006 Intel Corporation.  All rights reserved.
12*c39526b7SPramod Gunjikar  *
13*c39526b7SPramod Gunjikar  * This software is available to you under a choice of one of two
14*c39526b7SPramod Gunjikar  * licenses.  You may choose to be licensed under the terms of the GNU
15*c39526b7SPramod Gunjikar  * General Public License (GPL) Version 2, available from the file
16*c39526b7SPramod Gunjikar  * COPYING in the main directory of this source tree, or the
17*c39526b7SPramod Gunjikar  * OpenIB.org BSD license below:
18*c39526b7SPramod Gunjikar  *
19*c39526b7SPramod Gunjikar  *     Redistribution and use in source and binary forms, with or
20*c39526b7SPramod Gunjikar  *     without modification, are permitted provided that the following
21*c39526b7SPramod Gunjikar  *     conditions are met:
22*c39526b7SPramod Gunjikar  *
23*c39526b7SPramod Gunjikar  *      - Redistributions of source code must retain the above
24*c39526b7SPramod Gunjikar  *        copyright notice, this list of conditions and the following
25*c39526b7SPramod Gunjikar  *        disclaimer.
26*c39526b7SPramod Gunjikar  *
27*c39526b7SPramod Gunjikar  *      - Redistributions in binary form must reproduce the above
28*c39526b7SPramod Gunjikar  *        copyright notice, this list of conditions and the following
29*c39526b7SPramod Gunjikar  *        disclaimer in the documentation and/or other materials
30*c39526b7SPramod Gunjikar  *        provided with the distribution.
31*c39526b7SPramod Gunjikar  *
32*c39526b7SPramod Gunjikar  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
33*c39526b7SPramod Gunjikar  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
34*c39526b7SPramod Gunjikar  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
35*c39526b7SPramod Gunjikar  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
36*c39526b7SPramod Gunjikar  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
37*c39526b7SPramod Gunjikar  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
38*c39526b7SPramod Gunjikar  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
39*c39526b7SPramod Gunjikar  * SOFTWARE.
40*c39526b7SPramod Gunjikar  */
41*c39526b7SPramod Gunjikar 
42*c39526b7SPramod Gunjikar #ifndef _SYS_IB_CLIENTS_OF_RDMA_RDMA_USER_CM_H
43*c39526b7SPramod Gunjikar #define	_SYS_IB_CLIENTS_OF_RDMA_RDMA_USER_CM_H
44*c39526b7SPramod Gunjikar 
45*c39526b7SPramod Gunjikar #ifdef __cplusplus
46*c39526b7SPramod Gunjikar extern "C" {
47*c39526b7SPramod Gunjikar #endif
48*c39526b7SPramod Gunjikar 
49*c39526b7SPramod Gunjikar #include <sys/types.h>
50*c39526b7SPramod Gunjikar #include <sys/socket.h>
51*c39526b7SPramod Gunjikar #include <sys/ib/clients/of/rdma/ib_user_verbs.h>
52*c39526b7SPramod Gunjikar #include <sys/ib/clients/of/rdma/ib_user_sa.h>
53*c39526b7SPramod Gunjikar 
54*c39526b7SPramod Gunjikar #define	RDMA_USER_CM_ABI_VERSION	4
55*c39526b7SPramod Gunjikar 
56*c39526b7SPramod Gunjikar #define	RDMA_MAX_PRIVATE_DATA		256
57*c39526b7SPramod Gunjikar 
58*c39526b7SPramod Gunjikar #pragma pack(1)
59*c39526b7SPramod Gunjikar enum {
60*c39526b7SPramod Gunjikar 	RDMA_USER_CM_CMD_CREATE_ID,
61*c39526b7SPramod Gunjikar 	RDMA_USER_CM_CMD_DESTROY_ID,
62*c39526b7SPramod Gunjikar 	RDMA_USER_CM_CMD_BIND_ADDR,
63*c39526b7SPramod Gunjikar 	RDMA_USER_CM_CMD_RESOLVE_ADDR,
64*c39526b7SPramod Gunjikar 	RDMA_USER_CM_CMD_RESOLVE_ROUTE,
65*c39526b7SPramod Gunjikar 	RDMA_USER_CM_CMD_QUERY_ROUTE,
66*c39526b7SPramod Gunjikar 	RDMA_USER_CM_CMD_CONNECT,
67*c39526b7SPramod Gunjikar 	RDMA_USER_CM_CMD_LISTEN,
68*c39526b7SPramod Gunjikar 	RDMA_USER_CM_CMD_ACCEPT,
69*c39526b7SPramod Gunjikar 	RDMA_USER_CM_CMD_REJECT,
70*c39526b7SPramod Gunjikar 	RDMA_USER_CM_CMD_DISCONNECT,
71*c39526b7SPramod Gunjikar 	RDMA_USER_CM_CMD_INIT_QP_ATTR,
72*c39526b7SPramod Gunjikar 	RDMA_USER_CM_CMD_GET_EVENT,
73*c39526b7SPramod Gunjikar 	RDMA_USER_CM_CMD_GET_OPTION,
74*c39526b7SPramod Gunjikar 	RDMA_USER_CM_CMD_SET_OPTION,
75*c39526b7SPramod Gunjikar 	RDMA_USER_CM_CMD_NOTIFY,
76*c39526b7SPramod Gunjikar 	RDMA_USER_CM_CMD_JOIN_MCAST,
77*c39526b7SPramod Gunjikar 	RDMA_USER_CM_CMD_LEAVE_MCAST
78*c39526b7SPramod Gunjikar };
79*c39526b7SPramod Gunjikar 
80*c39526b7SPramod Gunjikar /*
81*c39526b7SPramod Gunjikar  * command ABI structures.
82*c39526b7SPramod Gunjikar  */
83*c39526b7SPramod Gunjikar struct rdma_ucm_cmd_hdr {
84*c39526b7SPramod Gunjikar 	uint32_t cmd;
85*c39526b7SPramod Gunjikar 	uint16_t in;
86*c39526b7SPramod Gunjikar 	uint16_t out;
87*c39526b7SPramod Gunjikar };
88*c39526b7SPramod Gunjikar 
89*c39526b7SPramod Gunjikar struct rdma_ucm_create_id {
90*c39526b7SPramod Gunjikar 	uint64_t uid;
91*c39526b7SPramod Gunjikar 	ofv_resp_addr_t response;
92*c39526b7SPramod Gunjikar 	uint16_t ps;
93*c39526b7SPramod Gunjikar 	uint8_t  reserved[6];
94*c39526b7SPramod Gunjikar };
95*c39526b7SPramod Gunjikar 
96*c39526b7SPramod Gunjikar struct rdma_ucm_create_id_resp {
97*c39526b7SPramod Gunjikar 	uint32_t id;
98*c39526b7SPramod Gunjikar };
99*c39526b7SPramod Gunjikar 
100*c39526b7SPramod Gunjikar struct rdma_ucm_destroy_id {
101*c39526b7SPramod Gunjikar 	ofv_resp_addr_t response;
102*c39526b7SPramod Gunjikar 	uint32_t id;
103*c39526b7SPramod Gunjikar 	uint32_t reserved;
104*c39526b7SPramod Gunjikar };
105*c39526b7SPramod Gunjikar 
106*c39526b7SPramod Gunjikar struct rdma_ucm_destroy_id_resp {
107*c39526b7SPramod Gunjikar 	uint32_t events_reported;
108*c39526b7SPramod Gunjikar };
109*c39526b7SPramod Gunjikar 
110*c39526b7SPramod Gunjikar struct rdma_ucm_bind_addr {
111*c39526b7SPramod Gunjikar 	uint64_t response;
112*c39526b7SPramod Gunjikar 	struct sockaddr_in6 addr;
113*c39526b7SPramod Gunjikar 	uint32_t id;
114*c39526b7SPramod Gunjikar 	uint32_t reserved;
115*c39526b7SPramod Gunjikar };
116*c39526b7SPramod Gunjikar 
117*c39526b7SPramod Gunjikar struct rdma_ucm_resolve_addr {
118*c39526b7SPramod Gunjikar 	struct sockaddr_in6 src_addr;
119*c39526b7SPramod Gunjikar 	struct sockaddr_in6 dst_addr;
120*c39526b7SPramod Gunjikar 	uint32_t id;
121*c39526b7SPramod Gunjikar 	uint32_t timeout_ms;
122*c39526b7SPramod Gunjikar };
123*c39526b7SPramod Gunjikar 
124*c39526b7SPramod Gunjikar struct rdma_ucm_resolve_route {
125*c39526b7SPramod Gunjikar 	uint32_t id;
126*c39526b7SPramod Gunjikar 	uint32_t timeout_ms;
127*c39526b7SPramod Gunjikar };
128*c39526b7SPramod Gunjikar 
129*c39526b7SPramod Gunjikar struct rdma_ucm_query_route {
130*c39526b7SPramod Gunjikar 	ofv_resp_addr_t response;
131*c39526b7SPramod Gunjikar 	uint32_t id;
132*c39526b7SPramod Gunjikar 	uint32_t reserved;
133*c39526b7SPramod Gunjikar };
134*c39526b7SPramod Gunjikar 
135*c39526b7SPramod Gunjikar struct rdma_ucm_query_route_resp {
136*c39526b7SPramod Gunjikar 	uint64_t node_guid;
137*c39526b7SPramod Gunjikar 	struct ib_user_path_rec ib_route[2];
138*c39526b7SPramod Gunjikar 	struct sockaddr_in6 src_addr;
139*c39526b7SPramod Gunjikar 	struct sockaddr_in6 dst_addr;
140*c39526b7SPramod Gunjikar 	uint32_t num_paths;
141*c39526b7SPramod Gunjikar 	uint8_t port_num;
142*c39526b7SPramod Gunjikar 	uint8_t reserved[3];
143*c39526b7SPramod Gunjikar };
144*c39526b7SPramod Gunjikar 
145*c39526b7SPramod Gunjikar struct rdma_ucm_conn_param {
146*c39526b7SPramod Gunjikar 	uint32_t qp_num;
147*c39526b7SPramod Gunjikar 	uint32_t reserved;
148*c39526b7SPramod Gunjikar 	uint8_t  private_data[RDMA_MAX_PRIVATE_DATA];
149*c39526b7SPramod Gunjikar 	uint8_t  private_data_len;
150*c39526b7SPramod Gunjikar 	uint8_t  srq;
151*c39526b7SPramod Gunjikar 	uint8_t  responder_resources;
152*c39526b7SPramod Gunjikar 	uint8_t  initiator_depth;
153*c39526b7SPramod Gunjikar 	uint8_t  flow_control;
154*c39526b7SPramod Gunjikar 	uint8_t  retry_count;
155*c39526b7SPramod Gunjikar 	uint8_t  rnr_retry_count;
156*c39526b7SPramod Gunjikar 	uint8_t  valid;
157*c39526b7SPramod Gunjikar };
158*c39526b7SPramod Gunjikar 
159*c39526b7SPramod Gunjikar struct rdma_ucm_ud_param {
160*c39526b7SPramod Gunjikar 	uint32_t qp_num;
161*c39526b7SPramod Gunjikar 	uint32_t qkey;
162*c39526b7SPramod Gunjikar 	struct ib_uverbs_ah_attr ah_attr;
163*c39526b7SPramod Gunjikar 	uint8_t  private_data[RDMA_MAX_PRIVATE_DATA];
164*c39526b7SPramod Gunjikar 	uint8_t  private_data_len;
165*c39526b7SPramod Gunjikar 	uint8_t  reserved[7];
166*c39526b7SPramod Gunjikar 	uint8_t  reserved2[4];
167*c39526b7SPramod Gunjikar };
168*c39526b7SPramod Gunjikar 
169*c39526b7SPramod Gunjikar struct rdma_ucm_connect {
170*c39526b7SPramod Gunjikar 	struct rdma_ucm_conn_param conn_param;
171*c39526b7SPramod Gunjikar 	uint32_t id;
172*c39526b7SPramod Gunjikar 	uint32_t reserved;
173*c39526b7SPramod Gunjikar };
174*c39526b7SPramod Gunjikar 
175*c39526b7SPramod Gunjikar struct rdma_ucm_listen {
176*c39526b7SPramod Gunjikar 	uint32_t id;
177*c39526b7SPramod Gunjikar 	uint32_t backlog;
178*c39526b7SPramod Gunjikar };
179*c39526b7SPramod Gunjikar 
180*c39526b7SPramod Gunjikar struct rdma_ucm_accept {
181*c39526b7SPramod Gunjikar 	uint64_t uid;
182*c39526b7SPramod Gunjikar 	struct rdma_ucm_conn_param conn_param;
183*c39526b7SPramod Gunjikar 	uint32_t id;
184*c39526b7SPramod Gunjikar 	uint32_t reserved;
185*c39526b7SPramod Gunjikar };
186*c39526b7SPramod Gunjikar 
187*c39526b7SPramod Gunjikar struct rdma_ucm_reject {
188*c39526b7SPramod Gunjikar 	uint32_t id;
189*c39526b7SPramod Gunjikar 	uint8_t  private_data_len;
190*c39526b7SPramod Gunjikar 	uint8_t  reserved[3];
191*c39526b7SPramod Gunjikar 	uint8_t  private_data[RDMA_MAX_PRIVATE_DATA];
192*c39526b7SPramod Gunjikar };
193*c39526b7SPramod Gunjikar 
194*c39526b7SPramod Gunjikar struct rdma_ucm_disconnect {
195*c39526b7SPramod Gunjikar 	uint32_t id;
196*c39526b7SPramod Gunjikar };
197*c39526b7SPramod Gunjikar 
198*c39526b7SPramod Gunjikar struct rdma_ucm_init_qp_attr {
199*c39526b7SPramod Gunjikar 	ofv_resp_addr_t response;
200*c39526b7SPramod Gunjikar 	uint32_t id;
201*c39526b7SPramod Gunjikar 	uint32_t qp_state;
202*c39526b7SPramod Gunjikar };
203*c39526b7SPramod Gunjikar 
204*c39526b7SPramod Gunjikar struct rdma_ucm_notify {
205*c39526b7SPramod Gunjikar 	uint32_t id;
206*c39526b7SPramod Gunjikar 	uint32_t event;
207*c39526b7SPramod Gunjikar };
208*c39526b7SPramod Gunjikar 
209*c39526b7SPramod Gunjikar struct rdma_ucm_join_mcast {
210*c39526b7SPramod Gunjikar 	ofv_resp_addr_t response;
211*c39526b7SPramod Gunjikar 	uint64_t uid;
212*c39526b7SPramod Gunjikar 	struct sockaddr_in6 addr;
213*c39526b7SPramod Gunjikar 	uint32_t id;
214*c39526b7SPramod Gunjikar 	uint32_t reserved;
215*c39526b7SPramod Gunjikar };
216*c39526b7SPramod Gunjikar 
217*c39526b7SPramod Gunjikar struct rdma_ucm_get_event {
218*c39526b7SPramod Gunjikar 	ofv_resp_addr_t response;
219*c39526b7SPramod Gunjikar };
220*c39526b7SPramod Gunjikar 
221*c39526b7SPramod Gunjikar struct rdma_ucm_event_resp {
222*c39526b7SPramod Gunjikar 	uint64_t uid;
223*c39526b7SPramod Gunjikar 	uint32_t id;
224*c39526b7SPramod Gunjikar 	uint32_t event;
225*c39526b7SPramod Gunjikar 	uint32_t status;
226*c39526b7SPramod Gunjikar 	union {
227*c39526b7SPramod Gunjikar 		struct rdma_ucm_conn_param conn;
228*c39526b7SPramod Gunjikar 		struct rdma_ucm_ud_param   ud;
229*c39526b7SPramod Gunjikar 	} param;
230*c39526b7SPramod Gunjikar };
231*c39526b7SPramod Gunjikar 
232*c39526b7SPramod Gunjikar /* Option levels */
233*c39526b7SPramod Gunjikar enum {
234*c39526b7SPramod Gunjikar 	RDMA_OPTION_ID		= 0
235*c39526b7SPramod Gunjikar };
236*c39526b7SPramod Gunjikar 
237*c39526b7SPramod Gunjikar /* Option details */
238*c39526b7SPramod Gunjikar enum {
239*c39526b7SPramod Gunjikar 	RDMA_OPTION_ID_TOS	= 0
240*c39526b7SPramod Gunjikar };
241*c39526b7SPramod Gunjikar 
242*c39526b7SPramod Gunjikar struct rdma_ucm_set_option {
243*c39526b7SPramod Gunjikar 	uint64_t optval;
244*c39526b7SPramod Gunjikar 	uint32_t id;
245*c39526b7SPramod Gunjikar 	uint32_t level;
246*c39526b7SPramod Gunjikar 	uint32_t optname;
247*c39526b7SPramod Gunjikar 	uint32_t optlen;
248*c39526b7SPramod Gunjikar };
249*c39526b7SPramod Gunjikar #pragma	pack()
250*c39526b7SPramod Gunjikar 
251*c39526b7SPramod Gunjikar #ifdef __cplusplus
252*c39526b7SPramod Gunjikar }
253*c39526b7SPramod Gunjikar #endif
254*c39526b7SPramod Gunjikar #endif /* _SYS_IB_CLIENTS_OF_RDMA_RDMA_USER_CM_H */
255