1*0Sstevel@tonic-gate /* 2*0Sstevel@tonic-gate * CDDL HEADER START 3*0Sstevel@tonic-gate * 4*0Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5*0Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only 6*0Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance 7*0Sstevel@tonic-gate * with the License. 8*0Sstevel@tonic-gate * 9*0Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*0Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 11*0Sstevel@tonic-gate * See the License for the specific language governing permissions 12*0Sstevel@tonic-gate * and limitations under the License. 13*0Sstevel@tonic-gate * 14*0Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 15*0Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*0Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 17*0Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 18*0Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 19*0Sstevel@tonic-gate * 20*0Sstevel@tonic-gate * CDDL HEADER END 21*0Sstevel@tonic-gate */ 22*0Sstevel@tonic-gate /* 23*0Sstevel@tonic-gate * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 24*0Sstevel@tonic-gate * Use is subject to license terms. 25*0Sstevel@tonic-gate */ 26*0Sstevel@tonic-gate 27*0Sstevel@tonic-gate #ifndef _SYS_IB_MGT_IB_MAD_H 28*0Sstevel@tonic-gate #define _SYS_IB_MGT_IB_MAD_H 29*0Sstevel@tonic-gate 30*0Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 31*0Sstevel@tonic-gate 32*0Sstevel@tonic-gate #ifdef __cplusplus 33*0Sstevel@tonic-gate extern "C" { 34*0Sstevel@tonic-gate #endif 35*0Sstevel@tonic-gate 36*0Sstevel@tonic-gate #include <sys/ib/ib_types.h> 37*0Sstevel@tonic-gate 38*0Sstevel@tonic-gate #define MAD_SIZE_IN_BYTES 256 39*0Sstevel@tonic-gate 40*0Sstevel@tonic-gate typedef struct _ib_mad_hdr_t { 41*0Sstevel@tonic-gate uint8_t BaseVersion; /* version of MAD base format */ 42*0Sstevel@tonic-gate uint8_t MgmtClass; /* class of operation */ 43*0Sstevel@tonic-gate uint8_t ClassVersion; /* ver. of MAD class format */ 44*0Sstevel@tonic-gate uint8_t R_Method; /* response bit & method to */ 45*0Sstevel@tonic-gate /* perform based on mgmtclass */ 46*0Sstevel@tonic-gate uint16_t Status; /* status of operation */ 47*0Sstevel@tonic-gate uint16_t ClassSpecific; /* reserved except for SMPs */ 48*0Sstevel@tonic-gate uint64_t TransactionID; /* transaction id */ 49*0Sstevel@tonic-gate uint16_t AttributeID; /* defines class spec objects */ 50*0Sstevel@tonic-gate uint16_t Reserved; 51*0Sstevel@tonic-gate uint32_t AttributeModifier; /* further scope to attrs. */ 52*0Sstevel@tonic-gate } ib_mad_hdr_t; 53*0Sstevel@tonic-gate 54*0Sstevel@tonic-gate #define MAD_CLASS_BASE_VERS_1 1 55*0Sstevel@tonic-gate 56*0Sstevel@tonic-gate /* Defines and Masks that go with MAD header */ 57*0Sstevel@tonic-gate #define MAD_MGMT_CLASS_SUBN_LID_ROUTED 0x01 58*0Sstevel@tonic-gate #define MAD_MGMT_CLASS_SUBN_DIRECT_ROUTE 0x81 59*0Sstevel@tonic-gate #define MAD_MGMT_CLASS_SUBN_ADM 0x03 60*0Sstevel@tonic-gate #define MAD_MGMT_CLASS_PERF 0x04 61*0Sstevel@tonic-gate #define MAD_MGMT_CLASS_BM 0x05 62*0Sstevel@tonic-gate #define MAD_MGMT_CLASS_DEV_MGT 0x06 63*0Sstevel@tonic-gate #define MAD_MGMT_CLASS_COMM_MGT 0x07 64*0Sstevel@tonic-gate #define MAD_MGMT_CLASS_SNMP 0x08 65*0Sstevel@tonic-gate #define MAD_MGMT_CLASS_VENDOR_START 0x09 66*0Sstevel@tonic-gate #define MAD_MGMT_CLASS_VENDOR_END 0x0F 67*0Sstevel@tonic-gate #define MAD_MGMT_CLASS_VENDOR2_START 0x30 68*0Sstevel@tonic-gate #define MAD_MGMT_CLASS_VENDOR2_END 0x4F 69*0Sstevel@tonic-gate #define MAD_MGMT_CLASS_APPLICATION_START 0x10 70*0Sstevel@tonic-gate #define MAD_MGMT_CLASS_APPLICATION_END 0x2F 71*0Sstevel@tonic-gate #define MAD_RESPONSE_BIT 0x80 72*0Sstevel@tonic-gate #define MAD_RESPONSE_BIT_MASK 0x80 73*0Sstevel@tonic-gate #define MAD_METHOD_MASK 0x7F 74*0Sstevel@tonic-gate #define MAD_METHOD_GET 0x01 75*0Sstevel@tonic-gate #define MAD_METHOD_SET 0x02 76*0Sstevel@tonic-gate #define MAD_METHOD_GET_RESPONSE 0x81 77*0Sstevel@tonic-gate #define MAD_METHOD_SEND 0x03 78*0Sstevel@tonic-gate #define MAD_METHOD_TRAP 0x05 79*0Sstevel@tonic-gate #define MAD_METHOD_REPORT 0x06 80*0Sstevel@tonic-gate #define MAD_METHOD_REPORT_RESPONSE 0x86 81*0Sstevel@tonic-gate #define MAD_METHOD_TRAP_REPRESS 0x07 82*0Sstevel@tonic-gate #define MAD_STATUS_BUSY 0x01 83*0Sstevel@tonic-gate #define MAD_STATUS_REDIRECT_REQUIRED 0x02 84*0Sstevel@tonic-gate #define MAD_STATUS_NO_INVALID_FIELDS 0x00 85*0Sstevel@tonic-gate #define MAD_STATUS_BAD_VERSION 0x04 86*0Sstevel@tonic-gate #define MAD_STATUS_UNSUPP_METHOD 0x08 87*0Sstevel@tonic-gate #define MAD_STATUS_UNSUPP_METHOD_ATTR 0x0C 88*0Sstevel@tonic-gate #define MAD_STATUS_INVALID_FIELD 0x1C 89*0Sstevel@tonic-gate #define MAD_ATTR_ID_CLASSPORTINFO 0x01 90*0Sstevel@tonic-gate #define MAD_ATTR_ID_NOTICE 0x02 91*0Sstevel@tonic-gate #define MAD_ATTR_ID_INFORMINFO 0x03 92*0Sstevel@tonic-gate 93*0Sstevel@tonic-gate /* ClassPortInfo: table 104 */ 94*0Sstevel@tonic-gate #if defined(_BIT_FIELDS_HTOL) 95*0Sstevel@tonic-gate typedef struct ib_mad_classportinfo_s { 96*0Sstevel@tonic-gate uint8_t BaseVersion; /* ver. of MAD base format */ 97*0Sstevel@tonic-gate uint8_t ClassVersion; /* ver. of MAD class format */ 98*0Sstevel@tonic-gate uint16_t CapabilityMask; /* capabilities of this class */ 99*0Sstevel@tonic-gate uint32_t RespTimeValue; /* max time btwn req and resp */ 100*0Sstevel@tonic-gate /* (lower 5 bit field, upper */ 101*0Sstevel@tonic-gate /* 27 bits are reserved) */ 102*0Sstevel@tonic-gate uint64_t RedirectGID_hi; /* dest gid of redirect msgs */ 103*0Sstevel@tonic-gate uint64_t RedirectGID_lo; /* dest gid of redirect msgs */ 104*0Sstevel@tonic-gate uint32_t RedirectTC :8; /* traffic class */ 105*0Sstevel@tonic-gate uint32_t RedirectSL :4; /* SL to access services */ 106*0Sstevel@tonic-gate uint32_t RedirectFL :20; /* flow label to use */ 107*0Sstevel@tonic-gate ib_lid_t RedirectLID; /* dlid for class services */ 108*0Sstevel@tonic-gate ib_pkey_t RedirectP_Key; /* p_key for class services */ 109*0Sstevel@tonic-gate uint32_t Reserved2 :8; 110*0Sstevel@tonic-gate uint32_t RedirectQP :24; /* QP for class services */ 111*0Sstevel@tonic-gate ib_qkey_t RedirectQ_Key; /* q_key for class services */ 112*0Sstevel@tonic-gate uint64_t TrapGID_hi; /* dest gid of trap msgs */ 113*0Sstevel@tonic-gate uint64_t TrapGID_lo; /* dest gid of trap msgs */ 114*0Sstevel@tonic-gate uint32_t TrapTC :8; /* traffic class for traps */ 115*0Sstevel@tonic-gate uint32_t TrapSL :4; /* SL for traps */ 116*0Sstevel@tonic-gate uint32_t TrapFL :20; /* flow label for traps */ 117*0Sstevel@tonic-gate ib_lid_t TrapLID; /* dlid for traps */ 118*0Sstevel@tonic-gate ib_pkey_t TrapP_Key; /* p_key for traps */ 119*0Sstevel@tonic-gate uint32_t TrapHL :8; /* hop limit for traps */ 120*0Sstevel@tonic-gate uint32_t TrapQP :24; /* QP for traps */ 121*0Sstevel@tonic-gate ib_qkey_t TrapQ_Key; /* q_key for traps */ 122*0Sstevel@tonic-gate } ib_mad_classportinfo_t; 123*0Sstevel@tonic-gate 124*0Sstevel@tonic-gate #elif defined(_BIT_FIELDS_LTOH) 125*0Sstevel@tonic-gate 126*0Sstevel@tonic-gate typedef struct ib_mad_classportinfo_s { 127*0Sstevel@tonic-gate uint8_t BaseVersion; /* ver. of MAD base format */ 128*0Sstevel@tonic-gate uint8_t ClassVersion; /* ver. of MAD class format */ 129*0Sstevel@tonic-gate uint16_t CapabilityMask; /* capabilities of this class */ 130*0Sstevel@tonic-gate uint32_t RespTimeValue; /* max time btwn req and resp */ 131*0Sstevel@tonic-gate /* (lower 5 bit field, upper */ 132*0Sstevel@tonic-gate /* 27 bits are reserved) */ 133*0Sstevel@tonic-gate uint64_t RedirectGID_hi; /* dest gid of redirect msgs */ 134*0Sstevel@tonic-gate uint64_t RedirectGID_lo; /* dest gid of redirect msgs */ 135*0Sstevel@tonic-gate uint32_t RedirectFL :20; /* flow label to use */ 136*0Sstevel@tonic-gate uint32_t RedirectSL :4; /* SL to access services */ 137*0Sstevel@tonic-gate uint32_t RedirectTC :8; /* traffic class */ 138*0Sstevel@tonic-gate ib_lid_t RedirectLID; /* dlid for class services */ 139*0Sstevel@tonic-gate ib_pkey_t RedirectP_Key; /* p_key for class services */ 140*0Sstevel@tonic-gate uint32_t RedirectQP :24; /* QP for class services */ 141*0Sstevel@tonic-gate uint32_t Reserved2 :8; 142*0Sstevel@tonic-gate ib_qkey_t RedirectQ_Key; /* q_key for class services */ 143*0Sstevel@tonic-gate uint64_t TrapGID_hi; /* dest gid of trap msgs */ 144*0Sstevel@tonic-gate uint64_t TrapGID_lo; /* dest gid of trap msgs */ 145*0Sstevel@tonic-gate uint32_t TrapFL :20; /* flow label for traps */ 146*0Sstevel@tonic-gate uint32_t TrapSL :4; /* SL for traps */ 147*0Sstevel@tonic-gate uint32_t TrapTC :8; /* traffic class for traps */ 148*0Sstevel@tonic-gate ib_lid_t TrapLID; /* dlid for traps */ 149*0Sstevel@tonic-gate ib_pkey_t TrapP_Key; /* p_key for traps */ 150*0Sstevel@tonic-gate uint32_t TrapQP :24; /* QP for traps */ 151*0Sstevel@tonic-gate uint32_t TrapHL :8; /* hop limit for traps */ 152*0Sstevel@tonic-gate ib_qkey_t TrapQ_Key; /* q_key for traps */ 153*0Sstevel@tonic-gate } ib_mad_classportinfo_t; 154*0Sstevel@tonic-gate #else 155*0Sstevel@tonic-gate #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined 156*0Sstevel@tonic-gate #endif /* _BIT_FIELDS_HTOL */ 157*0Sstevel@tonic-gate 158*0Sstevel@tonic-gate #define MAD_CLASSPORTINFO_CAP_MASK_TRAPS 0x01 159*0Sstevel@tonic-gate #define MAD_CLASSPORTINFO_CAP_MASK_NOTICES 0x02 160*0Sstevel@tonic-gate 161*0Sstevel@tonic-gate /* 162*0Sstevel@tonic-gate * Trap/Notice: Table 105 163*0Sstevel@tonic-gate */ 164*0Sstevel@tonic-gate #if defined(_BIT_FIELDS_HTOL) 165*0Sstevel@tonic-gate typedef struct ib_mad_notice_s { 166*0Sstevel@tonic-gate uint32_t IsGeneric :1; /* is generic or vendor spec. */ 167*0Sstevel@tonic-gate uint32_t Type :7; /* type of the trap */ 168*0Sstevel@tonic-gate 169*0Sstevel@tonic-gate /* if generic, indicates type of event's producer, else vendor id */ 170*0Sstevel@tonic-gate uint32_t ProducerType_VendorID:24; 171*0Sstevel@tonic-gate 172*0Sstevel@tonic-gate uint16_t TrapNumber_DeviceID; /* trap num or device id */ 173*0Sstevel@tonic-gate uint16_t IssuerLID; /* generator's LID */ 174*0Sstevel@tonic-gate uint16_t NoticeToggle :1; /* alt 0/1 between notices */ 175*0Sstevel@tonic-gate uint16_t NoticeCount :15; /* num notices queued */ 176*0Sstevel@tonic-gate uint8_t DataDetails[54]; /* notice/dtrap data details */ 177*0Sstevel@tonic-gate ib_gid_t IssuerGID; /* GID of issuer port */ 178*0Sstevel@tonic-gate } ib_mad_notice_t; 179*0Sstevel@tonic-gate 180*0Sstevel@tonic-gate #elif defined(_BIT_FIELDS_LTOH) 181*0Sstevel@tonic-gate 182*0Sstevel@tonic-gate typedef struct ib_mad_notice_s { 183*0Sstevel@tonic-gate /* if generic, indicates type of event's producer, else vendor id */ 184*0Sstevel@tonic-gate uint32_t ProducerType_VendorID:24; 185*0Sstevel@tonic-gate 186*0Sstevel@tonic-gate uint32_t Type :7; /* type of the trap */ 187*0Sstevel@tonic-gate uint32_t IsGeneric :1; /* is generic or vendor spec. */ 188*0Sstevel@tonic-gate 189*0Sstevel@tonic-gate uint16_t TrapNumber_DeviceID; /* trap num or device id */ 190*0Sstevel@tonic-gate uint16_t IssuerLID; /* generator's LID */ 191*0Sstevel@tonic-gate uint16_t NoticeCount :15; /* num notices queued */ 192*0Sstevel@tonic-gate uint16_t NoticeToggle :1; /* alt 0/1 between notices */ 193*0Sstevel@tonic-gate uint8_t DataDetails[54]; /* notice/dtrap data details */ 194*0Sstevel@tonic-gate ib_gid_t IssuerGID; /* GID of issuer port */ 195*0Sstevel@tonic-gate } ib_mad_notice_t; 196*0Sstevel@tonic-gate #else 197*0Sstevel@tonic-gate #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined 198*0Sstevel@tonic-gate #endif /* _BIT_FIELDS_HTOL */ 199*0Sstevel@tonic-gate 200*0Sstevel@tonic-gate #define MAD_NOTICE_IS_GENERIC 0x1 201*0Sstevel@tonic-gate 202*0Sstevel@tonic-gate #define MAD_NOTICE_TYPE_FATAL 0x0 203*0Sstevel@tonic-gate #define MAD_NOTICE_TYPE_URGENT 0x1 204*0Sstevel@tonic-gate #define MAD_NOTICE_TYPE_SECURITY 0x2 205*0Sstevel@tonic-gate #define MAD_NOTICE_TYPE_SUBNET_MGMT 0x3 206*0Sstevel@tonic-gate #define MAD_NOTICE_TYPE_INFO 0x4 207*0Sstevel@tonic-gate 208*0Sstevel@tonic-gate #define MAD_NOTICE_NODETYPE_CA 0x1 209*0Sstevel@tonic-gate #define MAD_NOTICE_NODETYPE_SWITCH 0x2 210*0Sstevel@tonic-gate #define MAD_NOTICE_NODETYPE_ROUTER 0x3 211*0Sstevel@tonic-gate #define MAD_NOTICE_NODETYPE_SUBNET_MANAGEMENT 0x4 212*0Sstevel@tonic-gate 213*0Sstevel@tonic-gate #define MAD_NOTICE_TRAP_NUMBER_RESERVED 0xFFFF 214*0Sstevel@tonic-gate 215*0Sstevel@tonic-gate /* InformInfo: Table 106 */ 216*0Sstevel@tonic-gate #if defined(_BIT_FIELDS_HTOL) 217*0Sstevel@tonic-gate typedef struct ib_mad_informinfo_s { 218*0Sstevel@tonic-gate ib_gid_t GID; /* specific GID to sub. for */ 219*0Sstevel@tonic-gate ib_lid_t LIDRangeBegin; /* lowest LID to sub. for */ 220*0Sstevel@tonic-gate ib_lid_t LIDRangeEnd; /* highest LID to sub. for */ 221*0Sstevel@tonic-gate uint16_t Reserved; 222*0Sstevel@tonic-gate uint8_t IsGeneric; /* forward generic traps */ 223*0Sstevel@tonic-gate uint8_t Subscribe; /* 1 subscribe, 0 unsubscribe */ 224*0Sstevel@tonic-gate uint16_t Type; /* type of trap */ 225*0Sstevel@tonic-gate uint16_t TrapNumber_DeviceID; /* trap num or device id */ 226*0Sstevel@tonic-gate uint32_t QPN :24; /* queue pair for results */ 227*0Sstevel@tonic-gate uint32_t Reserved2 :3; 228*0Sstevel@tonic-gate uint32_t RespTimeValue :5; /* response time value */ 229*0Sstevel@tonic-gate uint32_t Reserved3 :8; 230*0Sstevel@tonic-gate uint32_t ProducerType_VendorID:24; /* type of event's producer */ 231*0Sstevel@tonic-gate } ib_mad_informinfo_t; 232*0Sstevel@tonic-gate 233*0Sstevel@tonic-gate #elif defined(_BIT_FIELDS_LTOH) 234*0Sstevel@tonic-gate 235*0Sstevel@tonic-gate typedef struct ib_mad_informinfo_s { 236*0Sstevel@tonic-gate ib_gid_t GID; /* specific GID to sub. for */ 237*0Sstevel@tonic-gate ib_lid_t LIDRangeBegin; /* lowest LID to sub. for */ 238*0Sstevel@tonic-gate ib_lid_t LIDRangeEnd; /* highest LID to sub. for */ 239*0Sstevel@tonic-gate uint16_t Reserved; 240*0Sstevel@tonic-gate uint8_t IsGeneric; /* forward generic traps */ 241*0Sstevel@tonic-gate uint8_t Subscribe; /* 1 subscribe, 0 unsubscribe */ 242*0Sstevel@tonic-gate uint16_t Type; /* type of trap */ 243*0Sstevel@tonic-gate uint16_t TrapNumber_DeviceID; /* trap num or device id */ 244*0Sstevel@tonic-gate uint32_t RespTimeValue :5; /* response time value */ 245*0Sstevel@tonic-gate uint32_t Reserved2 :3; 246*0Sstevel@tonic-gate uint32_t QPN :24; /* queue pair for results */ 247*0Sstevel@tonic-gate uint32_t ProducerType_VendorID:24; /* type of event's producer */ 248*0Sstevel@tonic-gate uint32_t Reserved3 :8; 249*0Sstevel@tonic-gate } ib_mad_informinfo_t; 250*0Sstevel@tonic-gate #else 251*0Sstevel@tonic-gate #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined 252*0Sstevel@tonic-gate #endif /* _BIT_FIELDS_HTOL */ 253*0Sstevel@tonic-gate 254*0Sstevel@tonic-gate #define MAD_INFORMINFO_ALL_ENDPORTS_RANGE 0xFFFF 255*0Sstevel@tonic-gate 256*0Sstevel@tonic-gate #define MAD_INFORMINFO_FORWARD_GENERIC 0x1 257*0Sstevel@tonic-gate #define MAD_INFORMINFO_FORWARD_VENDOR_SPECIFIC 0x0 258*0Sstevel@tonic-gate 259*0Sstevel@tonic-gate #define MAD_INFORMINFO_SUBSCRIBE 0x1 260*0Sstevel@tonic-gate #define MAD_INFORMINFO_UNSUBSCRIBE 0x0 261*0Sstevel@tonic-gate 262*0Sstevel@tonic-gate #define MAD_INFORMINFO_TRAP_NUMBER_FORWARD_ALL 0xFFFF 263*0Sstevel@tonic-gate 264*0Sstevel@tonic-gate #define MAD_INFORMINFO_TRAP_TYPE_FATAL 0x0 265*0Sstevel@tonic-gate #define MAD_INFORMINFO_TRAP_TYPE_URGENT 0x1 266*0Sstevel@tonic-gate #define MAD_INFORMINFO_TRAP_TYPE_SECURITY 0x2 267*0Sstevel@tonic-gate #define MAD_INFORMINFO_TRAP_TYPE_SUBNET_MGMT 0x3 268*0Sstevel@tonic-gate #define MAD_INFORMINFO_TRAP_TYPE_INFORM 0x4 269*0Sstevel@tonic-gate #define MAD_INFORMINFO_TRAP_TYPE_FORWARD_ALL 0xFFFF 270*0Sstevel@tonic-gate 271*0Sstevel@tonic-gate #define MAD_INFORMINFO_NODETYPE_CA 0x1 272*0Sstevel@tonic-gate #define MAD_INFORMINFO_NODETYPE_SWITCH 0x2 273*0Sstevel@tonic-gate #define MAD_INFORMINFO_NODETYPE_ROUTER 0x3 274*0Sstevel@tonic-gate #define MAD_INFORMINFO_NODETYPE_SUBNET_MANAGEMENT 0x4 275*0Sstevel@tonic-gate 276*0Sstevel@tonic-gate #ifdef __cplusplus 277*0Sstevel@tonic-gate } 278*0Sstevel@tonic-gate #endif 279*0Sstevel@tonic-gate 280*0Sstevel@tonic-gate #endif /* _SYS_IB_MGT_IB_MAD_H */ 281