docs/how-to-build.md: use proper markup for directory names
[unleashed/tickless.git] / include / sys / ib / mgt / sa_recs.h
blob467942c189f5704b84387f51ad9f033c9d228167
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
20 * CDDL HEADER END
23 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 #ifndef _SYS_IB_MGT_SA_RECS_H
28 #define _SYS_IB_MGT_SA_RECS_H
30 #pragma ident "%Z%%M% %I% %E% SMI"
33 * This file contains the definitions of the SA-specific records in IB spec
34 * volume 1, release 1.1, chapter 15.
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
41 #include <sys/ib/ib_types.h>
42 #include <sys/ib/mgt/sm_attr.h>
44 /* class header for SA MADs */
45 typedef struct _ib_sa_hdr_t {
46 uint64_t SM_KEY;
47 uint16_t AttributeOffset;
48 uint16_t Reserved;
49 uint64_t ComponentMask;
50 } ib_sa_hdr_t;
52 /* subnet administration methods */
53 #define SA_SUBN_ADM_GET 0x01
54 #define SA_SUBN_ADM_GET_RESP 0x81
55 #define SA_SUBN_ADM_SET 0x02
56 #define SA_SUBN_ADM_REPORT 0x06
57 #define SA_SUBN_ADM_REPORT_RESP 0x86
58 #define SA_SUBN_ADM_GET_TABLE 0x12
59 #define SA_SUBN_ADM_GET_TABLE_RESP 0x92
60 #define SA_SUBN_ADM_GET_TRACE_TABLE 0x13
61 #define SA_SUBN_ADM_GET_MULTI 0x14
62 #define SA_SUBN_ADM_GET_MULTI_RESP 0x94
63 #define SA_SUBN_ADM_DELETE 0x15
64 #define SA_SUBN_ADM_DELETE_RESP 0x95
66 /* sa MAD status field bit value */
67 #define SA_STATUS_NO_ERROR 0x0000
68 #define SA_STATUS_ERR_NO_RESOURCES 0x0100
69 #define SA_STATUS_ERR_REQ_INVALID 0x0200
70 #define SA_STATUS_ERR_NO_RECORDS 0x0300
71 #define SA_STATUS_ERR_TOO_MANY_RECORDS 0x0400
72 #define SA_STATUS_ERR_REQ_INVALID_GID 0x0500
73 #define SA_STATUS_ERR_REQ_INSUFFICIENT_COMPONENTS 0x0600
74 #define SA_STATUS_ERROR_MASK 0xFF00
77 /* SA-Specific ClassPortinfo::CapabilityMask Bits: Table 152 */
78 #define SA_CAPMASK_OPT_RECORDS_SUPPORTED 0x100
79 #define SA_CAPMASK_UD_MCAST_SUPPORTED 0x200
80 #define SA_CAPMASK_MULTIPATH_SUPPORTED 0x400
81 #define SA_CAPMASK_REINIT_SUPPORTED 0x800
83 /* SA attribute IDs: Table 155 */
84 #define SA_CLASSPORTINFO_ATTRID 0x01
85 #define SA_NOTICE_ATTRID 0x02
86 #define SA_INFORMINFO_ATTRID 0x03
87 #define SA_NODERECORD_ATTRID 0x11
88 #define SA_PORTINFORECORD_ATTRID 0x12
89 #define SA_SLTOVLRECORD_ATTRID 0x13
90 #define SA_SWITCHINFORECORD_ATTRID 0x14
91 #define SA_LINEARFDBRECORD_ATTRID 0x15
92 #define SA_RANDOMFDBRECORD_ATTRID 0x16
93 #define SA_MULTICASTFDBRECORD_ATTRID 0x17
94 #define SA_SMINFORECORD_ATTRID 0x18
95 #define SA_INFORMINFORECORD_ATTRID 0xF3
96 #define SA_LINKRECORD_ATTRID 0x20
97 #define SA_GUIDINFORECORD_ATTRID 0x30
98 #define SA_SERVICERECORD_ATTRID 0x31
99 #define SA_PARTITIONRECORD_ATTRID 0x33
100 #define SA_PATHRECORD_ATTRID 0x35
101 #define SA_VLARBRECORD_ATTRID 0x36
102 #define SA_MCMEMBERRECORD_ATTRID 0x38
103 #define SA_TRACERECORD_ATTRID 0x39
104 #define SA_MULTIPATHRECORD_ATTRID 0x3A
105 #define SA_SERVICEASSNRECORD_ATTRID 0x3B
107 /* Node Record: Table 157 */
108 typedef struct sa_node_record_s {
109 ib_lid_t LID; /* LID of a port of the node */
110 uint16_t Reserved;
111 sm_nodeinfo_t NodeInfo; /* NodeInfo attr. contents */
112 sm_nodedesc_t NodeDescription; /* NodeDesc attr. contents */
113 } sa_node_record_t;
115 #define SA_NODEINFO_COMPMASK_NODELID 0x1
116 #define SA_NODEINFO_COMPMASK_RESERVED 0x2
117 #define SA_NODEINFO_COMPMASK_BASEVERSION 0x4
118 #define SA_NODEINFO_COMPMASK_CLASSVERSION 0x8
119 #define SA_NODEINFO_COMPMASK_NODETYPE 0x10
120 #define SA_NODEINFO_COMPMASK_NUMPORTS 0x20
121 #define SA_NODEINFO_COMPMASK_SYSIMAGEGUID 0x40
122 #define SA_NODEINFO_COMPMASK_NODEGUID 0x80
123 #define SA_NODEINFO_COMPMASK_PORTGUID 0x100
124 #define SA_NODEINFO_COMPMASK_PARTITIONCAP 0x200
125 #define SA_NODEINFO_COMPMASK_DEVICEID 0x400
126 #define SA_NODEINFO_COMPMASK_REVISION 0x800
127 #define SA_NODEINFO_COMPMASK_LOCALPORTNUM 0x1000
128 #define SA_NODEINFO_COMPMASK_VENDORID 0x2000
129 #define SA_NODEINFO_COMPMASK_NODEDESCRIPTION 0x4000
131 /* Portinfo Record: Table 158 */
132 typedef struct sa_portinfo_record_s {
133 ib_lid_t EndportLID; /* LID of the port */
134 uint8_t PortNum; /* port number (for switch) */
135 uint8_t Reserved;
136 sm_portinfo_t PortInfo; /* PortInfo attr. contents */
137 } sa_portinfo_record_t;
139 /* first 3 components are atomic */
140 #define SA_PORTINFO_COMPMASK_PORTLID 0x1
141 #define SA_PORTINFO_COMPMASK_PORTNUM 0x2
142 #define SA_PORTINFO_COMPMASK_RESERVED 0x4
143 #define SA_PORTINFO_COMPMASK_MKEY 0x8
144 #define SA_PORTINFO_COMPMASK_GIDPREFIX 0x10
145 #define SA_PORTINFO_COMPMASK_LID 0x20
146 #define SA_PORTINFO_COMPMASK_MASTERSMLID 0x40
147 #define SA_PORTINFO_COMPMASK_CAPMASK 0x80
148 #define SA_PORTINFO_COMPMASK_DIAGCODE 0x100
149 #define SA_PORTINFO_COMPMASK_MKEYLEASE 0x200
150 #define SA_PORTINFO_COMPMASK_LOCALPORTNUM 0x400
151 #define SA_PORTINFO_COMPMASK_LINKWIDTHEN 0x800
152 #define SA_PORTINFO_COMPMASK_LINKWIDTHSUPP 0x1000
153 #define SA_PORTINFO_COMPMASK_LINKWIDTHACT 0x2000
154 #define SA_PORTINFO_COMPMASK_LINKSPEEDSUPP 0x4000
155 #define SA_PORTINFO_COMPMASK_PORTSTATE 0x8000
156 #define SA_PORTINFO_COMPMASK_PORTPHYSICALSTATE 0x10000
157 #define SA_PORTINFO_COMPMASK_LINKDOWNDEFSTATE 0x20000
158 #define SA_PORTINFO_COMPMASK_MKEYPROTBITS 0x40000
159 #define SA_PORTINFO_COMPMASK_RESERVED2 0x80000
160 #define SA_PORTINFO_COMPMASK_LMC 0x100000
161 #define SA_PORTINFO_COMPMASK_LINKSPEEDACT 0x200000
162 #define SA_PORTINFO_COMPMASK_LINKSPEEDEN 0x400000
163 #define SA_PORTINFO_COMPMASK_NEIGHBORMTU 0x800000
164 #define SA_PORTINFO_COMPMASK_MASTERSMSL 0x1000000
165 #define SA_PORTINFO_COMPMASK_VLCAP 0x2000000
166 #define SA_PORTINFO_COMPMASK_INITTYPE 0x4000000
167 #define SA_PORTINFO_COMPMASK_VLHIGHLIMIT 0x8000000
168 #define SA_PORTINFO_COMPMASK_VLARBHIGHCAP 0x10000000
169 #define SA_PORTINFO_COMPMASK_VLARBLOWCAP 0x20000000
170 #define SA_PORTINFO_COMPMASK_INITTYPEREPLY 0x40000000
171 #define SA_PORTINFO_COMPMASK_MTUCAP 0x80000000
172 #define SA_PORTINFO_COMPMASK_VLSTALLCOUNT 0x100000000
173 #define SA_PORTINFO_COMPMASK_HOQLIFE 0x200000000
174 #define SA_PORTINFO_COMPMASK_OPERATIONALVLS 0x400000000
175 #define SA_PORTINFO_COMPMASK_PARTENFINBOUND 0x800000000
176 #define SA_PORTINFO_COMPMASK_PARTENFOUTBOUND 0x1000000000
177 #define SA_PORTINFO_COMPMASK_FILTERRAWPKTIN 0x2000000000
178 #define SA_PORTINFO_COMPMASK_FILTERRAWPKTOUT 0x4000000000
179 #define SA_PORTINFO_COMPMASK_MKEYVIOLATIONS 0x8000000000
180 #define SA_PORTINFO_COMPMASK_PKEYVIOLATIONS 0x10000000000
181 #define SA_PORTINFO_COMPMASK_QKEYVIOLATIONS 0x20000000000
182 #define SA_PORTINFO_COMPMASK_GUIDCAP 0x40000000000
183 #define SA_PORTINFO_COMPMASK_RESERVED5 0x80000000000
184 #define SA_PORTINFO_COMPMASK_SUBNETTIMEOUT 0x100000000000
185 #define SA_PORTINFO_COMPMASK_RESERVED6 0x200000000000
186 #define SA_PORTINFO_COMPMASK_RESPTIMEVALUE 0x400000000000
187 #define SA_PORTINFO_COMPMASK_LOCALPHYERRORS 0x800000000000
188 #define SA_PORTINFO_COMPMASK_OVERRUNERRORS 0x1000000000000
190 /* SLtoVL Mapping Table Record: Table 159 */
191 typedef struct sa_SLtoVLmapping_record_s {
192 ib_lid_t LID;
193 uint8_t InputPortNum;
194 uint8_t OutputPortNum;
195 uint32_t Reserved;
196 sm_SLtoVL_mapping_table_t SLtoVLMappingTable;
197 } sa_SLtoVLmapping_record_t;
199 #define SA_SLTOVL_COMPMASK_PORTLID 0x1
200 #define SA_SLTOVL_COMPMASK_INPUTPORTNUM 0x2
201 #define SA_SLTOVL_COMPMASK_OUTPUTPORTNUM 0x4
202 #define SA_SLTOVL_COMPMASK_RESERVED 0x8
203 #define SA_SLTOVL_COMPMASK_SL0TOVL 0x10
204 #define SA_SLTOVL_COMPMASK_SL1TOVL 0x20
205 #define SA_SLTOVL_COMPMASK_SL2TOVL 0x40
206 #define SA_SLTOVL_COMPMASK_SL3TOVL 0x80
207 #define SA_SLTOVL_COMPMASK_SL4TOVL 0x100
208 #define SA_SLTOVL_COMPMASK_SL5TOVL 0x200
209 #define SA_SLTOVL_COMPMASK_SL6TOVL 0x400
210 #define SA_SLTOVL_COMPMASK_SL7TOVL 0x800
211 #define SA_SLTOVL_COMPMASK_SL8TOVL 0x1000
212 #define SA_SLTOVL_COMPMASK_SL9TOVL 0x2000
213 #define SA_SLTOVL_COMPMASK_SL10TOVL 0x4000
214 #define SA_SLTOVL_COMPMASK_SL11TOVL 0x8000
215 #define SA_SLTOVL_COMPMASK_SL12TOVL 0x10000
216 #define SA_SLTOVL_COMPMASK_SL13TOVL 0x20000
217 #define SA_SLTOVL_COMPMASK_SL14TOVL 0x40000
218 #define SA_SLTOVL_COMPMASK_SL15TOVL 0x80000
220 /* Switchinfo Record: Table 160 */
221 typedef struct sa_switchinfo_record_s {
222 ib_lid_t LID; /* LID of switch port 0 */
223 uint16_t Reserved;
224 sm_switchinfo_t SwitchInfo; /* SwitchInfo attr. contents */
225 } sa_switchinfo_record_t;
227 #define SA_SWITCHINFO_COMPMASK_SWITCHLID 0x1
228 #define SA_SWITCHINFO_COMPMASK_RESERVED 0x2
229 #define SA_SWITCHINFO_COMPMASK_LINEARFDBCAP 0x4
230 #define SA_SWITCHINFO_COMPMASK_RANDOMFDBCAP 0x8
231 #define SA_SWITCHINFO_COMPMASK_MCASTFDBCAP 0x10
232 #define SA_SWITCHINFO_COMPMASK_LINEARFDBTOP 0x20
233 #define SA_SWITCHINFO_COMPMASK_DEFAULTPORT 0x40
234 #define SA_SWITCHINFO_COMPMASK_DEFAULTMCASTPPORT 0x80
235 #define SA_SWITCHINFO_COMPMASK_DEFAULTMCASTNPPORT 0x100
236 #define SA_SWITCHINFO_COMPMASK_LIFETIMEVALUE 0x200
237 #define SA_SWITCHINFO_COMPMASK_PORTSTATECHANGE 0x400
238 #define SA_SWITCHINFO_COMPMASK_RESERVED2 0x800
239 #define SA_SWITCHINFO_COMPMASK_LIDSPERPORT 0x1000
240 #define SA_SWITCHINFO_COMPMASK_PARTENFCAP 0x2000
241 #define SA_SWITCHINFO_COMPMASK_INBOUNDENFCAP 0x4000
242 #define SA_SWITCHINFO_COMPMASK_OUTBOUNDENFCAP 0x8000
243 #define SA_SWITCHINFO_COMPMASK_FILTERRAWPKTINCAP 0x10000
244 #define SA_SWITCHINFO_COMPMASK_FILTERRAWPKTOUTCAP 0x20000
245 #define SA_SWITCHINFO_COMPMASK_ENHANCED_PORT_0 0x40000
247 /* Linear Forwarding Table Record: Table 161 */
248 typedef struct sa_linearft_record_s {
249 ib_lid_t LID;
250 uint16_t BlockNum;
251 uint32_t Reserved;
252 sm_linear_forwarding_table_t LinearFT;
253 } sa_linearft_record_t;
255 #define SA_LFT_COMPMASK_LFTLID 0x1
256 #define SA_LFT_COMPMASK_BLOCKNUM 0x2
257 #define SA_LFT_COMPMASK_RESERVED 0x4
258 #define SA_LFT_COMPMASK_LINEARFORWARDINGTABLE 0x8
260 /* Random Forwarding Table Record: Table 162 */
261 typedef struct sa_randomft_record_s {
262 ib_lid_t LID;
263 uint16_t BlockNum;
264 uint32_t Reserved;
265 sm_random_forwarding_table_t RandomFT;
266 } sa_randomft_record_t;
268 #define SA_RFT_COMPMASK_RFTLID 0x1
269 #define SA_RFT_COMPMASK_BLOCKNUM 0x2
270 #define SA_RFT_COMPMASK_RESERVED 0x4
271 #define SA_RFT_COMPMASK_RANDOMFORWARDINGTABLE 0x8
273 /* Multicast Forwarding Table Record: Table 163 */
275 #if defined(_BIT_FIELDS_HTOL)
276 typedef struct sa_multicastft_record_s {
277 ib_lid_t LID;
278 uint16_t Position :4; /* position field of attr */
279 uint16_t Reserved :3;
280 uint16_t BlockNum :9;
281 uint32_t Reserved2;
282 sm_multicast_forwarding_table_t MulticastFT;
283 } sa_multicastft_record_t;
285 #elif defined(_BIT_FIELDS_LTOH)
287 typedef struct sa_multicastft_record_s {
288 ib_lid_t LID;
289 uint16_t BlockNum :9;
290 uint16_t Reserved :3;
291 uint16_t Position :4; /* position field of attr */
292 uint32_t Reserved2;
293 sm_multicast_forwarding_table_t MulticastFT;
294 } sa_multicastft_record_t;
296 #else
297 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_HTOL must be defined
298 #endif /* _BIT_FIELDS_HTOL */
300 #define SA_MFT_COMPMASK_MFTLID 0x1
301 #define SA_MFT_COMPMASK_POSITION 0x2
302 #define SA_MFT_COMPMASK_RESERVED 0x4
303 #define SA_MFT_COMPMASK_BLOCKNUM 0x8
304 #define SA_MFT_COMPMASK_RESERVED2 0x10
305 #define SA_MFT_COMPMASK_MULTICASTFORWARDINGTABLE 0x20
307 /* VLArbitration Table Record: Table 164 */
308 typedef struct sa_VLarb_table_record_s {
309 ib_lid_t LID;
310 uint8_t OutputPortNum;
311 uint8_t BlockNum;
312 uint32_t Reserved;
313 sm_VLarb_table_t VLArbTable;
314 } sa_VLarb_table_record_t;
316 #define SA_VLARB_COMPMASK_NODELID 0x1
317 #define SA_VLARB_COMPMASK_OUTPUTPORTNUM 0x2
318 #define SA_VLARB_COMPMASK_BLOCKNUM 0x4
319 #define SA_VLARB_COMPMASK_RESERVED 0x8
320 #define SA_VLARB_COMPMASK_VLARBTABLE 0x10
322 /* SMInfo Record: Table 165 */
323 typedef struct _sminfo_record_s {
324 ib_lid_t LID;
325 uint16_t Reserved;
326 sm_sminfo_t SMInfo;
327 } sa_sminfo_record_t;
329 #define SA_SMINFO_COMPMASK_NODELID 0x1
330 #define SA_SMINFO_COMPMASK_RESERVED 0x2
331 #define SA_SMINFO_COMPMASK_GUID 0x4
332 #define SA_SMINFO_COMPMASK_SMKEY 0x8
333 #define SA_SMINFO_COMPMASK_ACTCOUNT 0x10
334 #define SA_SMINFO_COMPMASK_PRIORITY 0x20
335 #define SA_SMINFO_COMPMASK_SMSTATE 0x40
337 /* P_Key Table Record: Table 166 */
338 typedef struct sa_pkey_table_record_s {
339 ib_lid_t LID;
340 uint16_t BlockNum;
341 uint8_t PortNum;
342 uint8_t Reserved[3];
343 sm_pkey_table_t P_KeyTable;
344 } sa_pkey_table_record_t;
346 #define SA_PKEY_COMPMASK_PORTLID 0x1
347 #define SA_PKEY_COMPMASK_BLOCKNUM 0x2
348 #define SA_PKEY_COMPMASK_PORTNUM 0x4
349 #define SA_PKEY_COMPMASK_RESERVED 0x8
350 #define SA_PKEY_COMPMASK_PKEYTABLE 0x10
352 /* InformInfo Record: Table 167 */
353 typedef struct sa_informinfo_record_s {
354 ib_gid_t SubscriberGID;
355 uint16_t Enum;
356 uint8_t Reserved[6];
357 ib_mad_informinfo_t InformInfo;
358 } sa_informinfo_record_t;
360 #define SA_INFORMINFO_COMPMASK_SUBGID 0x1
361 #define SA_INFORMINFO_COMPMASK_ENUM 0x2
362 #define SA_INFORMINFO_COMPMASK_RESERVED 0x4
363 #define SA_INFORMINFO_COMPMASK_GID 0x8
364 #define SA_INFORMINFO_COMPMASK_LIDRANGEBEGIN 0x10
365 #define SA_INFORMINFO_COMPMASK_LIDRANGEEND 0x20
366 #define SA_INFORMINFO_COMPMASK_RESERVED2 0x40
367 #define SA_INFORMINFO_COMPMASK_ISGENERIC 0x80
368 #define SA_INFORMINFO_COMPMASK_SUBSCRIBE 0x100
369 #define SA_INFORMINFO_COMPMASK_TYPE 0x200
370 #define SA_INFORMINFO_COMPMASK_TRAPNUM_DEVID 0x400
371 #define SA_INFORMINFO_COMPMASK_QPN 0x800
372 #define SA_INFORMINFO_COMPMASK_RESERVED3 0x1000
373 #define SA_INFORMINFO_COMPMASK_RESPTIMEVALUE 0x2000
374 #define SA_INFORMINFO_COMPMASK_RESERVED4 0x4000
375 #define SA_INFORMINFO_COMPMASK_PRODTYPE_VENDID 0x8000
377 /* Link Record: Table 168 */
378 typedef struct sa_link_record_s {
379 ib_lid_t FromLID;
380 uint8_t FromPort;
381 uint8_t ToPort;
382 ib_lid_t ToLID;
383 } sa_link_record_t;
385 #define SA_LINKRECORD_COMPMASK_FROMLID 0x1
386 #define SA_LINKRECORD_COMPMASK_FROMPORT 0x2
387 #define SA_LINKRECORD_COMPMASK_TOPORT 0x4
388 #define SA_LINKRECORD_COMPMASK_TOLID 0x8
390 /* Service Record: Table 169 */
391 typedef struct sa_service_record_s {
392 uint64_t ServiceID; /* id of service on port */
393 ib_gid_t ServiceGID; /* port GID for this service */
394 uint16_t ServiceP_Key; /* p_key used to contact serv */
395 uint16_t Reserved;
396 uint32_t ServiceLease; /* lease period remaining */
397 uint64_t ServiceKey_hi; /* key value assoc. with serv */
398 uint64_t ServiceKey_lo;
399 uint8_t ServiceName[IB_SVC_NAME_LEN];
400 /* UTF-8 encoded service name */
401 uint8_t ServiceData[IB_SVC_DATA_LEN];
402 /* data for this service rec. */
403 } sa_service_record_t;
405 #define SA_SR_INDEFINITE_SERVICE_LEASE 0xFFFFFFFF
408 * #defines mapping individual bits of the service record component mask
409 * to components in the service record. ServiceData uses one component mask per
410 * bit. See the IB spec for details.
412 #define SA_SR_COMPMASK_ID 0x1
413 #define SA_SR_COMPMASK_GID 0x2
414 #define SA_SR_COMPMASK_PKEY 0x4
415 #define SA_SR_COMPMASK_RESERVED 0x8
416 #define SA_SR_COMPMASK_LEASE 0x10
417 #define SA_SR_COMPMASK_KEY 0x20
418 #define SA_SR_COMPMASK_NAME 0x40
420 /* masks all ServiceData fields */
421 #define SA_SR_COMPMASK_ALL_DATA 0x1FFFFFFF80
423 /* Service Association Record: Table 170 */
424 typedef struct sa_service_assn_record_s {
425 uint64_t ServiceKey_hi;
426 uint64_t ServiceKey_lo;
427 uint8_t ServiceName[IB_SVC_NAME_LEN];
428 } sa_service_assn_record_t;
430 #define SA_SERVASSOC_COMPMASK_SERVICEKEY 0x1
431 #define SA_SERVASSOC_COMPMASK_SERVICENAME 0x2
433 /* Path Record: Table 171 */
435 #if defined(_BIT_FIELDS_HTOL)
436 typedef struct sa_path_record_s {
437 uint32_t Reserved;
438 uint32_t Reserved2;
439 ib_gid_t DGID; /* dest gid of path */
440 ib_gid_t SGID; /* source gid of path */
441 uint16_t DLID; /* dest lid */
442 uint16_t SLID; /* source lid */
443 uint32_t RawTraffic :1; /* raw pkt path */
444 uint32_t Reserved3 :3;
445 uint32_t FlowLabel :20; /* flow label */
446 uint32_t HopLimit :8; /* hop limit */
447 uint8_t TClass; /* TClass */
448 uint8_t Reversible :1; /* reversible path required */
449 uint8_t NumbPath :7; /* max num. of paths to ret. */
450 uint16_t P_Key; /* partition key for path */
451 uint16_t Reserved4 :12;
452 uint16_t SL :4; /* service level for path */
453 uint8_t MtuSelector :2; /* MTU selector */
454 uint8_t Mtu :6; /* required MTU */
455 uint8_t RateSelector :2; /* rate selector */
456 uint8_t Rate :6; /* value of rate */
457 uint8_t PacketLifeTimeSelector:2; /* pkt life time selector */
458 uint8_t PacketLifeTime :6; /* total packet life time */
459 uint8_t Preference; /* in response, order of pref */
460 /* among all paths */
461 uint8_t Reserved5[6];
462 } sa_path_record_t;
464 #elif defined(_BIT_FIELDS_LTOH)
466 typedef struct sa_path_record_s {
467 uint32_t Reserved;
468 uint32_t Reserved2;
469 ib_gid_t DGID; /* dest gid of path */
470 ib_gid_t SGID; /* source gid of path */
471 uint16_t DLID; /* dest lid */
472 uint16_t SLID; /* source lid */
473 uint32_t HopLimit :8; /* hop limit */
474 uint32_t FlowLabel :20; /* flow label */
475 uint32_t Reserved3 :3;
476 uint32_t RawTraffic :1; /* raw pkt path */
477 uint8_t TClass; /* TClass */
478 uint8_t NumbPath :7; /* max num. of paths to ret. */
479 uint8_t Reversible :1; /* reversible path required */
480 uint16_t P_Key; /* partition key for path */
481 uint16_t SL :4; /* service level for path */
482 uint16_t Reserved4 :12;
483 uint8_t Mtu :6; /* required MTU */
484 uint8_t MtuSelector :2; /* MTU selector */
485 uint8_t Rate :6; /* value of rate */
486 uint8_t RateSelector :2; /* rate selector */
487 uint8_t PacketLifeTime :6; /* total packet life time */
488 uint8_t PacketLifeTimeSelector:2; /* pkt life time selector */
489 uint8_t Preference; /* in response, order of pref */
490 /* among all paths */
491 uint8_t Reserved5[6];
492 } sa_path_record_t;
494 #else
495 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_HTOL must be defined
496 #endif /* _BIT_FIELDS_HTOL */
499 * #defines mapping individual bits of the path record component mask
500 * to components in the path record
502 #define SA_PR_COMPMASK_RESERVED 0x1
503 #define SA_PR_COMPMASK_RESERVED2 0x2
504 #define SA_PR_COMPMASK_DGID 0x4
505 #define SA_PR_COMPMASK_SGID 0x8
506 #define SA_PR_COMPMASK_DLID 0x10
507 #define SA_PR_COMPMASK_SLID 0x20
508 #define SA_PR_COMPMASK_RAWTRAFFIC 0x40
509 #define SA_PR_COMPMASK_RESERVED3 0x80
510 #define SA_PR_COMPMASK_FLOWLABEL 0x100
511 #define SA_PR_COMPMASK_HOPLIMIT 0x200
512 #define SA_PR_COMPMASK_TCLASS 0x400
513 #define SA_PR_COMPMASK_REVERSIBLE 0x800
514 #define SA_PR_COMPMASK_NUMBPATH 0x1000
515 #define SA_PR_COMPMASK_PKEY 0x2000
516 #define SA_PR_COMPMASK_RESERVED4 0x4000
517 #define SA_PR_COMPMASK_SL 0x8000
518 #define SA_PR_COMPMASK_MTUSELECTOR 0x10000
519 #define SA_PR_COMPMASK_MTU 0x20000
520 #define SA_PR_COMPMASK_RATESELECTOR 0x40000
521 #define SA_PR_COMPMASK_RATE 0x80000
522 #define SA_PR_COMPMASK_PKTLTSELECTOR 0x100000
523 #define SA_PR_COMPMASK_PKTLT 0x200000
524 #define SA_PR_COMPMASK_PREFERENCE 0x400000
526 #define SA_PR_RAWTRAFFIC_PKEY 0x1
527 #define SA_PR_RAWTRAFFIC_NO_PKEY 0x0
528 #define SA_PR_MTU_SEL_GREATER 0x0
529 #define SA_PR_MTU_SEL_LESS 0x1
530 #define SA_PR_MTU_SEL_EXACTLY 0x2
531 #define SA_PR_MTU_SEL_LARGEST_AVAIL 0x3
532 #define SA_PR_MTU_256 0x1
533 #define SA_PR_MTU_512 0x2
534 #define SA_PR_MTU_1024 0x3
535 #define SA_PR_MTU_2048 0x4
536 #define SA_PR_MTU_4096 0x5
537 #define SA_PR_RATE_SEL_GREATER 0x0
538 #define SA_PR_RATE_SEL_LESS 0x1
539 #define SA_PR_RATE_SEL_EXACTLY 0x2
540 #define SA_PR_RATE_SEL_LARGEST_AVAIL 0x3
541 #define SA_PR_RATE_25 0x2
542 #define SA_PR_RATE_10 0x3
543 #define SA_PR_RATE_30 0x4
544 #define SA_PR_LT_SEL_GREATER 0x0
545 #define SA_PR_LT_SEL_LESS 0x1
546 #define SA_PR_LT_SEL_EXACTLY 0x2
547 #define SA_PR_LT_SEL_SMALLEST_AVAIL 0x3
549 /* MCMember Record: Table 176 */
551 #if defined(_BIT_FIELDS_HTOL)
552 typedef struct sa_mcmember_record_s {
553 ib_gid_t MGID;
554 ib_gid_t PortGID;
555 uint32_t Q_Key;
556 ib_lid_t MLID;
557 uint8_t MTUSelector :2;
558 uint8_t MTU :6;
559 uint8_t TClass;
560 uint16_t P_Key;
561 uint8_t RateSelector :2;
562 uint8_t Rate :6;
563 uint8_t PacketLifeTimeSelector :2;
564 uint8_t PacketLifeTime :6;
565 uint32_t SL :4;
566 uint32_t FlowLabel :20;
567 uint32_t HopLimit :8;
568 uint32_t Scope :4;
569 uint32_t JoinState :4;
570 uint32_t ProxyJoin :1;
571 uint32_t Reserved :23;
572 } sa_mcmember_record_t;
574 #elif defined(_BIT_FIELDS_LTOH)
576 typedef struct sa_mcmember_record_s {
577 ib_gid_t MGID;
578 ib_gid_t PortGID;
579 uint32_t Q_Key;
580 ib_lid_t MLID;
581 uint8_t MTU :6;
582 uint8_t MTUSelector :2;
583 uint8_t TClass;
584 uint16_t P_Key;
585 uint8_t Rate :6;
586 uint8_t RateSelector :2;
587 uint8_t PacketLifeTime :6;
588 uint8_t PacketLifeTimeSelector :2;
589 uint32_t HopLimit :8;
590 uint32_t FlowLabel :20;
591 uint32_t SL :4;
592 uint32_t Reserved :23;
593 uint32_t ProxyJoin :1;
594 uint32_t JoinState :4;
595 uint32_t Scope :4;
596 } sa_mcmember_record_t;
598 #else
599 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_HTOL must be defined
600 #endif /* _BIT_FIELDS_HTOL */
602 #define SA_MC_COMPMASK_MGID 0x1
603 #define SA_MC_COMPMASK_PORTGID 0x2
604 #define SA_MC_COMPMASK_QKEY 0x4
605 #define SA_MC_COMPMASK_MLID 0x8
606 #define SA_MC_COMPMASK_MTUSELECTOR 0x10
607 #define SA_MC_COMPMASK_MTU 0x20
608 #define SA_MC_COMPMASK_TCLASS 0x40
609 #define SA_MC_COMPMASK_PKEY 0x80
610 #define SA_MC_COMPMASK_RATESELECTOR 0x100
611 #define SA_MC_COMPMASK_RATE 0x200
612 #define SA_MC_COMPMASK_PKTLTSELECTOR 0x400
613 #define SA_MC_COMPMASK_PKTLT 0x800
614 #define SA_MC_COMPMASK_SL 0x1000
615 #define SA_MC_COMPMASK_FLOWLABEL 0x2000
616 #define SA_MC_COMPMASK_HOPLIMIT 0x4000
617 #define SA_MC_COMPMASK_SCOPE 0x8000
618 #define SA_MC_COMPMASK_JOINSTATE 0x10000
619 #define SA_MC_COMPMASK_PROXYJOIN 0x20000
620 #define SA_MC_COMPMASK_RESERVED 0x40000
622 #define SA_MC_MTU_SEL_GREATER 0x0
623 #define SA_MC_MTU_SEL_LESS 0x1
624 #define SA_MC_MTU_SEL_EXACTLY 0x2
625 #define SA_MC_MTU_SEL_LARGEST_AVAIL 0x3
626 #define SA_MC_MTU_256 0x1
627 #define SA_MC_MTU_512 0x2
628 #define SA_MC_MTU_1024 0x3
629 #define SA_MC_MTU_2048 0x4
630 #define SA_MC_MTU_4096 0x5
631 #define SA_MC_RATE_SEL_GREATER 0x0
632 #define SA_MC_RATE_SEL_LESS 0x1
633 #define SA_MC_RATE_SEL_EXACTLY 0x2
634 #define SA_MC_RATE_SEL_LARGEST_AVAIL 0x3
635 #define SA_MC_RATE_25 0x2
636 #define SA_MC_RATE_10 0x3
637 #define SA_MC_RATE_30 0x4
638 #define SA_MC_LT_SEL_GREATER 0x0
639 #define SA_MC_LT_SEL_LESS 0x1
640 #define SA_MC_LT_SEL_EXACTLY 0x2
641 #define SA_MC_LT_SMALLEST_AVAIL 0x3
643 /* GUIDInfo Record: Table 177 */
644 typedef struct sa_guidinfo_record_s {
645 ib_lid_t LID;
646 uint8_t BlockNum;
647 uint8_t Reserved;
648 uint32_t Reserved2;
649 sm_guidinfo_t GUIDInfo;
650 } sa_guidinfo_record_t;
652 #define SA_GUIDINFO_COMPMASK_PORTLID 0x1
653 #define SA_GUIDINFO_COMPMASK_BLOCKNUM 0x2
654 #define SA_GUIDINFO_COMPMASK_RESERVED 0x4
655 #define SA_GUIDINFO_COMPMASK_RESERVEVD2 0x8
656 #define SA_GUIDINFO_COMPMASK_GUIDINFO 0x10
658 /* Trace Record: Table 178 */
659 typedef struct sa_trace_record_s {
660 ib_sn_prefix_t GIDPrefix;
661 uint16_t IOCGeneration;
662 uint8_t Reserved;
663 uint8_t NodeType;
664 uint64_t NodeID;
665 uint64_t ChassisID;
666 uint64_t EntryPortID;
667 uint64_t ExitPortID;
668 uint8_t EntryPort;
669 uint8_t ExitPort;
670 } sa_trace_record_t;
672 #define SA_TRACE_COMPMASK_GIDPREFIX 0x1
673 #define SA_TRACE_COMPMASK_IOCGENERATION 0x2
674 #define SA_TRACE_COMPMASK_RESERVED 0x4
675 #define SA_TRACE_COMPMASK_NODETYPE 0x8
676 #define SA_TRACE_COMPMASK_NODEID 0x10
677 #define SA_TRACE_COMPMASK_CHASSISID 0x20
678 #define SA_TRACE_COMPMASK_ENTRYPORTID 0x40
679 #define SA_TRACE_COMPMASK_EXITPORTID 0x80
680 #define SA_TRACE_COMPMASK_ENTRYPORT 0x100
681 #define SA_TRACE_COMPMASK_EXITPORT 0x200
684 * MultiPath Record: Table 179
685 * This structure only includes the constant portion of the multipath record.
686 * The multipath record request will contain a variable number of SGIDs and
687 * DGIDs at the end of this structure, as specified in the SGIDCount and
688 * DGIDCount fields.
691 #if defined(_BIT_FIELDS_HTOL)
692 typedef struct sa_mutipath_record_s {
693 uint32_t RawTraffic :1; /* raw pkt path */
694 uint32_t Reserved :3;
695 uint32_t FlowLabel :20; /* flow label */
696 uint32_t HopLimit :8; /* hop limit */
697 uint8_t TClass; /* TClass */
698 uint8_t Reversible :1; /* reversible path required */
699 uint8_t NumbPath :7; /* max num. of paths to ret. */
700 uint16_t P_Key; /* partition key for path */
701 uint16_t Reserved2 :12;
702 uint16_t SL :4; /* service level for path */
703 uint8_t MtuSelector :2; /* MTU selector */
704 uint8_t Mtu :6; /* required MTU */
705 uint8_t RateSelector :2; /* rate selector */
706 uint8_t Rate :6; /* value of rate */
707 uint8_t PacketLifeTimeSelector:2; /* pkt life time selector */
708 uint8_t PacketLifeTime :6; /* total packet life time */
709 uint8_t Reserved3;
710 uint8_t IndependenceSelector:2; /* fault-tolerant paths */
711 uint8_t Reserved4 :6;
712 uint8_t SGIDCount; /* number of SGIDS */
713 uint8_t DGIDCount; /* number of DGIDS */
714 uint8_t Reserved5[7];
715 } sa_multipath_record_t;
717 #elif defined(_BIT_FIELDS_LTOH)
719 typedef struct sa_mutipath_record_s {
720 uint32_t HopLimit :8; /* hop limit */
721 uint32_t FlowLabel :20; /* flow label */
722 uint32_t Reserved :3;
723 uint32_t RawTraffic :1; /* raw pkt path */
724 uint8_t TClass; /* TClass */
725 uint8_t NumbPath :7; /* max num. of paths to ret. */
726 uint8_t Reversible :1; /* reversible path required */
727 uint16_t P_Key; /* partition key for path */
728 uint16_t SL :4; /* service level for path */
729 uint16_t Reserved2 :12;
730 uint8_t Mtu :6; /* required MTU */
731 uint8_t MtuSelector :2; /* MTU selector */
732 uint8_t Rate :6; /* value of rate */
733 uint8_t RateSelector :2; /* rate selector */
734 uint8_t PacketLifeTime :6; /* total packet life time */
735 uint8_t PacketLifeTimeSelector:2; /* pkt life time selector */
736 uint8_t Reserved3;
737 uint8_t Reserved4 :6;
738 uint8_t IndependenceSelector:2; /* fault-tolerant paths */
739 uint8_t SGIDCount; /* number of SGIDS */
740 uint8_t DGIDCount; /* number of DGIDS */
741 uint8_t Reserved5[7];
742 } sa_multipath_record_t;
744 #else
745 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_HTOL must be defined
746 #endif /* _BIT_FIELDS_HTOL */
748 #define SA_MPR_COMPMASK_RAWTRAFFIC 0x1
749 #define SA_MPR_COMPMASK_RESERVED 0x2
750 #define SA_MPR_COMPMASK_FLOWLABEL 0x4
751 #define SA_MPR_COMPMASK_HOPLIMIT 0x8
752 #define SA_MPR_COMPMASK_TCLASS 0x10
753 #define SA_MPR_COMPMASK_REVERSIBLE 0x20
754 #define SA_MPR_COMPMASK_NUMBPATH 0x40
755 #define SA_MPR_COMPMASK_PKEY 0x80
756 #define SA_MPR_COMPMASK_RESERVED2 0x100
757 #define SA_MPR_COMPMASK_SL 0x200
758 #define SA_MPR_COMPMASK_MTUSELECTOR 0x400
759 #define SA_MPR_COMPMASK_MTU 0x800
760 #define SA_MPR_COMPMASK_RATESELECTOR 0x1000
761 #define SA_MPR_COMPMASK_RATE 0x2000
762 #define SA_MPR_COMPMASK_PKTLTSELECTOR 0x4000
763 #define SA_MPR_COMPMASK_PKTLT 0x8000
764 #define SA_MPR_COMPMASK_RESERVED3 0x10000
765 #define SA_MPR_COMPMASK_INDEPSEL 0x20000
766 #define SA_MPR_COMPMASK_RESERVED4 0x40000
767 #define SA_MPR_COMPMASK_SGIDCOUNT 0x80000
768 #define SA_MPR_COMPMASK_DGIDCOUNT 0x100000
769 #define SA_MPR_COMPMASK_RESERVED5 0x200000
771 #ifdef __cplusplus
773 #endif
775 #endif /* _SYS_IB_MGT_SA_RECS_H */