2 * Sub-dissectors for IPMI messages (netFn=Group, defining body = PICMG)
3 * Copyright 2007-2008, Alexey Neyman, Pigeon Point Systems <avn@pigeonpoint.com>
5 * Wireshark - Network traffic analyzer
6 * By Gerald Combs <gerald@wireshark.org>
7 * Copyright 1998 Gerald Combs
9 * SPDX-License-Identifier: GPL-2.0-or-later
14 #include <epan/packet.h>
16 #include "packet-ipmi.h"
18 void proto_register_ipmi_picmg(void);
20 static gint ett_ipmi_picmg_led_color = -1;
21 static gint ett_ipmi_picmg_05_byte1 = -1;
22 static gint ett_ipmi_picmg_06_byte1 = -1;
23 static gint ett_ipmi_picmg_06_byte2 = -1;
24 static gint ett_ipmi_picmg_06_byte3 = -1;
25 static gint ett_ipmi_picmg_link_info = -1;
26 static gint ett_ipmi_picmg_08_byte1 = -1;
27 static gint ett_ipmi_picmg_09_ipmba = -1;
28 static gint ett_ipmi_picmg_09_ipmbb = -1;
29 static gint ett_ipmi_picmg_0a_byte2 = -1;
30 static gint ett_ipmi_picmg_0a_byte3 = -1;
31 static gint ett_ipmi_picmg_0b_byte1 = -1;
32 static gint ett_ipmi_picmg_0f_chan = -1;
33 static gint ett_ipmi_picmg_12_byte1 = -1;
34 static gint ett_ipmi_picmg_14_prop = -1;
35 static gint ett_ipmi_picmg_1e_byte1 = -1;
36 static gint ett_ipmi_picmg_21_byte9 = -1;
37 static gint ett_ipmi_picmg_XX_compbits = -1;
38 static gint ett_ipmi_picmg_2e_byte2 = -1;
39 static gint ett_ipmi_picmg_prop00_byte1 = -1;
40 static gint ett_ipmi_picmg_prop01_byte1 = -1;
41 static gint ett_ipmi_picmg_34_byte3 = -1;
42 static gint ett_ipmi_picmg_36_byte2 = -1;
43 static gint ett_ipmi_picmg_37_byte2 = -1;
44 static gint ett_ipmi_picmg_link_state = -1;
45 static gint ett_ipmi_picmg_link_dev = -1;
47 static gint ett_ipmi_picmg_clock_setting = -1;
48 static gint ett_ipmi_picmg_clock_res = -1;
50 static gint ett_ipmi_picmg_hpm_caps = -1;
52 static gint ett_ipmi_picmg_47_byte1 = -1;
54 static gint ett_ipmi_picmg_23_rq_byte2 = -1;
55 static gint ett_ipmi_picmg_23_rs_byte5 = -1;
56 static gint ett_ipmi_picmg_25_rs_byte4 = -1;
57 static gint ett_ipmi_picmg_25_rs_byte5 = -1;
58 static gint ett_ipmi_picmg_27_rs_byte3 = -1;
59 static gint ett_ipmi_picmg_28_rq_byte3 = -1;
60 static gint ett_ipmi_picmg_29_rs_byte3 = -1;
62 static gint hf_ipmi_picmg_led_function = -1;
63 static gint hf_ipmi_picmg_led_on_duration = -1;
64 static gint hf_ipmi_picmg_led_color = -1;
66 static gint hf_ipmi_picmg_linkinfo_grpid = -1;
67 static gint hf_ipmi_picmg_linkinfo_type_ext = -1;
68 static gint hf_ipmi_picmg_linkinfo_type = -1;
69 static gint hf_ipmi_picmg_linkinfo_ports = -1;
70 static gint hf_ipmi_picmg_linkinfo_iface = -1;
71 static gint hf_ipmi_picmg_linkinfo_chan = -1;
72 static gint hf_ipmi_picmg_linkinfo_state = -1;
73 static gint hf_ipmi_picmg_linkinfo = -1;
74 static gint hf_ipmi_picmg_linkinfo_amc_chan = -1;
75 static gint hf_ipmi_picmg_linkinfo_amc_ports = -1;
76 static gint hf_ipmi_picmg_linkinfo_amc_type = -1;
77 static gint hf_ipmi_picmg_linkinfo_amc_type_ext = -1;
78 static gint hf_ipmi_picmg_linkinfo_amc_grpid = -1;
79 static gint hf_ipmi_picmg_linkinfo_state_0 = -1;
80 static gint hf_ipmi_picmg_linkinfo_state_1 = -1;
81 static gint hf_ipmi_picmg_linkinfo_dev = -1;
82 static gint hf_ipmi_picmg_linkinfo_dev_type = -1;
83 static gint hf_ipmi_picmg_linkinfo_dev_id = -1;
85 static gint hf_ipmi_picmg_clock_id = -1;
86 static gint hf_ipmi_picmg_clock_cfg = -1;
87 static gint hf_ipmi_picmg_clock_setting = -1;
88 static gint hf_ipmi_picmg_clock_state = -1;
89 static gint hf_ipmi_picmg_clock_dir = -1;
90 static gint hf_ipmi_picmg_clock_pll = -1;
91 static gint hf_ipmi_picmg_clock_family = -1;
92 static gint hf_ipmi_picmg_clock_accuracy = -1;
93 static gint hf_ipmi_picmg_clock_frequency = -1;
94 static gint hf_ipmi_picmg_clock_resource = -1;
95 static gint hf_ipmi_picmg_clock_resource_type = -1;
96 static gint hf_ipmi_picmg_clock_resource_dev = -1;
98 static gint hf_ipmi_picmg_00_version = -1;
99 static gint hf_ipmi_picmg_00_max_fruid = -1;
100 static gint hf_ipmi_picmg_00_ipmc_fruid = -1;
102 static gint hf_ipmi_picmg_01_rq_fruid = -1;
103 static gint hf_ipmi_picmg_01_rq_addr_key_type = -1;
104 static gint hf_ipmi_picmg_01_rq_addr_key = -1;
105 static gint hf_ipmi_picmg_01_rq_site_type = -1;
106 static gint hf_ipmi_picmg_01_rs_hwaddr = -1;
107 static gint hf_ipmi_picmg_01_rs_ipmbaddr = -1;
108 static gint hf_ipmi_picmg_01_rs_rsrv = -1;
109 static gint hf_ipmi_picmg_01_rs_fruid = -1;
110 static gint hf_ipmi_picmg_01_rs_site_num = -1;
111 static gint hf_ipmi_picmg_01_rs_site_type = -1;
113 static gint hf_ipmi_picmg_02_shelf_address = -1;
114 static gint hf_ipmi_picmg_02_shelf_type = -1;
115 static gint hf_ipmi_picmg_02_shelf_length = -1;
117 static gint hf_ipmi_picmg_03_shelf_address = -1;
118 static gint hf_ipmi_picmg_03_shelf_type = -1;
119 static gint hf_ipmi_picmg_03_shelf_length = -1;
121 static gint hf_ipmi_picmg_04_fruid = -1;
122 static gint hf_ipmi_picmg_04_cmd = -1;
124 static gint hf_ipmi_picmg_05_fruid = -1;
125 static gint hf_ipmi_picmg_05_led3 = -1;
126 static gint hf_ipmi_picmg_05_led2 = -1;
127 static gint hf_ipmi_picmg_05_led1 = -1;
128 static gint hf_ipmi_picmg_05_blue_led = -1;
129 static gint hf_ipmi_picmg_05_app_leds = -1;
131 static gint hf_ipmi_picmg_06_fruid = -1;
132 static gint hf_ipmi_picmg_06_ledid = -1;
133 static gint hf_ipmi_picmg_06_cap_white = -1;
134 static gint hf_ipmi_picmg_06_cap_orange = -1;
135 static gint hf_ipmi_picmg_06_cap_amber = -1;
136 static gint hf_ipmi_picmg_06_cap_green = -1;
137 static gint hf_ipmi_picmg_06_cap_red = -1;
138 static gint hf_ipmi_picmg_06_cap_blue = -1;
139 static gint hf_ipmi_picmg_06_default_local_color = -1;
140 static gint hf_ipmi_picmg_06_default_override_color = -1;
142 static gint hf_ipmi_picmg_07_fruid = -1;
143 static gint hf_ipmi_picmg_07_ledid = -1;
145 static gint hf_ipmi_picmg_08_fruid = -1;
146 static gint hf_ipmi_picmg_08_ledid = -1;
147 static gint hf_ipmi_picmg_08_state_lamptest = -1;
148 static gint hf_ipmi_picmg_08_state_override = -1;
149 static gint hf_ipmi_picmg_08_state_local = -1;
150 static gint hf_ipmi_picmg_08_lamptest_duration = -1;
152 static gint hf_ipmi_picmg_09_ipmba = -1;
153 static gint hf_ipmi_picmg_09_ipmba_link = -1;
154 static gint hf_ipmi_picmg_09_ipmba_state = -1;
155 static gint hf_ipmi_picmg_09_ipmbb = -1;
156 static gint hf_ipmi_picmg_09_ipmbb_link = -1;
157 static gint hf_ipmi_picmg_09_ipmbb_state = -1;
159 static gint hf_ipmi_picmg_0a_fruid = -1;
160 static gint hf_ipmi_picmg_0a_msk_d_locked = -1;
161 static gint hf_ipmi_picmg_0a_msk_locked = -1;
162 static gint hf_ipmi_picmg_0a_d_locked = -1;
163 static gint hf_ipmi_picmg_0a_locked = -1;
165 static gint hf_ipmi_picmg_0b_fruid = -1;
166 static gint hf_ipmi_picmg_0b_d_locked = -1;
167 static gint hf_ipmi_picmg_0b_locked = -1;
169 static gint hf_ipmi_picmg_0c_fruid = -1;
170 static gint hf_ipmi_picmg_0c_cmd = -1;
172 static gint hf_ipmi_picmg_0d_fruid = -1;
173 static gint hf_ipmi_picmg_0d_start = -1;
174 static gint hf_ipmi_picmg_0d_recordid = -1;
176 static gint hf_ipmi_picmg_0f_iface = -1;
177 static gint hf_ipmi_picmg_0f_chan = -1;
179 static gint hf_ipmi_picmg_10_fruid = -1;
180 static gint hf_ipmi_picmg_10_nslots = -1;
181 static gint hf_ipmi_picmg_10_ipmc_loc = -1;
183 static gint hf_ipmi_picmg_11_fruid = -1;
184 static gint hf_ipmi_picmg_11_power_level = -1;
185 static gint hf_ipmi_picmg_11_set_to_desired = -1;
187 static gint hf_ipmi_picmg_12_fruid = -1;
188 static gint hf_ipmi_picmg_12_pwr_type = -1;
189 static gint hf_ipmi_picmg_12_dynamic = -1;
190 static gint hf_ipmi_picmg_12_pwr_lvl = -1;
191 static gint hf_ipmi_picmg_12_delay = -1;
192 static gint hf_ipmi_picmg_12_pwr_mult = -1;
193 static gint hf_ipmi_picmg_12_pwr_draw = -1;
195 static gint hf_ipmi_picmg_13_fruid = -1;
197 static gint hf_ipmi_picmg_14_fruid = -1;
198 static gint hf_ipmi_picmg_14_speed_min = -1;
199 static gint hf_ipmi_picmg_14_speed_max = -1;
200 static gint hf_ipmi_picmg_14_speed_norm = -1;
201 static gint hf_ipmi_picmg_14_local_control = -1;
203 static gint hf_ipmi_picmg_15_fruid = -1;
204 static gint hf_ipmi_picmg_15_fan_level = -1;
205 static gint hf_ipmi_picmg_15_local_enable = -1;
207 static gint hf_ipmi_picmg_16_fruid = -1;
208 static gint hf_ipmi_picmg_16_override_level = -1;
209 static gint hf_ipmi_picmg_16_local_level = -1;
210 static gint hf_ipmi_picmg_16_local_enable = -1;
212 static gint hf_ipmi_picmg_17_cmd = -1;
213 static gint hf_ipmi_picmg_17_resid = -1;
214 static gint hf_ipmi_picmg_17_status = -1;
216 static gint hf_ipmi_picmg_18_li_key_type = -1;
217 static gint hf_ipmi_picmg_18_li_key = -1;
218 static gint hf_ipmi_picmg_18_link_num = -1;
219 static gint hf_ipmi_picmg_18_sensor_num = -1;
221 static gint hf_ipmi_picmg_1a_flags = -1;
223 static gint hf_ipmi_picmg_1b_addr_active = -1;
224 static gint hf_ipmi_picmg_1b_addr_backup = -1;
226 static gint hf_ipmi_picmg_1c_fan_site_number = -1;
227 static gint hf_ipmi_picmg_1c_fan_enable_state = -1;
228 static gint hf_ipmi_picmg_1c_fan_policy_timeout = -1;
229 static gint hf_ipmi_picmg_1c_site_number = -1;
230 static gint hf_ipmi_picmg_1c_site_type = -1;
232 static gint hf_ipmi_picmg_1d_fan_site_number = -1;
233 static gint hf_ipmi_picmg_1d_site_number = -1;
234 static gint hf_ipmi_picmg_1d_site_type = -1;
235 static gint hf_ipmi_picmg_1d_policy = -1;
236 static gint hf_ipmi_picmg_1d_coverage = -1;
238 static gint hf_ipmi_picmg_1e_fruid = -1;
239 static gint hf_ipmi_picmg_1e_cap_diagintr = -1;
240 static gint hf_ipmi_picmg_1e_cap_graceful_reboot = -1;
241 static gint hf_ipmi_picmg_1e_cap_warm_reset = -1;
243 static gint hf_ipmi_picmg_1f_rq_fruid = -1;
244 static gint hf_ipmi_picmg_1f_rq_op = -1;
245 static gint hf_ipmi_picmg_1f_rq_lockid = -1;
246 static gint hf_ipmi_picmg_1f_rs_lockid = -1;
247 static gint hf_ipmi_picmg_1f_rs_tstamp = -1;
249 static gint hf_ipmi_picmg_20_fruid = -1;
250 static gint hf_ipmi_picmg_20_lockid = -1;
251 static gint hf_ipmi_picmg_20_offset = -1;
252 static gint hf_ipmi_picmg_20_data = -1;
253 static gint hf_ipmi_picmg_20_count = -1;
255 static gint hf_ipmi_picmg_21_addr_num = -1;
256 static gint hf_ipmi_picmg_21_tstamp = -1;
257 static gint hf_ipmi_picmg_21_addr_count = -1;
258 static gint hf_ipmi_picmg_21_site_type = -1;
259 static gint hf_ipmi_picmg_21_site_num = -1;
260 static gint hf_ipmi_picmg_21_max_unavail = -1;
261 static gint hf_ipmi_picmg_21_is_shm = -1;
262 static gint hf_ipmi_picmg_21_addr_type = -1;
263 static gint hf_ipmi_picmg_21_ipaddr = -1;
264 static gint hf_ipmi_picmg_21_rmcpport = -1;
266 static gint hf_ipmi_picmg_22_feed_idx = -1;
267 static gint hf_ipmi_picmg_22_update_cnt = -1;
268 static gint hf_ipmi_picmg_22_pwr_alloc = -1;
270 static gint hf_ipmi_picmg_XX_comp7 = -1;
271 static gint hf_ipmi_picmg_XX_comp6 = -1;
272 static gint hf_ipmi_picmg_XX_comp5 = -1;
273 static gint hf_ipmi_picmg_XX_comp4 = -1;
274 static gint hf_ipmi_picmg_XX_comp3 = -1;
275 static gint hf_ipmi_picmg_XX_comp2 = -1;
276 static gint hf_ipmi_picmg_XX_comp1 = -1;
277 static gint hf_ipmi_picmg_XX_comp0 = -1;
279 static gint hf_ipmi_picmg_2e_version = -1;
280 static gint hf_ipmi_picmg_2e_upgrade_undesirable = -1;
281 static gint hf_ipmi_picmg_2e_auto_rollback_override = -1;
282 static gint hf_ipmi_picmg_2e_ipmc_degraded = -1;
283 static gint hf_ipmi_picmg_2e_deferred_activate = -1;
284 static gint hf_ipmi_picmg_2e_services_affected = -1;
285 static gint hf_ipmi_picmg_2e_manual_rollback = -1;
286 static gint hf_ipmi_picmg_2e_auto_rollback = -1;
287 static gint hf_ipmi_picmg_2e_self_test = -1;
288 static gint hf_ipmi_picmg_2e_upgrade_tout = -1;
289 static gint hf_ipmi_picmg_2e_selftest_tout = -1;
290 static gint hf_ipmi_picmg_2e_rollback_tout = -1;
291 static gint hf_ipmi_picmg_2e_inaccessibility_tout = -1;
293 static gint hf_ipmi_picmg_prop00_cold_reset = -1;
294 static gint hf_ipmi_picmg_prop00_deferred_activation = -1;
295 static gint hf_ipmi_picmg_prop00_comparison = -1;
296 static gint hf_ipmi_picmg_prop00_preparation = -1;
297 static gint hf_ipmi_picmg_prop00_rollback = -1;
298 static gint hf_ipmi_picmg_prop01_fw_major = -1;
299 static gint hf_ipmi_picmg_prop01_fw_minor = -1;
300 static gint hf_ipmi_picmg_prop01_fw_aux = -1;
301 static gint hf_ipmi_picmg_prop02_desc = -1;
303 static gint hf_ipmi_picmg_2f_comp_id = -1;
304 static gint hf_ipmi_picmg_2f_comp_prop = -1;
305 static gint hf_ipmi_picmg_2f_prop_data = -1;
307 static gint hf_ipmi_picmg_31_action = -1;
309 static gint hf_ipmi_picmg_32_block = -1;
310 static gint hf_ipmi_picmg_32_data = -1;
311 static gint hf_ipmi_picmg_32_sec_offs = -1;
312 static gint hf_ipmi_picmg_32_sec_len = -1;
314 static gint hf_ipmi_picmg_33_comp_id = -1;
315 static gint hf_ipmi_picmg_33_img_len = -1;
317 static gint hf_ipmi_picmg_34_cmd = -1;
318 static gint hf_ipmi_picmg_34_ccode = -1;
319 static gint hf_ipmi_picmg_34_percentage = -1;
321 static gint hf_ipmi_picmg_35_rollback_override = -1;
323 static gint hf_ipmi_picmg_36_result = -1;
324 static gint hf_ipmi_picmg_36_fail = -1;
325 static gint hf_ipmi_picmg_36_fail_sel = -1;
326 static gint hf_ipmi_picmg_36_fail_sdr = -1;
327 static gint hf_ipmi_picmg_36_fail_bmc_fru = -1;
328 static gint hf_ipmi_picmg_36_fail_ipmb_sig = -1;
329 static gint hf_ipmi_picmg_36_fail_sdr_empty = -1;
330 static gint hf_ipmi_picmg_36_fail_iua = -1;
331 static gint hf_ipmi_picmg_36_fail_bb_fw = -1;
332 static gint hf_ipmi_picmg_36_fail_oper_fw = -1;
334 static gint hf_ipmi_picmg_37_percent = -1;
336 static gint hf_ipmi_picmg_hpm_id = -1;
337 static gint hf_ipmi_picmg_hpm_rev = -1;
338 static gint hf_ipmi_picmg_hpm2_mask = -1;
339 static gint hf_ipmi_picmg_hpm2_caps = -1;
340 static gint hf_ipmi_picmg_hpm2_dyn_ssn = -1;
341 static gint hf_ipmi_picmg_hpm2_ver_chg = -1;
342 static gint hf_ipmi_picmg_hpm2_ext_mgt = -1;
343 static gint hf_ipmi_picmg_hpm2_pkt_trc = -1;
344 static gint hf_ipmi_picmg_hpm2_sol_ext = -1;
345 static gint hf_ipmi_picmg_hpm_oem_start = -1;
346 static gint hf_ipmi_picmg_hpm_oem_rev = -1;
347 static gint hf_ipmi_picmg_hpm2_sol_oem_start = -1;
348 static gint hf_ipmi_picmg_hpm2_sol_oem_rev = -1;
349 static gint hf_ipmi_picmg_hpm_cred_hnd = -1;
350 static gint hf_ipmi_picmg_hpm_func_sel = -1;
351 static gint hf_ipmi_picmg_hpm_ipmi_rev = -1;
352 static gint hf_ipmi_picmg_hpm_cipher_id = -1;
353 static gint hf_ipmi_picmg_hpm_auth_type = -1;
354 static gint hf_ipmi_picmg_hpm_priv_level = -1;
355 static gint hf_ipmi_picmg_hpm_chn_num = -1;
356 static gint hf_ipmi_picmg_hpm_avail_time = -1;
357 static gint hf_ipmi_picmg_hpm_user_name = -1;
358 static gint hf_ipmi_picmg_hpm_user_pwd = -1;
359 static gint hf_ipmi_picmg_hpm_bmc_key = -1;
360 static gint hf_ipmi_picmg_hpm_operation = -1;
361 static gint hf_ipmi_picmg_hpm_ssn_hnd = -1;
363 static gint hf_ipmi_picmg_hpm_power_draw = -1;
364 static gint hf_ipmi_picmg_hpm_base_channels = -1;
365 static gint hf_ipmi_picmg_hpm_fabric_channels = -1;
366 static gint hf_ipmi_picmg_hpm_update_channels = -1;
367 static gint hf_ipmi_picmg_hpm_cross_channels = -1;
368 static gint hf_ipmi_picmg_hpm_num_chn_desc = -1;
369 static gint hf_ipmi_picmg_hpm_chn_mask = -1;
371 static gint hf_ipmi_picmg_hpm_ext_mgmt_state = -1;
372 static gint hf_ipmi_picmg_hpm_polling_period = -1;
373 static gint hf_ipmi_picmg_hpm_auth_pwr_state = -1;
374 static gint hf_ipmi_picmg_hpm_amc_pwr_state = -1;
376 static gint hf_ipmi_picmg47_port = -1;
377 static gint hf_ipmi_picmg47_flags = -1;
378 static gint hf_ipmi_picmg47_assignment = -1;
379 static gint hf_ipmi_picmg47_state = -1;
380 static gint hf_ipmi_picmg47_instance = -1;
382 static gint hf_ipmi_picmg48_sub_fru_type = -1;
383 static gint hf_ipmi_picmg48_sub_fru_id = -1;
384 static gint hf_ipmi_picmg48_ip_source = -1;
386 static gint hf_ipmi_picmg_23_rq_byte2 = -1;
387 static gint hf_ipmi_picmg_23_slot_sel = -1;
388 static gint hf_ipmi_picmg_23_carrier_num = -1;
389 static gint hf_ipmi_picmg_23_slot_num = -1;
390 static gint hf_ipmi_picmg_23_tier_num = -1;
391 static gint hf_ipmi_picmg_23_rs_byte5 = -1;
392 static gint hf_ipmi_picmg_23_slot_base = -1;
393 static gint hf_ipmi_picmg_23_tier_base = -1;
394 static gint hf_ipmi_picmg_23_orientation = -1;
395 static gint hf_ipmi_picmg_23_origin_x = -1;
396 static gint hf_ipmi_picmg_23_origin_y = -1;
398 static gint hf_ipmi_picmg_24_channel = -1;
399 static gint hf_ipmi_picmg_24_control = -1;
400 static gint hf_ipmi_picmg_24_current = -1;
401 static gint hf_ipmi_picmg_24_primary_pm = -1;
402 static gint hf_ipmi_picmg_24_backup_pm = -1;
404 static gint hf_ipmi_picmg_25_start = -1;
405 static gint hf_ipmi_picmg_25_count = -1;
406 static gint hf_ipmi_picmg_25_max = -1;
407 static gint hf_ipmi_picmg_25_gstatus = -1;
408 static gint hf_ipmi_picmg_25_fault = -1;
409 static gint hf_ipmi_picmg_25_pwr_good = -1;
410 static gint hf_ipmi_picmg_25_mp_good = -1;
411 static gint hf_ipmi_picmg_25_role = -1;
412 static gint hf_ipmi_picmg_25_cstatus = -1;
413 static gint hf_ipmi_picmg_25_pwr_on = -1;
414 static gint hf_ipmi_picmg_25_pwr_ovr = -1;
415 static gint hf_ipmi_picmg_25_pwr = -1;
416 static gint hf_ipmi_picmg_25_enable = -1;
417 static gint hf_ipmi_picmg_25_mp_ovr = -1;
418 static gint hf_ipmi_picmg_25_mp = -1;
419 static gint hf_ipmi_picmg_25_ps1 = -1;
421 static gint hf_ipmi_picmg_26_pm_site = -1;
422 static gint hf_ipmi_picmg_27_rs_byte3 = -1;
423 static gint hf_ipmi_picmg_27_pm_healthy = -1;
424 static gint hf_ipmi_picmg_28_timeout = -1;
425 static gint hf_ipmi_picmg_28_rq_byte3 = -1;
426 static gint hf_ipmi_picmg_28_mch2 = -1;
427 static gint hf_ipmi_picmg_28_mch1 = -1;
429 static gint hf_ipmi_picmg_29_rs_byte3 = -1;
430 static gint hf_ipmi_picmg_29_maj_rst = -1;
431 static gint hf_ipmi_picmg_29_min_rst = -1;
432 static gint hf_ipmi_picmg_29_alarm_cut = -1;
433 static gint hf_ipmi_picmg_29_test_mode = -1;
434 static gint hf_ipmi_picmg_29_pwr_alarm = -1;
435 static gint hf_ipmi_picmg_29_minor_alarm = -1;
436 static gint hf_ipmi_picmg_29_major_alarm = -1;
437 static gint hf_ipmi_picmg_29_crit_alarm = -1;
439 static gint hf_ipmi_picmg_2a_alarm_id = -1;
440 static gint hf_ipmi_picmg_2a_alarm_ctrl = -1;
442 static gint hf_ipmi_picmg_2b_alarm_state = -1;
444 static const value_string site_type_vals[] = {
445 { 0x00, "PICMG board" },
446 { 0x01, "Power Entry" },
447 { 0x02, "Shelf FRU Information" },
448 { 0x03, "Dedicated ShMC" },
449 { 0x04, "Fan Tray / Cooling Unit" },
450 { 0x05, "Fan Filter Tray" },
452 { 0x07, "AdvancedMC module" },
454 { 0x09, "Rear Transition Module" },
455 { 0x0A, "MicroTCA Carrier Hub" },
456 { 0x0B, "Power Module" },
476 static const value_string addr_key_type_vals[] = {
477 { 0x00, "Hardware Address" },
478 { 0x01, "IPMB-0 Address" },
479 { 0x03, "Physical Address" },
483 static const struct true_false_string set_clear_tfs = {
487 static const value_string led_color_vals[] = {
488 { 0x00, "Reserved (Control not supported)" },
495 { 0x0E, "Do not change" },
496 { 0x0F, "Use default" },
500 static const value_string linkinfo_type_vals[] = {
501 { 0x01, "PICMG3.0 Base Interface 10/100/1000 BASE-T" },
502 { 0x02, "PICMG3.1 Ethernet Fabric Interface" },
503 { 0x03, "PICMG3.2 Infiniband Fabric Interface" },
504 { 0x04, "PICMG3.3 StarFabric Fabric Interface" },
505 { 0x05, "PICMG3.4 PCI Express Fabric Interface" },
506 { 0xf0, "OEM" }, { 0xf1, "OEM" }, { 0xf2, "OEM" }, { 0xf3, "OEM" },
507 { 0xf4, "OEM" }, { 0xf5, "OEM" }, { 0xf6, "OEM" }, { 0xf7, "OEM" },
508 { 0xf8, "OEM" }, { 0xf9, "OEM" }, { 0xfa, "OEM" }, { 0xfb, "OEM" },
509 { 0xfc, "OEM" }, { 0xfd, "OEM" }, { 0xfe, "OEM" },
514 static const value_string linkinfo_amc_type_vals[] = {
515 { 0x02, "AMC.1 PCI Express" },
516 { 0x03, "AMC.1 PCI Express Advanced Switching" },
517 { 0x04, "AMC.1 PCI Express Advanced Switching" },
518 { 0x05, "AMC.2 Ethernet" },
519 { 0x06, "AMC.3 Serial RapidIO" },
520 { 0x07, "AMC.3 Storage" },
521 { 0xf0, "OEM" }, { 0xf1, "OEM" }, { 0xf2, "OEM" }, { 0xf3, "OEM" },
522 { 0xf4, "OEM" }, { 0xf5, "OEM" }, { 0xf6, "OEM" }, { 0xf7, "OEM" },
523 { 0xf8, "OEM" }, { 0xf9, "OEM" }, { 0xfa, "OEM" }, { 0xfb, "OEM" },
524 { 0xfc, "OEM" }, { 0xfd, "OEM" }, { 0xfe, "OEM" },
529 static const value_string linkinfo_ports_vals[] = {
550 static const value_string linkinfo_iface_vals[] = {
551 { 0x00, "Base Interface" },
552 { 0x01, "Fabric Interface" },
553 { 0x02, "Update Channel Interface" },
558 static const value_string busresid_vals[] = {
559 { 0x00, "Metallic Test Bus #1" },
560 { 0x01, "Metallic Test Bus #2" },
561 { 0x02, "Synch clock group #1" },
562 { 0x03, "Synch clock group #2" },
563 { 0x04, "Synch clock group #3" },
567 static const value_string fan_level_vals[] = {
568 { 0xFE, "Shut down" },
569 { 0xFF, "Local control" },
573 static const value_string enable_vals[] = {
579 static const value_string enabled_vals[] = {
580 { 0x00, "Disabled" },
585 static const value_string vals_04_cmd[] = {
586 { 0x00, "Cold Reset" },
587 { 0x01, "Warm Reset" },
588 { 0x02, "Graceful Reboot" },
589 { 0x03, "Issue Diagnostic Interrupt" },
594 static const value_string vals_0c_cmd[] = {
595 { 0x00, "Deactivate FRU" },
596 { 0x01, "Activate FRU" },
600 static const value_string vals_11_set[] = {
601 { 0x00, "Do not change present levels" },
602 { 0x01, "Copy desired levels to present levels" },
606 static const value_string vals_12_pwr_type[] = {
607 { 0x00, "Steady state power draw levels" },
608 { 0x01, "Desired steady state draw levels" },
609 { 0x02, "Early power draw levels" },
610 { 0x03, "Desired early levels" },
614 static const value_string vals_18_keytype[] = {
615 { 0x00, "Link Info Key contains Link Number" },
616 { 0x01, "Link Info Key contains Sensor Number" },
620 static const value_string vals_1d_policy[] = {
621 { 0x00, "Disabled" },
623 { 0xFF, "Indeterminate" },
627 static const value_string vals_1d_coverage[] = {
628 { 0x00, "Not Covered" },
633 static const value_string vals_1f_op[] = {
634 { 0x00, "Get Last Commit Timestamp" },
636 { 0x02, "Unlock and Discard" },
637 { 0x03, "Unlock and Commit" },
642 static const value_string vals_21_addr_type[] = {
644 { 0x60, "OEM" }, { 0x61, "OEM" }, { 0x62, "OEM" }, { 0x63, "OEM" },
645 { 0x64, "OEM" }, { 0x65, "OEM" }, { 0x66, "OEM" }, { 0x67, "OEM" },
646 { 0x68, "OEM" }, { 0x69, "OEM" }, { 0x6a, "OEM" }, { 0x6b, "OEM" },
647 { 0x6c, "OEM" }, { 0x6d, "OEM" }, { 0x6e, "OEM" }, { 0x6f, "OEM" },
648 { 0x70, "OEM" }, { 0x71, "OEM" }, { 0x72, "OEM" }, { 0x73, "OEM" },
649 { 0x74, "OEM" }, { 0x75, "OEM" }, { 0x76, "OEM" }, { 0x77, "OEM" },
650 { 0x78, "OEM" }, { 0x79, "OEM" }, { 0x7a, "OEM" }, { 0x7b, "OEM" },
651 { 0x7c, "OEM" }, { 0x7d, "OEM" }, { 0x7e, "OEM" }, { 0x7f, "OEM" },
656 static const value_string vals_prop00_rollback[] = {
657 { 0x00, "Not supported" },
658 { 0x01, "Rollback supported, Backup required" },
659 { 0x02, "Rollback supported, Backup not required" },
663 static const value_string vals_31_action[] = {
664 { 0x00, "Backup components" },
665 { 0x01, "Prepare components" },
666 { 0x02, "Upload for upgrade" },
667 { 0x03, "Upload for compare" },
671 static const value_string vals_35_override[] = {
672 { 0x00, "Automatic Rollback allowed" },
673 { 0x01, "Automatic Rollback override" },
677 static const value_string vals_36_result[] = {
678 { 0x55, "No error. All Self Tests Passed" },
679 { 0x56, "Reserved, cannot be used" },
680 { 0x57, "Corrupted or inaccessible data or devices" },
681 { 0x58, "Fatal hardware error" },
682 { 0x60, "Component failure" },
683 { 0xff, "Reserved" },
687 static const struct true_false_string tfs_36_fail_unknown = {
692 /* Get PICMG Properties.
695 rs00(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
697 proto_tree_add_item(tree, hf_ipmi_picmg_00_version, tvb, 0, 1, ENC_LITTLE_ENDIAN);
698 proto_tree_add_item(tree, hf_ipmi_picmg_00_max_fruid, tvb, 1, 1, ENC_LITTLE_ENDIAN);
699 proto_tree_add_item(tree, hf_ipmi_picmg_00_ipmc_fruid, tvb, 2, 1, ENC_LITTLE_ENDIAN);
702 /* Get Address Info Command.
705 rq01(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
707 if (tvb_captured_length(tvb) > 0) {
708 proto_tree_add_item(tree, hf_ipmi_picmg_01_rq_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
710 if (tvb_captured_length(tvb) > 1) {
711 proto_tree_add_item(tree, hf_ipmi_picmg_01_rq_addr_key_type, tvb, 1, 1, ENC_LITTLE_ENDIAN);
713 if (tvb_captured_length(tvb) > 2) {
714 proto_tree_add_item(tree, hf_ipmi_picmg_01_rq_addr_key, tvb, 2, 1, ENC_LITTLE_ENDIAN);
716 if (tvb_captured_length(tvb) > 3) {
717 proto_tree_add_item(tree, hf_ipmi_picmg_01_rq_site_type, tvb, 3, 1, ENC_LITTLE_ENDIAN);
722 rs01(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
724 proto_tree_add_item(tree, hf_ipmi_picmg_01_rs_hwaddr, tvb, 0, 1, ENC_LITTLE_ENDIAN);
725 proto_tree_add_item(tree, hf_ipmi_picmg_01_rs_ipmbaddr, tvb, 1, 1, ENC_LITTLE_ENDIAN);
726 proto_tree_add_item(tree, hf_ipmi_picmg_01_rs_rsrv, tvb, 2, 1, ENC_LITTLE_ENDIAN);
727 proto_tree_add_item(tree, hf_ipmi_picmg_01_rs_fruid, tvb, 3, 1, ENC_LITTLE_ENDIAN);
728 proto_tree_add_item(tree, hf_ipmi_picmg_01_rs_site_num, tvb, 4, 1, ENC_LITTLE_ENDIAN);
729 proto_tree_add_item(tree, hf_ipmi_picmg_01_rs_site_type, tvb, 5, 1, ENC_LITTLE_ENDIAN);
730 /* TBD Next byte is carrier number in MTCA */
733 /* Get Shelf Address Info
736 rs02(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
738 ipmi_add_typelen(tree, hf_ipmi_picmg_02_shelf_address, hf_ipmi_picmg_02_shelf_type, hf_ipmi_picmg_02_shelf_length, tvb, 0, TRUE);
741 /* Set Shelf Address Info
744 rq03(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
746 ipmi_add_typelen(tree, hf_ipmi_picmg_03_shelf_address, hf_ipmi_picmg_03_shelf_type, hf_ipmi_picmg_03_shelf_length, tvb, 0, TRUE);
752 rq04(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
754 proto_tree_add_item(tree, hf_ipmi_picmg_04_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
755 proto_tree_add_item(tree, hf_ipmi_picmg_04_cmd, tvb, 1, 1, ENC_LITTLE_ENDIAN);
758 /* Get FRU LED Properties
761 rq05(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
763 proto_tree_add_item(tree, hf_ipmi_picmg_05_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
767 rs05(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
769 static const int *byte1[] = { &hf_ipmi_picmg_05_led3, &hf_ipmi_picmg_05_led2,
770 &hf_ipmi_picmg_05_led1, &hf_ipmi_picmg_05_blue_led, NULL };
772 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "General Status LEDs: ", "None",
773 ett_ipmi_picmg_05_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
774 proto_tree_add_item(tree, hf_ipmi_picmg_05_app_leds, tvb, 1, 1, ENC_LITTLE_ENDIAN);
777 /* Get LED Color Capabilities
780 rq06(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
782 proto_tree_add_item(tree, hf_ipmi_picmg_06_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
783 proto_tree_add_item(tree, hf_ipmi_picmg_06_ledid, tvb, 1, 1, ENC_LITTLE_ENDIAN);
787 rs06(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
789 static const int *byte1[] = { &hf_ipmi_picmg_06_cap_white, &hf_ipmi_picmg_06_cap_orange,
790 &hf_ipmi_picmg_06_cap_amber, &hf_ipmi_picmg_06_cap_green, &hf_ipmi_picmg_06_cap_red,
791 &hf_ipmi_picmg_06_cap_blue, NULL };
792 static const int *byte2[] = { &hf_ipmi_picmg_06_default_local_color, NULL };
793 static const int *byte3[] = { &hf_ipmi_picmg_06_default_override_color, NULL };
795 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Color capabilities: ", "None",
796 ett_ipmi_picmg_06_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
797 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
798 ett_ipmi_picmg_06_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
799 proto_tree_add_bitmask_text(tree, tvb, 2, 1, NULL, NULL,
800 ett_ipmi_picmg_06_byte3, byte3, ENC_LITTLE_ENDIAN, 0);
804 parse_led_state(proto_tree *tree, tvbuff_t *tvb, guint offs, const char *desc)
806 static const int *color[] = { &hf_ipmi_picmg_led_color, NULL };
807 static const value_string funcs[] = {
808 { 0x00, "LED Off override" },
809 { 0xfb, "Lamp Test state" },
810 { 0xfc, "Restore Local Control" },
811 { 0xfd, "Reserved" },
812 { 0xfe, "Reserved" },
813 { 0xff, "LED On override" },
819 v = tvb_get_guint8(tvb, offs);
820 proto_tree_add_uint_format(tree, hf_ipmi_picmg_led_function, tvb, offs, 1,
821 v, "%sFunction: %s (0x%02x)", desc,
822 val_to_str(v, funcs, "LED Blinking override, off-duration %d0ms"),
824 v = tvb_get_guint8(tvb, offs + 1);
825 proto_tree_add_uint_format(tree, hf_ipmi_picmg_led_on_duration, tvb, offs + 1, 1,
826 v, "%sOn-duration: %d0ms", desc, v);
827 v = tvb_get_guint8(tvb, offs + 2) & 0x0f;
828 ti = proto_tree_add_bitmask_text(tree, tvb, offs + 2, 1,
829 NULL, NULL, ett_ipmi_picmg_led_color, color, ENC_LITTLE_ENDIAN, 0);
830 proto_item_set_text(ti, "%sColor: %s", desc, val_to_str_const(v, led_color_vals, "Reserved"));
836 rq07(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
838 proto_tree_add_item(tree, hf_ipmi_picmg_07_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
839 proto_tree_add_item(tree, hf_ipmi_picmg_07_ledid, tvb, 1, 1, ENC_LITTLE_ENDIAN);
840 parse_led_state(tree, tvb, 2, "");
846 rq08(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
848 proto_tree_add_item(tree, hf_ipmi_picmg_08_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
849 proto_tree_add_item(tree, hf_ipmi_picmg_08_ledid, tvb, 1, 1, ENC_LITTLE_ENDIAN);
853 rs08(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
855 static const int *byte1[] = { &hf_ipmi_picmg_08_state_lamptest, &hf_ipmi_picmg_08_state_override,
856 &hf_ipmi_picmg_08_state_local, NULL };
858 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "LED States: ", "None",
859 ett_ipmi_picmg_08_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
860 parse_led_state(tree, tvb, 1, "Local Control ");
861 if (tvb_captured_length(tvb) > 4) {
862 parse_led_state(tree, tvb, 4, "Override ");
864 if (tvb_captured_length(tvb) > 7) {
865 proto_tree_add_item(tree, hf_ipmi_picmg_08_lamptest_duration, tvb, 7, 1, ENC_LITTLE_ENDIAN);
871 static const true_false_string tfs_local_control_override = { "Local Control State", "Override State (Isolate)" };
874 parse_ipmb_state(proto_tree *tree, tvbuff_t *tvb, guint offs, int hf, int hf_link, int hf_state, int ett)
882 v = tvb_get_guint8(tvb, offs);
884 proto_tree_add_uint_format_value(tree, hf, tvb, 0, 1,
885 v, "Don't change (0xff)");
890 } else if (num < 0x60) {
891 g_snprintf(buf, sizeof(buf), "Link #%d", num);
896 ti = proto_tree_add_uint_format_value(tree, hf, tvb, 0, 1,
897 v, "%s, %s", desc, (v & 1) ? "Local Control" : "Override");
898 s_tree = proto_item_add_subtree(ti, ett);
899 proto_tree_add_uint_format_value(s_tree, hf_link, tvb, 0, 1, v, "%s (0x%02x)",
901 proto_tree_add_item(s_tree, hf_state, tvb, 0, 1, ENC_NA);
906 rq09(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
908 parse_ipmb_state(tree, tvb, 0, hf_ipmi_picmg_09_ipmba, hf_ipmi_picmg_09_ipmba_link, hf_ipmi_picmg_09_ipmba_state, ett_ipmi_picmg_09_ipmba);
909 parse_ipmb_state(tree, tvb, 1, hf_ipmi_picmg_09_ipmbb, hf_ipmi_picmg_09_ipmbb_link, hf_ipmi_picmg_09_ipmbb_state, ett_ipmi_picmg_09_ipmbb);
912 /* Set FRU Activation Policy
915 rq0a(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
917 static const int *byte2[] = { &hf_ipmi_picmg_0a_msk_d_locked, &hf_ipmi_picmg_0a_msk_locked, NULL };
918 static const int *byte3[] = { &hf_ipmi_picmg_0a_d_locked, &hf_ipmi_picmg_0a_locked, NULL };
920 proto_tree_add_item(tree, hf_ipmi_picmg_0a_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
921 proto_tree_add_bitmask_text(tree, tvb, 1, 1, "Will affect bits: ", "None",
922 ett_ipmi_picmg_0a_byte2, byte2, ENC_LITTLE_ENDIAN, BMT_NO_TFS);
923 proto_tree_add_bitmask_text(tree, tvb, 2, 1, "Activation Policy Set Bits: ", NULL,
924 ett_ipmi_picmg_0a_byte3, byte3, ENC_LITTLE_ENDIAN, 0);
927 /* Get FRU Activation Policy
930 rq0b(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
932 proto_tree_add_item(tree, hf_ipmi_picmg_0b_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
936 rs0b(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
938 static const int *byte1[] = { &hf_ipmi_picmg_0b_d_locked, &hf_ipmi_picmg_0b_locked, NULL };
940 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Activation Policy Bits: ", NULL,
941 ett_ipmi_picmg_0b_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
945 /* Set FRU Activation
948 rq0c(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
950 proto_tree_add_item(tree, hf_ipmi_picmg_0c_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
951 proto_tree_add_item(tree, hf_ipmi_picmg_0c_cmd, tvb, 1, 1, ENC_LITTLE_ENDIAN);
954 /* Get Device Locator Record ID
957 rq0d(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
959 proto_tree_add_item(tree, hf_ipmi_picmg_0d_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
960 if (tvb_captured_length(tvb) > 1) {
961 proto_tree_add_item(tree, hf_ipmi_picmg_0d_start, tvb, 1, 2, ENC_LITTLE_ENDIAN);
966 rs0d(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
968 proto_tree_add_item(tree, hf_ipmi_picmg_0d_recordid, tvb, 0, 2, ENC_LITTLE_ENDIAN);
972 parse_link_info_state(proto_tree *tree, tvbuff_t *tvb, guint offs, const char *num, const value_string *vs)
974 static const int *link_info[] = { &hf_ipmi_picmg_linkinfo_grpid, &hf_ipmi_picmg_linkinfo_type_ext,
975 &hf_ipmi_picmg_linkinfo_type, &hf_ipmi_picmg_linkinfo_ports, &hf_ipmi_picmg_linkinfo_iface,
976 &hf_ipmi_picmg_linkinfo_chan, NULL };
977 guint8 v = tvb_get_guint8(tvb, offs + 4);
980 g_snprintf(buf, sizeof(buf), "Link info%s: ", num);
981 proto_tree_add_bitmask_text(tree, tvb, offs, 4, buf, NULL,
982 ett_ipmi_picmg_link_info, link_info, ENC_LITTLE_ENDIAN, 0);
983 proto_tree_add_uint_format(tree, hf_ipmi_picmg_linkinfo_state, tvb, offs + 4, 1,
984 v, "State%s: %s (0x%02x)", num, val_to_str_const(v, vs, "Reserved"), v);
990 rq0e(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
992 static const value_string state_vals[] = {
998 parse_link_info_state(tree, tvb, 0, "", state_vals);
1004 rq0f(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1006 static const int *chan[] = { &hf_ipmi_picmg_0f_iface, &hf_ipmi_picmg_0f_chan, NULL };
1008 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_picmg_0f_chan, chan, ENC_LITTLE_ENDIAN, 0);
1009 if (tvb_captured_length(tvb) > 1) {
1010 proto_tree_add_item(tree, hf_ipmi_picmg_1a_flags, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1015 rs0f(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1017 static const value_string state_vals[] = {
1018 { 0x00, "Disabled" },
1019 { 0x01, "Enabled" },
1020 { 0x02, "Disabled, Extended Inactive State Link" },
1021 { 0x03, "Enabled, Extended Inactive State Link" },
1025 if (tvb_captured_length(tvb) > 0) {
1026 parse_link_info_state(tree, tvb, 0, " 1", state_vals);
1028 if (tvb_captured_length(tvb) > 5) {
1029 parse_link_info_state(tree, tvb, 5, " 2", state_vals);
1031 if (tvb_captured_length(tvb) > 10) {
1032 parse_link_info_state(tree, tvb, 10, " 3", state_vals);
1034 if (tvb_captured_length(tvb) > 15) {
1035 parse_link_info_state(tree, tvb, 15, " 4", state_vals);
1039 /* Compute Power Properties
1042 rq10(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1044 proto_tree_add_item(tree, hf_ipmi_picmg_10_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1048 rs10(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1050 proto_tree_add_item(tree, hf_ipmi_picmg_10_nslots, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1051 proto_tree_add_item(tree, hf_ipmi_picmg_10_ipmc_loc, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1057 rq11(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1059 static const value_string plvl_vals[] = {
1060 { 0x00, "Power Off" },
1061 { 0xff, "Do not change" },
1064 guint8 v = tvb_get_guint8(tvb, 1);
1066 proto_tree_add_item(tree, hf_ipmi_picmg_11_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1067 proto_tree_add_uint_format_value(tree, hf_ipmi_picmg_11_power_level, tvb, 1, 1,
1068 v, "%s", val_to_str(v, plvl_vals, "Power Level %d"));
1069 proto_tree_add_item(tree, hf_ipmi_picmg_11_set_to_desired, tvb, 2, 1, ENC_LITTLE_ENDIAN);
1075 rq12(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1077 proto_tree_add_item(tree, hf_ipmi_picmg_12_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1078 proto_tree_add_item(tree, hf_ipmi_picmg_12_pwr_type, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1082 rs12(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1084 static const int *byte1[] = { &hf_ipmi_picmg_12_dynamic, &hf_ipmi_picmg_12_pwr_lvl, NULL };
1088 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_picmg_12_byte1, byte1, ENC_LITTLE_ENDIAN, BMT_NO_FALSE);
1089 proto_tree_add_item(tree, hf_ipmi_picmg_12_delay, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1090 v = tvb_get_guint8(tvb, 2);
1091 proto_tree_add_uint_format_value(tree, hf_ipmi_picmg_12_pwr_mult, tvb, 2, 1,
1092 v, "%d.%dW", v / 10, v % 10);
1093 max = tvb_captured_length(tvb) - 3;
1095 max = 1; /* One byte is mandatory */
1096 } else if (max > 20) {
1097 max = 20; /* 20 levels at most */
1099 for (i = 1; i <= max; i++) {
1100 v2 = tvb_get_guint8(tvb, 2 + i);
1101 tmp = (guint)v2 * v;
1102 proto_tree_add_uint_format(tree, hf_ipmi_picmg_12_pwr_draw, tvb, 2 + i, 1,
1103 v2, "Power Draw [%d]: %d.%dW (0x%02x)", i,
1104 tmp / 10, tmp % 10, v2);
1109 /* Renegotiate Power
1112 rq13(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1114 if (tvb_captured_length(tvb) > 0) {
1115 proto_tree_add_item(tree, hf_ipmi_picmg_13_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1119 /* Get Fan Speed Properties
1122 rq14(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1124 proto_tree_add_item(tree, hf_ipmi_picmg_14_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1128 rs14(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1130 static const int *prop[] = { &hf_ipmi_picmg_14_local_control, NULL };
1132 proto_tree_add_item(tree, hf_ipmi_picmg_14_speed_min, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1133 proto_tree_add_item(tree, hf_ipmi_picmg_14_speed_max, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1134 proto_tree_add_item(tree, hf_ipmi_picmg_14_speed_norm, tvb, 2, 1, ENC_LITTLE_ENDIAN);
1135 proto_tree_add_bitmask_text(tree, tvb, 3, 1, "Fan Tray Properties: ", "None",
1136 ett_ipmi_picmg_14_prop, prop, ENC_LITTLE_ENDIAN, 0);
1142 rq15(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1144 guint8 v = tvb_get_guint8(tvb, 1);
1146 proto_tree_add_item(tree, hf_ipmi_picmg_15_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1147 proto_tree_add_uint_format_value(tree, hf_ipmi_picmg_15_fan_level, tvb, 1, 1,
1148 v, "%s", val_to_str(v, fan_level_vals, "%d"));
1149 if (tvb_captured_length(tvb) > 2) {
1150 proto_tree_add_item(tree, hf_ipmi_picmg_15_local_enable, tvb, 2, 1, ENC_LITTLE_ENDIAN);
1157 rq16(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1159 proto_tree_add_item(tree, hf_ipmi_picmg_16_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1163 rs16(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1167 v = tvb_get_guint8(tvb, 0);
1168 proto_tree_add_uint_format_value(tree, hf_ipmi_picmg_16_override_level, tvb, 0, 1,
1169 v, "%s", val_to_str(v, fan_level_vals, "%d"));
1170 if (tvb_captured_length(tvb) > 1) {
1171 proto_tree_add_item(tree, hf_ipmi_picmg_16_local_level, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1173 if (tvb_captured_length(tvb) > 2) {
1174 proto_tree_add_item(tree, hf_ipmi_picmg_16_local_enable, tvb, 2, 1, ENC_LITTLE_ENDIAN);
1178 /* Bused Resource Control
1181 rq17(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1183 static const value_string vals_17_cmd_fromshmm[] = {
1185 { 0x01, "Release" },
1187 { 0x03, "Bus Free" },
1190 static const value_string vals_17_cmd_toshmm[] = {
1191 { 0x00, "Request" },
1192 { 0x01, "Relinquish" },
1196 guint cmd = tvb_get_guint8(tvb, 0);
1197 const ipmi_header_t *header = ipmi_get_hdr(pinfo);
1201 guint to_shmm = header->rs_sa == 0x20;
1203 ipmi_set_data(pinfo, 0, (to_shmm << 8) | cmd);
1209 proto_tree_add_uint_format_value(tree, hf_ipmi_picmg_17_cmd, tvb, 0, 1,
1211 val_to_str_const(cmd,
1212 to_shmm ? vals_17_cmd_toshmm : vals_17_cmd_fromshmm,
1215 proto_tree_add_item(tree, hf_ipmi_picmg_17_resid, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1219 rs17(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1221 /* Key is 3 bytes: direction, command, status */
1222 static const value_string response_vals[] = {
1223 { 0x000000, "In Control" },
1224 { 0x000001, "No Control" },
1225 { 0x000100, "Ack" },
1226 { 0x000101, "Refused" },
1227 { 0x000102, "No Control" },
1228 { 0x000200, "Ack" },
1229 { 0x000201, "No Control" },
1230 { 0x000300, "Accept" },
1231 { 0x000301, "Not Needed" },
1232 { 0x010000, "Grant" },
1233 { 0x010001, "Busy" },
1234 { 0x010002, "Defer" },
1235 { 0x010003, "Deny" },
1236 { 0x010100, "Ack" },
1237 { 0x010101, "Error" },
1238 { 0x010200, "Ack" },
1239 { 0x010201, "Error" },
1240 { 0x010202, "Deny" },
1246 if (!ipmi_get_data(pinfo, 0, &val)) {
1247 /* Without knowing the command, we cannot decipher the response */
1248 proto_tree_add_item(tree, hf_ipmi_picmg_17_status, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1252 status = tvb_get_guint8(tvb, 0);
1253 val = (val << 8) | status;
1254 proto_tree_add_uint_format_value(tree, hf_ipmi_picmg_17_status, tvb, 0, 1,
1255 status, "%s (0x%02x)", val_to_str_const(val, response_vals, "Reserved"), status);
1258 /* Get IPMB Link Info
1261 rq18(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1263 proto_tree_add_item(tree, hf_ipmi_picmg_18_li_key_type, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1264 proto_tree_add_item(tree, hf_ipmi_picmg_18_li_key, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1268 rs18(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1270 proto_tree_add_item(tree, hf_ipmi_picmg_18_link_num, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1271 proto_tree_add_item(tree, hf_ipmi_picmg_18_sensor_num, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1275 parse_amc_link_info_state(proto_tree *tree, tvbuff_t *tvb, guint offs)
1277 static const int *amc_link_info[] = {
1278 &hf_ipmi_picmg_linkinfo_amc_ports,
1279 &hf_ipmi_picmg_linkinfo_amc_type,
1280 &hf_ipmi_picmg_linkinfo_amc_type_ext,
1281 &hf_ipmi_picmg_linkinfo_amc_grpid,
1283 static const int *amc_link_state[] = {
1284 &hf_ipmi_picmg_linkinfo_state_0,
1285 &hf_ipmi_picmg_linkinfo_state_1,
1288 proto_tree_add_bitmask(tree, tvb, offs, hf_ipmi_picmg_linkinfo,
1289 ett_ipmi_picmg_link_info, amc_link_info, ENC_LITTLE_ENDIAN);
1290 proto_tree_add_bitmask(tree, tvb, offs + 3, hf_ipmi_picmg_linkinfo_state,
1291 ett_ipmi_picmg_link_state, amc_link_state, ENC_LITTLE_ENDIAN);
1294 static const int *amc_link_dev[] = {
1295 &hf_ipmi_picmg_linkinfo_dev_id,
1298 /* Set AMC Port State
1301 rq19(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1303 proto_tree_add_item(tree, hf_ipmi_picmg_linkinfo_amc_chan, tvb, 0, 1,
1305 parse_amc_link_info_state(tree, tvb, 1);
1306 if (tvb_captured_length(tvb) > 5) {
1307 proto_tree_add_bitmask(tree, tvb, 5, hf_ipmi_picmg_linkinfo_dev,
1308 ett_ipmi_picmg_link_dev, amc_link_dev, ENC_LITTLE_ENDIAN);
1312 /* Get AMC Port State
1315 rq1a(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1317 proto_tree_add_item(tree, hf_ipmi_picmg_linkinfo_amc_chan, tvb, 0, 1,
1319 if (tvb_captured_length(tvb) > 1) {
1320 proto_tree_add_bitmask(tree, tvb, 1, hf_ipmi_picmg_linkinfo_dev,
1321 ett_ipmi_picmg_link_state, amc_link_dev, ENC_LITTLE_ENDIAN);
1323 if (tvb_captured_length(tvb) > 2) {
1324 proto_tree_add_item(tree, hf_ipmi_picmg_1a_flags, tvb, 2, 1, ENC_LITTLE_ENDIAN);
1329 rs1a(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1331 guint len = tvb_captured_length(tvb);
1333 parse_amc_link_info_state(tree, tvb, 0);
1336 parse_amc_link_info_state(tree, tvb, 4);
1339 parse_amc_link_info_state(tree, tvb, 8);
1342 parse_amc_link_info_state(tree, tvb, 12);
1346 /* Get Shelf Manager IPMB Address
1349 rs1b(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1351 proto_tree_add_item(tree, hf_ipmi_picmg_1b_addr_active, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1352 proto_tree_add_item(tree, hf_ipmi_picmg_1b_addr_backup, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1358 rq1c(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1360 proto_tree_add_item(tree, hf_ipmi_picmg_1c_fan_site_number, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1361 proto_tree_add_item(tree, hf_ipmi_picmg_1c_fan_enable_state, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1362 proto_tree_add_item(tree, hf_ipmi_picmg_1c_fan_policy_timeout, tvb, 2, 1, ENC_LITTLE_ENDIAN);
1363 if (tvb_captured_length(tvb) > 3) {
1364 proto_tree_add_item(tree, hf_ipmi_picmg_1c_site_number, tvb, 3, 1, ENC_LITTLE_ENDIAN);
1365 proto_tree_add_item(tree, hf_ipmi_picmg_1c_site_type, tvb, 4, 1, ENC_LITTLE_ENDIAN);
1372 rq1d(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1374 proto_tree_add_item(tree, hf_ipmi_picmg_1d_fan_site_number, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1375 if (tvb_captured_length(tvb) > 1) {
1376 proto_tree_add_item(tree, hf_ipmi_picmg_1d_site_number, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1377 proto_tree_add_item(tree, hf_ipmi_picmg_1d_site_type, tvb, 2, 1, ENC_LITTLE_ENDIAN);
1382 rs1d(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1384 proto_tree_add_item(tree, hf_ipmi_picmg_1d_policy, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1385 if (tvb_captured_length(tvb) > 1) {
1386 proto_tree_add_item(tree, hf_ipmi_picmg_1d_coverage, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1390 /* FRU Control Capabilities
1393 rq1e(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1395 proto_tree_add_item(tree, hf_ipmi_picmg_1e_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1399 rs1e(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1401 static const int *byte1[] = { &hf_ipmi_picmg_1e_cap_diagintr,
1402 &hf_ipmi_picmg_1e_cap_graceful_reboot, &hf_ipmi_picmg_1e_cap_warm_reset, NULL };
1404 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "FRU Control Capabilities: ", "None",
1405 ett_ipmi_picmg_1e_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1408 /* FRU Inventory Device Lock Control
1411 rq1f(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1413 proto_tree_add_item(tree, hf_ipmi_picmg_1f_rq_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1414 proto_tree_add_item(tree, hf_ipmi_picmg_1f_rq_op, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1415 proto_tree_add_item(tree, hf_ipmi_picmg_1f_rq_lockid, tvb, 2, 2, ENC_LITTLE_ENDIAN);
1419 rs1f(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1421 proto_tree_add_item(tree, hf_ipmi_picmg_1f_rs_lockid, tvb, 0, 2, ENC_LITTLE_ENDIAN);
1422 ipmi_add_timestamp(tree, hf_ipmi_picmg_1f_rs_tstamp, tvb, 2);
1425 static const value_string cc1f[] = {
1426 { 0x80, "Invalid FRU Information" },
1427 { 0x81, "Lock Failed" },
1431 /* FRU Inventory Device Write
1434 rq20(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1436 proto_tree_add_item(tree, hf_ipmi_picmg_20_fruid, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1437 proto_tree_add_item(tree, hf_ipmi_picmg_20_lockid, tvb, 1, 2, ENC_LITTLE_ENDIAN);
1438 proto_tree_add_item(tree, hf_ipmi_picmg_20_offset, tvb, 3, 2, ENC_LITTLE_ENDIAN);
1439 proto_tree_add_item(tree, hf_ipmi_picmg_20_data, tvb, 5, -1, ENC_NA);
1443 rs20(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1445 proto_tree_add_item(tree, hf_ipmi_picmg_20_count, tvb, 0, 1, ENC_NA);
1448 static const value_string cc20[] = {
1449 { 0x80, "Invalid Lock ID" },
1453 /* Get Shelf Manager IP Address
1456 rq21(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1458 proto_tree_add_item(tree, hf_ipmi_picmg_21_addr_num, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1462 rs21(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1464 static const int *byte9[] = { &hf_ipmi_picmg_21_is_shm, &hf_ipmi_picmg_21_addr_type, NULL };
1467 ipmi_add_timestamp(tree, hf_ipmi_picmg_21_tstamp, tvb, 0);
1468 proto_tree_add_item(tree, hf_ipmi_picmg_21_addr_count, tvb, 4, 1, ENC_LITTLE_ENDIAN);
1469 proto_tree_add_item(tree, hf_ipmi_picmg_21_site_type, tvb, 5, 1, ENC_LITTLE_ENDIAN);
1470 proto_tree_add_item(tree, hf_ipmi_picmg_21_site_num, tvb, 6, 1, ENC_LITTLE_ENDIAN);
1471 proto_tree_add_item(tree, hf_ipmi_picmg_21_max_unavail, tvb, 7, 1, ENC_LITTLE_ENDIAN);
1472 proto_tree_add_bitmask_text(tree, tvb, 8, 1, NULL, NULL, ett_ipmi_picmg_21_byte9, byte9, ENC_LITTLE_ENDIAN, 0);
1474 addrtype = tvb_get_guint8(tvb, 8) & 0x7f;
1475 if (addrtype == 0x01) {
1476 /* IP address and RMCP port are in network byte order! */
1477 proto_tree_add_item(tree, hf_ipmi_picmg_21_ipaddr, tvb, 9, 4, ENC_BIG_ENDIAN);
1478 proto_tree_add_item(tree, hf_ipmi_picmg_21_rmcpport, tvb, 13, 2, ENC_BIG_ENDIAN);
1482 /* Get Shelf Power Allocation
1485 rq22(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1487 ipmi_set_data(pinfo, 0, tvb_get_guint8(tvb, 0));
1491 proto_tree_add_item(tree, hf_ipmi_picmg_22_feed_idx, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1495 rs22(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1501 proto_tree_add_item(tree, hf_ipmi_picmg_22_update_cnt, tvb, 0, 2, ENC_LITTLE_ENDIAN);
1503 max = tvb_captured_length(tvb) / 2 - 1;
1505 /* At least one shall be present */
1508 ipmi_get_data(pinfo, 0, &offs);
1509 for (i = 0; i < max; i++) {
1510 v = tvb_get_letohs(tvb, 2 + 2 * i);
1511 proto_tree_add_uint_format(tree, hf_ipmi_picmg_22_pwr_alloc, tvb, 2 + 2 * i, 2,
1512 v, "Power Feed [%d] Allocation: %d Watts", offs + i, v);
1516 static const value_string picmg_23_slot_selectors[] = {
1517 { 0, "MicroTCA Shelf within a Frame" },
1518 { 1, "MicroTCA Carrier within a Shelf" },
1519 { 2, "Slot within a MicroTCA Carrier" },
1523 static const value_string picmg_23_num_bases[] = {
1524 { 0, "Zero-based" },
1529 static const value_string picmg_23_orientations[] = {
1531 { 1, "Horizontal" },
1535 /* Get Location Info
1538 rq23(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1540 static const int * picmg_23_rq_byte2[] = {
1541 &hf_ipmi_picmg_23_slot_sel,
1542 &hf_ipmi_picmg_23_carrier_num,
1546 proto_tree_add_bitmask(tree, tvb, 0, hf_ipmi_picmg_23_rq_byte2,
1547 ett_ipmi_picmg_23_rq_byte2, picmg_23_rq_byte2,
1549 if ((tvb_get_guint8(tvb, 0) & 0xC0) == 0x80) {
1550 proto_tree_add_item(tree, hf_ipmi_picmg_01_rs_site_num,
1551 tvb, 1, 1, ENC_LITTLE_ENDIAN);
1552 proto_tree_add_item(tree, hf_ipmi_picmg_01_rs_site_type,
1553 tvb, 2, 1, ENC_LITTLE_ENDIAN);
1558 rs23(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1560 static const int * picmg_23_rs_byte5[] = {
1561 &hf_ipmi_picmg_23_slot_base,
1562 &hf_ipmi_picmg_23_tier_base,
1563 &hf_ipmi_picmg_23_orientation,
1567 proto_tree_add_item(tree, hf_ipmi_picmg_23_slot_num,
1568 tvb, 0, 1, ENC_LITTLE_ENDIAN);
1569 proto_tree_add_item(tree, hf_ipmi_picmg_23_tier_num,
1570 tvb, 1, 1, ENC_LITTLE_ENDIAN);
1571 proto_tree_add_bitmask(tree, tvb, 2, hf_ipmi_picmg_23_rs_byte5,
1572 ett_ipmi_picmg_23_rs_byte5, picmg_23_rs_byte5,
1574 proto_tree_add_item(tree, hf_ipmi_picmg_23_origin_x,
1575 tvb, 3, 2, ENC_LITTLE_ENDIAN);
1576 proto_tree_add_item(tree, hf_ipmi_picmg_23_origin_y,
1577 tvb, 5, 2, ENC_LITTLE_ENDIAN);
1580 static const value_string picmg_24_controls[] = {
1581 { 0, "Disable MP" },
1583 { 2, "De-assert ENABLE#" },
1584 { 3, "Assert ENABLE#" },
1585 { 4, "Disable PWR" },
1586 { 5, "Enable PWR" },
1591 fmt_power_amps(gchar *s, guint32 v)
1593 g_snprintf(s, ITEM_LABEL_LENGTH, "%d.%dA", v / 10, v % 10);
1596 /* Power Channel Control
1599 rq24(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1601 proto_tree_add_item(tree, hf_ipmi_picmg_24_channel,
1602 tvb, 0, 1, ENC_LITTLE_ENDIAN);
1603 proto_tree_add_item(tree, hf_ipmi_picmg_24_control,
1604 tvb, 1, 1, ENC_LITTLE_ENDIAN);
1605 proto_tree_add_item(tree, hf_ipmi_picmg_24_current,
1606 tvb, 2, 1, ENC_LITTLE_ENDIAN);
1607 proto_tree_add_item(tree, hf_ipmi_picmg_24_primary_pm,
1608 tvb, 3, 1, ENC_LITTLE_ENDIAN);
1609 proto_tree_add_item(tree, hf_ipmi_picmg_24_backup_pm,
1610 tvb, 4, 1, ENC_LITTLE_ENDIAN);
1613 static const value_string picmg_25_fault_vals[] = {
1614 { 0, "Redundant PM is not providing Payload Power current" },
1615 { 1, "Redundant PM is providing Payload Power current" },
1619 static const true_false_string picmg_25_roles = {
1620 "Primary", "Redundant"
1623 /* Get Power Channel Status
1626 rq25(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1628 proto_tree_add_item(tree, hf_ipmi_picmg_25_start,
1629 tvb, 0, 1, ENC_LITTLE_ENDIAN);
1630 proto_tree_add_item(tree, hf_ipmi_picmg_25_count,
1631 tvb, 1, 1, ENC_LITTLE_ENDIAN);
1635 rs25(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1637 static const gint * picmg_25_gstatus[] = {
1638 &hf_ipmi_picmg_25_fault,
1639 &hf_ipmi_picmg_25_pwr_good,
1640 &hf_ipmi_picmg_25_mp_good,
1641 &hf_ipmi_picmg_25_role,
1644 static const gint * picmg_25_cstatus[] = {
1645 &hf_ipmi_picmg_25_pwr_on,
1646 &hf_ipmi_picmg_25_pwr_ovr,
1647 &hf_ipmi_picmg_25_pwr,
1648 &hf_ipmi_picmg_25_enable,
1649 &hf_ipmi_picmg_25_mp_ovr,
1650 &hf_ipmi_picmg_25_mp,
1651 &hf_ipmi_picmg_25_ps1,
1655 guint i, len = tvb_captured_length(tvb);
1657 proto_tree_add_item(tree, hf_ipmi_picmg_25_max,
1658 tvb, 0, 1, ENC_LITTLE_ENDIAN);
1659 proto_tree_add_bitmask(tree, tvb, 1, hf_ipmi_picmg_25_gstatus,
1660 ett_ipmi_picmg_25_rs_byte4, picmg_25_gstatus,
1663 for (i = 2; i < len; i++) {
1664 proto_tree_add_bitmask(tree, tvb, i, hf_ipmi_picmg_25_cstatus,
1665 ett_ipmi_picmg_25_rs_byte5, picmg_25_cstatus,
1673 rq26(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1675 proto_tree_add_item(tree, hf_ipmi_picmg_26_pm_site,
1676 tvb, 0, 1, ENC_LITTLE_ENDIAN);
1682 rs27(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1684 static const gint * picmg_27_status[] = {
1685 &hf_ipmi_picmg_27_pm_healthy,
1688 proto_tree_add_bitmask(tree, tvb, 0, hf_ipmi_picmg_27_rs_byte3,
1689 ett_ipmi_picmg_27_rs_byte3, picmg_27_status,
1693 static const value_string cc28[] = {
1694 { 0x80, "Returned from autonomous mode" },
1699 fmt_100ms(gchar *s, guint32 v)
1701 g_snprintf(s, ITEM_LABEL_LENGTH, "%d.%dS", v / 10, v % 10);
1707 rq28(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1709 static const gint * picmg_28_flags[] = {
1710 &hf_ipmi_picmg_28_mch2,
1711 &hf_ipmi_picmg_28_mch1,
1714 proto_tree_add_item(tree, hf_ipmi_picmg_28_timeout,
1715 tvb, 0, 1, ENC_LITTLE_ENDIAN);
1716 proto_tree_add_bitmask(tree, tvb, 1, hf_ipmi_picmg_28_rq_byte3,
1717 ett_ipmi_picmg_28_rq_byte3, picmg_28_flags,
1721 static const true_false_string picmg_29_alarm_actions = {
1722 "Produces(results in) an implementation-defined action",
1726 static const true_false_string picmg_29_alarm_modes = {
1727 "Can be controlled/enabled by the Set Telco Alarm State command",
1728 "Can not be controlled/enabled"
1731 /* Get Telco Alarm Capabilities
1734 rs29(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1736 static const gint * picmg_29_caps[] = {
1737 &hf_ipmi_picmg_29_maj_rst,
1738 &hf_ipmi_picmg_29_min_rst,
1739 &hf_ipmi_picmg_29_alarm_cut,
1740 &hf_ipmi_picmg_29_test_mode,
1741 &hf_ipmi_picmg_29_pwr_alarm,
1742 &hf_ipmi_picmg_29_minor_alarm,
1743 &hf_ipmi_picmg_29_major_alarm,
1744 &hf_ipmi_picmg_29_crit_alarm,
1747 proto_tree_add_bitmask(tree, tvb, 0, hf_ipmi_picmg_29_rs_byte3,
1748 ett_ipmi_picmg_29_rs_byte3, picmg_29_caps,
1752 static const value_string picmg_2a_alarm_ids[] = {
1753 { 0, "Critical Alarm" },
1754 { 1, "Major Alarm" },
1755 { 2, "Minor Alarm" },
1756 { 3, "Power Alarm" },
1757 { 4, "Alarm Cutoff" },
1761 static const value_string picmg_2a_alarm_ctrls[] = {
1762 { 0, "off / cutoff disabled" },
1763 { 1, "on / cutoff enabled" },
1764 { 0xFF, "test mode" },
1768 /* Set Telco Alarm State
1771 rq2a(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1773 proto_tree_add_item(tree, hf_ipmi_picmg_05_fruid,
1774 tvb, 0, 1, ENC_LITTLE_ENDIAN);
1775 proto_tree_add_item(tree, hf_ipmi_picmg_2a_alarm_id,
1776 tvb, 1, 1, ENC_LITTLE_ENDIAN);
1777 proto_tree_add_item(tree, hf_ipmi_picmg_2a_alarm_ctrl,
1778 tvb, 2, 1, ENC_LITTLE_ENDIAN);
1781 /* Get Telco Alarm State
1784 rq2b(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1786 proto_tree_add_item(tree, hf_ipmi_picmg_05_fruid,
1787 tvb, 0, 1, ENC_LITTLE_ENDIAN);
1788 proto_tree_add_item(tree, hf_ipmi_picmg_2a_alarm_id,
1789 tvb, 1, 1, ENC_LITTLE_ENDIAN);
1793 rs2b(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1795 proto_tree_add_item(tree, hf_ipmi_picmg_2b_alarm_state,
1796 tvb, 0, 1, ENC_LITTLE_ENDIAN);
1799 static const value_string amc_clock_ids[] = {
1800 { 1, "TCLKA(CLK1A)" },
1801 { 2, "TCLKB(CLK1B)" },
1802 { 3, "TCLKC(CLK1)" },
1803 { 4, "TCLKD(CLK2A)" },
1804 { 5, "FCLKA(CLK2B)" },
1812 static const value_string amc_clock_dirs[] = {
1813 { 0, "Clock receiver" },
1814 { 1, "Clock source" },
1818 static const value_string amc_clock_plls[] = {
1819 { 0, "Default state" },
1820 { 1, "Connect through PLL" },
1821 { 2, "Bypass PLL" },
1825 static const range_string amc_clock_families[] = {
1826 { 0, 0, "Unspecified" },
1827 { 1, 1, "SONET/SDH/PDH" },
1828 { 2, 2, "Reserved for PCI Express" },
1829 { 3, 0xC8, "Reserved" },
1830 { 0xC9, 0xFF, "Vendor defined" },
1834 static const value_string amc_clock_resource_types[] = {
1835 { 0, "On-Carrier device" },
1836 { 1, "AMC module" },
1842 static const int * amc_clock_setting[] = {
1843 &hf_ipmi_picmg_clock_pll,
1844 &hf_ipmi_picmg_clock_dir,
1845 &hf_ipmi_picmg_clock_state,
1849 static const int * amc_clock_resource[] = {
1850 &hf_ipmi_picmg_clock_resource_type,
1851 &hf_ipmi_picmg_clock_resource_dev,
1858 rq2c(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1860 proto_tree_add_item(tree, hf_ipmi_picmg_clock_id, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1861 proto_tree_add_item(tree, hf_ipmi_picmg_clock_cfg, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1862 proto_tree_add_bitmask(tree, tvb, 2, hf_ipmi_picmg_clock_setting,
1863 ett_ipmi_picmg_clock_setting, amc_clock_setting, ENC_LITTLE_ENDIAN);
1864 if (tvb_captured_length(tvb) > 3) {
1865 proto_tree_add_item(tree, hf_ipmi_picmg_clock_family, tvb, 3, 1, ENC_LITTLE_ENDIAN);
1866 proto_tree_add_item(tree, hf_ipmi_picmg_clock_accuracy, tvb, 4, 1, ENC_LITTLE_ENDIAN);
1867 proto_tree_add_item(tree, hf_ipmi_picmg_clock_frequency, tvb, 5, 4, ENC_LITTLE_ENDIAN);
1869 if (tvb_captured_length(tvb) > 9) {
1870 proto_tree_add_bitmask(tree, tvb, 9, hf_ipmi_picmg_clock_resource,
1871 ett_ipmi_picmg_clock_res, amc_clock_resource, ENC_LITTLE_ENDIAN);
1875 /* Get Clock State (request)
1878 rq2d(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1880 proto_tree_add_item(tree, hf_ipmi_picmg_clock_id, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1881 if (tvb_captured_length(tvb) > 1) {
1882 proto_tree_add_bitmask(tree, tvb, 1, hf_ipmi_picmg_clock_resource,
1883 ett_ipmi_picmg_clock_res, amc_clock_resource, ENC_LITTLE_ENDIAN);
1887 /* Get Clock State (response)
1890 rs2d(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1892 proto_tree_add_bitmask(tree, tvb, 0, hf_ipmi_picmg_clock_setting,
1893 ett_ipmi_picmg_clock_setting, amc_clock_setting, ENC_LITTLE_ENDIAN);
1894 if (tvb_captured_length(tvb) > 1) {
1895 proto_tree_add_item(tree, hf_ipmi_picmg_clock_cfg, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1896 proto_tree_add_item(tree, hf_ipmi_picmg_clock_family, tvb, 2, 1, ENC_LITTLE_ENDIAN);
1897 proto_tree_add_item(tree, hf_ipmi_picmg_clock_accuracy, tvb, 3, 1, ENC_LITTLE_ENDIAN);
1898 proto_tree_add_item(tree, hf_ipmi_picmg_clock_frequency, tvb, 4, 4, ENC_LITTLE_ENDIAN);
1903 add_component_bits(proto_tree *tree, tvbuff_t *tvb, guint offs, const char *desc)
1905 static const gint *compbits[] = { &hf_ipmi_picmg_XX_comp7, &hf_ipmi_picmg_XX_comp6, &hf_ipmi_picmg_XX_comp5,
1906 &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 };
1908 proto_tree_add_bitmask_text(tree, tvb, offs, 1, desc, "None",
1909 ett_ipmi_picmg_XX_compbits, compbits, ENC_LITTLE_ENDIAN, 0);
1912 /* Get Target Upgrade Capabilities
1915 rs2e(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1917 static const gint *byte2[] = { &hf_ipmi_picmg_2e_upgrade_undesirable, &hf_ipmi_picmg_2e_auto_rollback_override,
1918 &hf_ipmi_picmg_2e_ipmc_degraded, &hf_ipmi_picmg_2e_deferred_activate, &hf_ipmi_picmg_2e_services_affected,
1919 &hf_ipmi_picmg_2e_manual_rollback, &hf_ipmi_picmg_2e_auto_rollback, &hf_ipmi_picmg_2e_self_test, NULL };
1921 proto_tree_add_item(tree, hf_ipmi_picmg_2e_version, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1922 proto_tree_add_bitmask_text(tree, tvb, 1, 1, "Capabilities: ", "None",
1923 ett_ipmi_picmg_2e_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
1924 proto_tree_add_item(tree, hf_ipmi_picmg_2e_upgrade_tout, tvb, 2, 1, ENC_LITTLE_ENDIAN);
1925 proto_tree_add_item(tree, hf_ipmi_picmg_2e_selftest_tout, tvb, 3, 1, ENC_LITTLE_ENDIAN);
1926 proto_tree_add_item(tree, hf_ipmi_picmg_2e_rollback_tout, tvb, 4, 1, ENC_LITTLE_ENDIAN);
1927 proto_tree_add_item(tree, hf_ipmi_picmg_2e_inaccessibility_tout, tvb, 5, 1, ENC_LITTLE_ENDIAN);
1928 add_component_bits(tree, tvb, 6, "Components present: ");
1931 static const value_string cc2e[] = {
1932 { 0x81, "Firmware Upgrade is not supported over this interface" },
1936 /* Get Component Properties
1939 prop_00(tvbuff_t *tvb, proto_tree *tree)
1941 static const gint *byte1[] = { &hf_ipmi_picmg_prop00_cold_reset, &hf_ipmi_picmg_prop00_deferred_activation,
1942 &hf_ipmi_picmg_prop00_comparison, &hf_ipmi_picmg_prop00_preparation, &hf_ipmi_picmg_prop00_rollback, NULL };
1944 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "General Component Properties: ", "None",
1945 ett_ipmi_picmg_prop00_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1949 parse_version(tvbuff_t *tvb, proto_tree *tree)
1951 static const gint *byte1[] = { &hf_ipmi_picmg_prop01_fw_major, NULL };
1953 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1954 ett_ipmi_picmg_prop01_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1955 proto_tree_add_item(tree, hf_ipmi_picmg_prop01_fw_minor, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1956 proto_tree_add_item(tree, hf_ipmi_picmg_prop01_fw_aux, tvb, 2, 4, ENC_NA);
1960 prop_02(tvbuff_t *tvb, proto_tree *tree)
1962 guint len = tvb_captured_length(tvb);
1967 proto_tree_add_item(tree, hf_ipmi_picmg_prop02_desc, tvb, 0, len, ENC_ASCII|ENC_NA);
1970 static const struct {
1971 void (*intrp)(tvbuff_t *tvb, proto_tree *tree);
1974 { prop_00, "General Component Properties" },
1975 { parse_version, "Current Version" },
1976 { prop_02, "Description String" },
1977 { parse_version, "Rollback firmware version" },
1978 { parse_version, "Deferred upgrade firmware version" }
1982 rq2f(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1984 guint8 pno = tvb_get_guint8(tvb, 1);
1987 ipmi_set_data(pinfo, 0, pno);
1992 if (pno < array_length(compprops)) {
1993 desc = compprops[pno].name;
1994 } else if (pno >= 0xC0) {
2000 proto_tree_add_item(tree, hf_ipmi_picmg_2f_comp_id, tvb, 0, 1, ENC_LITTLE_ENDIAN);
2001 proto_tree_add_uint_format_value(tree, hf_ipmi_picmg_2f_comp_prop, tvb, 1, 1, pno,
2002 "%s (0x%02x)", desc, pno);
2006 rs2f(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2012 if (!ipmi_get_data(pinfo, 0, &pno)) {
2013 /* Can't parse further if property selector is not known */
2014 proto_tree_add_item(tree, hf_ipmi_picmg_2f_prop_data, tvb, 0, -1, ENC_NA);
2018 if (pno < array_length(compprops)) {
2019 desc = compprops[pno].name;
2020 } else if (pno >= 0xC0) {
2026 ti = proto_tree_add_uint_format_value(tree, hf_ipmi_picmg_2f_comp_prop, tvb, 0, 0, pno, "%s (0x%02x)", desc, pno);
2027 PROTO_ITEM_SET_GENERATED(ti);
2028 if (pno < array_length(compprops)) {
2029 compprops[pno].intrp(tvb, tree);
2031 proto_tree_add_item(tree, hf_ipmi_picmg_2f_prop_data, tvb, 0, -1, ENC_NA);
2035 static const value_string cc2f[] = {
2036 { 0x81, "Firmware Upgrade is not supported over this interface" },
2037 { 0x82, "Invalid Component ID" },
2038 { 0x83, "Invalid Component property selector" },
2042 /* Abort Firmware Upgrade
2044 static const value_string cc30[] = {
2045 { 0x80, "Firmware Upgrade cannot be aborted at this moment" },
2046 { 0x81, "Firmware Upgrade aborted, IPMC cannot resume normal operation" },
2050 /* Initiate upgrade action
2053 rq31(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2055 add_component_bits(tree, tvb, 0, "Components: ");
2056 proto_tree_add_item(tree, hf_ipmi_picmg_31_action, tvb, 1, 1, ENC_LITTLE_ENDIAN);
2059 static const value_string cc31[] = {
2060 { 0x80, "Command in progress" },
2061 { 0x81, "Invalid component" },
2065 /* Upload Firmware Block
2068 rq32(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2070 proto_tree_add_item(tree, hf_ipmi_picmg_32_block, tvb, 0, 1, ENC_LITTLE_ENDIAN);
2071 proto_tree_add_item(tree, hf_ipmi_picmg_32_data, tvb, 1, -1, ENC_NA);
2075 rs32(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2077 if (tvb_captured_length(tvb) > 0) {
2078 proto_tree_add_item(tree, hf_ipmi_picmg_32_sec_offs, tvb, 0, 4, ENC_LITTLE_ENDIAN);
2079 proto_tree_add_item(tree, hf_ipmi_picmg_32_sec_len, tvb, 4, 4, ENC_LITTLE_ENDIAN);
2083 static const value_string cc32[] = {
2084 { 0x80, "Command in progress" },
2085 { 0x81, "Invalid component" },
2086 { 0x82, "Internal checksum error detected in the received blocks" },
2090 /* Finish Firmware Upgrade
2093 rq33(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2095 proto_tree_add_item(tree, hf_ipmi_picmg_33_comp_id, tvb, 0, 1, ENC_LITTLE_ENDIAN);
2096 proto_tree_add_item(tree, hf_ipmi_picmg_33_img_len, tvb, 1, 4, ENC_LITTLE_ENDIAN);
2099 static const value_string cc33[] = {
2100 { 0x80, "Command in progress" },
2101 { 0x81, "Number of bytes received does not match size in the request" },
2102 { 0x82, "Internal checksum error detected in the received image" },
2103 { 0x83, "Uploaded firmware does not match current" },
2107 /* Get Upgrade Status
2110 rs34(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2112 static const guint8 sig = 0;
2113 static const gint *byte3[] = { &hf_ipmi_picmg_34_percentage, NULL };
2117 v = tvb_get_guint8(tvb, 0);
2118 c = ipmi_getcmd(ipmi_getnetfn(IPMI_GROUP_REQ, &sig), v);
2119 proto_tree_add_uint_format_value(tree, hf_ipmi_picmg_34_cmd, tvb, 0, 1, v,
2120 "%s (0x%02x)", c->desc, v);
2121 v = tvb_get_guint8(tvb, 1);
2122 proto_tree_add_uint_format_value(tree, hf_ipmi_picmg_34_ccode, tvb, 1, 1, v,
2123 "%s (0x%02x)", ipmi_get_completion_code(v, c), v);
2124 if (tvb_captured_length(tvb) > 2) {
2125 proto_tree_add_bitmask_text(tree, tvb, 2, 1, NULL, NULL,
2126 ett_ipmi_picmg_34_byte3, byte3, ENC_LITTLE_ENDIAN, 0);
2130 static const value_string cc34[] = {
2131 { 0x80, "Command in progress" },
2135 /* Activate Firmware
2138 rq35(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2140 if (tvb_captured_length(tvb) > 0) {
2141 proto_tree_add_item(tree, hf_ipmi_picmg_35_rollback_override, tvb, 0, 1, ENC_LITTLE_ENDIAN);
2145 static const value_string cc35[] = {
2146 { 0x80, "Command in progress" },
2150 /* Query Self-test Results
2153 rs36(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2155 static const gint *byte2[] = { &hf_ipmi_picmg_36_fail_sel, &hf_ipmi_picmg_36_fail_sdr,
2156 &hf_ipmi_picmg_36_fail_bmc_fru, &hf_ipmi_picmg_36_fail_ipmb_sig, &hf_ipmi_picmg_36_fail_sdr_empty,
2157 &hf_ipmi_picmg_36_fail_iua, &hf_ipmi_picmg_36_fail_bb_fw, &hf_ipmi_picmg_36_fail_oper_fw, NULL };
2160 res = tvb_get_guint8(tvb, 0);
2161 fail = tvb_get_guint8(tvb, 1);
2163 proto_tree_add_uint_format_value(tree, hf_ipmi_picmg_36_result, tvb, 0, 1,
2165 val_to_str_const(res, vals_36_result, "Device-specific internal failure"),
2168 if (res == 0x55 || res == 0xff) {
2169 proto_tree_add_uint_format_value(tree, hf_ipmi_picmg_36_fail, tvb, 1, 1,
2170 fail, "0x%02x (must be 0x00)",
2172 } else if (res == 0x57) {
2173 proto_tree_add_bitmask(tree, tvb, 1, hf_ipmi_picmg_36_fail, ett_ipmi_picmg_36_byte2, byte2, ENC_LITTLE_ENDIAN);
2174 } else if (res == 0x60) {
2175 add_component_bits(tree, tvb, 1, "Failed components: ");
2177 proto_tree_add_uint_format_value(tree, hf_ipmi_picmg_36_fail, tvb, 1, 1,
2178 fail, "0x%02x (device-specific)", fail);
2182 static const value_string cc36[] = {
2183 { 0x80, "Self-test in progress" },
2184 { 0x81, "Firmware upgrade not supported over this interface" },
2188 /* Query Rollback Results
2191 rs37(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2193 static const gint *byte2[] = { &hf_ipmi_picmg_37_percent, NULL };
2196 switch (ipmi_get_ccode(pinfo)) {
2197 case 0x00: desc = "Components completed rollback: "; break;
2198 case 0x80: desc = "Components (should be None): "; break;
2199 case 0x81: desc = "Components failed to rollback: "; break;
2200 default: desc = "Components (ignored): "; break;
2203 add_component_bits(tree, tvb, 0, desc);
2204 if (tvb_captured_length(tvb) > 1) {
2205 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
2206 ett_ipmi_picmg_37_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
2210 /* Get HPM.x Capabilities
2213 rq3e(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2215 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_id, tvb, 0, 1, ENC_LITTLE_ENDIAN);
2219 rs3e(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2221 static const gint *hpm2_caps[] = {
2222 &hf_ipmi_picmg_hpm2_dyn_ssn,
2223 &hf_ipmi_picmg_hpm2_ver_chg,
2224 &hf_ipmi_picmg_hpm2_ext_mgt,
2225 &hf_ipmi_picmg_hpm2_pkt_trc,
2226 &hf_ipmi_picmg_hpm2_sol_ext,
2230 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_id, tvb, 0, 1, ENC_LITTLE_ENDIAN);
2231 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_rev, tvb, 1, 1, ENC_LITTLE_ENDIAN);
2233 hpm_x = tvb_get_guint8(tvb, 0);
2236 proto_tree_add_item(tree, hf_ipmi_picmg_hpm2_mask, tvb, 2, 2, ENC_LITTLE_ENDIAN);
2237 if (tvb_captured_length(tvb) > 4) {
2238 proto_tree_add_bitmask(tree, tvb, 4, hf_ipmi_picmg_hpm2_caps,
2239 ett_ipmi_picmg_hpm_caps, hpm2_caps, ENC_LITTLE_ENDIAN);
2241 if (tvb_captured_length(tvb) > 5) {
2242 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_oem_start,
2243 tvb, 5, 1, ENC_LITTLE_ENDIAN);
2244 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_oem_rev,
2245 tvb, 6, 1, ENC_LITTLE_ENDIAN);
2247 if (tvb_captured_length(tvb) > 7) {
2248 proto_tree_add_item(tree, hf_ipmi_picmg_hpm2_sol_oem_start,
2249 tvb, 7, 1, ENC_LITTLE_ENDIAN);
2250 proto_tree_add_item(tree, hf_ipmi_picmg_hpm2_sol_oem_rev,
2251 tvb, 8, 1, ENC_LITTLE_ENDIAN);
2253 } else if (hpm_x == 3) {
2254 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_oem_start,
2255 tvb, 2, 1, ENC_LITTLE_ENDIAN);
2256 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_oem_rev,
2257 tvb, 3, 1, ENC_LITTLE_ENDIAN);
2261 static const value_string hpm2_func_selectors[] = {
2262 { 0x0, "Create Credentials" },
2263 { 0x1, "Get Session Info" },
2264 { 0x2, "Get User Name, least significant bytes" },
2265 { 0x3, "Get User Name, most significant bytes" },
2266 { 0x4, "Get Password, least significant bytes" },
2267 { 0x5, "Get Password, most significant bytes" },
2268 { 0x6, "Get BMC Key, least significant bytes" },
2269 { 0x7, "Get BMC Key, most significant bytes" },
2273 static const value_string hpm2_ipmi_revs[] = {
2274 { 0x0, "IPMI 1.5 session" },
2275 { 0x1, "IPMI 2.0 session" },
2279 static const value_string hpm2_auth_types[] = {
2283 { 0x4, "Straight password" },
2288 /* Get Dynamic Credentials
2291 rq3f(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2293 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_cred_hnd,
2294 tvb, 0, 1, ENC_LITTLE_ENDIAN);
2295 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_func_sel,
2296 tvb, 1, 1, ENC_LITTLE_ENDIAN);
2297 if (!tvb_get_guint8(tvb, 1)) {
2298 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_ipmi_rev,
2299 tvb, 2, 1, ENC_LITTLE_ENDIAN);
2300 if (tvb_get_guint8(tvb, 2)) {
2301 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_cipher_id,
2302 tvb, 3, 1, ENC_LITTLE_ENDIAN);
2304 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_auth_type,
2305 tvb, 3, 1, ENC_LITTLE_ENDIAN);
2307 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_priv_level,
2308 tvb, 4, 1, ENC_LITTLE_ENDIAN);
2309 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_chn_num,
2310 tvb, 5, 1, ENC_LITTLE_ENDIAN);
2311 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_avail_time,
2312 tvb, 6, 4, ENC_LITTLE_ENDIAN);
2313 proto_tree_add_item(tree, hf_ipmi_picmg_21_ipaddr,
2314 tvb, 10, 4, ENC_BIG_ENDIAN);
2319 rs3f(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2323 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_cred_hnd,
2324 tvb, 0, 1, ENC_LITTLE_ENDIAN);
2325 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_func_sel,
2326 tvb, 1, 1, ENC_LITTLE_ENDIAN);
2328 func = tvb_get_guint8(tvb, 1);
2333 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_avail_time,
2334 tvb, 2, 4, ENC_LITTLE_ENDIAN);
2338 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_user_name,
2343 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_user_pwd,
2344 tvb, 2, 10, ENC_NA);
2348 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_bmc_key,
2349 tvb, 2, 10, ENC_NA);
2354 static const value_string picmg40_operations[] = {
2355 { 0x0, "Initiate new operation" },
2356 { 0x1, "Poll for completion status" },
2360 static const value_string cc40[] = {
2361 { 0x80, "In progress" },
2362 { 0x81, "No previous establishment request" },
2363 { 0x82, "LAN sessions are not supported" },
2364 { 0x83, "Error trying to establish a session" },
2368 /* Get Session Handle for Explicit LAN Bridging
2371 rq40(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2373 proto_tree_add_item(tree, hf_ipmi_picmg_01_rs_ipmbaddr,
2374 tvb, 0, 1, ENC_LITTLE_ENDIAN);
2375 proto_tree_add_item(tree, hf_ipmi_picmg_01_rs_fruid,
2376 tvb, 1, 1, ENC_LITTLE_ENDIAN);
2377 if (tvb_captured_length(tvb) > 2) {
2378 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_operation,
2379 tvb, 2, 1, ENC_LITTLE_ENDIAN);
2384 rs40(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2386 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_chn_num,
2387 tvb, 0, 1, ENC_LITTLE_ENDIAN);
2388 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_ssn_hnd,
2389 tvb, 1, 1, ENC_LITTLE_ENDIAN);
2390 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_ssn_hnd,
2391 tvb, 2, 1, ENC_LITTLE_ENDIAN);
2392 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_ssn_hnd,
2393 tvb, 3, 1, ENC_LITTLE_ENDIAN);
2396 static const value_string cc37[] = {
2397 { 0x80, "Rollback in progress" },
2398 { 0x81, "Rollback failure" },
2399 { 0x82, "Rollback overridden" },
2400 { 0x83, "Rollback denied for integrity reasons" },
2404 /* Initiate Manual Rollback
2406 static const value_string cc38[] = {
2407 { 0x80, "Rollback in progress" },
2411 static const value_string hpm_x_ids[] = {
2417 /* Get ATCA Extended Management Resources
2420 rs41(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2422 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_power_draw,
2423 tvb, 0, 1, ENC_LITTLE_ENDIAN);
2424 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_base_channels,
2425 tvb, 1, 2, ENC_LITTLE_ENDIAN);
2426 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_fabric_channels,
2427 tvb, 3, 2, ENC_LITTLE_ENDIAN);
2428 if (tvb_captured_length(tvb) > 5) {
2429 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_update_channels,
2430 tvb, 5, 1, ENC_LITTLE_ENDIAN);
2432 if (tvb_captured_length(tvb) > 6) {
2433 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_cross_channels,
2434 tvb, 6, 1, ENC_LITTLE_ENDIAN);
2439 static const value_string amc_resource_types[] = {
2440 { 0, "On-Carrier device (IRTM, MCH)" },
2441 { 1, "AMC module" },
2445 /* Get AMC Extended Management Resources
2448 rs42(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2450 static const gint *amc_resource_type[] = {
2451 &hf_ipmi_picmg_linkinfo_dev_type,
2452 &hf_ipmi_picmg_linkinfo_dev_id,
2456 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_power_draw,
2457 tvb, 0, 1, ENC_LITTLE_ENDIAN);
2458 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_num_chn_desc,
2459 tvb, 1, 1, ENC_LITTLE_ENDIAN);
2461 num = tvb_get_guint8(tvb, 1);
2463 for (i = 0; i < num; i++) {
2464 proto_tree_add_bitmask(tree, tvb, 2 + i * 5,
2465 hf_ipmi_picmg_linkinfo_dev, ett_ipmi_picmg_link_dev,
2466 amc_resource_type, ENC_LITTLE_ENDIAN);
2467 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_chn_mask,
2468 tvb, 3 + i * 5, 4, ENC_LITTLE_ENDIAN);
2472 /* Set ATCA Extended Management State
2475 rq43(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2477 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_ext_mgmt_state,
2478 tvb, 0, 1, ENC_LITTLE_ENDIAN);
2479 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_polling_period,
2480 tvb, 1, 1, ENC_LITTLE_ENDIAN);
2483 /* Get ATCA Extended Management State
2486 rs44(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2488 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_ext_mgmt_state,
2489 tvb, 0, 1, ENC_LITTLE_ENDIAN);
2492 static const value_string auth_pwr_states[] = {
2493 { 0, "Normal. Full Payload Power." },
2494 { 1, "Extended Management Power" },
2498 static const value_string amc_pwr_states[] = {
2499 { 0, "Standard Management Power" },
2500 { 1, "Extended Management Power" },
2501 { 2, "Full Payload Power." },
2505 /* Set AMC Power State
2508 rq45(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2510 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_auth_pwr_state,
2511 tvb, 0, 1, ENC_LITTLE_ENDIAN);
2514 /* Get AMC Power State
2517 rs46(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2519 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_auth_pwr_state,
2520 tvb, 0, 1, ENC_LITTLE_ENDIAN);
2521 proto_tree_add_item(tree, hf_ipmi_picmg_hpm_amc_pwr_state,
2522 tvb, 1, 1, ENC_LITTLE_ENDIAN);
2525 static const value_string picmg47_flags[] = {
2526 { 0, "Assign Payload Instance." },
2527 { 1, "Return Assigned Instance" },
2531 static const value_string picmg47_states[] = {
2532 { 0, "No session currently opened on this System Serial Port." },
2533 { 1, "A session already opened on this System Serial Port." },
2537 static const value_string cc47[] = {
2538 { 0x80, "Payload Instance can not be assigned at this time." },
2542 /* Assign SOL Payload Instance
2545 rq47(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2547 proto_tree_add_item(tree, hf_ipmi_picmg47_port,
2548 tvb, 0, 1, ENC_LITTLE_ENDIAN);
2549 proto_tree_add_item(tree, hf_ipmi_picmg47_flags,
2550 tvb, 1, 1, ENC_LITTLE_ENDIAN);
2555 rs47(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2557 static const gint *byte1[] = {
2558 &hf_ipmi_picmg47_state,
2559 &hf_ipmi_picmg47_instance,
2562 proto_tree_add_bitmask(tree, tvb, 0, hf_ipmi_picmg47_assignment,
2563 ett_ipmi_picmg_47_byte1, byte1, ENC_LITTLE_ENDIAN);
2566 static const value_string picmg48_fru_types[] = {
2568 { 1, "IPMB-L address of subsidiary MMC" },
2569 { 2, "IPMB-0 address of subsidiary EMMC" },
2570 { 3, "FRU Device ID of subsidiary FRU" },
2574 static const value_string picmg48_ip_sources[] = {
2575 { 0, "Not configured for HPM.3" },
2576 { 2, "DHCP assigned" },
2577 { 4, "DHCP Proxy assigned" },
2581 /* Get IP Address Source
2584 rq48(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2586 proto_tree_add_item(tree, hf_ipmi_picmg_01_rs_ipmbaddr,
2587 tvb, 0, 1, ENC_LITTLE_ENDIAN);
2588 if (tvb_captured_length(tvb) > 1) {
2589 proto_tree_add_item(tree, hf_ipmi_picmg48_sub_fru_type,
2590 tvb, 1, 1, ENC_LITTLE_ENDIAN);
2592 if (tvb_captured_length(tvb) > 2) {
2593 proto_tree_add_item(tree, hf_ipmi_picmg48_sub_fru_id,
2594 tvb, 2, 1, ENC_LITTLE_ENDIAN);
2599 rs48(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2601 proto_tree_add_item(tree, hf_ipmi_picmg48_ip_source,
2602 tvb, 0, 1, ENC_LITTLE_ENDIAN);
2605 static ipmi_cmd_t cmd_picmg[] = {
2606 /* AdvancedTCA Commands */
2607 { 0x00, NULL, rs00, NULL, NULL, "[ATCA] Get PICMG Properties", 0 },
2608 { 0x01, rq01, rs01, NULL, NULL, "[ATCA] Get Address Info", 0 },
2609 { 0x02, NULL, rs02, NULL, NULL, "[ATCA] Get Shelf Address Info", 0 },
2610 { 0x03, rq03, NULL, NULL, NULL, "[ATCA] Set Shelf Address Info", 0 },
2611 { 0x04, rq04, NULL, NULL, NULL, "[ATCA] FRU Control", 0 },
2612 { 0x05, rq05, rs05, NULL, NULL, "[ATCA] Get FRU LED Properties", 0 },
2613 { 0x06, rq06, rs06, NULL, NULL, "[ATCA] Get LED Color Capabilities", 0 },
2614 { 0x07, rq07, NULL, NULL, NULL, "[ATCA] Set FRU LED State", 0 },
2615 { 0x08, rq08, rs08, NULL, NULL, "[ATCA] Get FRU LED State", 0 },
2616 { 0x09, rq09, NULL, NULL, NULL, "[ATCA] Set IPMB State", 0 },
2617 { 0x0a, rq0a, NULL, NULL, NULL, "[ATCA] Set FRU Activation Policy", 0 },
2618 { 0x0b, rq0b, rs0b, NULL, NULL, "[ATCA] Get FRU Activation Policy", 0 },
2619 { 0x0c, rq0c, NULL, NULL, NULL, "[ATCA] Set FRU Activation", 0 },
2620 { 0x0d, rq0d, rs0d, NULL, NULL, "[ATCA] Get Device Locator Record ID", 0 },
2621 { 0x0e, rq0e, NULL, NULL, NULL, "[ATCA] Set Port State", 0 },
2622 { 0x0f, rq0f, rs0f, NULL, NULL, "[ATCA] Get Port State", 0 },
2623 { 0x10, rq10, rs10, NULL, NULL, "[ATCA] Compute Power Properties", 0 },
2624 { 0x11, rq11, NULL, NULL, NULL, "[ATCA] Set Power Level", 0 },
2625 { 0x12, rq12, rs12, NULL, NULL, "[ATCA] Get Power Level", 0 },
2626 { 0x13, rq13, NULL, NULL, NULL, "[ATCA] Renegotiate Power", 0 },
2627 { 0x14, rq14, rs14, NULL, NULL, "[ATCA] Get Fan Speed Properties", 0 },
2628 { 0x15, rq15, NULL, NULL, NULL, "[ATCA] Set Fan Level", 0 },
2629 { 0x16, rq16, rs16, NULL, NULL, "[ATCA] Get Fan Level", 0 },
2630 { 0x17, rq17, rs17, NULL, NULL, "[ATCA] Bused Resource Control", CMD_CALLRQ },
2631 { 0x18, rq18, rs18, NULL, NULL, "[ATCA] Get IPMB Link Info", 0 },
2632 { 0x19, rq19, NULL, NULL, NULL, "[AMC.0] Set AMC Port State", 0 },
2633 { 0x1a, rq1a, rs1a, NULL, NULL, "[AMC.0] Get AMC Port State", 0 },
2634 { 0x1b, NULL, rs1b, NULL, NULL, "[ATCA] Get Shelf Manager IPMB Address", 0 },
2635 { 0x1c, rq1c, NULL, NULL, NULL, "[ATCA] Set Fan Policy", 0 },
2636 { 0x1d, rq1d, rs1d, NULL, NULL, "[ATCA] Get Fan Policy", 0 },
2637 { 0x1e, rq1e, rs1e, NULL, NULL, "[ATCA] FRU Control Capabilities", 0 },
2638 { 0x1f, rq1f, rs1f, cc1f, NULL, "[ATCA] FRU Inventory Device Lock Control", 0 },
2639 { 0x20, rq20, rs20, cc20, NULL, "[ATCA] FRU Inventory Device Write", 0 },
2640 { 0x21, rq21, rs21, NULL, NULL, "[ATCA] Get Shelf Manager IP Addresses", 0 },
2641 { 0x22, rq22, rs22, NULL, NULL, "[ATCA] Get Shelf Power Allocation", CMD_CALLRQ },
2642 { 0x23, rq23, rs23, NULL, NULL, "[uTCA] Get Location Information", 0 },
2643 { 0x24, rq24, NULL, NULL, NULL, "[uTCA] Power Channel Control", 0 },
2644 { 0x25, rq25, rs25, NULL, NULL, "[uTCA] Get Power Channel Status", 0 },
2645 { 0x26, rq26, NULL, NULL, NULL, "[uTCA] PM Reset", 0 },
2646 { 0x27, rq26, rs27, NULL, NULL, "[uTCA] Get PM Status", 0 },
2647 { 0x28, rq28, NULL, cc28, NULL, "[uTCA] PM Heartbeat", 0 },
2648 { 0x29, rq05, rs29, NULL, NULL, "[uTCA] Get Telco Alarm Capability", 0 },
2649 { 0x2a, rq2a, NULL, NULL, NULL, "[uTCA] Set Telco Alarm State", 0 },
2650 { 0x2b, rq2b, rs2b, NULL, NULL, "[uTCA] Get Telco Alarm State", 0 },
2651 { 0x2c, rq2c, NULL, NULL, NULL, "[AMC.0] Set Clock State", 0 },
2652 { 0x2d, rq2d, rs2d, NULL, NULL, "[AMC.0] Get Clock State", 0 },
2653 { 0x2e, NULL, rs2e, cc2e, NULL, "[HPM.1] Get Target Upgrade Capabilities", 0 },
2654 { 0x2f, rq2f, rs2f, cc2f, NULL, "[HPM.1] Get Component Properties", CMD_CALLRQ },
2655 { 0x30, NULL, NULL, cc30, NULL, "[HPM.1] Abort Firmware Upgrade", 0 },
2656 { 0x31, rq31, NULL, cc31, NULL, "[HPM.1] Initiate Upgrade Action", 0 },
2657 { 0x32, rq32, rs32, cc32, NULL, "[HPM.1] Upload Firmware Block", 0 },
2658 { 0x33, rq33, NULL, cc33, NULL, "[HPM.1] Finish Firmware Upload", 0 },
2659 { 0x34, NULL, rs34, cc34, NULL, "[HPM.1] Get Upgrade Status", 0 },
2660 { 0x35, rq35, NULL, cc35, NULL, "[HPM.1] Activate Firmware", 0 },
2661 { 0x36, NULL, rs36, cc36, NULL, "[HPM.1] Query Self-test Results", 0 },
2662 { 0x37, NULL, rs37, cc37, NULL, "[HPM.1] Query Rollback Status", 0 },
2663 { 0x38, NULL, NULL, cc38, NULL, "[HPM.1] Initiate Manual Rollback", 0 },
2664 { 0x3e, rq3e, rs3e, NULL, NULL, "[HPM.2] Get HPM.x Capabilities", 0 },
2665 { 0x3f, rq3f, rs3f, NULL, NULL, "[HPM.2] Get Dynamic Credentials", 0 },
2666 { 0x40, rq40, rs40, cc40, NULL, "[HPM.2] Get Session Handle for Explicit LAN Bridging", 0 },
2667 { 0x41, NULL, rs41, NULL, NULL, "[HPM.2] Get ATCA Extended Management Resources", 0 },
2668 { 0x42, NULL, rs42, NULL, NULL, "[HPM.2] Get AMC Extended Management Resources", 0 },
2669 { 0x43, rq43, NULL, NULL, NULL, "[HPM.2] Set ATCA Extended Management State", 0 },
2670 { 0x44, NULL, rs44, NULL, NULL, "[HPM.2] Get ATCA Extended Management State", 0 },
2671 { 0x45, rq45, NULL, NULL, NULL, "[HPM.2] Set AMC Power State", 0 },
2672 { 0x46, NULL, rs46, NULL, NULL, "[HPM.2] Get AMC Power State", 0 },
2673 { 0x47, rq47, rs47, cc47, NULL, "[HPM.2] Assign SOL Payload Instance", 0 },
2674 { 0x48, rq48, rs48, NULL, NULL, "[HPM.3] Get IP Address Source", 0 }
2678 proto_register_ipmi_picmg(void)
2680 static hf_register_info hf[] = {
2681 { &hf_ipmi_picmg_led_function,
2683 "ipmi.led.function", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
2684 { &hf_ipmi_picmg_led_on_duration,
2686 "ipmi.led.on_duration", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
2687 { &hf_ipmi_picmg_led_color,
2689 "ipmi.led.color", FT_UINT8, BASE_HEX, VALS(led_color_vals), 0x0f, NULL, HFILL }},
2691 { &hf_ipmi_picmg_linkinfo_grpid,
2693 "ipmi.linkinfo.grpid", FT_UINT32, BASE_DEC, NULL, 0xff000000, NULL, HFILL }},
2694 { &hf_ipmi_picmg_linkinfo_type_ext,
2696 "ipmi.linkinfo.type_ext", FT_UINT32, BASE_HEX, NULL, 0x00f00000, NULL, HFILL }},
2697 { &hf_ipmi_picmg_linkinfo_type,
2699 "ipmi.linkinfo.type", FT_UINT32, BASE_HEX, VALS(linkinfo_type_vals), 0x000ff000, NULL, HFILL }},
2700 { &hf_ipmi_picmg_linkinfo_ports,
2702 "ipmi.linkinfo.ports", FT_UINT32, BASE_HEX, VALS(linkinfo_ports_vals), 0x00000f00, NULL, HFILL }},
2703 { &hf_ipmi_picmg_linkinfo_iface,
2705 "ipmi.linkinfo.iface", FT_UINT32, BASE_HEX, VALS(linkinfo_iface_vals), 0x000000c0, NULL, HFILL }},
2706 { &hf_ipmi_picmg_linkinfo_chan,
2708 "ipmi.linkinfo.chan", FT_UINT32, BASE_DEC, NULL, 0x0000003f, NULL, HFILL }},
2709 { &hf_ipmi_picmg_linkinfo_state,
2711 "ipmi.linkinfo.state", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
2712 { &hf_ipmi_picmg_linkinfo,
2714 "ipmi.linkinfo", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
2715 { &hf_ipmi_picmg_linkinfo_amc_chan,
2717 "ipmi.linkinfo.chan", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2718 { &hf_ipmi_picmg_linkinfo_amc_ports,
2720 "ipmi.linkinfo.ports", FT_UINT24, BASE_HEX, VALS(linkinfo_ports_vals), 0x00000f, NULL, HFILL }},
2721 { &hf_ipmi_picmg_linkinfo_amc_type,
2723 "ipmi.linkinfo.type", FT_UINT24, BASE_HEX, VALS(linkinfo_amc_type_vals), 0x000ff0, NULL, HFILL }},
2724 { &hf_ipmi_picmg_linkinfo_amc_type_ext,
2726 "ipmi.linkinfo.type_ext", FT_UINT24, BASE_HEX, NULL, 0x00f000, NULL, HFILL }},
2727 { &hf_ipmi_picmg_linkinfo_amc_grpid,
2729 "ipmi.linkinfo.grpid", FT_UINT24, BASE_DEC, NULL, 0xff0000, NULL, HFILL }},
2730 { &hf_ipmi_picmg_linkinfo_state_0,
2732 "ipmi.linkinfo.state0", FT_BOOLEAN, 8, NULL, 0x1, NULL, HFILL }},
2733 { &hf_ipmi_picmg_linkinfo_state_1,
2734 { "Extended Management Link",
2735 "ipmi.linkinfo.state1", FT_BOOLEAN, 8, NULL, 0x2, NULL, HFILL }},
2736 { &hf_ipmi_picmg_linkinfo_dev,
2737 { "On-Carrier Device",
2738 "ipmi.linkinfo.dev", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
2739 { &hf_ipmi_picmg_linkinfo_dev_type,
2741 "ipmi.linkinfo.dev.type", FT_UINT8, BASE_DEC, VALS(amc_resource_types), 0x80, NULL, HFILL }},
2742 { &hf_ipmi_picmg_linkinfo_dev_id,
2744 "ipmi.linkinfo.dev.id", FT_UINT8, BASE_DEC_HEX, NULL, 0xF, NULL, HFILL }},
2746 { &hf_ipmi_picmg_clock_id,
2748 "ipmi.clock.id", FT_UINT8, BASE_HEX, VALS(amc_clock_ids), 0, NULL, HFILL }},
2749 { &hf_ipmi_picmg_clock_cfg,
2750 { "Clock Configuration Descriptor Index",
2751 "ipmi.clock.cfg", FT_UINT8, BASE_DEC_HEX, NULL, 0, NULL, HFILL }},
2752 { &hf_ipmi_picmg_clock_setting,
2754 "ipmi.clock.setting", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
2755 { &hf_ipmi_picmg_clock_state,
2757 "ipmi.clock.state", FT_UINT8, BASE_DEC, VALS(enable_vals), 0x8, NULL, HFILL }},
2758 { &hf_ipmi_picmg_clock_dir,
2759 { "Clock Direction",
2760 "ipmi.clock.dir", FT_UINT8, BASE_DEC, VALS(amc_clock_dirs), 0x4, NULL, HFILL }},
2761 { &hf_ipmi_picmg_clock_pll,
2763 "ipmi.clock.pll", FT_UINT8, BASE_DEC, VALS(amc_clock_plls), 0x3, NULL, HFILL }},
2764 { &hf_ipmi_picmg_clock_family,
2766 "ipmi.clock.family", FT_UINT8, BASE_HEX|BASE_RANGE_STRING, RVALS(amc_clock_families), 0, NULL, HFILL }},
2767 { &hf_ipmi_picmg_clock_accuracy,
2769 "ipmi.clock.accu", FT_UINT8, BASE_HEX_DEC, NULL, 0, NULL, HFILL }},
2770 { &hf_ipmi_picmg_clock_frequency,
2771 { "Clock Frequency",
2772 "ipmi.clock.freq", FT_UINT32, BASE_DEC_HEX, NULL, 0, NULL, HFILL }},
2773 { &hf_ipmi_picmg_clock_resource,
2774 { "Clock Resource ID",
2775 "ipmi.clock.res", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
2776 { &hf_ipmi_picmg_clock_resource_type,
2778 "ipmi.clock.res.type", FT_UINT8, BASE_HEX, VALS(amc_clock_resource_types), 0xC0, NULL, HFILL }},
2779 { &hf_ipmi_picmg_clock_resource_dev,
2781 "ipmi.clock.res.id", FT_UINT8, BASE_DEC, NULL, 0x0F, NULL, HFILL }},
2783 { &hf_ipmi_picmg_00_version,
2784 { "PICMG Extension Version",
2785 "ipmi.picmg00.version", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_version), 0, NULL, HFILL }},
2786 { &hf_ipmi_picmg_00_max_fruid,
2787 { "Max FRU Device ID",
2788 "ipmi.picmg00.max_fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2789 { &hf_ipmi_picmg_00_ipmc_fruid,
2790 { "FRU Device ID for IPMC",
2791 "ipmi.picmg00.ipmc_fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2793 { &hf_ipmi_picmg_01_rq_fruid,
2795 "ipmi.picmg01.rq_fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2796 { &hf_ipmi_picmg_01_rq_addr_key_type,
2797 { "Address Key Type",
2798 "ipmi.picmg01.rq_addr_key_type", FT_UINT8, BASE_HEX, VALS(addr_key_type_vals), 0, NULL, HFILL }},
2799 { &hf_ipmi_picmg_01_rq_addr_key,
2801 "ipmi.picmg01.rq_addr_key", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
2802 { &hf_ipmi_picmg_01_rq_site_type,
2804 "ipmi.picmg01.rq_site_type", FT_UINT8, BASE_HEX, VALS(site_type_vals), 0, NULL, HFILL }},
2805 { &hf_ipmi_picmg_01_rs_hwaddr,
2806 { "Hardware Address",
2807 "ipmi.picmg01.rs_hwaddr", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
2808 { &hf_ipmi_picmg_01_rs_ipmbaddr,
2810 "ipmi.picmg01.rs_ipmbaddr", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
2811 { &hf_ipmi_picmg_01_rs_rsrv,
2812 { "Reserved (shall be 0xFF)",
2813 "ipmi.picmg01.rs_rsrv", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
2814 { &hf_ipmi_picmg_01_rs_fruid,
2816 "ipmi.picmg01.rs_fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2817 { &hf_ipmi_picmg_01_rs_site_num,
2819 "ipmi.picmg01.rs_site_num", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2820 { &hf_ipmi_picmg_01_rs_site_type,
2822 "ipmi.picmg01.rs_site_type", FT_UINT8, BASE_HEX, VALS(site_type_vals), 0, NULL, HFILL }},
2824 { &hf_ipmi_picmg_02_shelf_address,
2826 "ipmi.picmg02.shelf_address", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2827 { &hf_ipmi_picmg_02_shelf_type,
2829 "ipmi.picmg02.shelf_type", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL }},
2830 { &hf_ipmi_picmg_02_shelf_length,
2832 "ipmi.picmg02.shelf_length", FT_UINT8, BASE_DEC, NULL, 0x3f, NULL, HFILL }},
2834 { &hf_ipmi_picmg_03_shelf_address,
2836 "ipmi.picmg03.shelf_address", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2837 { &hf_ipmi_picmg_03_shelf_type,
2839 "ipmi.picmg03.shelf_type", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL }},
2840 { &hf_ipmi_picmg_03_shelf_length,
2842 "ipmi.picmg03.shelf_length", FT_UINT8, BASE_DEC, NULL, 0x3f, NULL, HFILL }},
2844 { &hf_ipmi_picmg_04_fruid,
2846 "ipmi.picmg04.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2847 { &hf_ipmi_picmg_04_cmd,
2849 "ipmi.picmg04.cmd", FT_UINT8, BASE_HEX, VALS(vals_04_cmd), 0, NULL, HFILL }},
2851 { &hf_ipmi_picmg_05_fruid,
2853 "ipmi.picmg05.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2854 { &hf_ipmi_picmg_05_led3,
2856 "ipmi.picmg05.led3", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2857 { &hf_ipmi_picmg_05_led2,
2859 "ipmi.picmg05.led2", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2860 { &hf_ipmi_picmg_05_led1,
2862 "ipmi.picmg05.led1", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2863 { &hf_ipmi_picmg_05_blue_led,
2865 "ipmi.picmg05.blue_led", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2866 { &hf_ipmi_picmg_05_app_leds,
2867 { "Application-specific LED Count",
2868 "ipmi.picmg05.app_leds", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2870 { &hf_ipmi_picmg_06_fruid,
2872 "ipmi.picmg06.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2873 { &hf_ipmi_picmg_06_ledid,
2875 "ipmi.picmg06.ledid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2876 { &hf_ipmi_picmg_06_cap_white,
2878 "ipmi.picmg06.cap_white", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2879 { &hf_ipmi_picmg_06_cap_orange,
2881 "ipmi.picmg06.cap_orange", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2882 { &hf_ipmi_picmg_06_cap_amber,
2884 "ipmi.picmg06.cap_amber", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2885 { &hf_ipmi_picmg_06_cap_green,
2887 "ipmi.picmg06.cap_green", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2888 { &hf_ipmi_picmg_06_cap_red,
2890 "ipmi.picmg06.cap_red", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2891 { &hf_ipmi_picmg_06_cap_blue,
2893 "ipmi.picmg06.cap_blue", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2894 { &hf_ipmi_picmg_06_default_local_color,
2895 { "Default LED Color in Local Control state",
2896 "ipmi.picmg06.def_local", FT_UINT8, BASE_HEX, VALS(led_color_vals), 0x0f, NULL, HFILL }},
2897 { &hf_ipmi_picmg_06_default_override_color,
2898 { "Default LED Color in Override state",
2899 "ipmi.picmg06.def_override", FT_UINT8, BASE_HEX, VALS(led_color_vals), 0x0f, NULL, HFILL }},
2901 { &hf_ipmi_picmg_07_fruid,
2903 "ipmi.picmg07.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2904 { &hf_ipmi_picmg_07_ledid,
2906 "ipmi.picmg07.ledid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2908 { &hf_ipmi_picmg_08_fruid,
2910 "ipmi.picmg08.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2911 { &hf_ipmi_picmg_08_ledid,
2913 "ipmi.picmg08.ledid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2914 { &hf_ipmi_picmg_08_state_lamptest,
2916 "ipmi.picmg08.state_lamptest", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2917 { &hf_ipmi_picmg_08_state_override,
2919 "ipmi.picmg08.state_override", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2920 { &hf_ipmi_picmg_08_state_local,
2922 "ipmi.picmg08.state_local", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2923 { &hf_ipmi_picmg_08_lamptest_duration,
2924 { "Lamp test duration",
2925 "ipmi.picmg08.lamptest_duration", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2927 { &hf_ipmi_picmg_09_ipmba,
2929 "ipmi.picmg09.ipmba", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
2930 { &hf_ipmi_picmg_09_ipmba_link,
2932 "ipmi.picmg09.ipmba_link", FT_UINT8, BASE_HEX, NULL, 0xFE, NULL, HFILL }},
2933 { &hf_ipmi_picmg_09_ipmba_state,
2935 "ipmi.picmg09.ipmba_state", FT_BOOLEAN, 8, TFS(&tfs_local_control_override), 0x01, NULL, HFILL }},
2936 { &hf_ipmi_picmg_09_ipmbb,
2938 "ipmi.picmg09.ipmbb", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
2939 { &hf_ipmi_picmg_09_ipmbb_link,
2941 "ipmi.picmg09.ipmbb_link", FT_UINT8, BASE_HEX, NULL, 0xFE, NULL, HFILL }},
2942 { &hf_ipmi_picmg_09_ipmbb_state,
2944 "ipmi.picmg09.ipmbb_state", FT_BOOLEAN, 8, TFS(&tfs_local_control_override), 0x01, NULL, HFILL }},
2946 { &hf_ipmi_picmg_0a_fruid,
2948 "ipmi.picmg0a.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2949 { &hf_ipmi_picmg_0a_msk_d_locked,
2950 { "Deactivation-Locked bit",
2951 "ipmi.picmg0a.msk_deactivation", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2952 { &hf_ipmi_picmg_0a_msk_locked,
2954 "ipmi.picmg0a.msk_locked", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2955 { &hf_ipmi_picmg_0a_d_locked,
2956 { "Deactivation-Locked bit",
2957 "ipmi.picmg0a.deactivation", FT_BOOLEAN, 8, TFS(&set_clear_tfs), 0x02, NULL, HFILL }},
2958 { &hf_ipmi_picmg_0a_locked,
2960 "ipmi.picmg0a.locked", FT_BOOLEAN, 8, TFS(&set_clear_tfs), 0x01, NULL, HFILL }},
2962 { &hf_ipmi_picmg_0b_fruid,
2964 "ipmi.picmg0b.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2965 { &hf_ipmi_picmg_0b_d_locked,
2966 { "Deactivation-Locked bit",
2967 "ipmi.picmg0b.deactivation", FT_BOOLEAN, 8, TFS(&set_clear_tfs), 0x02, NULL, HFILL }},
2968 { &hf_ipmi_picmg_0b_locked,
2970 "ipmi.picmg0b.locked", FT_BOOLEAN, 8, TFS(&set_clear_tfs), 0x01, NULL, HFILL }},
2972 { &hf_ipmi_picmg_0c_fruid,
2974 "ipmi.picmg0c.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2975 { &hf_ipmi_picmg_0c_cmd,
2977 "ipmi.picmg0c.cmd", FT_UINT8, BASE_HEX, VALS(vals_0c_cmd), 0, NULL, HFILL }},
2979 { &hf_ipmi_picmg_0d_fruid,
2981 "ipmi.picmg0d.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2982 { &hf_ipmi_picmg_0d_start,
2983 { "Search after record ID",
2984 "ipmi.picmg0d.start", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
2985 { &hf_ipmi_picmg_0d_recordid,
2987 "ipmi.picmg0d.recordid", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
2989 { &hf_ipmi_picmg_0f_iface,
2991 "ipmi.linkinfo.iface", FT_UINT8, BASE_HEX, VALS(linkinfo_iface_vals), 0x000000c0, NULL, HFILL }},
2992 { &hf_ipmi_picmg_0f_chan,
2994 "ipmi.linkinfo.chan", FT_UINT8, BASE_DEC, NULL, 0x0000003f, NULL, HFILL }},
2996 { &hf_ipmi_picmg_10_fruid,
2998 "ipmi.picmg10.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2999 { &hf_ipmi_picmg_10_nslots,
3000 { "Number of spanned slots",
3001 "ipmi.picmg10.nslots", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3002 { &hf_ipmi_picmg_10_ipmc_loc,
3004 "ipmi.picmg10.ipmc_loc", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3006 { &hf_ipmi_picmg_11_fruid,
3008 "ipmi.picmg11.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3009 { &hf_ipmi_picmg_11_power_level,
3011 "ipmi.picmg11.power_level", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3012 { &hf_ipmi_picmg_11_set_to_desired,
3013 { "Set Present Levels to Desired",
3014 "ipmi.picmg11.set_to_desired", FT_UINT8, BASE_HEX, VALS(vals_11_set), 0, NULL, HFILL }},
3016 { &hf_ipmi_picmg_12_fruid,
3018 "ipmi.picmg12.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3019 { &hf_ipmi_picmg_12_pwr_type,
3021 "ipmi.picmg12.pwr_type", FT_UINT8, BASE_HEX, VALS(vals_12_pwr_type), 0, NULL, HFILL }},
3022 { &hf_ipmi_picmg_12_dynamic,
3023 { "Dynamic Power Configuration",
3024 "ipmi.picmg12.dynamic", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
3025 { &hf_ipmi_picmg_12_pwr_lvl,
3027 "ipmi.picmg12.pwd_lvl", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3028 { &hf_ipmi_picmg_12_delay,
3029 { "Delay to stable power",
3030 "ipmi.picmg12.delay", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3031 { &hf_ipmi_picmg_12_pwr_mult,
3032 { "Power multiplier",
3033 "ipmi.picmg12.pwr_mult", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3034 { &hf_ipmi_picmg_12_pwr_draw,
3036 "ipmi.picmg12.pwr_draw", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3038 { &hf_ipmi_picmg_13_fruid,
3040 "ipmi.picmg13.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3042 { &hf_ipmi_picmg_14_fruid,
3044 "ipmi.picmg14.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3045 { &hf_ipmi_picmg_14_speed_min,
3046 { "Minimum Speed Level",
3047 "ipmi.picmg14.speed_min", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3048 { &hf_ipmi_picmg_14_speed_max,
3049 { "Maximum Speed Level",
3050 "ipmi.picmg14.speed_max", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3051 { &hf_ipmi_picmg_14_speed_norm,
3052 { "Normal Operating Level",
3053 "ipmi.picmg14.speed_norm", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3054 { &hf_ipmi_picmg_14_local_control,
3055 { "Local Control Mode Supported",
3056 "ipmi.picmg14.local_control", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
3058 { &hf_ipmi_picmg_15_fruid,
3060 "ipmi.picmg15.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3061 { &hf_ipmi_picmg_15_fan_level,
3063 "ipmi.picmg15.fan_level", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3064 { &hf_ipmi_picmg_15_local_enable,
3065 { "Local Control Enable State",
3066 "ipmi.picmg15.local_enable", FT_UINT8, BASE_HEX, VALS(enable_vals), 0, NULL, HFILL }},
3068 { &hf_ipmi_picmg_16_fruid,
3070 "ipmi.picmg16.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3071 { &hf_ipmi_picmg_16_override_level,
3072 { "Override Fan Level",
3073 "ipmi.picmg16.override_level", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3074 { &hf_ipmi_picmg_16_local_level,
3075 { "Local Control Fan Level",
3076 "ipmi.picmg16.local_level", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3077 { &hf_ipmi_picmg_16_local_enable,
3078 { "Local Control Enable State",
3079 "ipmi.picmg16.local_enable", FT_UINT8, BASE_HEX, VALS(enabled_vals), 0, NULL, HFILL }},
3081 { &hf_ipmi_picmg_17_cmd,
3083 "ipmi.picmg17.cmd", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3084 { &hf_ipmi_picmg_17_resid,
3085 { "Bused Resource ID",
3086 "ipmi.picmg17.resid", FT_UINT8, BASE_HEX, VALS(busresid_vals), 0, NULL, HFILL }},
3087 { &hf_ipmi_picmg_17_status,
3089 "ipmi.picmg17.status", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3091 { &hf_ipmi_picmg_18_li_key_type,
3092 { "Link Info Key Type",
3093 "ipmi.picmg18.li_key_type", FT_UINT8, BASE_HEX, VALS(vals_18_keytype), 0, NULL, HFILL }},
3094 { &hf_ipmi_picmg_18_li_key,
3096 "ipmi.picmg18.li_key", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3097 { &hf_ipmi_picmg_18_link_num,
3099 "ipmi.picmg18.link_num", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3100 { &hf_ipmi_picmg_18_sensor_num,
3102 "ipmi.picmg18.sensor_num", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3104 { &hf_ipmi_picmg_1a_flags,
3105 { "Extended Request Flags",
3106 "ipmi.picmg1a.flags", FT_UINT8, BASE_DEC_HEX, NULL, 0, NULL, HFILL }},
3108 { &hf_ipmi_picmg_1b_addr_active,
3109 { "Active Shelf Manager IPMB Address",
3110 "ipmi.picmg1b.addr_active", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3111 { &hf_ipmi_picmg_1b_addr_backup,
3112 { "Backup Shelf Manager IPMB Address",
3113 "ipmi.picmg1b.addr_backup", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3115 { &hf_ipmi_picmg_1c_fan_site_number,
3116 { "Fan Tray Site Number",
3117 "ipmi.picmg1c.fan_site_number", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3118 { &hf_ipmi_picmg_1c_fan_enable_state,
3119 { "Fan Enable state",
3120 "ipmi.picmg1c.fan_enable_state", FT_UINT8, BASE_HEX, VALS(enable_vals), 0, NULL, HFILL }},
3121 { &hf_ipmi_picmg_1c_fan_policy_timeout,
3122 { "Fan Policy Timeout",
3123 "ipmi.picmg1c.fan_policy_timeout", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_5s_1based), 0, NULL, HFILL }},
3124 { &hf_ipmi_picmg_1c_site_number,
3126 "ipmi.picmg1c.site_number", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3127 { &hf_ipmi_picmg_1c_site_type,
3129 "ipmi.picmg1c.site_type", FT_UINT8, BASE_HEX, VALS(site_type_vals), 0, NULL, HFILL }},
3131 { &hf_ipmi_picmg_1d_fan_site_number,
3132 { "Fan Tray Site Number",
3133 "ipmi.picmg1d.fan_site_number", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3134 { &hf_ipmi_picmg_1d_site_number,
3136 "ipmi.picmg1d.site_number", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3137 { &hf_ipmi_picmg_1d_site_type,
3139 "ipmi.picmg1d.site_type", FT_UINT8, BASE_HEX, VALS(site_type_vals), 0, NULL, HFILL }},
3140 { &hf_ipmi_picmg_1d_policy,
3142 "ipmi.picmg1d.fan_enable_state", FT_UINT8, BASE_HEX, VALS(vals_1d_policy), 0, NULL, HFILL }},
3143 { &hf_ipmi_picmg_1d_coverage,
3145 "ipmi.picmg1d.coverage", FT_UINT8, BASE_HEX, VALS(vals_1d_coverage), 0, NULL, HFILL }},
3147 { &hf_ipmi_picmg_1e_fruid,
3149 "ipmi.picmg1e.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3150 { &hf_ipmi_picmg_1e_cap_diagintr,
3151 { "Diagnostic interrupt",
3152 "ipmi.picmg1e.cap_diagintr", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
3153 { &hf_ipmi_picmg_1e_cap_graceful_reboot,
3154 { "Graceful reboot",
3155 "ipmi.picmg1e.cap_reboot", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
3156 { &hf_ipmi_picmg_1e_cap_warm_reset,
3158 "ipmi.picmg1e.cap_warmreset", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
3160 { &hf_ipmi_picmg_1f_rq_fruid,
3162 "ipmi.picmg1f.rq_fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3163 { &hf_ipmi_picmg_1f_rq_op,
3165 "ipmi.picmg1f.rq_op", FT_UINT8, BASE_HEX, VALS(vals_1f_op), 0, NULL, HFILL }},
3166 { &hf_ipmi_picmg_1f_rq_lockid,
3168 "ipmi.picmg1f.rq_lockid", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
3169 { &hf_ipmi_picmg_1f_rs_lockid,
3171 "ipmi.picmg1f.rs_lockid", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
3172 { &hf_ipmi_picmg_1f_rs_tstamp,
3173 { "Last Commit Timestamp",
3174 "ipmi.picmg1f.rs_tstamp", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
3176 { &hf_ipmi_picmg_20_fruid,
3178 "ipmi.picmg20.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3179 { &hf_ipmi_picmg_20_lockid,
3181 "ipmi.picmg20.lockid", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
3182 { &hf_ipmi_picmg_20_offset,
3183 { "Offset to write",
3184 "ipmi.picmg20.offset", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
3185 { &hf_ipmi_picmg_20_data,
3187 "ipmi.picmg20.data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
3188 { &hf_ipmi_picmg_20_count,
3190 "ipmi.picmg20.count", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
3192 { &hf_ipmi_picmg_21_addr_num,
3194 "ipmi.picmg21.addr_num", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3195 { &hf_ipmi_picmg_21_tstamp,
3196 { "Shelf IP Address Last Change Timestamp",
3197 "ipmi.picmg21.tstamp", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
3198 { &hf_ipmi_picmg_21_addr_count,
3200 "ipmi.picmg21.addr_count", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3201 { &hf_ipmi_picmg_21_site_type,
3203 "ipmi.picmg21.site_type", FT_UINT8, BASE_HEX, VALS(site_type_vals), 0, NULL, HFILL }},
3204 { &hf_ipmi_picmg_21_site_num,
3206 "ipmi.picmg21.site_num", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3207 { &hf_ipmi_picmg_21_max_unavail,
3208 { "Maximum Unavailable Time",
3209 "ipmi.picmg21.max_unavail", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_1s_1based), 0, NULL, HFILL }},
3210 { &hf_ipmi_picmg_21_is_shm,
3211 { "Shelf Manager IP Address",
3212 "ipmi.picmg21.is_shm", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
3213 { &hf_ipmi_picmg_21_addr_type,
3215 "ipmi.picmg21.addr_type", FT_UINT8, BASE_HEX, NULL, 0x7f, NULL, HFILL }},
3216 { &hf_ipmi_picmg_21_ipaddr,
3218 "ipmi.picmg21.ip_addr", FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }},
3219 { &hf_ipmi_picmg_21_rmcpport,
3221 "ipmi.picmg21.rmcp_port", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
3223 { &hf_ipmi_picmg_22_feed_idx,
3224 { "Power Feed Index",
3225 "ipmi.picmg22.feed_idx", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3226 { &hf_ipmi_picmg_22_update_cnt,
3228 "ipmi.picmg22.update_cnt", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
3229 { &hf_ipmi_picmg_22_pwr_alloc,
3230 { "Power Feed Allocation",
3231 "ipmi.picmg22.pwr_alloc", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
3233 { &hf_ipmi_picmg_XX_comp7,
3235 "ipmi.hpm1.comp7", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
3236 { &hf_ipmi_picmg_XX_comp6,
3238 "ipmi.hpm1.comp6", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
3239 { &hf_ipmi_picmg_XX_comp5,
3241 "ipmi.hpm1.comp5", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
3242 { &hf_ipmi_picmg_XX_comp4,
3244 "ipmi.hpm1.comp4", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
3245 { &hf_ipmi_picmg_XX_comp3,
3247 "ipmi.hpm1.comp3", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
3248 { &hf_ipmi_picmg_XX_comp2,
3250 "ipmi.hpm1.comp2", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
3251 { &hf_ipmi_picmg_XX_comp1,
3253 "ipmi.hpm1.comp1", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
3254 { &hf_ipmi_picmg_XX_comp0,
3256 "ipmi.hpm1.comp0", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
3258 { &hf_ipmi_picmg_2e_version,
3260 "ipmi.picmg2e.hpm1_version", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3261 { &hf_ipmi_picmg_2e_upgrade_undesirable,
3262 { "Firmware Upgrade Undesirable",
3263 "ipmi.picmg2e.upgrade_undesirable", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
3264 { &hf_ipmi_picmg_2e_auto_rollback_override,
3265 { "Automatic Rollback Overridden",
3266 "ipmi.picmg2e.auto_rollback_override", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
3267 { &hf_ipmi_picmg_2e_ipmc_degraded,
3268 { "IPMC degraded during upgrade",
3269 "ipmi.picmg2e.ipmc_degraded", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
3270 { &hf_ipmi_picmg_2e_deferred_activate,
3271 { "Deferred Activation supported",
3272 "ipmi.picmg2e.deferred_activate", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
3273 { &hf_ipmi_picmg_2e_services_affected,
3274 { "Services affected by upgrade",
3275 "ipmi.picmg2e.services_affected", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
3276 { &hf_ipmi_picmg_2e_manual_rollback,
3277 { "Manual Rollback supported",
3278 "ipmi.picmg2e.manual_rollback", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
3279 { &hf_ipmi_picmg_2e_auto_rollback,
3280 { "Automatic Rollback supported",
3281 "ipmi.picmg2e.auto_rollback", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
3282 { &hf_ipmi_picmg_2e_self_test,
3283 { "Self-Test supported",
3284 "ipmi.picmg2e.self_test", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
3285 { &hf_ipmi_picmg_2e_upgrade_tout,
3286 { "Upgrade timeout",
3287 "ipmi.picmg2e.upgrade_tout", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_5s_1based), 0, NULL, HFILL }},
3288 { &hf_ipmi_picmg_2e_selftest_tout,
3289 { "Self-test timeout",
3290 "ipmi.picmg2e.selftest_tout", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_5s_1based), 0, NULL, HFILL }},
3291 { &hf_ipmi_picmg_2e_rollback_tout,
3292 { "Rollback timeout",
3293 "ipmi.picmg2e.rollback_tout", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_5s_1based), 0, NULL, HFILL }},
3294 { &hf_ipmi_picmg_2e_inaccessibility_tout,
3295 { "Inaccessibility timeout",
3296 "ipmi.picmg2e.inaccessibility_tout", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_5s_1based), 0, NULL, HFILL }},
3298 { &hf_ipmi_picmg_prop00_cold_reset,
3299 { "Payload cold reset required",
3300 "ipmi.prop00.cold_reset", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
3301 { &hf_ipmi_picmg_prop00_deferred_activation,
3302 { "Deferred firmware activation supported",
3303 "ipmi.prop00.deferred_activation", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
3304 { &hf_ipmi_picmg_prop00_comparison,
3305 { "Firmware comparison supported",
3306 "ipmi.prop00.firmware_comparison", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
3307 { &hf_ipmi_picmg_prop00_preparation,
3308 { "Prepare Components action required",
3309 "ipmi.prop00.preparation", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
3310 { &hf_ipmi_picmg_prop00_rollback,
3311 { "Rollback/Backup support",
3312 "ipmi.prop00.rollback", FT_UINT8, BASE_HEX, VALS(vals_prop00_rollback), 0x03, NULL, HFILL }},
3313 { &hf_ipmi_picmg_prop01_fw_major,
3314 { "Major Firmware Revision (binary encoded)",
3315 "ipmi.prop01.fw_major", FT_UINT8, BASE_HEX, NULL, 0x7f, NULL, HFILL }},
3316 { &hf_ipmi_picmg_prop01_fw_minor,
3317 { "Minor Firmware Revision (BCD encoded)",
3318 "ipmi.prop01.fw_minor", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3319 { &hf_ipmi_picmg_prop01_fw_aux,
3320 { "Auxiliary Firmware Revision Information",
3321 "ipmi.prop01.fw_aux", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
3322 { &hf_ipmi_picmg_prop02_desc,
3323 { "Description string",
3324 "ipmi.prop02.desc", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3326 { &hf_ipmi_picmg_2f_comp_id,
3328 "ipmi.picmg2f.comp_id", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3329 { &hf_ipmi_picmg_2f_comp_prop,
3330 { "Component property selector",
3331 "ipmi.picmg2f.comp_prop", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3332 { &hf_ipmi_picmg_2f_prop_data,
3333 { "Unknown property data",
3334 "ipmi.picmg2f.prop_data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
3336 { &hf_ipmi_picmg_31_action,
3338 "ipmi.picmg31.action", FT_UINT8, BASE_HEX, VALS(vals_31_action), 0, NULL, HFILL }},
3340 { &hf_ipmi_picmg_32_block,
3342 "ipmi.picmg32.block", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3343 { &hf_ipmi_picmg_32_data,
3345 "ipmi.picmg32.data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
3346 { &hf_ipmi_picmg_32_sec_offs,
3348 "ipmi.picmg32.sec_offs", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
3349 { &hf_ipmi_picmg_32_sec_len,
3351 "ipmi.picmg32.sec_len", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
3353 { &hf_ipmi_picmg_33_comp_id,
3355 "ipmi.picmg33.comp_id", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3356 { &hf_ipmi_picmg_33_img_len,
3358 "ipmi.picmg33.img_len", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
3360 { &hf_ipmi_picmg_34_cmd,
3361 { "Command in progress",
3362 "ipmi.picmg34.cmd", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3363 { &hf_ipmi_picmg_34_ccode,
3364 { "Last command completion code",
3365 "ipmi.picmg34.ccode", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3366 { &hf_ipmi_picmg_34_percentage,
3367 { "Completion estimate",
3368 "ipmi.picmg34.percent", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_percent), 0x7f, NULL, HFILL }},
3370 { &hf_ipmi_picmg_35_rollback_override,
3371 { "Rollback Override Policy",
3372 "ipmi.picmg35.rollback_override", FT_UINT8, BASE_HEX, VALS(vals_35_override), 0, NULL, HFILL }},
3374 { &hf_ipmi_picmg_36_result,
3375 { "Self test result",
3376 "ipmi.picmg36.self_test_result", FT_UINT8, BASE_HEX, VALS(vals_36_result), 0, NULL, HFILL }},
3377 { &hf_ipmi_picmg_36_fail,
3378 { "Self-test error bitfield",
3379 "ipmi.picmg36.fail", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3380 { &hf_ipmi_picmg_36_fail_sel,
3381 { "Cannot access SEL device",
3382 "ipmi.picmg36.fail.sel", FT_BOOLEAN, 8, TFS(&tfs_36_fail_unknown), 0x80, NULL, HFILL }},
3383 { &hf_ipmi_picmg_36_fail_sdr,
3384 { "Cannot access SDR Repository",
3385 "ipmi.picmg36.fail.sdr", FT_BOOLEAN, 8, TFS(&tfs_36_fail_unknown), 0x40, NULL, HFILL }},
3386 { &hf_ipmi_picmg_36_fail_bmc_fru,
3387 { "Cannot access BMC FRU device",
3388 "ipmi.picmg36.fail.bmc_fru", FT_BOOLEAN, 8, TFS(&tfs_36_fail_unknown), 0x20, NULL, HFILL }},
3389 { &hf_ipmi_picmg_36_fail_ipmb_sig,
3390 { "IPMB signal lines do not respond",
3391 "ipmi.picmg36.fail.ipmb_sig", FT_BOOLEAN, 8, TFS(&tfs_36_fail_unknown), 0x10, NULL, HFILL }},
3392 { &hf_ipmi_picmg_36_fail_sdr_empty,
3393 { "SDR Repository is empty",
3394 "ipmi.picmg36.fail.sdr_empty", FT_BOOLEAN, 8, TFS(&tfs_36_fail_unknown), 0x08, NULL, HFILL }},
3395 { &hf_ipmi_picmg_36_fail_iua,
3396 { "Internal Use Area of BMC FRU corrupted",
3397 "ipmi.picmg36.fail.iua", FT_BOOLEAN, 8, TFS(&tfs_36_fail_unknown), 0x04, NULL, HFILL }},
3398 { &hf_ipmi_picmg_36_fail_bb_fw,
3399 { "Controller update boot block firmware corrupted",
3400 "ipmi.picmg36.fail.bb_fw", FT_BOOLEAN, 8, TFS(&tfs_36_fail_unknown), 0x02, NULL, HFILL }},
3401 { &hf_ipmi_picmg_36_fail_oper_fw,
3402 { "Controller operational firmware corrupted",
3403 "ipmi.picmg36.fail.oper_fw", FT_BOOLEAN, 8, TFS(&tfs_36_fail_unknown), 0x01, NULL, HFILL }},
3405 { &hf_ipmi_picmg_37_percent,
3406 { "Estimated percentage complete",
3407 "ipmi.picmg37.percent", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_percent), 0x7f, NULL, HFILL }},
3409 { &hf_ipmi_picmg_hpm_id,
3410 { "HPM.x Identifier",
3411 "ipmi.picmg.hpm.id", FT_UINT8, BASE_HEX, VALS(hpm_x_ids), 0, NULL, HFILL }},
3412 { &hf_ipmi_picmg_hpm_rev,
3413 { "HPM.x Revision Identifier",
3414 "ipmi.picmg.hpm.rev", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3415 { &hf_ipmi_picmg_hpm2_mask,
3416 { "IPMI LAN Channel Mask",
3417 "ipmi.picmg.hpm2.mask", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
3418 { &hf_ipmi_picmg_hpm2_caps,
3419 { "HPM.2 Capabilities",
3420 "ipmi.picmg.hpm2.caps", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3421 { &hf_ipmi_picmg_hpm2_dyn_ssn,
3422 { "Dynamic Sessions",
3423 "ipmi.picmg.hpm2.dynssn", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
3424 { &hf_ipmi_picmg_hpm2_ver_chg,
3425 { "Version Change Sensor for LAN Configuration",
3426 "ipmi.picmg.hpm2.verchg", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
3427 { &hf_ipmi_picmg_hpm2_ext_mgt,
3428 { "Extended Inactive State Management",
3429 "ipmi.picmg.hpm2.extmgt", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
3430 { &hf_ipmi_picmg_hpm2_pkt_trc,
3431 { "IPMI Channel Packet Trace",
3432 "ipmi.picmg.hpm2.pkttrc", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
3433 { &hf_ipmi_picmg_hpm2_sol_ext,
3435 "ipmi.picmg.hpm2.solext", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
3436 { &hf_ipmi_picmg_hpm_oem_start,
3437 { "OEM LAN Parameters Start Location",
3438 "ipmi.picmg.hpm.oem.start", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3439 { &hf_ipmi_picmg_hpm_oem_rev,
3440 { "OEM LAN Parameters Blocks Revision Number",
3441 "ipmi.picmg.hpm.oem.rev", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3442 { &hf_ipmi_picmg_hpm2_sol_oem_start,
3443 { "OEM SOL Parameters Start Location",
3444 "ipmi.picmg.hpm2.sol.oem.start", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3445 { &hf_ipmi_picmg_hpm2_sol_oem_rev,
3446 { "OEM SOL Parameters Blocks Revision Number",
3447 "ipmi.picmg.hpm2.sol.oem.rev", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3448 { &hf_ipmi_picmg_hpm_cred_hnd,
3449 { "Credentials Handle",
3450 "ipmi.picmg.hpm.cred.hnd", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3451 { &hf_ipmi_picmg_hpm_func_sel,
3452 { "Function Selector",
3453 "ipmi.picmg.hpm.func.sel", FT_UINT8, BASE_DEC, VALS(hpm2_func_selectors), 0, NULL, HFILL }},
3454 { &hf_ipmi_picmg_hpm_ipmi_rev,
3456 "ipmi.picmg.hpm.ipmi.rev", FT_UINT8, BASE_HEX, VALS(hpm2_ipmi_revs), 0, NULL, HFILL }},
3457 { &hf_ipmi_picmg_hpm_auth_type,
3458 { "Authentication Type",
3459 "ipmi.picmg.hpm.auth.type", FT_UINT8, BASE_HEX, VALS(hpm2_auth_types), 0, NULL, HFILL }},
3460 { &hf_ipmi_picmg_hpm_cipher_id,
3461 { "Cipher Suite ID",
3462 "ipmi.picmg.hpm.cipher", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3463 { &hf_ipmi_picmg_hpm_priv_level,
3464 { "Maximum Privilege Level",
3465 "ipmi.picmg.hpm.priv", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3466 { &hf_ipmi_picmg_hpm_chn_num,
3467 { "IPMI Lan Channel Number",
3468 "ipmi.picmg.hpm.chn.num", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3469 { &hf_ipmi_picmg_hpm_avail_time,
3470 { "Availability Time",
3471 "ipmi.picmg.hpm.avail", FT_UINT32, BASE_DEC_HEX, NULL, 0, NULL, HFILL }},
3472 { &hf_ipmi_picmg_hpm_user_name,
3474 "ipmi.picmg.hpm.user.name", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
3475 { &hf_ipmi_picmg_hpm_user_pwd,
3477 "ipmi.picmg.hpm.user.pwd", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
3478 { &hf_ipmi_picmg_hpm_bmc_key,
3480 "ipmi.picmg.hpm.bmc.key", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
3481 { &hf_ipmi_picmg_hpm_operation,
3482 { "Command Operation Mode",
3483 "ipmi.picmg.hpm.operation", FT_UINT8, BASE_DEC, VALS(picmg40_operations), 0, NULL, HFILL }},
3484 { &hf_ipmi_picmg_hpm_ssn_hnd,
3486 "ipmi.picmg.hpm.ssn.hnd", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3487 { &hf_ipmi_picmg_hpm_power_draw,
3488 { "Extended Management Power Draw",
3489 "ipmi.picmg.hpm.pwr.draw", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3490 { &hf_ipmi_picmg_hpm_base_channels,
3491 { "Base Interface Channels",
3492 "ipmi.picmg.hpm.base.chn", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
3493 { &hf_ipmi_picmg_hpm_fabric_channels,
3494 { "Fabric Interface Channels",
3495 "ipmi.picmg.hpm.base.chn", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
3496 { &hf_ipmi_picmg_hpm_update_channels,
3497 { "Update Channels",
3498 "ipmi.picmg.hpm.upd.chn", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3499 { &hf_ipmi_picmg_hpm_cross_channels,
3500 { "ShMC Cross-Connect Channels",
3501 "ipmi.picmg.hpm.cross.chn", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3502 { &hf_ipmi_picmg_hpm_num_chn_desc,
3503 { "Number of Channel Descriptors",
3504 "ipmi.picmg.hpm.num.chn.desc", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3505 { &hf_ipmi_picmg_hpm_chn_mask,
3506 { "Channel Bitmask",
3507 "ipmi.picmg.hpm.chn.mask", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
3508 { &hf_ipmi_picmg_hpm_ext_mgmt_state,
3509 { "Extended Management State",
3510 "ipmi.picmg.hpm.ext.mgmt.state", FT_UINT8, BASE_DEC, VALS(enable_vals), 0, NULL, HFILL }},
3511 { &hf_ipmi_picmg_hpm_polling_period,
3513 "ipmi.picmg.hpm.poll.period", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3514 { &hf_ipmi_picmg_hpm_auth_pwr_state,
3515 { "Authorized Power State",
3516 "ipmi.picmg.hpm.auth.pwr", FT_UINT8, BASE_DEC, VALS(auth_pwr_states), 0, NULL, HFILL }},
3517 { &hf_ipmi_picmg_hpm_amc_pwr_state,
3518 { "Actual Power State",
3519 "ipmi.picmg.hpm.amc.pwr", FT_UINT8, BASE_DEC, VALS(amc_pwr_states), 0, NULL, HFILL }},
3521 { &hf_ipmi_picmg47_port,
3522 { "System Serial Port Number",
3523 "ipmi.picmg47.port", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3524 { &hf_ipmi_picmg47_flags,
3526 "ipmi.picmg47.flags", FT_UINT8, BASE_DEC, VALS(picmg47_flags), 0x01, NULL, HFILL }},
3527 { &hf_ipmi_picmg47_assignment,
3528 { "Assigned Instance",
3529 "ipmi.picmg47.assign", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3530 { &hf_ipmi_picmg47_state,
3531 { "Serial port assigned to instance state",
3532 "ipmi.picmg47.state", FT_UINT8, BASE_DEC, VALS(picmg47_states), 0x80, NULL, HFILL }},
3533 { &hf_ipmi_picmg47_instance,
3534 { "Payload instance number",
3535 "ipmi.picmg47.instance", FT_UINT8, BASE_DEC, NULL, 0x0F, NULL, HFILL }},
3537 { &hf_ipmi_picmg48_sub_fru_type,
3538 { "Subsidiary FRU Identifier Type",
3539 "ipmi.picmg48.fru.type", FT_UINT8, BASE_DEC, VALS(picmg48_fru_types), 0, NULL, HFILL }},
3540 { &hf_ipmi_picmg48_sub_fru_id,
3541 { "Subsidiary FRU Identifier",
3542 "ipmi.picmg48.fru.id", FT_UINT8, BASE_DEC_HEX, NULL, 0, NULL, HFILL }},
3543 { &hf_ipmi_picmg48_ip_source,
3544 { "IP Address Source",
3545 "ipmi.picmg48.ip.source", FT_UINT8, BASE_DEC, VALS(picmg48_ip_sources), 0, NULL, HFILL }},
3547 { &hf_ipmi_picmg_23_rq_byte2,
3549 "ipmi.picmg23.rq.flags", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3550 { &hf_ipmi_picmg_23_slot_sel,
3552 "ipmi.picmg23.rq.mcs", FT_UINT8, BASE_HEX, VALS(picmg_23_slot_selectors), 0xC0, NULL, HFILL }},
3553 { &hf_ipmi_picmg_23_carrier_num,
3555 "ipmi.picmg23.carrier.num", FT_UINT8, BASE_DEC, NULL, 0x1F, NULL, HFILL }},
3556 { &hf_ipmi_picmg_23_slot_num,
3558 "ipmi.picmg23.slot.num", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3559 { &hf_ipmi_picmg_23_tier_num,
3561 "ipmi.picmg23.tier.num", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3562 { &hf_ipmi_picmg_23_rs_byte5,
3563 { "Orientation Flags",
3564 "ipmi.picmg23.rs.flags", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3565 { &hf_ipmi_picmg_23_slot_base,
3567 "ipmi.picmg23.slot.base", FT_UINT8, BASE_DEC, VALS(picmg_23_num_bases), 0x80, NULL, HFILL }},
3568 { &hf_ipmi_picmg_23_tier_base,
3570 "ipmi.picmg23.tier.base", FT_UINT8, BASE_DEC, VALS(picmg_23_num_bases), 0x40, NULL, HFILL }},
3571 { &hf_ipmi_picmg_23_orientation,
3572 { "Carrier Orientation",
3573 "ipmi.picmg23.orient", FT_UINT8, BASE_DEC, VALS(picmg_23_orientations), 0x20, NULL, HFILL }},
3574 { &hf_ipmi_picmg_23_origin_x,
3576 "ipmi.picmg23.origin.x", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
3577 { &hf_ipmi_picmg_23_origin_y,
3579 "ipmi.picmg23.origin.y", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
3581 { &hf_ipmi_picmg_24_channel,
3582 { "Power Channel Number",
3583 "ipmi.picmg.pwr.channel", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3584 { &hf_ipmi_picmg_24_control,
3585 { "Power Channel Control",
3586 "ipmi.picmg.pwr.control", FT_UINT8, BASE_DEC, VALS(picmg_24_controls), 0, NULL, HFILL }},
3587 { &hf_ipmi_picmg_24_current,
3588 { "Power Channel Current Limit",
3589 "ipmi.picmg.pwr.limit", FT_UINT8, BASE_CUSTOM, CF_FUNC(fmt_power_amps), 0, NULL, HFILL }},
3590 { &hf_ipmi_picmg_24_primary_pm,
3592 "ipmi.picmg.primary.pm", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3593 { &hf_ipmi_picmg_24_backup_pm,
3595 "ipmi.picmg.backup.pm", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3597 { &hf_ipmi_picmg_25_start,
3598 { "Starting Power Channel Number",
3599 "ipmi.picmg25.start", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3600 { &hf_ipmi_picmg_25_count,
3601 { "Power Channel Count",
3602 "ipmi.picmg25.count", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3603 { &hf_ipmi_picmg_25_max,
3604 { "Max Power Channel Number",
3605 "ipmi.picmg25.max", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3606 { &hf_ipmi_picmg_25_gstatus,
3608 "ipmi.picmg25.gstatus", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3609 { &hf_ipmi_picmg_25_fault,
3610 { "Unidentified Fault",
3611 "ipmi.picmg25.fault", FT_UINT8, BASE_DEC, VALS(picmg_25_fault_vals), 0x08, NULL, HFILL }},
3612 { &hf_ipmi_picmg_25_pwr_good,
3613 { "Payload Power is Good",
3614 "ipmi.picmg25.pwr.good", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
3615 { &hf_ipmi_picmg_25_mp_good,
3616 { "Management Power is Good",
3617 "ipmi.picmg25.mp.good", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
3618 { &hf_ipmi_picmg_25_role,
3620 "ipmi.picmg25.role", FT_BOOLEAN, 8, TFS(&picmg_25_roles), 0x01, NULL, HFILL }},
3621 { &hf_ipmi_picmg_25_cstatus,
3622 { "Power Channel Status",
3623 "ipmi.picmg25.cstatus", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3624 { &hf_ipmi_picmg_25_pwr_on,
3625 { "PWR_ON is asserted",
3626 "ipmi.picmg25.pwr.on", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
3627 { &hf_ipmi_picmg_25_pwr_ovr,
3628 { "Payload Power Overcurrent is detected",
3629 "ipmi.picmg25.pwr.ovr", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
3630 { &hf_ipmi_picmg_25_pwr,
3631 { "Payload Power is enabled",
3632 "ipmi.picmg25.pwr", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
3633 { &hf_ipmi_picmg_25_enable,
3634 { "ENABLE# is asserted",
3635 "ipmi.picmg25.enable", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
3636 { &hf_ipmi_picmg_25_mp_ovr,
3637 { "Management Power Overcurrent is detected",
3638 "ipmi.picmg25.mp.ovr", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
3639 { &hf_ipmi_picmg_25_mp,
3640 { "Management Power is enabled",
3641 "ipmi.picmg25.mp", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
3642 { &hf_ipmi_picmg_25_ps1,
3643 { "PS1# is asserted",
3644 "ipmi.picmg25.ps1", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
3646 { &hf_ipmi_picmg_26_pm_site,
3648 "ipmi.picmg26.pm.site", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3649 { &hf_ipmi_picmg_27_rs_byte3,
3651 "ipmi.picmg26.pm.status", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3652 { &hf_ipmi_picmg_27_pm_healthy,
3653 { "PM is present and healthy",
3654 "ipmi.picmg26.pm.hly", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
3655 { &hf_ipmi_picmg_28_timeout,
3657 "ipmi.picmg28.timeout", FT_UINT8, BASE_CUSTOM, CF_FUNC(fmt_100ms), 0, NULL, HFILL }},
3658 { &hf_ipmi_picmg_28_rq_byte3,
3660 "ipmi.picmg28.flags", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3661 { &hf_ipmi_picmg_28_mch2,
3662 { "Use MCH2 PS1# de-assertion to indicate Carrier Manager is extracted",
3663 "ipmi.picmg28.mch2", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
3664 { &hf_ipmi_picmg_28_mch1,
3665 { "Use MCH1 PS1# de-assertion to indicate Carrier Manager is extracted",
3666 "ipmi.picmg28.mch1", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
3668 { &hf_ipmi_picmg_29_rs_byte3,
3669 { "Alarm Capabilities",
3670 "ipmi.picmg29.caps", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3671 { &hf_ipmi_picmg_29_maj_rst,
3672 { "Autonomous Major Reset",
3673 "ipmi.picmg29.maj.rst", FT_BOOLEAN, 8, TFS(&picmg_29_alarm_actions), 0x80, NULL, HFILL }},
3674 { &hf_ipmi_picmg_29_min_rst,
3675 { "Autonomous Minor Reset",
3676 "ipmi.picmg29.min.rst", FT_BOOLEAN, 8, TFS(&picmg_29_alarm_actions), 0x40, NULL, HFILL }},
3677 { &hf_ipmi_picmg_29_alarm_cut,
3678 { "Autonomous alarm cutoff",
3679 "ipmi.picmg29.alrm.cut", FT_BOOLEAN, 8, TFS(&picmg_29_alarm_actions), 0x20, NULL, HFILL }},
3680 { &hf_ipmi_picmg_29_test_mode,
3682 "ipmi.picmg29.test.mode", FT_BOOLEAN, 8, TFS(&picmg_29_alarm_modes), 0x10, NULL, HFILL }},
3683 { &hf_ipmi_picmg_29_pwr_alarm,
3685 "ipmi.picmg29.pwr.alrm", FT_BOOLEAN, 8, TFS(&picmg_29_alarm_modes), 0x08, NULL, HFILL }},
3686 { &hf_ipmi_picmg_29_minor_alarm,
3688 "ipmi.picmg29.min.alrm", FT_BOOLEAN, 8, TFS(&picmg_29_alarm_modes), 0x04, NULL, HFILL }},
3689 { &hf_ipmi_picmg_29_major_alarm,
3691 "ipmi.picmg29.maj.alrm", FT_BOOLEAN, 8, TFS(&picmg_29_alarm_modes), 0x02, NULL, HFILL }},
3692 { &hf_ipmi_picmg_29_crit_alarm,
3694 "ipmi.picmg29.crit.alrm", FT_BOOLEAN, 8, TFS(&picmg_29_alarm_modes), 0x01, NULL, HFILL }},
3696 { &hf_ipmi_picmg_2a_alarm_id,
3698 "ipmi.picmg29.alrm.id", FT_UINT8, BASE_HEX, VALS(picmg_2a_alarm_ids), 0, NULL, HFILL }},
3699 { &hf_ipmi_picmg_2a_alarm_ctrl,
3701 "ipmi.picmg29.alrm.ctrl", FT_UINT8, BASE_HEX, VALS(picmg_2a_alarm_ctrls), 0, NULL, HFILL }},
3703 { &hf_ipmi_picmg_2b_alarm_state,
3705 "ipmi.picmg29.alrm.ctrl", FT_UINT8, BASE_HEX, VALS(picmg_2a_alarm_ctrls), 0, NULL, HFILL }},
3708 static gint *ett[] = {
3709 &ett_ipmi_picmg_led_color,
3710 &ett_ipmi_picmg_link_info,
3711 &ett_ipmi_picmg_link_state,
3712 &ett_ipmi_picmg_link_dev,
3713 &ett_ipmi_picmg_clock_setting,
3714 &ett_ipmi_picmg_clock_res,
3715 &ett_ipmi_picmg_05_byte1,
3716 &ett_ipmi_picmg_06_byte1,
3717 &ett_ipmi_picmg_06_byte2,
3718 &ett_ipmi_picmg_06_byte3,
3719 &ett_ipmi_picmg_08_byte1,
3720 &ett_ipmi_picmg_09_ipmba,
3721 &ett_ipmi_picmg_09_ipmbb,
3722 &ett_ipmi_picmg_0a_byte2,
3723 &ett_ipmi_picmg_0a_byte3,
3724 &ett_ipmi_picmg_0b_byte1,
3725 &ett_ipmi_picmg_0f_chan,
3726 &ett_ipmi_picmg_12_byte1,
3727 &ett_ipmi_picmg_14_prop,
3728 &ett_ipmi_picmg_1e_byte1,
3729 &ett_ipmi_picmg_21_byte9,
3730 &ett_ipmi_picmg_XX_compbits,
3731 &ett_ipmi_picmg_2e_byte2,
3732 &ett_ipmi_picmg_prop00_byte1,
3733 &ett_ipmi_picmg_prop01_byte1,
3734 &ett_ipmi_picmg_34_byte3,
3735 &ett_ipmi_picmg_36_byte2,
3736 &ett_ipmi_picmg_37_byte2,
3737 &ett_ipmi_picmg_hpm_caps,
3738 &ett_ipmi_picmg_47_byte1,
3739 &ett_ipmi_picmg_23_rq_byte2,
3740 &ett_ipmi_picmg_23_rs_byte5,
3741 &ett_ipmi_picmg_25_rs_byte4,
3742 &ett_ipmi_picmg_25_rs_byte5,
3743 &ett_ipmi_picmg_27_rs_byte3,
3744 &ett_ipmi_picmg_28_rq_byte3,
3745 &ett_ipmi_picmg_29_rs_byte3
3747 static guint8 sig_picmg[1] = { 0 };
3749 proto_register_field_array(proto_ipmi, hf, array_length(hf));
3750 proto_register_subtree_array(ett, array_length(ett));
3751 ipmi_register_netfn_cmdtab(IPMI_GROUP_REQ, IPMI_OEM_NONE, sig_picmg, 1,
3752 "PICMG", cmd_picmg, array_length(cmd_picmg));
3757 * Editor modelines - http://www.wireshark.org/tools/modelines.html
3762 * indent-tabs-mode: t
3765 * vi: set shiftwidth=8 tabstop=8 noexpandtab:
3766 * :indentSize=8:tabSize=8:noTabs=false: