2 * Sub-dissectors for IPMI messages (netFn=Group, defining body = PICMG)
3 * Copyright 2007-2008, Alexey Neyman, Pigeon Point Systems <avn@pigeonpoint.com>
7 * Wireshark - Network traffic analyzer
8 * By Gerald Combs <gerald@wireshark.org>
9 * Copyright 1998 Gerald Combs
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version 2
14 * of the License, or (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
28 #include <epan/packet.h>
30 #include "packet-ipmi.h"
32 static gint ett_ipmi_picmg_led_color
= -1;
33 static gint ett_ipmi_picmg_link_info
= -1;
34 static gint ett_ipmi_picmg_05_byte1
= -1;
35 static gint ett_ipmi_picmg_06_byte1
= -1;
36 static gint ett_ipmi_picmg_06_byte2
= -1;
37 static gint ett_ipmi_picmg_06_byte3
= -1;
38 static gint ett_ipmi_picmg_08_byte1
= -1;
39 static gint ett_ipmi_picmg_09_ipmba
= -1;
40 static gint ett_ipmi_picmg_09_ipmbb
= -1;
41 static gint ett_ipmi_picmg_0a_byte2
= -1;
42 static gint ett_ipmi_picmg_0a_byte3
= -1;
43 static gint ett_ipmi_picmg_0b_byte1
= -1;
44 static gint ett_ipmi_picmg_0f_chan
= -1;
45 static gint ett_ipmi_picmg_12_byte1
= -1;
46 static gint ett_ipmi_picmg_14_prop
= -1;
47 static gint ett_ipmi_picmg_1e_byte1
= -1;
48 static gint ett_ipmi_picmg_21_byte9
= -1;
49 static gint ett_ipmi_picmg_XX_compbits
= -1;
50 static gint ett_ipmi_picmg_2e_byte2
= -1;
51 static gint ett_ipmi_picmg_prop00_byte1
= -1;
52 static gint ett_ipmi_picmg_prop01_byte1
= -1;
53 static gint ett_ipmi_picmg_34_byte3
= -1;
54 static gint ett_ipmi_picmg_36_byte2
= -1;
55 static gint ett_ipmi_picmg_37_byte2
= -1;
57 static gint hf_ipmi_picmg_led_function
= -1;
58 static gint hf_ipmi_picmg_led_on_duration
= -1;
59 static gint hf_ipmi_picmg_led_color
= -1;
61 static gint hf_ipmi_picmg_linkinfo_grpid
= -1;
62 static gint hf_ipmi_picmg_linkinfo_type_ext
= -1;
63 static gint hf_ipmi_picmg_linkinfo_type
= -1;
64 static gint hf_ipmi_picmg_linkinfo_ports
= -1;
65 static gint hf_ipmi_picmg_linkinfo_iface
= -1;
66 static gint hf_ipmi_picmg_linkinfo_chan
= -1;
67 static gint hf_ipmi_picmg_linkinfo_state
= -1;
69 static gint hf_ipmi_picmg_00_version
= -1;
70 static gint hf_ipmi_picmg_00_max_fruid
= -1;
71 static gint hf_ipmi_picmg_00_ipmc_fruid
= -1;
73 static gint hf_ipmi_picmg_01_rq_fruid
= -1;
74 static gint hf_ipmi_picmg_01_rq_addr_key_type
= -1;
75 static gint hf_ipmi_picmg_01_rq_addr_key
= -1;
76 static gint hf_ipmi_picmg_01_rq_site_type
= -1;
77 static gint hf_ipmi_picmg_01_rs_hwaddr
= -1;
78 static gint hf_ipmi_picmg_01_rs_ipmbaddr
= -1;
79 static gint hf_ipmi_picmg_01_rs_rsrv
= -1;
80 static gint hf_ipmi_picmg_01_rs_fruid
= -1;
81 static gint hf_ipmi_picmg_01_rs_site_num
= -1;
82 static gint hf_ipmi_picmg_01_rs_site_type
= -1;
84 static gint hf_ipmi_picmg_04_fruid
= -1;
85 static gint hf_ipmi_picmg_04_cmd
= -1;
87 static gint hf_ipmi_picmg_05_fruid
= -1;
88 static gint hf_ipmi_picmg_05_led3
= -1;
89 static gint hf_ipmi_picmg_05_led2
= -1;
90 static gint hf_ipmi_picmg_05_led1
= -1;
91 static gint hf_ipmi_picmg_05_blue_led
= -1;
92 static gint hf_ipmi_picmg_05_app_leds
= -1;
94 static gint hf_ipmi_picmg_06_fruid
= -1;
95 static gint hf_ipmi_picmg_06_ledid
= -1;
96 static gint hf_ipmi_picmg_06_cap_white
= -1;
97 static gint hf_ipmi_picmg_06_cap_orange
= -1;
98 static gint hf_ipmi_picmg_06_cap_amber
= -1;
99 static gint hf_ipmi_picmg_06_cap_green
= -1;
100 static gint hf_ipmi_picmg_06_cap_red
= -1;
101 static gint hf_ipmi_picmg_06_cap_blue
= -1;
102 static gint hf_ipmi_picmg_06_default_local_color
= -1;
103 static gint hf_ipmi_picmg_06_default_override_color
= -1;
105 static gint hf_ipmi_picmg_07_fruid
= -1;
106 static gint hf_ipmi_picmg_07_ledid
= -1;
108 static gint hf_ipmi_picmg_08_fruid
= -1;
109 static gint hf_ipmi_picmg_08_ledid
= -1;
110 static gint hf_ipmi_picmg_08_state_lamptest
= -1;
111 static gint hf_ipmi_picmg_08_state_override
= -1;
112 static gint hf_ipmi_picmg_08_state_local
= -1;
113 static gint hf_ipmi_picmg_08_lamptest_duration
= -1;
115 static gint hf_ipmi_picmg_09_ipmba
= -1;
116 static gint hf_ipmi_picmg_09_ipmbb
= -1;
118 static gint hf_ipmi_picmg_0a_fruid
= -1;
119 static gint hf_ipmi_picmg_0a_msk_d_locked
= -1;
120 static gint hf_ipmi_picmg_0a_msk_locked
= -1;
121 static gint hf_ipmi_picmg_0a_d_locked
= -1;
122 static gint hf_ipmi_picmg_0a_locked
= -1;
124 static gint hf_ipmi_picmg_0b_fruid
= -1;
125 static gint hf_ipmi_picmg_0b_d_locked
= -1;
126 static gint hf_ipmi_picmg_0b_locked
= -1;
128 static gint hf_ipmi_picmg_0c_fruid
= -1;
129 static gint hf_ipmi_picmg_0c_cmd
= -1;
131 static gint hf_ipmi_picmg_0d_fruid
= -1;
132 static gint hf_ipmi_picmg_0d_start
= -1;
133 static gint hf_ipmi_picmg_0d_recordid
= -1;
135 static gint hf_ipmi_picmg_0f_iface
= -1;
136 static gint hf_ipmi_picmg_0f_chan
= -1;
138 static gint hf_ipmi_picmg_10_fruid
= -1;
139 static gint hf_ipmi_picmg_10_nslots
= -1;
140 static gint hf_ipmi_picmg_10_ipmc_loc
= -1;
142 static gint hf_ipmi_picmg_11_fruid
= -1;
143 static gint hf_ipmi_picmg_11_power_level
= -1;
144 static gint hf_ipmi_picmg_11_set_to_desired
= -1;
146 static gint hf_ipmi_picmg_12_fruid
= -1;
147 static gint hf_ipmi_picmg_12_pwr_type
= -1;
148 static gint hf_ipmi_picmg_12_dynamic
= -1;
149 static gint hf_ipmi_picmg_12_pwr_lvl
= -1;
150 static gint hf_ipmi_picmg_12_delay
= -1;
151 static gint hf_ipmi_picmg_12_pwr_mult
= -1;
152 static gint hf_ipmi_picmg_12_pwr_draw
= -1;
154 static gint hf_ipmi_picmg_13_fruid
= -1;
156 static gint hf_ipmi_picmg_14_fruid
= -1;
157 static gint hf_ipmi_picmg_14_speed_min
= -1;
158 static gint hf_ipmi_picmg_14_speed_max
= -1;
159 static gint hf_ipmi_picmg_14_speed_norm
= -1;
160 static gint hf_ipmi_picmg_14_local_control
= -1;
162 static gint hf_ipmi_picmg_15_fruid
= -1;
163 static gint hf_ipmi_picmg_15_fan_level
= -1;
164 static gint hf_ipmi_picmg_15_local_enable
= -1;
166 static gint hf_ipmi_picmg_16_fruid
= -1;
167 static gint hf_ipmi_picmg_16_override_level
= -1;
168 static gint hf_ipmi_picmg_16_local_level
= -1;
169 static gint hf_ipmi_picmg_16_local_enable
= -1;
171 static gint hf_ipmi_picmg_17_cmd
= -1;
172 static gint hf_ipmi_picmg_17_resid
= -1;
173 static gint hf_ipmi_picmg_17_status
= -1;
175 static gint hf_ipmi_picmg_18_li_key_type
= -1;
176 static gint hf_ipmi_picmg_18_li_key
= -1;
177 static gint hf_ipmi_picmg_18_link_num
= -1;
178 static gint hf_ipmi_picmg_18_sensor_num
= -1;
180 static gint hf_ipmi_picmg_1b_addr_active
= -1;
181 static gint hf_ipmi_picmg_1b_addr_backup
= -1;
183 static gint hf_ipmi_picmg_1c_fan_site_number
= -1;
184 static gint hf_ipmi_picmg_1c_fan_enable_state
= -1;
185 static gint hf_ipmi_picmg_1c_fan_policy_timeout
= -1;
186 static gint hf_ipmi_picmg_1c_site_number
= -1;
187 static gint hf_ipmi_picmg_1c_site_type
= -1;
189 static gint hf_ipmi_picmg_1d_fan_site_number
= -1;
190 static gint hf_ipmi_picmg_1d_site_number
= -1;
191 static gint hf_ipmi_picmg_1d_site_type
= -1;
192 static gint hf_ipmi_picmg_1d_policy
= -1;
193 static gint hf_ipmi_picmg_1d_coverage
= -1;
195 static gint hf_ipmi_picmg_1e_fruid
= -1;
196 static gint hf_ipmi_picmg_1e_cap_diagintr
= -1;
197 static gint hf_ipmi_picmg_1e_cap_graceful_reboot
= -1;
198 static gint hf_ipmi_picmg_1e_cap_warm_reset
= -1;
200 static gint hf_ipmi_picmg_1f_rq_fruid
= -1;
201 static gint hf_ipmi_picmg_1f_rq_op
= -1;
202 static gint hf_ipmi_picmg_1f_rq_lockid
= -1;
203 static gint hf_ipmi_picmg_1f_rs_lockid
= -1;
204 static gint hf_ipmi_picmg_1f_rs_tstamp
= -1;
206 static gint hf_ipmi_picmg_20_fruid
= -1;
207 static gint hf_ipmi_picmg_20_lockid
= -1;
208 static gint hf_ipmi_picmg_20_offset
= -1;
209 static gint hf_ipmi_picmg_20_data
= -1;
210 static gint hf_ipmi_picmg_20_count
= -1;
212 static gint hf_ipmi_picmg_21_addr_num
= -1;
213 static gint hf_ipmi_picmg_21_tstamp
= -1;
214 static gint hf_ipmi_picmg_21_addr_count
= -1;
215 static gint hf_ipmi_picmg_21_site_type
= -1;
216 static gint hf_ipmi_picmg_21_site_num
= -1;
217 static gint hf_ipmi_picmg_21_max_unavail
= -1;
218 static gint hf_ipmi_picmg_21_is_shm
= -1;
219 static gint hf_ipmi_picmg_21_addr_type
= -1;
220 static gint hf_ipmi_picmg_21_ipaddr
= -1;
221 static gint hf_ipmi_picmg_21_rmcpport
= -1;
223 static gint hf_ipmi_picmg_22_feed_idx
= -1;
224 static gint hf_ipmi_picmg_22_update_cnt
= -1;
225 static gint hf_ipmi_picmg_22_pwr_alloc
= -1;
227 static gint hf_ipmi_picmg_XX_comp7
= -1;
228 static gint hf_ipmi_picmg_XX_comp6
= -1;
229 static gint hf_ipmi_picmg_XX_comp5
= -1;
230 static gint hf_ipmi_picmg_XX_comp4
= -1;
231 static gint hf_ipmi_picmg_XX_comp3
= -1;
232 static gint hf_ipmi_picmg_XX_comp2
= -1;
233 static gint hf_ipmi_picmg_XX_comp1
= -1;
234 static gint hf_ipmi_picmg_XX_comp0
= -1;
236 static gint hf_ipmi_picmg_2e_version
= -1;
237 static gint hf_ipmi_picmg_2e_upgrade_undesirable
= -1;
238 static gint hf_ipmi_picmg_2e_auto_rollback_override
= -1;
239 static gint hf_ipmi_picmg_2e_ipmc_degraded
= -1;
240 static gint hf_ipmi_picmg_2e_deferred_activate
= -1;
241 static gint hf_ipmi_picmg_2e_services_affected
= -1;
242 static gint hf_ipmi_picmg_2e_manual_rollback
= -1;
243 static gint hf_ipmi_picmg_2e_auto_rollback
= -1;
244 static gint hf_ipmi_picmg_2e_self_test
= -1;
245 static gint hf_ipmi_picmg_2e_upgrade_tout
= -1;
246 static gint hf_ipmi_picmg_2e_selftest_tout
= -1;
247 static gint hf_ipmi_picmg_2e_rollback_tout
= -1;
248 static gint hf_ipmi_picmg_2e_inaccessibility_tout
= -1;
250 static gint hf_ipmi_picmg_prop00_cold_reset
= -1;
251 static gint hf_ipmi_picmg_prop00_deferred_activation
= -1;
252 static gint hf_ipmi_picmg_prop00_comparison
= -1;
253 static gint hf_ipmi_picmg_prop00_preparation
= -1;
254 static gint hf_ipmi_picmg_prop00_rollback
= -1;
255 static gint hf_ipmi_picmg_prop01_fw_major
= -1;
256 static gint hf_ipmi_picmg_prop01_fw_minor
= -1;
257 static gint hf_ipmi_picmg_prop01_fw_aux
= -1;
258 static gint hf_ipmi_picmg_prop02_desc
= -1;
260 static gint hf_ipmi_picmg_2f_comp_id
= -1;
261 static gint hf_ipmi_picmg_2f_comp_prop
= -1;
262 static gint hf_ipmi_picmg_2f_prop_data
= -1;
264 static gint hf_ipmi_picmg_31_action
= -1;
266 static gint hf_ipmi_picmg_32_block
= -1;
267 static gint hf_ipmi_picmg_32_data
= -1;
268 static gint hf_ipmi_picmg_32_sec_offs
= -1;
269 static gint hf_ipmi_picmg_32_sec_len
= -1;
271 static gint hf_ipmi_picmg_33_comp_id
= -1;
272 static gint hf_ipmi_picmg_33_img_len
= -1;
274 static gint hf_ipmi_picmg_34_cmd
= -1;
275 static gint hf_ipmi_picmg_34_ccode
= -1;
276 static gint hf_ipmi_picmg_34_percentage
= -1;
278 static gint hf_ipmi_picmg_35_rollback_override
= -1;
280 static gint hf_ipmi_picmg_36_result
= -1;
281 static gint hf_ipmi_picmg_36_fail
= -1;
282 static gint hf_ipmi_picmg_36_fail_sel
= -1;
283 static gint hf_ipmi_picmg_36_fail_sdr
= -1;
284 static gint hf_ipmi_picmg_36_fail_bmc_fru
= -1;
285 static gint hf_ipmi_picmg_36_fail_ipmb_sig
= -1;
286 static gint hf_ipmi_picmg_36_fail_sdr_empty
= -1;
287 static gint hf_ipmi_picmg_36_fail_iua
= -1;
288 static gint hf_ipmi_picmg_36_fail_bb_fw
= -1;
289 static gint hf_ipmi_picmg_36_fail_oper_fw
= -1;
291 static gint hf_ipmi_picmg_37_percent
= -1;
293 static const value_string site_type_vals
[] = {
294 { 0x00, "PICMG board" },
295 { 0x01, "Power Entry" },
296 { 0x02, "Shelf FRU Information" },
297 { 0x03, "Dedicated ShMC" },
298 { 0x04, "Fan Tray / Cooling Unit" },
299 { 0x05, "Fan Filter Tray" },
301 { 0x07, "AdvancedMC module" },
303 { 0x09, "Rear Transition Module" },
304 { 0x0A, "MicroTCA Carrier Hub" },
305 { 0x0B, "Power Module" },
325 static const value_string addr_key_type_vals
[] = {
326 { 0x00, "Hardware Address" },
327 { 0x01, "IPMB-0 Address" },
328 { 0x03, "Physical Address" },
332 static const struct true_false_string set_clear_tfs
= {
336 static const value_string led_color_vals
[] = {
337 { 0x00, "Reserved (Control not supported)" },
344 { 0x0E, "Do not change" },
345 { 0x0F, "Use default" },
349 static const value_string linkinfo_type_vals
[] = {
350 { 0x01, "PICMG3.0 Base Interface 10/100/1000 BASE-T" },
351 { 0x02, "PICMG3.1 Ethernet Fabric Interface" },
352 { 0x03, "PICMG3.2 Infiniband Fabric Interface" },
353 { 0x04, "PICMG3.3 StarFabric Fabric Interface" },
354 { 0x05, "PICMG3.4 PCI Express Fabric Interface" },
355 { 0xf0, "OEM" }, { 0xf1, "OEM" }, { 0xf2, "OEM" }, { 0xf3, "OEM" },
356 { 0xf4, "OEM" }, { 0xf5, "OEM" }, { 0xf6, "OEM" }, { 0xf7, "OEM" },
357 { 0xf8, "OEM" }, { 0xf9, "OEM" }, { 0xfa, "OEM" }, { 0xfb, "OEM" },
358 { 0xfc, "OEM" }, { 0xfd, "OEM" }, { 0xfe, "OEM" },
363 static const value_string linkinfo_ports_vals
[] = {
384 static const value_string linkinfo_iface_vals
[] = {
385 { 0x00, "Base Interface" },
386 { 0x01, "Fabric Interface" },
387 { 0x02, "Update Channel Interface" },
392 static const value_string busresid_vals
[] = {
393 { 0x00, "Metallic Test Bus #1" },
394 { 0x01, "Metallic Test Bus #2" },
395 { 0x02, "Synch clock group #1" },
396 { 0x03, "Synch clock group #2" },
397 { 0x04, "Synch clock group #3" },
401 static const value_string fan_level_vals
[] = {
402 { 0xFE, "Shut down" },
403 { 0xFF, "Local control" },
407 static const value_string enable_vals
[] = {
413 static const value_string enabled_vals
[] = {
414 { 0x00, "Disabled" },
419 static const value_string vals_04_cmd
[] = {
420 { 0x00, "Cold Reset" },
421 { 0x01, "Warm Reset" },
422 { 0x02, "Graceful Reboot" },
423 { 0x03, "Issue Diagnostic Interrupt" },
428 static const value_string vals_0c_cmd
[] = {
429 { 0x00, "Deactivate FRU" },
430 { 0x01, "Activate FRU" },
434 static const value_string vals_11_set
[] = {
435 { 0x00, "Do not change present levels" },
436 { 0x01, "Copy desired levels to present levels" },
440 static const value_string vals_12_pwr_type
[] = {
441 { 0x00, "Steady state power draw levels" },
442 { 0x01, "Desired steady state draw levels" },
443 { 0x02, "Early power draw levels" },
444 { 0x03, "Desired early levels" },
448 static const value_string vals_18_keytype
[] = {
449 { 0x00, "Link Info Key contains Link Number" },
450 { 0x01, "Link Info Key contains Sensor Number" },
454 static const value_string vals_1d_policy
[] = {
455 { 0x00, "Disabled" },
457 { 0xFF, "Indeterminate" },
461 static const value_string vals_1d_coverage
[] = {
462 { 0x00, "Not Covered" },
467 static const value_string vals_1f_op
[] = {
468 { 0x00, "Get Last Commit Timestamp" },
470 { 0x02, "Unlock and Discard" },
471 { 0x03, "Unlock and Commit" },
476 static const value_string vals_21_addr_type
[] = {
478 { 0x60, "OEM" }, { 0x61, "OEM" }, { 0x62, "OEM" }, { 0x63, "OEM" },
479 { 0x64, "OEM" }, { 0x65, "OEM" }, { 0x66, "OEM" }, { 0x67, "OEM" },
480 { 0x68, "OEM" }, { 0x69, "OEM" }, { 0x6a, "OEM" }, { 0x6b, "OEM" },
481 { 0x6c, "OEM" }, { 0x6d, "OEM" }, { 0x6e, "OEM" }, { 0x6f, "OEM" },
482 { 0x70, "OEM" }, { 0x71, "OEM" }, { 0x72, "OEM" }, { 0x73, "OEM" },
483 { 0x74, "OEM" }, { 0x75, "OEM" }, { 0x76, "OEM" }, { 0x77, "OEM" },
484 { 0x78, "OEM" }, { 0x79, "OEM" }, { 0x7a, "OEM" }, { 0x7b, "OEM" },
485 { 0x7c, "OEM" }, { 0x7d, "OEM" }, { 0x7e, "OEM" }, { 0x7f, "OEM" },
490 static const value_string vals_prop00_rollback
[] = {
491 { 0x00, "Not supported" },
492 { 0x01, "Rollback supported, Backup required" },
493 { 0x02, "Rollback supported, Backup not required" },
497 static const value_string vals_31_action
[] = {
498 { 0x00, "Backup components" },
499 { 0x01, "Prepare components" },
500 { 0x02, "Upload for upgrade" },
501 { 0x03, "Upload for compare" },
505 static const value_string vals_35_override
[] = {
506 { 0x00, "Automatic Rollback allowed" },
507 { 0x01, "Automatic Rollback override" },
511 static const value_string vals_36_result
[] = {
512 { 0x55, "No error. All Self Tests Passed" },
513 { 0x56, "Reserved, cannot be used" },
514 { 0x57, "Corrupted or inaccessible data or devices" },
515 { 0x58, "Fatal hardware error" },
516 { 0x60, "Component failure" },
517 { 0xff, "Reserved" },
521 static const struct true_false_string tfs_36_fail_unknown
= {
526 /* Get PICMG Properties.
529 rs00(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
531 proto_tree_add_item(tree
, hf_ipmi_picmg_00_version
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
532 proto_tree_add_item(tree
, hf_ipmi_picmg_00_max_fruid
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
533 proto_tree_add_item(tree
, hf_ipmi_picmg_00_ipmc_fruid
, tvb
, 2, 1, ENC_LITTLE_ENDIAN
);
536 /* Get Address Info Command.
539 rq01(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
541 if (tvb_length(tvb
) > 0) {
542 proto_tree_add_item(tree
, hf_ipmi_picmg_01_rq_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
544 if (tvb_length(tvb
) > 1) {
545 proto_tree_add_item(tree
, hf_ipmi_picmg_01_rq_addr_key_type
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
547 if (tvb_length(tvb
) > 2) {
548 proto_tree_add_item(tree
, hf_ipmi_picmg_01_rq_addr_key
, tvb
, 2, 1, ENC_LITTLE_ENDIAN
);
550 if (tvb_length(tvb
) > 3) {
551 proto_tree_add_item(tree
, hf_ipmi_picmg_01_rq_site_type
, tvb
, 3, 1, ENC_LITTLE_ENDIAN
);
556 rs01(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
558 proto_tree_add_item(tree
, hf_ipmi_picmg_01_rs_hwaddr
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
559 proto_tree_add_item(tree
, hf_ipmi_picmg_01_rs_ipmbaddr
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
560 proto_tree_add_item(tree
, hf_ipmi_picmg_01_rs_rsrv
, tvb
, 2, 1, ENC_LITTLE_ENDIAN
);
561 proto_tree_add_item(tree
, hf_ipmi_picmg_01_rs_fruid
, tvb
, 3, 1, ENC_LITTLE_ENDIAN
);
562 proto_tree_add_item(tree
, hf_ipmi_picmg_01_rs_site_num
, tvb
, 4, 1, ENC_LITTLE_ENDIAN
);
563 proto_tree_add_item(tree
, hf_ipmi_picmg_01_rs_site_type
, tvb
, 5, 1, ENC_LITTLE_ENDIAN
);
564 /* TBD Next byte is carrier number in MTCA */
567 /* Get Shelf Address Info
570 rs02(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
572 ipmi_add_typelen(tree
, "Shelf Address", tvb
, 0, TRUE
);
575 /* Set Shelf Address Info
578 rq03(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
580 ipmi_add_typelen(tree
, "Shelf Address", tvb
, 0, TRUE
);
586 rq04(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
588 proto_tree_add_item(tree
, hf_ipmi_picmg_04_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
589 proto_tree_add_item(tree
, hf_ipmi_picmg_04_cmd
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
592 /* Get FRU LED Properties
595 rq05(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
597 proto_tree_add_item(tree
, hf_ipmi_picmg_05_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
601 rs05(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
603 static const int *byte1
[] = { &hf_ipmi_picmg_05_led3
, &hf_ipmi_picmg_05_led2
,
604 &hf_ipmi_picmg_05_led1
, &hf_ipmi_picmg_05_blue_led
, NULL
};
606 proto_tree_add_bitmask_text(tree
, tvb
, 0, 1, "General Status LEDs: ", "None",
607 ett_ipmi_picmg_05_byte1
, byte1
, ENC_LITTLE_ENDIAN
, 0);
608 proto_tree_add_item(tree
, hf_ipmi_picmg_05_app_leds
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
611 /* Get LED Color Capabilities
614 rq06(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
616 proto_tree_add_item(tree
, hf_ipmi_picmg_06_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
617 proto_tree_add_item(tree
, hf_ipmi_picmg_06_ledid
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
621 rs06(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
623 static const int *byte1
[] = { &hf_ipmi_picmg_06_cap_white
, &hf_ipmi_picmg_06_cap_orange
,
624 &hf_ipmi_picmg_06_cap_amber
, &hf_ipmi_picmg_06_cap_green
, &hf_ipmi_picmg_06_cap_red
,
625 &hf_ipmi_picmg_06_cap_blue
, NULL
};
626 static const int *byte2
[] = { &hf_ipmi_picmg_06_default_local_color
, NULL
};
627 static const int *byte3
[] = { &hf_ipmi_picmg_06_default_override_color
, NULL
};
629 proto_tree_add_bitmask_text(tree
, tvb
, 0, 1, "Color capabilities: ", "None",
630 ett_ipmi_picmg_06_byte1
, byte1
, ENC_LITTLE_ENDIAN
, 0);
631 proto_tree_add_bitmask_text(tree
, tvb
, 1, 1, NULL
, NULL
,
632 ett_ipmi_picmg_06_byte2
, byte2
, ENC_LITTLE_ENDIAN
, 0);
633 proto_tree_add_bitmask_text(tree
, tvb
, 2, 1, NULL
, NULL
,
634 ett_ipmi_picmg_06_byte3
, byte3
, ENC_LITTLE_ENDIAN
, 0);
638 parse_led_state(proto_tree
*tree
, tvbuff_t
*tvb
, guint offs
, const char *desc
)
640 static const int *color
[] = { &hf_ipmi_picmg_led_color
, NULL
};
641 static const value_string funcs
[] = {
642 { 0x00, "LED Off override" },
643 { 0xfb, "Lamp Test state" },
644 { 0xfc, "Restore Local Control" },
645 { 0xfd, "Reserved" },
646 { 0xfe, "Reserved" },
647 { 0xff, "LED On override" },
653 v
= tvb_get_guint8(tvb
, offs
);
654 proto_tree_add_uint_format(tree
, hf_ipmi_picmg_led_function
, tvb
, offs
, 1,
655 v
, "%sFunction: %s (0x%02x)", desc
,
656 val_to_str(v
, funcs
, "LED Blinking override, off-duration %d0ms"),
658 v
= tvb_get_guint8(tvb
, offs
+ 1);
659 proto_tree_add_uint_format(tree
, hf_ipmi_picmg_led_on_duration
, tvb
, offs
+ 1, 1,
660 v
, "%sOn-duration: %d0ms", desc
, v
);
661 v
= tvb_get_guint8(tvb
, offs
+ 2) & 0x0f;
662 ti
= proto_tree_add_bitmask_text(tree
, tvb
, offs
+ 2, 1,
663 NULL
, NULL
, ett_ipmi_picmg_led_color
, color
, ENC_LITTLE_ENDIAN
, 0);
664 proto_item_set_text(ti
, "%sColor: %s", desc
, val_to_str_const(v
, led_color_vals
, "Reserved"));
670 rq07(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
672 proto_tree_add_item(tree
, hf_ipmi_picmg_07_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
673 proto_tree_add_item(tree
, hf_ipmi_picmg_07_ledid
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
674 parse_led_state(tree
, tvb
, 2, "");
680 rq08(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
682 proto_tree_add_item(tree
, hf_ipmi_picmg_08_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
683 proto_tree_add_item(tree
, hf_ipmi_picmg_08_ledid
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
687 rs08(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
689 static const int *byte1
[] = { &hf_ipmi_picmg_08_state_lamptest
, &hf_ipmi_picmg_08_state_override
,
690 &hf_ipmi_picmg_08_state_local
, NULL
};
692 proto_tree_add_bitmask_text(tree
, tvb
, 0, 1, "LED States: ", "None",
693 ett_ipmi_picmg_08_byte1
, byte1
, ENC_LITTLE_ENDIAN
, 0);
694 parse_led_state(tree
, tvb
, 1, "Local Control ");
695 if (tvb_length(tvb
) > 4) {
696 parse_led_state(tree
, tvb
, 4, "Override ");
698 if (tvb_length(tvb
) > 7) {
699 proto_tree_add_item(tree
, hf_ipmi_picmg_08_lamptest_duration
, tvb
, 7, 1, ENC_LITTLE_ENDIAN
);
706 parse_ipmb_state(proto_tree
*tree
, tvbuff_t
*tvb
, guint offs
, int hf
, int ett
)
714 v
= tvb_get_guint8(tvb
, offs
);
716 proto_tree_add_uint_format_value(tree
, hf
, tvb
, 0, 1,
717 v
, "Don't change (0xff)");
722 } else if (num
< 0x60) {
723 g_snprintf(buf
, sizeof(buf
), "Link #%d", num
);
728 ti
= proto_tree_add_uint_format_value(tree
, hf
, tvb
, 0, 1,
729 v
, "%s, %s", desc
, (v
& 1) ? "Local Control" : "Override");
730 s_tree
= proto_item_add_subtree(ti
, ett
);
731 proto_tree_add_text(s_tree
, tvb
, 0, 1, "%sLink: %s (0x%02x)",
732 ipmi_dcd8(v
, 0xfe), desc
, num
);
733 proto_tree_add_text(s_tree
, tvb
, 0, 1, "%sState: %s",
734 ipmi_dcd8(v
, 0x01), (v
& 1) ? "Local Control State" : "Override State (Isolate)");
739 rq09(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
741 parse_ipmb_state(tree
, tvb
, 0, hf_ipmi_picmg_09_ipmba
, ett_ipmi_picmg_09_ipmba
);
742 parse_ipmb_state(tree
, tvb
, 1, hf_ipmi_picmg_09_ipmbb
, ett_ipmi_picmg_09_ipmbb
);
745 /* Set FRU Activation Policy
748 rq0a(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
750 static const int *byte2
[] = { &hf_ipmi_picmg_0a_msk_d_locked
, &hf_ipmi_picmg_0a_msk_locked
, NULL
};
751 static const int *byte3
[] = { &hf_ipmi_picmg_0a_d_locked
, &hf_ipmi_picmg_0a_locked
, NULL
};
753 proto_tree_add_item(tree
, hf_ipmi_picmg_0a_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
754 proto_tree_add_bitmask_text(tree
, tvb
, 1, 1, "Will affect bits: ", "None",
755 ett_ipmi_picmg_0a_byte2
, byte2
, ENC_LITTLE_ENDIAN
, BMT_NO_TFS
);
756 proto_tree_add_bitmask_text(tree
, tvb
, 2, 1, "Activation Policy Set Bits: ", NULL
,
757 ett_ipmi_picmg_0a_byte3
, byte3
, ENC_LITTLE_ENDIAN
, 0);
760 /* Get FRU Activation Policy
763 rq0b(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
765 proto_tree_add_item(tree
, hf_ipmi_picmg_0b_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
769 rs0b(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
771 static const int *byte1
[] = { &hf_ipmi_picmg_0b_d_locked
, &hf_ipmi_picmg_0b_locked
, NULL
};
773 proto_tree_add_bitmask_text(tree
, tvb
, 0, 1, "Activation Policy Bits: ", NULL
,
774 ett_ipmi_picmg_0b_byte1
, byte1
, ENC_LITTLE_ENDIAN
, 0);
778 /* Set FRU Activation
781 rq0c(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
783 proto_tree_add_item(tree
, hf_ipmi_picmg_0c_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
784 proto_tree_add_item(tree
, hf_ipmi_picmg_0c_cmd
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
787 /* Get Device Locator Record ID
790 rq0d(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
792 proto_tree_add_item(tree
, hf_ipmi_picmg_0d_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
793 if (tvb_length(tvb
) > 1) {
794 proto_tree_add_item(tree
, hf_ipmi_picmg_0d_start
, tvb
, 1, 2, ENC_LITTLE_ENDIAN
);
799 rs0d(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
801 proto_tree_add_item(tree
, hf_ipmi_picmg_0d_recordid
, tvb
, 0, 2, ENC_LITTLE_ENDIAN
);
805 parse_link_info_state(proto_tree
*tree
, tvbuff_t
*tvb
, guint offs
, const char *num
, const value_string
*vs
)
807 static const int *link_info
[] = { &hf_ipmi_picmg_linkinfo_grpid
, &hf_ipmi_picmg_linkinfo_type_ext
,
808 &hf_ipmi_picmg_linkinfo_type
, &hf_ipmi_picmg_linkinfo_ports
, &hf_ipmi_picmg_linkinfo_iface
,
809 &hf_ipmi_picmg_linkinfo_chan
, NULL
};
810 guint8 v
= tvb_get_guint8(tvb
, offs
+ 4);
813 g_snprintf(buf
, sizeof(buf
), "Link info%s: ", num
);
814 proto_tree_add_bitmask_text(tree
, tvb
, offs
, 4, buf
, NULL
,
815 ett_ipmi_picmg_link_info
, link_info
, ENC_LITTLE_ENDIAN
, 0);
816 proto_tree_add_uint_format(tree
, hf_ipmi_picmg_linkinfo_state
, tvb
, offs
+ 4, 1,
817 v
, "State%s: %s (0x%02x)", num
, val_to_str_const(v
, vs
, "Reserved"), v
);
823 rq0e(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
825 static const value_string state_vals
[] = {
831 parse_link_info_state(tree
, tvb
, 0, "", state_vals
);
837 rq0f(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
839 static const int *chan
[] = { &hf_ipmi_picmg_0f_iface
, &hf_ipmi_picmg_0f_chan
, NULL
};
841 proto_tree_add_bitmask_text(tree
, tvb
, 0, 1, NULL
, NULL
, ett_ipmi_picmg_0f_chan
, chan
, ENC_LITTLE_ENDIAN
, 0);
845 rs0f(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
847 static const value_string state_vals
[] = {
848 { 0x00, "Disabled" },
853 if (tvb_length(tvb
) > 0) {
854 parse_link_info_state(tree
, tvb
, 0, " 1", state_vals
);
856 if (tvb_length(tvb
) > 5) {
857 parse_link_info_state(tree
, tvb
, 5, " 2", state_vals
);
859 if (tvb_length(tvb
) > 10) {
860 parse_link_info_state(tree
, tvb
, 10, " 3", state_vals
);
862 if (tvb_length(tvb
) > 15) {
863 parse_link_info_state(tree
, tvb
, 15, " 4", state_vals
);
867 /* Compute Power Properties
870 rq10(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
872 proto_tree_add_item(tree
, hf_ipmi_picmg_10_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
876 rs10(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
878 proto_tree_add_item(tree
, hf_ipmi_picmg_10_nslots
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
879 proto_tree_add_item(tree
, hf_ipmi_picmg_10_ipmc_loc
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
885 rq11(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
887 static const value_string plvl_vals
[] = {
888 { 0x00, "Power Off" },
889 { 0xff, "Do not change" },
892 guint8 v
= tvb_get_guint8(tvb
, 1);
894 proto_tree_add_item(tree
, hf_ipmi_picmg_11_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
895 proto_tree_add_uint_format_value(tree
, hf_ipmi_picmg_11_power_level
, tvb
, 1, 1,
896 v
, "%s", val_to_str(v
, plvl_vals
, "Power Level %d"));
897 proto_tree_add_item(tree
, hf_ipmi_picmg_11_set_to_desired
, tvb
, 2, 1, ENC_LITTLE_ENDIAN
);
903 rq12(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
905 proto_tree_add_item(tree
, hf_ipmi_picmg_12_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
906 proto_tree_add_item(tree
, hf_ipmi_picmg_12_pwr_type
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
910 rs12(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
912 static const int *byte1
[] = { &hf_ipmi_picmg_12_dynamic
, &hf_ipmi_picmg_12_pwr_lvl
, NULL
};
916 proto_tree_add_bitmask_text(tree
, tvb
, 0, 1, NULL
, NULL
, ett_ipmi_picmg_12_byte1
, byte1
, ENC_LITTLE_ENDIAN
, BMT_NO_FALSE
);
917 proto_tree_add_item(tree
, hf_ipmi_picmg_12_delay
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
918 v
= tvb_get_guint8(tvb
, 2);
919 proto_tree_add_uint_format_value(tree
, hf_ipmi_picmg_12_pwr_mult
, tvb
, 2, 1,
920 v
, "%d.%dW", v
/ 10, v
% 10);
921 max
= tvb_length(tvb
) - 3;
923 max
= 1; /* One byte is mandatory */
924 } else if (max
> 20) {
925 max
= 20; /* 20 levels at most */
927 for (i
= 1; i
<= max
; i
++) {
928 v2
= tvb_get_guint8(tvb
, 2 + i
);
930 proto_tree_add_uint_format(tree
, hf_ipmi_picmg_12_pwr_draw
, tvb
, 2 + i
, 1,
931 v2
, "Power Draw [%d]: %d.%dW (0x%02x)", i
,
932 tmp
/ 10, tmp
% 10, v2
);
940 rq13(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
942 if (tvb_length(tvb
) > 0) {
943 proto_tree_add_item(tree
, hf_ipmi_picmg_13_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
947 /* Get Fan Speed Properties
950 rq14(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
952 proto_tree_add_item(tree
, hf_ipmi_picmg_14_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
956 rs14(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
958 static const int *prop
[] = { &hf_ipmi_picmg_14_local_control
, NULL
};
960 proto_tree_add_item(tree
, hf_ipmi_picmg_14_speed_min
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
961 proto_tree_add_item(tree
, hf_ipmi_picmg_14_speed_max
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
962 proto_tree_add_item(tree
, hf_ipmi_picmg_14_speed_norm
, tvb
, 2, 1, ENC_LITTLE_ENDIAN
);
963 proto_tree_add_bitmask_text(tree
, tvb
, 3, 1, "Fan Tray Properties: ", "None",
964 ett_ipmi_picmg_14_prop
, prop
, ENC_LITTLE_ENDIAN
, 0);
970 rq15(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
972 guint8 v
= tvb_get_guint8(tvb
, 1);
974 proto_tree_add_item(tree
, hf_ipmi_picmg_15_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
975 proto_tree_add_uint_format_value(tree
, hf_ipmi_picmg_15_fan_level
, tvb
, 1, 1,
976 v
, "%s", val_to_str(v
, fan_level_vals
, "%d"));
977 if (tvb_length(tvb
) > 2) {
978 proto_tree_add_item(tree
, hf_ipmi_picmg_15_local_enable
, tvb
, 2, 1, ENC_LITTLE_ENDIAN
);
985 rq16(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
987 proto_tree_add_item(tree
, hf_ipmi_picmg_16_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
991 rs16(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
995 v
= tvb_get_guint8(tvb
, 0);
996 proto_tree_add_uint_format_value(tree
, hf_ipmi_picmg_16_override_level
, tvb
, 0, 1,
997 v
, "%s", val_to_str(v
, fan_level_vals
, "%d"));
998 if (tvb_length(tvb
) > 1) {
999 proto_tree_add_item(tree
, hf_ipmi_picmg_16_local_level
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
1001 if (tvb_length(tvb
) > 2) {
1002 proto_tree_add_item(tree
, hf_ipmi_picmg_16_local_enable
, tvb
, 2, 1, ENC_LITTLE_ENDIAN
);
1006 /* Bused Resource Control
1009 rq17(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1011 static const value_string vals_17_cmd_fromshmm
[] = {
1013 { 0x01, "Release" },
1015 { 0x03, "Bus Free" },
1018 static const value_string vals_17_cmd_toshmm
[] = {
1019 { 0x00, "Request" },
1020 { 0x01, "Relinquish" },
1024 guint to_shmm
= ipmi_current_hdr
->trg_sa
== 0x20;
1025 guint cmd
= tvb_get_guint8(tvb
, 0);
1028 ipmi_setsaveddata(0, (to_shmm
<< 8) | cmd
);
1032 proto_tree_add_uint_format_value(tree
, hf_ipmi_picmg_17_cmd
, tvb
, 0, 1,
1034 val_to_str_const(cmd
,
1035 to_shmm
? vals_17_cmd_toshmm
: vals_17_cmd_fromshmm
,
1038 proto_tree_add_item(tree
, hf_ipmi_picmg_17_resid
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
1042 rs17(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1044 /* Key is 3 bytes: direction, command, status */
1045 static const value_string response_vals
[] = {
1046 { 0x000000, "In Control" },
1047 { 0x000001, "No Control" },
1048 { 0x000100, "Ack" },
1049 { 0x000101, "Refused" },
1050 { 0x000102, "No Control" },
1051 { 0x000200, "Ack" },
1052 { 0x000201, "No Control" },
1053 { 0x000300, "Accept" },
1054 { 0x000301, "Not Needed" },
1055 { 0x010000, "Grant" },
1056 { 0x010001, "Busy" },
1057 { 0x010002, "Defer" },
1058 { 0x010003, "Deny" },
1059 { 0x010100, "Ack" },
1060 { 0x010101, "Error" },
1061 { 0x010200, "Ack" },
1062 { 0x010201, "Error" },
1063 { 0x010202, "Deny" },
1069 if (!ipmi_getsaveddata(0, &val
)) {
1070 /* Without knowing the command, we cannot decipher the response */
1071 proto_tree_add_item(tree
, hf_ipmi_picmg_17_status
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
1075 status
= tvb_get_guint8(tvb
, 0);
1076 val
= (val
<< 8) | status
;
1077 proto_tree_add_uint_format_value(tree
, hf_ipmi_picmg_17_status
, tvb
, 0, 1,
1078 status
, "%s (0x%02x)", val_to_str_const(val
, response_vals
, "Reserved"), status
);
1081 /* Get IPMB Link Info
1084 rq18(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1086 proto_tree_add_item(tree
, hf_ipmi_picmg_18_li_key_type
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
1087 proto_tree_add_item(tree
, hf_ipmi_picmg_18_li_key
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
1091 rs18(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1093 proto_tree_add_item(tree
, hf_ipmi_picmg_18_link_num
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
1094 proto_tree_add_item(tree
, hf_ipmi_picmg_18_sensor_num
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
1097 /* Get Shelf Manager IPMB Address
1100 rs1b(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1102 proto_tree_add_item(tree
, hf_ipmi_picmg_1b_addr_active
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
1103 proto_tree_add_item(tree
, hf_ipmi_picmg_1b_addr_backup
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
1109 rq1c(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1111 proto_tree_add_item(tree
, hf_ipmi_picmg_1c_fan_site_number
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
1112 proto_tree_add_item(tree
, hf_ipmi_picmg_1c_fan_enable_state
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
1113 proto_tree_add_item(tree
, hf_ipmi_picmg_1c_fan_policy_timeout
, tvb
, 2, 1, ENC_LITTLE_ENDIAN
);
1114 if (tvb_length(tvb
) > 3) {
1115 proto_tree_add_item(tree
, hf_ipmi_picmg_1c_site_number
, tvb
, 3, 1, ENC_LITTLE_ENDIAN
);
1116 proto_tree_add_item(tree
, hf_ipmi_picmg_1c_site_type
, tvb
, 4, 1, ENC_LITTLE_ENDIAN
);
1123 rq1d(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1125 proto_tree_add_item(tree
, hf_ipmi_picmg_1d_fan_site_number
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
1126 if (tvb_length(tvb
) > 1) {
1127 proto_tree_add_item(tree
, hf_ipmi_picmg_1d_site_number
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
1128 proto_tree_add_item(tree
, hf_ipmi_picmg_1d_site_type
, tvb
, 2, 1, ENC_LITTLE_ENDIAN
);
1133 rs1d(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1135 proto_tree_add_item(tree
, hf_ipmi_picmg_1d_policy
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
1136 if (tvb_length(tvb
) > 1) {
1137 proto_tree_add_item(tree
, hf_ipmi_picmg_1d_coverage
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
1141 /* FRU Control Capabilities
1144 rq1e(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1146 proto_tree_add_item(tree
, hf_ipmi_picmg_1e_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
1150 rs1e(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1152 static const int *byte1
[] = { &hf_ipmi_picmg_1e_cap_diagintr
,
1153 &hf_ipmi_picmg_1e_cap_graceful_reboot
, &hf_ipmi_picmg_1e_cap_warm_reset
, NULL
};
1155 proto_tree_add_bitmask_text(tree
, tvb
, 0, 1, "FRU Control Capabilities: ", "None",
1156 ett_ipmi_picmg_1e_byte1
, byte1
, ENC_LITTLE_ENDIAN
, 0);
1159 /* FRU Inventory Device Lock Control
1162 rq1f(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1164 proto_tree_add_item(tree
, hf_ipmi_picmg_1f_rq_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
1165 proto_tree_add_item(tree
, hf_ipmi_picmg_1f_rq_op
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
1166 proto_tree_add_item(tree
, hf_ipmi_picmg_1f_rq_lockid
, tvb
, 2, 2, ENC_LITTLE_ENDIAN
);
1170 rs1f(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1172 proto_tree_add_item(tree
, hf_ipmi_picmg_1f_rs_lockid
, tvb
, 0, 2, ENC_LITTLE_ENDIAN
);
1173 ipmi_add_timestamp(tree
, hf_ipmi_picmg_1f_rs_tstamp
, tvb
, 2);
1176 static const value_string cc1f
[] = {
1177 { 0x80, "Invalid FRU Information" },
1178 { 0x81, "Lock Failed" },
1182 /* FRU Inventory Device Write
1185 rq20(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1187 proto_tree_add_item(tree
, hf_ipmi_picmg_20_fruid
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
1188 proto_tree_add_item(tree
, hf_ipmi_picmg_20_lockid
, tvb
, 1, 2, ENC_LITTLE_ENDIAN
);
1189 proto_tree_add_item(tree
, hf_ipmi_picmg_20_offset
, tvb
, 3, 2, ENC_LITTLE_ENDIAN
);
1190 proto_tree_add_item(tree
, hf_ipmi_picmg_20_data
, tvb
, 5, tvb_length(tvb
) - 5, ENC_NA
);
1194 rs20(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1196 proto_tree_add_item(tree
, hf_ipmi_picmg_20_count
, tvb
, 0, 1, ENC_NA
);
1199 static const value_string cc20
[] = {
1200 { 0x80, "Invalid Lock ID" },
1204 /* Get Shelf Manager IP Address
1207 rq21(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1209 proto_tree_add_item(tree
, hf_ipmi_picmg_21_addr_num
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
1213 rs21(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1215 static const int *byte9
[] = { &hf_ipmi_picmg_21_is_shm
, &hf_ipmi_picmg_21_addr_type
, NULL
};
1218 ipmi_add_timestamp(tree
, hf_ipmi_picmg_21_tstamp
, tvb
, 0);
1219 proto_tree_add_item(tree
, hf_ipmi_picmg_21_addr_count
, tvb
, 4, 1, ENC_LITTLE_ENDIAN
);
1220 proto_tree_add_item(tree
, hf_ipmi_picmg_21_site_type
, tvb
, 5, 1, ENC_LITTLE_ENDIAN
);
1221 proto_tree_add_item(tree
, hf_ipmi_picmg_21_site_num
, tvb
, 6, 1, ENC_LITTLE_ENDIAN
);
1222 proto_tree_add_item(tree
, hf_ipmi_picmg_21_max_unavail
, tvb
, 7, 1, ENC_LITTLE_ENDIAN
);
1223 proto_tree_add_bitmask_text(tree
, tvb
, 8, 1, NULL
, NULL
, ett_ipmi_picmg_21_byte9
, byte9
, ENC_LITTLE_ENDIAN
, 0);
1225 addrtype
= tvb_get_guint8(tvb
, 8) & 0x7f;
1226 if (addrtype
== 0x01) {
1227 /* IP address and RMCP port are in network byte order! */
1228 proto_tree_add_item(tree
, hf_ipmi_picmg_21_ipaddr
, tvb
, 9, 4, ENC_BIG_ENDIAN
);
1229 proto_tree_add_item(tree
, hf_ipmi_picmg_21_rmcpport
, tvb
, 13, 2, ENC_BIG_ENDIAN
);
1233 /* Get Shelf Power Allocation
1236 rq22(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1239 ipmi_setsaveddata(0, tvb_get_guint8(tvb
, 0));
1242 proto_tree_add_item(tree
, hf_ipmi_picmg_22_feed_idx
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
1246 rs22(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1252 proto_tree_add_item(tree
, hf_ipmi_picmg_22_update_cnt
, tvb
, 0, 2, ENC_LITTLE_ENDIAN
);
1254 max
= tvb_length(tvb
) / 2 - 1;
1256 /* At least one shall be present */
1259 ipmi_getsaveddata(0, &offs
);
1260 for (i
= 0; i
< max
; i
++) {
1261 v
= tvb_get_letohs(tvb
, 2 + 2 * i
);
1262 proto_tree_add_uint_format(tree
, hf_ipmi_picmg_22_pwr_alloc
, tvb
, 2 + 2 * i
, 2,
1263 v
, "Power Feed [%d] Allocation: %d Watts", offs
+ i
, v
);
1268 add_component_bits(proto_tree
*tree
, tvbuff_t
*tvb
, guint offs
, const char *desc
)
1270 static const gint
*compbits
[] = { &hf_ipmi_picmg_XX_comp7
, &hf_ipmi_picmg_XX_comp6
, &hf_ipmi_picmg_XX_comp5
,
1271 &hf_ipmi_picmg_XX_comp4
, &hf_ipmi_picmg_XX_comp3
, &hf_ipmi_picmg_XX_comp2
, &hf_ipmi_picmg_XX_comp1
, &hf_ipmi_picmg_XX_comp0
, NULL
};
1273 proto_tree_add_bitmask_text(tree
, tvb
, offs
, 1, desc
, "None",
1274 ett_ipmi_picmg_XX_compbits
, compbits
, ENC_LITTLE_ENDIAN
, 0);
1277 /* Get Target Upgrade Capabilities
1280 rs2e(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1282 static const gint
*byte2
[] = { &hf_ipmi_picmg_2e_upgrade_undesirable
, &hf_ipmi_picmg_2e_auto_rollback_override
,
1283 &hf_ipmi_picmg_2e_ipmc_degraded
, &hf_ipmi_picmg_2e_deferred_activate
, &hf_ipmi_picmg_2e_services_affected
,
1284 &hf_ipmi_picmg_2e_manual_rollback
, &hf_ipmi_picmg_2e_auto_rollback
, &hf_ipmi_picmg_2e_self_test
, NULL
};
1286 proto_tree_add_item(tree
, hf_ipmi_picmg_2e_version
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
1287 proto_tree_add_bitmask_text(tree
, tvb
, 1, 1, "Capabilities: ", "None",
1288 ett_ipmi_picmg_2e_byte2
, byte2
, ENC_LITTLE_ENDIAN
, 0);
1289 proto_tree_add_item(tree
, hf_ipmi_picmg_2e_upgrade_tout
, tvb
, 2, 1, ENC_LITTLE_ENDIAN
);
1290 proto_tree_add_item(tree
, hf_ipmi_picmg_2e_selftest_tout
, tvb
, 3, 1, ENC_LITTLE_ENDIAN
);
1291 proto_tree_add_item(tree
, hf_ipmi_picmg_2e_rollback_tout
, tvb
, 4, 1, ENC_LITTLE_ENDIAN
);
1292 proto_tree_add_item(tree
, hf_ipmi_picmg_2e_inaccessibility_tout
, tvb
, 5, 1, ENC_LITTLE_ENDIAN
);
1293 add_component_bits(tree
, tvb
, 6, "Components present: ");
1296 static const value_string cc2e
[] = {
1297 { 0x81, "Firmware Upgrade is not supported over this interface" },
1301 /* Get Component Properties
1304 prop_00(tvbuff_t
*tvb
, proto_tree
*tree
)
1306 static const gint
*byte1
[] = { &hf_ipmi_picmg_prop00_cold_reset
, &hf_ipmi_picmg_prop00_deferred_activation
,
1307 &hf_ipmi_picmg_prop00_comparison
, &hf_ipmi_picmg_prop00_preparation
, &hf_ipmi_picmg_prop00_rollback
, NULL
};
1309 proto_tree_add_bitmask_text(tree
, tvb
, 0, 1, "General Component Properties: ", "None",
1310 ett_ipmi_picmg_prop00_byte1
, byte1
, ENC_LITTLE_ENDIAN
, 0);
1314 parse_version(tvbuff_t
*tvb
, proto_tree
*tree
)
1316 static const gint
*byte1
[] = { &hf_ipmi_picmg_prop01_fw_major
, NULL
};
1318 proto_tree_add_bitmask_text(tree
, tvb
, 0, 1, NULL
, NULL
,
1319 ett_ipmi_picmg_prop01_byte1
, byte1
, ENC_LITTLE_ENDIAN
, 0);
1320 proto_tree_add_item(tree
, hf_ipmi_picmg_prop01_fw_minor
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
1321 proto_tree_add_item(tree
, hf_ipmi_picmg_prop01_fw_aux
, tvb
, 2, 4, ENC_NA
);
1325 prop_02(tvbuff_t
*tvb
, proto_tree
*tree
)
1327 guint len
= tvb_length(tvb
);
1332 proto_tree_add_item(tree
, hf_ipmi_picmg_prop02_desc
, tvb
, 0, len
, ENC_ASCII
|ENC_NA
);
1335 static const struct {
1336 void (*intrp
)(tvbuff_t
*tvb
, proto_tree
*tree
);
1339 { prop_00
, "General Component Properties" },
1340 { parse_version
, "Current Version" },
1341 { prop_02
, "Description String" },
1342 { parse_version
, "Rollback firmware version" },
1343 { parse_version
, "Deferred upgrade firmware version" }
1347 rq2f(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1349 guint8 pno
= tvb_get_guint8(tvb
, 1);
1353 ipmi_setsaveddata(0, pno
);
1357 if (pno
< array_length(compprops
)) {
1358 desc
= compprops
[pno
].name
;
1359 } else if (pno
>= 0xC0) {
1365 proto_tree_add_item(tree
, hf_ipmi_picmg_2f_comp_id
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
1366 proto_tree_add_uint_format_value(tree
, hf_ipmi_picmg_2f_comp_prop
, tvb
, 1, 1, pno
,
1367 "%s (0x%02x)", desc
, pno
);
1371 rs2f(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1377 if (!ipmi_getsaveddata(0, &pno
)) {
1378 /* Can't parse further if property selector is not known */
1379 proto_tree_add_item(tree
, hf_ipmi_picmg_2f_prop_data
, tvb
, 0, tvb_length(tvb
), ENC_NA
);
1383 if (pno
< array_length(compprops
)) {
1384 desc
= compprops
[pno
].name
;
1385 } else if (pno
>= 0xC0) {
1391 ti
= proto_tree_add_text(tree
, tvb
, 0, 0, "Property selector: %s (0x%02x)", desc
, pno
);
1392 PROTO_ITEM_SET_GENERATED(ti
);
1393 if (pno
< array_length(compprops
)) {
1394 compprops
[pno
].intrp(tvb
, tree
);
1396 proto_tree_add_item(tree
, hf_ipmi_picmg_2f_prop_data
, tvb
, 0, tvb_length(tvb
), ENC_NA
);
1400 static const value_string cc2f
[] = {
1401 { 0x81, "Firmware Upgrade is not supported over this interface" },
1402 { 0x82, "Invalid Component ID" },
1403 { 0x83, "Invalid Component property selector" },
1407 /* Abort Firmware Upgrade
1409 static const value_string cc30
[] = {
1410 { 0x80, "Firmware Upgrade cannot be aborted at this moment" },
1411 { 0x81, "Firmware Upgrade aborted, IPMC cannot resume normal operation" },
1415 /* Initiate upgrade action
1418 rq31(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1420 add_component_bits(tree
, tvb
, 0, "Components: ");
1421 proto_tree_add_item(tree
, hf_ipmi_picmg_31_action
, tvb
, 1, 1, ENC_LITTLE_ENDIAN
);
1424 static const value_string cc31
[] = {
1425 { 0x80, "Command in progress" },
1426 { 0x81, "Invalid component" },
1430 /* Upload Firmware Block
1433 rq32(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1435 proto_tree_add_item(tree
, hf_ipmi_picmg_32_block
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
1436 proto_tree_add_item(tree
, hf_ipmi_picmg_32_data
, tvb
, 1, tvb_length(tvb
) - 1, ENC_NA
);
1440 rs32(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1442 if (tvb_length(tvb
) > 0) {
1443 proto_tree_add_item(tree
, hf_ipmi_picmg_32_sec_offs
, tvb
, 0, 4, ENC_LITTLE_ENDIAN
);
1444 proto_tree_add_item(tree
, hf_ipmi_picmg_32_sec_len
, tvb
, 4, 4, ENC_LITTLE_ENDIAN
);
1448 static const value_string cc32
[] = {
1449 { 0x80, "Command in progress" },
1450 { 0x81, "Invalid component" },
1451 { 0x82, "Internal checksum error detected in the received blocks" },
1455 /* Finish Firmware Upgrade
1458 rq33(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1460 proto_tree_add_item(tree
, hf_ipmi_picmg_33_comp_id
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
1461 proto_tree_add_item(tree
, hf_ipmi_picmg_33_img_len
, tvb
, 1, 4, ENC_LITTLE_ENDIAN
);
1464 static const value_string cc33
[] = {
1465 { 0x80, "Command in progress" },
1466 { 0x81, "Number of bytes received does not match size in the request" },
1467 { 0x82, "Internal checksum error detected in the received image" },
1468 { 0x83, "Uploaded firmware does not match current" },
1472 /* Get Upgrade Status
1475 rs34(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1477 static const guint8 sig
= 0;
1478 static const gint
*byte3
[] = { &hf_ipmi_picmg_34_percentage
, NULL
};
1482 v
= tvb_get_guint8(tvb
, 0);
1483 c
= ipmi_getcmd(ipmi_getnetfn(IPMI_GROUP_REQ
, &sig
), v
);
1484 proto_tree_add_uint_format_value(tree
, hf_ipmi_picmg_34_cmd
, tvb
, 0, 1, v
,
1485 "%s (0x%02x)", c
->desc
, v
);
1486 v
= tvb_get_guint8(tvb
, 1);
1487 proto_tree_add_uint_format_value(tree
, hf_ipmi_picmg_34_ccode
, tvb
, 1, 1, v
,
1488 "%s (0x%02x)", ipmi_get_completion_code(v
, c
), v
);
1489 if (tvb_length(tvb
) > 2) {
1490 proto_tree_add_bitmask_text(tree
, tvb
, 2, 1, NULL
, NULL
,
1491 ett_ipmi_picmg_34_byte3
, byte3
, ENC_LITTLE_ENDIAN
, 0);
1495 static const value_string cc34
[] = {
1496 { 0x80, "Command in progress" },
1500 /* Activate Firmware
1503 rq35(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1505 if (tvb_length(tvb
) > 0) {
1506 proto_tree_add_item(tree
, hf_ipmi_picmg_35_rollback_override
, tvb
, 0, 1, ENC_LITTLE_ENDIAN
);
1510 static const value_string cc35
[] = {
1511 { 0x80, "Command in progress" },
1515 /* Query Self-test Results
1518 rs36(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1520 static const gint
*byte2
[] = { &hf_ipmi_picmg_36_fail_sel
, &hf_ipmi_picmg_36_fail_sdr
,
1521 &hf_ipmi_picmg_36_fail_bmc_fru
, &hf_ipmi_picmg_36_fail_ipmb_sig
, &hf_ipmi_picmg_36_fail_sdr_empty
,
1522 &hf_ipmi_picmg_36_fail_iua
, &hf_ipmi_picmg_36_fail_bb_fw
, &hf_ipmi_picmg_36_fail_oper_fw
, NULL
};
1525 res
= tvb_get_guint8(tvb
, 0);
1526 fail
= tvb_get_guint8(tvb
, 1);
1528 proto_tree_add_uint_format_value(tree
, hf_ipmi_picmg_36_result
, tvb
, 0, 1,
1530 val_to_str_const(res
, vals_36_result
, "Device-specific internal failure"),
1533 if (res
== 0x55 || res
== 0xff) {
1534 proto_tree_add_uint_format_value(tree
, hf_ipmi_picmg_36_fail
, tvb
, 1, 1,
1535 fail
, "0x%02x (must be 0x00)",
1537 } else if (res
== 0x57) {
1538 proto_tree_add_bitmask(tree
, tvb
, 1, hf_ipmi_picmg_36_fail
, ett_ipmi_picmg_36_byte2
, byte2
, ENC_LITTLE_ENDIAN
);
1539 } else if (res
== 0x60) {
1540 add_component_bits(tree
, tvb
, 1, "Failed components: ");
1542 proto_tree_add_uint_format_value(tree
, hf_ipmi_picmg_36_fail
, tvb
, 1, 1,
1543 fail
, "0x%02x (device-specific)", fail
);
1547 static const value_string cc36
[] = {
1548 { 0x80, "Self-test in progress" },
1549 { 0x81, "Firmware upgrade not supported over this interface" },
1553 /* Query Rollback Results
1556 rs37(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
)
1558 static const gint
*byte2
[] = { &hf_ipmi_picmg_37_percent
, NULL
};
1561 switch (ipmi_current_hdr
->ccode
) {
1562 case 0x00: desc
= "Components completed rollback: "; break;
1563 case 0x80: desc
= "Components (should be None): "; break;
1564 case 0x81: desc
= "Components failed to rollback: "; break;
1565 default: desc
= "Components (ignored): "; break;
1568 add_component_bits(tree
, tvb
, 0, desc
);
1569 if (tvb_length(tvb
) > 1) {
1570 proto_tree_add_bitmask_text(tree
, tvb
, 1, 1, NULL
, NULL
,
1571 ett_ipmi_picmg_37_byte2
, byte2
, ENC_LITTLE_ENDIAN
, 0);
1575 static const value_string cc37
[] = {
1576 { 0x80, "Rollback in progress" },
1577 { 0x81, "Rollback failure" },
1578 { 0x82, "Rollback overridden" },
1579 { 0x83, "Rollback denied for integrity reasons" },
1583 /* Initiate Manual Rollback
1585 static const value_string cc38
[] = {
1586 { 0x80, "Rollback in progress" },
1590 static ipmi_cmd_t cmd_picmg
[] = {
1591 /* AdvancedTCA Commands */
1592 { 0x00, NULL
, rs00
, NULL
, NULL
, "[ATCA] Get PICMG Properties", 0 },
1593 { 0x01, rq01
, rs01
, NULL
, NULL
, "[ATCA] Get Address Info", 0 },
1594 { 0x02, NULL
, rs02
, NULL
, NULL
, "[ATCA] Get Shelf Address Info", 0 },
1595 { 0x03, rq03
, NULL
, NULL
, NULL
, "[ATCA] Set Shelf Address Info", 0 },
1596 { 0x04, rq04
, NULL
, NULL
, NULL
, "[ATCA] FRU Control", 0 },
1597 { 0x05, rq05
, rs05
, NULL
, NULL
, "[ATCA] Get FRU LED Properties", 0 },
1598 { 0x06, rq06
, rs06
, NULL
, NULL
, "[ATCA] Get LED Color Capabilities", 0 },
1599 { 0x07, rq07
, NULL
, NULL
, NULL
, "[ATCA] Set FRU LED State", 0 },
1600 { 0x08, rq08
, rs08
, NULL
, NULL
, "[ATCA] Get FRU LED State", 0 },
1601 { 0x09, rq09
, NULL
, NULL
, NULL
, "[ATCA] Set IPMB State", 0 },
1602 { 0x0a, rq0a
, NULL
, NULL
, NULL
, "[ATCA] Set FRU Activation Policy", 0 },
1603 { 0x0b, rq0b
, rs0b
, NULL
, NULL
, "[ATCA] Get FRU Activation Policy", 0 },
1604 { 0x0c, rq0c
, NULL
, NULL
, NULL
, "[ATCA] Set FRU Activation", 0 },
1605 { 0x0d, rq0d
, rs0d
, NULL
, NULL
, "[ATCA] Get Device Locator Record ID", 0 },
1606 { 0x0e, rq0e
, NULL
, NULL
, NULL
, "[ATCA] Set Port State", 0 },
1607 { 0x0f, rq0f
, rs0f
, NULL
, NULL
, "[ATCA] Get Port State", 0 },
1608 { 0x10, rq10
, rs10
, NULL
, NULL
, "[ATCA] Compute Power Properties", 0 },
1609 { 0x11, rq11
, NULL
, NULL
, NULL
, "[ATCA] Set Power Level", 0 },
1610 { 0x12, rq12
, rs12
, NULL
, NULL
, "[ATCA] Get Power Level", 0 },
1611 { 0x13, rq13
, NULL
, NULL
, NULL
, "[ATCA] Renegotiate Power", 0 },
1612 { 0x14, rq14
, rs14
, NULL
, NULL
, "[ATCA] Get Fan Speed Properties", 0 },
1613 { 0x15, rq15
, NULL
, NULL
, NULL
, "[ATCA] Set Fan Level", 0 },
1614 { 0x16, rq16
, rs16
, NULL
, NULL
, "[ATCA] Get Fan Level", 0 },
1615 { 0x17, rq17
, rs17
, NULL
, NULL
, "[ATCA] Bused Resource Control", CMD_CALLRQ
},
1616 { 0x18, rq18
, rs18
, NULL
, NULL
, "[ATCA] Get IPMB Link Info", 0 },
1617 { 0x19, IPMI_TBD
, NULL
, NULL
, "[AMC.0] Set AMC Port State", 0 },
1618 { 0x1a, IPMI_TBD
, NULL
, NULL
, "[AMC.0] Get AMC Port State", 0 },
1619 { 0x1b, NULL
, rs1b
, NULL
, NULL
, "[ATCA] Get Shelf Manager IPMB Address", 0 },
1620 { 0x1c, rq1c
, NULL
, NULL
, NULL
, "[ATCA] Set Fan Policy", 0 },
1621 { 0x1d, rq1d
, rs1d
, NULL
, NULL
, "[ATCA] Get Fan Policy", 0 },
1622 { 0x1e, rq1e
, rs1e
, NULL
, NULL
, "[ATCA] FRU Control Capabilities", 0 },
1623 { 0x1f, rq1f
, rs1f
, cc1f
, NULL
, "[ATCA] FRU Inventory Device Lock Control", 0 },
1624 { 0x20, rq20
, rs20
, cc20
, NULL
, "[ATCA] FRU Inventory Device Write", 0 },
1625 { 0x21, rq21
, rs21
, NULL
, NULL
, "[ATCA] Get Shelf Manager IP Addresses", 0 },
1626 { 0x22, rq22
, rs22
, NULL
, NULL
, "[ATCA] Get Shelf Power Allocation", CMD_CALLRQ
},
1627 { 0x23, IPMI_TBD
, NULL
, NULL
, "[uTCA] Get Location Information", 0 },
1628 { 0x24, IPMI_TBD
, NULL
, NULL
, "[uTCA] Power Channel Control", 0 },
1629 { 0x25, IPMI_TBD
, NULL
, NULL
, "[uTCA] Get Power Channel Status", 0 },
1630 { 0x26, IPMI_TBD
, NULL
, NULL
, "[uTCA] PM Reset", 0 },
1631 { 0x27, IPMI_TBD
, NULL
, NULL
, "[uTCA] Get PM Status", 0 },
1632 { 0x28, IPMI_TBD
, NULL
, NULL
, "[uTCA] PM Heartbeat", 0 },
1633 { 0x29, IPMI_TBD
, NULL
, NULL
, "[uTCA] Get Telco Alarm Capability", 0 },
1634 { 0x2a, IPMI_TBD
, NULL
, NULL
, "[uTCA] Set Telco Alarm State", 0 },
1635 { 0x2b, IPMI_TBD
, NULL
, NULL
, "[uTCA] Get Telco Alarm State", 0 },
1636 { 0x2c, IPMI_TBD
, NULL
, NULL
, "[AMC.0] Set Clock State", 0 },
1637 { 0x2d, IPMI_TBD
, NULL
, NULL
, "[AMC.0] Get Clock State", 0 },
1638 { 0x2e, NULL
, rs2e
, cc2e
, NULL
, "[HPM.1] Get Target Upgrade Capabilities", 0 },
1639 { 0x2f, rq2f
, rs2f
, cc2f
, NULL
, "[HPM.1] Get Component Properties", CMD_CALLRQ
},
1640 { 0x30, NULL
, NULL
, cc30
, NULL
, "[HPM.1] Abort Firmware Upgrade", 0 },
1641 { 0x31, rq31
, NULL
, cc31
, NULL
, "[HPM.1] Initiate Upgrade Action", 0 },
1642 { 0x32, rq32
, rs32
, cc32
, NULL
, "[HPM.1] Upload Firmware Block", 0 },
1643 { 0x33, rq33
, NULL
, cc33
, NULL
, "[HPM.1] Finish Firmware Upload", 0 },
1644 { 0x34, NULL
, rs34
, cc34
, NULL
, "[HPM.1] Get Upgrade Status", 0 },
1645 { 0x35, rq35
, NULL
, cc35
, NULL
, "[HPM.1] Activate Firmware", 0 },
1646 { 0x36, NULL
, rs36
, cc36
, NULL
, "[HPM.1] Query Self-test Results", 0 },
1647 { 0x37, NULL
, rs37
, cc37
, NULL
, "[HPM.1] Query Rollback Status", 0 },
1648 { 0x38, NULL
, NULL
, cc38
, NULL
, "[HPM.1] Initiate Manual Rollback", 0 },
1652 ipmi_register_picmg(gint proto_ipmi
)
1654 static hf_register_info hf
[] = {
1655 { &hf_ipmi_picmg_led_function
,
1657 "ipmi.led.function", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
1658 { &hf_ipmi_picmg_led_on_duration
,
1660 "ipmi.led.on_duration", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
1661 { &hf_ipmi_picmg_led_color
,
1663 "ipmi.led.color", FT_UINT8
, BASE_HEX
, led_color_vals
, 0x0f, NULL
, HFILL
}},
1665 { &hf_ipmi_picmg_linkinfo_grpid
,
1667 "ipmi.linkinfo.grpid", FT_UINT32
, BASE_DEC
, NULL
, 0xff000000, NULL
, HFILL
}},
1668 { &hf_ipmi_picmg_linkinfo_type_ext
,
1670 "ipmi.linkinfo.type_ext", FT_UINT32
, BASE_HEX
, NULL
, 0x00f00000, NULL
, HFILL
}},
1671 { &hf_ipmi_picmg_linkinfo_type
,
1673 "ipmi.linkinfo.type", FT_UINT32
, BASE_HEX
, linkinfo_type_vals
, 0x000ff000, NULL
, HFILL
}},
1674 { &hf_ipmi_picmg_linkinfo_ports
,
1676 "ipmi.linkinfo.ports", FT_UINT32
, BASE_HEX
, linkinfo_ports_vals
, 0x00000f00, NULL
, HFILL
}},
1677 { &hf_ipmi_picmg_linkinfo_iface
,
1679 "ipmi.linkinfo.iface", FT_UINT32
, BASE_HEX
, linkinfo_iface_vals
, 0x000000c0, NULL
, HFILL
}},
1680 { &hf_ipmi_picmg_linkinfo_chan
,
1682 "ipmi.linkinfo.chan", FT_UINT32
, BASE_DEC
, NULL
, 0x0000003f, NULL
, HFILL
}},
1683 { &hf_ipmi_picmg_linkinfo_state
,
1685 "ipmi.picmg0e.state", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
1687 { &hf_ipmi_picmg_00_version
,
1688 { "PICMG Extension Version",
1689 "ipmi.picmg00.version", FT_UINT8
, BASE_CUSTOM
, ipmi_fmt_version
, 0, NULL
, HFILL
}},
1690 { &hf_ipmi_picmg_00_max_fruid
,
1691 { "Max FRU Device ID",
1692 "ipmi.picmg00.max_fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1693 { &hf_ipmi_picmg_00_ipmc_fruid
,
1694 { "FRU Device ID for IPMC",
1695 "ipmi.picmg00.ipmc_fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1697 { &hf_ipmi_picmg_01_rq_fruid
,
1699 "ipmi.picmg01.rq_fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1700 { &hf_ipmi_picmg_01_rq_addr_key_type
,
1701 { "Address Key Type",
1702 "ipmi.picmg01.rq_addr_key_type", FT_UINT8
, BASE_HEX
, addr_key_type_vals
, 0, NULL
, HFILL
}},
1703 { &hf_ipmi_picmg_01_rq_addr_key
,
1705 "ipmi.picmg01.rq_addr_key", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
1706 { &hf_ipmi_picmg_01_rq_site_type
,
1708 "ipmi.picmg01.rq_site_type", FT_UINT8
, BASE_HEX
, site_type_vals
, 0, NULL
, HFILL
}},
1709 { &hf_ipmi_picmg_01_rs_hwaddr
,
1710 { "Hardware Address",
1711 "ipmi.picmg01.rs_hwaddr", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
1712 { &hf_ipmi_picmg_01_rs_ipmbaddr
,
1714 "ipmi.picmg01.rs_ipmbaddr", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
1715 { &hf_ipmi_picmg_01_rs_rsrv
,
1716 { "Reserved (shall be 0xFF)",
1717 "ipmi.picmg01.rs_rsrv", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
1718 { &hf_ipmi_picmg_01_rs_fruid
,
1720 "ipmi.picmg01.rs_fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1721 { &hf_ipmi_picmg_01_rs_site_num
,
1723 "ipmi.picmg01.rs_site_num", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1724 { &hf_ipmi_picmg_01_rs_site_type
,
1726 "ipmi.picmg01.rs_site_type", FT_UINT8
, BASE_HEX
, site_type_vals
, 0, NULL
, HFILL
}},
1728 { &hf_ipmi_picmg_04_fruid
,
1730 "ipmi.picmg04.fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1731 { &hf_ipmi_picmg_04_cmd
,
1733 "ipmi.picmg04.cmd", FT_UINT8
, BASE_HEX
, vals_04_cmd
, 0, NULL
, HFILL
}},
1735 { &hf_ipmi_picmg_05_fruid
,
1737 "ipmi.picmg05.fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1738 { &hf_ipmi_picmg_05_led3
,
1740 "ipmi.picmg05.led3", FT_BOOLEAN
, 8, NULL
, 0x08, NULL
, HFILL
}},
1741 { &hf_ipmi_picmg_05_led2
,
1743 "ipmi.picmg05.led2", FT_BOOLEAN
, 8, NULL
, 0x04, NULL
, HFILL
}},
1744 { &hf_ipmi_picmg_05_led1
,
1746 "ipmi.picmg05.led1", FT_BOOLEAN
, 8, NULL
, 0x02, NULL
, HFILL
}},
1747 { &hf_ipmi_picmg_05_blue_led
,
1749 "ipmi.picmg05.blue_led", FT_BOOLEAN
, 8, NULL
, 0x01, NULL
, HFILL
}},
1750 { &hf_ipmi_picmg_05_app_leds
,
1751 { "Application-specific LED Count",
1752 "ipmi.picmg05.app_leds", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1754 { &hf_ipmi_picmg_06_fruid
,
1756 "ipmi.picmg06.fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1757 { &hf_ipmi_picmg_06_ledid
,
1759 "ipmi.picmg06.ledid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1760 { &hf_ipmi_picmg_06_cap_white
,
1762 "ipmi.picmg06.cap_white", FT_BOOLEAN
, 8, NULL
, 0x40, NULL
, HFILL
}},
1763 { &hf_ipmi_picmg_06_cap_orange
,
1765 "ipmi.picmg06.cap_orange", FT_BOOLEAN
, 8, NULL
, 0x20, NULL
, HFILL
}},
1766 { &hf_ipmi_picmg_06_cap_amber
,
1768 "ipmi.picmg06.cap_amber", FT_BOOLEAN
, 8, NULL
, 0x10, NULL
, HFILL
}},
1769 { &hf_ipmi_picmg_06_cap_green
,
1771 "ipmi.picmg06.cap_green", FT_BOOLEAN
, 8, NULL
, 0x08, NULL
, HFILL
}},
1772 { &hf_ipmi_picmg_06_cap_red
,
1774 "ipmi.picmg06.cap_red", FT_BOOLEAN
, 8, NULL
, 0x04, NULL
, HFILL
}},
1775 { &hf_ipmi_picmg_06_cap_blue
,
1777 "ipmi.picmg06.cap_blue", FT_BOOLEAN
, 8, NULL
, 0x02, NULL
, HFILL
}},
1778 { &hf_ipmi_picmg_06_default_local_color
,
1779 { "Default LED Color in Local Control state",
1780 "ipmi.picmg06.def_local", FT_UINT8
, BASE_HEX
, led_color_vals
, 0x0f, NULL
, HFILL
}},
1781 { &hf_ipmi_picmg_06_default_override_color
,
1782 { "Default LED Color in Override state",
1783 "ipmi.picmg06.def_override", FT_UINT8
, BASE_HEX
, led_color_vals
, 0x0f, NULL
, HFILL
}},
1785 { &hf_ipmi_picmg_07_fruid
,
1787 "ipmi.picmg07.fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1788 { &hf_ipmi_picmg_07_ledid
,
1790 "ipmi.picmg07.ledid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1792 { &hf_ipmi_picmg_08_fruid
,
1794 "ipmi.picmg08.fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1795 { &hf_ipmi_picmg_08_ledid
,
1797 "ipmi.picmg08.ledid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1798 { &hf_ipmi_picmg_08_state_lamptest
,
1800 "ipmi.picmg08.state_lamptest", FT_BOOLEAN
, 8, NULL
, 0x04, NULL
, HFILL
}},
1801 { &hf_ipmi_picmg_08_state_override
,
1803 "ipmi.picmg08.state_override", FT_BOOLEAN
, 8, NULL
, 0x02, NULL
, HFILL
}},
1804 { &hf_ipmi_picmg_08_state_local
,
1806 "ipmi.picmg08.state_local", FT_BOOLEAN
, 8, NULL
, 0x01, NULL
, HFILL
}},
1807 { &hf_ipmi_picmg_08_lamptest_duration
,
1808 { "Lamp test duration",
1809 "ipmi.picmg08.lamptest_duration", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1811 { &hf_ipmi_picmg_09_ipmba
,
1813 "ipmi.picmg09.ipmba", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
1814 { &hf_ipmi_picmg_09_ipmbb
,
1816 "ipmi.picmg09.ipmbb", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
1818 { &hf_ipmi_picmg_0a_fruid
,
1820 "ipmi.picmg0a.fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1821 { &hf_ipmi_picmg_0a_msk_d_locked
,
1822 { "Deactivation-Locked bit",
1823 "ipmi.picmg0a.msk_deactivation", FT_BOOLEAN
, 8, NULL
, 0x02, NULL
, HFILL
}},
1824 { &hf_ipmi_picmg_0a_msk_locked
,
1826 "ipmi.picmg0a.msk_locked", FT_BOOLEAN
, 8, NULL
, 0x01, NULL
, HFILL
}},
1827 { &hf_ipmi_picmg_0a_d_locked
,
1828 { "Deactivation-Locked bit",
1829 "ipmi.picmg0a.deactivation", FT_BOOLEAN
, 8, TFS(&set_clear_tfs
), 0x02, NULL
, HFILL
}},
1830 { &hf_ipmi_picmg_0a_locked
,
1832 "ipmi.picmg0a.locked", FT_BOOLEAN
, 8, TFS(&set_clear_tfs
), 0x01, NULL
, HFILL
}},
1834 { &hf_ipmi_picmg_0b_fruid
,
1836 "ipmi.picmg0b.fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1837 { &hf_ipmi_picmg_0b_d_locked
,
1838 { "Deactivation-Locked bit",
1839 "ipmi.picmg0b.deactivation", FT_BOOLEAN
, 8, TFS(&set_clear_tfs
), 0x02, NULL
, HFILL
}},
1840 { &hf_ipmi_picmg_0b_locked
,
1842 "ipmi.picmg0b.locked", FT_BOOLEAN
, 8, TFS(&set_clear_tfs
), 0x01, NULL
, HFILL
}},
1844 { &hf_ipmi_picmg_0c_fruid
,
1846 "ipmi.picmg0c.fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1847 { &hf_ipmi_picmg_0c_cmd
,
1849 "ipmi.picmg0c.cmd", FT_UINT8
, BASE_HEX
, vals_0c_cmd
, 0, NULL
, HFILL
}},
1851 { &hf_ipmi_picmg_0d_fruid
,
1853 "ipmi.picmg0d.fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1854 { &hf_ipmi_picmg_0d_start
,
1855 { "Search after record ID",
1856 "ipmi.picmg0d.start", FT_UINT16
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1857 { &hf_ipmi_picmg_0d_recordid
,
1859 "ipmi.picmg0d.recordid", FT_UINT16
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1861 { &hf_ipmi_picmg_0f_iface
,
1863 "ipmi.linkinfo.iface", FT_UINT8
, BASE_HEX
, linkinfo_iface_vals
, 0x000000c0, NULL
, HFILL
}},
1864 { &hf_ipmi_picmg_0f_chan
,
1866 "ipmi.linkinfo.chan", FT_UINT8
, BASE_DEC
, NULL
, 0x0000003f, NULL
, HFILL
}},
1868 { &hf_ipmi_picmg_10_fruid
,
1870 "ipmi.picmg10.fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1871 { &hf_ipmi_picmg_10_nslots
,
1872 { "Number of spanned slots",
1873 "ipmi.picmg10.nslots", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1874 { &hf_ipmi_picmg_10_ipmc_loc
,
1876 "ipmi.picmg10.ipmc_loc", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1878 { &hf_ipmi_picmg_11_fruid
,
1880 "ipmi.picmg11.fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1881 { &hf_ipmi_picmg_11_power_level
,
1883 "ipmi.picmg11.power_level", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1884 { &hf_ipmi_picmg_11_set_to_desired
,
1885 { "Set Present Levels to Desired",
1886 "ipmi.picmg11.set_to_desired", FT_UINT8
, BASE_HEX
, vals_11_set
, 0, NULL
, HFILL
}},
1888 { &hf_ipmi_picmg_12_fruid
,
1890 "ipmi.picmg12.fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1891 { &hf_ipmi_picmg_12_pwr_type
,
1893 "ipmi.picmg12.pwr_type", FT_UINT8
, BASE_HEX
, vals_12_pwr_type
, 0, NULL
, HFILL
}},
1894 { &hf_ipmi_picmg_12_dynamic
,
1895 { "Dynamic Power Configuration",
1896 "ipmi.picmg12.dynamic", FT_BOOLEAN
, 8, NULL
, 0x80, NULL
, HFILL
}},
1897 { &hf_ipmi_picmg_12_pwr_lvl
,
1899 "ipmi.picmg12.pwd_lvl", FT_UINT8
, BASE_DEC
, NULL
, 0x0f, NULL
, HFILL
}},
1900 { &hf_ipmi_picmg_12_delay
,
1901 { "Delay to stable power",
1902 "ipmi.picmg12.delay", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1903 { &hf_ipmi_picmg_12_pwr_mult
,
1904 { "Power multiplier",
1905 "ipmi.picmg12.pwr_mult", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1906 { &hf_ipmi_picmg_12_pwr_draw
,
1908 "ipmi.picmg12.pwr_draw", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1910 { &hf_ipmi_picmg_13_fruid
,
1912 "ipmi.picmg13.fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1914 { &hf_ipmi_picmg_14_fruid
,
1916 "ipmi.picmg14.fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1917 { &hf_ipmi_picmg_14_speed_min
,
1918 { "Minimum Speed Level",
1919 "ipmi.picmg14.speed_min", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1920 { &hf_ipmi_picmg_14_speed_max
,
1921 { "Maximum Speed Level",
1922 "ipmi.picmg14.speed_max", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1923 { &hf_ipmi_picmg_14_speed_norm
,
1924 { "Normal Operating Level",
1925 "ipmi.picmg14.speed_norm", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1926 { &hf_ipmi_picmg_14_local_control
,
1927 { "Local Control Mode Supported",
1928 "ipmi.picmg14.local_control", FT_BOOLEAN
, 8, NULL
, 0x80, NULL
, HFILL
}},
1930 { &hf_ipmi_picmg_15_fruid
,
1932 "ipmi.picmg15.fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1933 { &hf_ipmi_picmg_15_fan_level
,
1935 "ipmi.picmg15.fan_level", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1936 { &hf_ipmi_picmg_15_local_enable
,
1937 { "Local Control Enable State",
1938 "ipmi.picmg15.local_enable", FT_UINT8
, BASE_HEX
, enable_vals
, 0, NULL
, HFILL
}},
1940 { &hf_ipmi_picmg_16_fruid
,
1942 "ipmi.picmg16.fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1943 { &hf_ipmi_picmg_16_override_level
,
1944 { "Override Fan Level",
1945 "ipmi.picmg16.override_level", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1946 { &hf_ipmi_picmg_16_local_level
,
1947 { "Local Control Fan Level",
1948 "ipmi.picmg16.local_level", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1949 { &hf_ipmi_picmg_16_local_enable
,
1950 { "Local Control Enable State",
1951 "ipmi.picmg16.local_enable", FT_UINT8
, BASE_HEX
, enabled_vals
, 0, NULL
, HFILL
}},
1953 { &hf_ipmi_picmg_17_cmd
,
1955 "ipmi.picmg17.cmd", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
1956 { &hf_ipmi_picmg_17_resid
,
1957 { "Bused Resource ID",
1958 "ipmi.picmg17.resid", FT_UINT8
, BASE_HEX
, busresid_vals
, 0, NULL
, HFILL
}},
1959 { &hf_ipmi_picmg_17_status
,
1961 "ipmi.picmg17.status", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
1963 { &hf_ipmi_picmg_18_li_key_type
,
1964 { "Link Info Key Type",
1965 "ipmi.picmg18.li_key_type", FT_UINT8
, BASE_HEX
, vals_18_keytype
, 0, NULL
, HFILL
}},
1966 { &hf_ipmi_picmg_18_li_key
,
1968 "ipmi.picmg18.li_key", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1969 { &hf_ipmi_picmg_18_link_num
,
1971 "ipmi.picmg18.link_num", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1972 { &hf_ipmi_picmg_18_sensor_num
,
1974 "ipmi.picmg18.sensor_num", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1976 { &hf_ipmi_picmg_1b_addr_active
,
1977 { "Active Shelf Manager IPMB Address",
1978 "ipmi.picmg1b.addr_active", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
1979 { &hf_ipmi_picmg_1b_addr_backup
,
1980 { "Backup Shelf Manager IPMB Address",
1981 "ipmi.picmg1b.addr_backup", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
1983 { &hf_ipmi_picmg_1c_fan_site_number
,
1984 { "Fan Tray Site Number",
1985 "ipmi.picmg1c.fan_site_number", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1986 { &hf_ipmi_picmg_1c_fan_enable_state
,
1987 { "Fan Enable state",
1988 "ipmi.picmg1c.fan_enable_state", FT_UINT8
, BASE_HEX
, enable_vals
, 0, NULL
, HFILL
}},
1989 { &hf_ipmi_picmg_1c_fan_policy_timeout
,
1990 { "Fan Policy Timeout",
1991 "ipmi.picmg1c.fan_policy_timeout", FT_UINT8
, BASE_CUSTOM
, ipmi_fmt_5s_1based
, 0, NULL
, HFILL
}},
1992 { &hf_ipmi_picmg_1c_site_number
,
1994 "ipmi.picmg1c.site_number", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
1995 { &hf_ipmi_picmg_1c_site_type
,
1997 "ipmi.picmg1c.site_type", FT_UINT8
, BASE_HEX
, site_type_vals
, 0, NULL
, HFILL
}},
1999 { &hf_ipmi_picmg_1d_fan_site_number
,
2000 { "Fan Tray Site Number",
2001 "ipmi.picmg1d.fan_site_number", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
2002 { &hf_ipmi_picmg_1d_site_number
,
2004 "ipmi.picmg1d.site_number", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
2005 { &hf_ipmi_picmg_1d_site_type
,
2007 "ipmi.picmg1d.site_type", FT_UINT8
, BASE_HEX
, site_type_vals
, 0, NULL
, HFILL
}},
2008 { &hf_ipmi_picmg_1d_policy
,
2010 "ipmi.picmg1d.fan_enable_state", FT_UINT8
, BASE_HEX
, vals_1d_policy
, 0, NULL
, HFILL
}},
2011 { &hf_ipmi_picmg_1d_coverage
,
2013 "ipmi.picmg1d.coverage", FT_UINT8
, BASE_HEX
, vals_1d_coverage
, 0, NULL
, HFILL
}},
2015 { &hf_ipmi_picmg_1e_fruid
,
2017 "ipmi.picmg1e.fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
2018 { &hf_ipmi_picmg_1e_cap_diagintr
,
2019 { "Diagnostic interrupt",
2020 "ipmi.picmg1e.cap_diagintr", FT_BOOLEAN
, 8, NULL
, 0x08, NULL
, HFILL
}},
2021 { &hf_ipmi_picmg_1e_cap_graceful_reboot
,
2022 { "Graceful reboot",
2023 "ipmi.picmg1e.cap_reboot", FT_BOOLEAN
, 8, NULL
, 0x04, NULL
, HFILL
}},
2024 { &hf_ipmi_picmg_1e_cap_warm_reset
,
2026 "ipmi.picmg1e.cap_warmreset", FT_BOOLEAN
, 8, NULL
, 0x02, NULL
, HFILL
}},
2028 { &hf_ipmi_picmg_1f_rq_fruid
,
2030 "ipmi.picmg1f.rq_fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
2031 { &hf_ipmi_picmg_1f_rq_op
,
2033 "ipmi.picmg1f.rq_op", FT_UINT8
, BASE_HEX
, vals_1f_op
, 0, NULL
, HFILL
}},
2034 { &hf_ipmi_picmg_1f_rq_lockid
,
2036 "ipmi.picmg1f.rq_lockid", FT_UINT16
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
2037 { &hf_ipmi_picmg_1f_rs_lockid
,
2039 "ipmi.picmg1f.rs_lockid", FT_UINT16
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
2040 { &hf_ipmi_picmg_1f_rs_tstamp
,
2041 { "Last Commit Timestamp",
2042 "ipmi.picmg1f.rs_tstamp", FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
2044 { &hf_ipmi_picmg_20_fruid
,
2046 "ipmi.picmg20.fruid", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
2047 { &hf_ipmi_picmg_20_lockid
,
2049 "ipmi.picmg20.lockid", FT_UINT16
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
2050 { &hf_ipmi_picmg_20_offset
,
2051 { "Offset to write",
2052 "ipmi.picmg20.offset", FT_UINT16
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
2053 { &hf_ipmi_picmg_20_data
,
2055 "ipmi.picmg20.data", FT_BYTES
, BASE_NONE
, NULL
, 0, NULL
, HFILL
}},
2056 { &hf_ipmi_picmg_20_count
,
2058 "ipmi.picmg20.count", FT_BYTES
, BASE_NONE
, NULL
, 0, NULL
, HFILL
}},
2060 { &hf_ipmi_picmg_21_addr_num
,
2062 "ipmi.picmg21.addr_num", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
2063 { &hf_ipmi_picmg_21_tstamp
,
2064 { "Shelf IP Address Last Change Timestamp",
2065 "ipmi.picmg21.tstamp", FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
2066 { &hf_ipmi_picmg_21_addr_count
,
2068 "ipmi.picmg21.addr_count", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
2069 { &hf_ipmi_picmg_21_site_type
,
2071 "ipmi.picmg21.site_type", FT_UINT8
, BASE_HEX
, site_type_vals
, 0, NULL
, HFILL
}},
2072 { &hf_ipmi_picmg_21_site_num
,
2074 "ipmi.picmg21.site_num", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
2075 { &hf_ipmi_picmg_21_max_unavail
,
2076 { "Maximum Unavailable Time",
2077 "ipmi.picmg21.max_unavail", FT_UINT8
, BASE_CUSTOM
, ipmi_fmt_1s_1based
, 0, NULL
, HFILL
}},
2078 { &hf_ipmi_picmg_21_is_shm
,
2079 { "Shelf Manager IP Address",
2080 "ipmi.picmg21.is_shm", FT_BOOLEAN
, 8, NULL
, 0x80, NULL
, HFILL
}},
2081 { &hf_ipmi_picmg_21_addr_type
,
2083 "ipmi.picmg21.addr_type", FT_UINT8
, BASE_HEX
, NULL
, 0x7f, NULL
, HFILL
}},
2084 { &hf_ipmi_picmg_21_ipaddr
,
2086 "ipmi.picmg21.ip_addr", FT_IPv4
, BASE_NONE
, NULL
, 0, NULL
, HFILL
}},
2087 { &hf_ipmi_picmg_21_rmcpport
,
2089 "ipmi.picmg21.rmcp_port", FT_UINT16
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
2091 { &hf_ipmi_picmg_22_feed_idx
,
2092 { "Power Feed Index",
2093 "ipmi.picmg22.feed_idx", FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
2094 { &hf_ipmi_picmg_22_update_cnt
,
2096 "ipmi.picmg22.update_cnt", FT_UINT16
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
2097 { &hf_ipmi_picmg_22_pwr_alloc
,
2098 { "Power Feed Allocation",
2099 "ipmi.picmg22.pwr_alloc", FT_UINT16
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}},
2101 { &hf_ipmi_picmg_XX_comp7
,
2103 "ipmi.hpm1.comp7", FT_BOOLEAN
, 8, NULL
, 0x80, NULL
, HFILL
}},
2104 { &hf_ipmi_picmg_XX_comp6
,
2106 "ipmi.hpm1.comp6", FT_BOOLEAN
, 8, NULL
, 0x40, NULL
, HFILL
}},
2107 { &hf_ipmi_picmg_XX_comp5
,
2109 "ipmi.hpm1.comp5", FT_BOOLEAN
, 8, NULL
, 0x20, NULL
, HFILL
}},
2110 { &hf_ipmi_picmg_XX_comp4
,
2112 "ipmi.hpm1.comp4", FT_BOOLEAN
, 8, NULL
, 0x10, NULL
, HFILL
}},
2113 { &hf_ipmi_picmg_XX_comp3
,
2115 "ipmi.hpm1.comp3", FT_BOOLEAN
, 8, NULL
, 0x08, NULL
, HFILL
}},
2116 { &hf_ipmi_picmg_XX_comp2
,
2118 "ipmi.hpm1.comp2", FT_BOOLEAN
, 8, NULL
, 0x04, NULL
, HFILL
}},
2119 { &hf_ipmi_picmg_XX_comp1
,
2121 "ipmi.hpm1.comp1", FT_BOOLEAN
, 8, NULL
, 0x02, NULL
, HFILL
}},
2122 { &hf_ipmi_picmg_XX_comp0
,
2124 "ipmi.hpm1.comp0", FT_BOOLEAN
, 8, NULL
, 0x01, NULL
, HFILL
}},
2126 { &hf_ipmi_picmg_2e_version
,
2128 "ipmi.picmg2e.hpm1_version", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
2129 { &hf_ipmi_picmg_2e_upgrade_undesirable
,
2130 { "Firmware Upgrade Undesirable",
2131 "ipmi.picmg2e.upgrade_undesirable", FT_BOOLEAN
, 8, NULL
, 0x80, NULL
, HFILL
}},
2132 { &hf_ipmi_picmg_2e_auto_rollback_override
,
2133 { "Automatic Rollback Overridden",
2134 "ipmi.picmg2e.auto_rollback_override", FT_BOOLEAN
, 8, NULL
, 0x40, NULL
, HFILL
}},
2135 { &hf_ipmi_picmg_2e_ipmc_degraded
,
2136 { "IPMC degraded during upgrade",
2137 "ipmi.picmg2e.ipmc_degraded", FT_BOOLEAN
, 8, NULL
, 0x20, NULL
, HFILL
}},
2138 { &hf_ipmi_picmg_2e_deferred_activate
,
2139 { "Deferred Activation supported",
2140 "ipmi.picmg2e.deferred_activate", FT_BOOLEAN
, 8, NULL
, 0x10, NULL
, HFILL
}},
2141 { &hf_ipmi_picmg_2e_services_affected
,
2142 { "Services affected by upgrade",
2143 "ipmi.picmg2e.services_affected", FT_BOOLEAN
, 8, NULL
, 0x08, NULL
, HFILL
}},
2144 { &hf_ipmi_picmg_2e_manual_rollback
,
2145 { "Manual Rollback supported",
2146 "ipmi.picmg2e.manual_rollback", FT_BOOLEAN
, 8, NULL
, 0x04, NULL
, HFILL
}},
2147 { &hf_ipmi_picmg_2e_auto_rollback
,
2148 { "Automatic Rollback supported",
2149 "ipmi.picmg2e.auto_rollback", FT_BOOLEAN
, 8, NULL
, 0x02, NULL
, HFILL
}},
2150 { &hf_ipmi_picmg_2e_self_test
,
2151 { "Self-Test supported",
2152 "ipmi.picmg2e.self_test", FT_BOOLEAN
, 8, NULL
, 0x01, NULL
, HFILL
}},
2153 { &hf_ipmi_picmg_2e_upgrade_tout
,
2154 { "Upgrade timeout",
2155 "ipmi.picmg2e.upgrade_tout", FT_UINT8
, BASE_CUSTOM
, ipmi_fmt_5s_1based
, 0, NULL
, HFILL
}},
2156 { &hf_ipmi_picmg_2e_selftest_tout
,
2157 { "Self-test timeout",
2158 "ipmi.picmg2e.selftest_tout", FT_UINT8
, BASE_CUSTOM
, ipmi_fmt_5s_1based
, 0, NULL
, HFILL
}},
2159 { &hf_ipmi_picmg_2e_rollback_tout
,
2160 { "Rollback timeout",
2161 "ipmi.picmg2e.rollback_tout", FT_UINT8
, BASE_CUSTOM
, ipmi_fmt_5s_1based
, 0, NULL
, HFILL
}},
2162 { &hf_ipmi_picmg_2e_inaccessibility_tout
,
2163 { "Inaccessibility timeout",
2164 "ipmi.picmg2e.inaccessibility_tout", FT_UINT8
, BASE_CUSTOM
, ipmi_fmt_5s_1based
, 0, NULL
, HFILL
}},
2166 { &hf_ipmi_picmg_prop00_cold_reset
,
2167 { "Payload cold reset required",
2168 "ipmi.prop00.cold_reset", FT_BOOLEAN
, 8, NULL
, 0x20, NULL
, HFILL
}},
2169 { &hf_ipmi_picmg_prop00_deferred_activation
,
2170 { "Deferred firmware activation supported",
2171 "ipmi.prop00.deferred_activation", FT_BOOLEAN
, 8, NULL
, 0x10, NULL
, HFILL
}},
2172 { &hf_ipmi_picmg_prop00_comparison
,
2173 { "Firmware comparison supported",
2174 "ipmi.prop00.firmware_comparison", FT_BOOLEAN
, 8, NULL
, 0x08, NULL
, HFILL
}},
2175 { &hf_ipmi_picmg_prop00_preparation
,
2176 { "Prepare Components action required",
2177 "ipmi.prop00.preparation", FT_BOOLEAN
, 8, NULL
, 0x04, NULL
, HFILL
}},
2178 { &hf_ipmi_picmg_prop00_rollback
,
2179 { "Rollback/Backup support",
2180 "ipmi.prop00.rollback", FT_UINT8
, BASE_HEX
, vals_prop00_rollback
, 0x03, NULL
, HFILL
}},
2181 { &hf_ipmi_picmg_prop01_fw_major
,
2182 { "Major Firmware Revision (binary encoded)",
2183 "ipmi.prop01.fw_major", FT_UINT8
, BASE_HEX
, NULL
, 0x7f, NULL
, HFILL
}},
2184 { &hf_ipmi_picmg_prop01_fw_minor
,
2185 { "Minor Firmware Revision (BCD encoded)",
2186 "ipmi.prop01.fw_minor", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
2187 { &hf_ipmi_picmg_prop01_fw_aux
,
2188 { "Auxiliary Firmware Revision Information",
2189 "ipmi.prop01.fw_aux", FT_BYTES
, BASE_NONE
, NULL
, 0, NULL
, HFILL
}},
2190 { &hf_ipmi_picmg_prop02_desc
,
2191 { "Description string",
2192 "ipmi.prop02.desc", FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
}},
2194 { &hf_ipmi_picmg_2f_comp_id
,
2196 "ipmi.picmg2f.comp_id", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
2197 { &hf_ipmi_picmg_2f_comp_prop
,
2198 { "Component property selector",
2199 "ipmi.picmg2f.comp_prop", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
2200 { &hf_ipmi_picmg_2f_prop_data
,
2201 { "Unknown property data",
2202 "ipmi.picmg2f.prop_data", FT_BYTES
, BASE_NONE
, NULL
, 0, NULL
, HFILL
}},
2204 { &hf_ipmi_picmg_31_action
,
2206 "ipmi.picmg31.action", FT_UINT8
, BASE_HEX
, vals_31_action
, 0, NULL
, HFILL
}},
2208 { &hf_ipmi_picmg_32_block
,
2210 "ipmi.picmg32.block", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
2211 { &hf_ipmi_picmg_32_data
,
2213 "ipmi.picmg32.data", FT_BYTES
, BASE_NONE
, NULL
, 0, NULL
, HFILL
}},
2214 { &hf_ipmi_picmg_32_sec_offs
,
2216 "ipmi.picmg32.sec_offs", FT_UINT32
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
2217 { &hf_ipmi_picmg_32_sec_len
,
2219 "ipmi.picmg32.sec_len", FT_UINT32
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
2221 { &hf_ipmi_picmg_33_comp_id
,
2223 "ipmi.picmg33.comp_id", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
2224 { &hf_ipmi_picmg_33_img_len
,
2226 "ipmi.picmg33.img_len", FT_UINT32
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
2228 { &hf_ipmi_picmg_34_cmd
,
2229 { "Command in progress",
2230 "ipmi.picmg34.cmd", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
2231 { &hf_ipmi_picmg_34_ccode
,
2232 { "Last command completion code",
2233 "ipmi.picmg34.ccode", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
2234 { &hf_ipmi_picmg_34_percentage
,
2235 { "Completion estimate",
2236 "ipmi.picmg34.percent", FT_UINT8
, BASE_CUSTOM
, ipmi_fmt_percent
, 0x7f, NULL
, HFILL
}},
2238 { &hf_ipmi_picmg_35_rollback_override
,
2239 { "Rollback Override Policy",
2240 "ipmi.picmg35.rollback_override", FT_UINT8
, BASE_HEX
, vals_35_override
, 0, NULL
, HFILL
}},
2242 { &hf_ipmi_picmg_36_result
,
2243 { "Self test result",
2244 "ipmi.picmg36.self_test_result", FT_UINT8
, BASE_HEX
, vals_36_result
, 0, NULL
, HFILL
}},
2245 { &hf_ipmi_picmg_36_fail
,
2246 { "Self-test error bitfield",
2247 "ipmi.picmg36.fail", FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
}},
2248 { &hf_ipmi_picmg_36_fail_sel
,
2249 { "Cannot access SEL device",
2250 "ipmi.picmg36.fail.sel", FT_BOOLEAN
, 8, TFS(&tfs_36_fail_unknown
), 0x80, NULL
, HFILL
}},
2251 { &hf_ipmi_picmg_36_fail_sdr
,
2252 { "Cannot access SDR Repository",
2253 "ipmi.picmg36.fail.sdr", FT_BOOLEAN
, 8, TFS(&tfs_36_fail_unknown
), 0x40, NULL
, HFILL
}},
2254 { &hf_ipmi_picmg_36_fail_bmc_fru
,
2255 { "Cannot access BMC FRU device",
2256 "ipmi.picmg36.fail.bmc_fru", FT_BOOLEAN
, 8, TFS(&tfs_36_fail_unknown
), 0x20, NULL
, HFILL
}},
2257 { &hf_ipmi_picmg_36_fail_ipmb_sig
,
2258 { "IPMB signal lines do not respond",
2259 "ipmi.picmg36.fail.ipmb_sig", FT_BOOLEAN
, 8, TFS(&tfs_36_fail_unknown
), 0x10, NULL
, HFILL
}},
2260 { &hf_ipmi_picmg_36_fail_sdr_empty
,
2261 { "SDR Repository is empty",
2262 "ipmi.picmg36.fail.sdr_empty", FT_BOOLEAN
, 8, TFS(&tfs_36_fail_unknown
), 0x08, NULL
, HFILL
}},
2263 { &hf_ipmi_picmg_36_fail_iua
,
2264 { "Internal Use Area of BMC FRU corrupted",
2265 "ipmi.picmg36.fail.iua", FT_BOOLEAN
, 8, TFS(&tfs_36_fail_unknown
), 0x04, NULL
, HFILL
}},
2266 { &hf_ipmi_picmg_36_fail_bb_fw
,
2267 { "Controller update boot block firmware corrupted",
2268 "ipmi.picmg36.fail.bb_fw", FT_BOOLEAN
, 8, TFS(&tfs_36_fail_unknown
), 0x02, NULL
, HFILL
}},
2269 { &hf_ipmi_picmg_36_fail_oper_fw
,
2270 { "Controller operational firmware corrupted",
2271 "ipmi.picmg36.fail.oper_fw", FT_BOOLEAN
, 8, TFS(&tfs_36_fail_unknown
), 0x01, NULL
, HFILL
}},
2273 { &hf_ipmi_picmg_37_percent
,
2274 { "Estimated percentage complete",
2275 "ipmi.picmg37.percent", FT_UINT8
, BASE_CUSTOM
, ipmi_fmt_percent
, 0x7f, NULL
, HFILL
}},
2278 static gint
*ett
[] = {
2279 &ett_ipmi_picmg_led_color
,
2280 &ett_ipmi_picmg_link_info
,
2281 &ett_ipmi_picmg_05_byte1
,
2282 &ett_ipmi_picmg_06_byte1
,
2283 &ett_ipmi_picmg_06_byte2
,
2284 &ett_ipmi_picmg_06_byte3
,
2285 &ett_ipmi_picmg_08_byte1
,
2286 &ett_ipmi_picmg_09_ipmba
,
2287 &ett_ipmi_picmg_09_ipmbb
,
2288 &ett_ipmi_picmg_0a_byte2
,
2289 &ett_ipmi_picmg_0a_byte3
,
2290 &ett_ipmi_picmg_0b_byte1
,
2291 &ett_ipmi_picmg_0f_chan
,
2292 &ett_ipmi_picmg_12_byte1
,
2293 &ett_ipmi_picmg_14_prop
,
2294 &ett_ipmi_picmg_1e_byte1
,
2295 &ett_ipmi_picmg_21_byte9
,
2296 &ett_ipmi_picmg_XX_compbits
,
2297 &ett_ipmi_picmg_2e_byte2
,
2298 &ett_ipmi_picmg_prop00_byte1
,
2299 &ett_ipmi_picmg_prop01_byte1
,
2300 &ett_ipmi_picmg_34_byte3
,
2301 &ett_ipmi_picmg_36_byte2
,
2302 &ett_ipmi_picmg_37_byte2
,
2304 static guint8 sig_picmg
[1] = { 0 };
2306 proto_register_field_array(proto_ipmi
, hf
, array_length(hf
));
2307 proto_register_subtree_array(ett
, array_length(ett
));
2308 ipmi_register_netfn_cmdtab(IPMI_GROUP_REQ
, IPMI_OEM_NONE
, sig_picmg
, 1,
2309 "PICMG", cmd_picmg
, array_length(cmd_picmg
));