change the signature that asn2wrs generates for functions to marm all parameters...
[obnox/wireshark/wip.git] / epan / dissectors / packet-ipmi.c
1 /* packet-ipmi.c
2  * Routines for IPMI-over-LAN packet dissection
3  *
4  * Duncan Laurie <duncan@sun.com>
5  *
6  * $Id$
7  *
8  * Wireshark - Network traffic analyzer
9  * By Gerald Combs <gerald@wireshark.org>
10  * Copyright 1998 Gerald Combs
11  *
12  * Copied from packet-rmcp.c
13  *
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.
18  *
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.
23  *
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
27  * 02111-1307, USA.
28  *
29  *
30  * See the IPMI spec at
31  *
32  *      http://www.intel.com/design/servers/ipmi/
33  *
34  * IPMI LAN Message Request
35  *  ipmi.session.authtype
36  *  ipmi.session.sequence
37  *  ipmi.session.id
38  * [ipmi.session.authcode]
39  *  ipmi.msg.len
40  *  ipmi.msg.rsaddr
41  *  ipmi.msg.netfn << 2 | ipmi.msg.rslun
42  *  ipmi.msg.csum1
43  *  ipmi.msg.rqaddr
44  *  ipmi.msg.seq << 2 | ipmi.msg.rqlun
45  *  ipmi.msg.cmd
46  *  ipmi.msg.DATA
47  *  ipmi.msg.csum2
48  *
49  * IPMI LAN Message Response
50  *  ipmi.session.authtype
51  *  ipmi.session.sequence
52  *  ipmi.session.id
53  * [ipmi.session.authcode]
54  *  ipmi.msg.len
55  *  ipmi.msg.rqaddr
56  *  ipmi.msg.netfn << 2 | ipmi.msg.rqlun
57  *  ipmi.msg.csum1
58  *  ipmi.msg.rsaddr
59  *  ipmi.msg.seq << 2 | ipmi.msg.rslun
60  *  ipmi.msg.cmd
61  *  ipmi.msg.ccode
62  *  ipmi.msg.DATA
63  *  ipmi.msg.csum2
64  */
65
66 #ifdef HAVE_CONFIG_H
67 # include "config.h"
68 #endif
69
70 #include <glib.h>
71 #include <epan/packet.h>
72
73 #define RMCP_CLASS_IPMI 0x07
74
75 static dissector_handle_t data_handle;
76 static int proto_ipmi = -1;
77
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;
82
83 /********* Sensor/Event, NetFN = 0x04 *********/
84
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;
103
104 /********* APP, NetFN = 0x06 *********/
105
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 */
110
111
112 /********* Storage, NetFN = 0x0a *********/
113
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 */
121
122 /********* PICMG, NetFN = 0x2c *********/
123
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 */
143
144
145 /***************************************************************************************************/
146
147
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;
158
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;
174
175 /********* Sensor/Event, NetFN = 0x04 **********/
176
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; 
183
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; 
189
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; 
196
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; 
203
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;
208
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;
297
298 /********* App, NetFN = 0x06 *********/
299
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;
319
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;
340
341 /********* Storage, NetFN = 0x0a *********/
342
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;
376
377
378 /********* PICMG, NetFN = 0X2c *********/
379
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;
492
493
494
495 /***********************************************************************/
496
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" },
516         { 0x00, NULL },
517 };
518
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
525
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"},
533         { 0x00, NULL }
534 };
535
536 #define IPMI_IPMI_MESSAGE       0
537 #define IPMI_OEM_EXPLICIT       2
538
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" },
559         { 0x00, NULL }
560 };
561
562 static const true_false_string ipmi_payload_aut_val  = {
563   "Payload is authenticated",
564   "Payload is unauthenticated"
565 };
566
567 static const true_false_string ipmi_payload_enc_val  = {
568   "Payload is encrypted",
569   "Payload is unencrypted"
570 };
571
572 static const value_string ipmi_ccode_vals[] = {
573         { 0x00, "Command completed normally" },
574         /* added by lane */
575         { 0x81, "cannot execute command, SEL erase in progress" },
576         /***************/
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" },
600         { 0x00, NULL },
601 };
602
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" },
612         { 0x00, NULL },
613 };
614
615 /* Table 13-19, Confidentiality Algorithm Numbers */
616 static const value_string ipmi_conf_vals[] ={
617         { 0x00, "none" },
618         { 0x01, "AES-CBC-128" },
619         { 0x02, "xRC4-128" },
620         { 0x03, "xRC4-40" },
621         { 0x30, "OEM" },
622         { 0x31, "OEM" },
623         { 0x32, "OEM" },
624         { 0x33, "OEM" },
625         { 0x34, "OEM" },
626         { 0x35, "OEM" },
627         { 0x36, "OEM" },
628         { 0x37, "OEM" },
629         { 0x38, "OEM" },
630         { 0x39, "OEM" },
631         { 0x3a, "OEM" },
632         { 0x3b, "OEM" },
633         { 0x3c, "OEM" },
634         { 0x3d, "OEM" },
635         { 0x3e, "OEM" },
636         { 0x3f, "OEM" },
637         { 0x00, NULL },
638 };
639
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" },
653         { 0x00, NULL },
654 };
655
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" },
686         { 0x00, NULL },
687 };
688
689 static const value_string ipmi_se_cmd_vals[] = {
690         /* Event Commands */
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" },
719         { 0x00, NULL },
720 };
721
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" },
731         { 0x23, "Get SDR" },
732         { 0x24, "Add SDR" },
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" },
754         { 0x00, NULL },
755 };
756
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" },
776         { 0x00, NULL },
777 };
778
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" },
821         { 0x00, NULL },
822 };
823
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" }, 
851         { 0x00, NULL },
852 };
853
854 /***********************************************************************/
855
856 /********* Sensor/Event, NetFN = 0x04 *********/
857
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" },
862         { 0x00, NULL },
863 };
864
865 static const value_string cmd_PEM_SensorType_vals[] = {
866         { 0x00, "Reserved" },
867         { 0x01, "Temperature" },
868         { 0x02, "Voltage" },
869         { 0x03, "Current" },
870         { 0x04, "Fan" },
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)" },
878         { 0x0c, "Memory" },
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" },
886         { 0x14, "Button" },
887         { 0x15, "Module / Board" },
888         { 0x16, "Microcontroller / Coprocessor" },
889         { 0x17, "Add-in Card" },
890         { 0x18, "Chassis" },
891         { 0x19, "Chip Set" },
892         { 0x1a, "Other FRU" },
893         { 0x1b, "Cable / Interconnect" },
894         { 0x1c, "Terminator" },
895         { 0x1d, "System Boot Initiated" },
896         { 0x1e, "Boot Error" },
897         { 0x1f, "OS Boot" },
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" },
905         { 0x27, "LAN" },
906         { 0x28, "Management Subsystem Health" },
907         { 0x29, "Battery" },
908         { 0xf0, "Hot Swap Event" },
909         { 0x00, NULL },
910 };
911
912 static const value_string cmd_PEM_EventDir_vals[] = {
913         { 0x00, "Assertion Event" },
914         { 0x01, "Deassertion Event" },
915         { 0x00, NULL },
916 };
917
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" },
923         { 0x00, NULL },
924 };
925
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" },
931         { 0x00, NULL },
932 };
933
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" },
939         { 0x00, NULL },
940 };
941
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" },
947         { 0x00, NULL },
948 };
949
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" },
955         { 0x00, NULL },
956 };
957
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" },
963         { 0x00, NULL },
964 };
965
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" },
983         { 0x00, NULL },
984 };
985
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" },
1003         { 0x00, NULL },
1004 };
1005
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" },
1010         { 0x00, NULL },
1011 };
1012
1013 static const value_string cmd_GetDeviceSDRInfo_data_Flag_DeviceLUNs_vals[] = {
1014         { 0x00, "has no sensors" },
1015         { 0x01, "has sensors" },
1016         { 0x00, NULL },
1017 };
1018
1019 /* Get Device SDR, added by lane */
1020 static const value_string cmd_GetDeviceSDR_data_BytesToRead_vals[] = {
1021         { 0xff, "Read entire record" },
1022         { 0x00, NULL },
1023 };
1024
1025 /* Set Sensor Thresholds, added by lane */
1026 static const value_string cmd_SetSensorThresholds_data_ControlByte_Bit_vals[] = {
1027         { 0x00, "Ignored" },
1028         { 0x01, "Set" },
1029         { 0x00, NULL },
1030 };
1031
1032 /* Get Sensor Thresholds, added by lane */
1033 static const value_string cmd_GetSensorThresholds_data_ControlByte_Bit_vals[] = {
1034         { 0x00, "Ignored" },
1035         { 0x01, "Readable" },
1036         { 0x00, NULL },
1037 };
1038
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" },
1043         { 0x00, NULL },
1044 };
1045
1046 static const value_string cmd_GetSensorReading_data_ResponseDataByte2_Bit6_vals[] = {
1047         { 0x00, "sensor scanning disabled" },
1048         { 0x01, "sensor scanning enabled" },
1049         { 0x00, NULL },
1050 };
1051
1052 static const value_string cmd_GetSensorReading_data_ResponseDataByte2_Bit5_vals[] = {
1053         { 0x00, "update sensor status completed" },
1054         { 0x01, "initial update in progress" },
1055         { 0x00, NULL },
1056 };
1057
1058 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit7_vals[] = {
1059         { 0x00, "state 7 has not been asserted" },
1060         { 0x01, "state 7 asserted" },
1061         { 0x00, NULL },
1062 };
1063
1064 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit6_vals[] = {
1065         { 0x00, "state 6 has not been asserted" },
1066         { 0x01, "state 6 asserted" },
1067         { 0x00, NULL },
1068 };
1069
1070 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit5_vals[] = {
1071         { 0x00, "state 5 has not been asserted" },
1072         { 0x01, "state 5 asserted" },
1073         { 0x00, NULL },
1074 };
1075
1076 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit4_vals[] = {
1077         { 0x00, "state 4 has not been asserted" },
1078         { 0x01, "state 4 asserted" },
1079         { 0x00, NULL },
1080 };
1081
1082 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit3_vals[] = {
1083         { 0x00, "state 3 has not been asserted" },
1084         { 0x01, "state 3 asserted" },
1085         { 0x00, NULL },
1086 };
1087
1088 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit2_vals[] = {
1089         { 0x00, "state 2 has not been asserted" },
1090         { 0x01, "state 2 asserted" },
1091         { 0x00, NULL },
1092 };
1093
1094 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit1_vals[] = {
1095         { 0x00, "state 1 has not been asserted" },
1096         { 0x01, "state 1 asserted" },
1097         { 0x00, NULL },
1098 };
1099
1100 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit0_vals[] = {
1101         { 0x00, "state 0 has not been asserted" },
1102         { 0x01, "state 0 asserted" },
1103         { 0x00, NULL },
1104 };
1105
1106 static const value_string cmd_GetSensorReading_data_ResponseDataByte4_Bit7_vals[] = {
1107         { 0x00, "Reserved, Shall returned as 1b" },
1108         { 0x01, "Reserved, Returned as 1b" },
1109         { 0x00, NULL },
1110 };
1111
1112 static const value_string cmd_GetSensorReading_data_ResponseDataByte4_Bit6_vals[] = {
1113         { 0x00, "state 14 has not been asserted" },
1114         { 0x01, "state 14 asserted" },
1115         { 0x00, NULL },
1116 };
1117
1118 static const value_string cmd_GetSensorReading_data_ResponseDataByte4_Bit5_vals[] = {
1119         { 0x00, "state 13 has not been asserted" },
1120         { 0x01, "state 13 asserted" },
1121         { 0x00, NULL },
1122 };
1123
1124 static const value_string cmd_GetSensorReading_data_ResponseDataByte4_Bit4_vals[] = {
1125         { 0x00, "state 12 has not been asserted" },
1126         { 0x01, "state 12 asserted" },
1127         { 0x00, NULL },
1128 };
1129
1130 static const value_string cmd_GetSensorReading_data_ResponseDataByte4_Bit3_vals[] = {
1131         { 0x00, "state 11 has not been asserted" },
1132         { 0x01, "state 11 asserted" },
1133         { 0x00, NULL },
1134 };
1135
1136 static const value_string cmd_GetSensorReading_data_ResponseDataByte4_Bit2_vals[] = {
1137         { 0x00, "state 10 has not been asserted" },
1138         { 0x01, "state 10 asserted" },
1139         { 0x00, NULL },
1140 };
1141
1142 static const value_string cmd_GetSensorReading_data_ResponseDataByte4_Bit1_vals[] = {
1143         { 0x00, "state 9 has not been asserted" },
1144         { 0x01, "state 9 asserted" },
1145         { 0x00, NULL },
1146 };
1147
1148 static const value_string cmd_GetSensorReading_data_ResponseDataByte4_Bit0_vals[] = {
1149         { 0x00, "state 8 has not been asserted" },
1150         { 0x01, "state 8 asserted" },
1151         { 0x00, NULL },
1152 };
1153
1154
1155 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit5_threshold_vals[] = {
1156         { 0x00, "unknown" },
1157         { 0x01, "at or above upper non-recoverable threshold" },
1158         { 0x00, NULL },
1159 };
1160
1161 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit4_threshold_vals[] = {
1162         { 0x00, "unknown" },
1163         { 0x01, "at or above upper critical threshold" },
1164         { 0x00, NULL },
1165 };
1166
1167 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit3_threshold_vals[] = {
1168         { 0x00, "unknown" },
1169         { 0x01, "at or above upper non-critical threshold" },
1170         { 0x00, NULL },
1171 };
1172
1173 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit2_threshold_vals[] = {
1174         { 0x00, "unknown" },
1175         { 0x01, "at or below lower non-recoverable threshold" },
1176         { 0x00, NULL },
1177 };
1178
1179 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit1_threshold_vals[] = {
1180         { 0x00, "unknown" },
1181         { 0x01, "at or below lower critical threshold" },
1182         { 0x00, NULL },
1183 };
1184
1185 static const value_string cmd_GetSensorReading_data_ResponseDataByte3_Bit0_threshold_vals[] = {
1186         { 0x00, "unknown" },
1187         { 0x01, "at or below lower non-critical threshold" },
1188         { 0x00, NULL },
1189 };
1190
1191
1192 /********* APP, NetFN = 0x06 *********/
1193
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" },
1198         { 0x00, NULL },
1199 };
1200
1201 static const value_string cmd_GetDeviceID_Data_DeviceRevision_vals[] = {
1202         { 0x00, "0" },
1203         { 0x01, "1" },
1204         { 0x02, "2" },
1205         { 0x03, "3" },
1206         { 0x04, "4" },
1207         { 0x05, "5" },
1208         { 0x06, "6" },
1209         { 0x07, "7" },
1210         { 0x08, "8" },
1211         { 0x09, "9" },
1212         { 0x0a, "10" },
1213         { 0x0b, "11" },
1214         { 0x0c, "12" },
1215         { 0x0d, "13" },
1216         { 0x0e, "14" },      
1217         { 0x0f, "15" },
1218         { 0x00, NULL },
1219 };
1220
1221 static const value_string cmd_GetDeviceID_data_DeviceAvailable_vals[] = {
1222         { 0x00, "normal operation" },
1223         { 0x01, "device firmware" },
1224         { 0x00, NULL },
1225 };
1226
1227 static const value_string cmd_GetDeviceID_Data_IPMIRevision_vals[] = {
1228         { 0x01, "V1.0" },
1229         { 0x11, "V1.1" },
1230         { 0x21, "V1.2" },
1231         { 0x31, "V1.3" },
1232         { 0x41, "V1.4" },
1233         { 0x51, "V1.5" },
1234         { 0x61, "V1.6" },
1235         { 0x71, "V1.7" },
1236         { 0x81, "V1.8" },
1237         { 0x91, "V1.9" },
1238         { 0x02, "V2.0" },
1239         { 0x12, "V2.1" },
1240         { 0x22, "V2.2" },
1241         { 0x32, "V2.3" },
1242         { 0x42, "V2.4" },      
1243         { 0x52, "V2.5" },
1244         { 0x62, "V2.6" },
1245         { 0x72, "V2.7" },
1246         { 0x82, "V2.8" },
1247         { 0x92, "V2.9" },
1248         { 0x00, NULL },
1249 };
1250
1251 static const value_string cmd_GetDeviceID_data_ADS_vals[] = {
1252         { 0x00, "No" },
1253         { 0x01, "Yes" },
1254         { 0x00, NULL },
1255 };
1256
1257
1258 /********* Storage, NetFN = 0x0a *********/
1259
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" },
1264         { 0x00, NULL },
1265 };
1266
1267 /* Get SEL Info, added by lane */
1268 static const value_string cmd_GetSELInfo_Data_SELVersion_vals[] = {
1269         { 0x01, "V1.0" },
1270         { 0x11, "V1.1" },
1271         { 0x21, "V1.2" },
1272         { 0x31, "V1.3" },
1273         { 0x41, "V1.4" },
1274         { 0x51, "V1.5" },
1275         { 0x61, "V1.6" },
1276         { 0x71, "V1.7" },
1277         { 0x81, "V1.8" },
1278         { 0x91, "V1.9" },
1279         { 0x02, "V2.0" },
1280         { 0x12, "V2.1" },
1281         { 0x22, "V2.2" },
1282         { 0x32, "V2.3" },
1283         { 0x42, "V2.4" },      
1284         { 0x52, "V2.5" },
1285         { 0x62, "V2.6" },
1286         { 0x72, "V2.7" },
1287         { 0x82, "V2.8" },
1288         { 0x92, "V2.9" },
1289         { 0x00, NULL },
1290 };
1291
1292 static const value_string cmd_GetSELInfo_Data_OperationSupport_Bit7_vals[] = {
1293         { 0x00, "Ok" },
1294         { 0x01, "Events have been dropped due to lack of space in the SEL" },
1295         { 0x00, NULL },
1296 };
1297
1298 static const value_string cmd_GetSELInfo_Data_OperationSupport_Bit3to0_vals[] = {
1299         { 0x00, "Don't Support" },
1300         { 0x01, "Support" },
1301         { 0x00, NULL },
1302 };
1303
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" },
1308         { 0x00, NULL },
1309 };
1310
1311 static const value_string cmd_ClearSEL_Data_ErasureProgress_EraProg_vals[] = {
1312         { 0x00, "erasure in progress" },
1313         { 0x01, "erase completed" },
1314         { 0x00, NULL },
1315 };
1316
1317
1318
1319 /********* PICMG, NetFN = 0X2c *********/
1320
1321 /* Get PICMG Properties data, added by lane */
1322 static const value_string cmd_GetPICMGProperties_data_PICMGExtensionVersion_vals[] = {
1323         { 0x12, "V2.1" },
1324         { 0x00, NULL },
1325 };
1326
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" },
1335         { 0x00, NULL },
1336 };
1337
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" },
1342         { 0x00, NULL },
1343 };
1344
1345 static const value_string cmd_GetFRULedProperties_data_LedProperties_LED2_vals[] = {
1346         { 0x00, "FRU can't control LED2" },
1347         { 0x01, "FRU can control LED2" },
1348         { 0x00, NULL },
1349 };
1350
1351 static const value_string cmd_GetFRULedProperties_data_LedProperties_LED1_vals[] = {
1352         { 0x00, "FRU can't control LED1" },
1353         { 0x01, "FRU can control LED1" },
1354         { 0x00, NULL },
1355 };
1356
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" },
1360         { 0x00, NULL },
1361 };
1362
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" },
1367         { 0x00, NULL },
1368 };
1369
1370 static const value_string cmd_GetLedColorCapabilities_data_DefaultLEDColor_vals[] = {
1371         { 0x00, "Reserved" },
1372         { 0x01, "BLUE" },
1373         { 0x02, "RED" },
1374         { 0x03, "GREEN" },
1375         { 0x04, "AMBER" },
1376         { 0x05, "ORANGE" },
1377         { 0x06, "WHITE" },
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" },
1387         { 0x00, NULL },
1388 };
1389
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" },
1394         { 0x00, NULL },
1395 };
1396
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" },
1404         { 0x00, NULL },
1405 };
1406
1407 static const value_string cmd_SetFRULedState_data_LEDFunction_vals[] = {
1408         { 0x00, "LED off override" },
1409         { 0x01, "LED BLINKING override" },
1410         /* ... */
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" },
1417         { 0x00, NULL },
1418 };
1419
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" },
1437         { 0x00, NULL },
1438 };
1439
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" },
1447         { 0x00, NULL },
1448 };
1449
1450 static const value_string cmd_GetFRULedState_data_LEDState_Bit21_vals[] = {
1451         { 0x00, "Disabled" },
1452         { 0x01, "Enabled" },
1453         { 0x00, NULL },
1454 };
1455
1456 static const value_string cmd_GetFRULedState_data_LEDState_Bit0_vals[] = {
1457         { 0x00, "No" },
1458         { 0x01, "Yes" },
1459         { 0x00, NULL },
1460 };
1461
1462 static const value_string cmd_GetFRULedState_data_LocalControlLEDFunction_vals[] = {
1463         { 0x00, "LED is off" },
1464         { 0x01, "LED is BLINKING" },
1465         /* ... */
1466         { 0xfa, "LED is BLINKING" },
1467         { 0xfb, "Reserved" },
1468         { 0xfc, "Reserved" },
1469         { 0xfd, "Reserved" },
1470         { 0xfe, "Reserved" },
1471         { 0xff, "LED is on " },
1472         { 0x00, NULL },
1473 };
1474
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" },
1492         { 0x00, NULL },
1493 };
1494
1495 static const value_string cmd_GetFRULedState_data_OverrideStateLEDFunction_vals[] = {
1496         { 0x00, "LED Override State is off" },
1497         { 0x01, "LED Override State is BLINKING" },
1498         /* ... */
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 " },
1505         { 0x00, NULL },
1506 };
1507
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" },
1512         { 0x00, NULL },
1513 };
1514
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" },
1518         { 0x00, NULL },
1519 };
1520
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" },
1524         { 0x00, NULL },
1525 };
1526
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" },
1530         { 0x00, NULL },
1531 };
1532
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" },
1536         { 0x00, NULL },
1537 };
1538
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" },
1542         { 0x00, NULL },
1543 };
1544
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" },
1549         { 0x00, NULL },
1550 };
1551
1552 static const value_string cmd_GetFRUActivationPolicy_data_FRUActivationPolicy_Bit0_vals[] = {
1553         { 0x00, "FRU is not Locked" },
1554         { 0x01, "FRU is Locked" },
1555         { 0x00, NULL },
1556 };
1557
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" },
1582         { 0x00, NULL },
1583 };
1584
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" },
1588         { 0x00, NULL },
1589 };
1590
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" },
1597         { 0x00, NULL },
1598 };
1599
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" },
1603         { 0x00, NULL },
1604 };
1605
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" },
1610         { 0x00, NULL },
1611 };
1612
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" },
1617         { 0x00, NULL },
1618 };
1619
1620
1621 /*****************************************************************************************/
1622
1623
1624 /* ipmi command dissector struct , added by lane */
1625
1626 typedef struct _ipmi_cmd_dissect{
1627   guint8  netfn;
1628   guint8  cmd;
1629   void   (*dissectfunc)(proto_tree *, proto_tree *, packet_info *, tvbuff_t *, gint *, guint8, guint8, guint8);  
1630 } ipmi_cmd_dissect;
1631
1632
1633
1634 /* Sensor/Event  NetFN (0x04) */
1635
1636 static void
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)
1639 {
1640
1641         tvbuff_t                *next_tvb;
1642         proto_tree      *field_tree = NULL;
1643         proto_item      *tf = NULL;
1644         guint8          SensorType, EventDirAndEventType, EventType, EventData1, EventData2;
1645
1646         if(response) {
1647
1648                 return;         
1649         }
1650         else {
1651
1652                 /* EvMRev */
1653                 if (tree) {
1654                         proto_tree_add_item(ipmi_tree, hf_PEM_datafield_EvMRev,
1655                                                                 tvb, (*poffset)++, 1, TRUE);
1656                         len--;
1657                 }
1658
1659                 /* Sensor Type */
1660                 SensorType = tvb_get_guint8(tvb, auth_offset + 17) ;
1661                 
1662                 if (tree) {
1663                         proto_tree_add_item(ipmi_tree, hf_PEM_datafield_SensorType,
1664                                                                 tvb, (*poffset)++, 1, TRUE);
1665                         len--;
1666                 }
1667                 
1668                 /* Sensor Number */
1669                 if (tree) {
1670                         proto_tree_add_item(ipmi_tree, hf_PEM_datafield_SensorNumber,
1671                                                                 tvb, (*poffset)++, 1, TRUE);
1672                         len--;
1673                 }
1674         
1675                 /* Event Dir & Event Type*/
1676                 EventDirAndEventType = tvb_get_guint8(tvb, auth_offset + 19) ;
1677                 EventType = EventDirAndEventType&0x7f;
1678                 
1679                 if (tree) {
1680                         
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);
1684
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);
1689                                 (*poffset)++;
1690                                 len--;                          
1691                         }
1692                 
1693                 
1694                 /* EventData 1~3 */
1695                 switch(SensorType) {
1696
1697                         case 0xf0:              /* Hot Swap Event */
1698                                 /* unspecial */
1699                                 if(0x00==EventType) {
1700
1701
1702                                 }
1703                                 
1704                                 /* threshold  */
1705                                 if(0x01==EventType) {
1706                                         /* EventData 1*/
1707                                         EventData1 = tvb_get_guint8(tvb, auth_offset + 20) ;
1708                                         if (tree) {
1709                                                 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
1710                                                                 "EventData 1: %s0x%02x", " ", EventData1);
1711
1712                                                 field_tree = proto_item_add_subtree(tf, ett_cmd_PEM_EventData1_threshold);
1713
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);
1720                                 
1721                                                 (*poffset)++;
1722                                                 len--;
1723                                         }
1724                                         
1725                                         /* EventData 2*/
1726                                         if (tree&&(len!=0)) {
1727                                                 proto_tree_add_item(field_tree, hf_PEM_datafield_EventData2_threshold,
1728                                                                         tvb, (*poffset)++, 1, TRUE);
1729                                                 len--;
1730                                         }
1731                                         
1732                                         /* EventData 3*/
1733                                         if (tree&&(len!=0)) {
1734                                                 proto_tree_add_item(ipmi_tree, hf_PEM_datafield_EventData3_threshold,
1735                                                                         tvb, (*poffset)++, 1, TRUE);
1736                                         }
1737
1738                                 }
1739
1740         
1741                                 /* discrete */
1742                                 if(((EventType>=0x02)&&(EventType<=0x0b))||(0x6f==EventType)) {
1743                                         /* EventData 1*/
1744                                         if (tree) {
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);
1748
1749                                                 field_tree = proto_item_add_subtree(tf, ett_cmd_PEM_EventData1_discrete);
1750
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);
1757                                 
1758                                                 (*poffset)++;
1759                                                 len--;
1760                                         }
1761                                         
1762                                         /* EventData 2*/
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);
1767
1768                                                 field_tree = proto_item_add_subtree(tf, ett_cmd_PEM_EventData2_discrete);
1769
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);
1774                                 
1775                                                 (*poffset)++;
1776                                                 len--;
1777                                         }
1778                                         
1779                                         /* EventData 3*/
1780                                         if (tree&&(len!=0)) {
1781                                                 proto_tree_add_item(ipmi_tree, hf_PEM_datafield_HotSwapEvent_FRUDeviceID,
1782                                                                         tvb, (*poffset)++, 1, TRUE);
1783                                         }
1784
1785                                 }
1786                                 
1787                                 /* OEM */
1788                                 if((EventType>=0x70)&&(EventType<=0x7f)) {
1789                                         /* EventData 1*/
1790                                         if (tree) {
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);
1794
1795                                                 field_tree = proto_item_add_subtree(tf, ett_cmd_PEM_EventData1_OEM);
1796
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);
1803                                 
1804                                                 (*poffset)++;
1805                                                 len--;
1806                                         }
1807                                         /* EventData 2*/
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);
1812
1813                                                 field_tree = proto_item_add_subtree(tf, ett_cmd_PEM_EventData2_OEM);
1814
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);
1819                                 
1820                                                 (*poffset)++;
1821                                                 len--;
1822                                         }
1823                                         /* EventData 3*/
1824                                         if (tree&&(len!=0)) {
1825                                                 proto_tree_add_item(ipmi_tree, hf_PEM_datafield_EventData3_OEM,
1826                                                                         tvb, (*poffset)++, 1, TRUE);
1827                                         }
1828
1829                                 }
1830                                 break;
1831
1832
1833                         default:
1834                                 if (tree) {
1835                                         next_tvb = tvb_new_subset(tvb, *poffset, len, len);
1836                                         call_dissector(data_handle, next_tvb, pinfo, tree);
1837                                         *poffset += len;
1838                                 }
1839                                 break;
1840                 }
1841                 
1842         }
1843
1844 }
1845
1846
1847 static void
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_)
1850 {
1851         tvbuff_t        *next_tvb;
1852
1853         if(response) {
1854
1855                 /* Record ID for next record */
1856                 if (tree) {
1857                         proto_tree_add_item(ipmi_tree, hf_GetDeviceSDR_datafield_NextRecordID,
1858                                                                 tvb, *poffset, 1, TRUE);
1859                         (*poffset)+=2;
1860                         len-=2;
1861                 }
1862                 /* Requested bytes from record */
1863                 if (tree) {
1864                         next_tvb = tvb_new_subset(tvb, *poffset, len, len);
1865                         call_dissector(data_handle, next_tvb, pinfo, tree);
1866                         *poffset += len;
1867                 }
1868                 
1869         }
1870         else {
1871
1872                 /* Reservation ID */
1873                 if (tree) {
1874                         proto_tree_add_item(ipmi_tree, hf_GetDeviceSDR_datafield_ReservationID,
1875                                                                 tvb, *poffset, 1, TRUE);
1876                 (*poffset)+=2;
1877                 }
1878                 /* Record ID of record to Get */
1879                 if (tree) {
1880                         proto_tree_add_item(ipmi_tree, hf_GetDeviceSDR_datafield_RecordID,
1881                                                                 tvb, *poffset, 1, TRUE);
1882                 (*poffset)+=2;
1883                 }
1884                 /* Offset into record */
1885                 if (tree) {
1886                         proto_tree_add_item(ipmi_tree, hf_GetDeviceSDR_datafield_OffsetIntoRecord,
1887                                                                 tvb, (*poffset)++, 1, TRUE);
1888                 }
1889                 /* Bytes to read */
1890                 if (tree) {
1891                         proto_tree_add_item(ipmi_tree, hf_GetDeviceSDR_datafield_BytesToRead,
1892                                                                 tvb, (*poffset)++, 1, TRUE);
1893                 }
1894
1895         }
1896
1897 }
1898
1899
1900 static void
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)
1903 {
1904
1905         proto_tree      *field_tree = NULL;
1906         proto_item      *tf = NULL;
1907         guint8          flag;
1908         
1909         if(response) {
1910
1911                 flag = tvb_get_guint8(tvb, auth_offset + 18) ;
1912                 
1913                 /* Number of the Sensors in device*/
1914                 if (tree) {
1915                         proto_tree_add_item(ipmi_tree, hf_GetDeviceSDRInfo_datafield_SensorNumber,
1916                                                                 tvb, (*poffset)++, 1, TRUE);
1917                 }
1918                 /* Flag */
1919                 if (tree) {
1920                         
1921                                 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
1922                                                         "Flag: %s0x%02x", " ", flag);
1923
1924                                 field_tree = proto_item_add_subtree(tf, ett_cmd_GetDeviceSDRInfo_Flag);
1925
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);
1938                                 (*poffset)++;
1939                                 
1940                         }
1941                 /* Sensor Population Change Indicator */
1942                 if (tree) {
1943                         proto_tree_add_item(ipmi_tree, hf_GetDeviceSDRInfo_datafield_SensorPopulationChangeIndicator,
1944                                                                 tvb, *poffset, 1, TRUE);
1945                         (*poffset)+=4;
1946                 }
1947                 
1948         }
1949         else
1950                 return;
1951
1952 }
1953
1954 static void
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_)
1957 {
1958
1959         if(response) {
1960
1961                 /* Reservation ID */
1962                 if (tree) {
1963                         proto_tree_add_item(ipmi_tree, hf_ReserveDeviceSDRRepository_datafield_ReservationID ,
1964                                                                 tvb, *poffset, 1, TRUE);
1965                         (*poffset)+=2;
1966                 }
1967
1968         }
1969         else
1970                 return;
1971
1972 }
1973
1974 static void
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_)
1977 {
1978
1979         if(response) {
1980                 return;
1981         }
1982         else {
1983                 /* sensor number */
1984                 if (tree) {
1985                         proto_tree_add_item(ipmi_tree, hf_SetSensorHysteresis_datafield_SensorNumber,
1986                                                                 tvb, (*poffset)++, 1, TRUE);
1987                 }
1988                 /* reserved for future 'hysteresis mask' definition. */
1989                 if (tree) {
1990                         proto_tree_add_item(ipmi_tree, hf_SetSensorHysteresis_datafield_ReservedForHysteresisMask,
1991                                                                 tvb, (*poffset)++, 1, TRUE);
1992                 }
1993                 /* Positive-going Threshold Hysteresis Value */
1994                 if (tree) {
1995                         proto_tree_add_item(ipmi_tree, hf_SetSensorHysteresis_datafield_PositivegoingThresholdHysteresisValue,
1996                                                                 tvb, (*poffset)++, 1, TRUE);
1997                 }
1998                 /* Negative-going Threshold Hysteresis Value */
1999                 if (tree) {
2000                         proto_tree_add_item(ipmi_tree, hf_SetSensorHysteresis_datafield_NegativegoingThresholdHysteresisValue,
2001                                                                 tvb, (*poffset)++, 1, TRUE);
2002                 }
2003         }
2004
2005 }
2006
2007 static void
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_)
2010 {
2011
2012         if(response) {
2013                 /* Positive-going Threshold Hysteresis Value */
2014                 if (tree) {
2015                         proto_tree_add_item(ipmi_tree, hf_GetSensorHysteresis_datafield_PositivegoingThresholdHysteresisValue,
2016                                                                 tvb, (*poffset)++, 1, TRUE);
2017                 }
2018                 /* Negative-going Threshold Hysteresis Value */
2019                 if (tree) {
2020                         proto_tree_add_item(ipmi_tree, hf_GetSensorHysteresis_datafield_NegativegoingThresholdHysteresisValue,
2021                                                                 tvb, (*poffset)++, 1, TRUE);
2022                 }
2023         }
2024         else {
2025                 /* sensor number */
2026                 if (tree) {
2027                         proto_tree_add_item(ipmi_tree, hf_GetSensorHysteresis_datafield_SensorNumber,
2028                                                                 tvb, (*poffset)++, 1, TRUE);
2029                 }
2030                 /* reserved for future 'hysteresis mask' definition. */
2031                 if (tree) {
2032                         proto_tree_add_item(ipmi_tree, hf_GetSensorHysteresis_datafield_ReservedForHysteresisMask,
2033                                                                 tvb, (*poffset)++, 1, TRUE);
2034                 }
2035         }
2036
2037 }
2038
2039 static void
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)
2042 {
2043
2044         proto_tree      *field_tree = NULL;
2045         proto_item      *tf = NULL;
2046         guint8          ControlByte;
2047
2048         if(response) {
2049                 return;
2050         }
2051         else {
2052                 /* sensor number */
2053                 if (tree) {
2054                         proto_tree_add_item(ipmi_tree, hf_SetSensorThresholds_datafield_SensorNumber,
2055                                                                 tvb, (*poffset)++, 1, TRUE);
2056                         /* Control Byte */
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);
2061
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);
2076                         (*poffset)++;
2077
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);
2082
2083                         /* lower critical threshold */
2084                         if(ControlByte&0x02) 
2085                                 proto_tree_add_item(ipmi_tree, hf_SetSensorThresholds_datafield_LowerCriticalThreshold,
2086                                                                         tvb, (*poffset)++, 1, TRUE);
2087
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);
2092
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);
2097
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);
2102
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);
2107                 }
2108
2109         }
2110
2111 }
2112
2113 static void
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)
2116 {
2117
2118         proto_tree      *field_tree = NULL;
2119         proto_item      *tf = NULL;
2120         guint8          ControlByte;
2121
2122         if(response) {
2123                 /* Control Byte */
2124                 if (tree) {
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);
2129
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);
2144                         (*poffset)++;
2145
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);
2150
2151                         /* lower critical threshold */
2152                         if(ControlByte&0x02) 
2153                                 proto_tree_add_item(ipmi_tree, hf_GetSensorThresholds_datafield_LowerCriticalThreshold,
2154                                                                         tvb, (*poffset)++, 1, TRUE);
2155
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);
2160
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);
2165
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);
2170
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);
2175                 }
2176
2177         }
2178         else {
2179                 /* sensor number */
2180                 if (tree) {
2181                         proto_tree_add_item(ipmi_tree, hf_GetSensorThresholds_datafield_SensorNumber,
2182                                                                 tvb, (*poffset)++, 1, TRUE);
2183                 }
2184         }
2185
2186 }
2187
2188 static void
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)
2191 {
2192
2193         proto_tree      *field_tree = NULL;
2194         proto_item      *tf = NULL;
2195         guint8          Response_Data_Byte2, Response_Data_Byte3, Response_Data_Byte4;
2196         
2197         if(response) {
2198
2199                 /* Sensor reading*/
2200                 if (tree) {
2201                         proto_tree_add_item(ipmi_tree, hf_GetSensorReading_datafield_Sensorreading,
2202                                                                 tvb, (*poffset)++, 1, TRUE);
2203                 }
2204                 /* Response Data Byte2 */
2205                 if (tree) {
2206                         
2207                                 Response_Data_Byte2 = tvb_get_guint8(tvb, auth_offset + 18) ;
2208                                 
2209                                 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2210                                                         "Response Data Byte 2: %s0x%02x", " ", Response_Data_Byte2);
2211
2212                                 field_tree = proto_item_add_subtree(tf, ett_cmd_GetSensorReading_ResponseDataByte2);
2213
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);
2222                                 (*poffset)++;
2223                                 
2224                 }
2225                 
2226                 if(len==4) {
2227                                 /* Response Data Byte3 (For discrete reading sensors) */
2228                                 if (tree) {
2229                         
2230                                         Response_Data_Byte3 = tvb_get_guint8(tvb, auth_offset + 19) ;
2231                                 
2232                                         tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2233                                                         "Response Data Byte 3: %s0x%02x", " ", Response_Data_Byte3);
2234
2235                                         field_tree = proto_item_add_subtree(tf, ett_cmd_GetSensorReading_ResponseDataByte3);
2236
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);
2253                                         (*poffset)++;
2254                                 
2255                                 }
2256                                 /* Response Data Byte4 (For discrete reading sensors) */
2257                                 if (tree) {
2258                         
2259                                         Response_Data_Byte4 = tvb_get_guint8(tvb, auth_offset + 20) ;
2260                                 
2261                                         tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2262                                                         "Response Data Byte 4: %s0x%02x", " ", Response_Data_Byte4);
2263
2264                                         field_tree = proto_item_add_subtree(tf, ett_cmd_GetSensorReading_ResponseDataByte4);
2265
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);
2282                                         (*poffset)++;
2283                                 
2284                                 }
2285                 }
2286                 else {
2287                                 /* Response Data Byte3 (For threshold-based sensors) */
2288                                 if (tree) {
2289                         
2290                                         Response_Data_Byte3 = tvb_get_guint8(tvb, auth_offset + 19) ;
2291                                 
2292                                         tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2293                                                         "Present threshold comparison status: %s0x%02x", " ", Response_Data_Byte3);
2294
2295                                         field_tree = proto_item_add_subtree(tf, ett_cmd_GetSensorReading_ResponseDataByte3_threshold);
2296
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);
2311                                         (*poffset)++;
2312                                 
2313                                 }
2314                 }
2315                 
2316         }
2317         else {
2318                 /* Sensor Number */
2319                 if (tree) {
2320                         proto_tree_add_item(ipmi_tree, hf_GetSensorReading_datafield_SensorNumber,
2321                                                                 tvb, (*poffset)++, 1, TRUE);
2322                 }
2323         }
2324         
2325
2326 }
2327
2328
2329
2330 /* App NetFN (0x06) */
2331
2332 static void
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)
2335 {
2336
2337         proto_tree      *field_tree = NULL;
2338         proto_item      *tf = NULL;
2339         guint8          device_revision, firmware_revision1, additional_device_support;
2340         guint32         ManufactureID; 
2341         guint16         ProductID;                      
2342         
2343
2344         if(response) {
2345
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);
2351                 
2352
2353                 /* Device ID */
2354                 if (tree) {
2355                         proto_tree_add_item(ipmi_tree, hf_GetDeviceID_datafield_DeviceID,
2356                                                                 tvb, (*poffset)++, 1, TRUE);
2357                 }
2358                 
2359                 
2360                 /* DeviceSDR/DeviceRevision */
2361                 if (tree) {
2362                         
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);
2366
2367                         field_tree = proto_item_add_subtree(tf, ett_cmd_GetDeviceID_data_dr);
2368
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);
2374                         (*poffset)++;
2375                 }
2376
2377                 /* Device available/Major Firmware Revision */
2378                 if (tree) {
2379                         
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);
2383
2384                         field_tree = proto_item_add_subtree(tf, ett_cmd_GetDeviceID_data_fr);
2385
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);
2391                         (*poffset)++;
2392                 }
2393
2394                 /* Minor Firmware Revision */
2395                 if (tree) {
2396                         proto_tree_add_item(ipmi_tree, hf_GetDeviceID_datafield_MinorFirmwareRevision,
2397                                                                 tvb, (*poffset)++, 1, TRUE);
2398                 }
2399                 
2400                 /* IPMI Revision */
2401                 if (tree) {
2402                         proto_tree_add_item(ipmi_tree, hf_GetDeviceID_datafield_IPMIRevision,
2403                                                                 tvb, (*poffset)++, 1, TRUE);
2404                 }
2405
2406                 /* Additional Device Support */
2407                 if (tree) {
2408                         
2409                         tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2410                                          "Additional Device Support: %s0x%02x", " ", additional_device_support);
2411
2412                         field_tree = proto_item_add_subtree(tf, ett_cmd_GetDeviceID_data_ads);
2413
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);
2430                         
2431                         (*poffset)++;
2432                 }
2433
2434                 /* Manufacture ID */
2435                 if (tree) {
2436                         proto_tree_add_item(ipmi_tree, hf_GetDeviceID_datafield_ManufactureID,
2437                                                                 tvb, *poffset, 3, TRUE);
2438                         (*poffset)+=3;
2439                 }
2440
2441                 /* Product ID */
2442                 if (tree) {
2443                         proto_tree_add_item(ipmi_tree, hf_GetDeviceID_datafield_ProductID,
2444                                                                 tvb, *poffset, 2, TRUE);
2445                         (*poffset)+=2;
2446                 }
2447
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);
2452                         (*poffset)+=4;
2453                 }               
2454
2455         }
2456         else
2457                 return;
2458
2459 }
2460
2461 static const true_false_string ipmi_Auth_Cap_comp_val  = {
2462   "IPMI v2.0+ extended capabilities available",
2463   "IPMI v1.5 support only"
2464 };
2465
2466 static const true_false_string ipmi_Authentication_Type_Support_val  = {
2467   "Supported",
2468   "Authentication type not available for use"
2469 };
2470
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"
2474 };
2475
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)"
2479 };
2480
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"
2484 };
2485
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"
2489 };
2490
2491
2492
2493 static const value_string GetChannelAuthCap_channelno_vals[] = {
2494         { 0x0,  "0" },
2495         { 0x1,  "1" },
2496         { 0x2,  "2" },
2497         { 0x3,  "3" },
2498         { 0x4,  "4" },
2499         { 0x5,  "5" },
2500         { 0x6,  "6" },
2501         { 0x7,  "7" },
2502         { 0x8,  "8" },
2503         { 0x9,  "9" },
2504         { 0xa,  "10" },
2505         { 0xb,  "11" },
2506         { 0xe,  "Retrieve information for channel this request was issued on" },
2507         { 0xf,  "15" },
2508         { 0x0,  NULL },
2509 };
2510
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" },
2518         { 0x0,  NULL },
2519 };
2520 /* 22-15, Get Channel Authentication Capabilities Command */
2521 static void
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_)
2524 {
2525         proto_tree      *field_tree = NULL;
2526         proto_item      *tf = NULL;
2527
2528         if(response) {
2529                 if (tree) {
2530                         /* Byte 2 Channel Number */
2531                         proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_Cap_channel_number,
2532                                                                 tvb, (*poffset), 1, TRUE);
2533                         (*poffset)++;
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);
2547                         (*poffset)++;
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);
2558
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);
2565                         (*poffset)++;
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);
2571                         (*poffset)++;
2572                         proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_OEM_ID,
2573                                                                 tvb, (*poffset), 3, TRUE);
2574                         (*poffset)+=3;
2575                         proto_tree_add_item(ipmi_tree, hf_Get_Channel_Auth_OEM_AUX,
2576                                                                 tvb, (*poffset), 1, TRUE);
2577                 }
2578         }else{
2579                 if (tree) {
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);
2584                         (*poffset)++;
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);
2588                 }
2589         }
2590 }
2591 /* Storage NetFN (0x0a) */
2592 static void
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)
2595 {
2596
2597         proto_tree      *field_tree = NULL;
2598         proto_item      *tf = NULL;
2599         guint8          Response_Data_Byte4;
2600         
2601         if(response) {
2602
2603                 /* FRU Inventory area size in bytes */
2604                 if (tree) {
2605                         proto_tree_add_item(ipmi_tree, hf_GetFRUInventoryAreaInfo_datafield_FRUInventoryAreaSize,
2606                                                                 tvb, (*poffset), 2, TRUE);
2607                         (*poffset)+=2;
2608                 }
2609                 /* Response Data Byte4 */
2610                 if (tree) {
2611                         
2612                         Response_Data_Byte4 =  tvb_get_guint8(tvb, auth_offset + 19) ;
2613                         
2614                         tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2615                                          "Device is accessed by bytes or words: %s0x%02x", " ", Response_Data_Byte4);
2616
2617                         field_tree = proto_item_add_subtree(tf, ett_cmd_GetFRUInventoryAreaInfo_data_ResponseDataByte4);
2618
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);
2623                         (*poffset)++;
2624                 }
2625                 
2626         }
2627         else {
2628                 
2629                 /* FRU Device ID */
2630                 if (tree) {
2631                         proto_tree_add_item(ipmi_tree, hf_GetFRUInventoryAreaInfo_datafield_FRUDeviceID,
2632                                                                 tvb, (*poffset)++, 1, TRUE);
2633                 }
2634                 
2635         }
2636         
2637 }
2638
2639 static void
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)
2642 {
2643
2644         proto_tree      *field_tree = NULL;
2645         proto_item      *tf = NULL;
2646         guint8          Operation_Support;
2647         
2648         if(response) {
2649
2650                 /* SEL Version */
2651                 if (tree) {
2652                         proto_tree_add_item(ipmi_tree, hf_GetSELInfo_datafield_SELVersion,
2653                                                                 tvb, (*poffset)++, 1, TRUE);
2654                 }
2655                 
2656                 
2657                 /* number of log entries in SEL */
2658                 if (tree) {
2659                         
2660                         proto_tree_add_item(ipmi_tree, hf_GetSELInfo_datafield_Entries,
2661                                     tvb, *poffset, 2, TRUE);
2662                         (*poffset)+=2;
2663                 }
2664
2665                 /* Free Space in bytes */
2666                 if (tree) {
2667                         
2668                         proto_tree_add_item(ipmi_tree, hf_GetSELInfo_datafield_FreeSpace,
2669                                     tvb, *poffset, 2, TRUE);
2670                         (*poffset)+=2;
2671                 }
2672
2673
2674                 /* Most recent addition timestamp */
2675                 if (tree) {
2676                         
2677                         proto_tree_add_item(ipmi_tree, hf_GetSELInfo_datafield_AdditionTimestamp,
2678                                     tvb, *poffset, 4, TRUE);
2679                         (*poffset)+=4;
2680                 
2681                 }
2682
2683                 /* Most recent addition timestamp */
2684                 if (tree) {
2685                         
2686                         proto_tree_add_item(ipmi_tree, hf_GetSELInfo_datafield_EraseTimestamp,
2687                                     tvb, *poffset, 4, TRUE);
2688                         (*poffset)+=4;
2689                 
2690                 }
2691                 
2692                 /* Operation Support */
2693                 if (tree) {
2694                         
2695                         Operation_Support =  tvb_get_guint8(tvb, auth_offset + 30) ;
2696                         
2697                         tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2698                                          "Operation Support: %s0x%02x", " ", Operation_Support);
2699
2700                         field_tree = proto_item_add_subtree(tf, ett_cmd_GetSELInfo_data_OperationSupport);
2701
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);
2714                         (*poffset)++;
2715                 }
2716                 
2717         }
2718         else
2719                 return;
2720
2721 }
2722
2723 static void
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_)
2726 {
2727         
2728         if(response) {
2729
2730                 /* Reservation ID */
2731                 if (tree) {
2732                         proto_tree_add_item(ipmi_tree, hf_ReserveSEL_datafield_ReservationID,
2733                                     tvb, *poffset, 2, TRUE);
2734                         (*poffset)+=2;
2735                 }
2736
2737         }
2738         else
2739                 return;
2740
2741 }
2742
2743 static void
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_)
2746 {
2747
2748         tvbuff_t                *next_tvb;
2749         
2750         if(response) {
2751
2752                 /* Next SEL Record ID */
2753                 if (tree) {
2754                         proto_tree_add_item(ipmi_tree, hf_GetSELEntry_datafield_NextSELRecordID,
2755                                                                 tvb, (*poffset), 2, TRUE);
2756                         (*poffset)+=2;
2757                         len-=2;
2758                 }
2759                 /* Record Data */
2760                 if (tree) {
2761                         next_tvb = tvb_new_subset(tvb, *poffset, len, len);
2762                         call_dissector(data_handle, next_tvb, pinfo, tree);
2763                         *poffset += len;
2764                 }
2765                 
2766         }
2767         else {
2768                 
2769                 /* Reservation ID */
2770                 if (tree) {
2771                         proto_tree_add_item(ipmi_tree, hf_GetSELEntry_datafield_ReservationID,
2772                                     tvb, *poffset, 2, TRUE);
2773                         (*poffset)+=2;
2774                 }
2775                 /* SEL Record ID */
2776                 if (tree) {
2777                         proto_tree_add_item(ipmi_tree, hf_GetSELEntry_datafield_SELRecordID,
2778                                     tvb, *poffset, 2, TRUE);
2779                         (*poffset)+=2;
2780                 }
2781                 /* Offset into record */
2782                 if (tree) {
2783                         proto_tree_add_item(ipmi_tree, hf_GetSELEntry_datafield_OffsetIntoRecord,
2784                                     tvb, (*poffset)++, 1, TRUE);
2785                 }
2786                 /* Bytes to read */
2787                 if (tree) {
2788                         proto_tree_add_item(ipmi_tree, hf_GetSELEntry_datafield_BytesToRead,
2789                                     tvb, (*poffset)++, 1, TRUE);
2790                 }
2791
2792         }
2793
2794 }
2795
2796 static void
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)
2799 {
2800
2801         proto_tree      *field_tree = NULL;
2802         proto_item      *tf = NULL;
2803         guint8          erasure_progress;
2804         
2805         if(response) {
2806
2807                 /* Erasure progress */
2808                 if (tree) {
2809                         
2810                         erasure_progress =  tvb_get_guint8(tvb, auth_offset + 17) ;
2811                         
2812                         tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2813                                          "Erasure progress: %s0x%02x", " ", erasure_progress);
2814
2815                         field_tree = proto_item_add_subtree(tf, ett_cmd_ClearSEL_data_ErasureProgress);
2816
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);
2821                         (*poffset)++;
2822                 }
2823                 
2824         }
2825         else {
2826                 
2827                 /* Reservation ID */
2828                 if (tree) {
2829                         proto_tree_add_item(ipmi_tree, hf_ClearSEL_datafield_ReservationID,
2830                                     tvb, *poffset, 2, TRUE);
2831                         (*poffset)+=2;
2832                 }
2833                 /* 'C' (43h) */
2834                 if (tree) {
2835                         proto_tree_add_item(ipmi_tree, hf_ClearSEL_datafield_Byte3,
2836                                     tvb, (*poffset)++, 1, TRUE);
2837                 }
2838                 /* 'L' (4Ch) */
2839                 if (tree) {
2840                         proto_tree_add_item(ipmi_tree, hf_ClearSEL_datafield_Byte4,
2841                                     tvb, (*poffset)++, 1, TRUE);
2842                 }
2843                 /* 'R' (52h) */
2844                 if (tree) {
2845                         proto_tree_add_item(ipmi_tree, hf_ClearSEL_datafield_Byte5,
2846                                     tvb, (*poffset)++, 1, TRUE);
2847                 }
2848                 /* Data Byte 6 */
2849                 if (tree) {
2850                         proto_tree_add_item(ipmi_tree, hf_ClearSEL_datafield_Byte6,
2851                                     tvb, (*poffset)++, 1, TRUE);
2852                 }
2853
2854         }
2855 }
2856
2857
2858 /* Picmg NetFN (0x2c) */
2859
2860 static void
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_)
2863 {
2864                 /*proto_tree    *field_tree = NULL;
2865                 proto_item      *tf = NULL;
2866                 guint8          picmg_identifier,  PICMGExtensionVersion, MaxFRUDeviceID, FRUDeviceIDforIPMController;*/
2867                         
2868                 if(response) {
2869
2870                         /* PICMG Identifier */
2871                         if (tree) {
2872                                 proto_tree_add_item(ipmi_tree, hf_GetPICMGProperties_datafield_PICMGIdentifier,
2873                                                                         tvb, (*poffset)++, 1, TRUE);
2874                         }
2875                         /* PICMG Extension Version */
2876                         if (tree) {
2877                                 proto_tree_add_item(ipmi_tree, hf_GetPICMGProperties_datafield_PICMGExtensionVersion,
2878                                                                         tvb, (*poffset)++, 1, TRUE);
2879                         }
2880                         /*Max FRU Device ID*/
2881                         if (tree) {
2882                                 proto_tree_add_item(ipmi_tree, hf_GetPICMGProperties_datafield_MaxFRUDeviceID,
2883                                                                         tvb, (*poffset)++, 1, TRUE);
2884                         }       
2885                         /*FRU Device ID for IPM Controller*/
2886                         if (tree) {
2887                                 proto_tree_add_item(ipmi_tree, hf_GetPICMGProperties_datafield_FRUDeviceIDforIPMController,
2888                                                                         tvb, (*poffset)++, 1, TRUE);
2889                         }       
2890                 }
2891                 else {
2892                         /* PICMG Identifier */
2893                         if (tree) {
2894                                 proto_tree_add_item(ipmi_tree, hf_GetPICMGProperties_datafield_PICMGIdentifier,
2895                                                                         tvb, (*poffset)++, 1, TRUE);
2896                         }
2897                 }
2898
2899
2900 }
2901
2902 static void
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_)
2905 {
2906
2907                 if(response) {
2908
2909                         /* PICMG Identifier */
2910                         if (tree) {
2911                                 proto_tree_add_item(ipmi_tree, hf_FRUControl_datafield_PICMGIdentifier,
2912                                                                         tvb, (*poffset)++, 1, TRUE);
2913                         }
2914
2915                 }
2916                 else {
2917                         
2918                         /* PICMG Identifier */
2919                         if (tree) {
2920                                 proto_tree_add_item(ipmi_tree, hf_FRUControl_datafield_PICMGIdentifier,
2921                                                                         tvb, (*poffset)++, 1, TRUE);
2922                         }
2923                         /* FRU Device ID */
2924                         if (tree) {
2925                                 proto_tree_add_item(ipmi_tree, hf_FRUControl_datafield_FRUDeviceID,
2926                                                                         tvb, (*poffset)++, 1, TRUE);
2927                         }
2928                         /* FRU Control Option*/
2929                         if (tree) {
2930                                 proto_tree_add_item(ipmi_tree, hf_FRUControl_datafield_FRUControlOption,
2931                                                                         tvb, (*poffset)++, 1, TRUE);
2932                         }
2933
2934                 }
2935
2936 }
2937
2938 static void
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)
2941 {
2942                 proto_tree      *field_tree = NULL;
2943                 proto_item      *tf = NULL;
2944                 guint8          LedProperties;
2945                 
2946                 if(response) {
2947
2948                         /* PICMG Identifier */
2949                         if (tree) {
2950                                 proto_tree_add_item(ipmi_tree, hf_GetFRULedProperties_datafield_PICMGIdentifier,
2951                                                                         tvb, (*poffset)++, 1, TRUE);
2952                         }
2953                         /* General Status LED Properties */
2954                         if (tree) {
2955                         
2956                                 LedProperties = tvb_get_guint8(tvb, auth_offset + 18) ;
2957                                 
2958                                 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
2959                                                         "General Status LED Properties: %s0x%02x", " ", LedProperties);
2960
2961                                 field_tree = proto_item_add_subtree(tf, ett_cmd_GetFRULedProperties_data_LedProperties);
2962
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);
2973                                 (*poffset)++;
2974                                 
2975                         }
2976                         /* Application Specific LED Count */
2977                         if (tree) {
2978                                 proto_tree_add_item(ipmi_tree, hf_GetFRULedProperties_datafield_ApplicationSpecificLEDCount,
2979                                                                         tvb, (*poffset)++, 1, TRUE);
2980                         }
2981
2982                 }
2983                 else {
2984                         
2985                         /* PICMG Identifier */
2986                         if (tree) {
2987                                 proto_tree_add_item(ipmi_tree, hf_GetFRULedProperties_datafield_PICMGIdentifier,
2988                                                                         tvb, (*poffset)++, 1, TRUE);
2989                         }
2990                         /* FRU Device ID */
2991                         if (tree) {
2992                                 proto_tree_add_item(ipmi_tree, hf_GetFRULedProperties_datafield_FRUDeviceID,
2993                                                                         tvb, (*poffset)++, 1, TRUE);
2994                         }
2995                         
2996                 }
2997
2998 }
2999
3000 static void 
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)
3003 {
3004
3005                 proto_tree      *field_tree = NULL;
3006                 proto_item      *tf = NULL;
3007                 guint8          LEDColorCapabilities, DefaultLEDColorLocalControl, DefaultLEDColorOverride;
3008                 
3009                 if(response) {
3010
3011                         /* PICMG Identifier */
3012                         if (tree) {
3013                                 proto_tree_add_item(ipmi_tree, hf_GetLedColorCapabilities_datafield_PICMGIdentifier,
3014                                                                         tvb, (*poffset)++, 1, TRUE);
3015                         }
3016                         /* LED Color Capabilities */
3017                         if (tree) {
3018                         
3019                                 LEDColorCapabilities = tvb_get_guint8(tvb, auth_offset + 18) ;
3020                                 
3021                                 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3022                                                         "LED Color Capabilities: %s0x%02x", " ", LEDColorCapabilities);
3023
3024                                 field_tree = proto_item_add_subtree(tf, ett_cmd_GetLedColorCapabilities_data_LEDColorCapabilities);
3025
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);
3042                                 (*poffset)++;
3043                                 
3044                         }
3045                         /* Default LED Color in Local Control State*/
3046                         if (tree) {
3047                                 
3048                                 DefaultLEDColorLocalControl = tvb_get_guint8(tvb, auth_offset + 19) ;
3049                                 
3050                                 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3051                                                         "Default LED Color in Local Control State: %s0x%02x", " ", DefaultLEDColorLocalControl);
3052
3053                                 field_tree = proto_item_add_subtree(tf, ett_cmd_GetLedColorCapabilities_data_DefaultLEDColorLocalControl);
3054
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);
3059                                 (*poffset)++;
3060                         }
3061                         /* Default LED Color in Override State */
3062                         if (tree) {
3063                                 
3064                                 DefaultLEDColorOverride = tvb_get_guint8(tvb, auth_offset + 20) ;
3065                                 
3066                                 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3067                                                         "Default LED Color in Override State: %s0x%02x", " ", DefaultLEDColorOverride);
3068
3069                                 field_tree = proto_item_add_subtree(tf, ett_cmd_GetLedColorCapabilities_data_DefaultLEDColorOverride);
3070
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);
3075                                 (*poffset)++;
3076                         }
3077
3078                 }
3079                 else {
3080                         
3081                         /* PICMG Identifier */
3082                         if (tree) {
3083                                 proto_tree_add_item(ipmi_tree, hf_GetLedColorCapabilities_datafield_PICMGIdentifier,
3084                                                                         tvb, (*poffset)++, 1, TRUE);
3085                         }
3086                         /* FRU Device ID */
3087                         if (tree) {
3088                                 proto_tree_add_item(ipmi_tree, hf_GetLedColorCapabilities_datafield_FRUDeviceID,
3089                                                                         tvb, (*poffset)++, 1, TRUE);
3090                         }
3091                         /* LED ID */
3092                         if (tree) {
3093                                 proto_tree_add_item(ipmi_tree, hf_GetLedColorCapabilities_datafield_LEDID,
3094                                                                         tvb, (*poffset)++, 1, TRUE);
3095                         }
3096                         
3097                         
3098                 }
3099
3100 }
3101
3102 static void 
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)
3105 {
3106                 proto_tree      *field_tree = NULL;
3107                 proto_item      *tf = NULL;
3108                 guint8          Color;
3109
3110                 
3111                 if(response) {
3112
3113                         /* PICMG Identifier */
3114                         if (tree) {
3115                                 proto_tree_add_item(ipmi_tree, hf_SetFRULedState_datafield_PICMGIdentifier,
3116                                                                         tvb, (*poffset)++, 1, TRUE);
3117                         }
3118                         
3119                 }
3120                 else {
3121
3122                         /* PICMG Identifier */
3123                         if (tree) {
3124                                 proto_tree_add_item(ipmi_tree, hf_SetFRULedState_datafield_PICMGIdentifier,
3125                                                                         tvb, (*poffset)++, 1, TRUE);
3126                         }
3127                         /* FRU Device ID */
3128                         if (tree) {
3129                                 proto_tree_add_item(ipmi_tree, hf_SetFRULedState_datafield_FRUDeviceID,
3130                                                                         tvb, (*poffset)++, 1, TRUE);
3131                         }
3132                         /* LED ID */
3133                         if (tree) {
3134                                 proto_tree_add_item(ipmi_tree, hf_SetFRULedState_datafield_LEDID,
3135                                                                         tvb, (*poffset)++, 1, TRUE);
3136                         }
3137                         /* LED Function */
3138                         if (tree) {
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);
3143                                 } else {
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);
3147                                 }
3148                         }
3149                         /*On-duration */
3150                         if (tree) {
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);
3155                         }
3156                         /* Color when illuminated */
3157                         if (tree) {
3158
3159                                 Color = tvb_get_guint8(tvb, auth_offset + 21) ;
3160                         
3161                                 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3162                                                         "Color when illuminated: %s0x%02x", " ", Color);
3163
3164                                 field_tree = proto_item_add_subtree(tf, ett_cmd_SetFRULedState_data_Color);
3165
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);
3170                                 (*poffset)++;
3171                                 
3172                         }
3173                         
3174                 }
3175
3176 }
3177
3178 static void 
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)
3181 {
3182                 proto_tree      *field_tree = NULL;
3183                 proto_item      *tf = NULL;
3184                 guint8          led_state, Color;
3185
3186                 
3187                 if(response) {
3188
3189                         /* PICMG Identifier */
3190                         if (tree) {
3191                                 proto_tree_add_item(ipmi_tree, hf_GetFRULedState_datafield_PICMGIdentifier,
3192                                                                         tvb, (*poffset)++, 1, TRUE);
3193                         }
3194                         /* LED state */
3195                         if (tree) {
3196
3197                                 led_state = tvb_get_guint8(tvb, auth_offset + 18) ;
3198                         
3199                                 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3200                                                         "LED State: %s0x%02x", " ", led_state);
3201
3202                                 field_tree = proto_item_add_subtree(tf, ett_cmd_GetFRULedState_data_LEDState);
3203
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);
3212                                 (*poffset)++;
3213                         }
3214                         /* Local Control LED Function */
3215                         if (tree) {
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);
3220                                 } else {
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);
3224                                 }
3225                         }
3226                         /* Local Control On-duration */
3227                         if (tree) {
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);
3232                         }
3233                         /* Local Control Color */
3234                         if (tree) {
3235
3236                                 Color = tvb_get_guint8(tvb, auth_offset + 21) ;
3237                         
3238                                 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3239                                                         "Local Control Color: %s0x%02x", " ", Color);
3240
3241                                 field_tree = proto_item_add_subtree(tf, ett_cmd_GetFRULedState_data_LocalControlColor);
3242
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);
3247                                 (*poffset)++;
3248                                 
3249                         }
3250                         /* Override State LED Function */
3251                         if (tree) {
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);
3256                                 } else {
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);
3260                                 }
3261                         }
3262                         /* Override State On-duration */
3263                         if (tree) {
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);
3268                         }
3269                         /* Override State Color */
3270                         if (tree) {
3271                                 
3272                                 Color = tvb_get_guint8(tvb, auth_offset + 24) ;
3273                         
3274                                 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3275                                                         "Override State Color: %s0x%02x", " ", Color);
3276
3277                                 field_tree = proto_item_add_subtree(tf, ett_cmd_GetFRULedState_data_OverrideStateColor);
3278
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);
3283                                 (*poffset)++;
3284                         }
3285                         /* Lamp Test Duration */
3286                         if (tree) {
3287                                 proto_tree_add_item(ipmi_tree, hf_GetFRULedState_datafield_LampTestDuration,
3288                                                                         tvb, (*poffset)++, 1, TRUE);
3289                         }
3290                         
3291                 }
3292                 else {
3293
3294                         /* PICMG Identifier */
3295                         if (tree) {
3296                                 proto_tree_add_item(ipmi_tree, hf_GetFRULedState_datafield_PICMGIdentifier,
3297                                                                         tvb, (*poffset)++, 1, TRUE);
3298                         }
3299                         /* FRU Device ID */
3300                         if (tree) {
3301                                 proto_tree_add_item(ipmi_tree, hf_GetFRULedState_datafield_FRUDeviceID,
3302                                                                         tvb, (*poffset)++, 1, TRUE);
3303                         }
3304                         /* LED ID */
3305                         if (tree) {
3306                                 proto_tree_add_item(ipmi_tree, hf_GetFRULedState_datafield_LEDID,
3307                                                                         tvb, (*poffset)++, 1, TRUE);
3308                         }
3309                         
3310                 }
3311
3312 }
3313
3314 static void
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)
3317 {
3318                 proto_tree      *field_tree = NULL;
3319                 proto_item      *tf = NULL;
3320                 guint8          FRUActivationPolicyMaskBit, MaskBit1, MaskBit0, FRUActivationPolicySetBit;
3321                 
3322                 if(response) {
3323
3324                         /* PICMG Identifier */
3325                         if (tree) {
3326                                 proto_tree_add_item(ipmi_tree, hf_SetFRUActivationPolicy_datafield_PICMGIdentifier,
3327                                                                         tvb, (*poffset)++, 1, TRUE);
3328                         }
3329                         
3330                 }
3331                 else {
3332
3333                         /* PICMG Identifier */
3334                         if (tree) {
3335                                 proto_tree_add_item(ipmi_tree, hf_SetFRUActivationPolicy_datafield_PICMGIdentifier,
3336                                                                         tvb, (*poffset)++, 1, TRUE);
3337                         }
3338                         /* FRU Device ID */
3339                         if (tree) {
3340                                 proto_tree_add_item(ipmi_tree, hf_SetFRUActivationPolicy_datafield_FRUDeviceID,
3341                                                                         tvb, (*poffset)++, 1, TRUE);
3342                         }
3343                         /* FRU Activation Policy Mask Bit */
3344                         FRUActivationPolicyMaskBit = tvb_get_guint8(tvb, auth_offset + 18) ;
3345                         if (tree) {
3346                                 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3347                                                         "FRU Activation Policy Mask Bit : %s0x%02x", " ", FRUActivationPolicyMaskBit);
3348
3349                                 field_tree = proto_item_add_subtree(tf, ett_cmd_SetFRUActivationPolicy_data_FRUActivationPolicyMaskBit);
3350
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);
3357                                 (*poffset)++;
3358                         }
3359                         /* FRU Activation Policy Set Bit */
3360                         MaskBit1 = FRUActivationPolicyMaskBit & 0x02;
3361                         MaskBit0 = FRUActivationPolicyMaskBit & 0x01;
3362                         
3363                         if(MaskBit1&&MaskBit0) {
3364
3365                                 if (tree) {
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);
3369
3370                                         field_tree = proto_item_add_subtree(tf, ett_cmd_SetFRUActivationPolicy_data_FRUActivationPolicySetBit);
3371
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);
3378                                         (*poffset)++;
3379                                 }
3380                                 
3381                         }
3382                         else if(MaskBit1) {
3383                                 
3384                                         if (tree) {
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);
3388
3389                                                 field_tree = proto_item_add_subtree(tf, ett_cmd_SetFRUActivationPolicy_data_FRUActivationPolicySetBit);
3390
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);
3397                                                 (*poffset)++;
3398                                         }
3399                                         
3400                                 }
3401                         else if(MaskBit0) {
3402
3403                                         if (tree) {
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);
3407
3408                                                 field_tree = proto_item_add_subtree(tf, ett_cmd_SetFRUActivationPolicy_data_FRUActivationPolicySetBit);
3409
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);
3416                                                 (*poffset)++;
3417                                         }
3418                                 }
3419                         else {
3420                                 
3421                                 if (tree) {
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);
3425
3426                                                 field_tree = proto_item_add_subtree(tf, ett_cmd_SetFRUActivationPolicy_data_FRUActivationPolicySetBit);
3427
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);
3434                                                 (*poffset)++;
3435                                         }
3436                                 
3437                         }
3438                                 
3439                         
3440                 }
3441
3442 }
3443
3444 static void
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)
3447 {
3448
3449                 proto_tree      *field_tree = NULL;
3450                 proto_item      *tf = NULL;
3451                 guint8          FRUActivationPolicy;
3452                 
3453                 if(response) {
3454
3455                         /* PICMG Identifier */
3456                         if (tree) {
3457                                 proto_tree_add_item(ipmi_tree, hf_GetFRUActivationPolicy_datafield_PICMGIdentifier,
3458                                                                         tvb, (*poffset)++, 1, TRUE);
3459                         }
3460                         /* FRU Activation Policy Mask Bit */
3461                         if (tree) {
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);
3465
3466                                 field_tree = proto_item_add_subtree(tf, ett_cmd_GetFRUActivationPolicy_data_FRUActivationPolicy);
3467
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);
3474                                 (*poffset)++;
3475                         }
3476                         
3477                 }
3478                 else {
3479
3480                         /* PICMG Identifier */
3481                         if (tree) {
3482                                 proto_tree_add_item(ipmi_tree, hf_GetFRUActivationPolicy_datafield_PICMGIdentifier,
3483                                                                         tvb, (*poffset)++, 1, TRUE);
3484                         }
3485                         /* FRU Device ID */
3486                         if (tree) {
3487                                 proto_tree_add_item(ipmi_tree, hf_GetFRUActivationPolicy_datafield_FRUDeviceID,
3488                                                                         tvb, (*poffset)++, 1, TRUE);
3489                         }
3490                         
3491                 }
3492
3493
3494 }
3495
3496 static void
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_)
3499 {
3500
3501                 if(response) {
3502
3503                         /* PICMG Identifier */
3504                         if (tree) {
3505                                 proto_tree_add_item(ipmi_tree, hf_SetFRUActivation_datafield_PICMGIdentifier,
3506                                                                         tvb, (*poffset)++, 1, TRUE);
3507                         }
3508                         
3509                 }
3510                 else {
3511
3512                         /* PICMG Identifier */
3513                         if (tree) {
3514                                 proto_tree_add_item(ipmi_tree, hf_SetFRUActivation_datafield_PICMGIdentifier,
3515                                                                         tvb, (*poffset)++, 1, TRUE);
3516                         }
3517                         /* FRU Device ID */
3518                         if (tree) {
3519                                 proto_tree_add_item(ipmi_tree, hf_SetFRUActivation_datafield_FRUDeviceID,
3520                                                                         tvb, (*poffset)++, 1, TRUE);
3521                         }
3522                         /*FRU Activation/Deactivation*/
3523                         if (tree) {
3524                                 proto_tree_add_item(ipmi_tree, hf_SetFRUActivation_datafield_FRUActivationDeactivation,
3525                                                                         tvb, (*poffset)++, 1, TRUE);
3526                         }       
3527                         
3528                 }
3529
3530 }
3531
3532 static void
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_)
3535 {
3536                                 
3537                 if(response) {
3538
3539                         /* PICMG Identifier */
3540                         if (tree) {
3541                                 proto_tree_add_item(ipmi_tree, hf_GetDeviceLocatorRecordID_datafield_PICMGIdentifier,
3542                                                                         tvb, (*poffset)++, 1, TRUE);
3543                         }
3544                         /* Record ID */
3545                         if (tree) {
3546                                 proto_tree_add_item(ipmi_tree, hf_GetDeviceLocatorRecordID_datafield_RecordID,
3547                                                                         tvb, *poffset, 2, TRUE);
3548                                 (*poffset)+=2;
3549                         }
3550                         
3551                 }
3552                 else {
3553
3554                         /* PICMG Identifier */
3555                         if (tree) {
3556                                 proto_tree_add_item(ipmi_tree, hf_GetDeviceLocatorRecordID_datafield_PICMGIdentifier,
3557                                                                         tvb, (*poffset)++, 1, TRUE);
3558                         }
3559                          /* FRU Device ID */
3560                         if (tree) {
3561                                 proto_tree_add_item(ipmi_tree, hf_GetDeviceLocatorRecordID_datafield_FRUDeviceID,
3562                                                                         tvb, (*poffset)++, 1, TRUE);
3563                         }
3564                 
3565                 }
3566
3567 }
3568
3569 static void
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_)
3572 {
3573                 if(response) {
3574
3575                         /* PICMG Identifier */
3576                         if (tree) {
3577                                 proto_tree_add_item(ipmi_tree, hf_SetPowerLevel_datafield_PICMGIdentifier,
3578                                                                         tvb, (*poffset)++, 1, TRUE);
3579                         }
3580
3581                 }
3582                 else {
3583                         
3584                         /* PICMG Identifier */
3585                         if (tree) {
3586                                 proto_tree_add_item(ipmi_tree, hf_SetPowerLevel_datafield_PICMGIdentifier,
3587                                                                         tvb, (*poffset)++, 1, TRUE);
3588                         }
3589                         /* FRU Device ID */
3590                         if (tree) {
3591                                 proto_tree_add_item(ipmi_tree, hf_SetPowerLevel_datafield_FRUDeviceID,
3592                                                                         tvb, (*poffset)++, 1, TRUE);
3593                         }
3594                         /* Power Level*/
3595                         if (tree) {
3596                                 proto_tree_add_item(ipmi_tree, hf_SetPowerLevel_datafield_PowerLevel,
3597                                                                         tvb, (*poffset)++, 1, TRUE);
3598                         }
3599                         /* Set Present Levels to Desired Levels */
3600                         if (tree) {
3601                                         proto_tree_add_item(ipmi_tree, hf_SetPowerLevel_datafield_SetPresentLevelsToDesiredLevels,
3602                                                                         tvb, (*poffset)++, 1, TRUE);
3603                                 }       
3604                                                 
3605                 }
3606
3607 }
3608
3609 static void
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)
3612 {
3613                 proto_tree      *field_tree = NULL;
3614                 proto_item      *tf = NULL;
3615                 guint8          Properties, j;
3616
3617                 
3618                 if(response) {
3619
3620                         Properties = tvb_get_guint8(tvb, auth_offset + 18) ;
3621                         
3622                         /* PICMG Identifier */
3623                         if (tree) {
3624                                 proto_tree_add_item(ipmi_tree, hf_GetPowerLevel_datafield_PICMGIdentifier,
3625                                                                         tvb, (*poffset)++, 1, TRUE);
3626                         }
3627                         /* Properties */
3628                         if (tree) {
3629                         
3630                                 tf = proto_tree_add_text(ipmi_tree, tvb, *poffset, 1,
3631                                                         "Properties: %s0x%02x", " ", Properties);
3632
3633                                 field_tree = proto_item_add_subtree(tf, ett_cmd_GetPowerLevel_data_Properties);
3634
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);
3641                                 (*poffset)++;
3642                                 
3643                         }
3644                         /*Delay To Stable Power*/
3645                         if (tree) {
3646                                 proto_tree_add_item(ipmi_tree, hf_GetPowerLevel_datafield_DelayToStablePower,
3647                                                                         tvb, (*poffset)++, 1, TRUE);
3648                         }
3649                         /*Power Multiplier*/
3650                         if (tree) {
3651                                 proto_tree_add_item(ipmi_tree, hf_GetPowerLevel_datafield_PowerMultiplier,
3652                                                                         tvb, (*poffset)++, 1, TRUE);
3653                         }
3654                         /*Power Draw*/
3655                         for(j=0; j<len-4; j++) {
3656                         
3657                                 if (tree) {
3658                                         proto_tree_add_item(ipmi_tree, hf_GetPowerLevel_datafield_PowerDraw,
3659                                                                         tvb, (*poffset)++, 1, TRUE);
3660                                 }       
3661                         }
3662                                         
3663                 }
3664                 else {
3665
3666                         /* PICMG Identifier */
3667                         if (tree) {
3668                                 proto_tree_add_item(ipmi_tree, hf_GetPowerLevel_datafield_PICMGIdentifier,
3669                                                                         tvb, (*poffset)++, 1, TRUE);
3670                         }
3671                         /* FRU Device ID */
3672                         if (tree) {
3673                                 proto_tree_add_item(ipmi_tree, hf_GetPowerLevel_datafield_FRUDeviceID,
3674                                                                         tvb, (*poffset)++, 1, TRUE);
3675                         }
3676                         /* Power Type */
3677                         if (tree) {
3678                                 proto_tree_add_item(ipmi_tree, hf_GetPowerLevel_datafield_PowerType,
3679                                                                         tvb, (*poffset)++, 1, TRUE);
3680                         }
3681                         
3682                 }
3683
3684 }
3685
3686 static void
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_)
3689 {
3690                 if(response) {
3691
3692                         /* PICMG Identifier */
3693                         if (tree) {
3694                                 proto_tree_add_item(ipmi_tree, hf_SetFanLevel_datafield_PICMGIdentifier,
3695                                                                         tvb, (*poffset)++, 1, TRUE);
3696                         }
3697
3698                 }
3699                 else {
3700                         
3701                         /* PICMG Identifier */
3702                         if (tree) {
3703                                 proto_tree_add_item(ipmi_tree, hf_SetFanLevel_datafield_PICMGIdentifier,
3704                                                                         tvb, (*poffset)++, 1, TRUE);
3705                         }
3706                         /* FRU Device ID */
3707                         if (tree) {
3708                                 proto_tree_add_item(ipmi_tree, hf_SetFanLevel_datafield_FRUDeviceID,
3709                                                                         tvb, (*poffset)++, 1, TRUE);
3710                         }
3711                         /* Fan Level */
3712                         if (tree) {
3713                                 proto_tree_add_item(ipmi_tree, hf_SetFanLevel_datafield_FanLevel,
3714                                                                         tvb, (*poffset)++, 1, TRUE);
3715                         }
3716                                                 
3717                 }
3718
3719 }
3720
3721 static void
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_)
3724 {
3725                                 
3726                 if(response) {
3727
3728                         /* PICMG Identifier */
3729                         if (tree) {
3730                                 proto_tree_add_item(ipmi_tree, hf_GetFanLevel_datafield_PICMGIdentifier,
3731                                                                         tvb, (*poffset)++, 1, TRUE);
3732                         }
3733                          
3734                         /* Override Fan Level */
3735                         if (tree) {
3736                                 proto_tree_add_item(ipmi_tree, hf_GetFanLevel_datafield_OverrideFanLevel,
3737                                                                         tvb, (*poffset)++, 1, TRUE);
3738                         }
3739                         if(3==len) {
3740                         /* Local Control Fan Level */
3741                                 if (tree) {
3742                                         proto_tree_add_item(ipmi_tree, hf_GetFanLevel_datafield_LocalControlFanLevel,
3743                                                                         tvb, (*poffset)++, 1, TRUE);
3744                                 }
3745                         }
3746                                 
3747                 }
3748                 else {
3749
3750                         /* PICMG Identifier */
3751                         if (tree) {
3752                                 proto_tree_add_item(ipmi_tree, hf_GetFanLevel_datafield_PICMGIdentifier,
3753                                                                         tvb, (*poffset)++, 1, TRUE);
3754                         }
3755                         /* FRU Device ID */
3756                         if (tree) {
3757                                 proto_tree_add_item(ipmi_tree, hf_GetFanLevel_datafield_FRUDeviceID,
3758                                                                         tvb, (*poffset)++, 1, TRUE);
3759                         }
3760                         
3761                 }
3762
3763 }
3764
3765
3766
3767 /******************************************lane**********************************************/
3768
3769 static void dissect_ipmi_data(proto_tree *, proto_tree *, packet_info *, tvbuff_t *, gint *,
3770                                                 guint8, guint8, guint8, guint8,guint8);
3771
3772
3773 static const ipmi_cmd_dissect ipmi_cmd_array[] = {
3774         
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},
3913         {0x2c,  0x01,   NULL},
3914         {0x2c,  0x02,   NULL},
3915         {0x2c,  0x03,   NULL},
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},
3921         {0x2c,  0x09,   NULL},
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},
3926         {0x2c,  0x0e,   NULL},
3927         {0x2c,  0x0f,   NULL},
3928         {0x2c,  0x10,   NULL},
3929         {0x2c,  0x11,   dissect_cmd_Set_Power_Level},
3930         {0x2c,  0x12,   dissect_cmd_Get_Power_Level},
3931         {0x2c,  0x13,   NULL},
3932         {0x2c,  0x14,   NULL},
3933         {0x2c,  0x15,   dissect_cmd_Set_Fan_Level},
3934         {0x2c,  0x16,   dissect_cmd_Get_Fan_Level},
3935         {0x2c,  0x17,   NULL},
3936         {0x2c,  0x18,   NULL},          
3937 };
3938
3939 #define NUM_OF_CMD_ARRAY (sizeof(ipmi_cmd_array)/sizeof(ipmi_cmd_dissect))
3940
3941 /***************************************************/
3942
3943 static const char *
3944 get_netfn_cmd_text(guint8 netfn, guint8 cmd)
3945 {
3946         switch (netfn) {
3947         case 0x00:
3948         case 0x01:
3949                 return val_to_str(cmd, ipmi_chassis_cmd_vals, "Unknown (0x%02x)");
3950         case 0x02:
3951         case 0x03:
3952                 return val_to_str(cmd, ipmi_bridge_cmd_vals, "Unknown (0x%02x)");
3953         case 0x04:
3954         case 0x05:
3955                 return val_to_str(cmd, ipmi_se_cmd_vals, "Unknown (0x%02x)");
3956         case 0x06:
3957         case 0x07:
3958                 return val_to_str(cmd, ipmi_app_cmd_vals, "Unknown (0x%02x)");
3959         case 0x0a:
3960         case 0x0b:
3961                 return val_to_str(cmd, ipmi_storage_cmd_vals, "Unknown (0x%02x)");
3962         case 0x0c:
3963         case 0x0d:
3964                 return val_to_str(cmd, ipmi_transport_cmd_vals, "Unknown (0x%02x)");
3965         case 0x2c: /* added by lane */
3966         case 0x2d:
3967                 return val_to_str(cmd, ipmi_picmg_cmd_vals, "Unknown (0x%02x)");
3968         default:
3969                 return (netfn & 1) ? "Unknown Response" : "Unknown Request";
3970         }
3971 }
3972
3973 static void
3974 dissect_ipmi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3975 {
3976         proto_tree      *ipmi_tree = NULL, *field_tree = NULL;
3977         proto_item      *ti = NULL, *tf;
3978         gint                    offset = 0;
3979         gint                    auth_offset = 0;
3980         /* tvbuff_t     *next_tvb; */  /* modified by lane */
3981         guint32         session_id;
3982         /*payloadtype for RMCPP*/
3983         guint8          authtype, payloadtype = 0, netfn, cmd, ccode, len, response;
3984         gboolean        payloadtype_auth, payloadtype_enc = 0;
3985
3986         /* session authtype, 0=no authcode present */
3987         authtype = tvb_get_guint8(tvb, 0);
3988
3989
3990
3991         /* EventData 1~3 */
3992         switch(authtype) {
3993
3994                 case IPMI_AUTH_RMCPP:
3995                         /* RMCPP
3996                          *  ipmi.session.authtype       =6
3997                          *      Payload Type                    +1
3998                          *  ipmi.session.id
3999                          *  ipmi.session.sequence
4000                          * [OEM IANA]                           +?
4001                          * [OEM Payload ID]                     +?
4002                          *  ipmi.msg.len                        +1
4003                          */
4004                         auth_offset = 2;
4005
4006                         break;
4007                 case IPMI_AUTH_NONE:
4008                         auth_offset = 0;
4009                         break;
4010                 default:
4011                         auth_offset = 16;
4012                 }
4013
4014
4015 /*
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
4019 */
4020
4021         /* session ID */
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);
4025         } else {
4026                 session_id = tvb_get_letohl(tvb, auth_offset + 5);
4027         }
4028
4029         /* network function code */
4030         netfn = tvb_get_guint8(tvb, auth_offset + 11) >> 2;
4031
4032         /* bit 0 of netfn: even=request odd=response */
4033         response =  netfn & 1;
4034
4035         /* command */
4036         cmd = tvb_get_guint8(tvb, auth_offset + 15);
4037
4038         /* completion code */
4039         ccode = response ? tvb_get_guint8(tvb, auth_offset + 16) : 0;
4040
4041         if (check_col(pinfo->cinfo, COL_PROTOCOL)) {
4042                 if (authtype == IPMI_AUTH_RMCPP) {
4043                         col_set_str(pinfo->cinfo, COL_PROTOCOL, "RMCPP");
4044                 } else {
4045                         col_set_str(pinfo->cinfo, COL_PROTOCOL, "IPMI");
4046                 }
4047         }
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)) {
4052                         if (ccode)
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)"));
4057                         else
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)"));
4061                 }
4062         }
4063
4064         if (tree) {
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);
4072         }
4073         
4074 /*
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
4078 */
4079
4080
4081         /* ipmi session field */
4082
4083         if (authtype == IPMI_AUTH_RMCPP) {
4084
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);
4093
4094                 /*payloadtype */
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
4105                  */
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);
4110                 offset++;
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)"));
4114                 }
4115          
4116                 if ( payloadtype == IPMI_OEM_EXPLICIT){
4117                         proto_tree_add_item(field_tree, hf_ipmi_oem_iana,
4118                                 tvb, offset, 4, TRUE);
4119                         offset = offset+4;
4120                         proto_tree_add_item(field_tree, hf_ipmi_oem_payload_id,
4121                                         tvb, offset, 2, TRUE);
4122                         offset = offset+2;
4123                 }
4124                 proto_tree_add_item(field_tree, hf_ipmi_session_id,
4125                                 tvb, offset, 4, TRUE);
4126                 offset += 4;
4127
4128                 proto_tree_add_item(field_tree, hf_ipmi_session_sequence,
4129                                 tvb, offset, 4, TRUE);
4130                 offset += 4;
4131         } else {
4132                 tf = proto_tree_add_text(ipmi_tree, tvb, offset,
4133                                          auth_offset + 9,
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);
4141                 offset += 4;
4142                 proto_tree_add_item(field_tree, hf_ipmi_session_id,
4143                             tvb, offset, 4, TRUE);
4144                 offset += 4;
4145                 if (authtype != IPMI_AUTH_NONE) {
4146                         proto_tree_add_item(field_tree, hf_ipmi_session_authcode,
4147                                     tvb, offset, 16, TRUE);
4148                         offset += 16;
4149                 }
4150         }
4151
4152         /* message length */
4153         if (tree) {
4154
4155                 if(authtype == IPMI_AUTH_RMCPP) {
4156                         proto_tree_add_item(ipmi_tree, hf_ipmi_msg_len,
4157                                         tvb, offset, 2, TRUE);
4158                                         offset+=2;
4159                                         /*
4160                         proto_tree_add_item(ipmi_tree, hf_ipmi_conf_hdr,
4161                                         tvb, offset, 1, TRUE);
4162                                         offset++;
4163                                         */
4164                 } else {
4165                         proto_tree_add_item(ipmi_tree, hf_ipmi_msg_len,
4166                                         tvb, offset, 1, TRUE);
4167                                         offset++;
4168                 }
4169         }
4170         if ((authtype == IPMI_AUTH_RMCPP)) {
4171                 switch (payloadtype){
4172                 case IPMI_IPMI_MESSAGE:
4173                         if (payloadtype_enc){
4174                                 return;
4175                         }
4176                         break;
4177                 default:
4178                         return;
4179                 
4180                 }
4181
4182         }
4183
4184         /* r[sq]addr */
4185         if (tree) {
4186                 proto_tree_add_item(ipmi_tree,
4187                             response ? hf_ipmi_msg_rqaddr : hf_ipmi_msg_rsaddr,
4188                             tvb, offset++, 1, TRUE);
4189         }
4190
4191         /* netfn/lun */
4192         if (tree) {
4193                 guint8 lun;
4194
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)"),
4198                          netfn);
4199
4200                 field_tree = proto_item_add_subtree(tf, ett_ipmi_msg_nlfield);
4201
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);
4209                 offset += 1;
4210         }
4211
4212         /* checksum */
4213         if (tree) {
4214                 proto_tree_add_item(ipmi_tree, hf_ipmi_msg_csum1,
4215                                     tvb, offset++, 1, TRUE);
4216         }
4217
4218         /* r[sq]addr */
4219         if (tree) {
4220                 proto_tree_add_item(ipmi_tree,
4221                                     response ? hf_ipmi_msg_rsaddr : hf_ipmi_msg_rqaddr,
4222                                     tvb, offset++, 1, TRUE);
4223         }
4224
4225         /* seq/lun */
4226         if (tree) {
4227                 guint8 lun;
4228
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);
4232
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);
4240                 offset += 1;
4241         }
4242         
4243
4244         /* command */
4245         if (tree) {
4246                 proto_tree_add_text(ipmi_tree, tvb, offset++, 1,
4247                                     "Command: %s (0x%02x)",
4248                                     get_netfn_cmd_text(netfn, cmd), cmd);
4249         }
4250         
4251
4252         /* completion code */
4253         if (tree && response) {
4254                 proto_tree_add_item(ipmi_tree, hf_ipmi_msg_ccode,
4255                                     tvb, offset++, 1, TRUE);
4256         }
4257         
4258
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.
4262          */
4263         if(ccode && response && tvb_reported_length_remaining(tvb, offset)==1){
4264                 proto_tree_add_text(ipmi_tree, tvb, offset, 0, "[Truncated response]");
4265
4266                 /* checksum */
4267                 proto_tree_add_item(ipmi_tree, hf_ipmi_msg_csum2,
4268                                     tvb, offset++, 1, TRUE);
4269                 return;
4270         }
4271
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*/
4275
4276         /* rem by lane */
4277         /*
4278         next_tvb = tvb_new_subset(tvb, offset, len, len);
4279         call_dissector(data_handle, next_tvb, pinfo, tree);
4280         offset += len;
4281         */
4282
4283         /* dissect the data block, added by lane */
4284         dissect_ipmi_data(tree, ipmi_tree, pinfo, tvb, &offset, len, netfn, cmd, response, auth_offset);
4285         
4286
4287         /* checksum 2 */
4288         if (tree) {
4289                 proto_tree_add_item(ipmi_tree, hf_ipmi_msg_csum2,
4290                                     tvb, offset++, 1, TRUE);
4291         }
4292 }
4293
4294 void
4295 proto_register_ipmi(void)
4296 {
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 }},
4334         };
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 }},
4368         };
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 }},
4394         };
4395
4396 /********* Sensor/Event, NetFN = 0x04 **********/
4397
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 }},
4420                 /* threshold */
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 }},       
4441                 /* discrete */
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 }},
4466                 /* OEM */
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 }},
4508         };
4509
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,
4519                         "Flag", HFILL }},
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 }},
4548         };
4549
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 }},
4556         };
4557
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 }},          
4580         };
4581
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 }},
4600         };
4601
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 }},
4620         };
4621
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 }},
4680         };
4681
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 }},
4740         };
4741         
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,
4755                         "Bit 7", HFILL }},
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,
4759                         "Bit 6", HFILL }},
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,
4763                         "Bit 5", HFILL }},
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,
4771                         "Bit 7", HFILL }},
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,
4775                         "Bit 6", HFILL }},
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,
4779                         "Bit 5", HFILL }},
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,
4783                         "Bit 4", HFILL }},
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,
4787                         "Bit 3", HFILL }},
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,
4791                         "Bit 2", HFILL }},
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,
4795                         "Bit 1", HFILL }},
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,
4799                         "Bit 0", HFILL }},
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,
4803                         "Bit 7", HFILL }},
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,
4807                         "Bit 6", HFILL }},
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,
4811                         "Bit 5", HFILL }},
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,
4815                         "Bit 4", HFILL }},
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,
4819                         "Bit 3", HFILL }},
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,
4823                         "Bit 2", HFILL }},
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,
4827                         "Bit 1", HFILL }},
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,
4831                         "Bit 0", HFILL }},
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,
4839                         "Bit 5", HFILL }},
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,
4843                         "Bit 4", HFILL }},
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,
4847                         "Bit 3", HFILL }},
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,
4851                         "Bit 2", HFILL }},
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,
4855                         "Bit 1", HFILL }},
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,
4859                         "Bit 0", HFILL }},
4860 };
4861
4862 /********* APP, NetFN = 0x06 *********/
4863
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 }},
4938         };
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,
4960                         "MD5", HFILL }},
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,
4964                         "MD2", HFILL }},
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,
4968                         "None", HFILL }},
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,
5004                         "OEM ID", HFILL }},
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 }},
5009
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 }},
5022         };
5023
5024 /********* Storage, NetFN = 0x0a *********/
5025
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 }},
5044         };
5045         
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 }},
5092         };
5093
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 }},
5100         };
5101
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 }},
5124         };
5125
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 }},
5156         };
5157         
5158
5159 /********* PICMG, NetFN = 0x2c *********/
5160
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 }},           
5179         };
5180
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 }},
5195         };
5196
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,
5214                         "LED3", HFILL }},
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,
5218                         "LED2", HFILL }},
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,
5222                         "LED1", HFILL }},
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 }},
5231         };
5232
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,
5246                         "LED ID", HFILL }},
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 }},                         
5298         };
5299
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,
5313                         "LED ID", HFILL }},
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,
5333                         "Color", HFILL }},
5334         };
5335
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,
5349                         "LED ID", HFILL }},
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,
5385                         "Color", HFILL }},
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,
5405                         "Color", HFILL }},
5406                 { &hf_GetFRULedState_datafield_LampTestDuration, {
5407                         "Lamp Test Duration", "GetFRULedState.datafield.LampTestDuration",
5408                         FT_UINT8, BASE_HEX, NULL, 0,
5409                         "Lamp Test Duration", HFILL }},
5410         };
5411
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 }},                
5426         };
5427
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,
5445                         "Bit 1", HFILL }},
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,
5449                         "Bit 0", HFILL }},
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 }},        
5470         };
5471
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 }},
5494         };
5495         
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 }},
5510         };
5511
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 }},               
5530         };
5531
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 }},
5574         };
5575
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 }},
5590         };
5591
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 }},
5610         };
5611
5612
5613
5614 /***************************************************************************************************/
5615
5616 static gint *ett[] = {
5617                 &ett_ipmi,
5618                 &ett_ipmi_session,
5619                 &ett_ipmi_msg_nlfield,
5620                 &ett_ipmi_msg_slfield,
5621
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,
5641                 
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,
5647                 
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,
5656
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,
5677                 
5678         };
5679
5680         proto_ipmi = proto_register_protocol(
5681                 "Intelligent Platform Management Interface", "IPMI", "ipmi");
5682
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));
5689
5690         /********* Sensor/Event, NetFN = 0x04 *********/
5691         
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));
5719
5720         /********* APP, NetFN = 0x06 *********/
5721         
5722         /*Get Device ID, added by lane */
5723         proto_register_field_array(proto_ipmi, hf_GetDeviceID_datafield,
5724                            array_length(hf_GetDeviceID_datafield));
5725         
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));
5729         
5730         /********* Storage, NetFN = 0x0a *********/
5731
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));
5747
5748         /********* PICMG, NetFN = 0X2c *********/
5749         
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));
5792         
5793 /****************************************************************************/
5794
5795         proto_register_subtree_array(ett, array_length(ett));
5796         
5797 }
5798
5799 void
5800 proto_reg_handoff_ipmi(void)
5801 {
5802         dissector_handle_t ipmi_handle;
5803
5804         data_handle = find_dissector("data");
5805
5806         ipmi_handle = create_dissector_handle(dissect_ipmi, proto_ipmi);
5807         dissector_add("rmcp.class", RMCP_CLASS_IPMI, ipmi_handle);
5808 }
5809
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);
5811
5812 /* added hereinafter by lane */ 
5813 void
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)
5817 {
5818         tvbuff_t        *next_tvb;
5819         guint i;
5820         
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);
5826                                 return;
5827                         }
5828                         else  {
5829                                 next_tvb = tvb_new_subset(tvb, *poffset, len, len);
5830                                 call_dissector(data_handle, next_tvb, pinfo, tree);
5831                                 *poffset += len;
5832                                 return;
5833                         }
5834                }
5835         }
5836         next_tvb = tvb_new_subset(tvb, *poffset, len, len);
5837         call_dissector(data_handle, next_tvb, pinfo, tree);
5838         (*poffset) += len;
5839         return;
5840
5841 }
5842
5843 /************************************************************************************/
5844
5845
5846