| 1 |
|
| 2 | |
| 3 | * Copyright (c) 2005 Network Appliance, Inc. All rights reserved.
|
| 4 | * Copyright (c) 2005 Open Grid Computing, Inc. All rights reserved.
|
| 5 |
|
| 6 |
|
| 7 | #ifndef IW_CM_H
|
| 8 | #define IW_CM_H
|
| 9 |
|
| 10 | #include <linux/in.h>
|
| 11 | #include <rdma/ib_cm.h>
|
| 12 |
|
| 13 | struct iw_cm_id;
|
| 14 |
|
| 15 | enum iw_cm_event_type {
|
| 16 | IW_CM_EVENT_CONNECT_REQUEST = 1,
|
| 17 | IW_CM_EVENT_CONNECT_REPLY,
|
| 18 | IW_CM_EVENT_ESTABLISHED,
|
| 19 | IW_CM_EVENT_DISCONNECT,
|
| 20 | IW_CM_EVENT_CLOSE
|
| 21 | };
|
| 22 |
|
| 23 | struct iw_cm_event {
|
| 24 | enum iw_cm_event_type event;
|
| 25 | int status;
|
| 26 | struct sockaddr_storage local_addr;
|
| 27 | struct sockaddr_storage remote_addr;
|
| 28 | void *private_data;
|
| 29 | void *provider_data;
|
| 30 | u8 private_data_len;
|
| 31 | u8 ord;
|
| 32 | u8 ird;
|
| 33 | };
|
| 34 |
|
| 35 | |
| 36 | * typedef iw_cm_handler - Function to be called by the IW CM when delivering
|
| 37 | * events to the client.
|
| 38 | *
|
| 39 | * @cm_id: The IW CM identifier associated with the event.
|
| 40 | * @event: Pointer to the event structure.
|
| 41 |
|
| 42 | typedef int (*iw_cm_handler)(struct iw_cm_id *cm_id,
|
| 43 | struct iw_cm_event *event);
|
| 44 |
|
| 45 | |
| 46 | * typedef iw_event_handler - Function called by the provider when delivering
|
| 47 | * provider events to the IW CM. Returns either 0 indicating the event was
|
| 48 | * processed or -errno if the event could not be processed.
|
| 49 | *
|
| 50 | * @cm_id: The IW CM identifier associated with the event.
|
| 51 | * @event: Pointer to the event structure.
|
| 52 |
|
| 53 | typedef int (*iw_event_handler)(struct iw_cm_id *cm_id,
|
| 54 | struct iw_cm_event *event);
|
| 55 |
|
| 56 | struct iw_cm_id {
|
| 57 | iw_cm_handler cm_handler;
|
| 58 | void *context;
|
| 59 | struct ib_device *device;
|
| 60 | struct sockaddr_storage local_addr;
|
| 61 | struct sockaddr_storage remote_addr;
|
| 62 | struct sockaddr_storage m_local_addr;
|
| 63 | struct sockaddr_storage m_remote_addr;
|
| 64 | void *provider_data;
|
| 65 | iw_event_handler event_handler; |
| 66 | events
|
| 67 |
|
| 68 | void (*add_ref)(struct iw_cm_id *);
|
| 69 | void (*rem_ref)(struct iw_cm_id *);
|
| 70 | u8 tos;
|
| 71 | bool tos_set:1;
|
| 72 | bool mapped:1;
|
| 73 | bool afonly:1;
|
| 74 | };
|
| 75 |
|
| 76 | struct iw_cm_conn_param {
|
| 77 | const void *private_data;
|
| 78 | u16 private_data_len;
|
| 79 | u32 ord;
|
| 80 | u32 ird;
|
| 81 | u32 qpn;
|
| 82 | };
|
| 83 |
|
| 84 | enum iw_flags {
|
| 85 |
|
| 86 | |
| 87 | * This flag allows the iwcm and iwpmd to still advertise
|
| 88 | * mappings but the real and mapped port numbers are the
|
| 89 | * same. Further, iwpmd will not bind any user socket to
|
| 90 | * reserve the port. This is required for soft iwarp
|
| 91 | * to play in the port mapped iwarp space.
|
| 92 |
|
| 93 | IW_F_NO_PORT_MAP = (1 << 0),
|
| 94 | };
|
| 95 |
|
| 96 | |
| 97 | * iw_create_cm_id - Create an IW CM identifier.
|
| 98 | *
|
| 99 | * @device: The IB device on which to create the IW CM identier.
|
| 100 | * @cm_handler: User callback invoked to report events associated with the
|
| 101 | * returned IW CM identifier.
|
| 102 | * @context: User specified context associated with the id.
|
| 103 |
|
| 104 | struct iw_cm_id *iw_create_cm_id(struct ib_device *device,
|
| 105 | iw_cm_handler cm_handler, void *context);
|
| 106 |
|
| 107 | |
| 108 | * iw_destroy_cm_id - Destroy an IW CM identifier.
|
| 109 | *
|
| 110 | * @cm_id: The previously created IW CM identifier to destroy.
|
| 111 | *
|
| 112 | * The client can assume that no events will be delivered for the CM ID after
|
| 113 | * this function returns.
|
| 114 |
|
| 115 | void iw_destroy_cm_id(struct iw_cm_id *cm_id);
|
| 116 |
|
| 117 | |
| 118 | * iw_cm_listen - Listen for incoming connection requests on the
|
| 119 | * specified IW CM id.
|
| 120 | *
|
| 121 | * @cm_id: The IW CM identifier.
|
| 122 | * @backlog: The maximum number of outstanding un-accepted inbound listen
|
| 123 | * requests to queue.
|
| 124 | *
|
| 125 | * The source address and port number are specified in the IW CM identifier
|
| 126 | * structure.
|
| 127 |
|
| 128 | int iw_cm_listen(struct iw_cm_id *cm_id, int backlog);
|
| 129 |
|
| 130 | |
| 131 | * iw_cm_accept - Called to accept an incoming connect request.
|
| 132 | *
|
| 133 | * @cm_id: The IW CM identifier associated with the connection request.
|
| 134 | * @iw_param: Pointer to a structure containing connection establishment
|
| 135 | * parameters.
|
| 136 | *
|
| 137 | * The specified cm_id will have been provided in the event data for a
|
| 138 | * CONNECT_REQUEST event. Subsequent events related to this connection will be
|
| 139 | * delivered to the specified IW CM identifier prior and may occur prior to
|
| 140 | * the return of this function. If this function returns a non-zero value, the
|
| 141 | * client can assume that no events will be delivered to the specified IW CM
|
| 142 | * identifier.
|
| 143 |
|
| 144 | int iw_cm_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *iw_param);
|
| 145 |
|
| 146 | |
| 147 | * iw_cm_reject - Reject an incoming connection request.
|
| 148 | *
|
| 149 | * @cm_id: Connection identifier associated with the request.
|
| 150 | * @private_data: Pointer to data to deliver to the remote peer as part of the
|
| 151 | * reject message.
|
| 152 | * @private_data_len: The number of bytes in the private_data parameter.
|
| 153 | *
|
| 154 | * The client can assume that no events will be delivered to the specified IW
|
| 155 | * CM identifier following the return of this function. The private_data
|
| 156 | * buffer is available for reuse when this function returns.
|
| 157 |
|
| 158 | int iw_cm_reject(struct iw_cm_id *cm_id, const void *private_data,
|
| 159 | u8 private_data_len);
|
| 160 |
|
| 161 | |
| 162 | * iw_cm_connect - Called to request a connection to a remote peer.
|
| 163 | *
|
| 164 | * @cm_id: The IW CM identifier for the connection.
|
| 165 | * @iw_param: Pointer to a structure containing connection establishment
|
| 166 | * parameters.
|
| 167 | *
|
| 168 | * Events may be delivered to the specified IW CM identifier prior to the
|
| 169 | * return of this function. If this function returns a non-zero value, the
|
| 170 | * client can assume that no events will be delivered to the specified IW CM
|
| 171 | * identifier.
|
| 172 |
|
| 173 | int iw_cm_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *iw_param);
|
| 174 |
|
| 175 | |
| 176 | * iw_cm_disconnect - Close the specified connection.
|
| 177 | *
|
| 178 | * @cm_id: The IW CM identifier to close.
|
| 179 | * @abrupt: If 0, the connection will be closed gracefully, otherwise, the
|
| 180 | * connection will be reset.
|
| 181 | *
|
| 182 | * The IW CM identifier is still active until the IW_CM_EVENT_CLOSE event is
|
| 183 | * delivered.
|
| 184 |
|
| 185 | int iw_cm_disconnect(struct iw_cm_id *cm_id, int abrupt);
|
| 186 |
|
| 187 | |
| 188 | * iw_cm_init_qp_attr - Called to initialize the attributes of the QP
|
| 189 | * associated with a IW CM identifier.
|
| 190 | *
|
| 191 | * @cm_id: The IW CM identifier associated with the QP
|
| 192 | * @qp_attr: Pointer to the QP attributes structure.
|
| 193 | * @qp_attr_mask: Pointer to a bit vector specifying which QP attributes are
|
| 194 | * valid.
|
| 195 |
|
| 196 | int iw_cm_init_qp_attr(struct iw_cm_id *cm_id, struct ib_qp_attr *qp_attr,
|
| 197 | int *qp_attr_mask);
|
| 198 |
|
| 199 | |
| 200 | * iwcm_reject_msg - return a pointer to a reject message string.
|
| 201 | * @reason: Value returned in the REJECT event status field.
|
| 202 |
|
| 203 | const char *__attribute_const__ iwcm_reject_msg(int reason);
|
| 204 |
|
| 205 | #endif
|