1/*
2 * CDDL HEADER START
3 *
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.
8 *
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.
13 *
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]
19 *
20 * CDDL HEADER END
21 */
22/*
23 * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27#ifndef	_SYS_IB_MGT_SA_RECS_H
28#define	_SYS_IB_MGT_SA_RECS_H
29
30#pragma ident	"%Z%%M%	%I%	%E% SMI"
31
32/*
33 * This file contains the definitions of the SA-specific records in IB spec
34 * volume 1, release 1.1, chapter 15.
35 */
36
37#ifdef	__cplusplus
38extern "C" {
39#endif
40
41#include <sys/ib/ib_types.h>
42#include <sys/ib/mgt/sm_attr.h>
43
44/* class header for SA MADs */
45typedef 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;
51
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
65
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
75
76
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
82
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
106
107/* Node Record: Table 157 */
108typedef	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;
114
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
130
131/* Portinfo Record: Table 158 */
132typedef 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;
138
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
189
190/* SLtoVL Mapping Table Record: Table 159 */
191typedef 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;
198
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
219
220/* Switchinfo Record: Table 160 */
221typedef 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;
226
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
246
247/* Linear Forwarding Table Record: Table 161 */
248typedef 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;
254
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
259
260/* Random Forwarding Table Record: Table 162 */
261typedef 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;
267
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
272
273/* Multicast Forwarding Table Record: Table 163 */
274
275#if defined(_BIT_FIELDS_HTOL)
276typedef 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;
284
285#elif defined(_BIT_FIELDS_LTOH)
286
287typedef 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;
295
296#else
297#error	One of _BIT_FIELDS_HTOL or _BIT_FIELDS_HTOL must be defined
298#endif /* _BIT_FIELDS_HTOL */
299
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
306
307/* VLArbitration Table Record: Table 164 */
308typedef 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;
315
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
321
322/* SMInfo Record: Table 165 */
323typedef struct _sminfo_record_s {
324	ib_lid_t	LID;
325	uint16_t	Reserved;
326	sm_sminfo_t	SMInfo;
327} sa_sminfo_record_t;
328
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
336
337/* P_Key Table Record: Table 166 */
338typedef 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;
345
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
351
352/* InformInfo Record: Table 167 */
353typedef 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;
359
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
376
377/* Link Record: Table 168 */
378typedef 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;
384
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
389
390/* Service Record: Table 169 */
391typedef 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;
404
405#define	SA_SR_INDEFINITE_SERVICE_LEASE	0xFFFFFFFF
406
407/*
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.
411 */
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
419
420/* masks all ServiceData fields */
421#define	SA_SR_COMPMASK_ALL_DATA		0x1FFFFFFF80
422
423/* Service Association Record: Table 170 */
424typedef 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;
429
430#define	SA_SERVASSOC_COMPMASK_SERVICEKEY		0x1
431#define	SA_SERVASSOC_COMPMASK_SERVICENAME	0x2
432
433/* Path Record: Table 171 */
434
435#if defined(_BIT_FIELDS_HTOL)
436typedef 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;
463
464#elif defined(_BIT_FIELDS_LTOH)
465
466typedef 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;
493
494#else
495#error	One of _BIT_FIELDS_HTOL or _BIT_FIELDS_HTOL must be defined
496#endif /* _BIT_FIELDS_HTOL */
497
498/*
499 * #defines mapping individual bits of the path record component mask
500 * to components in the path record
501 */
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
525
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
548
549/* MCMember Record: Table 176 */
550
551#if defined(_BIT_FIELDS_HTOL)
552typedef 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;
573
574#elif defined(_BIT_FIELDS_LTOH)
575
576typedef 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;
597
598#else
599#error	One of _BIT_FIELDS_HTOL or _BIT_FIELDS_HTOL must be defined
600#endif /* _BIT_FIELDS_HTOL */
601
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
621
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
642
643/* GUIDInfo Record: Table 177 */
644typedef 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;
651
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
657
658/* Trace Record: Table 178 */
659typedef 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;
671
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
682
683/*
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.
689 */
690
691#if defined(_BIT_FIELDS_HTOL)
692typedef 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;
716
717#elif defined(_BIT_FIELDS_LTOH)
718
719typedef 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;
743
744#else
745#error	One of _BIT_FIELDS_HTOL or _BIT_FIELDS_HTOL must be defined
746#endif /* _BIT_FIELDS_HTOL */
747
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
770
771#ifdef __cplusplus
772}
773#endif
774
775#endif	/* _SYS_IB_MGT_SA_RECS_H */
776