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