| 1 |
|
| 2 | |
| 3 | * Copyright (c) 2004, 2005 Intel Corporation. All rights reserved.
|
| 4 | * Copyright (c) 2004 Topspin Corporation. All rights reserved.
|
| 5 | * Copyright (c) 2004 Voltaire Corporation. All rights reserved.
|
| 6 | * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
|
| 7 | * Copyright (c) 2019, Mellanox Technologies inc. All rights reserved.
|
| 8 |
|
| 9 |
|
| 10 | #ifndef IB_CM_H
|
| 11 | #define IB_CM_H
|
| 12 |
|
| 13 | #include <rdma/ib_mad.h>
|
| 14 | #include <rdma/ib_sa.h>
|
| 15 | #include <rdma/rdma_cm.h>
|
| 16 |
|
| 17 | enum ib_cm_state {
|
| 18 | IB_CM_IDLE,
|
| 19 | IB_CM_LISTEN,
|
| 20 | IB_CM_REQ_SENT,
|
| 21 | IB_CM_REQ_RCVD,
|
| 22 | IB_CM_MRA_REQ_SENT,
|
| 23 | IB_CM_MRA_REQ_RCVD,
|
| 24 | IB_CM_REP_SENT,
|
| 25 | IB_CM_REP_RCVD,
|
| 26 | IB_CM_MRA_REP_SENT,
|
| 27 | IB_CM_MRA_REP_RCVD,
|
| 28 | IB_CM_ESTABLISHED,
|
| 29 | IB_CM_DREQ_SENT,
|
| 30 | IB_CM_DREQ_RCVD,
|
| 31 | IB_CM_TIMEWAIT,
|
| 32 | IB_CM_SIDR_REQ_SENT,
|
| 33 | IB_CM_SIDR_REQ_RCVD
|
| 34 | };
|
| 35 |
|
| 36 | enum ib_cm_lap_state {
|
| 37 | IB_CM_LAP_UNINIT,
|
| 38 | IB_CM_LAP_IDLE,
|
| 39 | IB_CM_LAP_SENT,
|
| 40 | IB_CM_LAP_RCVD,
|
| 41 | IB_CM_MRA_LAP_SENT,
|
| 42 | IB_CM_MRA_LAP_RCVD,
|
| 43 | };
|
| 44 |
|
| 45 | enum ib_cm_event_type {
|
| 46 | IB_CM_REQ_ERROR,
|
| 47 | IB_CM_REQ_RECEIVED,
|
| 48 | IB_CM_REP_ERROR,
|
| 49 | IB_CM_REP_RECEIVED,
|
| 50 | IB_CM_RTU_RECEIVED,
|
| 51 | IB_CM_USER_ESTABLISHED,
|
| 52 | IB_CM_DREQ_ERROR,
|
| 53 | IB_CM_DREQ_RECEIVED,
|
| 54 | IB_CM_DREP_RECEIVED,
|
| 55 | IB_CM_TIMEWAIT_EXIT,
|
| 56 | IB_CM_MRA_RECEIVED,
|
| 57 | IB_CM_REJ_RECEIVED,
|
| 58 | IB_CM_LAP_ERROR,
|
| 59 | IB_CM_LAP_RECEIVED,
|
| 60 | IB_CM_APR_RECEIVED,
|
| 61 | IB_CM_SIDR_REQ_ERROR,
|
| 62 | IB_CM_SIDR_REQ_RECEIVED,
|
| 63 | IB_CM_SIDR_REP_RECEIVED
|
| 64 | };
|
| 65 |
|
| 66 | enum ib_cm_data_size {
|
| 67 | IB_CM_REQ_PRIVATE_DATA_SIZE = 92,
|
| 68 | IB_CM_MRA_PRIVATE_DATA_SIZE = 222,
|
| 69 | IB_CM_REJ_PRIVATE_DATA_SIZE = 148,
|
| 70 | IB_CM_REP_PRIVATE_DATA_SIZE = 196,
|
| 71 | IB_CM_RTU_PRIVATE_DATA_SIZE = 224,
|
| 72 | IB_CM_DREQ_PRIVATE_DATA_SIZE = 220,
|
| 73 | IB_CM_DREP_PRIVATE_DATA_SIZE = 224,
|
| 74 | IB_CM_REJ_ARI_LENGTH = 72,
|
| 75 | IB_CM_LAP_PRIVATE_DATA_SIZE = 168,
|
| 76 | IB_CM_APR_PRIVATE_DATA_SIZE = 148,
|
| 77 | IB_CM_APR_INFO_LENGTH = 72,
|
| 78 | IB_CM_SIDR_REQ_PRIVATE_DATA_SIZE = 216,
|
| 79 | IB_CM_SIDR_REP_PRIVATE_DATA_SIZE = 136,
|
| 80 | IB_CM_SIDR_REP_INFO_LENGTH = 72,
|
| 81 | };
|
| 82 |
|
| 83 | struct ib_cm_id;
|
| 84 |
|
| 85 | struct ib_cm_req_event_param {
|
| 86 | struct ib_cm_id *listen_id;
|
| 87 |
|
| 88 |
|
| 89 | u16 bth_pkey;
|
| 90 |
|
| 91 | u8 port;
|
| 92 |
|
| 93 | struct sa_path_rec *primary_path;
|
| 94 | struct sa_path_rec *alternate_path;
|
| 95 |
|
| 96 | |
| 97 | * SGID attribute of the primary path. Currently only
|
| 98 | * useful for RoCE. Alternate path GID attributes
|
| 99 | * are not yet supported.
|
| 100 |
|
| 101 | const struct ib_gid_attr *ppath_sgid_attr;
|
| 102 |
|
| 103 | __be64 remote_ca_guid;
|
| 104 | u32 remote_qkey;
|
| 105 | u32 remote_qpn;
|
| 106 | enum ib_qp_type qp_type;
|
| 107 |
|
| 108 | u32 starting_psn;
|
| 109 | u8 responder_resources;
|
| 110 | u8 initiator_depth;
|
| 111 | unsigned int local_cm_response_timeout:5;
|
| 112 | unsigned int flow_control:1;
|
| 113 | unsigned int remote_cm_response_timeout:5;
|
| 114 | unsigned int retry_count:3;
|
| 115 | unsigned int rnr_retry_count:3;
|
| 116 | unsigned int srq:1;
|
| 117 | struct rdma_ucm_ece ece;
|
| 118 | };
|
| 119 |
|
| 120 | struct ib_cm_rep_event_param {
|
| 121 | __be64 remote_ca_guid;
|
| 122 | u32 remote_qkey;
|
| 123 | u32 remote_qpn;
|
| 124 | u32 starting_psn;
|
| 125 | u8 responder_resources;
|
| 126 | u8 initiator_depth;
|
| 127 | unsigned int target_ack_delay:5;
|
| 128 | unsigned int failover_accepted:2;
|
| 129 | unsigned int flow_control:1;
|
| 130 | unsigned int rnr_retry_count:3;
|
| 131 | unsigned int srq:1;
|
| 132 | struct rdma_ucm_ece ece;
|
| 133 | };
|
| 134 |
|
| 135 | enum ib_cm_rej_reason {
|
| 136 | IB_CM_REJ_NO_QP = 1,
|
| 137 | IB_CM_REJ_NO_EEC = 2,
|
| 138 | IB_CM_REJ_NO_RESOURCES = 3,
|
| 139 | IB_CM_REJ_TIMEOUT = 4,
|
| 140 | IB_CM_REJ_UNSUPPORTED = 5,
|
| 141 | IB_CM_REJ_INVALID_COMM_ID = 6,
|
| 142 | IB_CM_REJ_INVALID_COMM_INSTANCE = 7,
|
| 143 | IB_CM_REJ_INVALID_SERVICE_ID = 8,
|
| 144 | IB_CM_REJ_INVALID_TRANSPORT_TYPE = 9,
|
| 145 | IB_CM_REJ_STALE_CONN = 10,
|
| 146 | IB_CM_REJ_RDC_NOT_EXIST = 11,
|
| 147 | IB_CM_REJ_INVALID_GID = 12,
|
| 148 | IB_CM_REJ_INVALID_LID = 13,
|
| 149 | IB_CM_REJ_INVALID_SL = 14,
|
| 150 | IB_CM_REJ_INVALID_TRAFFIC_CLASS = 15,
|
| 151 | IB_CM_REJ_INVALID_HOP_LIMIT = 16,
|
| 152 | IB_CM_REJ_INVALID_PACKET_RATE = 17,
|
| 153 | IB_CM_REJ_INVALID_ALT_GID = 18,
|
| 154 | IB_CM_REJ_INVALID_ALT_LID = 19,
|
| 155 | IB_CM_REJ_INVALID_ALT_SL = 20,
|
| 156 | IB_CM_REJ_INVALID_ALT_TRAFFIC_CLASS = 21,
|
| 157 | IB_CM_REJ_INVALID_ALT_HOP_LIMIT = 22,
|
| 158 | IB_CM_REJ_INVALID_ALT_PACKET_RATE = 23,
|
| 159 | IB_CM_REJ_PORT_CM_REDIRECT = 24,
|
| 160 | IB_CM_REJ_PORT_REDIRECT = 25,
|
| 161 | IB_CM_REJ_INVALID_MTU = 26,
|
| 162 | IB_CM_REJ_INSUFFICIENT_RESP_RESOURCES = 27,
|
| 163 | IB_CM_REJ_CONSUMER_DEFINED = 28,
|
| 164 | IB_CM_REJ_INVALID_RNR_RETRY = 29,
|
| 165 | IB_CM_REJ_DUPLICATE_LOCAL_COMM_ID = 30,
|
| 166 | IB_CM_REJ_INVALID_CLASS_VERSION = 31,
|
| 167 | IB_CM_REJ_INVALID_FLOW_LABEL = 32,
|
| 168 | IB_CM_REJ_INVALID_ALT_FLOW_LABEL = 33,
|
| 169 | IB_CM_REJ_VENDOR_OPTION_NOT_SUPPORTED = 35,
|
| 170 | };
|
| 171 |
|
| 172 | struct ib_cm_rej_event_param {
|
| 173 | enum ib_cm_rej_reason reason;
|
| 174 | void *ari;
|
| 175 | u8 ari_length;
|
| 176 | };
|
| 177 |
|
| 178 | struct ib_cm_mra_event_param {
|
| 179 | u8 service_timeout;
|
| 180 | };
|
| 181 |
|
| 182 | struct ib_cm_lap_event_param {
|
| 183 | struct sa_path_rec *alternate_path;
|
| 184 | };
|
| 185 |
|
| 186 | enum ib_cm_apr_status {
|
| 187 | IB_CM_APR_SUCCESS,
|
| 188 | IB_CM_APR_INVALID_COMM_ID,
|
| 189 | IB_CM_APR_UNSUPPORTED,
|
| 190 | IB_CM_APR_REJECT,
|
| 191 | IB_CM_APR_REDIRECT,
|
| 192 | IB_CM_APR_IS_CURRENT,
|
| 193 | IB_CM_APR_INVALID_QPN_EECN,
|
| 194 | IB_CM_APR_INVALID_LID,
|
| 195 | IB_CM_APR_INVALID_GID,
|
| 196 | IB_CM_APR_INVALID_FLOW_LABEL,
|
| 197 | IB_CM_APR_INVALID_TCLASS,
|
| 198 | IB_CM_APR_INVALID_HOP_LIMIT,
|
| 199 | IB_CM_APR_INVALID_PACKET_RATE,
|
| 200 | IB_CM_APR_INVALID_SL
|
| 201 | };
|
| 202 |
|
| 203 | struct ib_cm_apr_event_param {
|
| 204 | enum ib_cm_apr_status ap_status;
|
| 205 | void *apr_info;
|
| 206 | u8 info_len;
|
| 207 | };
|
| 208 |
|
| 209 | struct ib_cm_sidr_req_event_param {
|
| 210 | struct ib_cm_id *listen_id;
|
| 211 | __be64 service_id;
|
| 212 |
|
| 213 | |
| 214 | * SGID attribute of the request. Currently only
|
| 215 | * useful for RoCE.
|
| 216 |
|
| 217 | const struct ib_gid_attr *sgid_attr;
|
| 218 |
|
| 219 | u16 bth_pkey;
|
| 220 | u8 port;
|
| 221 | u16 pkey;
|
| 222 | };
|
| 223 |
|
| 224 | enum ib_cm_sidr_status {
|
| 225 | IB_SIDR_SUCCESS,
|
| 226 | IB_SIDR_UNSUPPORTED,
|
| 227 | IB_SIDR_REJECT,
|
| 228 | IB_SIDR_NO_QP,
|
| 229 | IB_SIDR_REDIRECT,
|
| 230 | IB_SIDR_UNSUPPORTED_VERSION
|
| 231 | };
|
| 232 |
|
| 233 | struct ib_cm_sidr_rep_event_param {
|
| 234 | enum ib_cm_sidr_status status;
|
| 235 | u32 qkey;
|
| 236 | u32 qpn;
|
| 237 | void *info;
|
| 238 | const struct ib_gid_attr *sgid_attr;
|
| 239 | u8 info_len;
|
| 240 | };
|
| 241 |
|
| 242 | struct ib_cm_event {
|
| 243 | enum ib_cm_event_type event;
|
| 244 | union {
|
| 245 | struct ib_cm_req_event_param req_rcvd;
|
| 246 | struct ib_cm_rep_event_param rep_rcvd;
|
| 247 |
|
| 248 | struct ib_cm_rej_event_param rej_rcvd;
|
| 249 | struct ib_cm_mra_event_param mra_rcvd;
|
| 250 | struct ib_cm_lap_event_param lap_rcvd;
|
| 251 | struct ib_cm_apr_event_param apr_rcvd;
|
| 252 |
|
| 253 | struct ib_cm_sidr_req_event_param sidr_req_rcvd;
|
| 254 | struct ib_cm_sidr_rep_event_param sidr_rep_rcvd;
|
| 255 | enum ib_wc_status send_status;
|
| 256 | } param;
|
| 257 |
|
| 258 | void *private_data;
|
| 259 | };
|
| 260 |
|
| 261 | #define CM_REQ_ATTR_ID cpu_to_be16(0x0010)
|
| 262 | #define CM_MRA_ATTR_ID cpu_to_be16(0x0011)
|
| 263 | #define CM_REJ_ATTR_ID cpu_to_be16(0x0012)
|
| 264 | #define CM_REP_ATTR_ID cpu_to_be16(0x0013)
|
| 265 | #define CM_RTU_ATTR_ID cpu_to_be16(0x0014)
|
| 266 | #define CM_DREQ_ATTR_ID cpu_to_be16(0x0015)
|
| 267 | #define CM_DREP_ATTR_ID cpu_to_be16(0x0016)
|
| 268 | #define CM_SIDR_REQ_ATTR_ID cpu_to_be16(0x0017)
|
| 269 | #define CM_SIDR_REP_ATTR_ID cpu_to_be16(0x0018)
|
| 270 | #define CM_LAP_ATTR_ID cpu_to_be16(0x0019)
|
| 271 | #define CM_APR_ATTR_ID cpu_to_be16(0x001A)
|
| 272 |
|
| 273 | |
| 274 | * typedef ib_cm_handler - User-defined callback to process communication events.
|
| 275 | * @cm_id: Communication identifier associated with the reported event.
|
| 276 | * @event: Information about the communication event.
|
| 277 | *
|
| 278 | * IB_CM_REQ_RECEIVED and IB_CM_SIDR_REQ_RECEIVED communication events
|
| 279 | * generated as a result of listen requests result in the allocation of a
|
| 280 | * new @cm_id. The new @cm_id is returned to the user through this callback.
|
| 281 | * Clients are responsible for destroying the new @cm_id. For peer-to-peer
|
| 282 | * IB_CM_REQ_RECEIVED and all other events, the returned @cm_id corresponds
|
| 283 | * to a user's existing communication identifier.
|
| 284 | *
|
| 285 | * Users may not call ib_destroy_cm_id while in the context of this callback;
|
| 286 | * however, returning a non-zero value instructs the communication manager to
|
| 287 | * destroy the @cm_id after the callback completes.
|
| 288 |
|
| 289 | typedef int (*ib_cm_handler)(struct ib_cm_id *cm_id,
|
| 290 | const struct ib_cm_event *event);
|
| 291 |
|
| 292 | struct ib_cm_id {
|
| 293 | ib_cm_handler cm_handler;
|
| 294 | void *context;
|
| 295 | struct ib_device *device;
|
| 296 | __be64 service_id;
|
| 297 | enum ib_cm_state state;
|
| 298 | enum ib_cm_lap_state lap_state;
|
| 299 | __be32 local_id;
|
| 300 | __be32 remote_id;
|
| 301 | u32 remote_cm_qpn;
|
| 302 | };
|
| 303 |
|
| 304 | |
| 305 | * ib_create_cm_id - Allocate a communication identifier.
|
| 306 | * @device: Device associated with the cm_id. All related communication will
|
| 307 | * be associated with the specified device.
|
| 308 | * @cm_handler: Callback invoked to notify the user of CM events.
|
| 309 | * @context: User specified context associated with the communication
|
| 310 | * identifier.
|
| 311 | *
|
| 312 | * Communication identifiers are used to track connection states, service
|
| 313 | * ID resolution requests, and listen requests.
|
| 314 |
|
| 315 | struct ib_cm_id *ib_create_cm_id(struct ib_device *device,
|
| 316 | ib_cm_handler cm_handler,
|
| 317 | void *context);
|
| 318 |
|
| 319 | |
| 320 | * ib_destroy_cm_id - Destroy a connection identifier.
|
| 321 | * @cm_id: Connection identifier to destroy.
|
| 322 | *
|
| 323 | * This call blocks until the connection identifier is destroyed.
|
| 324 |
|
| 325 | void ib_destroy_cm_id(struct ib_cm_id *cm_id);
|
| 326 |
|
| 327 | #define IB_SERVICE_ID_AGN_MASK cpu_to_be64(0xFF00000000000000ULL)
|
| 328 | #define IB_CM_ASSIGN_SERVICE_ID cpu_to_be64(0x0200000000000000ULL)
|
| 329 | #define IB_CMA_SERVICE_ID cpu_to_be64(0x0000000001000000ULL)
|
| 330 | #define IB_CMA_SERVICE_ID_MASK cpu_to_be64(0xFFFFFFFFFF000000ULL)
|
| 331 | #define IB_SDP_SERVICE_ID cpu_to_be64(0x0000000000010000ULL)
|
| 332 | #define IB_SDP_SERVICE_ID_MASK cpu_to_be64(0xFFFFFFFFFFFF0000ULL)
|
| 333 |
|
| 334 | |
| 335 | * ib_cm_listen - Initiates listening on the specified service ID for
|
| 336 | * connection and service ID resolution requests.
|
| 337 | * @cm_id: Connection identifier associated with the listen request.
|
| 338 | * @service_id: Service identifier matched against incoming connection
|
| 339 | * and service ID resolution requests. The service ID should be specified
|
| 340 | * network-byte order. If set to IB_CM_ASSIGN_SERVICE_ID, the CM will
|
| 341 | * assign a service ID to the caller.
|
| 342 |
|
| 343 | int ib_cm_listen(struct ib_cm_id *cm_id, __be64 service_id);
|
| 344 |
|
| 345 | struct ib_cm_id *ib_cm_insert_listen(struct ib_device *device,
|
| 346 | ib_cm_handler cm_handler,
|
| 347 | __be64 service_id);
|
| 348 |
|
| 349 | struct ib_cm_req_param {
|
| 350 | struct sa_path_rec *primary_path;
|
| 351 | struct sa_path_rec *primary_path_inbound;
|
| 352 | struct sa_path_rec *primary_path_outbound;
|
| 353 | struct sa_path_rec *alternate_path;
|
| 354 | const struct ib_gid_attr *ppath_sgid_attr;
|
| 355 | __be64 service_id;
|
| 356 | u32 qp_num;
|
| 357 | enum ib_qp_type qp_type;
|
| 358 | u32 starting_psn;
|
| 359 | const void *private_data;
|
| 360 | u8 private_data_len;
|
| 361 | u8 responder_resources;
|
| 362 | u8 initiator_depth;
|
| 363 | u8 remote_cm_response_timeout;
|
| 364 | u8 flow_control;
|
| 365 | u8 local_cm_response_timeout;
|
| 366 | u8 retry_count;
|
| 367 | u8 rnr_retry_count;
|
| 368 | u8 max_cm_retries;
|
| 369 | u8 srq;
|
| 370 | struct rdma_ucm_ece ece;
|
| 371 | };
|
| 372 |
|
| 373 | |
| 374 | * ib_send_cm_req - Sends a connection request to the remote node.
|
| 375 | * @cm_id: Connection identifier that will be associated with the
|
| 376 | * connection request.
|
| 377 | * @param: Connection request information needed to establish the
|
| 378 | * connection.
|
| 379 |
|
| 380 | int ib_send_cm_req(struct ib_cm_id *cm_id,
|
| 381 | struct ib_cm_req_param *param);
|
| 382 |
|
| 383 | struct ib_cm_rep_param {
|
| 384 | u32 qp_num;
|
| 385 | u32 starting_psn;
|
| 386 | const void *private_data;
|
| 387 | u8 private_data_len;
|
| 388 | u8 responder_resources;
|
| 389 | u8 initiator_depth;
|
| 390 | u8 failover_accepted;
|
| 391 | u8 flow_control;
|
| 392 | u8 rnr_retry_count;
|
| 393 | u8 srq;
|
| 394 | struct rdma_ucm_ece ece;
|
| 395 | };
|
| 396 |
|
| 397 | |
| 398 | * ib_send_cm_rep - Sends a connection reply in response to a connection
|
| 399 | * request.
|
| 400 | * @cm_id: Connection identifier that will be associated with the
|
| 401 | * connection request.
|
| 402 | * @param: Connection reply information needed to establish the
|
| 403 | * connection.
|
| 404 |
|
| 405 | int ib_send_cm_rep(struct ib_cm_id *cm_id,
|
| 406 | struct ib_cm_rep_param *param);
|
| 407 |
|
| 408 | |
| 409 | * ib_send_cm_rtu - Sends a connection ready to use message in response
|
| 410 | * to a connection reply message.
|
| 411 | * @cm_id: Connection identifier associated with the connection request.
|
| 412 | * @private_data: Optional user-defined private data sent with the
|
| 413 | * ready to use message.
|
| 414 | * @private_data_len: Size of the private data buffer, in bytes.
|
| 415 |
|
| 416 | int ib_send_cm_rtu(struct ib_cm_id *cm_id,
|
| 417 | const void *private_data,
|
| 418 | u8 private_data_len);
|
| 419 |
|
| 420 | |
| 421 | * ib_send_cm_dreq - Sends a disconnection request for an existing
|
| 422 | * connection.
|
| 423 | * @cm_id: Connection identifier associated with the connection being
|
| 424 | * released.
|
| 425 | * @private_data: Optional user-defined private data sent with the
|
| 426 | * disconnection request message.
|
| 427 | * @private_data_len: Size of the private data buffer, in bytes.
|
| 428 |
|
| 429 | int ib_send_cm_dreq(struct ib_cm_id *cm_id,
|
| 430 | const void *private_data,
|
| 431 | u8 private_data_len);
|
| 432 |
|
| 433 | |
| 434 | * ib_send_cm_drep - Sends a disconnection reply to a disconnection request.
|
| 435 | * @cm_id: Connection identifier associated with the connection being
|
| 436 | * released.
|
| 437 | * @private_data: Optional user-defined private data sent with the
|
| 438 | * disconnection reply message.
|
| 439 | * @private_data_len: Size of the private data buffer, in bytes.
|
| 440 | *
|
| 441 | * If the cm_id is in the correct state, the CM will transition the connection
|
| 442 | * to the timewait state, even if an error occurs sending the DREP message.
|
| 443 |
|
| 444 | int ib_send_cm_drep(struct ib_cm_id *cm_id,
|
| 445 | const void *private_data,
|
| 446 | u8 private_data_len);
|
| 447 |
|
| 448 | |
| 449 | * ib_cm_notify - Notifies the CM of an event reported to the consumer.
|
| 450 | * @cm_id: Connection identifier to transition to established.
|
| 451 | * @event: Type of event.
|
| 452 | *
|
| 453 | * This routine should be invoked by users to notify the CM of relevant
|
| 454 | * communication events. Events that should be reported to the CM and
|
| 455 | * when to report them are:
|
| 456 | *
|
| 457 | * IB_EVENT_COMM_EST - Used when a message is received on a connected
|
| 458 | * QP before an RTU has been received.
|
| 459 | * IB_EVENT_PATH_MIG - Notifies the CM that the connection has failed over
|
| 460 | * to the alternate path.
|
| 461 |
|
| 462 | int ib_cm_notify(struct ib_cm_id *cm_id, enum ib_event_type event);
|
| 463 |
|
| 464 | |
| 465 | * ib_send_cm_rej - Sends a connection rejection message to the
|
| 466 | * remote node.
|
| 467 | * @cm_id: Connection identifier associated with the connection being
|
| 468 | * rejected.
|
| 469 | * @reason: Reason for the connection request rejection.
|
| 470 | * @ari: Optional additional rejection information.
|
| 471 | * @ari_length: Size of the additional rejection information, in bytes.
|
| 472 | * @private_data: Optional user-defined private data sent with the
|
| 473 | * rejection message.
|
| 474 | * @private_data_len: Size of the private data buffer, in bytes.
|
| 475 |
|
| 476 | int ib_send_cm_rej(struct ib_cm_id *cm_id,
|
| 477 | enum ib_cm_rej_reason reason,
|
| 478 | void *ari,
|
| 479 | u8 ari_length,
|
| 480 | const void *private_data,
|
| 481 | u8 private_data_len);
|
| 482 |
|
| 483 | |
| 484 | * ib_prepare_cm_mra - Prepares to send a message receipt acknowledgment to a
|
| 485 | * connection message in case duplicates are received.
|
| 486 | * @cm_id: Connection identifier associated with the connection message.
|
| 487 |
|
| 488 | int ib_prepare_cm_mra(struct ib_cm_id *cm_id);
|
| 489 |
|
| 490 | |
| 491 | * ib_cm_init_qp_attr - Initializes the QP attributes for use in transitioning
|
| 492 | * to a specified QP state.
|
| 493 | * @cm_id: Communication identifier associated with the QP attributes to
|
| 494 | * initialize.
|
| 495 | * @qp_attr: On input, specifies the desired QP state. On output, the
|
| 496 | * mandatory and desired optional attributes will be set in order to
|
| 497 | * modify the QP to the specified state.
|
| 498 | * @qp_attr_mask: The QP attribute mask that may be used to transition the
|
| 499 | * QP to the specified state.
|
| 500 | *
|
| 501 | * Users must set the @qp_attr->qp_state to the desired QP state. This call
|
| 502 | * will set all required attributes for the given transition, along with
|
| 503 | * known optional attributes. Users may override the attributes returned from
|
| 504 | * this call before calling ib_modify_qp.
|
| 505 |
|
| 506 | int ib_cm_init_qp_attr(struct ib_cm_id *cm_id,
|
| 507 | struct ib_qp_attr *qp_attr,
|
| 508 | int *qp_attr_mask);
|
| 509 |
|
| 510 | struct ib_cm_sidr_req_param {
|
| 511 | struct sa_path_rec *path;
|
| 512 | const struct ib_gid_attr *sgid_attr;
|
| 513 | __be64 service_id;
|
| 514 | unsigned long timeout_ms;
|
| 515 | const void *private_data;
|
| 516 | u8 private_data_len;
|
| 517 | u8 max_cm_retries;
|
| 518 | };
|
| 519 |
|
| 520 | |
| 521 | * ib_send_cm_sidr_req - Sends a service ID resolution request to the
|
| 522 | * remote node.
|
| 523 | * @cm_id: Communication identifier that will be associated with the
|
| 524 | * service ID resolution request.
|
| 525 | * @param: Service ID resolution request information.
|
| 526 |
|
| 527 | int ib_send_cm_sidr_req(struct ib_cm_id *cm_id,
|
| 528 | struct ib_cm_sidr_req_param *param);
|
| 529 |
|
| 530 | struct ib_cm_sidr_rep_param {
|
| 531 | u32 qp_num;
|
| 532 | u32 qkey;
|
| 533 | enum ib_cm_sidr_status status;
|
| 534 | const void *info;
|
| 535 | u8 info_length;
|
| 536 | const void *private_data;
|
| 537 | u8 private_data_len;
|
| 538 | struct rdma_ucm_ece ece;
|
| 539 | };
|
| 540 |
|
| 541 | |
| 542 | * ib_send_cm_sidr_rep - Sends a service ID resolution reply to the
|
| 543 | * remote node.
|
| 544 | * @cm_id: Communication identifier associated with the received service ID
|
| 545 | * resolution request.
|
| 546 | * @param: Service ID resolution reply information.
|
| 547 |
|
| 548 | int ib_send_cm_sidr_rep(struct ib_cm_id *cm_id,
|
| 549 | struct ib_cm_sidr_rep_param *param);
|
| 550 |
|
| 551 | |
| 552 | * ibcm_reject_msg - return a pointer to a reject message string.
|
| 553 | * @reason: Value returned in the REJECT event status field.
|
| 554 |
|
| 555 | const char *__attribute_const__ ibcm_reject_msg(int reason);
|
| 556 |
|
| 557 | #endif
|