Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
ib_sa.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2004 Topspin Communications. All rights reserved.
3  * Copyright (c) 2005 Voltaire, Inc. All rights reserved.
4  * Copyright (c) 2006 Intel Corporation. All rights reserved.
5  *
6  * This software is available to you under a choice of one of two
7  * licenses. You may choose to be licensed under the terms of the GNU
8  * General Public License (GPL) Version 2, available from the file
9  * COPYING in the main directory of this source tree, or the
10  * OpenIB.org BSD license below:
11  *
12  * Redistribution and use in source and binary forms, with or
13  * without modification, are permitted provided that the following
14  * conditions are met:
15  *
16  * - Redistributions of source code must retain the above
17  * copyright notice, this list of conditions and the following
18  * disclaimer.
19  *
20  * - Redistributions in binary form must reproduce the above
21  * copyright notice, this list of conditions and the following
22  * disclaimer in the documentation and/or other materials
23  * provided with the distribution.
24  *
25  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
29  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
30  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
31  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32  * SOFTWARE.
33  */
34 
35 #ifndef IB_SA_H
36 #define IB_SA_H
37 
38 #include <linux/completion.h>
39 #include <linux/compiler.h>
40 
41 #include <linux/atomic.h>
42 
43 #include <rdma/ib_verbs.h>
44 #include <rdma/ib_mad.h>
45 
46 enum {
47  IB_SA_CLASS_VERSION = 2, /* IB spec version 1.1/1.2 */
48 
56 };
57 
58 enum {
81 };
82 
84  IB_SA_GT = 0,
85  IB_SA_LT = 1,
86  IB_SA_EQ = 2,
87  /*
88  * The meaning of "best" depends on the attribute: for
89  * example, for MTU best will return the largest available
90  * MTU, while for packet life time, best will return the
91  * smallest available life time.
92  */
94 };
95 
96 /*
97  * Structures for SA records are named "struct ib_sa_xxx_rec." No
98  * attempt is made to pack structures to match the physical layout of
99  * SA records in SA MADs; all packing and unpacking is handled by the
100  * SA query code.
101  *
102  * For a record with structure ib_sa_xxx_rec, the naming convention
103  * for the component mask value for field yyy is IB_SA_XXX_REC_YYY (we
104  * never use different abbreviations or otherwise change the spelling
105  * of xxx/yyy between ib_sa_xxx_rec.yyy and IB_SA_XXX_REC_YYY).
106  *
107  * Reserved rows are indicated with comments to help maintainability.
108  */
109 
110 #define IB_SA_PATH_REC_SERVICE_ID (IB_SA_COMP_MASK( 0) |\
111  IB_SA_COMP_MASK( 1))
112 #define IB_SA_PATH_REC_DGID IB_SA_COMP_MASK( 2)
113 #define IB_SA_PATH_REC_SGID IB_SA_COMP_MASK( 3)
114 #define IB_SA_PATH_REC_DLID IB_SA_COMP_MASK( 4)
115 #define IB_SA_PATH_REC_SLID IB_SA_COMP_MASK( 5)
116 #define IB_SA_PATH_REC_RAW_TRAFFIC IB_SA_COMP_MASK( 6)
117 /* reserved: 7 */
118 #define IB_SA_PATH_REC_FLOW_LABEL IB_SA_COMP_MASK( 8)
119 #define IB_SA_PATH_REC_HOP_LIMIT IB_SA_COMP_MASK( 9)
120 #define IB_SA_PATH_REC_TRAFFIC_CLASS IB_SA_COMP_MASK(10)
121 #define IB_SA_PATH_REC_REVERSIBLE IB_SA_COMP_MASK(11)
122 #define IB_SA_PATH_REC_NUMB_PATH IB_SA_COMP_MASK(12)
123 #define IB_SA_PATH_REC_PKEY IB_SA_COMP_MASK(13)
124 #define IB_SA_PATH_REC_QOS_CLASS IB_SA_COMP_MASK(14)
125 #define IB_SA_PATH_REC_SL IB_SA_COMP_MASK(15)
126 #define IB_SA_PATH_REC_MTU_SELECTOR IB_SA_COMP_MASK(16)
127 #define IB_SA_PATH_REC_MTU IB_SA_COMP_MASK(17)
128 #define IB_SA_PATH_REC_RATE_SELECTOR IB_SA_COMP_MASK(18)
129 #define IB_SA_PATH_REC_RATE IB_SA_COMP_MASK(19)
130 #define IB_SA_PATH_REC_PACKET_LIFE_TIME_SELECTOR IB_SA_COMP_MASK(20)
131 #define IB_SA_PATH_REC_PACKET_LIFE_TIME IB_SA_COMP_MASK(21)
132 #define IB_SA_PATH_REC_PREFERENCE IB_SA_COMP_MASK(22)
133 
136  union ib_gid dgid;
137  union ib_gid sgid;
141  /* reserved */
157 };
158 
159 #define IB_SA_MCMEMBER_REC_MGID IB_SA_COMP_MASK( 0)
160 #define IB_SA_MCMEMBER_REC_PORT_GID IB_SA_COMP_MASK( 1)
161 #define IB_SA_MCMEMBER_REC_QKEY IB_SA_COMP_MASK( 2)
162 #define IB_SA_MCMEMBER_REC_MLID IB_SA_COMP_MASK( 3)
163 #define IB_SA_MCMEMBER_REC_MTU_SELECTOR IB_SA_COMP_MASK( 4)
164 #define IB_SA_MCMEMBER_REC_MTU IB_SA_COMP_MASK( 5)
165 #define IB_SA_MCMEMBER_REC_TRAFFIC_CLASS IB_SA_COMP_MASK( 6)
166 #define IB_SA_MCMEMBER_REC_PKEY IB_SA_COMP_MASK( 7)
167 #define IB_SA_MCMEMBER_REC_RATE_SELECTOR IB_SA_COMP_MASK( 8)
168 #define IB_SA_MCMEMBER_REC_RATE IB_SA_COMP_MASK( 9)
169 #define IB_SA_MCMEMBER_REC_PACKET_LIFE_TIME_SELECTOR IB_SA_COMP_MASK(10)
170 #define IB_SA_MCMEMBER_REC_PACKET_LIFE_TIME IB_SA_COMP_MASK(11)
171 #define IB_SA_MCMEMBER_REC_SL IB_SA_COMP_MASK(12)
172 #define IB_SA_MCMEMBER_REC_FLOW_LABEL IB_SA_COMP_MASK(13)
173 #define IB_SA_MCMEMBER_REC_HOP_LIMIT IB_SA_COMP_MASK(14)
174 #define IB_SA_MCMEMBER_REC_SCOPE IB_SA_COMP_MASK(15)
175 #define IB_SA_MCMEMBER_REC_JOIN_STATE IB_SA_COMP_MASK(16)
176 #define IB_SA_MCMEMBER_REC_PROXY_JOIN IB_SA_COMP_MASK(17)
177 
179  union ib_gid mgid;
197 };
198 
199 /* Service Record Component Mask Sec 15.2.5.14 Ver 1.1 */
200 #define IB_SA_SERVICE_REC_SERVICE_ID IB_SA_COMP_MASK( 0)
201 #define IB_SA_SERVICE_REC_SERVICE_GID IB_SA_COMP_MASK( 1)
202 #define IB_SA_SERVICE_REC_SERVICE_PKEY IB_SA_COMP_MASK( 2)
203 /* reserved: 3 */
204 #define IB_SA_SERVICE_REC_SERVICE_LEASE IB_SA_COMP_MASK( 4)
205 #define IB_SA_SERVICE_REC_SERVICE_KEY IB_SA_COMP_MASK( 5)
206 #define IB_SA_SERVICE_REC_SERVICE_NAME IB_SA_COMP_MASK( 6)
207 #define IB_SA_SERVICE_REC_SERVICE_DATA8_0 IB_SA_COMP_MASK( 7)
208 #define IB_SA_SERVICE_REC_SERVICE_DATA8_1 IB_SA_COMP_MASK( 8)
209 #define IB_SA_SERVICE_REC_SERVICE_DATA8_2 IB_SA_COMP_MASK( 9)
210 #define IB_SA_SERVICE_REC_SERVICE_DATA8_3 IB_SA_COMP_MASK(10)
211 #define IB_SA_SERVICE_REC_SERVICE_DATA8_4 IB_SA_COMP_MASK(11)
212 #define IB_SA_SERVICE_REC_SERVICE_DATA8_5 IB_SA_COMP_MASK(12)
213 #define IB_SA_SERVICE_REC_SERVICE_DATA8_6 IB_SA_COMP_MASK(13)
214 #define IB_SA_SERVICE_REC_SERVICE_DATA8_7 IB_SA_COMP_MASK(14)
215 #define IB_SA_SERVICE_REC_SERVICE_DATA8_8 IB_SA_COMP_MASK(15)
216 #define IB_SA_SERVICE_REC_SERVICE_DATA8_9 IB_SA_COMP_MASK(16)
217 #define IB_SA_SERVICE_REC_SERVICE_DATA8_10 IB_SA_COMP_MASK(17)
218 #define IB_SA_SERVICE_REC_SERVICE_DATA8_11 IB_SA_COMP_MASK(18)
219 #define IB_SA_SERVICE_REC_SERVICE_DATA8_12 IB_SA_COMP_MASK(19)
220 #define IB_SA_SERVICE_REC_SERVICE_DATA8_13 IB_SA_COMP_MASK(20)
221 #define IB_SA_SERVICE_REC_SERVICE_DATA8_14 IB_SA_COMP_MASK(21)
222 #define IB_SA_SERVICE_REC_SERVICE_DATA8_15 IB_SA_COMP_MASK(22)
223 #define IB_SA_SERVICE_REC_SERVICE_DATA16_0 IB_SA_COMP_MASK(23)
224 #define IB_SA_SERVICE_REC_SERVICE_DATA16_1 IB_SA_COMP_MASK(24)
225 #define IB_SA_SERVICE_REC_SERVICE_DATA16_2 IB_SA_COMP_MASK(25)
226 #define IB_SA_SERVICE_REC_SERVICE_DATA16_3 IB_SA_COMP_MASK(26)
227 #define IB_SA_SERVICE_REC_SERVICE_DATA16_4 IB_SA_COMP_MASK(27)
228 #define IB_SA_SERVICE_REC_SERVICE_DATA16_5 IB_SA_COMP_MASK(28)
229 #define IB_SA_SERVICE_REC_SERVICE_DATA16_6 IB_SA_COMP_MASK(29)
230 #define IB_SA_SERVICE_REC_SERVICE_DATA16_7 IB_SA_COMP_MASK(30)
231 #define IB_SA_SERVICE_REC_SERVICE_DATA32_0 IB_SA_COMP_MASK(31)
232 #define IB_SA_SERVICE_REC_SERVICE_DATA32_1 IB_SA_COMP_MASK(32)
233 #define IB_SA_SERVICE_REC_SERVICE_DATA32_2 IB_SA_COMP_MASK(33)
234 #define IB_SA_SERVICE_REC_SERVICE_DATA32_3 IB_SA_COMP_MASK(34)
235 #define IB_SA_SERVICE_REC_SERVICE_DATA64_0 IB_SA_COMP_MASK(35)
236 #define IB_SA_SERVICE_REC_SERVICE_DATA64_1 IB_SA_COMP_MASK(36)
237 
238 #define IB_DEFAULT_SERVICE_LEASE 0xFFFFFFFF
239 
242  union ib_gid gid;
244  /* reserved */
246  u8 key[16];
247  u8 name[64];
248  u8 data8[16];
252 };
253 
254 #define IB_SA_GUIDINFO_REC_LID IB_SA_COMP_MASK(0)
255 #define IB_SA_GUIDINFO_REC_BLOCK_NUM IB_SA_COMP_MASK(1)
256 #define IB_SA_GUIDINFO_REC_RES1 IB_SA_COMP_MASK(2)
257 #define IB_SA_GUIDINFO_REC_RES2 IB_SA_COMP_MASK(3)
258 #define IB_SA_GUIDINFO_REC_GID0 IB_SA_COMP_MASK(4)
259 #define IB_SA_GUIDINFO_REC_GID1 IB_SA_COMP_MASK(5)
260 #define IB_SA_GUIDINFO_REC_GID2 IB_SA_COMP_MASK(6)
261 #define IB_SA_GUIDINFO_REC_GID3 IB_SA_COMP_MASK(7)
262 #define IB_SA_GUIDINFO_REC_GID4 IB_SA_COMP_MASK(8)
263 #define IB_SA_GUIDINFO_REC_GID5 IB_SA_COMP_MASK(9)
264 #define IB_SA_GUIDINFO_REC_GID6 IB_SA_COMP_MASK(10)
265 #define IB_SA_GUIDINFO_REC_GID7 IB_SA_COMP_MASK(11)
266 
270  /* reserved */
274 };
275 
276 struct ib_sa_client {
278  struct completion comp;
279 };
280 
285 
291 
292 struct ib_sa_query;
293 
294 void ib_sa_cancel_query(int id, struct ib_sa_query *query);
295 
297  struct ib_device *device, u8 port_num,
298  struct ib_sa_path_rec *rec,
301  void (*callback)(int status,
302  struct ib_sa_path_rec *resp,
303  void *context),
304  void *context,
305  struct ib_sa_query **query);
306 
307 int ib_sa_service_rec_query(struct ib_sa_client *client,
308  struct ib_device *device, u8 port_num,
309  u8 method,
310  struct ib_sa_service_rec *rec,
311  ib_sa_comp_mask comp_mask,
312  int timeout_ms, gfp_t gfp_mask,
313  void (*callback)(int status,
314  struct ib_sa_service_rec *resp,
315  void *context),
316  void *context,
317  struct ib_sa_query **sa_query);
318 
320  struct ib_sa_mcmember_rec rec;
323  struct ib_sa_multicast *multicast);
324  void *context;
325 };
326 
355 struct ib_sa_multicast *ib_sa_join_multicast(struct ib_sa_client *client,
356  struct ib_device *device, u8 port_num,
357  struct ib_sa_mcmember_rec *rec,
358  ib_sa_comp_mask comp_mask, gfp_t gfp_mask,
359  int (*callback)(int status,
360  struct ib_sa_multicast
361  *multicast),
362  void *context);
363 
374 void ib_sa_free_multicast(struct ib_sa_multicast *multicast);
375 
385 int ib_sa_get_mcmember_rec(struct ib_device *device, u8 port_num,
386  union ib_gid *mgid, struct ib_sa_mcmember_rec *rec);
387 
392 int ib_init_ah_from_mcmember(struct ib_device *device, u8 port_num,
393  struct ib_sa_mcmember_rec *rec,
394  struct ib_ah_attr *ah_attr);
395 
400 int ib_init_ah_from_path(struct ib_device *device, u8 port_num,
401  struct ib_sa_path_rec *rec,
402  struct ib_ah_attr *ah_attr);
403 
408 void ib_sa_unpack_path(void *attribute, struct ib_sa_path_rec *rec);
409 
410 /* Support GuidInfoRecord */
411 int ib_sa_guid_info_rec_query(struct ib_sa_client *client,
412  struct ib_device *device, u8 port_num,
413  struct ib_sa_guidinfo_rec *rec,
414  ib_sa_comp_mask comp_mask, u8 method,
415  int timeout_ms, gfp_t gfp_mask,
416  void (*callback)(int status,
417  struct ib_sa_guidinfo_rec *resp,
418  void *context),
419  void *context,
420  struct ib_sa_query **sa_query);
421 #endif /* IB_SA_H */