2 * Routines for IPMI-over-LAN packet dissection
4 * Duncan Laurie <duncan@sun.com>
8 * Wireshark - Network traffic analyzer
9 * By Gerald Combs <gerald@wireshark.org>
10 * Copyright 1998 Gerald Combs
12 * Copied from packet-rmcp.c
14 * This program is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU General Public License
16 * as published by the Free Software Foundation; either version 2
17 * of the License, or (at your option) any later version.
19 * This program is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
24 * You should have received a copy of the GNU General Public License
25 * along with this program; if not, write to the Free Software
26 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
30 * See the IPMI spec at
32 * http://www.intel.com/design/servers/ipmi/
34 * IPMI LAN Message Request
35 * ipmi.session.authtype
36 * ipmi.session.sequence
38 * [ipmi.session.authcode]
41 * ipmi.msg.netfn << 2 | ipmi.msg.rslun
44 * ipmi.msg.seq << 2 | ipmi.msg.rqlun
49 * IPMI LAN Message Response
50 * ipmi.session.authtype
51 * ipmi.session.sequence
53 * [ipmi.session.authcode]
56 * ipmi.msg.netfn << 2 | ipmi.msg.rqlun
59 * ipmi.msg.seq << 2 | ipmi.msg.rslun
71 #include <epan/packet.h>
73 #define RMCP_CLASS_IPMI 0x07
75 static dissector_handle_t data_handle;
76 static int proto_ipmi = -1;
78 static gint ett_ipmi = -1;
79 static gint ett_ipmi_session = -1;
80 static gint ett_ipmi_msg_nlfield = -1;
81 static gint ett_ipmi_msg_slfield = -1;
83 /********* Sensor/Event, NetFN = 0x04 *********/
85 /* Platform Event Message, added by lane */
86 static gint ett_cmd_PEM_EventDirAndEventType = -1;
87 static gint ett_cmd_PEM_EventData1_threshold = -1;
88 static gint ett_cmd_PEM_EventData1_discrete = -1;
89 static gint ett_cmd_PEM_EventData2_discrete = -1;
90 static gint ett_cmd_PEM_EventData1_OEM = -1;
91 static gint ett_cmd_PEM_EventData2_OEM = -1;
92 /* Get Device SDR Info, added by lane */
93 static gint ett_cmd_GetDeviceSDRInfo_Flag = -1; /* add subtree for Flag */
94 /* Get Sensor Reading, added by lane */
95 static gint ett_cmd_GetSensorReading_ResponseDataByte2 = -1;
96 static gint ett_cmd_GetSensorReading_ResponseDataByte3 = -1;
97 static gint ett_cmd_GetSensorReading_ResponseDataByte3_threshold = -1;
98 static gint ett_cmd_GetSensorReading_ResponseDataByte4 = -1;
99 /* Set Sensor Thresholds, added by lane */
100 static gint ett_cmd_SetSensorThresholds_ControlByte = -1;
101 /* Get Sensor Thresholds, added by lane */
102 static gint ett_cmd_GetSensorThresholds_ControlByte = -1;
104 /********* APP, NetFN = 0x06 *********/
106 /* Get Device ID, added by lane */
107 static gint ett_cmd_GetDeviceID_data_dr = -1; /* add subtree for Device Revision field */
108 static gint ett_cmd_GetDeviceID_data_fr = -1; /* add subtree for firmware Revision field */
109 static gint ett_cmd_GetDeviceID_data_ads = -1; /* add subtree for Additional Device Support */
112 /********* Storage, NetFN = 0x0a *********/
114 static gint ett_Get_Channel_Auth_Cap_anonymouslogin = -1;
115 /* Get FRU Inventory Area Info, added by lane */
116 static gint ett_cmd_GetFRUInventoryAreaInfo_data_ResponseDataByte4 = -1; /* add subtree for ResponseDataByte4 */
117 /* Get SEL Info, added by lane */
118 static gint ett_cmd_GetSELInfo_data_OperationSupport = -1; /* add subtree for Operation Support */
119 /* Clear SEL, added by lane */
120 static gint ett_cmd_ClearSEL_data_ErasureProgress = -1; /* add subtree for Erasure Progress */
122 /********* PICMG, NetFN = 0x2c *********/
124 /* Get FRU Led Properties, added by lane */
125 static gint ett_cmd_GetFRULedProperties_data_LedProperties = -1; /* add subtree for Get FRU Led Properties */
126 /* Get Led Color Capabilities, added by lane */
127 static gint ett_cmd_GetLedColorCapabilities_data_LEDColorCapabilities = -1; /* add subtree for LED Color Capabilities */
128 static gint ett_cmd_GetLedColorCapabilities_data_DefaultLEDColorLocalControl = -1; /* add subtree for Default LED Color in Local Control State */
129 static gint ett_cmd_GetLedColorCapabilities_data_DefaultLEDColorOverride = -1; /* add subtree for Get Default LED Color in Override State */
130 /* Set FRU Led State, added by lane */
131 static gint ett_cmd_SetFRULedState_data_Color = -1; /* add subtree for Color when illuminated */
132 /* Get FRU Led State, added by lane */
133 static gint ett_cmd_GetFRULedState_data_LEDState = -1; /* add subtree for LED State*/
134 static gint ett_cmd_GetFRULedState_data_LocalControlColor = -1; /* add subtree for Local Control Color*/
135 static gint ett_cmd_GetFRULedState_data_OverrideStateColor = -1; /* add subtree for Override State Color*/
136 /* Set FRU Activation Policy, added by lane */
137 static gint ett_cmd_SetFRUActivationPolicy_data_FRUActivationPolicyMaskBit = -1;
138 static gint ett_cmd_SetFRUActivationPolicy_data_FRUActivationPolicySetBit = -1;
139 /* Get FRU Activation Policy, added by lane */
140 static gint ett_cmd_GetFRUActivationPolicy_data_FRUActivationPolicy = -1;
141 /* Get Power Level, added by lane */
142 static gint ett_cmd_GetPowerLevel_data_Properties = -1; /* add subtree for Properties */
145 /***************************************************************************************************/
148 /* IPMI session header */
149 static int hf_ipmi_session_id = -1;
150 static int hf_ipmi_session_authtype = -1;
151 static int hf_ipmi_payloadtype = -1;
152 static int hf_ipmi_payloadtype_auth = -1;
153 static int hf_ipmi_payloadtype_enc = -1;
154 static int hf_ipmi_oem_iana = -1;
155 static int hf_ipmi_oem_payload_id = -1;
156 static int hf_ipmi_session_sequence = -1;
157 static int hf_ipmi_session_authcode = -1;
159 /* IPMI message header */
160 static int hf_ipmi_msg_len = -1;
161 static int hf_ipmi_conf_hdr = -1;
162 static int hf_ipmi_msg_rsaddr = -1;
163 static int hf_ipmi_msg_nlfield = -1;
164 static int hf_ipmi_msg_netfn = -1;
165 static int hf_ipmi_msg_rqlun = -1;
166 static int hf_ipmi_msg_csum1 = -1;
167 static int hf_ipmi_msg_rqaddr = -1;
168 static int hf_ipmi_msg_slfield = -1;
169 static int hf_ipmi_msg_seq = -1;
170 static int hf_ipmi_msg_rslun = -1;
171 static int hf_ipmi_msg_cmd = -1;
172 static int hf_ipmi_msg_ccode = -1;
173 static int hf_ipmi_msg_csum2 = -1;
175 /********* Sensor/Event, NetFN = 0x04 **********/
177 /* Platform Event Message, added by lane */
178 static int hf_PEM_datafield_EvMRev = -1;
179 static int hf_PEM_datafield_SensorType = -1;
180 static int hf_PEM_datafield_SensorNumber = -1;
181 static int hf_PEM_datafield_EventDirAndEventType_EventDir = -1;
182 static int hf_PEM_datafield_EventDirAndEventType_EventType = -1;
184 static int hf_PEM_datafield_EventData1_threshold_76 = -1;
185 static int hf_PEM_datafield_EventData1_threshold_54 = -1;
186 static int hf_PEM_datafield_EventData1_threshold_30 = -1;
187 static int hf_PEM_datafield_EventData2_threshold = -1;
188 static int hf_PEM_datafield_EventData3_threshold = -1;
190 static int hf_PEM_datafield_EventData1_discrete_76 = -1;
191 static int hf_PEM_datafield_EventData1_discrete_54 = -1;
192 static int hf_PEM_datafield_EventData1_discrete_30 = -1;
193 static int hf_PEM_datafield_EventData2_discrete_74 = -1;
194 static int hf_PEM_datafield_EventData2_discrete_30 = -1;
195 static int hf_PEM_datafield_EventData3_discrete = -1;
197 static int hf_PEM_datafield_EventData1_OEM_76 = -1;
198 static int hf_PEM_datafield_EventData1_OEM_54 = -1;
199 static int hf_PEM_datafield_EventData1_OEM_30 = -1;
200 static int hf_PEM_datafield_EventData2_OEM_74 = -1;
201 static int hf_PEM_datafield_EventData2_OEM_30 = -1;
202 static int hf_PEM_datafield_EventData3_OEM = -1;
204 static int hf_PEM_datafield_HotSwapEvent_CurrentState = -1;
205 static int hf_PEM_datafield_HotSwapEvent_StateChangeCause = -1;
206 static int hf_PEM_datafield_HotSwapEvent_PreviousState = -1;
207 static int hf_PEM_datafield_HotSwapEvent_FRUDeviceID = -1;
209 /* Get Device SDR Info, added by lane */
210 static int hf_GetDeviceSDRInfo_datafield_SensorNumber = -1;
211 static int hf_GetDeviceSDRInfo_datafield_Flag = -1;
212 static int hf_GetDeviceSDRInfo_datafield_Flag_Dynamicpopulation = -1;
213 static int hf_GetDeviceSDRInfo_datafield_Flag_Reserved = -1;
214 static int hf_GetDeviceSDRInfo_datafield_Flag_DeviceLUNs3 = -1;
215 static int hf_GetDeviceSDRInfo_datafield_Flag_DeviceLUNs2 = -1;
216 static int hf_GetDeviceSDRInfo_datafield_Flag_DeviceLUNs1 = -1;
217 static int hf_GetDeviceSDRInfo_datafield_Flag_DeviceLUNs0 = -1;
218 static int hf_GetDeviceSDRInfo_datafield_SensorPopulationChangeIndicator = -1;
219 /* Get Device SDR, added by lane */
220 static int hf_GetDeviceSDR_datafield_NextRecordID = -1;
221 static int hf_GetDeviceSDR_datafield_ReservationID = -1;
222 static int hf_GetDeviceSDR_datafield_RecordID = -1;
223 static int hf_GetDeviceSDR_datafield_OffsetIntoRecord = -1;
224 static int hf_GetDeviceSDR_datafield_BytesToRead = -1;
225 /* Reserve Device SDR Repository, added by lane */
226 static int hf_ReserveDeviceSDRRepository_datafield_ReservationID = -1;
227 /* Set Sensor Hysteresis, added by lane */
228 static int hf_SetSensorHysteresis_datafield_SensorNumber = -1;
229 static int hf_SetSensorHysteresis_datafield_ReservedForHysteresisMask = -1;
230 static int hf_SetSensorHysteresis_datafield_PositivegoingThresholdHysteresisValue = -1;
231 static int hf_SetSensorHysteresis_datafield_NegativegoingThresholdHysteresisValue = -1;
232 /* Get Sensor Hysteresis, added by lane */
233 static int hf_GetSensorHysteresis_datafield_SensorNumber = -1;
234 static int hf_GetSensorHysteresis_datafield_ReservedForHysteresisMask = -1;
235 static int hf_GetSensorHysteresis_datafield_PositivegoingThresholdHysteresisValue = -1;
236 static int hf_GetSensorHysteresis_datafield_NegativegoingThresholdHysteresisValue = -1;
237 /* Set Sensor Thresholds, added by lane */
238 static int hf_SetSensorThresholds_datafield_SensorNumber = -1;
239 static int hf_SetSensorThresholds_datafield_ControlByte_Bit76 = -1;
240 static int hf_SetSensorThresholds_datafield_ControlByte_Bit5 = -1;
241 static int hf_SetSensorThresholds_datafield_ControlByte_Bit4 = -1;
242 static int hf_SetSensorThresholds_datafield_ControlByte_Bit3 = -1;
243 static int hf_SetSensorThresholds_datafield_ControlByte_Bit2 = -1;
244 static int hf_SetSensorThresholds_datafield_ControlByte_Bit1 = -1;
245 static int hf_SetSensorThresholds_datafield_ControlByte_Bit0 = -1;
246 static int hf_SetSensorThresholds_datafield_LowerNonCriticalThreshold = -1;
247 static int hf_SetSensorThresholds_datafield_LowerCriticalThreshold = -1;
248 static int hf_SetSensorThresholds_datafield_LowerNonRecoverableThreshold = -1;
249 static int hf_SetSensorThresholds_datafield_UpperNonCriticalThreshold = -1;
250 static int hf_SetSensorThresholds_datafield_UpperCriticalThreshold = -1;
251 static int hf_SetSensorThresholds_datafield_UpperNonRecoverableThreshold = -1;
252 /* Get Sensor Thresholds, added by lane */
253 static int hf_GetSensorThresholds_datafield_SensorNumber = -1;
254 static int hf_GetSensorThresholds_datafield_ControlByte_Bit76 = -1;
255 static int hf_GetSensorThresholds_datafield_ControlByte_Bit5 = -1;
256 static int hf_GetSensorThresholds_datafield_ControlByte_Bit4 = -1;
257 static int hf_GetSensorThresholds_datafield_ControlByte_Bit3 = -1;
258 static int hf_GetSensorThresholds_datafield_ControlByte_Bit2 = -1;
259 static int hf_GetSensorThresholds_datafield_ControlByte_Bit1 = -1;
260 static int hf_GetSensorThresholds_datafield_ControlByte_Bit0 = -1;
261 static int hf_GetSensorThresholds_datafield_LowerNonCriticalThreshold = -1;
262 static int hf_GetSensorThresholds_datafield_LowerCriticalThreshold = -1;
263 static int hf_GetSensorThresholds_datafield_LowerNonRecoverableThreshold = -1;
264 static int hf_GetSensorThresholds_datafield_UpperNonCriticalThreshold = -1;
265 static int hf_GetSensorThresholds_datafield_UpperCriticalThreshold = -1;
266 static int hf_GetSensorThresholds_datafield_UpperNonRecoverableThreshold = -1;
267 /* Get Sensor Reading, added by lane */
268 static int hf_GetSensorReading_datafield_SensorNumber = -1;
269 static int hf_GetSensorReading_datafield_Sensorreading = -1;
270 static int hf_GetSensorReading_datafield_ResponseDataByte2_Bit7 = -1;
271 static int hf_GetSensorReading_datafield_ResponseDataByte2_Bit6 = -1;
272 static int hf_GetSensorReading_datafield_ResponseDataByte2_Bit5 = -1;
273 static int hf_GetSensorReading_datafield_ResponseDataByte2_Bit40 = -1;
274 static int hf_GetSensorReading_datafield_ResponseDataByte3_Bit7 = -1;
275 static int hf_GetSensorReading_datafield_ResponseDataByte3_Bit6 = -1;
276 static int hf_GetSensorReading_datafield_ResponseDataByte3_Bit5 = -1;
277 static int hf_GetSensorReading_datafield_ResponseDataByte3_Bit4 = -1;
278 static int hf_GetSensorReading_datafield_ResponseDataByte3_Bit3 = -1;
279 static int hf_GetSensorReading_datafield_ResponseDataByte3_Bit2 = -1;
280 static int hf_GetSensorReading_datafield_ResponseDataByte3_Bit1 = -1;
281 static int hf_GetSensorReading_datafield_ResponseDataByte3_Bit0 = -1;
282 static int hf_GetSensorReading_datafield_ResponseDataByte4_Bit7 = -1;
283 static int hf_GetSensorReading_datafield_ResponseDataByte4_Bit6 = -1;
284 static int hf_GetSensorReading_datafield_ResponseDataByte4_Bit5 = -1;
285 static int hf_GetSensorReading_datafield_ResponseDataByte4_Bit4 = -1;
286 static int hf_GetSensorReading_datafield_ResponseDataByte4_Bit3 = -1;
287 static int hf_GetSensorReading_datafield_ResponseDataByte4_Bit2 = -1;
288 static int hf_GetSensorReading_datafield_ResponseDataByte4_Bit1 = -1;
289 static int hf_GetSensorReading_datafield_ResponseDataByte4_Bit0 = -1;
290 static int hf_GetSensorReading_datafield_ResponseDataByte3_Bit76_threshold = -1;
291 static int hf_GetSensorReading_datafield_ResponseDataByte3_Bit5_threshold = -1;
292 static int hf_GetSensorReading_datafield_ResponseDataByte3_Bit4_threshold = -1;
293 static int hf_GetSensorReading_datafield_ResponseDataByte3_Bit3_threshold = -1;
294 static int hf_GetSensorReading_datafield_ResponseDataByte3_Bit2_threshold = -1;
295 static int hf_GetSensorReading_datafield_ResponseDataByte3_Bit1_threshold = -1;
296 static int hf_GetSensorReading_datafield_ResponseDataByte3_Bit0_threshold = -1;
298 /********* App, NetFN = 0x06 *********/
300 /* Get Device ID, added by lane */
301 static int hf_GetDeviceID_datafield_DeviceID = -1;
302 static int hf_GetDeviceID_datafield_DeviceSDR = -1;
303 static int hf_GetDeviceID_datafield_DeviceRevision = -1;
304 static int hf_GetDeviceID_datafield_DeviceAvailable = -1;
305 static int hf_GetDeviceID_datafield_MajorFirmwareRevision = -1;
306 static int hf_GetDeviceID_datafield_MinorFirmwareRevision = -1;
307 static int hf_GetDeviceID_datafield_IPMIRevision = -1;
308 static int hf_GetDeviceID_datafield_ADS_Chasis = -1;
309 static int hf_GetDeviceID_datafield_ADS_Bridge = -1;
310 static int hf_GetDeviceID_datafield_ADS_IPMBEventGenerator = -1;
311 static int hf_GetDeviceID_datafield_ADS_IPMBEventReceiver = -1;
312 static int hf_GetDeviceID_datafield_ADS_FRUInventoryDevice = -1;
313 static int hf_GetDeviceID_datafield_ADS_SELDevice = -1;
314 static int hf_GetDeviceID_datafield_ADS_SDRRepositoryDevice = -1;
315 static int hf_GetDeviceID_datafield_ADS_SensorDevice = -1;
316 static int hf_GetDeviceID_datafield_ManufactureID = -1;
317 static int hf_GetDeviceID_datafield_ProductID = -1;
318 static int hf_GetDeviceID_datafield_AFRI = -1;
320 static int hf_Get_Channel_Auth_Cap_channel_number = -1;
321 static int hf_Get_Channel_Auth_Cap_datafield_comp_info = -1;
322 static int hf_Get_Channel_Auth_Cap_datafield_channel_number = -1;
323 static int hf_Get_Channel_Auth_Cap_datafield_max_priv_lev = -1;
324 static int hf_Get_Channel_Auth_Cap_comp_info = -1;
325 static int hf_Get_Channel_Auth_Cap_Auth_types_b5 = -1;
326 static int hf_Get_Channel_Auth_Cap_Auth_types_b4 = -1;
327 static int hf_Get_Channel_Auth_Cap_Auth_types_b2 = -1;
328 static int hf_Get_Channel_Auth_Cap_Auth_types_b1 = -1;
329 static int hf_Get_Channel_Auth_Cap_Auth_types_b0 = -1;
330 static int hf_Get_Channel_Auth_Cap_Auth_KG_status = -1;
331 static int hf_Get_Channel_Auth_Cap_per_mess_auth_status = -1;
332 static int hf_Get_Channel_Auth_Cap_user_level_auth_status = -1;
333 static int hf_Get_Channel_Auth_Cap_anonymouslogin_status_b2 = -1;
334 static int hf_Get_Channel_Auth_Cap_anonymouslogin_status_b1 = -1;
335 static int hf_Get_Channel_Auth_Cap_anonymouslogin_status_b0 = -1;
336 static int hf_Get_Channel_Auth_Cap_ext_cap_b1 = -1;
337 static int hf_Get_Channel_Auth_Cap_ext_cap_b0 = -1;
338 static int hf_Get_Channel_Auth_OEM_ID = -1;
339 static int hf_Get_Channel_Auth_OEM_AUX = -1;
341 /********* Storage, NetFN = 0x0a *********/
343 /* Get FRU Inventory Area Info, added by lane */
344 static int hf_GetFRUInventoryAreaInfo_datafield_FRUDeviceID = -1;
345 static int hf_GetFRUInventoryAreaInfo_datafield_FRUInventoryAreaSize = -1;
346 static int hf_GetFRUInventoryAreaInfo_datafield_ResponseDataByte4_Bit71 = -1;
347 static int hf_GetFRUInventoryAreaInfo_datafield_ResponseDataByte4_Bit0 = -1;
348 /* Get SEL Info, added by lane */
349 static int hf_GetSELInfo_datafield_SELVersion = -1;
350 static int hf_GetSELInfo_datafield_Entries = -1;
351 static int hf_GetSELInfo_datafield_FreeSpace = -1;
352 static int hf_GetSELInfo_datafield_AdditionTimestamp = -1;
353 static int hf_GetSELInfo_datafield_EraseTimestamp = -1;
354 static int hf_GetSELInfo_datafield_OperationSupport_Bit7 = -1;
355 static int hf_GetSELInfo_datafield_OperationSupport_Reserved = -1;
356 static int hf_GetSELInfo_datafield_OperationSupport_Bit3 = -1;
357 static int hf_GetSELInfo_datafield_OperationSupport_Bit2 = -1;
358 static int hf_GetSELInfo_datafield_OperationSupport_Bit1 = -1;
359 static int hf_GetSELInfo_datafield_OperationSupport_Bit0 = -1;
360 /* Reserve SEL, added by lane */
361 static int hf_ReserveSEL_datafield_ReservationID = -1;
362 /* Get SEL Entry, added by lane */
363 static int hf_GetSELEntry_datafield_ReservationID = -1;
364 static int hf_GetSELEntry_datafield_SELRecordID = -1;
365 static int hf_GetSELEntry_datafield_OffsetIntoRecord = -1;
366 static int hf_GetSELEntry_datafield_BytesToRead = -1;
367 static int hf_GetSELEntry_datafield_NextSELRecordID = -1;
368 /* Clear SEL, added by lane */
369 static int hf_ClearSEL_datafield_ReservationID = -1;
370 static int hf_ClearSEL_datafield_Byte3 = -1;
371 static int hf_ClearSEL_datafield_Byte4 = -1;
372 static int hf_ClearSEL_datafield_Byte5 = -1;
373 static int hf_ClearSEL_datafield_Byte6 = -1;
374 static int hf_ClearSEL_datafield_ErasureProgress_Reserved = -1;
375 static int hf_ClearSEL_datafield_ErasureProgress_EraProg = -1;
378 /********* PICMG, NetFN = 0X2c *********/
380 /* Get PICMG Properties, added by lane */
381 static int hf_GetPICMGProperties_datafield_PICMGIdentifier = -1;
382 static int hf_GetPICMGProperties_datafield_PICMGExtensionVersion = -1;
383 static int hf_GetPICMGProperties_datafield_MaxFRUDeviceID = -1;
384 static int hf_GetPICMGProperties_datafield_FRUDeviceIDforIPMController = -1;
385 /* FRU Control, added by lane */
386 static int hf_FRUControl_datafield_PICMGIdentifier = -1;
387 static int hf_FRUControl_datafield_FRUDeviceID = -1;
388 static int hf_FRUControl_datafield_FRUControlOption = -1;
389 /* Get FRU Led Properties, added by lane */
390 static int hf_GetFRULedProperties_datafield_PICMGIdentifier = -1;
391 static int hf_GetFRULedProperties_datafield_FRUDeviceID = -1;
392 static int hf_GetFRULedProperties_datafield_LedProperties_Reserved = -1;
393 static int hf_GetFRULedProperties_datafield_LedProperties_LED3 = -1;
394 static int hf_GetFRULedProperties_datafield_LedProperties_LED2 = -1;
395 static int hf_GetFRULedProperties_datafield_LedProperties_LED1 = -1;
396 static int hf_GetFRULedProperties_datafield_LedProperties_BlueLED = -1;
397 static int hf_GetFRULedProperties_datafield_ApplicationSpecificLEDCount = -1;
398 /* Get Led Color Capabilities, added by lane */
399 static int hf_GetLedColorCapabilities_datafield_PICMGIdentifier = -1;
400 static int hf_GetLedColorCapabilities_datafield_FRUDeviceID = -1;
401 static int hf_GetLedColorCapabilities_datafield_LEDID = -1;
402 static int hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_Reserved_7 = -1;
403 static int hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_WHITE = -1;
404 static int hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_ORANGE = -1;
405 static int hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_AMBER = -1;
406 static int hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_GREEN = -1;
407 static int hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_RED = -1;
408 static int hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_BLUE = -1;
409 static int hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_Reserved_0 = -1;
410 static int hf_GetLedColorCapabilities_datafield_DefaultLEDColorLocalControl_Reserved_74 = -1;
411 static int hf_GetLedColorCapabilities_datafield_DefaultLEDColorLocalControl_Color = -1;
412 static int hf_GetLedColorCapabilities_datafield_DefaultLEDColorOverride_Reserved_74 = -1;
413 static int hf_GetLedColorCapabilities_datafield_DefaultLEDColorOverride_Color = -1;
414 /* Set FRU Led State, added by lane */
415 static int hf_SetFRULedState_datafield_PICMGIdentifier = -1;
416 static int hf_SetFRULedState_datafield_FRUDeviceID = -1;
417 static int hf_SetFRULedState_datafield_LEDID = -1;
418 static int hf_SetFRULedState_datafield_LEDFunction = -1;
419 static int hf_SetFRULedState_datafield_Offduration = -1;
420 static int hf_SetFRULedState_datafield_Onduration = -1;
421 static int hf_SetFRULedState_datafield_Color_Reserved = -1;
422 static int hf_SetFRULedState_datafield_Color_ColorVal = -1;
423 /* Get FRU Led State, added by lane */
424 static int hf_GetFRULedState_datafield_PICMGIdentifier = -1;
425 static int hf_GetFRULedState_datafield_FRUDeviceID = -1;
426 static int hf_GetFRULedState_datafield_LEDID = -1;
427 static int hf_GetFRULedState_datafield_LEDState_Reserved = -1;
428 static int hf_GetFRULedState_datafield_LEDState_Bit2 = -1;
429 static int hf_GetFRULedState_datafield_LEDState_Bit1 = -1;
430 static int hf_GetFRULedState_datafield_LEDState_Bit0 = -1;
431 static int hf_GetFRULedState_datafield_LocalControlLEDFunction = -1;
432 static int hf_GetFRULedState_datafield_LocalControlOffduration = -1;
433 static int hf_GetFRULedState_datafield_LocalControlOnduration = -1;
434 static int hf_GetFRULedState_datafield_LocalControlColor_Reserved = -1;
435 static int hf_GetFRULedState_datafield_LocalControlColor_ColorVal = -1;
436 static int hf_GetFRULedState_datafield_OverrideStateLEDFunction = -1;
437 static int hf_GetFRULedState_datafield_OverrideStateOffduration = -1;
438 static int hf_GetFRULedState_datafield_OverrideStateOnduration = -1;
439 static int hf_GetFRULedState_datafield_OverrideStateColor_Reserved = -1;
440 static int hf_GetFRULedState_datafield_OverrideStateColor_ColorVal = -1;
441 static int hf_GetFRULedState_datafield_LampTestDuration = -1;
442 /* Set FRU Activation Policy, added by lane */
443 static int hf_SetFRUActivationPolicy_datafield_PICMGIdentifier = -1;
444 static int hf_SetFRUActivationPolicy_datafield_FRUDeviceID = -1;
445 static int hf_SetFRUActivationPolicy_datafield_FRUActivationPolicyMaskBit_Bit72 = -1;
446 static int hf_SetFRUActivationPolicy_datafield_FRUActivationPolicyMaskBit_Bit1 = -1;
447 static int hf_SetFRUActivationPolicy_datafield_FRUActivationPolicyMaskBit_Bit0 = -1;
448 static int hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit72 = -1;
449 static int hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit1 = -1;
450 static int hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit0 = -1;
451 static int hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit1_ignored = -1;
452 static int hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit0_ignored = -1;
453 /* Get FRU Activation Policy, added by lane */
454 static int hf_GetFRUActivationPolicy_datafield_PICMGIdentifier = -1;
455 static int hf_GetFRUActivationPolicy_datafield_FRUDeviceID = -1;
456 static int hf_GetFRUActivationPolicy_datafield_FRUActivationPolicy_Bit72 = -1;
457 static int hf_GetFRUActivationPolicy_datafield_FRUActivationPolicy_Bit1 = -1;
458 static int hf_GetFRUActivationPolicy_datafield_FRUActivationPolicy_Bit0 = -1;
459 /* Set FRU Activation, added by lane */
460 static int hf_SetFRUActivation_datafield_PICMGIdentifier = -1;
461 static int hf_SetFRUActivation_datafield_FRUDeviceID = -1;
462 static int hf_SetFRUActivation_datafield_FRUActivationDeactivation = -1;
463 /* Get Device Locator Record ID, added by lane */
464 static int hf_GetDeviceLocatorRecordID_datafield_PICMGIdentifier = -1;
465 static int hf_GetDeviceLocatorRecordID_datafield_FRUDeviceID = -1;
466 static int hf_GetDeviceLocatorRecordID_datafield_RecordID = -1;
467 /* Set Power Level, added by lane */
468 static int hf_SetPowerLevel_datafield_PICMGIdentifier = -1;
469 static int hf_SetPowerLevel_datafield_FRUDeviceID = -1;
470 static int hf_SetPowerLevel_datafield_PowerLevel = -1;
471 static int hf_SetPowerLevel_datafield_SetPresentLevelsToDesiredLevels = -1;
472 /* Get Power Level, added by lane */
473 static int hf_GetPowerLevel_datafield_PICMGIdentifier = -1;
474 static int hf_GetPowerLevel_datafield_FRUDeviceID = -1;
475 static int hf_GetPowerLevel_datafield_PowerType = -1;
476 static int hf_GetPowerLevel_datafield_Properties = -1;
477 static int hf_GetPowerLevel_datafield_Properties_DynamicPowerCon = -1;
478 static int hf_GetPowerLevel_datafield_Properties_Reserved = -1;
479 static int hf_GetPowerLevel_datafield_Properties_PowerLevel = -1;
480 static int hf_GetPowerLevel_datafield_DelayToStablePower = -1;
481 static int hf_GetPowerLevel_datafield_PowerMultiplier = -1;
482 static int hf_GetPowerLevel_datafield_PowerDraw = -1;
483 /* Set Fan Level, added by lane */
484 static int hf_SetFanLevel_datafield_PICMGIdentifier = -1;
485 static int hf_SetFanLevel_datafield_FRUDeviceID = -1;
486 static int hf_SetFanLevel_datafield_FanLevel = -1;
487 /* Get Fan Level, added by lane */
488 static int hf_GetFanLevel_datafield_PICMGIdentifier = -1;
489 static int hf_GetFanLevel_datafield_FRUDeviceID = -1;
490 static int hf_GetFanLevel_datafield_OverrideFanLevel = -1;
491 static int hf_GetFanLevel_datafield_LocalControlFanLevel = -1;
495 /***********************************************************************/
497 static const value_string ipmi_netfn_vals[] = {
498 { 0x00, "Chassis Request" },
499 { 0x01, "Chassis Response" },
500 { 0x02, "Bridge Request" },
501 { 0x03, "Bridge Response" },
502 { 0x04, "Sensor/Event Request" },
503 { 0x05, "Sensor/Event Response" },
504 { 0x06, "Application Request" },
505 { 0x07, "Application Response" },
506 { 0x08, "Firmware Request" },
507 { 0x09, "Frimware Response" },
508 { 0x0a, "Storage Request" },
509 { 0x0b, "Storage Response" },
510 { 0x0c, "Transport Request" },
511 { 0x0d, "Transport Response" },
512 { 0x2c, "PICMG Request" }, /* lane */
513 { 0x2d, "PICMG Response" }, /* lane */
514 { 0x30, "OEM Request" },
515 { 0x31, "OEM Response" },
519 #define IPMI_AUTH_NONE 0x00
520 #define IPMI_AUTH_MD2 0x01
521 #define IPMI_AUTH_MD5 0x02
522 #define IPMI_AUTH_PASSWORD 0x04
523 #define IPMI_AUTH_OEM 0x05
524 #define IPMI_AUTH_RMCPP 0x06
526 static const value_string ipmi_authtype_vals[] = {
527 { IPMI_AUTH_NONE, "NONE" },
528 { IPMI_AUTH_MD2, "MD2" },
529 { IPMI_AUTH_MD5, "MD5" },
530 { IPMI_AUTH_PASSWORD, "PASSWORD" },
531 { IPMI_AUTH_OEM, "OEM" },
532 { IPMI_AUTH_RMCPP, "RMCPP"},
536 #define IPMI_IPMI_MESSAGE 0
537 #define IPMI_OEM_EXPLICIT 2
539 static const value_string ipmi_payload_vals[] = {
540 { IPMI_IPMI_MESSAGE, "IPMI Message" },
541 { 0x01, "SOL (serial over LAN)" },
542 { IPMI_OEM_EXPLICIT, "OEM Explicit" },
543 /* Session Setup Payload Types */
544 { 0x10, "RMCP+ Open Session Request" },
545 { 0x11, "RMCP+ Open Session Response" },
546 { 0x12, "RAKP Message 1" },
547 { 0x13, "RAKP Message 2" },
548 { 0x14, "RAKP Message 3" },
549 { 0x15, "RAKP Message 4" },
550 /* OEM Payload Type Handles */
551 { 0x20, "Handle values for OEM payloads OEM0" },
552 { 0x21, "Handle values for OEM payloads OEM1" },
553 { 0x22, "Handle values for OEM payloads OEM2" },
554 { 0x23, "Handle values for OEM payloads OEM3" },
555 { 0x24, "Handle values for OEM payloads OEM4" },
556 { 0x25, "Handle values for OEM payloads OEM5" },
557 { 0x26, "Handle values for OEM payloads OEM6" },
558 { 0x27, "Handle values for OEM payloads OEM7" },
562 static const true_false_string ipmi_payload_aut_val = {
563 "Payload is authenticated",
564 "Payload is unauthenticated"
567 static const true_false_string ipmi_payload_enc_val = {
568 "Payload is encrypted",
569 "Payload is unencrypted"
572 static const value_string ipmi_ccode_vals[] = {
573 { 0x00, "Command completed normally" },
575 { 0x81, "cannot execute command, SEL erase in progress" },
577 { 0xc0, "Node busy" },
578 { 0xc1, "Unrecognized or unsupported command" },
579 { 0xc2, "Command invalid for given LUN" },
580 { 0xc3, "Timeout while processing command" },
581 { 0xc4, "Out of space" },
582 { 0xc5, "Reservation cancelled or invalid reservation ID" },
583 { 0xc6, "Request data truncated" },
584 { 0xc7, "Request data length invalid" },
585 { 0xc8, "Request data field length limit exceeded" },
586 { 0xc9, "Parameter out of range" },
587 { 0xca, "Cannot return number of requested data bytes" },
588 { 0xcb, "Requested sensor, data, or record not present" },
589 { 0xcc, "Invalid data field in request" },
590 { 0xcd, "Command illegal for specified sensor or record type" },
591 { 0xce, "Command response could not be provided" },
592 { 0xcf, "Cannot execute duplicated request" },
593 { 0xd0, "SDR repository in update mode" },
594 { 0xd1, "Device in firmware update mode" },
595 { 0xd2, "BMC initialization or initialization agent running" },
596 { 0xd3, "Destination unavailable" },
597 { 0xd4, "Insufficient privilege level" },
598 { 0xd5, "Command or param not supported in present state" },
599 { 0xff, "Unspecified error" },
603 static const value_string ipmi_addr_vals[] = {
604 { 0x20, "BMC Slave Address" },
605 { 0x81, "Remote Console Software 1" },
606 { 0x83, "Remote Console Software 2" },
607 { 0x85, "Remote Console Software 3" },
608 { 0x87, "Remote Console Software 4" },
609 { 0x89, "Remote Console Software 5" },
610 { 0x8b, "Remote Console Software 6" },
611 { 0x8d, "Remote Console Software 7" },
615 /* Table 13-19, Confidentiality Algorithm Numbers */
616 static const value_string ipmi_conf_vals[] ={
618 { 0x01, "AES-CBC-128" },
619 { 0x02, "xRC4-128" },
640 static const value_string ipmi_chassis_cmd_vals[] = {
641 /* Chassis Device Commands */
642 { 0x00, "Get Chassis Capabilities" },
643 { 0x01, "Get Chassis Status" },
644 { 0x02, "Chassis Control" },
645 { 0x03, "Chassis Reset" },
646 { 0x04, "Chassis Identify" },
647 { 0x05, "Set Chassis Capabilities" },
648 { 0x06, "Set Power Restore Policy" },
649 { 0x07, "Get System Restart Cause" },
650 { 0x08, "Set System Boot Options" },
651 { 0x09, "Get System Boot Options" },
652 { 0x0f, "Get POH Counter" },
656 static const value_string ipmi_bridge_cmd_vals[] = {
657 /* ICMB Bridge Management Commands */
658 { 0x00, "Get Bridge State" },
659 { 0x01, "Set Bridge State" },
660 { 0x02, "Get ICMB Address" },
661 { 0x03, "Set ICMB Address" },
662 { 0x04, "Set Bridge ProxyAddress" },
663 { 0x05, "Get Bridge Statistics" },
664 { 0x06, "Get ICMB Capabilities" },
665 { 0x08, "Clear Bridge Statistics" },
666 { 0x09, "Get Bridge Proxy Address" },
667 { 0x0a, "Get ICMB Connector Info" },
668 { 0x0b, "Get ICMB Connection ID" },
669 { 0x0c, "Send ICMB Connection ID" },
670 /* ICMB Discovery Commands */
671 { 0x10, "Prepare For Discovery" },
672 { 0x11, "Get Addresses" },
673 { 0x12, "Set Discovered" },
674 { 0x13, "Get Chassis Device ID" },
675 { 0x14, "Set Chassis Device ID" },
676 /* ICMB Bridging Commands */
677 { 0x20, "Bridge Request" },
678 { 0x21, "Bridge Message" },
679 /* ICMB Event Commands */
680 { 0x30, "Get Event Count" },
681 { 0x31, "Set Event Destination" },
682 { 0x32, "Set Event Reception State" },
683 { 0x33, "Send ICMB Event Message" },
684 { 0x34, "Get Event Destination" },
685 { 0x35, "Get Event Reception State" },
689 static const value_string ipmi_se_cmd_vals[] = {
691 { 0x00, "Set Event Receiver" },
692 { 0x01, "Get Event Receiver" },
693 { 0x02, "Platform Event Message" },
694 /* PEF and Alerting Commands */
695 { 0x10, "Get PEF Capabilities" },
696 { 0x11, "Arm PEF Postpone Timer" },
697 { 0x12, "Set PEF Config Params" },
698 { 0x13, "Get PEF Config Params" },
699 { 0x14, "Set Last Processed Event ID" },
700 { 0x15, "Get Last Processed Event ID" },
701 { 0x16, "Alert Immediate" },
702 { 0x17, "PET Acknowledge" },
703 /* Sensor Device Commands */
704 { 0x20, "Get Device SDR Info" },
705 { 0x21, "Get Device SDR" },
706 { 0x22, "Reserve Device SDR Repository" },
707 { 0x23, "Get Sensor Reading Factors" },
708 { 0x24, "Set Sensor Hysteresis" },
709 { 0x25, "Get Sensor Hysteresis" },
710 { 0x26, "Set Sensor Threshold" },
711 { 0x27, "Get Sensor Threshold" },
712 { 0x28, "Set Sensor Event Enable" },
713 { 0x29, "Get Sensor Event Enable" },
714 { 0x2a, "Re-arm Sensor Events" },
715 { 0x2b, "Get Sensor Event Status" },
716 { 0x2d, "Get Sensor Reading" },
717 { 0x2e, "Set Sensor Type" },
718 { 0x2f, "Get Sensor Type" },
722 static const value_string ipmi_storage_cmd_vals[] = {
723 /* FRU Device Commands */
724 { 0x10, "Get FRU Inventory Area Info" },
725 { 0x11, "Read FRU Data" },
726 { 0x12, "Write FRU Data" },
727 /* SDR Device Commands */
728 { 0x20, "Get SDR Repository Info" },
729 { 0x21, "Get SDR Repository Allocation Info" },
730 { 0x22, "Reserve SDR Repository" },
733 { 0x25, "Partial Add SDR" },
734 { 0x26, "Delete SDR" },
735 { 0x27, "Clear SDR Repository" },
736 { 0x28, "Get SDR Repository Time" },
737 { 0x29, "Set SDR Repository Time" },
738 { 0x2a, "Enter SDR Repository Update Mode" },
739 { 0x2b, "Exit SDR Repository Update Mode" },
740 { 0x2c, "Run Initialization Agent" },
741 /* SEL Device Commands */
742 { 0x40, "Get SEL Info" },
743 { 0x41, "Get SEL Allocation Info" },
744 { 0x42, "Reserve SEL" },
745 { 0x43, "Get SEL Entry" },
746 { 0x44, "Add SEL Entry" },
747 { 0x45, "Partial Add SEL Entry" },
748 { 0x46, "Delete SEL Entry" },
749 { 0x47, "Clear SEL" },
750 { 0x48, "Get SEL Time" },
751 { 0x49, "Set SEL Time" },
752 { 0x5a, "Get Auxillary Log Status" },
753 { 0x5b, "Set Auxillary Log Status" },
757 static const value_string ipmi_transport_cmd_vals[] = {
758 /* LAN Device Commands */
759 { 0x01, "Set LAN Config Param" },
760 { 0x02, "Get LAN Config Param" },
761 { 0x03, "Suspend BMC ARPs" },
762 { 0x04, "Get IP/UDP/RMCP Statistics" },
763 /* Serial/Modem Device Commands */
764 { 0x10, "Set Serial/Modem Config" },
765 { 0x11, "Get Serial/Modem Config" },
766 { 0x12, "Get Serial/Modem Mux" },
767 { 0x13, "Get TAP Response Codes" },
768 { 0x14, "Set PPP UDP Proxy Transmit Data" },
769 { 0x15, "Get PPP UDP Proxy Transmit Data" },
770 { 0x16, "Send PPP UDP Proxy Packet" },
771 { 0x17, "Get PPP UDP Proxy Data" },
772 { 0x18, "Serial/Modem Connection Active" },
773 { 0x19, "Callback" },
774 { 0x1a, "Set User Callback Options" },
775 { 0x1b, "Get User Callback Options" },
779 static const value_string ipmi_app_cmd_vals[] = {
780 /* Device "Global" Commands */
781 { 0x01, "Get Device ID" },
782 { 0x02, "Cold Reset" },
783 { 0x03, "Warm Reset" },
784 { 0x04, "Get Self Test Results" },
785 { 0x05, "Manufacturing Test On" },
786 { 0x06, "Set ACPI Power State" },
787 { 0x07, "Get ACPI Power State" },
788 { 0x08, "Get Device GUID" },
789 /* BMC Watchdog Timer Commands */
790 { 0x22, "Reset Watchdog Timer" },
791 { 0x24, "Set Watchdog Timer" },
792 { 0x25, "Get Watchdog Timer" },
793 /* BMC Device and Messaging Commands */
794 { 0x2e, "Set BMC Global Enables" },
795 { 0x2f, "Get BMC Global Enables" },
796 { 0x30, "Clear Message Flags" },
797 { 0x31, "Get Message Flags" },
798 { 0x32, "Enable Message Channel Receive" },
799 { 0x33, "Get Message" },
800 { 0x34, "Send Message" },
801 { 0x35, "Read Event Message Buffer" },
802 { 0x36, "Get BT Interface Capabilities" },
803 { 0x37, "Get System GUID" },
804 { 0x38, "Get Channel Auth Capabilities" },
805 { 0x39, "Get Session Challenge" },
806 { 0x3a, "Activate Session" },
807 { 0x3b, "Set Session Privilege Level" },
808 { 0x3c, "Close Session" },
809 { 0x3d, "Get Session Info" },
810 { 0x3e, "unassigned" },
811 { 0x3f, "Get AuthCode" },
812 { 0x40, "Set Channel Access" },
813 { 0x41, "Get Channel Access" },
814 { 0x42, "Get Channel Info" },
815 { 0x43, "Set User Access" },
816 { 0x44, "Get User Access" },
817 { 0x45, "Set User Name" },
818 { 0x46, "Get User Name" },
819 { 0x47, "Set User Password" },
820 { 0x52, "Master Write-Read" },
824 /* ipmi_picmg_cmd_vals[] array added by lane */
825 static const value_string ipmi_picmg_cmd_vals[] = {
826 { 0x00, "Get PICMG Properties" },
827 { 0x01, "Get Address Info" },
828 { 0x02, "Get Shelf Address Info" },
829 { 0x03, "Set Shelf Address Info" },
830 { 0x04, "FRU Control" },
831 { 0x05, "Get FRU LED Properties" },
832 { 0x06, "Get LED Color Capabilities" },
833 { 0x07, "Set FRU LED State" },
834 { 0x08, "Get FRU LED State" },
835 { 0x09, "Set IPMB State" },
836 { 0x0a, "Set FRU Activation Policy" },
837 { 0x0b, "Get FRU Activation Policy" },
838 { 0x0c, "Set FRU Activation" },
839 { 0x0d, "Get Device Locator Record Id" },
840 { 0x0e, "Set Port State" },
841 { 0x0f, "Get Port State" },
842 { 0x10, "Compute Power Properties" },
843 { 0x11, "Set Power Level" },
844 { 0x12, "Get Power Level" },
845 { 0x13, "Renegotiate Power" },
846 { 0x14, "Get Fan Speed Properties" },
847 { 0x15, "Set Fan Level" },
848 { 0x16, "Get Fan Level" },
849 { 0x17, "Bused Resource" },
850 { 0x18, "Get IPMB Link Info" },
854 /***********************************************************************/
856 /********* Sensor/Event, NetFN = 0x04 *********/
858 /* Platform Event Message, added by lane */
859 static const value_string cmd_PEM_EvMRev_vals[] = {
860 { 0x03, "IPMI V1.0" },
861 { 0x04, "IPMI V1.5" },
865 static const value_string cmd_PEM_SensorType_vals[] = {
866 { 0x00, "Reserved" },
867 { 0x01, "Temperature" },
871 { 0x05, "Physical Security (Chassis Intrusion)" },
872 { 0x06, "Platform Security Violation Attempt" },
873 { 0x07, "Processor" },
874 { 0x08, "Power Supply" },
875 { 0x09, "Power Unit" },
876 { 0x0a, "Cooling Device" },
877 { 0x0b, "Other Units-based Sensor (per units given in SDR)" },
879 { 0x0d, "Drive Slot (Bay)" },
880 { 0x0e, "POST Memory Resize" },
881 { 0x0f, "System Firmware Progress (formerly POST Error)" },
882 { 0x10, "Event Logging Disabled" },
883 { 0x11, "Watchdog 1" },
884 { 0x12, "System Event" },
885 { 0x13, "Critical Interrupt" },
887 { 0x15, "Module / Board" },
888 { 0x16, "Microcontroller / Coprocessor" },
889 { 0x17, "Add-in Card" },
891 { 0x19, "Chip Set" },
892 { 0x1a, "Other FRU" },
893 { 0x1b, "Cable / Interconnect" },
894 { 0x1c, "Terminator" },
895 { 0x1d, "System Boot Initiated" },
896 { 0x1e, "Boot Error" },
898 { 0x20, "OS Critical Stop" },
899 { 0x21, "Slot /Connector" },
900 { 0x22, "System ACPI Power State" },
901 { 0x23, "Watchdog 2" },
902 { 0x24, "Platform Alert" },
903 { 0x25, "Entity Presence" },
904 { 0x26, "Monitor ASIC / IC" },
906 { 0x28, "Management Subsystem Health" },
908 { 0xf0, "Hot Swap Event" },
912 static const value_string cmd_PEM_EventDir_vals[] = {
913 { 0x00, "Assertion Event" },
914 { 0x01, "Deassertion Event" },
918 static const value_string cmd_PEM_EventData1_threshold_76_vals[] = {
919 { 0x00, "unspecified byte 2" },
920 { 0x01, "trigger reading in byte 2" },
921 { 0x02, "OEM code in byte 2" },
922 { 0x03, "sensor-specific event extension code in byte 2" },
926 static const value_string cmd_PEM_EventData1_threshold_54_vals[] = {
927 { 0x00, "unspecified byte 3" },
928 { 0x01, "trigger reading in byte 3" },
929 { 0x02, "OEM code in byte 3" },
930 { 0x03, "sensor-specific event extension code in byte 3" },
934 static const value_string cmd_PEM_EventData1_discrete_76_vals[] = {
935 { 0x00, "unspecified byte 2" },
936 { 0x01, "previous state and/or severity in byte 2" },
937 { 0x02, "OEM code in byte 2" },
938 { 0x03, "sensor-specific event extension code in byte 3" },
942 static const value_string cmd_PEM_EventData1_discrete_54_vals[] = {
943 { 0x00, "unspecified byte 3" },
944 { 0x01, "reserved" },
945 { 0x02, "OEM code in byte 3" },
946 { 0x03, "sensor-specific event extension code in byte 3" },
950 static const value_string cmd_PEM_EventData1_OEM_76_vals[] = {
951 { 0x00, "unspecified byte 2" },
952 { 0x01, "previous state and/or severity in byte 2" },
953 { 0x02, "OEM code in byte 2" },
954 { 0x03, "sensor-specific event extension code in byte 3" },
958 static const value_string cmd_PEM_EventData1_OEM_54_vals[] = {
959 { 0x00, "unspecified byte 3" },
960 { 0x01, "reserved" },
961 { 0x02, "OEM code in byte 3" },
962 { 0x03, "sensor-specific event extension code in byte 3" },
966 static const value_string cmd_PEM_HotSwapEvent_StateChangeCause_vals[] = {
967 { 0x00, "Normal State Change" },
968 { 0x01, "Change Commanded by Shelf Manager with Set FRU Activation" },
969 { 0x02, "State Change due to operator Changing a Handle Switch" },
970 { 0x03, "State Change due to FRU programmatic action" },
971 { 0x04, "Communication Lost or Regained" },
972 { 0x05, "Communication Lost or Regained-locally detected" },
973 { 0x06, "Suprise State Change due to extraction" },
974 { 0x07, "State Change due to provided information" },
975 { 0x08, "Invalid Hardware Address Detected" },
976 { 0x09, "UnexpectedDeactivation" },
977 { 0x0a, "Reserved" },
978 { 0x0b, "Reserved" },
979 { 0x0c, "Reserved" },
980 { 0x0d, "Reserved" },
981 { 0x0e, "Reserved" },
982 { 0x0f, "State Change, Cause Unknow" },
986 static const value_string cmd_PEM_HotSwapEvent_state_vals[] = {
987 { 0x00, "M0 - FRU Not Installed" },
988 { 0x01, "M1 - FRU Inactive" },
989 { 0x02, "M2 - FRU Activation Request" },
990 { 0x03, "M3 - FRU Activation In Progress" },
991 { 0x04, "M4 - FRU Active" },
992 { 0x05, "M5 - FRU Deactivation Request" },
993 { 0x06, "M6 - FRU Deactivation In Progress" },
994 { 0x07, "M7 - FRU Communication Lost" },
995 { 0x08, "Reserved" },
996 { 0x09, "Reserved" },
997 { 0x0a, "Reserved" },
998 { 0x0b, "Reserved" },
999 { 0x0c, "Reserved" },
1000 { 0x0d, "Reserved" },
1001 { 0x0e, "Reserved" },
1002 { 0x0f, "Reserved" },
1006 /* Get Device SDR Info, added by lane */
1007 static const value_string cmd_GetDeviceSDRInfo_data_Flag_Dynamicpopulation_vals[] = {
1008 { 0x00, "static sensor population" },
1009 { 0x01, "dynamic sensor population" },
1013 static const value_string cmd_GetDeviceSDRInfo_data_Flag_DeviceLUNs_vals[] = {
1014 { 0x00, "has no sensors" },
1015 { 0x01, "has sensors" },
1019 /* Get Device SDR, added by lane */
1020 static const value_string cmd_GetDeviceSDR_data_BytesToRead_vals[] = {
1021 { 0xff, "Read entire record" },
1025 /* Set Sensor Thresholds, added by lane */
1026 static const value_string cmd_SetSensorThresholds_data_ControlByte_Bit_vals[] = {
1027 { 0x00, "Ignored" },
1032 /* Get Sensor Thresholds, added by lane */
1033 static const value_string cmd_GetSensorThresholds_data_ControlByte_Bit_vals[] = {
1034 { 0x00, "Ignored" },
1035 { 0x01, "Readable" },
1039 /* Get Sensor Reading, added by lane */
1040 static const value_string cmd_GetSensorReading_data_ResponseDataByte2_Bit7_vals[] = {
1041 { 0x00, "All Event Messages disabled from this sensor" },
1042 { 0x01, "All Event Messages enabled from this sensor" },
1046 static const value_string cmd_GetSensorReading_data_ResponseDataByte2_Bit6_vals[] = {
1047 { 0x00, "sensor scanning disabled" },
1048 { 0x01, "sensor scanning enabled" },
1052 static const value_string cmd_GetSensorReading_data_ResponseDataByte2_Bit5_vals[] = {
1053 { 0x00, "update sensor status completed" },
1054 { 0x01, "initial update in progress" },
1058 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit7_vals[] = {
1059 { 0x00, "state 7 has not been asserted" },
1060 { 0x01, "state 7 asserted" },
1064 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit6_vals[] = {
1065 { 0x00, "state 6 has not been asserted" },
1066 { 0x01, "state 6 asserted" },
1070 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit5_vals[] = {
1071 { 0x00, "state 5 has not been asserted" },
1072 { 0x01, "state 5 asserted" },
1076 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit4_vals[] = {
1077 { 0x00, "state 4 has not been asserted" },
1078 { 0x01, "state 4 asserted" },
1082 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit3_vals[] = {
1083 { 0x00, "state 3 has not been asserted" },
1084 { 0x01, "state 3 asserted" },
1088 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit2_vals[] = {
1089 { 0x00, "state 2 has not been asserted" },
1090 { 0x01, "state 2 asserted" },
1094 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit1_vals[] = {
1095 { 0x00, "state 1 has not been asserted" },
1096 { 0x01, "state 1 asserted" },
1100 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit0_vals[] = {
1101 { 0x00, "state 0 has not been asserted" },
1102 { 0x01, "state 0 asserted" },
1106 static const value_string cmd_GetSensorReading_data_ResponseDataByte4_Bit7_vals[] = {
1107 { 0x00, "Reserved, Shall returned as 1b" },
1108 { 0x01, "Reserved, Returned as 1b" },
1112 static const value_string cmd_GetSensorReading_data_ResponseDataByte4_Bit6_vals[] = {
1113 { 0x00, "state 14 has not been asserted" },
1114 { 0x01, "state 14 asserted" },
1118 static const value_string cmd_GetSensorReading_data_ResponseDataByte4_Bit5_vals[] = {
1119 { 0x00, "state 13 has not been asserted" },
1120 { 0x01, "state 13 asserted" },
1124 static const value_string cmd_GetSensorReading_data_ResponseDataByte4_Bit4_vals[] = {
1125 { 0x00, "state 12 has not been asserted" },
1126 { 0x01, "state 12 asserted" },
1130 static const value_string cmd_GetSensorReading_data_ResponseDataByte4_Bit3_vals[] = {
1131 { 0x00, "state 11 has not been asserted" },
1132 { 0x01, "state 11 asserted" },
1136 static const value_string cmd_GetSensorReading_data_ResponseDataByte4_Bit2_vals[] = {
1137 { 0x00, "state 10 has not been asserted" },
1138 { 0x01, "state 10 asserted" },
1142 static const value_string cmd_GetSensorReading_data_ResponseDataByte4_Bit1_vals[] = {
1143 { 0x00, "state 9 has not been asserted" },
1144 { 0x01, "state 9 asserted" },
1148 static const value_string cmd_GetSensorReading_data_ResponseDataByte4_Bit0_vals[] = {
1149 { 0x00, "state 8 has not been asserted" },
1150 { 0x01, "state 8 asserted" },
1155 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit5_threshold_vals[] = {
1156 { 0x00, "unknown" },
1157 { 0x01, "at or above upper non-recoverable threshold" },
1161 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit4_threshold_vals[] = {
1162 { 0x00, "unknown" },
1163 { 0x01, "at or above upper critical threshold" },
1167 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit3_threshold_vals[] = {
1168 { 0x00, "unknown" },
1169 { 0x01, "at or above upper non-critical threshold" },
1173 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit2_threshold_vals[] = {
1174 { 0x00, "unknown" },
1175 { 0x01, "at or below lower non-recoverable threshold" },
1179 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit1_threshold_vals[] = {
1180 { 0x00, "unknown" },
1181 { 0x01, "at or below lower critical threshold" },
1185 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit0_threshold_vals[] = {
1186 { 0x00, "unknown" },
1187 { 0x01, "at or below lower non-critical threshold" },
1192 /********* APP, NetFN = 0x06 *********/
1194 /* Get Device ID data, added by lane*/
1195 static const value_string cmd_GetDeviceID_data_DeviceSDR_vals[] = {
1196 { 0x00, "Device provides device SDR" },
1197 { 0x01, "Device does not provide device SDR" },
1201 static const value_string cmd_GetDeviceID_Data_DeviceRevision_vals[] = {
1221 static const value_string cmd_GetDeviceID_data_DeviceAvailable_vals[] = {
1222 { 0x00, "normal operation" },
1223 { 0x01, "device firmware" },
1227 static const value_string cmd_GetDeviceID_Data_IPMIRevision_vals[] = {
1251 static const value_string cmd_GetDeviceID_data_ADS_vals[] = {
1258 /********* Storage, NetFN = 0x0a *********/
1260 /* Get FRU Inventory Area Info, added by lane */
1261 static const value_string cmd_GetFRUInventoryAreaInfo_Data_ResponseDataByte4_Bit0_vals[] = {
1262 { 0x00, "By bytes" },
1263 { 0x01, "By words" },
1267 /* Get SEL Info, added by lane */
1268 static const value_string cmd_GetSELInfo_Data_SELVersion_vals[] = {
1292 static const value_string cmd_GetSELInfo_Data_OperationSupport_Bit7_vals[] = {
1294 { 0x01, "Events have been dropped due to lack of space in the SEL" },
1298 static const value_string cmd_GetSELInfo_Data_OperationSupport_Bit3to0_vals[] = {
1299 { 0x00, "Don't Support" },
1300 { 0x01, "Support" },
1304 /* Clear SEL, added by lane */
1305 static const value_string cmd_ClearSEL_Data_Byte6_vals[] = {
1306 { 0x00, "get erasure status" },
1307 { 0xaa, "initiate erase" },
1311 static const value_string cmd_ClearSEL_Data_ErasureProgress_EraProg_vals[] = {
1312 { 0x00, "erasure in progress" },
1313 { 0x01, "erase completed" },
1319 /********* PICMG, NetFN = 0X2c *********/
1321 /* Get PICMG Properties data, added by lane */
1322 static const value_string cmd_GetPICMGProperties_data_PICMGExtensionVersion_vals[] = {
1327 /* FRU Control, added by lane */
1328 static const value_string cmd_FRUControl_data_FRUControlOption_vals[] = {
1329 { 0x00, "Cold Reset" },
1330 { 0x01, "Warm Reset" },
1331 { 0x02, "Graceful Reboot" },
1332 { 0x03, "Issue Diagnostic Interrupt" },
1333 { 0x04, "Reserved" },
1334 { 0xff, "Reserved" },
1338 /* Get FRU Led Properties, added by lane */
1339 static const value_string cmd_GetFRULedProperties_data_LedProperties_LED3_vals[] = {
1340 { 0x00, "FRU can't control LED3" },
1341 { 0x01, "FRU can control LED3" },
1345 static const value_string cmd_GetFRULedProperties_data_LedProperties_LED2_vals[] = {
1346 { 0x00, "FRU can't control LED2" },
1347 { 0x01, "FRU can control LED2" },
1351 static const value_string cmd_GetFRULedProperties_data_LedProperties_LED1_vals[] = {
1352 { 0x00, "FRU can't control LED1" },
1353 { 0x01, "FRU can control LED1" },
1357 static const value_string cmd_GetFRULedProperties_data_LedProperties_BLUELED_vals[] = {
1358 { 0x00, "FRU can't control Blue LED" },
1359 { 0x01, "FRU can control Blue LED" },
1363 /* Get Led Color Capabilities, added by lane */
1364 static const value_string cmd_GetLedColorCapabilities_data_LEDColorCapabilities_vals[] = {
1365 { 0x00, "Don't Support" },
1366 { 0x01, "Support" },
1370 static const value_string cmd_GetLedColorCapabilities_data_DefaultLEDColor_vals[] = {
1371 { 0x00, "Reserved" },
1378 { 0x07, "Reserved" },
1379 { 0x08, "Reserved" },
1380 { 0x09, "Reserved" },
1381 { 0x0a, "Reserved" },
1382 { 0x0b, "Reserved" },
1383 { 0x0c, "Reserved" },
1384 { 0x0d, "Reserved" },
1385 { 0x0e, "Reserved" },
1386 { 0x0f, "Reserved" },
1390 /* Set FRU Activation data, added by lane */
1391 static const value_string cmd_SetFRUActivation_data_FRUActivationDeactivation_vals[] = {
1392 { 0x00, "Deactivate FRU" },
1393 { 0x01, "Activate FRU" },
1397 /* Set FRU Led State, added by lane */
1398 static const value_string cmd_SetFRULedState_data_LEDID_vals[] = {
1399 { 0x00, "BLUE LED (Bottom of Board)" },
1400 { 0x01, "LED1 Topmost" },
1401 { 0x02, "LED2 Second from top" },
1402 { 0x03, "LED3 Third from top" },
1403 { 0xff, "Lamp Test" },
1407 static const value_string cmd_SetFRULedState_data_LEDFunction_vals[] = {
1408 { 0x00, "LED off override" },
1409 { 0x01, "LED BLINKING override" },
1411 { 0xfa, "LED BLINKING override" },
1412 { 0xfb, "LAMP TEST state" },
1413 { 0xfc, "LED state restored to Local Control state" },
1414 { 0xfd, "Reserved" },
1415 { 0xfe, "Reserved" },
1416 { 0xff, "LED on override" },
1420 static const value_string cmd_SetFRULedState_data_Color_ColorVal_vals[] = {
1421 { 0x00, "Reserved" },
1422 { 0x01, "Use BLUE" },
1423 { 0x02, "Use RED" },
1424 { 0x03, "Use GREEN" },
1425 { 0x04, "Use AMBER" },
1426 { 0x05, "Use ORANGE" },
1427 { 0x06, "Use WHITE" },
1428 { 0x07, "Reserved" },
1429 { 0x08, "Reserved" },
1430 { 0x09, "Reserved" },
1431 { 0x0a, "Reserved" },
1432 { 0x0b, "Reserved" },
1433 { 0x0c, "Reserved" },
1434 { 0x0d, "Reserved" },
1435 { 0x0e, "Do not Change" },
1436 { 0x0f, "Use default color" },
1440 /* Get FRU Led State, added by lane */
1441 static const value_string cmd_GetFRULedState_data_LEDID_vals[] = {
1442 { 0x00, "BLUE LED (Bottom of Board)" },
1443 { 0x01, "LED1 Topmost" },
1444 { 0x02, "LED2 Second from top" },
1445 { 0x03, "LED3 Third from top" },
1446 { 0xff, "Lamp Test" },
1450 static const value_string cmd_GetFRULedState_data_LEDState_Bit21_vals[] = {
1451 { 0x00, "Disabled" },
1452 { 0x01, "Enabled" },
1456 static const value_string cmd_GetFRULedState_data_LEDState_Bit0_vals[] = {
1462 static const value_string cmd_GetFRULedState_data_LocalControlLEDFunction_vals[] = {
1463 { 0x00, "LED is off" },
1464 { 0x01, "LED is BLINKING" },
1466 { 0xfa, "LED is BLINKING" },
1467 { 0xfb, "Reserved" },
1468 { 0xfc, "Reserved" },
1469 { 0xfd, "Reserved" },
1470 { 0xfe, "Reserved" },
1471 { 0xff, "LED is on " },
1475 static const value_string cmd_GetFRULedState_data_ColorVal_vals[] = {
1476 { 0x00, "Reserved" },
1477 { 0x01, "Use BLUE" },
1478 { 0x02, "Use RED" },
1479 { 0x03, "Use GREEN" },
1480 { 0x04, "Use AMBER" },
1481 { 0x05, "Use ORANGE" },
1482 { 0x06, "Use WHITE" },
1483 { 0x07, "Reserved" },
1484 { 0x08, "Reserved" },
1485 { 0x09, "Reserved" },
1486 { 0x0a, "Reserved" },
1487 { 0x0b, "Reserved" },
1488 { 0x0c, "Reserved" },
1489 { 0x0d, "Reserved" },
1490 { 0x0e, "Reserved" },
1491 { 0x0f, "Reserved" },
1495 static const value_string cmd_GetFRULedState_data_OverrideStateLEDFunction_vals[] = {
1496 { 0x00, "LED Override State is off" },
1497 { 0x01, "LED Override State is BLINKING" },
1499 { 0xfa, "LED Override State is BLINKING" },
1500 { 0xfb, "Reserved" },
1501 { 0xfc, "Reserved" },
1502 { 0xfd, "Reserved" },
1503 { 0xfe, "Reserved" },
1504 { 0xff, "LED Override State is on " },
1508 /* Set FRU Activation Policy, added by lane */
1509 static const value_string cmd_SetFRUActivationPolicy_data_PFRUActivationPolicyMaskBit_Bit1_vals[] = {
1510 { 0x00, "Bit 1 in Byte 4 of command will be ignored" },
1511 { 0x01, "Bit 1 in Byte 4 of command will affect the Deactivation-Locked bit" },
1515 static const value_string cmd_SetFRUActivationPolicy_data_PFRUActivationPolicyMaskBit_Bit0_vals[] = {
1516 { 0x00, "Bit 0 in Byte 4 of command will be ignored" },
1517 { 0x01, "Bit 0 in Byte 4 of command will affect the Locked bit" },
1521 static const value_string cmd_SetFRUActivationPolicy_data_PFRUActivationPolicySetBit_Bit1_vals[] = {
1522 { 0x00, "FRU can transition from M4 to M5" },
1523 { 0x01, "FRU can not transition from M4 to M5" },
1527 static const value_string cmd_SetFRUActivationPolicy_data_PFRUActivationPolicySetBit_Bit0_vals[] = {
1528 { 0x00, "FRU can transition from M1 to M2" },
1529 { 0x01, "FRU can not transition from M1 to M2" },
1533 static const value_string cmd_SetFRUActivationPolicy_data_PFRUActivationPolicySetBit_Bit1_ignored_vals[] = {
1534 { 0x00, "ignored, because Bit 1 of Byte 3 = 0" },
1535 { 0x01, "ignored, because Bit 1 of Byte 3 = 0" },
1539 static const value_string cmd_SetFRUActivationPolicy_data_PFRUActivationPolicySetBit_Bit0_ignored_vals[] = {
1540 { 0x00, "ignored, because Bit 0 of Byte 3 = 0" },
1541 { 0x01, "ignored, because Bit 0 of Byte 3 = 0" },
1545 /* Get FRU Activation Policy, added by lane */
1546 static const value_string cmd_GetFRUActivationPolicy_data_FRUActivationPolicy_Bit1_vals[] = {
1547 { 0x00, "FRU is not Deactivation-Locked" },
1548 { 0x01, "FRU is Deactivation-Locked" },
1552 static const value_string cmd_GetFRUActivationPolicy_data_FRUActivationPolicy_Bit0_vals[] = {
1553 { 0x00, "FRU is not Locked" },
1554 { 0x01, "FRU is Locked" },
1558 /* Set Power Level data, added by lane */
1559 static const value_string cmd_SetPowerLevel_data_PowerLevel_vals[] = {
1560 { 0x00, "Power Off" },
1561 { 0x01, "Select the power level" },
1562 { 0x02, "Select the power level" },
1563 { 0x03, "Select the power level" },
1564 { 0x04, "Select the power level" },
1565 { 0x05, "Select the power level" },
1566 { 0x06, "Select the power level" },
1567 { 0x07, "Select the power level" },
1568 { 0x08, "Select the power level" },
1569 { 0x09, "Select the power level" },
1570 { 0x0a, "Select the power level" },
1571 { 0x0b, "Select the power level" },
1572 { 0x0c, "Select the power level" },
1573 { 0x0d, "Select the power level" },
1574 { 0x0e, "Select the power level" },
1575 { 0x0f, "Select the power level" },
1576 { 0x10, "Select the power level" },
1577 { 0x11, "Select the power level" },
1578 { 0x12, "Select the power level" },
1579 { 0x13, "Select the power level" },
1580 { 0x14, "Select the power level" },
1581 { 0xff, "Do not change current power level" },
1585 static const value_string cmd_SetPowerLevel_data_SetPresentLevelsToDesiredLevels_vals[] = {
1586 { 0x00, "Do not change present power level" },
1587 { 0x01, "Copy Present Levels To Desired Levels" },
1591 /* Get Power Level data, added by lane */
1592 static const value_string cmd_GetPowerLevel_data_PowerType_vals[] = {
1593 { 0x00, "Steady state power draw levels" },
1594 { 0x01, "Desired steady state draw levels" },
1595 { 0x02, "Early power draw levels" },
1596 { 0x03, "Desired early levels" },
1600 static const value_string cmd_GetPowerLevel_data_Properties_DynamicPowerCon_vals[] = {
1601 { 0x00, "FRU doesn't support dynamic reconfiguration of power" },
1602 { 0x01, "FRU support dynamic reconfiguration of power" },
1606 /* Set Fan Level, added by lane */
1607 static const value_string cmd_SetFanLevel_data_FanLevel_vals[] = {
1608 { 0xfe, "Emergency Shut Down" },
1609 { 0xff, "Local Control" },
1613 /* Get Fan Level, added by lane */
1614 static const value_string cmd_GetFanLevel_data_OverrideFanLevel_vals[] = {
1615 { 0xfe, "Fan has been placed in ' Emergency Shut Down ' by the Shelf Manager" },
1616 { 0xff, "Fan operating in Local Control mode" },
1621 /*****************************************************************************************/
1624 /* ipmi command dissector struct , added by lane */
1626 typedef struct _ipmi_cmd_dissect{
1629 void (*dissectfunc)(proto_tree *, proto_tree *, packet_info *, tvbuff_t *, gint *, guint8, guint8, guint8);
1634 /* Sensor/Event NetFN (0x04) */
1637 dissect_cmd_PlatformEventMessage(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo, tvbuff_t *tvb,
1638 gint *poffset, guint8 len, guint8 response, guint8 auth_offset)
1642 proto_tree *field_tree = NULL;
1643 proto_item *tf = NULL;
1644 guint8 SensorType, EventDirAndEventType, EventType, EventData1, EventData2;
1654 proto_tree_add_item(ipmi_tree, hf_PEM_datafield_EvMRev,
1655 tvb, (*poffset)++, 1, TRUE);
1660 SensorType = tvb_get_guint8(tvb, auth_offset + 17) ;
1663 proto_tree_add_item(ipmi_tree, hf_PEM_datafield_SensorType,
1664 tvb, (*poffset)++, 1, TRUE);
1670 proto_tree_add_item(ipmi_tree, hf_PEM_datafield_SensorNumber,
1671 tvb, (*poffset)++, 1, TRUE);
1675 /* Event Dir & Event Type*/
1676 EventDirAndEventType = tvb_get_guint8(tvb, auth_offset + 19) ;
1677 EventType = EventDirAndEventType&0x7f;
1681 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
1682 "EventDir&EventType: %s0x%02x", " ", EventDirAndEventType);
1683 field_tree = proto_item_add_subtree(tf, ett_cmd_PEM_EventDirAndEventType);
1685 proto_tree_add_item(field_tree, hf_PEM_datafield_EventDirAndEventType_EventDir,
1686 tvb, *poffset, 1, TRUE);
1687 proto_tree_add_item(field_tree, hf_PEM_datafield_EventDirAndEventType_EventType,
1688 tvb, *poffset, 1, TRUE);
1695 switch(SensorType) {
1697 case 0xf0: /* Hot Swap Event */
1699 if(0x00==EventType) {
1705 if(0x01==EventType) {
1707 EventData1 = tvb_get_guint8(tvb, auth_offset + 20) ;
1709 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
1710 "EventData 1: %s0x%02x", " ", EventData1);
1712 field_tree = proto_item_add_subtree(tf, ett_cmd_PEM_EventData1_threshold);
1714 proto_tree_add_item(field_tree, hf_PEM_datafield_EventData1_threshold_76,
1715 tvb, *poffset, 1, TRUE);
1716 proto_tree_add_item(field_tree, hf_PEM_datafield_EventData1_threshold_54,
1717 tvb, *poffset, 1, TRUE);
1718 proto_tree_add_item(field_tree, hf_PEM_datafield_EventData1_threshold_30,
1719 tvb, *poffset, 1, TRUE);
1726 if (tree&&(len!=0)) {
1727 proto_tree_add_item(field_tree, hf_PEM_datafield_EventData2_threshold,
1728 tvb, (*poffset)++, 1, TRUE);
1733 if (tree&&(len!=0)) {
1734 proto_tree_add_item(ipmi_tree, hf_PEM_datafield_EventData3_threshold,
1735 tvb, (*poffset)++, 1, TRUE);
1742 if(((EventType>=0x02)&&(EventType<=0x0b))||(0x6f==EventType)) {
1745 EventData1 = tvb_get_guint8(tvb, auth_offset + 20) ;
1746 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
1747 "EventData 1: %s0x%02x", " ", EventData1);
1749 field_tree = proto_item_add_subtree(tf, ett_cmd_PEM_EventData1_discrete);
1751 proto_tree_add_item(field_tree, hf_PEM_datafield_EventData1_discrete_76,
1752 tvb, *poffset, 1, TRUE);
1753 proto_tree_add_item(field_tree, hf_PEM_datafield_EventData1_discrete_54,
1754 tvb, *poffset, 1, TRUE);
1755 proto_tree_add_item(field_tree, hf_PEM_datafield_HotSwapEvent_CurrentState,
1756 tvb, *poffset, 1, TRUE);
1763 if (tree&&(len!=0)) {
1764 EventData2 = tvb_get_guint8(tvb, auth_offset + 21) ;
1765 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
1766 "EventData 2: %s0x%02x", " ", EventData2);
1768 field_tree = proto_item_add_subtree(tf, ett_cmd_PEM_EventData2_discrete);
1770 proto_tree_add_item(field_tree, hf_PEM_datafield_HotSwapEvent_StateChangeCause,
1771 tvb, *poffset, 1, TRUE);
1772 proto_tree_add_item(field_tree, hf_PEM_datafield_HotSwapEvent_PreviousState,
1773 tvb, *poffset, 1, TRUE);
1780 if (tree&&(len!=0)) {
1781 proto_tree_add_item(ipmi_tree, hf_PEM_datafield_HotSwapEvent_FRUDeviceID,
1782 tvb, (*poffset)++, 1, TRUE);
1788 if((EventType>=0x70)&&(EventType<=0x7f)) {
1791 EventData1 = tvb_get_guint8(tvb, auth_offset + 20) ;
1792 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
1793 "EventData 1: %s0x%02x", " ", EventData1);
1795 field_tree = proto_item_add_subtree(tf, ett_cmd_PEM_EventData1_OEM);
1797 proto_tree_add_item(field_tree, hf_PEM_datafield_EventData1_OEM_76,
1798 tvb, *poffset, 1, TRUE);
1799 proto_tree_add_item(field_tree, hf_PEM_datafield_EventData1_OEM_54,
1800 tvb, *poffset, 1, TRUE);
1801 proto_tree_add_item(field_tree, hf_PEM_datafield_EventData1_OEM_30,
1802 tvb, *poffset, 1, TRUE);
1808 if (tree&&(len!=0)) {
1809 EventData2 = tvb_get_guint8(tvb, auth_offset + 21) ;
1810 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
1811 "EventData 2: %s0x%02x", " ", EventData2);
1813 field_tree = proto_item_add_subtree(tf, ett_cmd_PEM_EventData2_OEM);
1815 proto_tree_add_item(field_tree, hf_PEM_datafield_EventData2_OEM_74,
1816 tvb, *poffset, 1, TRUE);
1817 proto_tree_add_item(field_tree, hf_PEM_datafield_EventData2_OEM_30,
1818 tvb, *poffset, 1, TRUE);
1824 if (tree&&(len!=0)) {
1825 proto_tree_add_item(ipmi_tree, hf_PEM_datafield_EventData3_OEM,
1826 tvb, (*poffset)++, 1, TRUE);
1835 next_tvb = tvb_new_subset(tvb, *poffset, len, len);
1836 call_dissector(data_handle, next_tvb, pinfo, tree);
1848 dissect_cmd_GetDeviceSDR(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo, tvbuff_t *tvb,
1849 gint *poffset, guint8 len, guint8 response, guint8 auth_offset _U_)
1855 /* Record ID for next record */
1857 proto_tree_add_item(ipmi_tree, hf_GetDeviceSDR_datafield_NextRecordID,
1858 tvb, *poffset, 1, TRUE);
1862 /* Requested bytes from record */
1864 next_tvb = tvb_new_subset(tvb, *poffset, len, len);
1865 call_dissector(data_handle, next_tvb, pinfo, tree);
1872 /* Reservation ID */
1874 proto_tree_add_item(ipmi_tree, hf_GetDeviceSDR_datafield_ReservationID,
1875 tvb, *poffset, 1, TRUE);
1878 /* Record ID of record to Get */
1880 proto_tree_add_item(ipmi_tree, hf_GetDeviceSDR_datafield_RecordID,
1881 tvb, *poffset, 1, TRUE);
1884 /* Offset into record */
1886 proto_tree_add_item(ipmi_tree, hf_GetDeviceSDR_datafield_OffsetIntoRecord,
1887 tvb, (*poffset)++, 1, TRUE);
1891 proto_tree_add_item(ipmi_tree, hf_GetDeviceSDR_datafield_BytesToRead,
1892 tvb, (*poffset)++, 1, TRUE);
1901 dissect_cmd_Get_Device_SDR_Info(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
1902 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset)
1905 proto_tree *field_tree = NULL;
1906 proto_item *tf = NULL;
1911 flag = tvb_get_guint8(tvb, auth_offset + 18) ;
1913 /* Number of the Sensors in device*/
1915 proto_tree_add_item(ipmi_tree, hf_GetDeviceSDRInfo_datafield_SensorNumber,
1916 tvb, (*poffset)++, 1, TRUE);
1921 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
1922 "Flag: %s0x%02x", " ", flag);
1924 field_tree = proto_item_add_subtree(tf, ett_cmd_GetDeviceSDRInfo_Flag);
1926 proto_tree_add_item(field_tree, hf_GetDeviceSDRInfo_datafield_Flag_Dynamicpopulation,
1927 tvb, *poffset, 1, TRUE);
1928 proto_tree_add_item(field_tree, hf_GetDeviceSDRInfo_datafield_Flag_Reserved,
1929 tvb, *poffset, 1, TRUE);
1930 proto_tree_add_item(field_tree, hf_GetDeviceSDRInfo_datafield_Flag_DeviceLUNs3,
1931 tvb, *poffset, 1, TRUE);
1932 proto_tree_add_item(field_tree, hf_GetDeviceSDRInfo_datafield_Flag_DeviceLUNs2,
1933 tvb, *poffset, 1, TRUE);
1934 proto_tree_add_item(field_tree, hf_GetDeviceSDRInfo_datafield_Flag_DeviceLUNs1,
1935 tvb, *poffset, 1, TRUE);
1936 proto_tree_add_item(field_tree, hf_GetDeviceSDRInfo_datafield_Flag_DeviceLUNs0,
1937 tvb, *poffset, 1, TRUE);
1941 /* Sensor Population Change Indicator */
1943 proto_tree_add_item(ipmi_tree, hf_GetDeviceSDRInfo_datafield_SensorPopulationChangeIndicator,
1944 tvb, *poffset, 1, TRUE);
1955 dissect_cmd_Reserve_Device_SDR_Repository(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
1956 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset _U_)
1961 /* Reservation ID */
1963 proto_tree_add_item(ipmi_tree, hf_ReserveDeviceSDRRepository_datafield_ReservationID ,
1964 tvb, *poffset, 1, TRUE);
1975 dissect_cmd_Set_Sensor_Hysteresis(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
1976 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset _U_)
1985 proto_tree_add_item(ipmi_tree, hf_SetSensorHysteresis_datafield_SensorNumber,
1986 tvb, (*poffset)++, 1, TRUE);
1988 /* reserved for future 'hysteresis mask' definition. */
1990 proto_tree_add_item(ipmi_tree, hf_SetSensorHysteresis_datafield_ReservedForHysteresisMask,
1991 tvb, (*poffset)++, 1, TRUE);
1993 /* Positive-going Threshold Hysteresis Value */
1995 proto_tree_add_item(ipmi_tree, hf_SetSensorHysteresis_datafield_PositivegoingThresholdHysteresisValue,
1996 tvb, (*poffset)++, 1, TRUE);
1998 /* Negative-going Threshold Hysteresis Value */
2000 proto_tree_add_item(ipmi_tree, hf_SetSensorHysteresis_datafield_NegativegoingThresholdHysteresisValue,
2001 tvb, (*poffset)++, 1, TRUE);
2008 dissect_cmd_Get_Sensor_Hysteresis(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
2009 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset _U_)
2013 /* Positive-going Threshold Hysteresis Value */
2015 proto_tree_add_item(ipmi_tree, hf_GetSensorHysteresis_datafield_PositivegoingThresholdHysteresisValue,
2016 tvb, (*poffset)++, 1, TRUE);
2018 /* Negative-going Threshold Hysteresis Value */
2020 proto_tree_add_item(ipmi_tree, hf_GetSensorHysteresis_datafield_NegativegoingThresholdHysteresisValue,
2021 tvb, (*poffset)++, 1, TRUE);
2027 proto_tree_add_item(ipmi_tree, hf_GetSensorHysteresis_datafield_SensorNumber,
2028 tvb, (*poffset)++, 1, TRUE);
2030 /* reserved for future 'hysteresis mask' definition. */
2032 proto_tree_add_item(ipmi_tree, hf_GetSensorHysteresis_datafield_ReservedForHysteresisMask,
2033 tvb, (*poffset)++, 1, TRUE);
2040 dissect_cmd_Set_Sensor_Thresholds(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
2041 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset)
2044 proto_tree *field_tree = NULL;
2045 proto_item *tf = NULL;
2054 proto_tree_add_item(ipmi_tree, hf_SetSensorThresholds_datafield_SensorNumber,
2055 tvb, (*poffset)++, 1, TRUE);
2057 ControlByte = tvb_get_guint8(tvb, auth_offset + 17) ;
2058 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2059 "Control Byte: %s0x%02x", " ", ControlByte);
2060 field_tree = proto_item_add_subtree(tf, ett_cmd_SetSensorThresholds_ControlByte);
2062 proto_tree_add_item(field_tree, hf_SetSensorThresholds_datafield_ControlByte_Bit76,
2063 tvb, *poffset, 1, TRUE);
2064 proto_tree_add_item(field_tree, hf_SetSensorThresholds_datafield_ControlByte_Bit5,
2065 tvb, *poffset, 1, TRUE);
2066 proto_tree_add_item(field_tree, hf_SetSensorThresholds_datafield_ControlByte_Bit4,
2067 tvb, *poffset, 1, TRUE);
2068 proto_tree_add_item(field_tree, hf_SetSensorThresholds_datafield_ControlByte_Bit3,
2069 tvb, *poffset, 1, TRUE);
2070 proto_tree_add_item(field_tree, hf_SetSensorThresholds_datafield_ControlByte_Bit2,
2071 tvb, *poffset, 1, TRUE);
2072 proto_tree_add_item(field_tree, hf_SetSensorThresholds_datafield_ControlByte_Bit1,
2073 tvb, *poffset, 1, TRUE);
2074 proto_tree_add_item(field_tree, hf_SetSensorThresholds_datafield_ControlByte_Bit0,
2075 tvb, *poffset, 1, TRUE);
2078 /* lower non-critical threshold */
2079 if(ControlByte&0x01)
2080 proto_tree_add_item(ipmi_tree, hf_SetSensorThresholds_datafield_LowerNonCriticalThreshold,
2081 tvb, (*poffset)++, 1, TRUE);
2083 /* lower critical threshold */
2084 if(ControlByte&0x02)
2085 proto_tree_add_item(ipmi_tree, hf_SetSensorThresholds_datafield_LowerCriticalThreshold,
2086 tvb, (*poffset)++, 1, TRUE);
2088 /* lower non-recoverable threshold */
2089 if(ControlByte&0x04)
2090 proto_tree_add_item(ipmi_tree, hf_SetSensorThresholds_datafield_LowerNonRecoverableThreshold,
2091 tvb, (*poffset)++, 1, TRUE);
2093 /* upper non-critical threshold */
2094 if(ControlByte&0x08)
2095 proto_tree_add_item(ipmi_tree, hf_SetSensorThresholds_datafield_UpperNonCriticalThreshold,
2096 tvb, (*poffset)++, 1, TRUE);
2098 /* upper critical threshold value */
2099 if(ControlByte&0x10)
2100 proto_tree_add_item(ipmi_tree, hf_SetSensorThresholds_datafield_UpperCriticalThreshold,
2101 tvb, (*poffset)++, 1, TRUE);
2103 /* upper non-recoverable threshold value */
2104 if(ControlByte&0x20)
2105 proto_tree_add_item(ipmi_tree, hf_SetSensorThresholds_datafield_UpperNonRecoverableThreshold,
2106 tvb, (*poffset)++, 1, TRUE);
2114 dissect_cmd_Get_Sensor_Thresholds(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
2115 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset)
2118 proto_tree *field_tree = NULL;
2119 proto_item *tf = NULL;
2125 ControlByte = tvb_get_guint8(tvb, auth_offset + 17) ;
2126 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2127 "Control Byte: %s0x%02x", " ", ControlByte);
2128 field_tree = proto_item_add_subtree(tf, ett_cmd_GetSensorThresholds_ControlByte);
2130 proto_tree_add_item(field_tree, hf_GetSensorThresholds_datafield_ControlByte_Bit76,
2131 tvb, *poffset, 1, TRUE);
2132 proto_tree_add_item(field_tree, hf_GetSensorThresholds_datafield_ControlByte_Bit5,
2133 tvb, *poffset, 1, TRUE);
2134 proto_tree_add_item(field_tree, hf_GetSensorThresholds_datafield_ControlByte_Bit4,
2135 tvb, *poffset, 1, TRUE);
2136 proto_tree_add_item(field_tree, hf_GetSensorThresholds_datafield_ControlByte_Bit3,
2137 tvb, *poffset, 1, TRUE);
2138 proto_tree_add_item(field_tree, hf_GetSensorThresholds_datafield_ControlByte_Bit2,
2139 tvb, *poffset, 1, TRUE);
2140 proto_tree_add_item(field_tree, hf_GetSensorThresholds_datafield_ControlByte_Bit1,
2141 tvb, *poffset, 1, TRUE);
2142 proto_tree_add_item(field_tree, hf_GetSensorThresholds_datafield_ControlByte_Bit0,
2143 tvb, *poffset, 1, TRUE);
2146 /* lower non-critical threshold */
2147 if(ControlByte&0x01)
2148 proto_tree_add_item(ipmi_tree, hf_GetSensorThresholds_datafield_LowerNonCriticalThreshold,
2149 tvb, (*poffset)++, 1, TRUE);
2151 /* lower critical threshold */
2152 if(ControlByte&0x02)
2153 proto_tree_add_item(ipmi_tree, hf_GetSensorThresholds_datafield_LowerCriticalThreshold,
2154 tvb, (*poffset)++, 1, TRUE);
2156 /* lower non-recoverable threshold */
2157 if(ControlByte&0x04)
2158 proto_tree_add_item(ipmi_tree, hf_GetSensorThresholds_datafield_LowerNonRecoverableThreshold,
2159 tvb, (*poffset)++, 1, TRUE);
2161 /* upper non-critical threshold */
2162 if(ControlByte&0x08)
2163 proto_tree_add_item(ipmi_tree, hf_GetSensorThresholds_datafield_UpperNonCriticalThreshold,
2164 tvb, (*poffset)++, 1, TRUE);
2166 /* upper critical threshold value */
2167 if(ControlByte&0x10)
2168 proto_tree_add_item(ipmi_tree, hf_GetSensorThresholds_datafield_UpperCriticalThreshold,
2169 tvb, (*poffset)++, 1, TRUE);
2171 /* upper non-recoverable threshold value */
2172 if(ControlByte&0x20)
2173 proto_tree_add_item(ipmi_tree, hf_GetSensorThresholds_datafield_UpperNonRecoverableThreshold,
2174 tvb, (*poffset)++, 1, TRUE);
2181 proto_tree_add_item(ipmi_tree, hf_GetSensorThresholds_datafield_SensorNumber,
2182 tvb, (*poffset)++, 1, TRUE);
2189 dissect_cmd_Get_Sensor_Reading(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
2190 gint *poffset, guint8 len, guint8 response, guint8 auth_offset)
2193 proto_tree *field_tree = NULL;
2194 proto_item *tf = NULL;
2195 guint8 Response_Data_Byte2, Response_Data_Byte3, Response_Data_Byte4;
2201 proto_tree_add_item(ipmi_tree, hf_GetSensorReading_datafield_Sensorreading,
2202 tvb, (*poffset)++, 1, TRUE);
2204 /* Response Data Byte2 */
2207 Response_Data_Byte2 = tvb_get_guint8(tvb, auth_offset + 18) ;
2209 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2210 "Response Data Byte 2: %s0x%02x", " ", Response_Data_Byte2);
2212 field_tree = proto_item_add_subtree(tf, ett_cmd_GetSensorReading_ResponseDataByte2);
2214 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte2_Bit7,
2215 tvb, *poffset, 1, TRUE);
2216 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte2_Bit6,
2217 tvb, *poffset, 1, TRUE);
2218 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte2_Bit5,
2219 tvb, *poffset, 1, TRUE);
2220 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte2_Bit40,
2221 tvb, *poffset, 1, TRUE);
2227 /* Response Data Byte3 (For discrete reading sensors) */
2230 Response_Data_Byte3 = tvb_get_guint8(tvb, auth_offset + 19) ;
2232 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2233 "Response Data Byte 3: %s0x%02x", " ", Response_Data_Byte3);
2235 field_tree = proto_item_add_subtree(tf, ett_cmd_GetSensorReading_ResponseDataByte3);
2237 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte3_Bit7,
2238 tvb, *poffset, 1, TRUE);
2239 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte3_Bit6,
2240 tvb, *poffset, 1, TRUE);
2241 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte3_Bit5,
2242 tvb, *poffset, 1, TRUE);
2243 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte3_Bit4,
2244 tvb, *poffset, 1, TRUE);
2245 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte3_Bit3,
2246 tvb, *poffset, 1, TRUE);
2247 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte3_Bit2,
2248 tvb, *poffset, 1, TRUE);
2249 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte3_Bit1,
2250 tvb, *poffset, 1, TRUE);
2251 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte3_Bit0,
2252 tvb, *poffset, 1, TRUE);
2256 /* Response Data Byte4 (For discrete reading sensors) */
2259 Response_Data_Byte4 = tvb_get_guint8(tvb, auth_offset + 20) ;
2261 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2262 "Response Data Byte 4: %s0x%02x", " ", Response_Data_Byte4);
2264 field_tree = proto_item_add_subtree(tf, ett_cmd_GetSensorReading_ResponseDataByte4);
2266 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte4_Bit7,
2267 tvb, *poffset, 1, TRUE);
2268 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte4_Bit6,
2269 tvb, *poffset, 1, TRUE);
2270 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte4_Bit5,
2271 tvb, *poffset, 1, TRUE);
2272 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte4_Bit4,
2273 tvb, *poffset, 1, TRUE);
2274 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte4_Bit3,
2275 tvb, *poffset, 1, TRUE);
2276 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte4_Bit2,
2277 tvb, *poffset, 1, TRUE);
2278 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte4_Bit1,
2279 tvb, *poffset, 1, TRUE);
2280 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte4_Bit0,
2281 tvb, *poffset, 1, TRUE);
2287 /* Response Data Byte3 (For threshold-based sensors) */
2290 Response_Data_Byte3 = tvb_get_guint8(tvb, auth_offset + 19) ;
2292 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2293 "Present threshold comparison status: %s0x%02x", " ", Response_Data_Byte3);
2295 field_tree = proto_item_add_subtree(tf, ett_cmd_GetSensorReading_ResponseDataByte3_threshold);
2297 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte3_Bit76_threshold,
2298 tvb, *poffset, 1, TRUE);
2299 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte3_Bit5_threshold,
2300 tvb, *poffset, 1, TRUE);
2301 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte3_Bit4_threshold,
2302 tvb, *poffset, 1, TRUE);
2303 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte3_Bit3_threshold,
2304 tvb, *poffset, 1, TRUE);
2305 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte3_Bit2_threshold,
2306 tvb, *poffset, 1, TRUE);
2307 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte3_Bit1_threshold,
2308 tvb, *poffset, 1, TRUE);
2309 proto_tree_add_item(field_tree, hf_GetSensorReading_datafield_ResponseDataByte3_Bit0_threshold,
2310 tvb, *poffset, 1, TRUE);
2320 proto_tree_add_item(ipmi_tree, hf_GetSensorReading_datafield_SensorNumber,
2321 tvb, (*poffset)++, 1, TRUE);
2330 /* App NetFN (0x06) */
2333 dissect_cmd_Get_Device_ID(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
2334 gint *poffset, guint8 len, guint8 response, guint8 auth_offset)
2337 proto_tree *field_tree = NULL;
2338 proto_item *tf = NULL;
2339 guint8 device_revision, firmware_revision1, additional_device_support;
2340 guint32 ManufactureID;
2346 device_revision = tvb_get_guint8(tvb, auth_offset + 18) ;
2347 firmware_revision1 = tvb_get_guint8(tvb, auth_offset + 19) ;
2348 additional_device_support = tvb_get_guint8(tvb, auth_offset + 22) ;
2349 ManufactureID = tvb_get_ntoh24(tvb, auth_offset + 23);
2350 ProductID = tvb_get_ntohs(tvb, auth_offset + 26);
2355 proto_tree_add_item(ipmi_tree, hf_GetDeviceID_datafield_DeviceID,
2356 tvb, (*poffset)++, 1, TRUE);
2360 /* DeviceSDR/DeviceRevision */
2363 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2364 "Device SDR/Device Revision: %s (0x%02x)", val_to_str(device_revision>>7,
2365 cmd_GetDeviceID_data_DeviceSDR_vals, "Unknown (0x%02x)"), device_revision>>7);
2367 field_tree = proto_item_add_subtree(tf, ett_cmd_GetDeviceID_data_dr);
2369 proto_tree_add_item(field_tree, hf_GetDeviceID_datafield_DeviceSDR,
2370 tvb, *poffset, 1, TRUE);
2371 proto_tree_add_item(field_tree, hf_GetDeviceID_datafield_DeviceRevision,
2372 tvb, *poffset, 1, TRUE);
2373 proto_item_append_text(tf, ", DeviceRevision (0x%02x)", device_revision&0x0f);
2377 /* Device available/Major Firmware Revision */
2380 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2381 "Device available/Major Firmware Revision: %s (0x%02x)", val_to_str(firmware_revision1>>7,
2382 cmd_GetDeviceID_data_DeviceAvailable_vals, "Unknown (0x%02x)"), firmware_revision1>>7);
2384 field_tree = proto_item_add_subtree(tf, ett_cmd_GetDeviceID_data_fr);
2386 proto_tree_add_item(field_tree, hf_GetDeviceID_datafield_DeviceAvailable,
2387 tvb, *poffset, 1, TRUE);
2388 proto_tree_add_item(field_tree, hf_GetDeviceID_datafield_MajorFirmwareRevision,
2389 tvb, *poffset, 1, TRUE);
2390 proto_item_append_text(tf, ", MajorFirmwareRevision 0x%02x", device_revision&0x7f);
2394 /* Minor Firmware Revision */
2396 proto_tree_add_item(ipmi_tree, hf_GetDeviceID_datafield_MinorFirmwareRevision,
2397 tvb, (*poffset)++, 1, TRUE);
2402 proto_tree_add_item(ipmi_tree, hf_GetDeviceID_datafield_IPMIRevision,
2403 tvb, (*poffset)++, 1, TRUE);
2406 /* Additional Device Support */
2409 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2410 "Additional Device Support: %s0x%02x", " ", additional_device_support);
2412 field_tree = proto_item_add_subtree(tf, ett_cmd_GetDeviceID_data_ads);
2414 proto_tree_add_item(field_tree, hf_GetDeviceID_datafield_ADS_Chasis,
2415 tvb, *poffset, 1, TRUE);
2416 proto_tree_add_item(field_tree, hf_GetDeviceID_datafield_ADS_Bridge,
2417 tvb, *poffset, 1, TRUE);
2418 proto_tree_add_item(field_tree, hf_GetDeviceID_datafield_ADS_IPMBEventGenerator,
2419 tvb, *poffset, 1, TRUE);
2420 proto_tree_add_item(field_tree, hf_GetDeviceID_datafield_ADS_IPMBEventReceiver,
2421 tvb, *poffset, 1, TRUE);
2422 proto_tree_add_item(field_tree, hf_GetDeviceID_datafield_ADS_FRUInventoryDevice,
2423 tvb, *poffset, 1, TRUE);
2424 proto_tree_add_item(field_tree, hf_GetDeviceID_datafield_ADS_SELDevice,
2425 tvb, *poffset, 1, TRUE);
2426 proto_tree_add_item(field_tree, hf_GetDeviceID_datafield_ADS_SDRRepositoryDevice,
2427 tvb, *poffset, 1, TRUE);
2428 proto_tree_add_item(field_tree, hf_GetDeviceID_datafield_ADS_SensorDevice,
2429 tvb, *poffset, 1, TRUE);
2434 /* Manufacture ID */
2436 proto_tree_add_item(ipmi_tree, hf_GetDeviceID_datafield_ManufactureID,
2437 tvb, *poffset, 3, TRUE);
2443 proto_tree_add_item(ipmi_tree, hf_GetDeviceID_datafield_ProductID,
2444 tvb, *poffset, 2, TRUE);
2448 /* Auxiliary Firmware Revision Infomation */
2449 if ((15==len)&&tree) {
2450 proto_tree_add_item(ipmi_tree, hf_GetDeviceID_datafield_AFRI,
2451 tvb, *poffset, 4, TRUE);
2461 static const true_false_string ipmi_Auth_Cap_comp_val = {
2462 "IPMI v2.0+ extended capabilities available",
2463 "IPMI v1.5 support only"
2466 static const true_false_string ipmi_Authentication_Type_Support_val = {
2468 "Authentication type not available for use"
2471 static const true_false_string ipmi_Auth_Cap_datafield_comp_val = {
2472 "Get IPMI v2.0+ extended data",
2473 "Backward compatible with IPMI v1.5"
2476 static const true_false_string ipmi_Authentication_Type_KG_status_val = {
2477 "KG is set to non-zero value",
2478 "KG is set to default (all 0s)"
2481 static const true_false_string ipmi_Authentication_Type_per_mess_auth_status_val = {
2482 "Per-message Authentication is disabled",
2483 "Per-message Authentication is enabled"
2486 static const true_false_string ipmi_Authentication_Type_user_level_auth_status_val = {
2487 "User Level Authentication is disabled",
2488 "User Level Authentication is enabled"
2493 static const value_string GetChannelAuthCap_channelno_vals[] = {
2506 { 0xe, "Retrieve information for channel this request was issued on" },
2511 static const value_string GetChannelAuthCap_max_priv_lev_vals[] = {
2512 { 0x0, "Reserved" },
2513 { 0x1, "Callback level" },
2514 { 0x2, "User level" },
2515 { 0x3, "Operator level" },
2516 { 0x4, "Administrator level" },
2517 { 0x5, "OEM Proprietary level" },
2520 /* 22-15, Get Channel Authentication Capabilities Command */
2522 dissect_cmd_Get_Channel_Auth_Capabilities(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
2523 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset _U_)
2525 proto_tree *field_tree = NULL;
2526 proto_item *tf = NULL;
2530 /* Byte 2 Channel Number */
2531 proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_Cap_channel_number,
2532 tvb, (*poffset), 1, TRUE);
2534 /* Byte 3 - 4 Authentication Type Support */
2535 proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_Cap_comp_info,
2536 tvb, (*poffset), 1, TRUE);
2537 proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_Cap_Auth_types_b5,
2538 tvb, (*poffset), 1, TRUE);
2539 proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_Cap_Auth_types_b4,
2540 tvb, (*poffset), 1, TRUE);
2541 proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_Cap_Auth_types_b2,
2542 tvb, (*poffset), 1, TRUE);
2543 proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_Cap_Auth_types_b1,
2544 tvb, (*poffset), 1, TRUE);
2545 proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_Cap_Auth_types_b0,
2546 tvb, (*poffset), 1, TRUE);
2548 proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_Cap_Auth_KG_status,
2549 tvb, (*poffset), 1, TRUE);
2550 /* [4] - Per-message Authentication status */
2551 proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_Cap_per_mess_auth_status,
2552 tvb, (*poffset), 1, TRUE);
2553 proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_Cap_user_level_auth_status,
2554 tvb, (*poffset), 1, TRUE);
2555 /* [2:0] - Anonymous Login status */
2556 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,"Anonymous Login status");
2557 field_tree = proto_item_add_subtree(tf, ett_Get_Channel_Auth_Cap_anonymouslogin);
2559 proto_tree_add_item(field_tree, hf_Get_Channel_Auth_Cap_anonymouslogin_status_b2,
2560 tvb, (*poffset), 1, TRUE);
2561 proto_tree_add_item(field_tree, hf_Get_Channel_Auth_Cap_anonymouslogin_status_b1,
2562 tvb, (*poffset), 1, TRUE);
2563 proto_tree_add_item(field_tree, hf_Get_Channel_Auth_Cap_anonymouslogin_status_b0,
2564 tvb, (*poffset), 1, TRUE);
2566 /* For IPMI v2.0+: - Extended Capabilities */
2567 proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_Cap_ext_cap_b1,
2568 tvb, (*poffset), 1, TRUE);
2569 proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_Cap_ext_cap_b0,
2570 tvb, (*poffset), 1, TRUE);
2572 proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_OEM_ID,
2573 tvb, (*poffset), 3, TRUE);
2575 proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_OEM_AUX,
2576 tvb, (*poffset), 1, TRUE);
2580 proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_Cap_datafield_comp_info,
2581 tvb, (*poffset), 1, TRUE);
2582 proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_Cap_datafield_channel_number,
2583 tvb, (*poffset), 1, TRUE);
2585 /* Requested Maximum Privilege Level */
2586 proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_Cap_datafield_max_priv_lev,
2587 tvb, (*poffset), 1, TRUE);
2591 /* Storage NetFN (0x0a) */
2593 dissect_cmd_Get_FRU_Inventory_Area_Info(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
2594 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset)
2597 proto_tree *field_tree = NULL;
2598 proto_item *tf = NULL;
2599 guint8 Response_Data_Byte4;
2603 /* FRU Inventory area size in bytes */
2605 proto_tree_add_item(ipmi_tree, hf_GetFRUInventoryAreaInfo_datafield_FRUInventoryAreaSize,
2606 tvb, (*poffset), 2, TRUE);
2609 /* Response Data Byte4 */
2612 Response_Data_Byte4 = tvb_get_guint8(tvb, auth_offset + 19) ;
2614 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2615 "Device is accessed by bytes or words: %s0x%02x", " ", Response_Data_Byte4);
2617 field_tree = proto_item_add_subtree(tf, ett_cmd_GetFRUInventoryAreaInfo_data_ResponseDataByte4);
2619 proto_tree_add_item(field_tree, hf_GetFRUInventoryAreaInfo_datafield_ResponseDataByte4_Bit71,
2620 tvb, *poffset, 1, TRUE);
2621 proto_tree_add_item(field_tree, hf_GetFRUInventoryAreaInfo_datafield_ResponseDataByte4_Bit0,
2622 tvb, *poffset, 1, TRUE);
2631 proto_tree_add_item(ipmi_tree, hf_GetFRUInventoryAreaInfo_datafield_FRUDeviceID,
2632 tvb, (*poffset)++, 1, TRUE);
2640 dissect_cmd_Get_SEL_Info(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
2641 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset)
2644 proto_tree *field_tree = NULL;
2645 proto_item *tf = NULL;
2646 guint8 Operation_Support;
2652 proto_tree_add_item(ipmi_tree, hf_GetSELInfo_datafield_SELVersion,
2653 tvb, (*poffset)++, 1, TRUE);
2657 /* number of log entries in SEL */
2660 proto_tree_add_item(ipmi_tree, hf_GetSELInfo_datafield_Entries,
2661 tvb, *poffset, 2, TRUE);
2665 /* Free Space in bytes */
2668 proto_tree_add_item(ipmi_tree, hf_GetSELInfo_datafield_FreeSpace,
2669 tvb, *poffset, 2, TRUE);
2674 /* Most recent addition timestamp */
2677 proto_tree_add_item(ipmi_tree, hf_GetSELInfo_datafield_AdditionTimestamp,
2678 tvb, *poffset, 4, TRUE);
2683 /* Most recent addition timestamp */
2686 proto_tree_add_item(ipmi_tree, hf_GetSELInfo_datafield_EraseTimestamp,
2687 tvb, *poffset, 4, TRUE);
2692 /* Operation Support */
2695 Operation_Support = tvb_get_guint8(tvb, auth_offset + 30) ;
2697 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2698 "Operation Support: %s0x%02x", " ", Operation_Support);
2700 field_tree = proto_item_add_subtree(tf, ett_cmd_GetSELInfo_data_OperationSupport);
2702 proto_tree_add_item(field_tree, hf_GetSELInfo_datafield_OperationSupport_Bit7,
2703 tvb, *poffset, 1, TRUE);
2704 proto_tree_add_item(field_tree, hf_GetSELInfo_datafield_OperationSupport_Reserved,
2705 tvb, *poffset, 1, TRUE);
2706 proto_tree_add_item(field_tree, hf_GetSELInfo_datafield_OperationSupport_Bit3,
2707 tvb, *poffset, 1, TRUE);
2708 proto_tree_add_item(field_tree, hf_GetSELInfo_datafield_OperationSupport_Bit2,
2709 tvb, *poffset, 1, TRUE);
2710 proto_tree_add_item(field_tree, hf_GetSELInfo_datafield_OperationSupport_Bit1,
2711 tvb, *poffset, 1, TRUE);
2712 proto_tree_add_item(field_tree, hf_GetSELInfo_datafield_OperationSupport_Bit0,
2713 tvb, *poffset, 1, TRUE);
2724 dissect_cmd_Reserve_SEL(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
2725 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset _U_)
2730 /* Reservation ID */
2732 proto_tree_add_item(ipmi_tree, hf_ReserveSEL_datafield_ReservationID,
2733 tvb, *poffset, 2, TRUE);
2744 dissect_cmd_Get_SEL_Entry(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo, tvbuff_t *tvb,
2745 gint *poffset, guint8 len, guint8 response, guint8 auth_offset _U_)
2752 /* Next SEL Record ID */
2754 proto_tree_add_item(ipmi_tree, hf_GetSELEntry_datafield_NextSELRecordID,
2755 tvb, (*poffset), 2, TRUE);
2761 next_tvb = tvb_new_subset(tvb, *poffset, len, len);
2762 call_dissector(data_handle, next_tvb, pinfo, tree);
2769 /* Reservation ID */
2771 proto_tree_add_item(ipmi_tree, hf_GetSELEntry_datafield_ReservationID,
2772 tvb, *poffset, 2, TRUE);
2777 proto_tree_add_item(ipmi_tree, hf_GetSELEntry_datafield_SELRecordID,
2778 tvb, *poffset, 2, TRUE);
2781 /* Offset into record */
2783 proto_tree_add_item(ipmi_tree, hf_GetSELEntry_datafield_OffsetIntoRecord,
2784 tvb, (*poffset)++, 1, TRUE);
2788 proto_tree_add_item(ipmi_tree, hf_GetSELEntry_datafield_BytesToRead,
2789 tvb, (*poffset)++, 1, TRUE);
2797 dissect_cmd_Clear_SEL(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
2798 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset)
2801 proto_tree *field_tree = NULL;
2802 proto_item *tf = NULL;
2803 guint8 erasure_progress;
2807 /* Erasure progress */
2810 erasure_progress = tvb_get_guint8(tvb, auth_offset + 17) ;
2812 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2813 "Erasure progress: %s0x%02x", " ", erasure_progress);
2815 field_tree = proto_item_add_subtree(tf, ett_cmd_ClearSEL_data_ErasureProgress);
2817 proto_tree_add_item(field_tree, hf_ClearSEL_datafield_ErasureProgress_Reserved,
2818 tvb, *poffset, 1, TRUE);
2819 proto_tree_add_item(field_tree, hf_ClearSEL_datafield_ErasureProgress_EraProg,
2820 tvb, *poffset, 1, TRUE);
2827 /* Reservation ID */
2829 proto_tree_add_item(ipmi_tree, hf_ClearSEL_datafield_ReservationID,
2830 tvb, *poffset, 2, TRUE);
2835 proto_tree_add_item(ipmi_tree, hf_ClearSEL_datafield_Byte3,
2836 tvb, (*poffset)++, 1, TRUE);
2840 proto_tree_add_item(ipmi_tree, hf_ClearSEL_datafield_Byte4,
2841 tvb, (*poffset)++, 1, TRUE);
2845 proto_tree_add_item(ipmi_tree, hf_ClearSEL_datafield_Byte5,
2846 tvb, (*poffset)++, 1, TRUE);
2850 proto_tree_add_item(ipmi_tree, hf_ClearSEL_datafield_Byte6,
2851 tvb, (*poffset)++, 1, TRUE);
2858 /* Picmg NetFN (0x2c) */
2861 dissect_cmd_Get_PICMG_Properties(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
2862 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset _U_)
2864 /*proto_tree *field_tree = NULL;
2865 proto_item *tf = NULL;
2866 guint8 picmg_identifier, PICMGExtensionVersion, MaxFRUDeviceID, FRUDeviceIDforIPMController;*/
2870 /* PICMG Identifier */
2872 proto_tree_add_item(ipmi_tree, hf_GetPICMGProperties_datafield_PICMGIdentifier,
2873 tvb, (*poffset)++, 1, TRUE);
2875 /* PICMG Extension Version */
2877 proto_tree_add_item(ipmi_tree, hf_GetPICMGProperties_datafield_PICMGExtensionVersion,
2878 tvb, (*poffset)++, 1, TRUE);
2880 /*Max FRU Device ID*/
2882 proto_tree_add_item(ipmi_tree, hf_GetPICMGProperties_datafield_MaxFRUDeviceID,
2883 tvb, (*poffset)++, 1, TRUE);
2885 /*FRU Device ID for IPM Controller*/
2887 proto_tree_add_item(ipmi_tree, hf_GetPICMGProperties_datafield_FRUDeviceIDforIPMController,
2888 tvb, (*poffset)++, 1, TRUE);
2892 /* PICMG Identifier */
2894 proto_tree_add_item(ipmi_tree, hf_GetPICMGProperties_datafield_PICMGIdentifier,
2895 tvb, (*poffset)++, 1, TRUE);
2903 dissect_cmd_FRU_Control(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
2904 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset _U_)
2909 /* PICMG Identifier */
2911 proto_tree_add_item(ipmi_tree, hf_FRUControl_datafield_PICMGIdentifier,
2912 tvb, (*poffset)++, 1, TRUE);
2918 /* PICMG Identifier */
2920 proto_tree_add_item(ipmi_tree, hf_FRUControl_datafield_PICMGIdentifier,
2921 tvb, (*poffset)++, 1, TRUE);
2925 proto_tree_add_item(ipmi_tree, hf_FRUControl_datafield_FRUDeviceID,
2926 tvb, (*poffset)++, 1, TRUE);
2928 /* FRU Control Option*/
2930 proto_tree_add_item(ipmi_tree, hf_FRUControl_datafield_FRUControlOption,
2931 tvb, (*poffset)++, 1, TRUE);
2939 dissect_cmd_Get_FRU_Led_Properties(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
2940 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset)
2942 proto_tree *field_tree = NULL;
2943 proto_item *tf = NULL;
2944 guint8 LedProperties;
2948 /* PICMG Identifier */
2950 proto_tree_add_item(ipmi_tree, hf_GetFRULedProperties_datafield_PICMGIdentifier,
2951 tvb, (*poffset)++, 1, TRUE);
2953 /* General Status LED Properties */
2956 LedProperties = tvb_get_guint8(tvb, auth_offset + 18) ;
2958 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2959 "General Status LED Properties: %s0x%02x", " ", LedProperties);
2961 field_tree = proto_item_add_subtree(tf, ett_cmd_GetFRULedProperties_data_LedProperties);
2963 proto_tree_add_item(field_tree, hf_GetFRULedProperties_datafield_LedProperties_Reserved,
2964 tvb, *poffset, 1, TRUE);
2965 proto_tree_add_item(field_tree, hf_GetFRULedProperties_datafield_LedProperties_LED3,
2966 tvb, *poffset, 1, TRUE);
2967 proto_tree_add_item(field_tree, hf_GetFRULedProperties_datafield_LedProperties_LED2,
2968 tvb, *poffset, 1, TRUE);
2969 proto_tree_add_item(field_tree, hf_GetFRULedProperties_datafield_LedProperties_LED1,
2970 tvb, *poffset, 1, TRUE);
2971 proto_tree_add_item(field_tree, hf_GetFRULedProperties_datafield_LedProperties_BlueLED,
2972 tvb, *poffset, 1, TRUE);
2976 /* Application Specific LED Count */
2978 proto_tree_add_item(ipmi_tree, hf_GetFRULedProperties_datafield_ApplicationSpecificLEDCount,
2979 tvb, (*poffset)++, 1, TRUE);
2985 /* PICMG Identifier */
2987 proto_tree_add_item(ipmi_tree, hf_GetFRULedProperties_datafield_PICMGIdentifier,
2988 tvb, (*poffset)++, 1, TRUE);
2992 proto_tree_add_item(ipmi_tree, hf_GetFRULedProperties_datafield_FRUDeviceID,
2993 tvb, (*poffset)++, 1, TRUE);
3001 dissect_cmd_Get_Led_Color_Capabilities(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
3002 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset)
3005 proto_tree *field_tree = NULL;
3006 proto_item *tf = NULL;
3007 guint8 LEDColorCapabilities, DefaultLEDColorLocalControl, DefaultLEDColorOverride;
3011 /* PICMG Identifier */
3013 proto_tree_add_item(ipmi_tree, hf_GetLedColorCapabilities_datafield_PICMGIdentifier,
3014 tvb, (*poffset)++, 1, TRUE);
3016 /* LED Color Capabilities */
3019 LEDColorCapabilities = tvb_get_guint8(tvb, auth_offset + 18) ;
3021 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3022 "LED Color Capabilities: %s0x%02x", " ", LEDColorCapabilities);
3024 field_tree = proto_item_add_subtree(tf, ett_cmd_GetLedColorCapabilities_data_LEDColorCapabilities);
3026 proto_tree_add_item(field_tree, hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_Reserved_7,
3027 tvb, *poffset, 1, TRUE);
3028 proto_tree_add_item(field_tree, hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_WHITE,
3029 tvb, *poffset, 1, TRUE);
3030 proto_tree_add_item(field_tree, hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_ORANGE,
3031 tvb, *poffset, 1, TRUE);
3032 proto_tree_add_item(field_tree, hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_AMBER,
3033 tvb, *poffset, 1, TRUE);
3034 proto_tree_add_item(field_tree, hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_GREEN,
3035 tvb, *poffset, 1, TRUE);
3036 proto_tree_add_item(field_tree, hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_RED,
3037 tvb, *poffset, 1, TRUE);
3038 proto_tree_add_item(field_tree, hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_BLUE,
3039 tvb, *poffset, 1, TRUE);
3040 proto_tree_add_item(field_tree, hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_Reserved_0,
3041 tvb, *poffset, 1, TRUE);
3045 /* Default LED Color in Local Control State*/
3048 DefaultLEDColorLocalControl = tvb_get_guint8(tvb, auth_offset + 19) ;
3050 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3051 "Default LED Color in Local Control State: %s0x%02x", " ", DefaultLEDColorLocalControl);
3053 field_tree = proto_item_add_subtree(tf, ett_cmd_GetLedColorCapabilities_data_DefaultLEDColorLocalControl);
3055 proto_tree_add_item(field_tree, hf_GetLedColorCapabilities_datafield_DefaultLEDColorLocalControl_Reserved_74,
3056 tvb, *poffset, 1, TRUE);
3057 proto_tree_add_item(field_tree, hf_GetLedColorCapabilities_datafield_DefaultLEDColorLocalControl_Color,
3058 tvb, *poffset, 1, TRUE);
3061 /* Default LED Color in Override State */
3064 DefaultLEDColorOverride = tvb_get_guint8(tvb, auth_offset + 20) ;
3066 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3067 "Default LED Color in Override State: %s0x%02x", " ", DefaultLEDColorOverride);
3069 field_tree = proto_item_add_subtree(tf, ett_cmd_GetLedColorCapabilities_data_DefaultLEDColorOverride);
3071 proto_tree_add_item(field_tree, hf_GetLedColorCapabilities_datafield_DefaultLEDColorOverride_Reserved_74,
3072 tvb, *poffset, 1, TRUE);
3073 proto_tree_add_item(field_tree, hf_GetLedColorCapabilities_datafield_DefaultLEDColorOverride_Color,
3074 tvb, *poffset, 1, TRUE);
3081 /* PICMG Identifier */
3083 proto_tree_add_item(ipmi_tree, hf_GetLedColorCapabilities_datafield_PICMGIdentifier,
3084 tvb, (*poffset)++, 1, TRUE);
3088 proto_tree_add_item(ipmi_tree, hf_GetLedColorCapabilities_datafield_FRUDeviceID,
3089 tvb, (*poffset)++, 1, TRUE);
3093 proto_tree_add_item(ipmi_tree, hf_GetLedColorCapabilities_datafield_LEDID,
3094 tvb, (*poffset)++, 1, TRUE);
3103 dissect_cmd_Set_FRU_Led_State(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
3104 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset)
3106 proto_tree *field_tree = NULL;
3107 proto_item *tf = NULL;
3113 /* PICMG Identifier */
3115 proto_tree_add_item(ipmi_tree, hf_SetFRULedState_datafield_PICMGIdentifier,
3116 tvb, (*poffset)++, 1, TRUE);
3122 /* PICMG Identifier */
3124 proto_tree_add_item(ipmi_tree, hf_SetFRULedState_datafield_PICMGIdentifier,
3125 tvb, (*poffset)++, 1, TRUE);
3129 proto_tree_add_item(ipmi_tree, hf_SetFRULedState_datafield_FRUDeviceID,
3130 tvb, (*poffset)++, 1, TRUE);
3134 proto_tree_add_item(ipmi_tree, hf_SetFRULedState_datafield_LEDID,
3135 tvb, (*poffset)++, 1, TRUE);
3139 guint8 LEDFunction = tvb_get_guint8(tvb, *poffset);
3140 if ((LEDFunction < 0x01) || (LEDFunction > 0xfa)) {
3141 proto_tree_add_item(ipmi_tree, hf_SetFRULedState_datafield_LEDFunction,
3142 tvb, (*poffset)++, 1, TRUE);
3144 proto_tree_add_uint_format(ipmi_tree, hf_SetFRULedState_datafield_Offduration,
3145 tvb, (*poffset)++, 1, LEDFunction,
3146 "Off-duration: %u ms (0x%02x)", LEDFunction * 10, LEDFunction);
3151 guint8 duration = tvb_get_guint8(tvb, *poffset);
3152 proto_tree_add_uint_format(ipmi_tree, hf_SetFRULedState_datafield_Onduration,
3153 tvb, (*poffset)++, 1, duration,
3154 "On-duration: %u ms (0x%02x)", duration * 10, duration);
3156 /* Color when illuminated */
3159 Color = tvb_get_guint8(tvb, auth_offset + 21) ;
3161 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3162 "Color when illuminated: %s0x%02x", " ", Color);
3164 field_tree = proto_item_add_subtree(tf, ett_cmd_SetFRULedState_data_Color);
3166 proto_tree_add_item(field_tree, hf_SetFRULedState_datafield_Color_Reserved,
3167 tvb, *poffset, 1, TRUE);
3168 proto_tree_add_item(field_tree, hf_SetFRULedState_datafield_Color_ColorVal,
3169 tvb, *poffset, 1, TRUE);
3179 dissect_cmd_Get_FRU_Led_State(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
3180 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset)
3182 proto_tree *field_tree = NULL;
3183 proto_item *tf = NULL;
3184 guint8 led_state, Color;
3189 /* PICMG Identifier */
3191 proto_tree_add_item(ipmi_tree, hf_GetFRULedState_datafield_PICMGIdentifier,
3192 tvb, (*poffset)++, 1, TRUE);
3197 led_state = tvb_get_guint8(tvb, auth_offset + 18) ;
3199 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3200 "LED State: %s0x%02x", " ", led_state);
3202 field_tree = proto_item_add_subtree(tf, ett_cmd_GetFRULedState_data_LEDState);
3204 proto_tree_add_item(field_tree, hf_GetFRULedState_datafield_LEDState_Reserved,
3205 tvb, *poffset, 1, TRUE);
3206 proto_tree_add_item(field_tree, hf_GetFRULedState_datafield_LEDState_Bit2,
3207 tvb, *poffset, 1, TRUE);
3208 proto_tree_add_item(field_tree, hf_GetFRULedState_datafield_LEDState_Bit1,
3209 tvb, *poffset, 1, TRUE);
3210 proto_tree_add_item(field_tree, hf_GetFRULedState_datafield_LEDState_Bit0,
3211 tvb, *poffset, 1, TRUE);
3214 /* Local Control LED Function */
3216 guint8 LEDFunction = tvb_get_guint8(tvb, *poffset);
3217 if ((LEDFunction < 0x01) || (LEDFunction > 0xfa)) {
3218 proto_tree_add_item(ipmi_tree, hf_GetFRULedState_datafield_LocalControlLEDFunction,
3219 tvb, (*poffset)++, 1, TRUE);
3221 proto_tree_add_uint_format(ipmi_tree, hf_GetFRULedState_datafield_LocalControlOffduration,
3222 tvb, (*poffset)++, 1, LEDFunction,
3223 "Local Control Off-duration: %u ms (0x%02x)", LEDFunction * 10, LEDFunction);
3226 /* Local Control On-duration */
3228 guint8 duration = tvb_get_guint8(tvb, *poffset);
3229 proto_tree_add_uint_format(ipmi_tree, hf_GetFRULedState_datafield_LocalControlOnduration,
3230 tvb, (*poffset)++, 1, duration,
3231 "Local Control On-duration: %u ms (0x%02x)", duration * 10, duration);
3233 /* Local Control Color */
3236 Color = tvb_get_guint8(tvb, auth_offset + 21) ;
3238 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3239 "Local Control Color: %s0x%02x", " ", Color);
3241 field_tree = proto_item_add_subtree(tf, ett_cmd_GetFRULedState_data_LocalControlColor);
3243 proto_tree_add_item(field_tree, hf_GetFRULedState_datafield_LocalControlColor_Reserved,
3244 tvb, *poffset, 1, TRUE);
3245 proto_tree_add_item(field_tree, hf_GetFRULedState_datafield_LocalControlColor_ColorVal,
3246 tvb, *poffset, 1, TRUE);
3250 /* Override State LED Function */
3252 guint8 LEDFunction = tvb_get_guint8(tvb, *poffset);
3253 if ((LEDFunction < 0x01) || (LEDFunction > 0xfa)) {
3254 proto_tree_add_item(ipmi_tree, hf_GetFRULedState_datafield_OverrideStateLEDFunction,
3255 tvb, (*poffset)++, 1, TRUE);
3257 proto_tree_add_uint_format(ipmi_tree, hf_GetFRULedState_datafield_OverrideStateOffduration,
3258 tvb, (*poffset)++, 1, LEDFunction,
3259 "Override State Off-duration: %u ms (0x%02x)", LEDFunction * 10, LEDFunction);
3262 /* Override State On-duration */
3264 guint8 duration = tvb_get_guint8(tvb, *poffset);
3265 proto_tree_add_uint_format(ipmi_tree, hf_GetFRULedState_datafield_OverrideStateOnduration,
3266 tvb, (*poffset)++, 1, duration,
3267 "Override State On-duration: %u ms (0x%02x)", duration * 10, duration);
3269 /* Override State Color */
3272 Color = tvb_get_guint8(tvb, auth_offset + 24) ;
3274 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3275 "Override State Color: %s0x%02x", " ", Color);
3277 field_tree = proto_item_add_subtree(tf, ett_cmd_GetFRULedState_data_OverrideStateColor);
3279 proto_tree_add_item(field_tree, hf_GetFRULedState_datafield_OverrideStateColor_Reserved,
3280 tvb, *poffset, 1, TRUE);
3281 proto_tree_add_item(field_tree, hf_GetFRULedState_datafield_OverrideStateColor_ColorVal,
3282 tvb, *poffset, 1, TRUE);
3285 /* Lamp Test Duration */
3287 proto_tree_add_item(ipmi_tree, hf_GetFRULedState_datafield_LampTestDuration,
3288 tvb, (*poffset)++, 1, TRUE);
3294 /* PICMG Identifier */
3296 proto_tree_add_item(ipmi_tree, hf_GetFRULedState_datafield_PICMGIdentifier,
3297 tvb, (*poffset)++, 1, TRUE);
3301 proto_tree_add_item(ipmi_tree, hf_GetFRULedState_datafield_FRUDeviceID,
3302 tvb, (*poffset)++, 1, TRUE);
3306 proto_tree_add_item(ipmi_tree, hf_GetFRULedState_datafield_LEDID,
3307 tvb, (*poffset)++, 1, TRUE);
3315 dissect_cmd_Set_FRU_Activation_Policy(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
3316 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset)
3318 proto_tree *field_tree = NULL;
3319 proto_item *tf = NULL;
3320 guint8 FRUActivationPolicyMaskBit, MaskBit1, MaskBit0, FRUActivationPolicySetBit;
3324 /* PICMG Identifier */
3326 proto_tree_add_item(ipmi_tree, hf_SetFRUActivationPolicy_datafield_PICMGIdentifier,
3327 tvb, (*poffset)++, 1, TRUE);
3333 /* PICMG Identifier */
3335 proto_tree_add_item(ipmi_tree, hf_SetFRUActivationPolicy_datafield_PICMGIdentifier,
3336 tvb, (*poffset)++, 1, TRUE);
3340 proto_tree_add_item(ipmi_tree, hf_SetFRUActivationPolicy_datafield_FRUDeviceID,
3341 tvb, (*poffset)++, 1, TRUE);
3343 /* FRU Activation Policy Mask Bit */
3344 FRUActivationPolicyMaskBit = tvb_get_guint8(tvb, auth_offset + 18) ;
3346 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3347 "FRU Activation Policy Mask Bit : %s0x%02x", " ", FRUActivationPolicyMaskBit);
3349 field_tree = proto_item_add_subtree(tf, ett_cmd_SetFRUActivationPolicy_data_FRUActivationPolicyMaskBit);
3351 proto_tree_add_item(field_tree, hf_SetFRUActivationPolicy_datafield_FRUActivationPolicyMaskBit_Bit72,
3352 tvb, *poffset, 1, TRUE);
3353 proto_tree_add_item(field_tree, hf_SetFRUActivationPolicy_datafield_FRUActivationPolicyMaskBit_Bit1,
3354 tvb, *poffset, 1, TRUE);
3355 proto_tree_add_item(field_tree, hf_SetFRUActivationPolicy_datafield_FRUActivationPolicyMaskBit_Bit0,
3356 tvb, *poffset, 1, TRUE);
3359 /* FRU Activation Policy Set Bit */
3360 MaskBit1 = FRUActivationPolicyMaskBit & 0x02;
3361 MaskBit0 = FRUActivationPolicyMaskBit & 0x01;
3363 if(MaskBit1&&MaskBit0) {
3366 FRUActivationPolicySetBit = tvb_get_guint8(tvb, auth_offset + 19) ;
3367 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3368 "FRU Activation Policy Set Bit : %s0x%02x", " ", FRUActivationPolicySetBit);
3370 field_tree = proto_item_add_subtree(tf, ett_cmd_SetFRUActivationPolicy_data_FRUActivationPolicySetBit);
3372 proto_tree_add_item(field_tree, hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit72,
3373 tvb, *poffset, 1, TRUE);
3374 proto_tree_add_item(field_tree, hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit1,
3375 tvb, *poffset, 1, TRUE);
3376 proto_tree_add_item(field_tree, hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit0,
3377 tvb, *poffset, 1, TRUE);
3385 FRUActivationPolicySetBit = tvb_get_guint8(tvb, auth_offset + 19) ;
3386 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3387 "FRU Activation Policy Set Bit : %s0x%02x", " ", FRUActivationPolicySetBit);
3389 field_tree = proto_item_add_subtree(tf, ett_cmd_SetFRUActivationPolicy_data_FRUActivationPolicySetBit);
3391 proto_tree_add_item(field_tree, hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit72,
3392 tvb, *poffset, 1, TRUE);
3393 proto_tree_add_item(field_tree, hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit1,
3394 tvb, *poffset, 1, TRUE);
3395 proto_tree_add_item(field_tree, hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit0_ignored,
3396 tvb, *poffset, 1, TRUE);
3404 FRUActivationPolicySetBit = tvb_get_guint8(tvb, auth_offset + 19) ;
3405 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3406 "FRU Activation Policy Set Bit : %s0x%02x", " ", FRUActivationPolicySetBit);
3408 field_tree = proto_item_add_subtree(tf, ett_cmd_SetFRUActivationPolicy_data_FRUActivationPolicySetBit);
3410 proto_tree_add_item(field_tree, hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit72,
3411 tvb, *poffset, 1, TRUE);
3412 proto_tree_add_item(field_tree, hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit1_ignored,
3413 tvb, *poffset, 1, TRUE);
3414 proto_tree_add_item(field_tree, hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit0,
3415 tvb, *poffset, 1, TRUE);
3422 FRUActivationPolicySetBit = tvb_get_guint8(tvb, auth_offset + 19) ;
3423 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3424 "FRU Activation Policy Set Bit : %s0x%02x", " ", FRUActivationPolicySetBit);
3426 field_tree = proto_item_add_subtree(tf, ett_cmd_SetFRUActivationPolicy_data_FRUActivationPolicySetBit);
3428 proto_tree_add_item(field_tree, hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit72,
3429 tvb, *poffset, 1, TRUE);
3430 proto_tree_add_item(field_tree, hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit1_ignored,
3431 tvb, *poffset, 1, TRUE);
3432 proto_tree_add_item(field_tree, hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit0_ignored,
3433 tvb, *poffset, 1, TRUE);
3445 dissect_cmd_Get_FRU_Activation_Policy(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
3446 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset)
3449 proto_tree *field_tree = NULL;
3450 proto_item *tf = NULL;
3451 guint8 FRUActivationPolicy;
3455 /* PICMG Identifier */
3457 proto_tree_add_item(ipmi_tree, hf_GetFRUActivationPolicy_datafield_PICMGIdentifier,
3458 tvb, (*poffset)++, 1, TRUE);
3460 /* FRU Activation Policy Mask Bit */
3462 FRUActivationPolicy = tvb_get_guint8(tvb, auth_offset + 18) ;
3463 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3464 "FRU Activation Policy : %s0x%02x", " ", FRUActivationPolicy);
3466 field_tree = proto_item_add_subtree(tf, ett_cmd_GetFRUActivationPolicy_data_FRUActivationPolicy);
3468 proto_tree_add_item(field_tree, hf_GetFRUActivationPolicy_datafield_FRUActivationPolicy_Bit72,
3469 tvb, *poffset, 1, TRUE);
3470 proto_tree_add_item(field_tree, hf_GetFRUActivationPolicy_datafield_FRUActivationPolicy_Bit1,
3471 tvb, *poffset, 1, TRUE);
3472 proto_tree_add_item(field_tree, hf_GetFRUActivationPolicy_datafield_FRUActivationPolicy_Bit0,
3473 tvb, *poffset, 1, TRUE);
3480 /* PICMG Identifier */
3482 proto_tree_add_item(ipmi_tree, hf_GetFRUActivationPolicy_datafield_PICMGIdentifier,
3483 tvb, (*poffset)++, 1, TRUE);
3487 proto_tree_add_item(ipmi_tree, hf_GetFRUActivationPolicy_datafield_FRUDeviceID,
3488 tvb, (*poffset)++, 1, TRUE);
3497 dissect_cmd_Set_FRU_Activation(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
3498 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset _U_)
3503 /* PICMG Identifier */
3505 proto_tree_add_item(ipmi_tree, hf_SetFRUActivation_datafield_PICMGIdentifier,
3506 tvb, (*poffset)++, 1, TRUE);
3512 /* PICMG Identifier */
3514 proto_tree_add_item(ipmi_tree, hf_SetFRUActivation_datafield_PICMGIdentifier,
3515 tvb, (*poffset)++, 1, TRUE);
3519 proto_tree_add_item(ipmi_tree, hf_SetFRUActivation_datafield_FRUDeviceID,
3520 tvb, (*poffset)++, 1, TRUE);
3522 /*FRU Activation/Deactivation*/
3524 proto_tree_add_item(ipmi_tree, hf_SetFRUActivation_datafield_FRUActivationDeactivation,
3525 tvb, (*poffset)++, 1, TRUE);
3533 dissect_cmd_Get_Device_Locator_Record_ID(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
3534 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset _U_)
3539 /* PICMG Identifier */
3541 proto_tree_add_item(ipmi_tree, hf_GetDeviceLocatorRecordID_datafield_PICMGIdentifier,
3542 tvb, (*poffset)++, 1, TRUE);
3546 proto_tree_add_item(ipmi_tree, hf_GetDeviceLocatorRecordID_datafield_RecordID,
3547 tvb, *poffset, 2, TRUE);
3554 /* PICMG Identifier */
3556 proto_tree_add_item(ipmi_tree, hf_GetDeviceLocatorRecordID_datafield_PICMGIdentifier,
3557 tvb, (*poffset)++, 1, TRUE);
3561 proto_tree_add_item(ipmi_tree, hf_GetDeviceLocatorRecordID_datafield_FRUDeviceID,
3562 tvb, (*poffset)++, 1, TRUE);
3570 dissect_cmd_Set_Power_Level(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
3571 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset _U_)
3575 /* PICMG Identifier */
3577 proto_tree_add_item(ipmi_tree, hf_SetPowerLevel_datafield_PICMGIdentifier,
3578 tvb, (*poffset)++, 1, TRUE);
3584 /* PICMG Identifier */
3586 proto_tree_add_item(ipmi_tree, hf_SetPowerLevel_datafield_PICMGIdentifier,
3587 tvb, (*poffset)++, 1, TRUE);
3591 proto_tree_add_item(ipmi_tree, hf_SetPowerLevel_datafield_FRUDeviceID,
3592 tvb, (*poffset)++, 1, TRUE);
3596 proto_tree_add_item(ipmi_tree, hf_SetPowerLevel_datafield_PowerLevel,
3597 tvb, (*poffset)++, 1, TRUE);
3599 /* Set Present Levels to Desired Levels */
3601 proto_tree_add_item(ipmi_tree, hf_SetPowerLevel_datafield_SetPresentLevelsToDesiredLevels,
3602 tvb, (*poffset)++, 1, TRUE);
3610 dissect_cmd_Get_Power_Level(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
3611 gint *poffset, guint8 len, guint8 response, guint8 auth_offset)
3613 proto_tree *field_tree = NULL;
3614 proto_item *tf = NULL;
3615 guint8 Properties, j;
3620 Properties = tvb_get_guint8(tvb, auth_offset + 18) ;
3622 /* PICMG Identifier */
3624 proto_tree_add_item(ipmi_tree, hf_GetPowerLevel_datafield_PICMGIdentifier,
3625 tvb, (*poffset)++, 1, TRUE);
3630 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3631 "Properties: %s0x%02x", " ", Properties);
3633 field_tree = proto_item_add_subtree(tf, ett_cmd_GetPowerLevel_data_Properties);
3635 proto_tree_add_item(field_tree, hf_GetPowerLevel_datafield_Properties_DynamicPowerCon,
3636 tvb, *poffset, 1, TRUE);
3637 proto_tree_add_item(field_tree, hf_GetPowerLevel_datafield_Properties_Reserved,
3638 tvb, *poffset, 1, TRUE);
3639 proto_tree_add_item(field_tree, hf_GetPowerLevel_datafield_Properties_PowerLevel,
3640 tvb, *poffset, 1, TRUE);
3644 /*Delay To Stable Power*/
3646 proto_tree_add_item(ipmi_tree, hf_GetPowerLevel_datafield_DelayToStablePower,
3647 tvb, (*poffset)++, 1, TRUE);
3649 /*Power Multiplier*/
3651 proto_tree_add_item(ipmi_tree, hf_GetPowerLevel_datafield_PowerMultiplier,
3652 tvb, (*poffset)++, 1, TRUE);
3655 for(j=0; j<len-4; j++) {
3658 proto_tree_add_item(ipmi_tree, hf_GetPowerLevel_datafield_PowerDraw,
3659 tvb, (*poffset)++, 1, TRUE);
3666 /* PICMG Identifier */
3668 proto_tree_add_item(ipmi_tree, hf_GetPowerLevel_datafield_PICMGIdentifier,
3669 tvb, (*poffset)++, 1, TRUE);
3673 proto_tree_add_item(ipmi_tree, hf_GetPowerLevel_datafield_FRUDeviceID,
3674 tvb, (*poffset)++, 1, TRUE);
3678 proto_tree_add_item(ipmi_tree, hf_GetPowerLevel_datafield_PowerType,
3679 tvb, (*poffset)++, 1, TRUE);
3687 dissect_cmd_Set_Fan_Level(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
3688 gint *poffset, guint8 len _U_, guint8 response, guint8 auth_offset _U_)
3692 /* PICMG Identifier */
3694 proto_tree_add_item(ipmi_tree, hf_SetFanLevel_datafield_PICMGIdentifier,
3695 tvb, (*poffset)++, 1, TRUE);
3701 /* PICMG Identifier */
3703 proto_tree_add_item(ipmi_tree, hf_SetFanLevel_datafield_PICMGIdentifier,
3704 tvb, (*poffset)++, 1, TRUE);
3708 proto_tree_add_item(ipmi_tree, hf_SetFanLevel_datafield_FRUDeviceID,
3709 tvb, (*poffset)++, 1, TRUE);
3713 proto_tree_add_item(ipmi_tree, hf_SetFanLevel_datafield_FanLevel,
3714 tvb, (*poffset)++, 1, TRUE);
3722 dissect_cmd_Get_Fan_Level(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo _U_, tvbuff_t *tvb,
3723 gint *poffset, guint8 len, guint8 response, guint8 auth_offset _U_)
3728 /* PICMG Identifier */
3730 proto_tree_add_item(ipmi_tree, hf_GetFanLevel_datafield_PICMGIdentifier,
3731 tvb, (*poffset)++, 1, TRUE);
3734 /* Override Fan Level */
3736 proto_tree_add_item(ipmi_tree, hf_GetFanLevel_datafield_OverrideFanLevel,
3737 tvb, (*poffset)++, 1, TRUE);
3740 /* Local Control Fan Level */
3742 proto_tree_add_item(ipmi_tree, hf_GetFanLevel_datafield_LocalControlFanLevel,
3743 tvb, (*poffset)++, 1, TRUE);
3750 /* PICMG Identifier */
3752 proto_tree_add_item(ipmi_tree, hf_GetFanLevel_datafield_PICMGIdentifier,
3753 tvb, (*poffset)++, 1, TRUE);
3757 proto_tree_add_item(ipmi_tree, hf_GetFanLevel_datafield_FRUDeviceID,
3758 tvb, (*poffset)++, 1, TRUE);
3767 /******************************************lane**********************************************/
3769 static void dissect_ipmi_data(proto_tree *, proto_tree *, packet_info *, tvbuff_t *, gint *,
3770 guint8, guint8, guint8, guint8,guint8);
3773 static const ipmi_cmd_dissect ipmi_cmd_array[] = {
3775 /* Chassis netfn (0x00) */
3776 { 0x00, 0x00, NULL},
3777 { 0x00, 0x01, NULL},
3778 { 0x00, 0x02, NULL},
3779 { 0x00, 0x03, NULL},
3780 { 0x00, 0x04, NULL},
3781 { 0x00, 0x05, NULL},
3782 { 0x00, 0x06, NULL},
3783 { 0x00, 0x07, NULL},
3784 { 0x00, 0x08, NULL},
3785 { 0x00, 0x09, NULL},
3786 { 0x00, 0x0f, NULL},
3787 /* Bridge netfn (0x02) */
3788 { 0x02, 0x00, NULL},
3789 { 0x02, 0x01, NULL},
3790 { 0x02, 0x02, NULL},
3791 { 0x02, 0x03, NULL},
3792 { 0x02, 0x04, NULL},
3793 { 0x02, 0x05, NULL},
3794 { 0x02, 0x06, NULL},
3795 { 0x02, 0x07, NULL},
3796 { 0x02, 0x08, NULL},
3797 { 0x02, 0x09, NULL},
3798 { 0x02, 0x0a, NULL},
3799 { 0x02, 0x0b, NULL},
3800 { 0x02, 0x0c, NULL},
3801 { 0x02, 0x10, NULL},
3802 { 0x02, 0x11, NULL},
3803 { 0x02, 0x12, NULL},
3804 { 0x02, 0x13, NULL},
3805 { 0x02, 0x14, NULL},
3806 { 0x02, 0x20, NULL},
3807 { 0x02, 0x21, NULL},
3808 { 0x02, 0x30, NULL},
3809 { 0x02, 0x31, NULL},
3810 { 0x02, 0x32, NULL},
3811 { 0x02, 0x33, NULL},
3812 { 0x02, 0x34, NULL},
3813 { 0x02, 0x35, NULL},
3814 { 0x02, 0xff, NULL},
3815 /* Sensor/Event netfn (0x04) */
3816 { 0x04, 0x00, NULL},
3817 { 0x04, 0x01, NULL},
3818 { 0x04, 0x02, dissect_cmd_PlatformEventMessage},
3819 { 0x04, 0x10, NULL},
3820 { 0x04, 0x11, NULL},
3821 { 0x04, 0x12, NULL},
3822 { 0x04, 0x13, NULL},
3823 { 0x04, 0x14, NULL},
3824 { 0x04, 0x15, NULL},
3825 { 0x04, 0x16, NULL},
3826 { 0x04, 0x17, NULL},
3827 { 0x04, 0x20, dissect_cmd_Get_Device_SDR_Info},
3828 { 0x04, 0x21, dissect_cmd_GetDeviceSDR},
3829 { 0x04, 0x22, dissect_cmd_Reserve_Device_SDR_Repository},
3830 { 0x04, 0x23, NULL},
3831 { 0x04, 0x24, dissect_cmd_Set_Sensor_Hysteresis},
3832 { 0x04, 0x25, dissect_cmd_Get_Sensor_Hysteresis},
3833 { 0x04, 0x26, dissect_cmd_Set_Sensor_Thresholds},
3834 { 0x04, 0x27, dissect_cmd_Get_Sensor_Thresholds},
3835 { 0x04, 0x28, NULL},
3836 { 0x04, 0x29, NULL},
3837 { 0x04, 0x2a, NULL},
3838 { 0x04, 0x2b, NULL},
3839 { 0x04, 0x2d, dissect_cmd_Get_Sensor_Reading},
3840 { 0x04, 0x2e, NULL},
3841 { 0x04, 0x2f, NULL},
3842 /* App netfn (0x06) */
3843 { 0x06, 0x01, dissect_cmd_Get_Device_ID},
3844 /* { 0x06, 0x01, NULL}, */
3845 { 0x06, 0x02, NULL},
3846 { 0x06, 0x03, NULL},
3847 { 0x06, 0x04, NULL},
3848 { 0x06, 0x05, NULL},
3849 { 0x06, 0x06, NULL},
3850 { 0x06, 0x07, NULL},
3851 { 0x06, 0x08, NULL},
3852 { 0x06, 0x22, NULL},
3853 { 0x06, 0x24, NULL},
3854 { 0x06, 0x25, NULL},
3855 { 0x06, 0x2e, NULL},
3856 { 0x06, 0x2f, NULL},
3857 { 0x06, 0x30, NULL},
3858 { 0x06, 0x31, NULL},
3859 { 0x06, 0x32, NULL},
3860 { 0x06, 0x33, NULL},
3861 { 0x06, 0x34, NULL},
3862 { 0x06, 0x35, NULL},
3863 { 0x06, 0x36, NULL},
3864 { 0x06, 0x37, NULL},
3865 { 0x06, 0x38, dissect_cmd_Get_Channel_Auth_Capabilities},
3866 { 0x06, 0x39, NULL},
3867 { 0x06, 0x3a, NULL},
3868 { 0x06, 0x3b, NULL},
3869 { 0x06, 0x3c, NULL},
3870 { 0x06, 0x3d, NULL},
3871 { 0x06, 0x3f, NULL},
3872 { 0x06, 0x40, NULL},
3873 { 0x06, 0x41, NULL},
3874 { 0x06, 0x42, NULL},
3875 { 0x06, 0x43, NULL},
3876 { 0x06, 0x44, NULL},
3877 { 0x06, 0x45, NULL},
3878 { 0x06, 0x46, NULL},
3879 { 0x06, 0x47, NULL},
3880 { 0x06, 0x52, NULL},
3881 /*Storage netfn (0x0a) */
3882 { 0x0a, 0x10, dissect_cmd_Get_FRU_Inventory_Area_Info},
3883 { 0x0a, 0x11, NULL},
3884 { 0x0a, 0x12, NULL},
3885 { 0x0a, 0x20, NULL},
3886 { 0x0a, 0x21, NULL},
3887 { 0x0a, 0x22, NULL},
3888 { 0x0a, 0x23, NULL},
3889 { 0x0a, 0x24, NULL},
3890 { 0x0a, 0x25, NULL},
3891 { 0x0a, 0x26, NULL},
3892 { 0x0a, 0x27, NULL},
3893 { 0x0a, 0x28, NULL},
3894 { 0x0a, 0x29, NULL},
3895 { 0x0a, 0x2a, NULL},
3896 { 0x0a, 0x2b, NULL},
3897 { 0x0a, 0x2d, NULL},
3898 { 0x0a, 0x2c, NULL},
3899 { 0x0a, 0x40, dissect_cmd_Get_SEL_Info},
3900 { 0x0a, 0x41, NULL},
3901 { 0x0a, 0x42, dissect_cmd_Reserve_SEL},
3902 { 0x0a, 0x43, dissect_cmd_Get_SEL_Entry},
3903 { 0x0a, 0x44, NULL},
3904 { 0x0a, 0x45, NULL},
3905 { 0x0a, 0x46, NULL},
3906 { 0x0a, 0x47, dissect_cmd_Clear_SEL},
3907 { 0x0a, 0x48, NULL},
3908 { 0x0a, 0x49, NULL},
3909 { 0x0a, 0x5a, NULL},
3910 { 0x0a, 0x5b, NULL},
3911 /* PICMG netfn (0x2c) */
3912 {0x2c, 0x00, dissect_cmd_Get_PICMG_Properties},
3916 {0x2c, 0x04, dissect_cmd_FRU_Control},
3917 {0x2c, 0x05, dissect_cmd_Get_FRU_Led_Properties},
3918 {0x2c, 0x06, dissect_cmd_Get_Led_Color_Capabilities},
3919 {0x2c, 0x07, dissect_cmd_Set_FRU_Led_State},
3920 {0x2c, 0x08, dissect_cmd_Get_FRU_Led_State},
3922 {0x2c, 0x0a, dissect_cmd_Set_FRU_Activation_Policy},
3923 {0x2c, 0x0b, dissect_cmd_Get_FRU_Activation_Policy},
3924 {0x2c, 0x0c, dissect_cmd_Set_FRU_Activation},
3925 {0x2c, 0x0d, dissect_cmd_Get_Device_Locator_Record_ID},
3929 {0x2c, 0x11, dissect_cmd_Set_Power_Level},
3930 {0x2c, 0x12, dissect_cmd_Get_Power_Level},
3933 {0x2c, 0x15, dissect_cmd_Set_Fan_Level},
3934 {0x2c, 0x16, dissect_cmd_Get_Fan_Level},
3939 #define NUM_OF_CMD_ARRAY (sizeof(ipmi_cmd_array)/sizeof(ipmi_cmd_dissect))
3941 /***************************************************/
3944 get_netfn_cmd_text(guint8 netfn, guint8 cmd)
3949 return val_to_str(cmd, ipmi_chassis_cmd_vals, "Unknown (0x%02x)");
3952 return val_to_str(cmd, ipmi_bridge_cmd_vals, "Unknown (0x%02x)");
3955 return val_to_str(cmd, ipmi_se_cmd_vals, "Unknown (0x%02x)");
3958 return val_to_str(cmd, ipmi_app_cmd_vals, "Unknown (0x%02x)");
3961 return val_to_str(cmd, ipmi_storage_cmd_vals, "Unknown (0x%02x)");
3964 return val_to_str(cmd, ipmi_transport_cmd_vals, "Unknown (0x%02x)");
3965 case 0x2c: /* added by lane */
3967 return val_to_str(cmd, ipmi_picmg_cmd_vals, "Unknown (0x%02x)");
3969 return (netfn & 1) ? "Unknown Response" : "Unknown Request";
3974 dissect_ipmi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3976 proto_tree *ipmi_tree = NULL, *field_tree = NULL;
3977 proto_item *ti = NULL, *tf;
3979 gint auth_offset = 0;
3980 /* tvbuff_t *next_tvb; */ /* modified by lane */
3982 /*payloadtype for RMCPP*/
3983 guint8 authtype, payloadtype = 0, netfn, cmd, ccode, len, response;
3984 gboolean payloadtype_auth, payloadtype_enc = 0;
3986 /* session authtype, 0=no authcode present */
3987 authtype = tvb_get_guint8(tvb, 0);
3994 case IPMI_AUTH_RMCPP:
3996 * ipmi.session.authtype =6
3999 * ipmi.session.sequence
4001 * [OEM Payload ID] +?
4007 case IPMI_AUTH_NONE:
4016 2.0: IPMI v2.0 RMCP+ Session ID 4
4017 BOTH: Session Sequence Number 4
4018 1.5: IPMI v1.5 Session ID 4
4022 if (authtype == IPMI_AUTH_RMCPP) {
4023 /* -1 for 2 byte length field when RMCPP */
4024 session_id = tvb_get_letohl(tvb, auth_offset + 9 - 1);
4026 session_id = tvb_get_letohl(tvb, auth_offset + 5);
4029 /* network function code */
4030 netfn = tvb_get_guint8(tvb, auth_offset + 11) >> 2;
4032 /* bit 0 of netfn: even=request odd=response */
4033 response = netfn & 1;
4036 cmd = tvb_get_guint8(tvb, auth_offset + 15);
4038 /* completion code */
4039 ccode = response ? tvb_get_guint8(tvb, auth_offset + 16) : 0;
4041 if (check_col(pinfo->cinfo, COL_PROTOCOL)) {
4042 if (authtype == IPMI_AUTH_RMCPP) {
4043 col_set_str(pinfo->cinfo, COL_PROTOCOL, "RMCPP");
4045 col_set_str(pinfo->cinfo, COL_PROTOCOL, "IPMI");
4048 if (check_col(pinfo->cinfo, COL_INFO))
4049 col_clear(pinfo->cinfo, COL_INFO);
4050 if (authtype != IPMI_AUTH_RMCPP) {
4051 if (check_col(pinfo->cinfo, COL_INFO)) {
4053 col_add_fstr(pinfo->cinfo, COL_INFO, "%s, %s: %s",
4054 get_netfn_cmd_text(netfn, cmd),
4055 val_to_str(netfn, ipmi_netfn_vals, "Unknown (0x%02x)"),
4056 val_to_str(ccode, ipmi_ccode_vals, "Unknown (0x%02x)"));
4058 col_add_fstr(pinfo->cinfo, COL_INFO, "%s, %s",
4059 get_netfn_cmd_text(netfn, cmd),
4060 val_to_str(netfn, ipmi_netfn_vals, "Unknown (0x%02x)"));
4065 ti = proto_tree_add_protocol_format(tree, proto_ipmi,
4066 tvb, offset, auth_offset + 16,
4067 "Intelligent Platform Management Interface, "
4068 "NetFn: %s (0x%02x), Cmd: %s (0x%02x)",
4069 val_to_str(netfn, ipmi_netfn_vals, "Unknown (0x%02x)"),
4070 netfn, get_netfn_cmd_text(netfn, cmd), cmd);
4071 ipmi_tree = proto_item_add_subtree(ti, ett_ipmi);
4075 2.0: IPMI v2.0 RMCP+ Session ID 4
4076 BOTH: Session Sequence Number 4
4077 1.5: IPMI v1.5 Session ID 4
4081 /* ipmi session field */
4083 if (authtype == IPMI_AUTH_RMCPP) {
4085 /*5 - 1 :subtract extra byte from 2 byte length correction*/
4086 tf = proto_tree_add_text(ipmi_tree, tvb, offset,
4087 auth_offset + 5 - 1,
4088 "Session: ID 0x%08x (%d bytes)",
4089 session_id, auth_offset + 5 - 1);
4090 field_tree = proto_item_add_subtree(tf, ett_ipmi_session);
4091 proto_tree_add_item(field_tree, hf_ipmi_session_authtype,
4092 tvb, offset++, 1, TRUE);
4095 payloadtype = tvb_get_guint8(tvb,offset);
4096 payloadtype_auth = (payloadtype >> 6) & 1;
4097 payloadtype_enc = (payloadtype >> 7);
4098 payloadtype = payloadtype & 0x3f;
4099 proto_tree_add_item(field_tree, hf_ipmi_payloadtype,
4100 tvb, offset, 1, TRUE);
4101 /* Bit [6] - 0b = payload is unauthenticated (no AuthCode field)
4102 * 1b = payload is authenticated (AuthCode field is present)
4103 * Bit [7] - 0b = payload is unencrypted
4104 * 1b = payload is encrypted
4106 proto_tree_add_item(field_tree, hf_ipmi_payloadtype_auth,
4107 tvb, offset, 1, TRUE);
4108 proto_tree_add_item(field_tree, hf_ipmi_payloadtype_enc,
4109 tvb, offset, 1, TRUE);
4111 if (check_col(pinfo->cinfo, COL_INFO)) {
4112 col_add_fstr(pinfo->cinfo, COL_INFO, "%s",
4113 val_to_str(payloadtype, ipmi_payload_vals, "Unknown (0x%02x)"));
4116 if ( payloadtype == IPMI_OEM_EXPLICIT){
4117 proto_tree_add_item(field_tree, hf_ipmi_oem_iana,
4118 tvb, offset, 4, TRUE);
4120 proto_tree_add_item(field_tree, hf_ipmi_oem_payload_id,
4121 tvb, offset, 2, TRUE);
4124 proto_tree_add_item(field_tree, hf_ipmi_session_id,
4125 tvb, offset, 4, TRUE);
4128 proto_tree_add_item(field_tree, hf_ipmi_session_sequence,
4129 tvb, offset, 4, TRUE);
4132 tf = proto_tree_add_text(ipmi_tree, tvb, offset,
4134 "Session: ID 0x%08x (%d bytes)",
4135 session_id, auth_offset + 9);
4136 field_tree = proto_item_add_subtree(tf, ett_ipmi_session);
4137 proto_tree_add_item(field_tree, hf_ipmi_session_authtype,
4138 tvb, offset++, 1, TRUE);
4139 proto_tree_add_item(field_tree, hf_ipmi_session_sequence,
4140 tvb, offset, 4, TRUE);
4142 proto_tree_add_item(field_tree, hf_ipmi_session_id,
4143 tvb, offset, 4, TRUE);
4145 if (authtype != IPMI_AUTH_NONE) {
4146 proto_tree_add_item(field_tree, hf_ipmi_session_authcode,
4147 tvb, offset, 16, TRUE);
4152 /* message length */
4155 if(authtype == IPMI_AUTH_RMCPP) {
4156 proto_tree_add_item(ipmi_tree, hf_ipmi_msg_len,
4157 tvb, offset, 2, TRUE);
4160 proto_tree_add_item(ipmi_tree, hf_ipmi_conf_hdr,
4161 tvb, offset, 1, TRUE);
4165 proto_tree_add_item(ipmi_tree, hf_ipmi_msg_len,
4166 tvb, offset, 1, TRUE);
4170 if ((authtype == IPMI_AUTH_RMCPP)) {
4171 switch (payloadtype){
4172 case IPMI_IPMI_MESSAGE:
4173 if (payloadtype_enc){
4186 proto_tree_add_item(ipmi_tree,
4187 response ? hf_ipmi_msg_rqaddr : hf_ipmi_msg_rsaddr,
4188 tvb, offset++, 1, TRUE);
4195 tf = proto_tree_add_text(ipmi_tree, tvb, offset, 1,
4196 "NetFn/LUN: %s (0x%02x)", val_to_str(netfn,
4197 ipmi_netfn_vals, "Unknown (0x%02x)"),
4200 field_tree = proto_item_add_subtree(tf, ett_ipmi_msg_nlfield);
4202 proto_tree_add_item(field_tree, hf_ipmi_msg_netfn,
4203 tvb, offset, 1, TRUE);
4204 proto_tree_add_item(field_tree,
4205 response ? hf_ipmi_msg_rqlun : hf_ipmi_msg_rslun,
4206 tvb, offset, 1, TRUE);
4207 lun = tvb_get_guint8(tvb, offset) & 3;
4208 proto_item_append_text(tf, ", LUN 0x%02x", lun);
4214 proto_tree_add_item(ipmi_tree, hf_ipmi_msg_csum1,
4215 tvb, offset++, 1, TRUE);
4220 proto_tree_add_item(ipmi_tree,
4221 response ? hf_ipmi_msg_rsaddr : hf_ipmi_msg_rqaddr,
4222 tvb, offset++, 1, TRUE);
4229 tf = proto_tree_add_item(ipmi_tree, hf_ipmi_msg_slfield,
4230 tvb, offset, 1, TRUE);
4231 field_tree = proto_item_add_subtree(tf, ett_ipmi_msg_slfield);
4233 proto_tree_add_item(field_tree, hf_ipmi_msg_seq,
4234 tvb, offset, 1, TRUE);
4235 proto_tree_add_item(field_tree,
4236 response ? hf_ipmi_msg_rslun : hf_ipmi_msg_rqlun,
4237 tvb, offset, 1, TRUE);
4238 lun = tvb_get_guint8(tvb, offset) & 3;
4239 proto_item_append_text(tf, ", LUN 0x%02x", lun);
4246 proto_tree_add_text(ipmi_tree, tvb, offset++, 1,
4247 "Command: %s (0x%02x)",
4248 get_netfn_cmd_text(netfn, cmd), cmd);
4252 /* completion code */
4253 if (tree && response) {
4254 proto_tree_add_item(ipmi_tree, hf_ipmi_msg_ccode,
4255 tvb, offset++, 1, TRUE);
4259 /* If ccode is non zero and there is only one more byte remaining in
4260 * the packet this probably means that the response has been truncated
4261 * and the single remaining byte is just the checksum field.
4263 if(ccode && response && tvb_reported_length_remaining(tvb, offset)==1){
4264 proto_tree_add_text(ipmi_tree, tvb, offset, 0, "[Truncated response]");
4267 proto_tree_add_item(ipmi_tree, hf_ipmi_msg_csum2,
4268 tvb, offset++, 1, TRUE);
4272 /* determine data length */
4273 len = tvb_get_guint8(tvb, auth_offset + 9) - 6 - (response ? 1 : 0) -1;
4274 /*TODO: fix for 2 byte length with RMCPP*/
4278 next_tvb = tvb_new_subset(tvb, offset, len, len);
4279 call_dissector(data_handle, next_tvb, pinfo, tree);
4283 /* dissect the data block, added by lane */
4284 dissect_ipmi_data(tree, ipmi_tree, pinfo, tvb, &offset, len, netfn, cmd, response, auth_offset);
4289 proto_tree_add_item(ipmi_tree, hf_ipmi_msg_csum2,
4290 tvb, offset++, 1, TRUE);
4295 proto_register_ipmi(void)
4297 static hf_register_info hf_session[] = {
4298 { &hf_ipmi_session_authtype, {
4299 "Authentication Type", "ipmi.session.authtype",
4300 FT_UINT8, BASE_HEX, VALS(ipmi_authtype_vals), 0,
4301 "IPMI Authentication Type", HFILL }},
4302 { &hf_ipmi_payloadtype,{
4303 "Payload Type", "ipmi.session.payloadtype",
4304 FT_UINT8, BASE_HEX, VALS(ipmi_payload_vals), 0x3f,
4305 "IPMI Payload Type", HFILL }},
4306 { &hf_ipmi_payloadtype_auth,{
4307 "Authenticated","ipmi.session.payloadtype.auth",
4308 FT_BOOLEAN,8, TFS(&ipmi_payload_aut_val), 0x40,
4309 "IPMI Payload Type authenticated", HFILL }},
4310 { &hf_ipmi_payloadtype_enc,{
4311 "Encryption","ipmi.session.payloadtype.enc",
4312 FT_BOOLEAN,8, TFS(&ipmi_payload_enc_val), 0x80,
4313 "IPMI Payload Type encryption", HFILL }},
4314 { &hf_ipmi_oem_iana,{
4315 "OEM IANA", "ipmi.session.oem.iana",
4316 FT_BYTES, BASE_HEX, NULL, 0,
4317 "IPMI OEM IANA", HFILL }},
4318 { &hf_ipmi_oem_payload_id,{
4319 "OEM Payload ID", "ipmi.session.oem.payloadid",
4320 FT_BYTES, BASE_HEX, NULL, 0,
4321 "IPMI OEM Payload ID", HFILL }},
4322 { &hf_ipmi_session_sequence, {
4323 "Session Sequence Number", "ipmi.session.sequence",
4324 FT_UINT32, BASE_HEX, NULL, 0,
4325 "IPMI Session Sequence Number", HFILL }},
4326 { &hf_ipmi_session_id, {
4327 "Session ID", "ipmi.session.id",
4328 FT_UINT32, BASE_HEX, NULL, 0,
4329 "IPMI Session ID", HFILL }},
4330 { &hf_ipmi_session_authcode, {
4331 "Authentication Code", "ipmi.session.authcode",
4332 FT_BYTES, BASE_HEX, NULL, 0,
4333 "IPMI Message Authentication Code", HFILL }},
4335 static hf_register_info hf_msg[] = {
4336 { &hf_ipmi_msg_len, {
4337 "Message Length", "ipmi.msg.len",
4338 FT_UINT8, BASE_DEC, NULL, 0,
4339 "IPMI Message Length", HFILL }},
4340 { &hf_ipmi_conf_hdr, {
4341 "Confidentiality Header", "ipmi.msg.confhdr",
4342 FT_UINT8, BASE_DEC, VALS(ipmi_conf_vals), 0x3f,
4343 "IPMI Confidentiality Header", HFILL }},
4344 { &hf_ipmi_msg_rsaddr, {
4345 "Response Address", "ipmi.msg.rsaddr",
4346 FT_UINT8, BASE_HEX, VALS(ipmi_addr_vals), 0,
4347 "Responder's Slave Address", HFILL }},
4348 { &hf_ipmi_msg_csum1, {
4349 "Checksum 1", "ipmi.msg.csum1",
4350 FT_UINT8, BASE_HEX, NULL, 0,
4351 "2s Complement Checksum", HFILL }},
4352 { &hf_ipmi_msg_rqaddr, {
4353 "Request Address", "ipmi.msg.rqaddr",
4354 FT_UINT8, BASE_HEX, VALS(ipmi_addr_vals), 0,
4355 "Requester's Address (SA or SWID)", HFILL }},
4356 { &hf_ipmi_msg_cmd, {
4357 "Command", "ipmi.msg.cmd",
4358 FT_UINT8, BASE_HEX, NULL, 0,
4359 "IPMI Command Byte", HFILL }},
4360 { &hf_ipmi_msg_ccode, {
4361 "Completion Code", "ipmi.msg.ccode",
4362 FT_UINT8, BASE_HEX, VALS(ipmi_ccode_vals), 0,
4363 "Completion Code for Request", HFILL }},
4364 { &hf_ipmi_msg_csum2, {
4365 "Checksum 2", "ipmi.msg.csum2",
4366 FT_UINT8, BASE_HEX, NULL, 0,
4367 "2s Complement Checksum", HFILL }},
4369 static hf_register_info hf_msg_field[] = {
4370 { &hf_ipmi_msg_nlfield, {
4371 "NetFn/LUN", "ipmi.msg.nlfield",
4372 FT_UINT8, BASE_HEX, NULL, 0,
4373 "Network Function and LUN field", HFILL }},
4374 { &hf_ipmi_msg_netfn, {
4375 "NetFn", "ipmi.msg.nlfield.netfn",
4376 FT_UINT8, BASE_HEX, VALS(ipmi_netfn_vals), 0xfc,
4377 "Network Function Code", HFILL }},
4378 { &hf_ipmi_msg_rqlun, {
4379 "Request LUN", "ipmi.msg.nlfield.rqlun",
4380 FT_UINT8, BASE_HEX, NULL, 0x03,
4381 "Requester's Logical Unit Number", HFILL }},
4382 { &hf_ipmi_msg_slfield, {
4383 "Seq/LUN", "ipmi.msg.slfield",
4384 FT_UINT8, BASE_HEX, NULL, 0,
4385 "Sequence and LUN field", HFILL }},
4386 { &hf_ipmi_msg_seq, {
4387 "Sequence", "ipmi.msg.slfield.seq",
4388 FT_UINT8, BASE_HEX, NULL, 0xfc,
4389 "Sequence Number (requester)", HFILL }},
4390 { &hf_ipmi_msg_rslun, {
4391 "Response LUN", "ipmi.msg.slfield.rslun",
4392 FT_UINT8, BASE_HEX, NULL, 0x03,
4393 "Responder's Logical Unit Number", HFILL }},
4396 /********* Sensor/Event, NetFN = 0x04 **********/
4398 /* Data field of Platform Event Message command, added by lane */
4399 static hf_register_info hf_PEM_datafield[] = {
4400 { &hf_PEM_datafield_EvMRev, {
4401 "Event Message Revision", "PEM.datafield.EvMRev",
4402 FT_UINT8, BASE_HEX, VALS(cmd_PEM_EvMRev_vals), 0,
4403 "Event Message Revision", HFILL }},
4404 { &hf_PEM_datafield_SensorType, {
4405 "Sensor Type", "PEM.datafield.SensorType",
4406 FT_UINT8, BASE_HEX, VALS(cmd_PEM_SensorType_vals), 0,
4407 "Sensor Type", HFILL }},
4408 { &hf_PEM_datafield_SensorNumber, {
4409 "Sensor #", "PEM.datafield.SensorNumber",
4410 FT_UINT8, BASE_HEX, NULL, 0,
4411 "Sensor Number", HFILL }},
4412 { &hf_PEM_datafield_EventDirAndEventType_EventDir, {
4413 "Event Direction", "PEM.datafield.EventDirAndEventType.EventDir",
4414 FT_UINT8, BASE_HEX, VALS(cmd_PEM_EventDir_vals), 0x80,
4415 "Event Direction", HFILL }},
4416 { &hf_PEM_datafield_EventDirAndEventType_EventType, {
4417 "Event Type", "PEM.datafield.EventType",
4418 FT_UINT8, BASE_HEX, NULL, 0x7f,
4419 "Event Type", HFILL }},
4421 { &hf_PEM_datafield_EventData1_threshold_76, {
4422 "[7,6] ", "PEM.datafield.EventData1_threshold_76",
4423 FT_UINT8, BASE_HEX, VALS(cmd_PEM_EventData1_threshold_76_vals), 0xc0,
4424 "byte 2 in the event data", HFILL }},
4425 { &hf_PEM_datafield_EventData1_threshold_54, {
4426 "[5,4] ", "PEM.datafield.EventData1_threshold_54",
4427 FT_UINT8, BASE_HEX, VALS(cmd_PEM_EventData1_threshold_54_vals), 0x30,
4428 "byte 3 in the event data", HFILL }},
4429 { &hf_PEM_datafield_EventData1_threshold_30, {
4430 "Offset from Event/Reading Code for threshold event", "PEM.datafield.EventData1_threshold_30",
4431 FT_UINT8, BASE_HEX, NULL, 0x0f,
4432 "Offset from Event/Reading Code for threshold event", HFILL }},
4433 { &hf_PEM_datafield_EventData2_threshold, {
4434 "reading that triggered event", "PEM.datafield.EventData2_threshold",
4435 FT_UINT8, BASE_HEX, NULL, 0,
4436 "reading that triggered event", HFILL }},
4437 { &hf_PEM_datafield_EventData3_threshold, {
4438 "threshold value that triggered event", "PEM.datafield.EventData3_threshold",
4439 FT_UINT8, BASE_HEX, NULL, 0,
4440 "threshold value that triggered event", HFILL }},
4442 { &hf_PEM_datafield_EventData1_discrete_76, {
4443 "[7,6] ", "PEM.datafield.EventData1_discrete_76",
4444 FT_UINT8, BASE_HEX, VALS(cmd_PEM_EventData1_discrete_76_vals), 0xc0,
4445 "byte 2 in the event data", HFILL }},
4446 { &hf_PEM_datafield_EventData1_discrete_54, {
4447 "[5,4] ", "PEM.datafield.EventData1_discrete_54",
4448 FT_UINT8, BASE_HEX, VALS(cmd_PEM_EventData1_discrete_54_vals), 0x30,
4449 "byte 3 in the event data", HFILL }},
4450 { &hf_PEM_datafield_EventData1_discrete_30, {
4451 "Offset from Event/Reading Code for threshold event", "PEM.datafield.EventData1_discrete_30",
4452 FT_UINT8, BASE_HEX, NULL, 0x0f,
4453 "Offset from Event/Reading Code for threshold event", HFILL }},
4454 { &hf_PEM_datafield_EventData2_discrete_74, {
4455 "Optional offset from 'Severity' Event/Reading Code(0x0f if unspecified)", "PEM.datafield.EventData2_discrete_74",
4456 FT_UINT8, BASE_HEX, NULL, 0xf0,
4457 "Optional offset from 'Severity' Event/Reading Code(0x0f if unspecified)", HFILL }},
4458 { &hf_PEM_datafield_EventData2_discrete_30, {
4459 "Optional offset from Event/Reading Type Code for previous discrete event state (0x0f if unspecified)", "PEM.datafield.EventData2_discrete_30",
4460 FT_UINT8, BASE_HEX, NULL, 0x0f,
4461 "Optional offset from Event/Reading Type Code for previous discrete event state (0x0f if unspecified)", HFILL }},
4462 { &hf_PEM_datafield_EventData3_discrete, {
4463 "Optional OEM code", "PEM.datafield.EventData3_discrete",
4464 FT_UINT8, BASE_HEX, NULL, 0,
4465 "Optional OEM code", HFILL }},
4467 { &hf_PEM_datafield_EventData1_OEM_76, {
4468 "[7,6] ", "PEM.datafield.EventData1_OEM_76",
4469 FT_UINT8, BASE_HEX, VALS(cmd_PEM_EventData1_OEM_76_vals), 0xc0,
4470 "byte 2 in the event data", HFILL }},
4471 { &hf_PEM_datafield_EventData1_OEM_54, {
4472 "[5,4] ", "PEM.datafield.EventData1_OEM_54",
4473 FT_UINT8, BASE_HEX, VALS(cmd_PEM_EventData1_OEM_54_vals), 0x30,
4474 "byte 3 in the event data", HFILL }},
4475 { &hf_PEM_datafield_EventData1_OEM_30, {
4476 "Offset from Event/Reading Type Code", "PEM.datafield.EventData1_OEM_30",
4477 FT_UINT8, BASE_HEX, NULL, 0x0f,
4478 "Offset from Event/Reading Type Code", HFILL }},
4479 { &hf_PEM_datafield_EventData2_OEM_74, {
4480 "Optional OEM code bits or offset from 'Severity' Event/Reading Type Code(0x0f if unspecified)", "PEM.datafield.EventData2_OEM_74",
4481 FT_UINT8, BASE_HEX, NULL, 0xf0,
4482 "Optional OEM code bits or offset from 'Severity' Event/Reading Type Code(0x0f if unspecified)", HFILL }},
4483 { &hf_PEM_datafield_EventData2_OEM_30, {
4484 "Optional OEM code or offset from Event/Reading Type Code for previous event state(0x0f if unspecified)", "PEM.datafield.EventData2_OEM_30",
4485 FT_UINT8, BASE_HEX, NULL, 0x0f,
4486 "Optional OEM code or offset from Event/Reading Type Code for previous event state(0x0f if unspecified)", HFILL }},
4487 { &hf_PEM_datafield_EventData3_OEM, {
4488 "Optional OEM code", "PEM.datafield.EventData3_discrete",
4489 FT_UINT8, BASE_HEX, NULL, 0,
4490 "Optional OEM code", HFILL }},
4491 /* Hot Swap Event dedicated */
4492 { &hf_PEM_datafield_HotSwapEvent_CurrentState, {
4493 "Current State", "PEM.datafield.HotSwapEvent_CurrentState",
4494 FT_UINT8, BASE_HEX, VALS(cmd_PEM_HotSwapEvent_state_vals), 0x0f,
4495 "Current State", HFILL }},
4496 { &hf_PEM_datafield_HotSwapEvent_StateChangeCause, {
4497 "Cause of State Change", "PEM.datafield.HotSwapEvent_EventData2_74",
4498 FT_UINT8, BASE_HEX, VALS(cmd_PEM_HotSwapEvent_StateChangeCause_vals), 0xf0,
4499 "Cause of State Change", HFILL }},
4500 { &hf_PEM_datafield_HotSwapEvent_PreviousState, {
4501 "Previous State", "PEM.datafield.HotSwapEvent_HotSwapEvent_PreviousState",
4502 FT_UINT8, BASE_HEX, VALS(cmd_PEM_HotSwapEvent_state_vals), 0x0f,
4503 "Previous State", HFILL }},
4504 { &hf_PEM_datafield_HotSwapEvent_FRUDeviceID, {
4505 "FRU Device ID", "PEM.datafield.HotSwapEvent_FRUDeviceID",
4506 FT_UINT8, BASE_HEX, NULL, 0,
4507 "FRU Device ID", HFILL }},
4510 /* Data field of Get Device SDR Info command, added by lane */
4511 static hf_register_info hf_GetDeviceSDRInfo_datafield[] = {
4512 { &hf_GetDeviceSDRInfo_datafield_SensorNumber, {
4513 "Number of the Sensors in device", "GetDeviceSDRInfo.datafield.PICMGIdentifier",
4514 FT_UINT8, BASE_DEC, NULL, 0,
4515 "Number of the Sensors in device", HFILL }},
4516 { &hf_GetDeviceSDRInfo_datafield_Flag, {
4517 "Flag", "GetDeviceSDRInfo.datafield.Flag",
4518 FT_UINT8, BASE_HEX, NULL, 0,
4520 { &hf_GetDeviceSDRInfo_datafield_Flag_Dynamicpopulation, {
4521 "Dynamic population", "GetDeviceSDRInfo.datafield.Flag.Dynamicpopulation",
4522 FT_UINT8, BASE_HEX, VALS(cmd_GetDeviceSDRInfo_data_Flag_Dynamicpopulation_vals), 0x80,
4523 "Dynamic population", HFILL }},
4524 { &hf_GetDeviceSDRInfo_datafield_Flag_Reserved, {
4525 "Reserved", "GetDeviceSDRInfo.datafield.Flag.Reserved",
4526 FT_UINT8, BASE_HEX, NULL, 0x70,
4527 "Reserved", HFILL }},
4528 { &hf_GetDeviceSDRInfo_datafield_Flag_DeviceLUNs3, {
4529 "Device LUN 3", "GetDeviceSDRInfo.datafield.Flag.DeviceLUN3",
4530 FT_UINT8, BASE_HEX, VALS(cmd_GetDeviceSDRInfo_data_Flag_DeviceLUNs_vals), 0x08,
4531 "Device LUN 3", HFILL }},
4532 { &hf_GetDeviceSDRInfo_datafield_Flag_DeviceLUNs2, {
4533 "Device LUN 2", "GetDeviceSDRInfo.datafield.Flag.DeviceLUNs2",
4534 FT_UINT8, BASE_HEX, VALS(cmd_GetDeviceSDRInfo_data_Flag_DeviceLUNs_vals), 0x04,
4535 "Device LUN 2", HFILL }},
4536 { &hf_GetDeviceSDRInfo_datafield_Flag_DeviceLUNs1, {
4537 "Device LUN 1", "GetDeviceSDRInfo.datafield.Flag.DeviceLUNs1",
4538 FT_UINT8, BASE_HEX, VALS(cmd_GetDeviceSDRInfo_data_Flag_DeviceLUNs_vals), 0x02,
4539 "Device LUN 1", HFILL }},
4540 { &hf_GetDeviceSDRInfo_datafield_Flag_DeviceLUNs0, {
4541 "Device LUN 0", "GetDeviceSDRInfo.datafield.Flag.DeviceLUNs0",
4542 FT_UINT8, BASE_HEX, VALS(cmd_GetDeviceSDRInfo_data_Flag_DeviceLUNs_vals), 0x01,
4543 "Device LUN 0", HFILL }},
4544 { &hf_GetDeviceSDRInfo_datafield_SensorPopulationChangeIndicator, {
4545 "SensorPopulation Change Indicator ", "GetDeviceSDRInfo.datafield.SensorPopulationChangeIndicator",
4546 FT_UINT32, BASE_HEX, NULL, 0,
4547 "Sensor Population Change Indicator", HFILL }},
4550 /* Data field of Reserve Device SDR Repository command, added by lane */
4551 static hf_register_info hf_ReserveDeviceSDRRepository_datafield[] = {
4552 { &hf_ReserveDeviceSDRRepository_datafield_ReservationID, {
4553 "Reservation ID", "ReserveDeviceSDRRepository.datafield.ReservationID",
4554 FT_UINT16, BASE_HEX, NULL, 0,
4555 "Reservation ID", HFILL }},
4558 /* Data field of Get Device SDR command, added by lane */
4559 static hf_register_info hf_GetDeviceSDR_datafield[] = {
4560 { &hf_GetDeviceSDR_datafield_ReservationID, {
4561 "Reservation ID", "GetDeviceSDR.datafield.ReservationID",
4562 FT_UINT16, BASE_HEX, NULL, 0,
4563 "Reservation ID", HFILL }},
4564 { &hf_GetDeviceSDR_datafield_RecordID, {
4565 "Record ID of record to Get", "GetDeviceSDR.datafield.RecordID",
4566 FT_UINT16, BASE_HEX, NULL, 0,
4567 "Record ID of record to Get", HFILL }},
4568 { &hf_GetDeviceSDR_datafield_OffsetIntoRecord, {
4569 "Offset into record", "GetDeviceSDR.datafield.OffsetIntoRecord",
4570 FT_UINT8, BASE_HEX, NULL, 0,
4571 "Offset into record", HFILL }},
4572 { &hf_GetDeviceSDR_datafield_BytesToRead, {
4573 "Bytes to read (number)", "GetDeviceSDR.datafield.BytesToRead",
4574 FT_UINT8, BASE_HEX, VALS(cmd_GetDeviceSDR_data_BytesToRead_vals), 0,
4575 "Bytes to read", HFILL }},
4576 { &hf_GetDeviceSDR_datafield_NextRecordID, {
4577 "Record ID for next record", "GetDeviceSDR.datafield.ReservationID",
4578 FT_UINT16, BASE_HEX, NULL, 0,
4579 "Record ID for next record", HFILL }},
4582 /* Data field of Set Sensor Hysteresis command, added by lane */
4583 static hf_register_info hf_SetSensorHysteresis_datafield[] = {
4584 { &hf_SetSensorHysteresis_datafield_SensorNumber, {
4585 "Sensor Number", "SetSensorHysteresis.datafield.SensorNumber",
4586 FT_UINT8, BASE_HEX, NULL, 0,
4587 "Sensor Number", HFILL }},
4588 { &hf_SetSensorHysteresis_datafield_ReservedForHysteresisMask, {
4589 "Reserved for future ' Hysteresis Mask ' definition", "SetSensorHysteresis.datafield.ReservedForHysteresisMask",
4590 FT_UINT8, BASE_HEX, NULL, 0,
4591 "Reserved For Hysteresis Mask", HFILL }},
4592 { &hf_SetSensorHysteresis_datafield_PositivegoingThresholdHysteresisValue, {
4593 "Positive-going Threshold Hysteresis Value", "SetSensorHysteresis.datafield.PositivegoingThresholdHysteresisValue",
4594 FT_UINT8, BASE_HEX, NULL, 0,
4595 "Positive-going Threshold Hysteresis Value", HFILL }},
4596 { &hf_SetSensorHysteresis_datafield_NegativegoingThresholdHysteresisValue, {
4597 "Negative-going Threshold Hysteresis Value", "SetSensorHysteresis.datafield.NegativegoingThresholdHysteresisValue",
4598 FT_UINT8, BASE_HEX, NULL, 0,
4599 "Negative-going Threshold Hysteresis Value", HFILL }},
4602 /* Data field of Get Sensor Hysteresis command, added by lane */
4603 static hf_register_info hf_GetSensorHysteresis_datafield[] = {
4604 { &hf_GetSensorHysteresis_datafield_SensorNumber, {
4605 "Sensor Number", "GetSensorHysteresis.datafield.SensorNumber",
4606 FT_UINT8, BASE_HEX, NULL, 0,
4607 "Sensor Number", HFILL }},
4608 { &hf_GetSensorHysteresis_datafield_ReservedForHysteresisMask, {
4609 "Reserved for future ' Hysteresis Mask ' definition", "GetSensorHysteresis.datafield.ReservedForHysteresisMask",
4610 FT_UINT8, BASE_HEX, NULL, 0,
4611 "Reserved For Hysteresis Mask", HFILL }},
4612 { &hf_GetSensorHysteresis_datafield_PositivegoingThresholdHysteresisValue, {
4613 "Positive-going Threshold Hysteresis Value", "GetSensorHysteresis.datafield.PositivegoingThresholdHysteresisValue",
4614 FT_UINT8, BASE_HEX, NULL, 0,
4615 "Positive-going Threshold Hysteresis Value", HFILL }},
4616 { &hf_GetSensorHysteresis_datafield_NegativegoingThresholdHysteresisValue, {
4617 "Negative-going Threshold Hysteresis Value", "GetSensorHysteresis.datafield.NegativegoingThresholdHysteresisValue",
4618 FT_UINT8, BASE_HEX, NULL, 0,
4619 "Negative-going Threshold Hysteresis Value", HFILL }},
4622 /* Data field of Set Sensor Thresholds command, added by lane */
4623 static hf_register_info hf_SetSensorThresholds_datafield[] = {
4624 { &hf_SetSensorThresholds_datafield_SensorNumber, {
4625 "Sensor Number", "SetSensorThresholds.datafield.SensorNumber",
4626 FT_UINT8, BASE_HEX, NULL, 0,
4627 "Sensor Number", HFILL }},
4628 { &hf_SetSensorThresholds_datafield_ControlByte_Bit76, {
4629 "Bit 7...6 Reserved", "SetSensorThresholds.datafield.ControlByte.Bit76",
4630 FT_UINT8, BASE_HEX, NULL, 0,
4631 "Bit 7...6 Reserved", HFILL }},
4632 { &hf_SetSensorThresholds_datafield_ControlByte_Bit5, {
4633 "upper non-recoverable threshold", "SetSensorThresholds.datafield.ControlByte.Bit5",
4634 FT_UINT8, BASE_HEX, VALS(cmd_SetSensorThresholds_data_ControlByte_Bit_vals), 0x20,
4635 "upper non-recoverable threshold", HFILL }},
4636 { &hf_SetSensorThresholds_datafield_ControlByte_Bit4, {
4637 "upper critical threshold", "SetSensorThresholds.datafield.ControlByte.Bit4",
4638 FT_UINT8, BASE_HEX, VALS(cmd_SetSensorThresholds_data_ControlByte_Bit_vals), 0x10,
4639 "upper critical threshold", HFILL }},
4640 { &hf_SetSensorThresholds_datafield_ControlByte_Bit3, {
4641 "upper non-critical threshold", "SetSensorThresholds.datafield.ControlByte.Bit3",
4642 FT_UINT8, BASE_HEX, VALS(cmd_SetSensorThresholds_data_ControlByte_Bit_vals), 0x08,
4643 "upper non-critical threshold", HFILL }},
4644 { &hf_SetSensorThresholds_datafield_ControlByte_Bit2, {
4645 "lower non-recoverable threshold", "SetSensorThresholds.datafield.ControlByte.Bit2",
4646 FT_UINT8, BASE_HEX, VALS(cmd_SetSensorThresholds_data_ControlByte_Bit_vals), 0x04,
4647 "lower non-recoverable threshold", HFILL }},
4648 { &hf_SetSensorThresholds_datafield_ControlByte_Bit1, {
4649 "lower critical threshold", "SetSensorThresholds.datafield.ControlByte.Bit1",
4650 FT_UINT8, BASE_HEX, VALS(cmd_SetSensorThresholds_data_ControlByte_Bit_vals), 0x02,
4651 "lower critical threshold", HFILL }},
4652 { &hf_SetSensorThresholds_datafield_ControlByte_Bit0, {
4653 "lower non-critical threshold", "SetSensorThresholds.datafield.ControlByte.Bit0",
4654 FT_UINT8, BASE_HEX, VALS(cmd_SetSensorThresholds_data_ControlByte_Bit_vals), 0x01,
4655 "lower non-critical threshold", HFILL }},
4656 { &hf_SetSensorThresholds_datafield_LowerNonCriticalThreshold, {
4657 "lower non-critical threshold", "SetSensorThresholds.datafield.LowerNonCriticalThreshold",
4658 FT_UINT8, BASE_HEX, NULL, 0,
4659 "lower non-critical threshold", HFILL }},
4660 { &hf_SetSensorThresholds_datafield_LowerCriticalThreshold, {
4661 "lower critical threshold", "SetSensorThresholds.datafield.LowerCriticalThreshold",
4662 FT_UINT8, BASE_HEX, NULL, 0,
4663 "lower critical threshold", HFILL }},
4664 { &hf_SetSensorThresholds_datafield_LowerNonRecoverableThreshold, {
4665 "lower non-recoverable threshold", "SetSensorThresholds.datafield.LowerNonRecoverableThreshold",
4666 FT_UINT8, BASE_HEX, NULL, 0,
4667 "lower non-recoverable threshold", HFILL }},
4668 { &hf_SetSensorThresholds_datafield_UpperNonCriticalThreshold, {
4669 "upper non-critical threshold", "SetSensorThresholds.datafield.UpperNonCriticalThreshold",
4670 FT_UINT8, BASE_HEX, NULL, 0,
4671 "upper non-critical threshold", HFILL }},
4672 { &hf_SetSensorThresholds_datafield_UpperCriticalThreshold, {
4673 "upper critical threshold", "SetSensorThresholds.datafield.UpperCriticalThreshold",
4674 FT_UINT8, BASE_HEX, NULL, 0,
4675 "upper critical threshold", HFILL }},
4676 { &hf_SetSensorThresholds_datafield_UpperNonRecoverableThreshold, {
4677 "upper non-recoverable threshold", "SetSensorThresholds.datafield.UpperNonRecoverableThreshold",
4678 FT_UINT8, BASE_HEX, NULL, 0,
4679 "upper non-recoverable threshold", HFILL }},
4682 /* Data field of Get Sensor Thresholds command, added by lane */
4683 static hf_register_info hf_GetSensorThresholds_datafield[] = {
4684 { &hf_GetSensorThresholds_datafield_SensorNumber, {
4685 "Sensor Number", "GetSensorThresholds.datafield.SensorNumber",
4686 FT_UINT8, BASE_HEX, NULL, 0,
4687 "Sensor Number", HFILL }},
4688 { &hf_GetSensorThresholds_datafield_ControlByte_Bit76, {
4689 "Bit 7...6 Reserved", "GetSensorThresholds.datafield.ControlByte.Bit76",
4690 FT_UINT8, BASE_HEX, NULL, 0,
4691 "Bit 7...6 Reserved", HFILL }},
4692 { &hf_GetSensorThresholds_datafield_ControlByte_Bit5, {
4693 "upper non-recoverable threshold", "GetSensorThresholds.datafield.ControlByte.Bit5",
4694 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorThresholds_data_ControlByte_Bit_vals), 0x20,
4695 "upper non-recoverable threshold", HFILL }},
4696 { &hf_GetSensorThresholds_datafield_ControlByte_Bit4, {
4697 "upper critical threshold", "GetSensorThresholds.datafield.ControlByte.Bit4",
4698 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorThresholds_data_ControlByte_Bit_vals), 0x10,
4699 "upper critical threshold", HFILL }},
4700 { &hf_GetSensorThresholds_datafield_ControlByte_Bit3, {
4701 "upper non-critical threshold", "GetSensorThresholds.datafield.ControlByte.Bit3",
4702 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorThresholds_data_ControlByte_Bit_vals), 0x08,
4703 "upper non-critical threshold", HFILL }},
4704 { &hf_GetSensorThresholds_datafield_ControlByte_Bit2, {
4705 "lower non-recoverable threshold", "GetSensorThresholds.datafield.ControlByte.Bit2",
4706 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorThresholds_data_ControlByte_Bit_vals), 0x04,
4707 "lower non-recoverable threshold", HFILL }},
4708 { &hf_GetSensorThresholds_datafield_ControlByte_Bit1, {
4709 "lower critical threshold", "GetSensorThresholds.datafield.ControlByte.Bit1",
4710 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorThresholds_data_ControlByte_Bit_vals), 0x02,
4711 "lower critical threshold", HFILL }},
4712 { &hf_GetSensorThresholds_datafield_ControlByte_Bit0, {
4713 "lower non-critical threshold", "GetSensorThresholds.datafield.ControlByte.Bit0",
4714 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorThresholds_data_ControlByte_Bit_vals), 0x01,
4715 "lower non-critical threshold", HFILL }},
4716 { &hf_GetSensorThresholds_datafield_LowerNonCriticalThreshold, {
4717 "lower non-critical threshold", "GetSensorThresholds.datafield.LowerNonCriticalThreshold",
4718 FT_UINT8, BASE_HEX, NULL, 0,
4719 "lower non-critical threshold", HFILL }},
4720 { &hf_GetSensorThresholds_datafield_LowerCriticalThreshold, {
4721 "lower critical threshold", "GetSensorThresholds.datafield.LowerCriticalThreshold",
4722 FT_UINT8, BASE_HEX, NULL, 0,
4723 "lower critical threshold", HFILL }},
4724 { &hf_GetSensorThresholds_datafield_LowerNonRecoverableThreshold, {
4725 "lower non-recoverable threshold", "GetSensorThresholds.datafield.LowerNonRecoverableThreshold",
4726 FT_UINT8, BASE_HEX, NULL, 0,
4727 "lower non-recoverable threshold", HFILL }},
4728 { &hf_GetSensorThresholds_datafield_UpperNonCriticalThreshold, {
4729 "upper non-critical threshold", "GetSensorThresholds.datafield.UpperNonCriticalThreshold",
4730 FT_UINT8, BASE_HEX, NULL, 0,
4731 "upper non-critical threshold", HFILL }},
4732 { &hf_GetSensorThresholds_datafield_UpperCriticalThreshold, {
4733 "upper critical threshold", "GetSensorThresholds.datafield.UpperCriticalThreshold",
4734 FT_UINT8, BASE_HEX, NULL, 0,
4735 "upper critical threshold", HFILL }},
4736 { &hf_GetSensorThresholds_datafield_UpperNonRecoverableThreshold, {
4737 "upper non-recoverable threshold", "GetSensorThresholds.datafield.UpperNonRecoverableThreshold",
4738 FT_UINT8, BASE_HEX, NULL, 0,
4739 "upper non-recoverable threshold", HFILL }},
4742 /* Data field of Get Sensor Reading command, added by lane */
4743 static hf_register_info hf_GetSensorReading_datafield[] = {
4744 { &hf_GetSensorReading_datafield_SensorNumber, {
4745 "Sensor Number", "GetSensorReading.datafield.SensorNumber",
4746 FT_UINT8, BASE_HEX, NULL, 0,
4747 "Sensor Number", HFILL }},
4748 { &hf_GetSensorReading_datafield_Sensorreading, {
4749 "Sensor Reading", "GetSensorReading.datafield.Sensorreading",
4750 FT_UINT8, BASE_HEX, NULL, 0,
4751 "Sensor Reading", HFILL }},
4752 { &hf_GetSensorReading_datafield_ResponseDataByte2_Bit7, {
4753 "Bit 7", "GetSensorReading.datafield.ResponseDataByte2.Bit7",
4754 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte2_Bit7_vals), 0x80,
4756 { &hf_GetSensorReading_datafield_ResponseDataByte2_Bit6, {
4757 "Bit 6", "GetSensorReading.datafield.ResponseDataByte2.Bit6",
4758 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte2_Bit6_vals), 0x40,
4760 { &hf_GetSensorReading_datafield_ResponseDataByte2_Bit5, {
4761 "Bit 5", "GetSensorReading.datafield.ResponseDataByte2.Bit5",
4762 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte2_Bit5_vals), 0x20,
4764 { &hf_GetSensorReading_datafield_ResponseDataByte2_Bit40, {
4765 "Bit 4...0 Reserved", "GetSensorReading.datafield.ResponseDataByte2.Bit5",
4766 FT_UINT8, BASE_HEX, NULL, 0x1f,
4767 "Bit 4...0 Reserved", HFILL }},
4768 { &hf_GetSensorReading_datafield_ResponseDataByte3_Bit7, {
4769 "Bit 7", "GetSensorReading.datafield.ResponseDataByte3.Bit7",
4770 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte3_Bit7_vals), 0x80,
4772 { &hf_GetSensorReading_datafield_ResponseDataByte3_Bit6, {
4773 "Bit 6", "GetSensorReading.datafield.ResponseDataByte3.Bit6",
4774 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte3_Bit6_vals), 0x40,
4776 { &hf_GetSensorReading_datafield_ResponseDataByte3_Bit5, {
4777 "Bit 5", "GetSensorReading.datafield.ResponseDataByte3.Bit5",
4778 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte3_Bit5_vals), 0x20,
4780 { &hf_GetSensorReading_datafield_ResponseDataByte3_Bit4, {
4781 "Bit 4", "GetSensorReading.datafield.ResponseDataByte3.Bit4",
4782 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte3_Bit4_vals), 0x10,
4784 { &hf_GetSensorReading_datafield_ResponseDataByte3_Bit3, {
4785 "Bit 3", "GetSensorReading.datafield.ResponseDataByte3.Bit3",
4786 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte3_Bit3_vals), 0x08,
4788 { &hf_GetSensorReading_datafield_ResponseDataByte3_Bit2, {
4789 "Bit 2", "GetSensorReading.datafield.ResponseDataByte3.Bit2",
4790 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte3_Bit2_vals), 0x04,
4792 { &hf_GetSensorReading_datafield_ResponseDataByte3_Bit1, {
4793 "Bit 1", "GetSensorReading.datafield.ResponseDataByte3.Bit1",
4794 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte3_Bit1_vals), 0x02,
4796 { &hf_GetSensorReading_datafield_ResponseDataByte3_Bit0, {
4797 "Bit 0", "GetSensorReading.datafield.ResponseDataByte3.Bit0",
4798 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte3_Bit0_vals), 0x01,
4800 { &hf_GetSensorReading_datafield_ResponseDataByte4_Bit7, {
4801 "Bit 7", "GetSensorReading.datafield.ResponseDataByte4.Bit7",
4802 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte4_Bit7_vals), 0x80,
4804 { &hf_GetSensorReading_datafield_ResponseDataByte4_Bit6, {
4805 "Bit 6", "GetSensorReading.datafield.ResponseDataByte4.Bit6",
4806 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte4_Bit6_vals), 0x40,
4808 { &hf_GetSensorReading_datafield_ResponseDataByte4_Bit5, {
4809 "Bit 5", "GetSensorReading.datafield.ResponseDataByte4.Bit5",
4810 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte4_Bit5_vals), 0x20,
4812 { &hf_GetSensorReading_datafield_ResponseDataByte4_Bit4, {
4813 "Bit 4", "GetSensorReading.datafield.ResponseDataByte4.Bit4",
4814 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte4_Bit4_vals), 0x10,
4816 { &hf_GetSensorReading_datafield_ResponseDataByte4_Bit3, {
4817 "Bit 3", "GetSensorReading.datafield.ResponseDataByte3.Bit3",
4818 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte4_Bit3_vals), 0x08,
4820 { &hf_GetSensorReading_datafield_ResponseDataByte4_Bit2, {
4821 "Bit 2", "GetSensorReading.datafield.ResponseDataByte4.Bit2",
4822 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte4_Bit2_vals), 0x04,
4824 { &hf_GetSensorReading_datafield_ResponseDataByte4_Bit1, {
4825 "Bit 1", "GetSensorReading.datafield.ResponseDataByte4.Bit1",
4826 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte4_Bit1_vals), 0x02,
4828 { &hf_GetSensorReading_datafield_ResponseDataByte4_Bit0, {
4829 "Bit 0", "GetSensorReading.datafield.ResponseDataByte4.Bit0",
4830 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte4_Bit0_vals), 0x01,
4832 { &hf_GetSensorReading_datafield_ResponseDataByte3_Bit76_threshold, {
4833 "Bit 7...6 Reserved", "GetSensorReading.datafield.ResponseDataByte3.Bit76_threshold",
4834 FT_UINT8, BASE_HEX, NULL, 0xc0,
4835 "Bit 7...6 Reserved", HFILL }},
4836 { &hf_GetSensorReading_datafield_ResponseDataByte3_Bit5_threshold, {
4837 "Bit 5", "GetSensorReading.datafield.ResponseDataByte3.Bit5_threshold",
4838 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte3_Bit5_threshold_vals), 0x20,
4840 { &hf_GetSensorReading_datafield_ResponseDataByte3_Bit4_threshold, {
4841 "Bit 4", "GetSensorReading.datafield.ResponseDataByte3.Bit4_threshold",
4842 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte3_Bit4_threshold_vals), 0x10,
4844 { &hf_GetSensorReading_datafield_ResponseDataByte3_Bit3_threshold, {
4845 "Bit 3", "GetSensorReading.datafield.ResponseDataByte3.Bit3_threshold",
4846 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte3_Bit3_threshold_vals), 0x08,
4848 { &hf_GetSensorReading_datafield_ResponseDataByte3_Bit2_threshold, {
4849 "Bit 2", "GetSensorReading.datafield.ResponseDataByte3.Bit2_threshold",
4850 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte3_Bit2_threshold_vals), 0x04,
4852 { &hf_GetSensorReading_datafield_ResponseDataByte3_Bit1_threshold, {
4853 "Bit 1", "GetSensorReading.datafield.ResponseDataByte3.Bit1_threshold",
4854 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte3_Bit1_threshold_vals), 0x02,
4856 { &hf_GetSensorReading_datafield_ResponseDataByte3_Bit0_threshold, {
4857 "Bit 0", "GetSensorReading.datafield.ResponseDataByte3.Bit0_threshold",
4858 FT_UINT8, BASE_HEX, VALS(cmd_GetSensorReading_data_ResponseDataByte3_Bit0_threshold_vals), 0x01,
4862 /********* APP, NetFN = 0x06 *********/
4864 /* Data field of Get Device ID command, added by lane */
4865 static hf_register_info hf_GetDeviceID_datafield[] = {
4866 { &hf_GetDeviceID_datafield_DeviceID, {
4867 "Device ID", "GetDeviceID.datafield.DeviceID",
4868 FT_UINT8, BASE_HEX, NULL, 0,
4869 "Device ID field", HFILL }},
4870 { &hf_GetDeviceID_datafield_DeviceSDR, {
4871 "Device SDR", "GetDeviceID.datafield.DeviceSDR",
4872 FT_UINT8, BASE_HEX, VALS(cmd_GetDeviceID_data_DeviceSDR_vals), 0x80,
4873 "Device SDR ", HFILL }},
4874 { &hf_GetDeviceID_datafield_DeviceRevision, {
4875 "Device Revision", "GetDeviceID.datafield.DeviceRevision",
4876 FT_UINT8, BASE_HEX, VALS(cmd_GetDeviceID_Data_DeviceRevision_vals), 0x0f,
4877 "Device Revision binary code", HFILL }},
4878 { &hf_GetDeviceID_datafield_DeviceAvailable, {
4879 "Device Available", "GetDeviceID.datafield.DeviceAvailable",
4880 FT_UINT8, BASE_HEX, VALS(cmd_GetDeviceID_data_DeviceAvailable_vals), 0x80,
4881 "Device Available", HFILL }},
4882 { &hf_GetDeviceID_datafield_MajorFirmwareRevision, {
4883 "Major Firmware Revision", "GetDeviceID.datafield.MajorFirmwareRevision",
4884 FT_UINT8, BASE_DEC, NULL, 0x7f,
4885 "Major Firmware Revision", HFILL }},
4886 { &hf_GetDeviceID_datafield_MinorFirmwareRevision, {
4887 "Minor Firmware Revision", "GetDeviceID.datafield.MinorFirmwareRevision",
4888 FT_UINT8, BASE_HEX, NULL, 0,
4889 "Minor Firmware Revision", HFILL }},
4890 { &hf_GetDeviceID_datafield_IPMIRevision, {
4891 "IPMI Revision", "GetDeviceID.datafield.IPMIRevision",
4892 FT_UINT8, BASE_HEX, VALS(cmd_GetDeviceID_Data_IPMIRevision_vals), 0,
4893 "IPMI Revision", HFILL }},
4894 { &hf_GetDeviceID_datafield_ADS_Chasis, {
4895 "Chasis Device", "GetDeviceID.datafield.Chasis",
4896 FT_UINT8, BASE_HEX, VALS(cmd_GetDeviceID_data_ADS_vals), 0x80,
4897 "Chasis Device", HFILL }},
4898 { &hf_GetDeviceID_datafield_ADS_Bridge, {
4899 "Bridge Device", "GetDeviceID.datafield.Bridge",
4900 FT_UINT8, BASE_HEX, VALS(cmd_GetDeviceID_data_ADS_vals), 0x40,
4901 "Bridge Device", HFILL }},
4902 { &hf_GetDeviceID_datafield_ADS_IPMBEventGenerator, {
4903 "IPMB Event Generator", "GetDeviceID.datafield.IPMBEventGenerator",
4904 FT_UINT8, BASE_HEX, VALS(cmd_GetDeviceID_data_ADS_vals), 0x20,
4905 "IPMB Event Generator", HFILL }},
4906 { &hf_GetDeviceID_datafield_ADS_IPMBEventReceiver, {
4907 "IPMB Event Receiver", "GetDeviceID.datafield.IPMBEventReceiver",
4908 FT_UINT8, BASE_HEX, VALS(cmd_GetDeviceID_data_ADS_vals), 0x10,
4909 "IPMB Event Receiver", HFILL }},
4910 { &hf_GetDeviceID_datafield_ADS_FRUInventoryDevice, {
4911 "FRU Inventory Device", "GetDeviceID.datafield.FRUInventoryDevice",
4912 FT_UINT8, BASE_HEX, VALS(cmd_GetDeviceID_data_ADS_vals), 0x08,
4913 "FRU Inventory Device", HFILL }},
4914 { &hf_GetDeviceID_datafield_ADS_SELDevice, {
4915 "SEL Device", "GetDeviceID.datafield.SELDevice",
4916 FT_UINT8, BASE_HEX, VALS(cmd_GetDeviceID_data_ADS_vals), 0x04,
4917 "SEL Device", HFILL }},
4918 { &hf_GetDeviceID_datafield_ADS_SDRRepositoryDevice, {
4919 "SDR Repository Device", "GetDeviceID.datafield.SDRRepositoryDevice",
4920 FT_UINT8, BASE_HEX, VALS(cmd_GetDeviceID_data_ADS_vals), 0x02,
4921 "SDR Repository Device", HFILL }},
4922 { &hf_GetDeviceID_datafield_ADS_SensorDevice, {
4923 "Sensor Device", "GetDeviceID.datafield.SensorDevice",
4924 FT_UINT8, BASE_HEX, VALS(cmd_GetDeviceID_data_ADS_vals), 0x01,
4925 "Sensor Device", HFILL }},
4926 { &hf_GetDeviceID_datafield_ManufactureID, {
4927 "Manufacture ID", "GetDeviceID.datafield.ManufactureID",
4928 FT_UINT24, BASE_HEX, NULL, 0,
4929 "Manufacture ID", HFILL }},
4930 { &hf_GetDeviceID_datafield_ProductID, {
4931 "Product ID", "GetDeviceID.datafield.ProductID",
4932 FT_UINT16, BASE_HEX, NULL, 0,
4933 "Product ID", HFILL }},
4934 { &hf_GetDeviceID_datafield_AFRI, {
4935 "Auxiliary Firmware Revision Infomation", "GetDeviceID.datafield.AuxiliaryFirmwareRevisionInfomation",
4936 FT_UINT32, BASE_HEX, NULL, 0,
4937 "Auxiliary Firmware Revision Infomation", HFILL }},
4939 /* Data field of Get Channel Authentication Capabilities command */
4940 static hf_register_info hf_Get_Ch_Auth_Cap_datafield[] = {
4941 { &hf_Get_Channel_Auth_Cap_channel_number, {
4942 "Channel number", "GetChannelAuthCap.resp.channelno",
4943 FT_UINT8, BASE_DEC, NULL, 0,
4944 "Channel number", HFILL }},
4945 { &hf_Get_Channel_Auth_Cap_comp_info, {
4946 "Compabillity information", "GetChannelAuthCap.resp.Auth_Cap_comp_info",
4947 FT_BOOLEAN,8, TFS(&ipmi_Auth_Cap_comp_val), 0x80,
4948 "Compabillity information", HFILL }},
4949 { &hf_Get_Channel_Auth_Cap_Auth_types_b5, {
4950 "OEM proprietary (per OEM identified by the IANA OEM ID in the RMCP Ping Response)", "GetChannelAuthCap.resp.auth_types_b4",
4951 FT_BOOLEAN,8, TFS(&ipmi_Authentication_Type_Support_val), 0x20,
4952 "OEM proprietary (per OEM identified by the IANA OEM ID in the RMCP Ping Response)", HFILL }},
4953 { &hf_Get_Channel_Auth_Cap_Auth_types_b4, {
4954 "Straight password / key", "GetChannelAuthCap.resp.auth_types_b4",
4955 FT_BOOLEAN,8, TFS(&ipmi_Authentication_Type_Support_val), 0x10,
4956 "Straight password / key", HFILL }},
4957 { &hf_Get_Channel_Auth_Cap_Auth_types_b2, {
4958 "MD5", "GetChannelAuthCap.resp.auth_types_b2",
4959 FT_BOOLEAN,8, TFS(&ipmi_Authentication_Type_Support_val), 0x04,
4961 { &hf_Get_Channel_Auth_Cap_Auth_types_b1, {
4962 "MD2", "GetChannelAuthCap.resp.auth_types_b1",
4963 FT_BOOLEAN,8, TFS(&ipmi_Authentication_Type_Support_val), 0x02,
4965 { &hf_Get_Channel_Auth_Cap_Auth_types_b0, {
4966 "None", "GetChannelAuthCap.resp.auth_types_b0",
4967 FT_BOOLEAN,8, TFS(&ipmi_Authentication_Type_Support_val), 0x01,
4969 { &hf_Get_Channel_Auth_Cap_Auth_KG_status, {
4970 "KG status", "GetChannelAuthCap.resp.auth_types_b0",
4971 FT_BOOLEAN,8, TFS(&ipmi_Authentication_Type_KG_status_val), 0x20,
4972 "KG status (two-key login status)", HFILL }},
4973 { &hf_Get_Channel_Auth_Cap_per_mess_auth_status, {
4974 "Per-message Authentication is enabled", "GetChannelAuthCap.resp.per_mess_auth_status",
4975 FT_BOOLEAN,8, TFS(&ipmi_Authentication_Type_per_mess_auth_status_val), 0x10,
4976 "Per-message Authentication is enabled", HFILL }},
4977 { &hf_Get_Channel_Auth_Cap_user_level_auth_status, {
4978 "User Level Authentication status", "GetChannelAuthCap.resp.user_level_auth_status",
4979 FT_BOOLEAN,8, TFS(&ipmi_Authentication_Type_user_level_auth_status_val), 0x08,
4980 "User Level Authentication status", HFILL }},
4981 { &hf_Get_Channel_Auth_Cap_anonymouslogin_status_b2, {
4982 "Non-null usernames enabled", "GetChannelAuthCap.resp.anonymouslogin_status_b2",
4983 FT_BOOLEAN,8, NULL, 0x04,
4984 "Non-null usernames enabled", HFILL }},
4985 { &hf_Get_Channel_Auth_Cap_anonymouslogin_status_b1, {
4986 "Null usernames enabled", "GetChannelAuthCap.resp.anonymouslogin_status_b1",
4987 FT_BOOLEAN,8, NULL, 0x02,
4988 "Null usernames enabled", HFILL }},
4989 { &hf_Get_Channel_Auth_Cap_anonymouslogin_status_b0, {
4990 "Anonymous Login enabled", "GetChannelAuthCap.resp.anonymouslogin_status_b0",
4991 FT_BOOLEAN,8, NULL, 0x01,
4992 "Anonymous Login enabled", HFILL }},
4993 { &hf_Get_Channel_Auth_Cap_ext_cap_b1, {
4994 "Channel supports IPMI v2.0 connections", "GetChannelAuthCap.resp.ext_cap_b1",
4995 FT_BOOLEAN,8, NULL, 0x02,
4996 "Channel supports IPMI v2.0 connections", HFILL }},
4997 { &hf_Get_Channel_Auth_Cap_ext_cap_b0, {
4998 "Channel supports IPMI v1.5 connections", "GetChannelAuthCap.resp.ext_cap_b0",
4999 FT_BOOLEAN,8, NULL, 0x01,
5000 "Channel supports IPMI v1.5 connections", HFILL }},
5001 { &hf_Get_Channel_Auth_OEM_ID, {
5002 "OEM ID", "GetChannelAuthCap.resp.oemid",
5003 FT_UINT24, BASE_HEX, NULL, 0,
5005 { &hf_Get_Channel_Auth_OEM_AUX, {
5006 "OEM auxiliary data", "GetChannelAuthCap.resp.oemaux",
5007 FT_UINT8, BASE_HEX, NULL, 0,
5008 "OEM auxiliary data.", HFILL }},
5010 { &hf_Get_Channel_Auth_Cap_datafield_comp_info, {
5011 "Compabillity information", "GetChannelAuthCap.datafield.compinfo",
5012 FT_BOOLEAN,8, TFS(&ipmi_Auth_Cap_datafield_comp_val), 0x80,
5013 "Compabillity information", HFILL }},
5014 { &hf_Get_Channel_Auth_Cap_datafield_channel_number, {
5015 "Channel number", "GetChannelAuthCap.datafield.channelno",
5016 FT_UINT8, BASE_DEC, VALS(GetChannelAuthCap_channelno_vals), 0xf,
5017 "Channel number", HFILL }},
5018 { &hf_Get_Channel_Auth_Cap_datafield_max_priv_lev, {
5019 "Requested Maximum Privilege Level", "GetChannelAuthCap.datafield.max_priv_lev",
5020 FT_UINT8, BASE_DEC, VALS(GetChannelAuthCap_max_priv_lev_vals), 0xf,
5021 "Requested Maximum Privilege Level", HFILL }},
5024 /********* Storage, NetFN = 0x0a *********/
5026 /* Data field of Get FRU Inventory Area Info, added by lane */
5027 static hf_register_info hf_GetFRUInventoryAreaInfo_datafield[] = {
5028 { &hf_GetFRUInventoryAreaInfo_datafield_FRUDeviceID, {
5029 "FRU Device ID", "GetFRUInventoryAreaInfo.datafield.ReservationID",
5030 FT_UINT8, BASE_HEX, NULL, 0,
5031 "FRU Device ID", HFILL }},
5032 { &hf_GetFRUInventoryAreaInfo_datafield_FRUInventoryAreaSize, {
5033 "FRU Inventory area size in bytes", "GetFRUInventoryAreaInfo.datafield.FRUInventoryAreaSize",
5034 FT_UINT16, BASE_HEX, NULL, 0,
5035 "FRU Inventory area size in bytes", HFILL }},
5036 { &hf_GetFRUInventoryAreaInfo_datafield_ResponseDataByte4_Bit71, {
5037 "Reserved", "GetFRUInventoryAreaInfo.datafield.ResponseDataByte4.Bit71",
5038 FT_UINT8, BASE_HEX, NULL, 0xfe,
5039 "Reserved", HFILL }},
5040 { &hf_GetFRUInventoryAreaInfo_datafield_ResponseDataByte4_Bit0, {
5041 "Device is accessed by bytes or words ?", "GetFRUInventoryAreaInfo.datafield.ResponseDataByte4.Bit0",
5042 FT_UINT8, BASE_HEX, VALS(cmd_GetFRUInventoryAreaInfo_Data_ResponseDataByte4_Bit0_vals), 0x01,
5043 "Device is accessed by bytes or words ?", HFILL }},
5046 /* Data field of Get SEL Info command, added by lane */
5047 static hf_register_info hf_GetSELInfo_datafield[] = {
5048 { &hf_GetSELInfo_datafield_SELVersion, {
5049 "SEL Version", "GetSELInfo.datafield.SELVersion",
5050 FT_UINT8, BASE_HEX, VALS(cmd_GetSELInfo_Data_SELVersion_vals), 0,
5051 "SEL Version", HFILL }},
5052 { &hf_GetSELInfo_datafield_Entries, {
5053 "Number of log entries in SEL", "GetSELInfo.datafield.Entries",
5054 FT_UINT16, BASE_HEX, NULL, 0,
5055 "Number of log entries in SEL", HFILL }},
5056 { &hf_GetSELInfo_datafield_FreeSpace, {
5057 "Free Space in bytes", "GetSELInfo.datafield.FreeSpace",
5058 FT_UINT16, BASE_HEX, NULL, 0,
5059 "Free Space in bytes", HFILL }},
5060 { &hf_GetSELInfo_datafield_AdditionTimestamp, {
5061 "Most recent addition timestamp", "GetSELInfo.datafield.AdditionTimestamp",
5062 FT_UINT32, BASE_HEX, NULL, 0,
5063 "Most recent addition timestamp", HFILL }},
5064 { &hf_GetSELInfo_datafield_EraseTimestamp, {
5065 "Most recent erase timestamp", "GetSELInfo.datafield.EraseTimestamp",
5066 FT_UINT32, BASE_HEX, NULL, 0,
5067 "Most recent erase timestamp", HFILL }},
5068 { &hf_GetSELInfo_datafield_OperationSupport_Bit7, {
5069 "Overflow Flag", "GetSELInfo.datafield.OperationSupport.Bit7",
5070 FT_UINT8, BASE_HEX, VALS(cmd_GetSELInfo_Data_OperationSupport_Bit7_vals), 0x80,
5071 "Overflow Flag", HFILL }},
5072 { &hf_GetSELInfo_datafield_OperationSupport_Reserved, {
5073 "Reserved", "GetSELInfo.datafield.OperationSupport.Reserved",
5074 FT_UINT8, BASE_HEX, NULL, 0x70,
5075 "Reserved", HFILL }},
5076 { &hf_GetSELInfo_datafield_OperationSupport_Bit3, {
5077 "Delete SEL command supported ?", "GetSELInfo.datafield.OperationSupport.Bit3",
5078 FT_UINT8, BASE_HEX, VALS(cmd_GetSELInfo_Data_OperationSupport_Bit3to0_vals), 0x08,
5079 "Delete SEL command supported ?", HFILL }},
5080 { &hf_GetSELInfo_datafield_OperationSupport_Bit2, {
5081 "Partial Add SEL Entry command supported ?", "GetSELInfo.datafield.OperationSupport.Bit2",
5082 FT_UINT8, BASE_HEX, VALS(cmd_GetSELInfo_Data_OperationSupport_Bit3to0_vals), 0x04,
5083 "Partial Add SEL Entry command supported ?", HFILL }},
5084 { &hf_GetSELInfo_datafield_OperationSupport_Bit1, {
5085 "Reserve SEL command supported ?", "GetSELInfo.datafield.OperationSupport.Bit1",
5086 FT_UINT8, BASE_HEX, VALS(cmd_GetSELInfo_Data_OperationSupport_Bit3to0_vals), 0x02,
5087 "Reserve SEL command supported ?", HFILL }},
5088 { &hf_GetSELInfo_datafield_OperationSupport_Bit0, {
5089 "Get SEL Allocation Information command supported ?", "GetSELInfo.datafield.OperationSupport.Bit0",
5090 FT_UINT8, BASE_HEX, VALS(cmd_GetSELInfo_Data_OperationSupport_Bit3to0_vals), 0x01,
5091 "Get SEL Allocation Information command supported ?", HFILL }},
5094 /* Data field of Reserve SEL command, added by lane */
5095 static hf_register_info hf_ReserveSEL_datafield[] = {
5096 { &hf_ReserveSEL_datafield_ReservationID, {
5097 "Reservation ID", "GetSELInfo.datafield.ReservationID",
5098 FT_UINT16, BASE_HEX, NULL, 0,
5099 "Reservation ID", HFILL }},
5102 /* Data field of Get SEL Entry command, added by lane */
5103 static hf_register_info hf_GetSELEntry_datafield[] = {
5104 { &hf_GetSELEntry_datafield_ReservationID, {
5105 "Reservation ID", "GetSELEntry.datafield.ReservationID",
5106 FT_UINT16, BASE_HEX, NULL, 0,
5107 "Reservation ID", HFILL }},
5108 { &hf_GetSELEntry_datafield_SELRecordID, {
5109 "SEL Record ID", "GetSELEntry.datafield.SELRecordID",
5110 FT_UINT16, BASE_HEX, NULL, 0,
5111 "SEL Record ID", HFILL }},
5112 { &hf_GetSELEntry_datafield_OffsetIntoRecord, {
5113 "Offset into record", "GetSELEntry.datafield.OffsetIntoRecord",
5114 FT_UINT8, BASE_HEX, NULL, 0,
5115 "Offset into record", HFILL }},
5116 { &hf_GetSELEntry_datafield_BytesToRead, {
5117 "Bytes to read", "GetSELEntry.datafield.BytesToRead",
5118 FT_UINT8, BASE_HEX, NULL, 0,
5119 "Bytes to read", HFILL }},
5120 { &hf_GetSELEntry_datafield_NextSELRecordID, {
5121 "Next SEL Record ID", "GetSELEntry.datafield.NextSELRecordID",
5122 FT_UINT16, BASE_HEX, NULL, 0,
5123 "Next SEL Record ID", HFILL }},
5126 /* Data field of Clear SEL command, added by lane */
5127 static hf_register_info hf_ClearSEL_datafield[] = {
5128 { &hf_ClearSEL_datafield_ReservationID, {
5129 "Reservation ID", "ClearSEL.datafield.ReservationID",
5130 FT_UINT16, BASE_HEX, NULL, 0,
5131 "Reservation ID", HFILL }},
5132 { &hf_ClearSEL_datafield_Byte3, {
5133 "'C' (0x43)", "ClearSEL.datafield.SELRecordID",
5134 FT_UINT8, BASE_HEX, NULL, 0,
5135 "'C' (0x43)", HFILL }},
5136 { &hf_ClearSEL_datafield_Byte4, {
5137 "'L' (0x4C)", "ClearSEL.datafield.OffsetIntoRecord",
5138 FT_UINT8, BASE_HEX, NULL, 0,
5139 "'L' (0x4C)", HFILL }},
5140 { &hf_ClearSEL_datafield_Byte5, {
5141 "'R' (0x52)", "ClearSEL.datafield.BytesToRead",
5142 FT_UINT8, BASE_HEX, NULL, 0,
5143 "'R' (0x52)", HFILL }},
5144 { &hf_ClearSEL_datafield_Byte6, {
5145 "Action for Clear SEL", "ClearSEL.datafield.NextSELRecordID",
5146 FT_UINT8, BASE_HEX, VALS(cmd_ClearSEL_Data_Byte6_vals), 0,
5147 "Action for Clear SEL", HFILL }},
5148 { &hf_ClearSEL_datafield_ErasureProgress_Reserved, {
5149 "Reserved", "ClearSEL.datafield.ErasureProgress.Reserved",
5150 FT_UINT8, BASE_HEX, NULL, 0xf0,
5151 "Reserved", HFILL }},
5152 { &hf_ClearSEL_datafield_ErasureProgress_EraProg, {
5153 "Erasure Progress", "ClearSEL.datafield.ErasureProgress.EraProg",
5154 FT_UINT8, BASE_HEX, VALS(cmd_ClearSEL_Data_ErasureProgress_EraProg_vals), 0x0f,
5155 "Erasure Progress", HFILL }},
5159 /********* PICMG, NetFN = 0x2c *********/
5161 /* Data field of Get PICMG Properties command, added by lane */
5162 static hf_register_info hf_GetPICMGProperties_datafield[] = {
5163 { &hf_GetPICMGProperties_datafield_PICMGIdentifier, {
5164 "PICMG Identifier", "GetPICMGProperties.datafield.PICMGIdentifier",
5165 FT_UINT8, BASE_HEX, NULL, 0,
5166 "PICMG Identifier", HFILL }},
5167 { &hf_GetPICMGProperties_datafield_PICMGExtensionVersion, {
5168 "PICMG Extension Version", "GetPICMGProperties.datafield.PICMGExtensionVersion",
5169 FT_UINT8, BASE_HEX, VALS(cmd_GetPICMGProperties_data_PICMGExtensionVersion_vals), 0,
5170 "PICMG Extension Version", HFILL }},
5171 { &hf_GetPICMGProperties_datafield_MaxFRUDeviceID, {
5172 "Max FRU Device ID", "GetPICMGProperties.datafield.MaxFRUDeviceID",
5173 FT_UINT8, BASE_HEX, NULL, 0,
5174 "Max FRU Device ID", HFILL }},
5175 { &hf_GetPICMGProperties_datafield_FRUDeviceIDforIPMController, {
5176 "FRU Device ID for IPM Controller", "GetPICMGProperties.datafield.FRUDeviceIDforIPMController",
5177 FT_UINT8, BASE_HEX, NULL, 0,
5178 "FRU Device ID for IPM Controller", HFILL }},
5181 /* Data field of FRU Control command, added by lane */
5182 static hf_register_info hf_FRUControl_datafield[] = {
5183 { &hf_FRUControl_datafield_PICMGIdentifier, {
5184 "PICMG Identifier", "FRUControl.datafield.PICMGIdentifier",
5185 FT_UINT8, BASE_HEX, NULL, 0,
5186 "PICMG Identifier", HFILL }},
5187 { &hf_FRUControl_datafield_FRUDeviceID, {
5188 "FRU Device ID", "FRUControl.datafield.FRUDeviceID",
5189 FT_UINT8, BASE_HEX, NULL, 0,
5190 "FRU Device ID", HFILL }},
5191 { &hf_FRUControl_datafield_FRUControlOption, {
5192 "FRU Control Option", "FRUControl.datafield.FRUControlOption",
5193 FT_UINT8, BASE_HEX, VALS(cmd_FRUControl_data_FRUControlOption_vals), 0,
5194 "FRU Control Option", HFILL }},
5197 /* Data field of Get FRU Led Properties command, added by lane */
5198 static hf_register_info hf_GetFRULedProperties_datafield[] = {
5199 { &hf_GetFRULedProperties_datafield_PICMGIdentifier, {
5200 "PICMG Identifier", "GetFRULedProperties.datafield.PICMGIdentifier",
5201 FT_UINT8, BASE_HEX, NULL, 0,
5202 "PICMG Identifier", HFILL }},
5203 { &hf_GetFRULedProperties_datafield_FRUDeviceID, {
5204 "FRU Device ID", "GetFRULedProperties.datafield.FRUDeviceID",
5205 FT_UINT8, BASE_HEX, NULL, 0,
5206 "FRU Device ID", HFILL }},
5207 { &hf_GetFRULedProperties_datafield_LedProperties_Reserved, {
5208 "Reserved", "GetFRULedProperties.datafield.LedProperties.Reserved",
5209 FT_UINT8, BASE_HEX, NULL, 0xf0,
5210 "Reserved", HFILL }},
5211 { &hf_GetFRULedProperties_datafield_LedProperties_LED3, {
5212 "LED3", "GetFRULedProperties.datafield.LedProperties.LED3",
5213 FT_UINT8, BASE_HEX, VALS(cmd_GetFRULedProperties_data_LedProperties_LED3_vals), 0x08,
5215 { &hf_GetFRULedProperties_datafield_LedProperties_LED2, {
5216 "LED2", "GetFRULedProperties.datafield.LedProperties.LED2",
5217 FT_UINT8, BASE_HEX, VALS(cmd_GetFRULedProperties_data_LedProperties_LED2_vals), 0x04,
5219 { &hf_GetFRULedProperties_datafield_LedProperties_LED1, {
5220 "LED1", "GetFRULedProperties.datafield.LedProperties.LED1",
5221 FT_UINT8, BASE_HEX, VALS(cmd_GetFRULedProperties_data_LedProperties_LED1_vals), 0x02,
5223 { &hf_GetFRULedProperties_datafield_LedProperties_BlueLED, {
5224 "BlueLED", "GetFRULedProperties.datafield.LedProperties.BlueLED",
5225 FT_UINT8, BASE_HEX, VALS(cmd_GetFRULedProperties_data_LedProperties_BLUELED_vals), 0x01,
5226 "BlueLED", HFILL }},
5227 { &hf_GetFRULedProperties_datafield_ApplicationSpecificLEDCount, {
5228 "Application Specific LED Count", "GetFRULedProperties.datafield.ApplicationSpecificLEDCount",
5229 FT_UINT8, BASE_HEX, NULL, 0,
5230 "Application Specific LED Count", HFILL }},
5233 /* Data field of Get Led Color Capabilities command, added by lane */
5234 static hf_register_info hf_GetLedColorCapabilities_datafield[] = {
5235 { &hf_GetLedColorCapabilities_datafield_PICMGIdentifier, {
5236 "PICMG Identifier", "GetLedColorCapabilities.datafield.PICMGIdentifier",
5237 FT_UINT8, BASE_HEX, NULL, 0,
5238 "PICMG Identifier", HFILL }},
5239 { &hf_GetLedColorCapabilities_datafield_FRUDeviceID, {
5240 "FRU Device ID", "GetLedColorCapabilities.datafield.FRUDeviceID",
5241 FT_UINT8, BASE_HEX, NULL, 0,
5242 "FRU Device ID", HFILL }},
5243 { &hf_GetLedColorCapabilities_datafield_LEDID, {
5244 "LED ID", "GetLedColorCapabilities.datafield.LEDID",
5245 FT_UINT8, BASE_HEX, NULL, 0,
5247 /* LED Color Capabilities */
5248 { &hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_Reserved_7, {
5249 "Reserved", "GetLedColorCapabilities.datafield.LEDColorCapabilities.Reserved.bit7",
5250 FT_UINT8, BASE_HEX, NULL, 0x80,
5251 "Reserved", HFILL }},
5252 { &hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_WHITE, {
5253 "LED Support WHITE ?", "GetLedColorCapabilities.datafield.LEDColorCapabilities.WHITE",
5254 FT_UINT8, BASE_HEX, VALS(cmd_GetLedColorCapabilities_data_LEDColorCapabilities_vals), 0x40,
5255 "LED Support WHITE ?", HFILL }},
5256 { &hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_ORANGE, {
5257 "LED Support ORANGE ?", "GetLedColorCapabilities.datafield.LEDColorCapabilities.ORANGE",
5258 FT_UINT8, BASE_HEX, VALS(cmd_GetLedColorCapabilities_data_LEDColorCapabilities_vals), 0x20,
5259 "LED Support ORANGE ?", HFILL }},
5260 { &hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_AMBER, {
5261 "LED Support AMBER ?", "GetLedColorCapabilities.datafield.LEDColorCapabilities.AMBER",
5262 FT_UINT8, BASE_HEX, VALS(cmd_GetLedColorCapabilities_data_LEDColorCapabilities_vals), 0x10,
5263 "LED Support AMBER ?", HFILL }},
5264 { &hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_GREEN, {
5265 "LED Support GREEN ?", "GetLedColorCapabilities.datafield.LEDColorCapabilities.GREEN",
5266 FT_UINT8, BASE_HEX, VALS(cmd_GetLedColorCapabilities_data_LEDColorCapabilities_vals), 0x08,
5267 "LED Support GREEN ?", HFILL }},
5268 { &hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_RED, {
5269 "LED Support RED ?", "GetLedColorCapabilities.datafield.LEDColorCapabilities.RED",
5270 FT_UINT8, BASE_HEX, VALS(cmd_GetLedColorCapabilities_data_LEDColorCapabilities_vals), 0x04,
5271 "LED Support RED ?", HFILL }},
5272 { &hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_BLUE, {
5273 "LED Support BLUE ?", "GetLedColorCapabilities.datafield.LEDColorCapabilities.BLUE",
5274 FT_UINT8, BASE_HEX, VALS(cmd_GetLedColorCapabilities_data_LEDColorCapabilities_vals), 0x02,
5275 "LED Support BLUE ?", HFILL }},
5276 { &hf_GetLedColorCapabilities_datafield_LEDColorCapabilities_Reserved_0, {
5277 "Reserved", "GetLedColorCapabilities.datafield.LEDColorCapabilities.Reserved.bit0",
5278 FT_UINT8, BASE_HEX, NULL, 0x01,
5279 "Reserved", HFILL }},
5280 /* Default LED Color in Local Control State*/
5281 { &hf_GetLedColorCapabilities_datafield_DefaultLEDColorLocalControl_Reserved_74, {
5282 "Reserved", "GetLedColorCapabilities.datafield.DefaultLEDColorLocalControl.Reserved.bit7-4",
5283 FT_UINT8, BASE_HEX, NULL, 0xf0,
5284 "Reserved", HFILL }},
5285 { &hf_GetLedColorCapabilities_datafield_DefaultLEDColorLocalControl_Color, {
5286 "Default LED Color (Local Control State)", "GetLedColorCapabilities.datafield.DefaultLEDColorLocalControl.Color",
5287 FT_UINT8, BASE_HEX, VALS(cmd_GetLedColorCapabilities_data_DefaultLEDColor_vals), 0x0f,
5288 "Default LED Color (Local Control State)", HFILL }},
5289 /* Default LED Color in Override State */
5290 { &hf_GetLedColorCapabilities_datafield_DefaultLEDColorOverride_Reserved_74, {
5291 "Reserved", "GetLedColorCapabilities.datafield.DefaultLEDColorOverride.Reserved.bit7-4",
5292 FT_UINT8, BASE_HEX, NULL, 0xf0,
5293 "Reserved", HFILL }},
5294 { &hf_GetLedColorCapabilities_datafield_DefaultLEDColorOverride_Color, {
5295 "Default LED Color (Override State)", "GetLedColorCapabilities.datafield.DefaultLEDColorOverride.Color",
5296 FT_UINT8, BASE_HEX, VALS(cmd_GetLedColorCapabilities_data_DefaultLEDColor_vals), 0x0f,
5297 "Default LED Color (Override State)", HFILL }},
5300 /* Data field of Set FRU Led State, added by lane */
5301 static hf_register_info hf_SetFRULedState_datafield[] = {
5302 { &hf_SetFRULedState_datafield_PICMGIdentifier, {
5303 "PICMG Identifier", "SetFRULedState.datafield.PICMGIdentifier",
5304 FT_UINT8, BASE_HEX, NULL, 0,
5305 "PICMG Identifier", HFILL }},
5306 { &hf_SetFRULedState_datafield_FRUDeviceID, {
5307 "FRU Device ID", "SetFRULedState.datafield.FRUDeviceID",
5308 FT_UINT8, BASE_HEX, NULL, 0,
5309 "FRU Device ID", HFILL }},
5310 { &hf_SetFRULedState_datafield_LEDID, {
5311 "LED ID", "SetFRULedState.datafield.LEDID",
5312 FT_UINT8, BASE_HEX, VALS(cmd_SetFRULedState_data_LEDID_vals), 0,
5314 { &hf_SetFRULedState_datafield_LEDFunction, {
5315 "LED Function", "SetFRULedState.datafield.LEDFunction",
5316 FT_UINT8, BASE_HEX, VALS(cmd_SetFRULedState_data_LEDFunction_vals), 0,
5317 "LED Function", HFILL }},
5318 { &hf_SetFRULedState_datafield_Offduration, {
5319 "Off-duration", "SetFRULedState.datafield.Offduration",
5320 FT_UINT8, BASE_HEX, NULL, 0,
5321 "Off-duration", HFILL }},
5322 { &hf_SetFRULedState_datafield_Onduration, {
5323 "On-duration", "SetFRULedState.datafield.Onduration",
5324 FT_UINT8, BASE_HEX, NULL, 0,
5325 "On-duration", HFILL }},
5326 { &hf_SetFRULedState_datafield_Color_Reserved, {
5327 "Bit 7...4 Reserved", "SetFRULedState.datafield.Color.Reserved",
5328 FT_UINT8, BASE_HEX, NULL, 0xf0,
5329 "Bit 7...4 Reserved", HFILL }},
5330 { &hf_SetFRULedState_datafield_Color_ColorVal, {
5331 "Color", "SetFRULedState.datafield.Color.ColorVal",
5332 FT_UINT8, BASE_HEX, VALS(cmd_SetFRULedState_data_Color_ColorVal_vals), 0x0f,
5336 /* Data field of Get FRU Led State, added by lane */
5337 static hf_register_info hf_GetFRULedState_datafield[] = {
5338 { &hf_GetFRULedState_datafield_PICMGIdentifier, {
5339 "PICMG Identifier", "GetFRULedState.datafield.PICMGIdentifier",
5340 FT_UINT8, BASE_HEX, NULL, 0,
5341 "PICMG Identifier", HFILL }},
5342 { &hf_GetFRULedState_datafield_FRUDeviceID, {
5343 "FRU Device ID", "GetFRULedState.datafield.FRUDeviceID",
5344 FT_UINT8, BASE_HEX, NULL, 0,
5345 "FRU Device ID", HFILL }},
5346 { &hf_GetFRULedState_datafield_LEDID, {
5347 "LED ID", "GetFRULedState.datafield.LEDID",
5348 FT_UINT8, BASE_HEX, VALS(cmd_GetFRULedState_data_LEDID_vals), 0,
5350 { &hf_GetFRULedState_datafield_LEDState_Reserved, {
5351 "Bit 7...3 Reserved", "GetFRULedState.datafield.LEDFunction",
5352 FT_UINT8, BASE_HEX, NULL, 0xf8,
5353 "Bit 7...3 Reserved", HFILL }},
5354 { &hf_GetFRULedState_datafield_LEDState_Bit2, {
5355 "Lamp Test", "GetFRULedState.datafield.LEDState.Bit2",
5356 FT_UINT8, BASE_HEX, VALS(cmd_GetFRULedState_data_LEDState_Bit21_vals), 0x04,
5357 "Lamp Test", HFILL }},
5358 { &hf_GetFRULedState_datafield_LEDState_Bit1, {
5359 "Override State", "GetFRULedState.datafield.LEDState.Bit1",
5360 FT_UINT8, BASE_HEX, VALS(cmd_GetFRULedState_data_LEDState_Bit21_vals), 0x02,
5361 "Override State", HFILL }},
5362 { &hf_GetFRULedState_datafield_LEDState_Bit0, {
5363 "IPM Controller has a Local Control State ?", "GetFRULedState.datafield.LEDState.Bit0",
5364 FT_UINT8, BASE_HEX, VALS(cmd_GetFRULedState_data_LEDState_Bit0_vals), 0x01,
5365 "IPM Controller has a Local Control State ?", HFILL }},
5366 { &hf_GetFRULedState_datafield_LocalControlLEDFunction, {
5367 "Local Control LED Function", "GetFRULedState.datafield.LocalControlLEDFunction",
5368 FT_UINT8, BASE_HEX, VALS(cmd_GetFRULedState_data_LocalControlLEDFunction_vals), 0,
5369 "Local Control LED Function", HFILL }},
5370 { &hf_GetFRULedState_datafield_LocalControlOffduration, {
5371 "Local Control Off-duration", "GetFRULedState.datafield.LocalControlOffduration",
5372 FT_UINT8, BASE_HEX, NULL, 0,
5373 "Local Control Off-duration", HFILL }},
5374 { &hf_GetFRULedState_datafield_LocalControlOnduration, {
5375 "Local Control On-duration", "GetFRULedState.datafield.LocalControlOnduration",
5376 FT_UINT8, BASE_HEX, NULL, 0,
5377 "Local Control On-duration", HFILL }},
5378 { &hf_GetFRULedState_datafield_LocalControlColor_Reserved, {
5379 "Bit 7...4 Reserved", "GetFRULedState.datafield.LocalControlColor.Reserved",
5380 FT_UINT8, BASE_HEX, NULL, 0xf0,
5381 "Bit 7...4 Reserved", HFILL }},
5382 { &hf_GetFRULedState_datafield_LocalControlColor_ColorVal, {
5383 "Color", "GetFRULedState.datafield.LocalControlColor.ColorVal",
5384 FT_UINT8, BASE_HEX, VALS(cmd_GetFRULedState_data_ColorVal_vals), 0x0f,
5386 { &hf_GetFRULedState_datafield_OverrideStateLEDFunction, {
5387 "Override State LED Function", "GetFRULedState.datafield.OverrideStateLEDFunction",
5388 FT_UINT8, BASE_HEX, VALS(cmd_GetFRULedState_data_OverrideStateLEDFunction_vals), 0,
5389 "Override State LED Function", HFILL }},
5390 { &hf_GetFRULedState_datafield_OverrideStateOffduration, {
5391 "Override State Off-duration", "GetFRULedState.datafield.OverrideStateOffduration",
5392 FT_UINT8, BASE_HEX, NULL, 0,
5393 "Override State Off-duration", HFILL }},
5394 { &hf_GetFRULedState_datafield_OverrideStateOnduration, {
5395 "Override State On-duration", "GetFRULedState.datafield.OverrideStateOnduration",
5396 FT_UINT8, BASE_HEX, NULL, 0,
5397 "Override State On-duration", HFILL }},
5398 { &hf_GetFRULedState_datafield_OverrideStateColor_Reserved, {
5399 "Bit 7...4 Reserved", "GetFRULedState.datafield.OverrideStateColor.Reserved",
5400 FT_UINT8, BASE_HEX, NULL, 0xf0,
5401 "Bit 7...4 Reserved", HFILL }},
5402 { &hf_GetFRULedState_datafield_OverrideStateColor_ColorVal, {
5403 "Color", "GetFRULedState.datafield.OverrideStateColor.ColorVal",
5404 FT_UINT8, BASE_HEX, VALS(cmd_GetFRULedState_data_ColorVal_vals), 0x0f,
5406 { &hf_GetFRULedState_datafield_LampTestDuration, {
5407 "Lamp Test Duration", "GetFRULedState.datafield.LampTestDuration",
5408 FT_UINT8, BASE_HEX, NULL, 0,
5409 "Lamp Test Duration", HFILL }},
5412 /* Data field of Set FRU Activation command, added by lane */
5413 static hf_register_info hf_SetFRUActivation_datafield[] = {
5414 { &hf_SetFRUActivation_datafield_PICMGIdentifier, {
5415 "PICMG Identifier", "SetFRUActivation.datafield.PICMGIdentifier",
5416 FT_UINT8, BASE_HEX, NULL, 0,
5417 "PICMG Identifier", HFILL }},
5418 { &hf_SetFRUActivation_datafield_FRUDeviceID, {
5419 "FRU Device ID", "SetFRUActivation.datafield.FRUDeviceID",
5420 FT_UINT8, BASE_HEX, NULL, 0,
5421 "FRU Device ID", HFILL }},
5422 { &hf_SetFRUActivation_datafield_FRUActivationDeactivation, {
5423 "FRU Activation/Deactivation", "SetFRUActivation.datafield.FRUActivationDeactivation",
5424 FT_UINT8, BASE_HEX, VALS(cmd_SetFRUActivation_data_FRUActivationDeactivation_vals), 0,
5425 "FRU Activation/Deactivation", HFILL }},
5428 /* Data field of Set FRU Activation Policy command, added by lane */
5429 static hf_register_info hf_SetFRUActivationPolicy_datafield[] = {
5430 { &hf_SetFRUActivationPolicy_datafield_PICMGIdentifier, {
5431 "PICMG Identifier", "SetFRUActivationPolicy.datafield.PICMGIdentifier",
5432 FT_UINT8, BASE_HEX, NULL, 0,
5433 "PICMG Identifier", HFILL }},
5434 { &hf_SetFRUActivationPolicy_datafield_FRUDeviceID, {
5435 "FRU Device ID", "SetFRUActivationPolicy.datafield.FRUDeviceID",
5436 FT_UINT8, BASE_HEX, NULL, 0,
5437 "FRU Device ID", HFILL }},
5438 { &hf_SetFRUActivationPolicy_datafield_FRUActivationPolicyMaskBit_Bit72, {
5439 "Bit 7...2 Reserverd", "SetFRUActivationPolicy.datafield.FRUActivationPolicyMaskBit.Bit72",
5440 FT_UINT8, BASE_HEX, NULL, 0xfc,
5441 "Bit 7...2 Reserverd", HFILL }},
5442 { &hf_SetFRUActivationPolicy_datafield_FRUActivationPolicyMaskBit_Bit1, {
5443 "Bit 1", "SetFRUActivationPolicy.datafield.FRUActivationPolicyMaskBit.Bit1",
5444 FT_UINT8, BASE_HEX, VALS(cmd_SetFRUActivationPolicy_data_PFRUActivationPolicyMaskBit_Bit1_vals), 0x02,
5446 { &hf_SetFRUActivationPolicy_datafield_FRUActivationPolicyMaskBit_Bit0, {
5447 "Bit 0", "SetFRUActivationPolicy.datafield.FRUActivationPolicyMaskBit.Bit0",
5448 FT_UINT8, BASE_HEX, VALS(cmd_SetFRUActivationPolicy_data_PFRUActivationPolicyMaskBit_Bit0_vals), 0x01,
5450 { &hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit72, {
5451 "Bit 7...2 Reserverd", "SetFRUActivationPolicy.datafield.FRUActivationPolicySetBit.Bit72",
5452 FT_UINT8, BASE_HEX, NULL, 0xfc,
5453 "Bit 7...2 Reserverd", HFILL }},
5454 { &hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit1, {
5455 "Set or Clear Deactivation-Locked", "SetFRUActivationPolicy.datafield.FRUActivationPolicySetBit.Bit1",
5456 FT_UINT8, BASE_HEX, VALS(cmd_SetFRUActivationPolicy_data_PFRUActivationPolicySetBit_Bit1_vals), 0x02,
5457 "Set or Clear Deactivation-Locked", HFILL }},
5458 { &hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit0, {
5459 "Set or Clear Locked", "SetFRUActivationPolicy.datafield.FRUActivationPolicySetBit.Bit0",
5460 FT_UINT8, BASE_HEX, VALS(cmd_SetFRUActivationPolicy_data_PFRUActivationPolicySetBit_Bit0_vals), 0x01,
5461 "Set or Clear Locked", HFILL }},
5462 { &hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit1_ignored, {
5463 "Set or Clear Deactivation-Locked", "SetFRUActivationPolicy.datafield.FRUActivationPolicySetBit.Bit1_ignored",
5464 FT_UINT8, BASE_HEX, VALS(cmd_SetFRUActivationPolicy_data_PFRUActivationPolicySetBit_Bit1_ignored_vals), 0x02,
5465 "Set or Clear Deactivation-Locked", HFILL }},
5466 { &hf_SetFRUActivationPolicy_datafield_FRUActivationPolicySetBit_Bit0_ignored, {
5467 "Set or Clear Locked", "SetFRUActivationPolicy.datafield.FRUActivationPolicySetBit.Bit0_ignored",
5468 FT_UINT8, BASE_HEX, VALS(cmd_SetFRUActivationPolicy_data_PFRUActivationPolicySetBit_Bit0_ignored_vals), 0x01,
5469 "Set or Clear Locked", HFILL }},
5472 /* Data field of Get FRU Activation Policy command, added by lane */
5473 static hf_register_info hf_GetFRUActivationPolicy_datafield[] = {
5474 { &hf_GetFRUActivationPolicy_datafield_PICMGIdentifier, {
5475 "PICMG Identifier", "GetFRUActivationPolicy.datafield.PICMGIdentifier",
5476 FT_UINT8, BASE_HEX, NULL, 0,
5477 "PICMG Identifier", HFILL }},
5478 { &hf_GetFRUActivationPolicy_datafield_FRUDeviceID, {
5479 "FRU Device ID", "GetFRUActivationPolicy.datafield.FRUDeviceID",
5480 FT_UINT8, BASE_HEX, NULL, 0,
5481 "FRU Device ID", HFILL }},
5482 { &hf_GetFRUActivationPolicy_datafield_FRUActivationPolicy_Bit72, {
5483 "Bit 7...2 Reserverd", "GetFRUActivationPolicy.datafield.FRUActivationPolicy.Bit72",
5484 FT_UINT8, BASE_HEX, NULL, 0xfc,
5485 "Bit 7...2 Reserverd", HFILL }},
5486 { &hf_GetFRUActivationPolicy_datafield_FRUActivationPolicy_Bit1, {
5487 "Deactivation-Locked Bit", "GetFRUActivationPolicy.datafield.FRUActivationPolicy.Bit1",
5488 FT_UINT8, BASE_HEX, VALS(cmd_GetFRUActivationPolicy_data_FRUActivationPolicy_Bit1_vals), 0x02,
5489 "Deactivation-Locked Bit", HFILL }},
5490 { &hf_GetFRUActivationPolicy_datafield_FRUActivationPolicy_Bit0, {
5491 "Locked Bit", "GetFRUActivationPolicy.datafield.FRUActivationPolicy.Bit0",
5492 FT_UINT8, BASE_HEX, VALS(cmd_GetFRUActivationPolicy_data_FRUActivationPolicy_Bit0_vals), 0x01,
5493 "Locked Bit", HFILL }},
5496 /* Data field of Get Device Locator Record ID, added by lane */
5497 static hf_register_info hf_GetDeviceLocatorRecordID_datafield[] = {
5498 { &hf_GetDeviceLocatorRecordID_datafield_PICMGIdentifier, {
5499 "PICMG Identifier", "GetDeviceLocatorRecordID.datafield.PICMGIdentifier",
5500 FT_UINT8, BASE_HEX, NULL, 0,
5501 "PICMG Identifier", HFILL }},
5502 { &hf_GetDeviceLocatorRecordID_datafield_FRUDeviceID, {
5503 "FRU Device ID", "GetDeviceLocatorRecordID.datafield.FRUDeviceID",
5504 FT_UINT8, BASE_HEX, NULL, 0,
5505 "FRU Device ID", HFILL }},
5506 { &hf_GetDeviceLocatorRecordID_datafield_RecordID, {
5507 "Record ID", "GetDeviceLocatorRecordID.datafield.RecordID",
5508 FT_UINT16, BASE_HEX, NULL, 0,
5509 "Record ID", HFILL }},
5512 /* Data field of Set Power Level command, added by lane */
5513 static hf_register_info hf_SetPowerLevel_datafield[] = {
5514 { &hf_SetPowerLevel_datafield_PICMGIdentifier, {
5515 "PICMG Identifier", "SetPowerLevel.datafield.PICMGIdentifier",
5516 FT_UINT8, BASE_HEX, NULL, 0,
5517 "PICMG Identifier", HFILL }},
5518 { &hf_SetPowerLevel_datafield_FRUDeviceID, {
5519 "FRU Device ID", "SetPowerLevel.datafield.FRUDeviceID",
5520 FT_UINT8, BASE_HEX, NULL, 0,
5521 "FRU Device ID", HFILL }},
5522 { &hf_SetPowerLevel_datafield_PowerLevel, {
5523 "Power Level", "SetPowerLevel.datafield.PowerLevel",
5524 FT_UINT8, BASE_HEX, VALS(cmd_SetPowerLevel_data_PowerLevel_vals), 0,
5525 "Power Level", HFILL }},
5526 { &hf_SetPowerLevel_datafield_SetPresentLevelsToDesiredLevels, {
5527 "Set Present Levels to Desired Levels", "SetPowerLevel.datafield.SetPresentLevelsToDesiredLevels",
5528 FT_UINT8, BASE_HEX, VALS(cmd_SetPowerLevel_data_SetPresentLevelsToDesiredLevels_vals), 0,
5529 "Set Present Levels to Desired Levels", HFILL }},
5532 /* Data field of Get Power Level command, added by lane */
5533 static hf_register_info hf_GetPowerLevel_datafield[] = {
5534 { &hf_GetPowerLevel_datafield_PICMGIdentifier, {
5535 "PICMG Identifier", "GetPowerLevel.datafield.PICMGIdentifier",
5536 FT_UINT8, BASE_HEX, NULL, 0,
5537 "PICMG Identifier", HFILL }},
5538 { &hf_GetPowerLevel_datafield_FRUDeviceID, {
5539 "FRU Device ID", "GetPowerLevel.datafield.FRUDeviceID",
5540 FT_UINT8, BASE_HEX, NULL, 0,
5541 "FRU Device ID", HFILL }},
5542 { &hf_GetPowerLevel_datafield_PowerType, {
5543 "Power Type", "GetPowerLevel.datafield.PowerType",
5544 FT_UINT8, BASE_HEX, VALS(cmd_GetPowerLevel_data_PowerType_vals), 0,
5545 "Power Type", HFILL }},
5546 { &hf_GetPowerLevel_datafield_Properties, {
5547 "Properties", "GetPowerLevel.datafield.Properties",
5548 FT_UINT8, BASE_HEX, NULL, 0,
5549 "Properties", HFILL }},
5550 { &hf_GetPowerLevel_datafield_Properties_DynamicPowerCon, {
5551 "Dynamic Power Configuration", "GetPowerLevel.datafield.Properties.DynamicPowerCon",
5552 FT_UINT8, BASE_HEX, VALS(cmd_GetPowerLevel_data_Properties_DynamicPowerCon_vals), 0x80,
5553 "Dynamic Power Configuration", HFILL }},
5554 { &hf_GetPowerLevel_datafield_Properties_Reserved, {
5555 "Reserved", "GetPowerLevel.datafield.Properties.Reserved",
5556 FT_UINT8, BASE_HEX, NULL, 0x60,
5557 "Reserved", HFILL }},
5558 { &hf_GetPowerLevel_datafield_Properties_PowerLevel, {
5559 "Power Level", "GetPowerLevel.datafield.Properties.PowerLevel",
5560 FT_UINT8, BASE_HEX, NULL, 0x1f,
5561 "Power Level", HFILL }},
5562 { &hf_GetPowerLevel_datafield_DelayToStablePower, {
5563 "Delay To Stable Power", "GetPowerLevel.datafield.DelayToStablePower",
5564 FT_UINT8, BASE_HEX, NULL, 0,
5565 "Delay To Stable Power", HFILL }},
5566 { &hf_GetPowerLevel_datafield_PowerMultiplier, {
5567 "Power Multiplier", "GetPowerLevel.datafield.PowerMultiplier",
5568 FT_UINT8, BASE_HEX, NULL, 0,
5569 "Power Multiplier", HFILL }},
5570 { &hf_GetPowerLevel_datafield_PowerDraw, {
5571 "Power Draw", "GetPowerLevel.datafield.PowerDraw",
5572 FT_UINT8, BASE_HEX, NULL, 0,
5573 "Power Draw", HFILL }},
5576 /* Data field of Set Fan Level command, added by lane */
5577 static hf_register_info hf_SetFanLevel_datafield[] = {
5578 { &hf_SetFanLevel_datafield_PICMGIdentifier, {
5579 "PICMG Identifier", "SetFanLevel.datafield.PICMGIdentifier",
5580 FT_UINT8, BASE_HEX, NULL, 0,
5581 "PICMG Identifier", HFILL }},
5582 { &hf_SetFanLevel_datafield_FRUDeviceID, {
5583 "FRU Device ID", "SetFanLevel.datafield.FRUDeviceID",
5584 FT_UINT8, BASE_HEX, NULL, 0,
5585 "FRU Device ID", HFILL }},
5586 { &hf_SetFanLevel_datafield_FanLevel, {
5587 "Fan Level", "SetFanLevel.datafield.FanLevel",
5588 FT_UINT8, BASE_HEX, VALS(cmd_SetFanLevel_data_FanLevel_vals), 0,
5589 "Fan Level", HFILL }},
5592 /* Data field of Get Fan Level command, added by lane */
5593 static hf_register_info hf_GetFanLevel_datafield[] = {
5594 { &hf_GetFanLevel_datafield_PICMGIdentifier, {
5595 "PICMG Identifier", "GetFanLevel.datafield.PICMGIdentifier",
5596 FT_UINT8, BASE_HEX, NULL, 0,
5597 "PICMG Identifier", HFILL }},
5598 { &hf_GetFanLevel_datafield_FRUDeviceID, {
5599 "FRU Device ID", "GetFanLevel.datafield.FRUDeviceID",
5600 FT_UINT8, BASE_HEX, NULL, 0,
5601 "FRU Device ID", HFILL }},
5602 { &hf_GetFanLevel_datafield_OverrideFanLevel, {
5603 "Override Fan Level", "GetFanLevel.datafield.OverrideFanLevel",
5604 FT_UINT8, BASE_HEX, VALS(cmd_GetFanLevel_data_OverrideFanLevel_vals), 0,
5605 "Override Fan Level", HFILL }},
5606 { &hf_GetFanLevel_datafield_LocalControlFanLevel, {
5607 "Local Control Fan Level", "GetFanLevel.datafield.LocalControlFanLevel",
5608 FT_UINT8, BASE_HEX, NULL, 0,
5609 "Local Control Fan Level", HFILL }},
5614 /***************************************************************************************************/
5616 static gint *ett[] = {
5619 &ett_ipmi_msg_nlfield,
5620 &ett_ipmi_msg_slfield,
5622 /********* Sensor/Event, NetFN = 0x04 *********/
5623 /* Platform Event Message, added by lane */
5624 &ett_cmd_PEM_EventDirAndEventType,
5625 &ett_cmd_PEM_EventData1_threshold,
5626 &ett_cmd_PEM_EventData1_discrete,
5627 &ett_cmd_PEM_EventData2_discrete,
5628 &ett_cmd_PEM_EventData1_OEM,
5629 &ett_cmd_PEM_EventData2_OEM,
5630 /* Get Device SDR Info, added by lane*/
5631 &ett_cmd_GetDeviceSDRInfo_Flag,
5632 /* Set Sensor Thresholds, added by lane */
5633 &ett_cmd_SetSensorThresholds_ControlByte,
5634 /* Get Sensor Thresholds, added by lane */
5635 &ett_cmd_GetSensorThresholds_ControlByte,
5636 /* Get Sensor Reading, added by lane */
5637 &ett_cmd_GetSensorReading_ResponseDataByte2,
5638 &ett_cmd_GetSensorReading_ResponseDataByte3,
5639 &ett_cmd_GetSensorReading_ResponseDataByte3_threshold,
5640 &ett_cmd_GetSensorReading_ResponseDataByte4,
5642 /********* APP, NetFN = 0x06 *********/
5643 /*Get Device ID, added by lane */
5644 &ett_cmd_GetDeviceID_data_dr,
5645 &ett_cmd_GetDeviceID_data_fr,
5646 &ett_cmd_GetDeviceID_data_ads,
5648 /********* Storage, NetFN = 0x0a *********/
5649 &ett_Get_Channel_Auth_Cap_anonymouslogin,
5650 /* Get FRU Inventory Area Info, added by lane */
5651 &ett_cmd_GetFRUInventoryAreaInfo_data_ResponseDataByte4,
5652 /* Get SEL Info, added by lane */
5653 &ett_cmd_GetSELInfo_data_OperationSupport,
5654 /* Clear SEL, added by lane */
5655 &ett_cmd_ClearSEL_data_ErasureProgress,
5657 /********* PICMG, NetFN = 0X2c *********/
5658 /* Get FRU Led Propertiesl, added by lane*/
5659 &ett_cmd_GetFRULedProperties_data_LedProperties,
5660 /* Get Led Color Capabilities , added by lane */
5661 &ett_cmd_GetLedColorCapabilities_data_LEDColorCapabilities,
5662 &ett_cmd_GetLedColorCapabilities_data_DefaultLEDColorLocalControl,
5663 &ett_cmd_GetLedColorCapabilities_data_DefaultLEDColorOverride,
5664 /* Set FRU Led State, added by lane */
5665 &ett_cmd_SetFRULedState_data_Color,
5666 /* Get FRU Led State, added by lane */
5667 &ett_cmd_GetFRULedState_data_LEDState,
5668 &ett_cmd_GetFRULedState_data_LocalControlColor,
5669 &ett_cmd_GetFRULedState_data_OverrideStateColor,
5670 /* Set FRU Activation Policy, added by lane */
5671 &ett_cmd_SetFRUActivationPolicy_data_FRUActivationPolicyMaskBit,
5672 &ett_cmd_SetFRUActivationPolicy_data_FRUActivationPolicySetBit,
5673 /* Get FRU Activation Policy, added by lane */
5674 &ett_cmd_GetFRUActivationPolicy_data_FRUActivationPolicy,
5675 /* Get Power Level, added by lane*/
5676 &ett_cmd_GetPowerLevel_data_Properties,
5680 proto_ipmi = proto_register_protocol(
5681 "Intelligent Platform Management Interface", "IPMI", "ipmi");
5683 proto_register_field_array(proto_ipmi, hf_session,
5684 array_length(hf_session));
5685 proto_register_field_array(proto_ipmi, hf_msg,
5686 array_length(hf_msg));
5687 proto_register_field_array(proto_ipmi, hf_msg_field,
5688 array_length(hf_msg_field));
5690 /********* Sensor/Event, NetFN = 0x04 *********/
5692 /* Platform Event Message, added by lane */
5693 proto_register_field_array(proto_ipmi, hf_PEM_datafield,
5694 array_length(hf_PEM_datafield));
5695 /* Get Device SDR Info, added by lane*/
5696 proto_register_field_array(proto_ipmi, hf_GetDeviceSDRInfo_datafield,
5697 array_length(hf_GetDeviceSDRInfo_datafield));
5698 /* Get Device SDR, added by lane*/
5699 proto_register_field_array(proto_ipmi, hf_GetDeviceSDR_datafield,
5700 array_length(hf_GetDeviceSDR_datafield));
5701 /* Reserve Device SDR Repository, added by lane */
5702 proto_register_field_array(proto_ipmi, hf_ReserveDeviceSDRRepository_datafield,
5703 array_length(hf_ReserveDeviceSDRRepository_datafield));
5704 /* Set Sensor Hysteresis, added by lane */
5705 proto_register_field_array(proto_ipmi, hf_SetSensorHysteresis_datafield,
5706 array_length(hf_SetSensorHysteresis_datafield));
5707 /* Get Sensor Hysteresis, added by lane */
5708 proto_register_field_array(proto_ipmi, hf_GetSensorHysteresis_datafield,
5709 array_length(hf_GetSensorHysteresis_datafield));
5710 /* Set Sensor Thresholds, added by lane */
5711 proto_register_field_array(proto_ipmi, hf_SetSensorThresholds_datafield,
5712 array_length(hf_SetSensorThresholds_datafield));
5713 /* Get Sensor Thresholds, added by lane */
5714 proto_register_field_array(proto_ipmi, hf_GetSensorThresholds_datafield,
5715 array_length(hf_GetSensorThresholds_datafield));
5716 /* Get Sensor Reading, added by lane */
5717 proto_register_field_array(proto_ipmi, hf_GetSensorReading_datafield,
5718 array_length(hf_GetSensorReading_datafield));
5720 /********* APP, NetFN = 0x06 *********/
5722 /*Get Device ID, added by lane */
5723 proto_register_field_array(proto_ipmi, hf_GetDeviceID_datafield,
5724 array_length(hf_GetDeviceID_datafield));
5726 /* Get Channel Authentication Capabilities */
5727 proto_register_field_array(proto_ipmi, hf_Get_Ch_Auth_Cap_datafield,
5728 array_length(hf_Get_Ch_Auth_Cap_datafield));
5730 /********* Storage, NetFN = 0x0a *********/
5732 /* Get FRU Inventory Area Info, added by lane */
5733 proto_register_field_array(proto_ipmi, hf_GetFRUInventoryAreaInfo_datafield,
5734 array_length(hf_GetFRUInventoryAreaInfo_datafield));
5735 /* Get SEL Info, added by lane */
5736 proto_register_field_array(proto_ipmi, hf_GetSELInfo_datafield,
5737 array_length(hf_GetSELInfo_datafield));
5738 /* Reserve SEL, added by lane */
5739 proto_register_field_array(proto_ipmi, hf_ReserveSEL_datafield,
5740 array_length(hf_ReserveSEL_datafield));
5741 /* Get SEL Entry, added by lane */
5742 proto_register_field_array(proto_ipmi, hf_GetSELEntry_datafield,
5743 array_length(hf_GetSELEntry_datafield));
5744 /* Get SEL Entry, added by lane */
5745 proto_register_field_array(proto_ipmi, hf_ClearSEL_datafield,
5746 array_length(hf_ClearSEL_datafield));
5748 /********* PICMG, NetFN = 0X2c *********/
5750 /*Get PICMG Properties, added by lane */
5751 proto_register_field_array(proto_ipmi, hf_GetPICMGProperties_datafield,
5752 array_length(hf_GetPICMGProperties_datafield));
5753 /*FRU Control, added by lane */
5754 proto_register_field_array(proto_ipmi, hf_FRUControl_datafield,
5755 array_length(hf_FRUControl_datafield));
5756 /* Get FRU Led Properties, added by lane*/
5757 proto_register_field_array(proto_ipmi, hf_GetFRULedProperties_datafield,
5758 array_length(hf_GetFRULedProperties_datafield));
5759 /* Get Led Color Capabilities ,, added by lane*/
5760 proto_register_field_array(proto_ipmi, hf_GetLedColorCapabilities_datafield,
5761 array_length(hf_GetLedColorCapabilities_datafield));
5762 /* Set FRU Led State, added by lane */
5763 proto_register_field_array(proto_ipmi, hf_SetFRULedState_datafield,
5764 array_length(hf_SetFRULedState_datafield));
5765 /* Get FRU Led State, added by lane */
5766 proto_register_field_array(proto_ipmi, hf_GetFRULedState_datafield,
5767 array_length(hf_GetFRULedState_datafield));
5768 /* Set FRU Activation Policy, added by lane */
5769 proto_register_field_array(proto_ipmi, hf_SetFRUActivationPolicy_datafield,
5770 array_length(hf_SetFRUActivationPolicy_datafield));
5771 /* Get FRU Activation Policy, added by lane */
5772 proto_register_field_array(proto_ipmi, hf_GetFRUActivationPolicy_datafield,
5773 array_length(hf_GetFRUActivationPolicy_datafield));
5774 /* Set FRU Activation, added by lane */
5775 proto_register_field_array(proto_ipmi, hf_SetFRUActivation_datafield,
5776 array_length(hf_SetFRUActivation_datafield));
5777 /* Get Device Locator Record ID, added by lane */
5778 proto_register_field_array(proto_ipmi, hf_GetDeviceLocatorRecordID_datafield,
5779 array_length(hf_GetDeviceLocatorRecordID_datafield));
5780 /* Set Power Level, added by lane */
5781 proto_register_field_array(proto_ipmi, hf_SetPowerLevel_datafield,
5782 array_length(hf_SetPowerLevel_datafield));
5783 /* Get Power Level, added by lane */
5784 proto_register_field_array(proto_ipmi, hf_GetPowerLevel_datafield,
5785 array_length(hf_GetPowerLevel_datafield));
5786 /* Set Fan Level, added by lane */
5787 proto_register_field_array(proto_ipmi, hf_SetFanLevel_datafield,
5788 array_length(hf_SetFanLevel_datafield));
5789 /* Get Fan Level, added by lane */
5790 proto_register_field_array(proto_ipmi, hf_GetFanLevel_datafield,
5791 array_length(hf_GetFanLevel_datafield));
5793 /****************************************************************************/
5795 proto_register_subtree_array(ett, array_length(ett));
5800 proto_reg_handoff_ipmi(void)
5802 dissector_handle_t ipmi_handle;
5804 data_handle = find_dissector("data");
5806 ipmi_handle = create_dissector_handle(dissect_ipmi, proto_ipmi);
5807 dissector_add("rmcp.class", RMCP_CLASS_IPMI, ipmi_handle);
5810 typedef void (*P_FUN)(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo, tvbuff_t *tvb, gint *poffset, guint8 len, guint8 response, guint8 auth_offset);
5812 /* added hereinafter by lane */
5814 dissect_ipmi_data(proto_tree *tree, proto_tree *ipmi_tree, packet_info *pinfo,
5815 tvbuff_t *tvb, gint *poffset, guint8 len, guint8 netfn, guint8 cmd,
5816 guint8 response, guint8 auth_offset)
5821 for (i = 0; i < NUM_OF_CMD_ARRAY; i++) {
5822 if(((netfn&0xfe)==ipmi_cmd_array[i].netfn) && (cmd==ipmi_cmd_array[i].cmd)) {
5823 if(ipmi_cmd_array[i].dissectfunc) {
5824 /*( (P_FUN)ipmi_cmd_array[i].dissectfunc )(tree, ipmi_tree, pinfo, tvb, poffset, len, response, authtype);*/
5825 ( (P_FUN)ipmi_cmd_array[i].dissectfunc )(tree, ipmi_tree, pinfo, tvb, poffset, len, response, auth_offset);
5829 next_tvb = tvb_new_subset(tvb, *poffset, len, len);
5830 call_dissector(data_handle, next_tvb, pinfo, tree);
5836 next_tvb = tvb_new_subset(tvb, *poffset, len, len);
5837 call_dissector(data_handle, next_tvb, pinfo, tree);
5843 /************************************************************************************/