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