1c39526b7SPramod Gunjikar /*
2c39526b7SPramod Gunjikar  * This file contains definitions used in OFED defined user/kernel
3c39526b7SPramod Gunjikar  * interfaces. These are imported from the OFED header rdma_cm.h. Oracle
4c39526b7SPramod Gunjikar  * elects to have and use the contents of rdma_cm.h under and governed
5c39526b7SPramod Gunjikar  * by the OpenIB.org BSD license (see below for details). However,
6c39526b7SPramod Gunjikar  * the following notice accompanied the original version of this file:
7c39526b7SPramod Gunjikar  */
8c39526b7SPramod Gunjikar 
9c39526b7SPramod Gunjikar /*
10c39526b7SPramod Gunjikar  * Copyright (c) 2005 Voltaire Inc.  All rights reserved.
11c39526b7SPramod Gunjikar  * Copyright (c) 2005 Intel Corporation.  All rights reserved.
12c39526b7SPramod Gunjikar  *
13c39526b7SPramod Gunjikar  * This Software is licensed under one of the following licenses:
14c39526b7SPramod Gunjikar  *
15c39526b7SPramod Gunjikar  * 1) under the terms of the "Common Public License 1.0" a copy of which is
16c39526b7SPramod Gunjikar  *    available from the Open Source Initiative, see
17c39526b7SPramod Gunjikar  *    http://www.opensource.org/licenses/cpl.php.
18c39526b7SPramod Gunjikar  *
19c39526b7SPramod Gunjikar  * 2) under the terms of the "The BSD License" a copy of which is
20c39526b7SPramod Gunjikar  *    available from the Open Source Initiative, see
21c39526b7SPramod Gunjikar  *    http://www.opensource.org/licenses/bsd-license.php.
22c39526b7SPramod Gunjikar  *
23c39526b7SPramod Gunjikar  * 3) under the terms of the "GNU General Public License (GPL) Version 2" a
24c39526b7SPramod Gunjikar  *    copy of which is available from the Open Source Initiative, see
25c39526b7SPramod Gunjikar  *    http://www.opensource.org/licenses/gpl-license.php.
26c39526b7SPramod Gunjikar  *
27c39526b7SPramod Gunjikar  * Licensee has the right to choose one of the above licenses.
28c39526b7SPramod Gunjikar  *
29c39526b7SPramod Gunjikar  * Redistributions of source code must retain the above copyright
30c39526b7SPramod Gunjikar  * notice and one of the license notices.
31c39526b7SPramod Gunjikar  *
32c39526b7SPramod Gunjikar  * Redistributions in binary form must reproduce both the above copyright
33c39526b7SPramod Gunjikar  * notice, one of the license notices in the documentation
34c39526b7SPramod Gunjikar  * and/or other materials provided with the distribution.
35c39526b7SPramod Gunjikar  *
36c39526b7SPramod Gunjikar  */
37c39526b7SPramod Gunjikar 
38c39526b7SPramod Gunjikar #ifndef _SYS_IB_CLIENTS_OF_RDMA_RDMA_CM_H
39c39526b7SPramod Gunjikar #define	_SYS_IB_CLIENTS_OF_RDMA_RDMA_CM_H
40c39526b7SPramod Gunjikar 
41c39526b7SPramod Gunjikar #ifdef __cplusplus
42c39526b7SPramod Gunjikar extern "C" {
43c39526b7SPramod Gunjikar #endif
44c39526b7SPramod Gunjikar 
45c39526b7SPramod Gunjikar #include <sys/socket.h>
46c39526b7SPramod Gunjikar 
47c39526b7SPramod Gunjikar /*
48c39526b7SPramod Gunjikar  * Upon receiving a device removal event, users must destroy the associated
49c39526b7SPramod Gunjikar  * RDMA identifier and release all resources allocated with the device.
50c39526b7SPramod Gunjikar  */
51c39526b7SPramod Gunjikar enum rdma_cm_event_type {
52c39526b7SPramod Gunjikar 	RDMA_CM_EVENT_ADDR_RESOLVED,
53c39526b7SPramod Gunjikar 	RDMA_CM_EVENT_ADDR_ERROR,
54c39526b7SPramod Gunjikar 	RDMA_CM_EVENT_ROUTE_RESOLVED,
55c39526b7SPramod Gunjikar 	RDMA_CM_EVENT_ROUTE_ERROR,
56c39526b7SPramod Gunjikar 	RDMA_CM_EVENT_CONNECT_REQUEST,
57c39526b7SPramod Gunjikar 	RDMA_CM_EVENT_CONNECT_RESPONSE,
58c39526b7SPramod Gunjikar 	RDMA_CM_EVENT_CONNECT_ERROR,
59c39526b7SPramod Gunjikar 	RDMA_CM_EVENT_UNREACHABLE,
60c39526b7SPramod Gunjikar 	RDMA_CM_EVENT_REJECTED,
61c39526b7SPramod Gunjikar 	RDMA_CM_EVENT_ESTABLISHED,
62c39526b7SPramod Gunjikar 	RDMA_CM_EVENT_DISCONNECTED,
63c39526b7SPramod Gunjikar 	RDMA_CM_EVENT_DEVICE_REMOVAL,
64c39526b7SPramod Gunjikar 	RDMA_CM_EVENT_MULTICAST_JOIN,
65*588575c8SRichard Lowe 	RDMA_CM_EVENT_MULTICAST_ERROR,
66*588575c8SRichard Lowe 	RDMA_CM_EVENT_ADDR_CHANGE
67c39526b7SPramod Gunjikar };
68c39526b7SPramod Gunjikar 
69c39526b7SPramod Gunjikar enum rdma_port_space {
70c39526b7SPramod Gunjikar 	RDMA_PS_SDP  = 0x0001,
71c39526b7SPramod Gunjikar 	RDMA_PS_IPOIB = 0x0002,
72c39526b7SPramod Gunjikar 	RDMA_PS_TCP  = 0x0106,
73c39526b7SPramod Gunjikar 	RDMA_PS_UDP  = 0x0111,
74c39526b7SPramod Gunjikar 	RDMA_PS_SCTP = 0x0183
75c39526b7SPramod Gunjikar };
76c39526b7SPramod Gunjikar 
77c39526b7SPramod Gunjikar struct rdma_addr {
78c39526b7SPramod Gunjikar 	struct sockaddr src_addr;
79c39526b7SPramod Gunjikar 	uint8_t		src_pad[sizeof (struct sockaddr_in6) -
80c39526b7SPramod Gunjikar 				sizeof (struct sockaddr)];
81c39526b7SPramod Gunjikar 	struct sockaddr dst_addr;
82c39526b7SPramod Gunjikar 	uint8_t		dst_pad[sizeof (struct sockaddr_in6) -
83c39526b7SPramod Gunjikar 				sizeof (struct sockaddr)];
84c39526b7SPramod Gunjikar 	struct rdma_dev_addr dev_addr;
85c39526b7SPramod Gunjikar };
86c39526b7SPramod Gunjikar 
87c39526b7SPramod Gunjikar struct rdma_route {
88c39526b7SPramod Gunjikar 	struct rdma_addr addr;
89c39526b7SPramod Gunjikar 	struct ib_sa_path_rec *path_rec;
90c39526b7SPramod Gunjikar 	int num_paths;
91c39526b7SPramod Gunjikar };
92c39526b7SPramod Gunjikar 
93c39526b7SPramod Gunjikar struct rdma_conn_param {
94c39526b7SPramod Gunjikar 	const void *private_data;
95c39526b7SPramod Gunjikar 	uint8_t private_data_len;
96c39526b7SPramod Gunjikar 	uint8_t responder_resources;
97c39526b7SPramod Gunjikar 	uint8_t initiator_depth;
98c39526b7SPramod Gunjikar 	uint8_t flow_control;
99c39526b7SPramod Gunjikar 	uint8_t retry_count;		/* ignored when accepting */
100c39526b7SPramod Gunjikar 	uint8_t rnr_retry_count;
101c39526b7SPramod Gunjikar 	/* Fields below ignored if a QP is created on the rdma_cm_id. */
102c39526b7SPramod Gunjikar 	uint8_t srq;
103c39526b7SPramod Gunjikar 	uint32_t qp_num;
104c39526b7SPramod Gunjikar };
105c39526b7SPramod Gunjikar 
106c39526b7SPramod Gunjikar struct rdma_ud_param {
107c39526b7SPramod Gunjikar 	const void *private_data;
108c39526b7SPramod Gunjikar 	uint8_t private_data_len;
109c39526b7SPramod Gunjikar 	struct ib_ah_attr ah_attr;
110c39526b7SPramod Gunjikar 	uint32_t qp_num;
111c39526b7SPramod Gunjikar 	uint32_t qkey;
112c39526b7SPramod Gunjikar };
113c39526b7SPramod Gunjikar 
114c39526b7SPramod Gunjikar struct rdma_cm_event {
115c39526b7SPramod Gunjikar 	enum rdma_cm_event_type	 event;
116c39526b7SPramod Gunjikar 	int			 status;
117c39526b7SPramod Gunjikar 	union {
118c39526b7SPramod Gunjikar 		struct rdma_conn_param	conn;
119c39526b7SPramod Gunjikar 		struct rdma_ud_param	ud;
120c39526b7SPramod Gunjikar 	} param;
121c39526b7SPramod Gunjikar };
122c39526b7SPramod Gunjikar 
123c39526b7SPramod Gunjikar struct rdma_cm_id;
124c39526b7SPramod Gunjikar 
125c39526b7SPramod Gunjikar /*
126c39526b7SPramod Gunjikar  * rdma_cm_event_handler - Callback used to report user events.
127c39526b7SPramod Gunjikar  *
128c39526b7SPramod Gunjikar  * Notes: Users may not call rdma_destroy_id from this callback to destroy
129c39526b7SPramod Gunjikar  *   the passed in id, or a corresponding listen id.  Returning a
130c39526b7SPramod Gunjikar  *   non-zero value from the callback will destroy the passed in id.
131c39526b7SPramod Gunjikar  */
132c39526b7SPramod Gunjikar typedef int (*rdma_cm_event_handler)(struct rdma_cm_id *id,
133c39526b7SPramod Gunjikar 						struct rdma_cm_event *event);
134c39526b7SPramod Gunjikar 
135c39526b7SPramod Gunjikar struct rdma_cm_id {
136c39526b7SPramod Gunjikar 	struct ib_device	*device;
137c39526b7SPramod Gunjikar 	void			*context;
138c39526b7SPramod Gunjikar 	struct ib_qp		*qp;
139c39526b7SPramod Gunjikar 	rdma_cm_event_handler	 event_handler;
140c39526b7SPramod Gunjikar 	struct rdma_route	 route;
141c39526b7SPramod Gunjikar 	enum rdma_port_space	 ps;
142c39526b7SPramod Gunjikar 	uint8_t			 port_num;
143c39526b7SPramod Gunjikar };
144c39526b7SPramod Gunjikar 
145c39526b7SPramod Gunjikar /*
146c39526b7SPramod Gunjikar  * rdma_create_id - Create an RDMA identifier.
147c39526b7SPramod Gunjikar  *
148c39526b7SPramod Gunjikar  * @event_handler: User callback invoked to report events associated with the
149c39526b7SPramod Gunjikar  *   returned rdma_id.
150c39526b7SPramod Gunjikar  * @context: User specified context associated with the id.
151c39526b7SPramod Gunjikar  * @ps: RDMA port space.
152c39526b7SPramod Gunjikar  */
153c39526b7SPramod Gunjikar struct rdma_cm_id *rdma_create_id(rdma_cm_event_handler event_handler,
154c39526b7SPramod Gunjikar     void *context, enum rdma_port_space ps);
155c39526b7SPramod Gunjikar 
156c39526b7SPramod Gunjikar /*
157c39526b7SPramod Gunjikar  * rdma_map_id2clnthdl -
158c39526b7SPramod Gunjikar  * 	Maps RDMA identifier with IBTF and / or ROF client handles. Either
159c39526b7SPramod Gunjikar  *	of the handles can be NULL, but both should not be NULL. This API
160c39526b7SPramod Gunjikar  *	is called just after calling rdma_create_id() on the passive side.
161c39526b7SPramod Gunjikar  *
162c39526b7SPramod Gunjikar  * rdma_map_id2qphdl -
163c39526b7SPramod Gunjikar  *	This is used to map RDMA-CM ID to IBTF or ROF client handle and
164c39526b7SPramod Gunjikar  *	the QP handle. This is called by the passive side just after
165c39526b7SPramod Gunjikar  *	rdma_create_id() and on the active side just before rdma_accept()
166c39526b7SPramod Gunjikar  *	in the CONNECTION_REQUEST event handler.
167c39526b7SPramod Gunjikar  */
168c39526b7SPramod Gunjikar void rdma_map_id2clnthdl(struct rdma_cm_id *id, void *ib_client_hdl,
169c39526b7SPramod Gunjikar     void *iw_client_hdl);
170c39526b7SPramod Gunjikar void rdma_map_id2qphdl(struct rdma_cm_id *id, void *qp_hdl);
171c39526b7SPramod Gunjikar 
172c39526b7SPramod Gunjikar /*
173c39526b7SPramod Gunjikar  * rdma_destroy_id - Destroys an RDMA identifier.
174c39526b7SPramod Gunjikar  *
175c39526b7SPramod Gunjikar  * @id: RDMA identifier.
176c39526b7SPramod Gunjikar  *
177c39526b7SPramod Gunjikar  * Note: calling this function has the effect of canceling in-flight
178c39526b7SPramod Gunjikar  * asynchronous operations associated with the id.
179c39526b7SPramod Gunjikar  */
180c39526b7SPramod Gunjikar void rdma_destroy_id(struct rdma_cm_id *id);
181c39526b7SPramod Gunjikar 
182c39526b7SPramod Gunjikar /*
183c39526b7SPramod Gunjikar  * rdma_bind_addr - Bind an RDMA identifier to a source address and
184c39526b7SPramod Gunjikar  *   associated RDMA device, if needed.
185c39526b7SPramod Gunjikar  *
186c39526b7SPramod Gunjikar  * @id: RDMA identifier.
187c39526b7SPramod Gunjikar  * @addr: Local address information.  Wildcard values are permitted.
188c39526b7SPramod Gunjikar  *
189c39526b7SPramod Gunjikar  * This associates a source address with the RDMA identifier before calling
190c39526b7SPramod Gunjikar  * rdma_listen.  If a specific local address is given, the RDMA identifier will
191c39526b7SPramod Gunjikar  * be bound to a local RDMA device.
192c39526b7SPramod Gunjikar  */
193c39526b7SPramod Gunjikar int rdma_bind_addr(struct rdma_cm_id *id, struct sockaddr *addr);
194c39526b7SPramod Gunjikar 
195c39526b7SPramod Gunjikar /*
196c39526b7SPramod Gunjikar  * rdma_resolve_addr - Resolve destination and optional source addresses
197c39526b7SPramod Gunjikar  *   from IP addresses to an RDMA address.  If successful, the specified
198c39526b7SPramod Gunjikar  *   rdma_cm_id will be bound to a local device.
199c39526b7SPramod Gunjikar  *
200c39526b7SPramod Gunjikar  * @id: RDMA identifier.
201c39526b7SPramod Gunjikar  * @src_addr: Source address information.  This parameter may be NULL.
202c39526b7SPramod Gunjikar  * @dst_addr: Destination address information.
203c39526b7SPramod Gunjikar  * @timeout_ms: Time to wait for resolution to complete.
204c39526b7SPramod Gunjikar  */
205c39526b7SPramod Gunjikar int rdma_resolve_addr(struct rdma_cm_id *id, struct sockaddr *src_addr,
206c39526b7SPramod Gunjikar 				struct sockaddr *dst_addr, int timeout_ms);
207c39526b7SPramod Gunjikar 
208c39526b7SPramod Gunjikar /*
209c39526b7SPramod Gunjikar  * rdma_resolve_route - Resolve the RDMA address bound to the RDMA identifier
210c39526b7SPramod Gunjikar  *   into route information needed to establish a connection.
211c39526b7SPramod Gunjikar  *
212c39526b7SPramod Gunjikar  * This is called on the client side of a connection.
213c39526b7SPramod Gunjikar  * Users must have first called rdma_resolve_addr to resolve a dst_addr
214c39526b7SPramod Gunjikar  * into an RDMA address before calling this routine.
215c39526b7SPramod Gunjikar  */
216c39526b7SPramod Gunjikar int rdma_resolve_route(struct rdma_cm_id *id, int timeout_ms);
217c39526b7SPramod Gunjikar 
218c39526b7SPramod Gunjikar 
219c39526b7SPramod Gunjikar /*
220c39526b7SPramod Gunjikar  * rdma_init_qp_attr - Initializes the QP attributes for use in transitioning
221c39526b7SPramod Gunjikar  *   to a specified QP state.
222c39526b7SPramod Gunjikar  * @id: Communication identifier associated with the QP attributes to
223c39526b7SPramod Gunjikar  *   initialize.
224c39526b7SPramod Gunjikar  * @qp_attr: On input, specifies the desired QP state.  On output, the
225c39526b7SPramod Gunjikar  *   mandatory and desired optional attributes will be set in order to
226c39526b7SPramod Gunjikar  *   modify the QP to the specified state.
227c39526b7SPramod Gunjikar  * @qp_attr_mask: The QP attribute mask that may be used to transition the
228c39526b7SPramod Gunjikar  *   QP to the specified state.
229c39526b7SPramod Gunjikar  *
230c39526b7SPramod Gunjikar  * Users must set the @qp_attr->qp_state to the desired QP state.  This call
231c39526b7SPramod Gunjikar  * will set all required attributes for the given transition, along with
232c39526b7SPramod Gunjikar  * known optional attributes.  Users may override the attributes returned from
233c39526b7SPramod Gunjikar  * this call before calling ib_modify_qp.
234c39526b7SPramod Gunjikar  *
235c39526b7SPramod Gunjikar  * Users that wish to have their QP automatically transitioned through its
236c39526b7SPramod Gunjikar  * states can associate a QP with the rdma_cm_id by calling rdma_create_qp().
237c39526b7SPramod Gunjikar  */
238c39526b7SPramod Gunjikar int rdma_init_qp_attr(struct rdma_cm_id *id, struct ib_qp_attr *qp_attr,
239c39526b7SPramod Gunjikar 							int *qp_attr_mask);
240c39526b7SPramod Gunjikar /*
241c39526b7SPramod Gunjikar  * rdma_connect - Initiate an active connection request.
242c39526b7SPramod Gunjikar  * @id: Connection identifier to connect.
243c39526b7SPramod Gunjikar  * @conn_param: Connection information used for connected QPs.
244c39526b7SPramod Gunjikar  *
245c39526b7SPramod Gunjikar  * Users must have resolved a route for the rdma_cm_id to connect with
246c39526b7SPramod Gunjikar  * by having called rdma_resolve_route before calling this routine.
247c39526b7SPramod Gunjikar  *
248c39526b7SPramod Gunjikar  * This call will either connect to a remote QP or obtain remote QP
249c39526b7SPramod Gunjikar  * information for unconnected rdma_cm_id's.  The actual operation is
250c39526b7SPramod Gunjikar  * based on the rdma_cm_id's port space.
251c39526b7SPramod Gunjikar  */
252c39526b7SPramod Gunjikar int rdma_connect(struct rdma_cm_id *id, struct rdma_conn_param *conn_param);
253c39526b7SPramod Gunjikar 
254c39526b7SPramod Gunjikar /*
255c39526b7SPramod Gunjikar  * rdma_listen - This function is called by the passive side to
256c39526b7SPramod Gunjikar  *   listen for incoming connection requests.
257c39526b7SPramod Gunjikar  *
258c39526b7SPramod Gunjikar  * Users must have bound the rdma_cm_id to a local address by calling
259c39526b7SPramod Gunjikar  * rdma_bind_addr before calling this routine.
260c39526b7SPramod Gunjikar  */
261c39526b7SPramod Gunjikar int rdma_listen(struct rdma_cm_id *id, int backlog);
262c39526b7SPramod Gunjikar 
263c39526b7SPramod Gunjikar /*
264c39526b7SPramod Gunjikar  * rdma_accept - Called to accept a connection request or response.
265c39526b7SPramod Gunjikar  * @id: Connection identifier associated with the request.
266c39526b7SPramod Gunjikar  * @conn_param: Information needed to establish the connection.  This must be
267c39526b7SPramod Gunjikar  *   provided if accepting a connection request.  If accepting a connection
268c39526b7SPramod Gunjikar  *   response, this parameter must be NULL.
269c39526b7SPramod Gunjikar  *
270c39526b7SPramod Gunjikar  * Typically, this routine is only called by the listener to accept a connection
271c39526b7SPramod Gunjikar  * request.  It must also be called on the active side of a connection if the
272c39526b7SPramod Gunjikar  * user is performing their own QP transitions.
273c39526b7SPramod Gunjikar  *
274c39526b7SPramod Gunjikar  * In the case of error, a reject message is sent to the remote side and the
275c39526b7SPramod Gunjikar  * state of the qp associated with the id is modified to error, such that any
276c39526b7SPramod Gunjikar  * previously posted receive buffers would be flushed.
277c39526b7SPramod Gunjikar  */
278c39526b7SPramod Gunjikar int rdma_accept(struct rdma_cm_id *id, struct rdma_conn_param *conn_param);
279c39526b7SPramod Gunjikar 
280c39526b7SPramod Gunjikar /*
281c39526b7SPramod Gunjikar  * rdma_notify - Notifies the RDMA CM of an asynchronous event that has
282c39526b7SPramod Gunjikar  * occurred on the connection.
283c39526b7SPramod Gunjikar  * @id: Connection identifier to transition to established.
284c39526b7SPramod Gunjikar  * @event: Asynchronous event.
285c39526b7SPramod Gunjikar  *
286c39526b7SPramod Gunjikar  * This routine should be invoked by users to notify the CM of relevant
287c39526b7SPramod Gunjikar  * communication events.  Events that should be reported to the CM and
288c39526b7SPramod Gunjikar  * when to report them are:
289c39526b7SPramod Gunjikar  *
290c39526b7SPramod Gunjikar  * IB_EVENT_COMM_EST - Used when a message is received on a connected
291c39526b7SPramod Gunjikar  *    QP before an RTU has been received.
292c39526b7SPramod Gunjikar  */
293c39526b7SPramod Gunjikar int rdma_notify(struct rdma_cm_id *id, enum ib_event_type event);
294c39526b7SPramod Gunjikar 
295c39526b7SPramod Gunjikar /*
296c39526b7SPramod Gunjikar  * rdma_reject - Called to reject a connection request or response.
297c39526b7SPramod Gunjikar  */
298c39526b7SPramod Gunjikar int rdma_reject(struct rdma_cm_id *id, const void *private_data,
299c39526b7SPramod Gunjikar 		uint8_t private_data_len);
300c39526b7SPramod Gunjikar 
301c39526b7SPramod Gunjikar /*
302c39526b7SPramod Gunjikar  * rdma_disconnect - This function disconnects the associated QP and
303c39526b7SPramod Gunjikar  *   transitions it into the error state.
304c39526b7SPramod Gunjikar  */
305c39526b7SPramod Gunjikar int rdma_disconnect(struct rdma_cm_id *id);
306c39526b7SPramod Gunjikar 
307c39526b7SPramod Gunjikar /*
308c39526b7SPramod Gunjikar  * rdma_join_multicast - Join the multicast group specified by the given
309c39526b7SPramod Gunjikar  *   address.
310c39526b7SPramod Gunjikar  * @id: Communication identifier associated with the request.
311c39526b7SPramod Gunjikar  * @addr: Multicast address identifying the group to join.
312c39526b7SPramod Gunjikar  * @context: User-defined context associated with the join request, returned
313c39526b7SPramod Gunjikar  * to the user through the private_data pointer in multicast events.
314c39526b7SPramod Gunjikar  */
315c39526b7SPramod Gunjikar int rdma_join_multicast(struct rdma_cm_id *id, struct sockaddr *addr,
316c39526b7SPramod Gunjikar 			void *context);
317c39526b7SPramod Gunjikar 
318c39526b7SPramod Gunjikar /*
319c39526b7SPramod Gunjikar  * rdma_leave_multicast - Leave the multicast group specified by the given
320c39526b7SPramod Gunjikar  *   address.
321c39526b7SPramod Gunjikar  */
322c39526b7SPramod Gunjikar void rdma_leave_multicast(struct rdma_cm_id *id, struct sockaddr *addr);
323c39526b7SPramod Gunjikar 
324c39526b7SPramod Gunjikar /*
325c39526b7SPramod Gunjikar  * rdma_set_service_type - Set the type of service associated with a
326c39526b7SPramod Gunjikar  *   connection identifier.
327c39526b7SPramod Gunjikar  * @id: Communication identifier to associated with service type.
328c39526b7SPramod Gunjikar  * @tos: Type of service.
329c39526b7SPramod Gunjikar  *
330c39526b7SPramod Gunjikar  * The type of service is interpretted as a differentiated service
331c39526b7SPramod Gunjikar  * field (RFC 2474).  The service type should be specified before
332c39526b7SPramod Gunjikar  * performing route resolution, as existing communication on the
333c39526b7SPramod Gunjikar  * connection identifier may be unaffected.  The type of service
334c39526b7SPramod Gunjikar  * requested may not be supported by the network to all destinations.
335c39526b7SPramod Gunjikar  */
336c39526b7SPramod Gunjikar void rdma_set_service_type(struct rdma_cm_id *id, int tos);
337c39526b7SPramod Gunjikar 
338c39526b7SPramod Gunjikar 
339c39526b7SPramod Gunjikar /*
340c39526b7SPramod Gunjikar  * rdma_create_qp - Allocate a QP and associate it with the specified RDMA
341c39526b7SPramod Gunjikar  * identifier.
342c39526b7SPramod Gunjikar  *
343c39526b7SPramod Gunjikar  * QPs allocated to an rdma_cm_id will automatically be transitioned by the CMA
344c39526b7SPramod Gunjikar  * through their states.
345c39526b7SPramod Gunjikar  */
346c39526b7SPramod Gunjikar int rdma_create_qp(struct rdma_cm_id *id, struct ib_pd *pd,
347c39526b7SPramod Gunjikar     struct ib_qp_init_attr *qp_init_attr);
348c39526b7SPramod Gunjikar 
349c39526b7SPramod Gunjikar /*
350c39526b7SPramod Gunjikar  * rdma_destroy_qp - Deallocate the QP associated with the specified RDMA
351c39526b7SPramod Gunjikar  * identifier.
352c39526b7SPramod Gunjikar  *
353c39526b7SPramod Gunjikar  * Users must destroy any QP associated with an RDMA identifier before
354c39526b7SPramod Gunjikar  * destroying the RDMA ID.
355c39526b7SPramod Gunjikar  */
356c39526b7SPramod Gunjikar void rdma_destroy_qp(struct rdma_cm_id *id);
357c39526b7SPramod Gunjikar 
358c39526b7SPramod Gunjikar #ifdef __cplusplus
359c39526b7SPramod Gunjikar }
360c39526b7SPramod Gunjikar #endif
361c39526b7SPramod Gunjikar #endif /* _SYS_IB_CLIENTS_OF_RDMA_RDMA_CM_H */
362