2 * Sub-dissectors for IPMI messages (netFn=Application)
3 * Copyright 2007-2008, Alexey Neyman, Pigeon Point Systems <avn@pigeonpoint.com>
7 * Wireshark - Network traffic analyzer
8 * By Gerald Combs <gerald@wireshark.org>
9 * Copyright 1998 Gerald Combs
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version 2
14 * of the License, or (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
30 #ifdef HAVE_SYS_TYPES_H
31 #include <sys/types.h>
35 #include <epan/packet.h>
37 #include "packet-ipmi.h"
39 static gint ett_ipmi_app_01_byte2 = -1;
40 static gint ett_ipmi_app_01_byte3 = -1;
41 static gint ett_ipmi_app_01_byte6 = -1;
43 static gint ett_ipmi_app_04_byte2 = -1;
45 static gint ett_ipmi_app_06_syspwr = -1;
46 static gint ett_ipmi_app_06_devpwr = -1;
48 static gint ett_ipmi_app_07_syspwr = -1;
49 static gint ett_ipmi_app_07_devpwr = -1;
51 static gint ett_ipmi_app_24_timer_use = -1;
52 static gint ett_ipmi_app_24_timer_action = -1;
53 static gint ett_ipmi_app_24_expiration_flags = -1;
55 static gint ett_ipmi_app_25_timer_use = -1;
56 static gint ett_ipmi_app_25_timer_action = -1;
57 static gint ett_ipmi_app_25_expiration_flags = -1;
59 static gint ett_ipmi_app_2e_byte1 = -1;
60 static gint ett_ipmi_app_2f_byte1 = -1;
61 static gint ett_ipmi_app_30_byte1 = -1;
62 static gint ett_ipmi_app_31_byte1 = -1;
63 static gint ett_ipmi_app_32_rq_byte1 = -1;
64 static gint ett_ipmi_app_32_rq_byte2 = -1;
65 static gint ett_ipmi_app_32_rs_byte1 = -1;
66 static gint ett_ipmi_app_32_rs_byte2 = -1;
67 static gint ett_ipmi_app_34_byte1 = -1;
68 static gint ett_ipmi_app_34_msg = -1;
70 static gint ett_ipmi_app_38_rq_byte1 = -1;
71 static gint ett_ipmi_app_38_rq_byte2 = -1;
72 static gint ett_ipmi_app_38_rs_byte1 = -1;
73 static gint ett_ipmi_app_38_rs_byte2 = -1;
74 static gint ett_ipmi_app_38_rs_byte3 = -1;
75 static gint ett_ipmi_app_38_rs_byte4 = -1;
77 static gint ett_ipmi_app_39_byte1 = -1;
79 static gint ett_ipmi_app_3a_rq_byte1 = -1;
80 static gint ett_ipmi_app_3a_rq_byte2 = -1;
81 static gint ett_ipmi_app_3a_rs_byte1 = -1;
82 static gint ett_ipmi_app_3a_rs_byte10 = -1;
84 static gint ett_ipmi_app_3b_rq_byte1 = -1;
85 static gint ett_ipmi_app_3b_rs_byte1 = -1;
87 static gint hf_ipmi_app_01_dev_id = -1;
88 static gint hf_ipmi_app_01_dev_prov_sdr = -1;
89 static gint hf_ipmi_app_01_dev_rev = -1;
90 static gint hf_ipmi_app_01_dev_avail = -1;
91 static gint hf_ipmi_app_01_fw_rev_maj = -1;
92 static gint hf_ipmi_app_01_fw_rev_min = -1;
93 static gint hf_ipmi_app_01_ipmi_version = -1;
94 static gint hf_ipmi_app_01_ipmi_ads_chassis = -1;
95 static gint hf_ipmi_app_01_ipmi_ads_bridge = -1;
96 static gint hf_ipmi_app_01_ipmi_ads_ipmb_ev_gen = -1;
97 static gint hf_ipmi_app_01_ipmi_ads_ipmb_ev_recv = -1;
98 static gint hf_ipmi_app_01_ipmi_ads_fru = -1;
99 static gint hf_ipmi_app_01_ipmi_ads_sel = -1;
100 static gint hf_ipmi_app_01_ipmi_ads_sdr = -1;
101 static gint hf_ipmi_app_01_ipmi_ads_sensor = -1;
102 static gint hf_ipmi_app_01_manufacturer = -1;
103 static gint hf_ipmi_app_01_product = -1;
104 static gint hf_ipmi_app_01_fw_aux = -1;
106 static gint hf_ipmi_app_04_result = -1;
107 static gint hf_ipmi_app_04_fail = -1;
108 static gint hf_ipmi_app_04_fail_sel = -1;
109 static gint hf_ipmi_app_04_fail_sdr = -1;
110 static gint hf_ipmi_app_04_fail_bmc_fru = -1;
111 static gint hf_ipmi_app_04_fail_ipmb_sig = -1;
112 static gint hf_ipmi_app_04_fail_sdr_empty = -1;
113 static gint hf_ipmi_app_04_fail_iua = -1;
114 static gint hf_ipmi_app_04_fail_bb_fw = -1;
115 static gint hf_ipmi_app_04_fail_oper_fw = -1;
117 static gint hf_ipmi_app_05_devspec = -1;
119 static gint hf_ipmi_app_06_syspwr_set = -1;
120 static gint hf_ipmi_app_06_syspwr_enum = -1;
121 static gint hf_ipmi_app_06_devpwr_set = -1;
122 static gint hf_ipmi_app_06_devpwr_enum = -1;
124 static gint hf_ipmi_app_07_syspwr_enum = -1;
125 static gint hf_ipmi_app_07_devpwr_enum = -1;
127 static gint hf_ipmi_app_08_guid = -1;
129 static gint hf_ipmi_app_24_timer_use_dont_log = -1;
130 static gint hf_ipmi_app_24_timer_use_dont_stop = -1;
131 static gint hf_ipmi_app_24_timer_use_timer_use = -1;
132 static gint hf_ipmi_app_24_timer_action_interrupt = -1;
133 static gint hf_ipmi_app_24_timer_action_timeout_action = -1;
134 static gint hf_ipmi_app_24_pretimeout = -1;
135 static gint hf_ipmi_app_24_expiration_flags_oem = -1;
136 static gint hf_ipmi_app_24_expiration_flags_smsos = -1;
137 static gint hf_ipmi_app_24_expiration_flags_osload = -1;
138 static gint hf_ipmi_app_24_expiration_flags_biospost = -1;
139 static gint hf_ipmi_app_24_expiration_flags_biosfrb2 = -1;
140 static gint hf_ipmi_app_24_initial_countdown = -1;
142 static gint hf_ipmi_app_25_timer_use_dont_log = -1;
143 static gint hf_ipmi_app_25_timer_use_started = -1;
144 static gint hf_ipmi_app_25_timer_use_timer_use = -1;
145 static gint hf_ipmi_app_25_timer_action_interrupt = -1;
146 static gint hf_ipmi_app_25_timer_action_timeout_action = -1;
147 static gint hf_ipmi_app_25_pretimeout = -1;
148 static gint hf_ipmi_app_25_expiration_flags_oem = -1;
149 static gint hf_ipmi_app_25_expiration_flags_smsos = -1;
150 static gint hf_ipmi_app_25_expiration_flags_osload = -1;
151 static gint hf_ipmi_app_25_expiration_flags_biospost = -1;
152 static gint hf_ipmi_app_25_expiration_flags_biosfrb2 = -1;
153 static gint hf_ipmi_app_25_initial_countdown = -1;
154 static gint hf_ipmi_app_25_present_countdown = -1;
156 static gint hf_ipmi_app_2e_byte1_oem2 = -1;
157 static gint hf_ipmi_app_2e_byte1_oem1 = -1;
158 static gint hf_ipmi_app_2e_byte1_oem0 = -1;
159 static gint hf_ipmi_app_2e_byte1_sel = -1;
160 static gint hf_ipmi_app_2e_byte1_emb = -1;
161 static gint hf_ipmi_app_2e_byte1_emb_full_intr = -1;
162 static gint hf_ipmi_app_2e_byte1_rmq_intr = -1;
164 static gint hf_ipmi_app_2f_byte1_oem2 = -1;
165 static gint hf_ipmi_app_2f_byte1_oem1 = -1;
166 static gint hf_ipmi_app_2f_byte1_oem0 = -1;
167 static gint hf_ipmi_app_2f_byte1_sel = -1;
168 static gint hf_ipmi_app_2f_byte1_emb = -1;
169 static gint hf_ipmi_app_2f_byte1_emb_full_intr = -1;
170 static gint hf_ipmi_app_2f_byte1_rmq_intr = -1;
172 static gint hf_ipmi_app_30_byte1_oem2 = -1;
173 static gint hf_ipmi_app_30_byte1_oem1 = -1;
174 static gint hf_ipmi_app_30_byte1_oem0 = -1;
175 static gint hf_ipmi_app_30_byte1_wd_pretimeout = -1;
176 static gint hf_ipmi_app_30_byte1_emb = -1;
177 static gint hf_ipmi_app_30_byte1_rmq = -1;
179 static gint hf_ipmi_app_31_byte1_oem2 = -1;
180 static gint hf_ipmi_app_31_byte1_oem1 = -1;
181 static gint hf_ipmi_app_31_byte1_oem0 = -1;
182 static gint hf_ipmi_app_31_byte1_wd_pretimeout = -1;
183 static gint hf_ipmi_app_31_byte1_emb = -1;
184 static gint hf_ipmi_app_31_byte1_rmq = -1;
186 static gint hf_ipmi_app_32_rq_chno = -1;
187 static gint hf_ipmi_app_32_rq_state = -1;
188 static gint hf_ipmi_app_32_rs_chno = -1;
189 static gint hf_ipmi_app_32_rs_state = -1;
191 static gint hf_ipmi_app_34_track = -1;
192 static gint hf_ipmi_app_34_encrypt = -1;
193 static gint hf_ipmi_app_34_auth = -1;
194 static gint hf_ipmi_app_34_chan = -1;
196 static gint hf_ipmi_app_38_rq_ipmi20 = -1;
197 static gint hf_ipmi_app_38_rq_chan = -1;
198 static gint hf_ipmi_app_38_rq_priv = -1;
199 static gint hf_ipmi_app_38_rs_chan = -1;
200 static gint hf_ipmi_app_38_rs_ipmi20 = -1;
201 static gint hf_ipmi_app_38_rs_auth_oem = -1;
202 static gint hf_ipmi_app_38_rs_auth_straight = -1;
203 static gint hf_ipmi_app_38_rs_auth_md5 = -1;
204 static gint hf_ipmi_app_38_rs_auth_md2 = -1;
205 static gint hf_ipmi_app_38_rs_auth_none = -1;
206 static gint hf_ipmi_app_38_rs_kg = -1;
207 static gint hf_ipmi_app_38_rs_permsg = -1;
208 static gint hf_ipmi_app_38_rs_userauth = -1;
209 static gint hf_ipmi_app_38_rs_user_nonnull = -1;
210 static gint hf_ipmi_app_38_rs_user_null = -1;
211 static gint hf_ipmi_app_38_rs_user_anon = -1;
212 static gint hf_ipmi_app_38_rs_ipmi20_conn = -1;
213 static gint hf_ipmi_app_38_rs_ipmi15_conn = -1;
214 static gint hf_ipmi_app_38_rs_oem_iana = -1;
215 static gint hf_ipmi_app_38_rs_oem_aux = -1;
217 static gint hf_ipmi_app_39_authtype = -1;
218 static gint hf_ipmi_app_39_user = -1;
219 static gint hf_ipmi_app_39_temp_session = -1;
220 static gint hf_ipmi_app_39_challenge = -1;
222 static gint hf_ipmi_app_3a_authtype = -1;
223 static gint hf_ipmi_app_3a_privlevel = -1;
224 static gint hf_ipmi_app_3a_authcode = -1;
225 static gint hf_ipmi_app_3a_outbound_seq = -1;
226 static gint hf_ipmi_app_3a_authtype_session = -1;
227 static gint hf_ipmi_app_3a_session_id = -1;
228 static gint hf_ipmi_app_3a_inbound_seq = -1;
229 static gint hf_ipmi_app_3a_maxpriv_session = -1;
231 static gint hf_ipmi_app_3b_req_priv = -1;
232 static gint hf_ipmi_app_3b_new_priv = -1;
234 static gint hf_ipmi_app_3c_session_id = -1;
235 static gint hf_ipmi_app_3c_session_handle = -1;
237 static const struct true_false_string tfs_01_dev_avail = {
238 "Device firmware, SDR Repository update or self-initialization in progress",
242 static const value_string vals_04_result[] = {
243 { 0x55, "No error. All Self Tests Passed" },
244 { 0x56, "Self Test function not implemented in this controller" },
245 { 0x57, "Corrupted or inaccesible data or devices" },
246 { 0x58, "Fatal hardware error" },
247 { 0xff, "Reserved" },
251 static const struct true_false_string tfs_04_fail_unknown = {
256 static const struct true_false_string tfs_06_pwr = {
261 static const value_string vals_06_syspwr[] = {
262 { 0x00, "Set S0 / G0" },
267 { 0x05, "Set S5 / G2" },
268 { 0x06, "Set S4/S5" },
270 { 0x08, "Sleeping" },
271 { 0x09, "G1 sleping" },
272 { 0x0a, "Set override" },
273 { 0x20, "Set Legacy On" },
274 { 0x21, "Set Legacy Off" },
275 { 0x2a, "Set unknown" },
276 { 0x7f, "No change" },
280 static const value_string vals_06_devpwr[] = {
285 { 0x2a, "Set unknown" },
286 { 0x7f, "No change" },
290 static const value_string vals_07_syspwr[] = {
299 { 0x08, "Sleeping" },
300 { 0x09, "G1 sleping" },
301 { 0x0a, "Override" },
302 { 0x20, "Legacy On" },
303 { 0x21, "Legacy Off" },
308 static const value_string vals_07_devpwr[] = {
317 static const value_string vals_24_timer_use[] = {
318 { 0x00, "reserved" },
319 { 0x01, "BIOS FRB2" },
320 { 0x02, "BIOS/POST" },
324 { 0x06, "reserved" },
325 { 0x07, "reserved" },
330 static const value_string vals_24_timer_action_interrupt[] = {
333 { 0x02, "NMI / Diagnostic interrupt" },
334 { 0x03, "Messaging interrupt" },
335 { 0x04, "reserved" },
336 { 0x05, "reserved" },
337 { 0x06, "reserved" },
338 { 0x07, "reserved" },
343 static const value_string vals_24_timer_action_timeout[] = {
344 { 0x00, "no action" },
345 { 0x01, "Hard Reset" },
346 { 0x02, "Power Down" },
347 { 0x03, "Power Cycle" },
348 { 0x04, "reserved" },
349 { 0x05, "reserved" },
350 { 0x06, "reserved" },
351 { 0x07, "reserved" },
356 static const struct true_false_string tfs_24_exp_flags = {
357 "clear timer use expiration bit",
361 static const struct true_false_string tfs_2e_enable = { "Enable", "Disable" };
362 static const struct true_false_string tfs_2f_enabled = { "Enabled", "Disabled" };
364 static const struct true_false_string tfs_30_clear = {
369 static const value_string vals_32_state[] = {
370 { 0x00, "Disable channel" },
371 { 0x01, "Enable channel" },
372 { 0x02, "Get channel enable/disable state" },
373 { 0x03, "Reserved" },
378 static const struct true_false_string tfs_32_state = {
383 static const value_string vals_34_track[] = {
384 { 0x00, "No tracking" },
385 { 0x01, "Track Request" },
386 { 0x02, "Send Raw" },
390 static const value_string vals_38_ipmi20[] = {
391 { 0x00, "Backward compatible with IPMI 1.5" },
392 { 0x01, "IPMI v2.0+ extended data" },
396 static const value_string vals_XX_priv[] = {
397 { 0x00, "None / No change" },
398 { 0x01, "Callback" },
400 { 0x03, "Operator" },
401 { 0x04, "Administrator" },
402 { 0x05, "OEM Proprietary" },
406 static const struct true_false_string tfs_38_supp = { "Supported", "Not supported" };
407 static const struct true_false_string tfs_38_kg = { "Set to non-zero", "Set to default (0)" };
409 static const value_string vals_XX_auth[] = {
413 { 0x04, "straight password" },
422 rs01(tvbuff_t *tvb, proto_tree *tree)
424 static const gint *byte2[] = { &hf_ipmi_app_01_dev_prov_sdr, &hf_ipmi_app_01_dev_rev, NULL };
425 static const gint *byte3[] = { &hf_ipmi_app_01_dev_avail, &hf_ipmi_app_01_fw_rev_maj, NULL };
426 static const gint *byte6[] = { &hf_ipmi_app_01_ipmi_ads_chassis, &hf_ipmi_app_01_ipmi_ads_bridge,
427 &hf_ipmi_app_01_ipmi_ads_ipmb_ev_gen, &hf_ipmi_app_01_ipmi_ads_ipmb_ev_recv,
428 &hf_ipmi_app_01_ipmi_ads_fru, &hf_ipmi_app_01_ipmi_ads_sel, &hf_ipmi_app_01_ipmi_ads_sdr,
429 &hf_ipmi_app_01_ipmi_ads_sensor, NULL };
432 len = tvb_length(tvb);
434 proto_tree_add_item(tree, hf_ipmi_app_01_dev_id, tvb, 0, 1, TRUE);
435 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_app_01_byte2, byte2, TRUE, 0);
436 proto_tree_add_bitmask_text(tree, tvb, 2, 1, NULL, NULL, ett_ipmi_app_01_byte3, byte3, TRUE, 0);
437 proto_tree_add_item(tree, hf_ipmi_app_01_fw_rev_min, tvb, 3, 1, TRUE);
439 proto_tree_add_item(tree, hf_ipmi_app_01_ipmi_version, tvb, 4, 1, TRUE);
441 proto_tree_add_bitmask_text(tree, tvb, 5, 1, "Additional device support: ", "None",
442 ett_ipmi_app_01_byte6, byte6, TRUE, 0);
443 proto_tree_add_item(tree, hf_ipmi_app_01_manufacturer, tvb, 6, 3, TRUE);
444 proto_tree_add_item(tree, hf_ipmi_app_01_product, tvb, 9, 2, TRUE);
446 /* IPMI states that Aux Revision should be displayed in MSB order */
447 proto_tree_add_item(tree, hf_ipmi_app_01_fw_aux, tvb, 11, 4, FALSE);
451 /* Get Self Test Results.
454 rs04(tvbuff_t *tvb, proto_tree *tree)
456 static const gint *byte2[] = { &hf_ipmi_app_04_fail_sel, &hf_ipmi_app_04_fail_sdr,
457 &hf_ipmi_app_04_fail_bmc_fru, &hf_ipmi_app_04_fail_ipmb_sig, &hf_ipmi_app_04_fail_sdr_empty,
458 &hf_ipmi_app_04_fail_iua, &hf_ipmi_app_04_fail_bb_fw, &hf_ipmi_app_04_fail_oper_fw, NULL };
461 res = tvb_get_guint8(tvb, 0);
462 fail = tvb_get_guint8(tvb, 1);
464 proto_tree_add_uint_format(tree, hf_ipmi_app_04_result, tvb, 0, 1,
465 res, "Self test result: %s (0x%02x)",
466 val_to_str(res, vals_04_result, "Device-specific internal failure"),
469 if (res == 0x55 || res == 0x56 || res == 0xff) {
470 proto_tree_add_uint_format_value(tree, hf_ipmi_app_04_fail, tvb, 1, 1,
471 fail, "0x%02x (must be 0x00)",
477 proto_tree_add_uint_format_value(tree, hf_ipmi_app_04_fail, tvb, 1, 1,
478 fail, "0x%02x (device-specific)",
483 proto_tree_add_bitmask(tree, tvb, 1, hf_ipmi_app_04_fail, ett_ipmi_app_04_byte2, byte2, TRUE);
486 /* Manufacturing Test On.
489 rq05(tvbuff_t *tvb, proto_tree *tree)
491 proto_tree_add_item(tree, hf_ipmi_app_05_devspec, tvb, 0, tvb_length(tvb), TRUE);
494 /* Set ACPI Power State.
497 rq06(tvbuff_t *tvb, proto_tree *tree)
499 static const gint *byte1[] = { &hf_ipmi_app_06_syspwr_set, &hf_ipmi_app_06_syspwr_enum, NULL };
500 static const gint *byte2[] = { &hf_ipmi_app_06_devpwr_set, &hf_ipmi_app_06_devpwr_enum, NULL };
502 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "ACPI System Power State: ", NULL,
503 ett_ipmi_app_06_syspwr, byte1, TRUE, 0);
504 proto_tree_add_bitmask_text(tree, tvb, 1, 1, "ACPI Device Power State: ", NULL,
505 ett_ipmi_app_06_devpwr, byte2, TRUE, 0);
508 /* Get ACPI Power State.
511 rs07(tvbuff_t *tvb, proto_tree *tree)
513 static const gint *byte1[] = { &hf_ipmi_app_07_syspwr_enum, NULL };
514 static const gint *byte2[] = { &hf_ipmi_app_07_devpwr_enum, NULL };
516 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "ACPI System Power State: ", NULL,
517 ett_ipmi_app_07_syspwr, byte1, TRUE, 0);
518 proto_tree_add_bitmask_text(tree, tvb, 1, 1, "ACPI Device Power State: ", NULL,
519 ett_ipmi_app_07_devpwr, byte2, TRUE, 0);
525 rs08(tvbuff_t *tvb, proto_tree *tree)
527 ipmi_add_guid(tree, hf_ipmi_app_08_guid, tvb, 0);
530 /* Reset Watchdog Timer.
532 static const value_string cc22[] = {
533 { 0x80, "Attempt to start un-initialized watchdog" },
537 /* Set Watchdog Timer.
540 rq24(tvbuff_t *tvb, proto_tree *tree)
542 static const gint *byte1[] = { &hf_ipmi_app_24_timer_use_dont_log,
543 &hf_ipmi_app_24_timer_use_dont_stop, &hf_ipmi_app_24_timer_use_timer_use, NULL };
544 static const gint *byte2[] = { &hf_ipmi_app_24_timer_action_interrupt,
545 &hf_ipmi_app_24_timer_action_timeout_action, NULL };
546 static const gint *byte4[] = { &hf_ipmi_app_24_expiration_flags_oem,
547 &hf_ipmi_app_24_expiration_flags_smsos, &hf_ipmi_app_24_expiration_flags_osload,
548 &hf_ipmi_app_24_expiration_flags_biospost, &hf_ipmi_app_24_expiration_flags_biosfrb2, NULL };
550 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Timer Use: ", NULL, ett_ipmi_app_24_timer_use,
552 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_app_24_timer_action,
554 proto_tree_add_item(tree, hf_ipmi_app_24_pretimeout, tvb, 2, 1, TRUE);
555 proto_tree_add_bitmask_text(tree, tvb, 3, 1, "Timer Use Expiration flags clear: ", "None",
556 ett_ipmi_app_24_expiration_flags, byte4, TRUE, BMT_NO_TFS);
557 proto_tree_add_item(tree, hf_ipmi_app_24_initial_countdown, tvb, 4, 2, TRUE);
560 /* Get Watchdog Timer.
563 rs25(tvbuff_t *tvb, proto_tree *tree)
565 static const gint *byte1[] = { &hf_ipmi_app_25_timer_use_dont_log,
566 &hf_ipmi_app_25_timer_use_started, &hf_ipmi_app_25_timer_use_timer_use, NULL };
567 static const gint *byte2[] = { &hf_ipmi_app_25_timer_action_interrupt,
568 &hf_ipmi_app_25_timer_action_timeout_action, NULL };
569 static const gint *byte4[] = { &hf_ipmi_app_25_expiration_flags_oem, &hf_ipmi_app_25_expiration_flags_smsos,
570 &hf_ipmi_app_25_expiration_flags_osload, &hf_ipmi_app_25_expiration_flags_biospost,
571 &hf_ipmi_app_25_expiration_flags_biosfrb2, NULL };
573 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Timer Use: ", NULL, ett_ipmi_app_25_timer_use,
575 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_app_25_timer_action,
577 proto_tree_add_item(tree, hf_ipmi_app_25_pretimeout, tvb, 2, 1, TRUE);
578 proto_tree_add_bitmask_text(tree, tvb, 3, 1, "Timer Use Expiration flags: ", "None",
579 ett_ipmi_app_25_expiration_flags, byte4, TRUE, BMT_NO_TFS);
580 proto_tree_add_item(tree, hf_ipmi_app_25_initial_countdown, tvb, 4, 2, TRUE);
581 proto_tree_add_item(tree, hf_ipmi_app_25_present_countdown, tvb, 6, 2, TRUE);
584 /* Set BMC Global Enables.
587 rq2e(tvbuff_t *tvb, proto_tree *tree)
589 static const gint *byte1[] = { &hf_ipmi_app_2e_byte1_oem2, &hf_ipmi_app_2e_byte1_oem1,
590 &hf_ipmi_app_2e_byte1_oem0, &hf_ipmi_app_2e_byte1_sel, &hf_ipmi_app_2e_byte1_emb,
591 &hf_ipmi_app_2e_byte1_emb_full_intr, &hf_ipmi_app_2e_byte1_rmq_intr, NULL };
593 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Enables: ", "None", ett_ipmi_app_2e_byte1,
594 byte1, TRUE, BMT_NO_TFS);
597 /* Get BMC Global Enables.
600 rs2f(tvbuff_t *tvb, proto_tree *tree)
602 static const gint *byte1[] = { &hf_ipmi_app_2f_byte1_oem2, &hf_ipmi_app_2f_byte1_oem1,
603 &hf_ipmi_app_2f_byte1_oem0, &hf_ipmi_app_2f_byte1_sel, &hf_ipmi_app_2f_byte1_emb,
604 &hf_ipmi_app_2f_byte1_emb_full_intr, &hf_ipmi_app_2f_byte1_rmq_intr, NULL };
606 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Enables: ", "None", ett_ipmi_app_2f_byte1,
607 byte1, TRUE, BMT_NO_TFS);
610 /* Clear Message Flags.
613 rq30(tvbuff_t *tvb, proto_tree *tree)
615 static const gint *byte1[] = { &hf_ipmi_app_30_byte1_oem2, &hf_ipmi_app_30_byte1_oem1,
616 &hf_ipmi_app_30_byte1_oem0, &hf_ipmi_app_30_byte1_wd_pretimeout,
617 &hf_ipmi_app_30_byte1_emb, &hf_ipmi_app_30_byte1_rmq, NULL };
619 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Clear Message Flags: ", "None",
620 ett_ipmi_app_30_byte1, byte1, TRUE, BMT_NO_TFS);
623 /* Get Message Flags.
626 rs31(tvbuff_t *tvb, proto_tree *tree)
628 static const gint *byte1[] = { &hf_ipmi_app_31_byte1_oem2, &hf_ipmi_app_31_byte1_oem1,
629 &hf_ipmi_app_31_byte1_oem0, &hf_ipmi_app_31_byte1_wd_pretimeout,
630 &hf_ipmi_app_31_byte1_emb, &hf_ipmi_app_31_byte1_rmq, NULL };
632 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Flags: ", "None",
633 ett_ipmi_app_31_byte1, byte1, TRUE, BMT_NO_TFS);
636 /* Enable Message Channel Receive.
639 rq32(tvbuff_t *tvb, proto_tree *tree)
641 static const gint *byte1[] = { &hf_ipmi_app_32_rq_chno, NULL };
642 static const gint *byte2[] = { &hf_ipmi_app_32_rq_state, NULL };
644 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_app_32_rq_byte1,
646 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_app_32_rq_byte2,
651 rs32(tvbuff_t *tvb, proto_tree *tree)
653 static const gint *byte1[] = { &hf_ipmi_app_32_rs_chno, NULL };
654 static const gint *byte2[] = { &hf_ipmi_app_32_rs_state, NULL };
656 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_app_32_rs_byte1,
658 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_app_32_rs_byte2,
664 static const value_string cc33[] = {
665 { 0x80, "Data not available (queue/buffer empty)" },
672 rq34(tvbuff_t *tvb, proto_tree *tree)
674 static const gint *byte1[] = { &hf_ipmi_app_34_track, &hf_ipmi_app_34_encrypt,
675 &hf_ipmi_app_34_auth, &hf_ipmi_app_34_chan, NULL };
676 ipmi_dissect_format_t dfmt;
681 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
682 ett_ipmi_app_34_byte1, byte1, TRUE, 0);
684 next = tvb_new_subset(tvb, 1, tvb_length(tvb) - 1, tvb_length(tvb) - 1);
685 ti = proto_tree_add_text(tree, next, 0, tvb_length(next), "Message");
686 s_tree = proto_item_add_subtree(ti, ett_ipmi_app_34_msg);
688 memset(&dfmt, 0, sizeof(dfmt));
689 dfmt.flags = ipmi_guess_dissect_flags(next);
690 dfmt.arg = ipmi_current_hdr;
691 dfmt.getmoreheaders = ipmi_sendmsg_getheaders;
692 dfmt.whichresponse = ipmi_sendmsg_whichresponse;
693 dfmt.otheridx = ipmi_sendmsg_otheridx;
694 ipmi_do_dissect(next, s_tree, &dfmt);
695 proto_item_set_text(ti, "%s", dfmt.info);
699 rs34(tvbuff_t *tvb, proto_tree *tree)
701 ipmi_dissect_format_t dfmt;
705 ti = proto_tree_add_text(tree, tvb, 0, tvb_length(tvb), "Message");
706 s_tree = proto_item_add_subtree(ti, ett_ipmi_app_34_msg);
708 if (tvb_length(tvb)) {
709 memset(&dfmt, 0, sizeof(dfmt));
710 dfmt.flags = ipmi_guess_dissect_flags(tvb);
711 ipmi_do_dissect(tvb, s_tree, &dfmt);
712 proto_item_set_text(ti, "%s", dfmt.info);
716 static const value_string cc34[] = {
717 { 0x80, "Invalid Session Handle" },
718 { 0x81, "Lost Arbitration" },
719 { 0x82, "Bus Error" },
720 { 0x83, "NAK on Write" },
724 /* Read Event Message Buffer
726 static const value_string cc35[] = {
727 { 0x80, "Data not available (queue/buffer empty)" },
731 /* Get Channel Authentication Capabilities
734 rq38(tvbuff_t *tvb, proto_tree *tree)
736 static const gint *byte1[] = { &hf_ipmi_app_38_rq_ipmi20, &hf_ipmi_app_38_rq_chan, NULL };
737 static const gint *byte2[] = { &hf_ipmi_app_38_rq_priv, NULL };
739 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_app_38_rq_byte1, byte1, TRUE, 0);
740 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_app_38_rq_byte2, byte2, TRUE, 0);
744 rs38(tvbuff_t *tvb, proto_tree *tree)
746 static const gint *byte1[] = { &hf_ipmi_app_38_rs_chan, NULL };
747 static const gint *byte2[] = { &hf_ipmi_app_38_rs_ipmi20, &hf_ipmi_app_38_rs_auth_oem,
748 &hf_ipmi_app_38_rs_auth_straight, &hf_ipmi_app_38_rs_auth_md5, &hf_ipmi_app_38_rs_auth_md2,
749 &hf_ipmi_app_38_rs_auth_none, NULL };
750 static const gint *byte3[] = { &hf_ipmi_app_38_rs_kg, &hf_ipmi_app_38_rs_permsg, &hf_ipmi_app_38_rs_userauth,
751 &hf_ipmi_app_38_rs_user_nonnull, &hf_ipmi_app_38_rs_user_null, &hf_ipmi_app_38_rs_user_anon, NULL };
752 static const gint *byte4[] = { &hf_ipmi_app_38_rs_ipmi20_conn, &hf_ipmi_app_38_rs_ipmi15_conn, NULL };
754 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_app_38_rs_byte1, byte1, TRUE, 0);
755 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_app_38_rs_byte2, byte2, TRUE, BMT_NO_FALSE);
756 proto_tree_add_bitmask_text(tree, tvb, 2, 1, NULL, NULL, ett_ipmi_app_38_rs_byte3, byte3, TRUE, BMT_NO_FALSE);
757 proto_tree_add_bitmask_text(tree, tvb, 3, 1, "Supported connections: ", "None",
758 ett_ipmi_app_38_rs_byte4, byte4, TRUE, 0);
759 proto_tree_add_item(tree, hf_ipmi_app_38_rs_oem_iana, tvb, 4, 3, TRUE);
760 proto_tree_add_item(tree, hf_ipmi_app_38_rs_oem_aux, tvb, 7, 1, TRUE);
763 /* Get Session Challenge
766 rq39(tvbuff_t *tvb, proto_tree *tree)
768 static const gint *byte1[] = { &hf_ipmi_app_39_authtype, NULL };
770 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
771 ett_ipmi_app_39_byte1, byte1, TRUE, 0);
772 proto_tree_add_item(tree, hf_ipmi_app_39_user, tvb, 1, 16, TRUE);
776 rs39(tvbuff_t *tvb, proto_tree *tree)
778 proto_tree_add_item(tree, hf_ipmi_app_39_temp_session, tvb, 0, 4, TRUE);
779 proto_tree_add_item(tree, hf_ipmi_app_39_challenge, tvb, 4, 16, TRUE);
782 static const value_string cc39[] = {
783 { 0x81, "Invalid user name" },
784 { 0x82, "Null user name (User 1) not enabled" },
791 rq3a(tvbuff_t *tvb, proto_tree *tree)
793 static const gint *byte1[] = { &hf_ipmi_app_3a_authtype, NULL };
794 static const gint *byte2[] = { &hf_ipmi_app_3a_privlevel, NULL };
796 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
797 ett_ipmi_app_3a_rq_byte1, byte1, TRUE, 0);
798 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
799 ett_ipmi_app_3a_rq_byte2, byte2, TRUE, 0);
800 proto_tree_add_item(tree, hf_ipmi_app_3a_authcode, tvb, 2, 16, TRUE);
801 proto_tree_add_item(tree, hf_ipmi_app_3a_outbound_seq, tvb, 18, 4, TRUE);
805 rs3a(tvbuff_t *tvb, proto_tree *tree)
807 static const gint *byte1[] = { &hf_ipmi_app_3a_authtype_session, NULL };
808 static const gint *byte10[] = { &hf_ipmi_app_3a_maxpriv_session, NULL };
810 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
811 ett_ipmi_app_3a_rs_byte1, byte1, TRUE, 0);
812 proto_tree_add_item(tree, hf_ipmi_app_3a_session_id, tvb, 1, 4, TRUE);
813 proto_tree_add_item(tree, hf_ipmi_app_3a_inbound_seq, tvb, 5, 4, TRUE);
814 proto_tree_add_bitmask_text(tree, tvb, 9, 1, NULL, NULL,
815 ett_ipmi_app_3a_rs_byte10, byte10, TRUE, 0);
818 static const value_string cc3a[] = {
819 { 0x81, "No session slot available" },
820 { 0x82, "No slot available for given user" },
821 { 0x83, "No slot available to support user due to maximum privilege capability" },
822 { 0x84, "Session sequence number out-of-range" },
823 { 0x85, "Invalid session ID in request" },
824 { 0x86, "Requested maximum privilege level exceeds user and/or channel privilege limit" },
828 /* Set Session Privilege Level
831 rq3b(tvbuff_t *tvb, proto_tree *tree)
833 static const gint *byte1[] = { &hf_ipmi_app_3b_req_priv, NULL };
835 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
836 ett_ipmi_app_3b_rq_byte1, byte1, TRUE, 0);
840 rs3b(tvbuff_t *tvb, proto_tree *tree)
842 static const gint *byte1[] = { &hf_ipmi_app_3b_new_priv, NULL };
844 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
845 ett_ipmi_app_3b_rs_byte1, byte1, TRUE, 0);
848 static const value_string cc3b[] = {
849 { 0x80, "Requested level not available for this user" },
850 { 0x81, "Requested level exceeds Channel and/or User Privilege Limit" },
851 { 0x82, "Cannot disable User Level authentication" },
858 rq3c(tvbuff_t *tvb, proto_tree *tree)
860 proto_tree_add_item(tree, hf_ipmi_app_3c_session_id, tvb, 0, 4, TRUE);
861 if (tvb_length(tvb) > 4) {
862 proto_tree_add_item(tree, hf_ipmi_app_3c_session_handle, tvb, 4, 1, TRUE);
866 static const value_string cc3c[] = {
867 { 0x87, "Invalid Session ID in request" },
868 { 0x88, "Invalid Session Handle in request" },
872 static const value_string cc40[] = {
873 { 0x82, "Set not supported on selected channel" },
874 { 0x83, "Access mode not supported" },
878 static const value_string cc41[] = {
879 { 0x82, "Command not supported for selected channel" },
883 static const value_string cc47[] = {
884 { 0x80, "Password test failed: password data does not match stored value" },
885 { 0x81, "Password test failed: wrong password size was used" },
889 static const value_string cc48[] = {
890 { 0x80, "Payload already active on another session" },
891 { 0x81, "Payload type is disabled" },
892 { 0x82, "Payload activation limit reached" },
893 { 0x83, "Cannot activate payload with encryption" },
894 { 0x84, "Cannot activate payload without encryption" },
898 static const value_string cc49[] = {
899 { 0x80, "Payload already deactivated" },
900 { 0x81, "Payload type is disabled" },
904 static const value_string cc4f[] = {
905 { 0x80, "Payload type not available on given channel" },
909 static const value_string cc50[] = {
910 { 0x80, "OEM Payload IANA and/or Payload ID not supported" },
914 static const value_string cc52[] = {
915 { 0x81, "Lost Arbitration" },
916 { 0x82, "Bus Error" },
917 { 0x83, "NAK on Write" },
918 { 0x84, "Truncated Read" },
922 static const value_string cc55[] = {
923 { 0x80, "Operation not supported for given payload type" },
924 { 0x81, "Operation not allowed under present configuration" },
925 { 0x82, "Encryption not available for session that payload type is active under" },
926 { 0x83, "Payload instance is not presently active" },
930 static const value_string cc56[] = {
931 { 0x80, "Cannot perform set/confirm, key is locked" },
932 { 0x81, "Insufficient key bytes" },
933 { 0x82, "Too many key bytes" },
934 { 0x83, "Key value does not meet criteria for specified type" },
935 { 0x84, "KR is not used" },
939 static const value_string cc58[] = {
940 { 0x80, "Parameter not supported" },
941 { 0x81, "Attempt to set the set-in-progress when not in set-complete state" },
942 { 0x82, "Attempt to write read-only parameter" },
946 static const value_string cc59[] = {
947 { 0x80, "Parameter not supported" },
951 static const value_string cc60[] = {
952 { 0x80, "Attempt to enable unsupported/unconfigurable command" },
956 static const value_string cc62[] = {
957 { 0x80, "Attempt to enable unsupported/unconfigurable sub-function" },
961 static ipmi_cmd_t cmd_app[] = {
962 /* IPM Device Global Commands */
963 { 0x01, NULL, rs01, NULL, NULL, "Get Device ID", CMD_MAYBROADCAST },
964 { 0x02, NULL, NULL, NULL, NULL, "Cold Reset", 0 },
965 { 0x03, NULL, NULL, NULL, NULL, "Warm Reset", 0 },
966 { 0x04, NULL, rs04, NULL, NULL, "Get Self Test Results", 0 },
967 { 0x05, rq05, NULL, NULL, NULL, "Manufacturing Test On", 0 },
968 { 0x06, rq06, NULL, NULL, NULL, "Set ACPI Power State", 0 },
969 { 0x07, NULL, rs07, NULL, NULL, "Get ACPI Power State", 0 },
970 { 0x08, NULL, rs08, NULL, NULL, "Get Device GUID", 0 },
971 { 0x09, IPMI_TBD, NULL, NULL, "Get NetFn Support", 0 },
972 { 0x0a, IPMI_TBD, NULL, NULL, "Get Command Support", 0 },
973 { 0x0b, IPMI_TBD, NULL, NULL, "Get Command Sub-function Support", 0 },
974 { 0x0c, IPMI_TBD, NULL, NULL, "Get Configurable Commands", 0 },
975 { 0x0d, IPMI_TBD, NULL, NULL, "Get Configurable Command Sub-functions", 0 },
977 /* BMC Watchdog Timer Commands */
978 { 0x22, NULL, NULL, cc22, NULL, "Reset Watchdog Timer", 0 },
979 { 0x24, rq24, NULL, NULL, NULL, "Set Watchdog Timer", 0 },
980 { 0x25, NULL, rs25, NULL, NULL, "Get Watchdog Timer", 0 },
982 /* BMC Device and Messaging Commands */
983 { 0x2e, rq2e, NULL, NULL, NULL, "Set BMC Global Enables", 0 },
984 { 0x2f, NULL, rs2f, NULL, NULL, "Get BMC Global Enables", 0 },
985 { 0x30, rq30, NULL, NULL, NULL, "Clear Message Flags", 0 },
986 { 0x31, NULL, rs31, NULL, NULL, "Get Message Flags", 0 },
987 { 0x32, rq32, rs32, NULL, NULL, "Enable Message Channel Receive", 0 },
988 { 0x33, IPMI_TBD, cc33, NULL, "Get Message", 0 },
989 { 0x34, rq34, rs34, cc34, NULL, "Send Message", CMD_CALLRQ },
990 { 0x35, IPMI_TBD, cc35, NULL, "Read Event Message Buffer", 0 },
991 { 0x36, IPMI_TBD, NULL, NULL, "Get BT Interface Capabilities", 0 },
992 { 0x37, IPMI_TBD, NULL, NULL, "Get System GUID", 0 },
993 { 0x38, rq38, rs38, NULL, NULL, "Get Channel Authentication Capabilities", 0 },
994 { 0x39, rq39, rs39, cc39, NULL, "Get Session Challenge", 0 },
995 { 0x3a, rq3a, rs3a, cc3a, NULL, "Activate Session", 0 },
996 { 0x3b, rq3b, rs3b, cc3b, NULL, "Set Session Privilege Level", 0 },
997 { 0x3c, rq3c, NULL, cc3c, NULL, "Close Session", 0 },
998 { 0x3d, IPMI_TBD, NULL, NULL, "Get Session Info", 0 },
999 { 0x3f, IPMI_TBD, NULL, NULL, "Get AuthCode", 0 },
1000 { 0x40, IPMI_TBD, cc40, NULL, "Set Channel Access", 0 },
1001 { 0x41, IPMI_TBD, cc41, NULL, "Get Channel Access", 0 },
1002 { 0x42, IPMI_TBD, NULL, NULL, "Get Channel Info", 0 },
1003 { 0x43, IPMI_TBD, NULL, NULL, "Set User Access", 0 },
1004 { 0x44, IPMI_TBD, NULL, NULL, "Get User Access", 0 },
1005 { 0x45, IPMI_TBD, NULL, NULL, "Set User Name", 0 },
1006 { 0x46, IPMI_TBD, NULL, NULL, "Get User Name", 0 },
1007 { 0x47, IPMI_TBD, cc47, NULL, "Set User Password", 0 },
1008 { 0x48, IPMI_TBD, cc48, NULL, "Activate Payload", 0 },
1009 { 0x49, IPMI_TBD, cc49, NULL, "Deactivate Payload", 0 },
1010 { 0x4a, IPMI_TBD, NULL, NULL, "Get Payload Activation Status", 0 },
1011 { 0x4b, IPMI_TBD, NULL, NULL, "Get Payload Instance Info", 0 },
1012 { 0x4c, IPMI_TBD, NULL, NULL, "Set User Payload Access", 0 },
1013 { 0x4d, IPMI_TBD, NULL, NULL, "Get User Payload Access", 0 },
1014 { 0x4e, IPMI_TBD, NULL, NULL, "Get Channel Payload Support", 0 },
1015 { 0x4f, IPMI_TBD, cc4f, NULL, "Get Channel Payload Version", 0 },
1016 { 0x50, IPMI_TBD, cc50, NULL, "Get Channel OEM Payload Info", 0 },
1017 { 0x52, IPMI_TBD, cc52, NULL, "Master Write-Read", 0 },
1018 { 0x54, IPMI_TBD, NULL, NULL, "Get Channel Cipher Suites", 0 },
1019 { 0x55, IPMI_TBD, cc55, NULL, "Suspend/Resume Payload Encryption", 0 },
1020 { 0x56, IPMI_TBD, cc56, NULL, "Set Channel Security Keys", 0 },
1021 { 0x57, IPMI_TBD, NULL, NULL, "Get System Interface Capabilities", 0 },
1022 { 0x58, IPMI_TBD, cc58, NULL, "Set System Info Parameters", 0 },
1023 { 0x59, IPMI_TBD, cc59, NULL, "Get System Info Parameters", 0 },
1025 /* Device "Global" commands, continued */
1026 { 0x60, IPMI_TBD, cc60, NULL, "Set Command Enables", 0 },
1027 { 0x61, IPMI_TBD, NULL, NULL, "Get Command Enables", 0 },
1028 { 0x62, IPMI_TBD, cc62, NULL, "Set Command Sub-function Enables", 0 },
1029 { 0x63, IPMI_TBD, NULL, NULL, "Get Command Sub-function Enables", 0 },
1030 { 0x64, IPMI_TBD, NULL, NULL, "Get OEM NetFn IANA Support", 0 },
1034 ipmi_register_app(gint proto_ipmi)
1036 static hf_register_info hf[] = {
1037 { &hf_ipmi_app_01_dev_id,
1039 "ipmi.app00.dev.id", FT_UINT8, BASE_HEX, NULL, 0, "", HFILL }},
1040 { &hf_ipmi_app_01_dev_prov_sdr,
1041 { "Device provides Device SDRs",
1042 "ipmi.app00.dev.provides_dev_sdr", FT_BOOLEAN, 8, NULL, 0x80, "", HFILL }},
1043 { &hf_ipmi_app_01_dev_rev,
1044 { "Device Revision (binary encoded)",
1045 "ipmi.app00.dev.rev", FT_UINT8, BASE_HEX, NULL, 0x0f, "", HFILL }},
1046 { &hf_ipmi_app_01_dev_avail,
1047 { "Device availability",
1048 "ipmi.app01.dev.avail", FT_BOOLEAN, 8, TFS(&tfs_01_dev_avail), 0x80, "", HFILL }},
1049 { &hf_ipmi_app_01_fw_rev_maj,
1050 { "Major Firmware Revision (binary encoded)",
1051 "ipmi.app01.fw.major", FT_UINT8, BASE_HEX, NULL, 0x7f, "", HFILL }},
1052 { &hf_ipmi_app_01_fw_rev_min,
1053 { "Minor Firmware Revision (BCD encoded)",
1054 "ipmi.app01.fw.minor", FT_UINT8, BASE_HEX, NULL, 0, "", HFILL }},
1055 { &hf_ipmi_app_01_ipmi_version,
1057 "ipmi.app01.ipmi.version", FT_UINT8, BASE_CUSTOM, ipmi_fmt_version, 0, "", HFILL }},
1058 { &hf_ipmi_app_01_ipmi_ads_chassis,
1060 "ipmi.app01.ads.chassis", FT_BOOLEAN, 8, NULL, 0x80, "", HFILL }},
1061 { &hf_ipmi_app_01_ipmi_ads_bridge,
1063 "ipmi.app01.ads.bridge", FT_BOOLEAN, 8, NULL, 0x40, "", HFILL }},
1064 { &hf_ipmi_app_01_ipmi_ads_ipmb_ev_gen,
1065 { "Event Generator",
1066 "ipmi.app01.ads.ipmb_ev_gen", FT_BOOLEAN, 8, NULL, 0x20, "", HFILL }},
1067 { &hf_ipmi_app_01_ipmi_ads_ipmb_ev_recv,
1069 "ipmi.app01.ads.ipmb_ev_recv", FT_BOOLEAN, 8, NULL, 0x10, "", HFILL }},
1070 { &hf_ipmi_app_01_ipmi_ads_fru,
1072 "ipmi.app01.ads.fru", FT_BOOLEAN, 8, NULL, 0x08, "", HFILL }},
1073 { &hf_ipmi_app_01_ipmi_ads_sel,
1075 "ipmi.app01.ads.sel", FT_BOOLEAN, 8, NULL, 0x04, "", HFILL }},
1076 { &hf_ipmi_app_01_ipmi_ads_sdr,
1078 "ipmi.app01.ads.sdr", FT_BOOLEAN, 8, NULL, 0x02, "", HFILL }},
1079 { &hf_ipmi_app_01_ipmi_ads_sensor,
1081 "ipmi.app01.ads.sensor", FT_BOOLEAN, 8, NULL, 0x01, "", HFILL }},
1082 { &hf_ipmi_app_01_manufacturer,
1083 { "Manufacturer ID",
1084 "ipmi.app01.manufacturer", FT_UINT24, BASE_DEC, NULL, 0, "", HFILL }},
1085 { &hf_ipmi_app_01_product,
1087 "ipmi.app01.product", FT_UINT16, BASE_HEX, NULL, 0, "", HFILL }},
1088 { &hf_ipmi_app_01_fw_aux,
1089 { "Auxillary Firmware Revision Information",
1090 "ipmi.app01.fw.aux", FT_BYTES, BASE_HEX, NULL, 0, "", HFILL }},
1092 { &hf_ipmi_app_04_result,
1093 { "Self test result",
1094 "ipmi.app04.self_test_result", FT_UINT8, BASE_HEX, vals_04_result, 0, "", HFILL }},
1095 { &hf_ipmi_app_04_fail,
1096 { "Self-test error bitfield",
1097 "ipmi.app04.fail", FT_UINT8, BASE_HEX, NULL, 0, "", HFILL }},
1098 { &hf_ipmi_app_04_fail_sel,
1099 { "Cannot access SEL device",
1100 "ipmi.app04.fail.sel", FT_BOOLEAN, 8, TFS(&tfs_04_fail_unknown), 0x80, "", HFILL }},
1101 { &hf_ipmi_app_04_fail_sdr,
1102 { "Cannot access SDR Repository",
1103 "ipmi.app04.fail.sdr", FT_BOOLEAN, 8, TFS(&tfs_04_fail_unknown), 0x40, "", HFILL }},
1104 { &hf_ipmi_app_04_fail_bmc_fru,
1105 { "Cannot access BMC FRU device",
1106 "ipmi.app04.fail.bmc_fru", FT_BOOLEAN, 8, TFS(&tfs_04_fail_unknown), 0x20, "", HFILL }},
1107 { &hf_ipmi_app_04_fail_ipmb_sig,
1108 { "IPMB signal lines do not respond",
1109 "ipmi.app04.fail.ipmb_sig", FT_BOOLEAN, 8, TFS(&tfs_04_fail_unknown), 0x10, "", HFILL }},
1110 { &hf_ipmi_app_04_fail_sdr_empty,
1111 { "SDR Repository is empty",
1112 "ipmi.app04.fail.sdr_empty", FT_BOOLEAN, 8, TFS(&tfs_04_fail_unknown), 0x08, "", HFILL }},
1113 { &hf_ipmi_app_04_fail_iua,
1114 { "Internal Use Area of BMC FRU corrupted",
1115 "ipmi.app04.fail.iua", FT_BOOLEAN, 8, TFS(&tfs_04_fail_unknown), 0x04, "", HFILL }},
1116 { &hf_ipmi_app_04_fail_bb_fw,
1117 { "Controller update boot block firmware corrupted",
1118 "ipmi.app04.fail.bb_fw", FT_BOOLEAN, 8, TFS(&tfs_04_fail_unknown), 0x02, "", HFILL }},
1119 { &hf_ipmi_app_04_fail_oper_fw,
1120 { "Controller operational firmware corrupted",
1121 "ipmi.app04.fail.oper_fw", FT_BOOLEAN, 8, TFS(&tfs_04_fail_unknown), 0x01, "", HFILL }},
1123 { &hf_ipmi_app_05_devspec,
1124 { "Device-specific parameters",
1125 "ipmi.app05.devspec", FT_BYTES, BASE_HEX, NULL, 0, "", HFILL }},
1127 { &hf_ipmi_app_06_syspwr_set,
1128 { "System Power State",
1129 "ipmi.app06.syspwr.set", FT_BOOLEAN, 8, TFS(&tfs_06_pwr), 0x80, "", HFILL }},
1130 { &hf_ipmi_app_06_syspwr_enum,
1131 { "System Power State enumeration",
1132 "ipmi.app06.syspwr.enum", FT_UINT8, BASE_HEX, vals_06_syspwr, 0x7f, "", HFILL }},
1133 { &hf_ipmi_app_06_devpwr_set,
1134 { "Device Power State",
1135 "ipmi.app06.devpwr.set", FT_BOOLEAN, 8, TFS(&tfs_06_pwr), 0x80, "", HFILL }},
1136 { &hf_ipmi_app_06_devpwr_enum,
1137 { "Device Power State enumeration",
1138 "ipmi.app06.devpwr.enum", FT_UINT8, BASE_HEX, vals_06_devpwr, 0x7f, "", HFILL }},
1140 { &hf_ipmi_app_07_syspwr_enum,
1141 { "ACPI System Power State",
1142 "ipmi.app07.syspwr", FT_UINT8, BASE_HEX, vals_07_syspwr, 0x7f, "", HFILL }},
1143 { &hf_ipmi_app_07_devpwr_enum,
1144 { "ACPI Device Power State",
1145 "ipmi.app07.devpwr", FT_UINT8, BASE_HEX, vals_07_devpwr, 0x7f, "", HFILL }},
1147 { &hf_ipmi_app_08_guid,
1149 "ipmi.app08.guid", FT_GUID, BASE_HEX, NULL, 0, "", HFILL }},
1151 { &hf_ipmi_app_24_timer_use_dont_log,
1153 "ipmi.app24.timer_use.dont_log", FT_BOOLEAN, 8, NULL, 0x80, "", HFILL }},
1154 { &hf_ipmi_app_24_timer_use_dont_stop,
1155 { "Don't stop timer on Set Watchdog command",
1156 "ipmi.app24.timer_use.dont_stop", FT_BOOLEAN, 8, NULL, 0x40, "", HFILL }},
1157 { &hf_ipmi_app_24_timer_use_timer_use,
1159 "ipmi.app24.timer_use.timer_use", FT_UINT8, BASE_HEX, vals_24_timer_use, 0x07, "", HFILL }},
1160 { &hf_ipmi_app_24_timer_action_interrupt,
1161 { "Pre-timeout interrupt",
1162 "ipmi.app24.timer_action.interrupt", FT_UINT8, BASE_HEX, vals_24_timer_action_interrupt, 0x70, "", HFILL }},
1163 { &hf_ipmi_app_24_timer_action_timeout_action,
1165 "ipmi.app24.timer_action.timeout", FT_UINT8, BASE_HEX, vals_24_timer_action_timeout, 0x07, "", HFILL }},
1166 { &hf_ipmi_app_24_pretimeout,
1167 { "Pre-timeout interval",
1168 "ipmi.app24.pretimeout", FT_UINT8, BASE_CUSTOM, ipmi_fmt_1s_1based, 0, "", HFILL }},
1169 { &hf_ipmi_app_24_expiration_flags_oem,
1171 "ipmi.app24.exp_flags.oem", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x20, "", HFILL }},
1172 { &hf_ipmi_app_24_expiration_flags_smsos,
1174 "ipmi.app24.exp_flags.sms_os", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x10, "", HFILL }},
1175 { &hf_ipmi_app_24_expiration_flags_osload,
1177 "ipmi.app24.exp_flags.osload", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x08, "", HFILL }},
1178 { &hf_ipmi_app_24_expiration_flags_biospost,
1180 "ipmi.app24.exp_flags.biospost", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x04, "", HFILL }},
1181 { &hf_ipmi_app_24_expiration_flags_biosfrb2,
1183 "ipmi.app24.exp_flags.biosfrb2", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x02, "", HFILL }},
1184 { &hf_ipmi_app_24_initial_countdown,
1185 { "Initial countdown value (100ms/count)",
1186 "ipmi.app24.initial_countdown", FT_UINT16, BASE_DEC, NULL, 0, "", HFILL }},
1188 { &hf_ipmi_app_25_timer_use_dont_log,
1190 "ipmi.app25.timer_use.dont_log", FT_BOOLEAN, 8, NULL, 0x80, "", HFILL }},
1191 { &hf_ipmi_app_25_timer_use_started,
1193 "ipmi.app25.timer_use.started", FT_BOOLEAN, 8, NULL, 0x40, "", HFILL }},
1194 { &hf_ipmi_app_25_timer_use_timer_use,
1196 "ipmi.app25.timer_use.timer_use", FT_UINT8, BASE_HEX, vals_24_timer_use, 0x07, "", HFILL }},
1197 { &hf_ipmi_app_25_timer_action_interrupt,
1198 { "Pre-timeout interrupt",
1199 "ipmi.app25.timer_action.interrupt", FT_UINT8, BASE_HEX, vals_24_timer_action_interrupt, 0x70, "", HFILL }},
1200 { &hf_ipmi_app_25_timer_action_timeout_action,
1202 "ipmi.app25.timer_action.timeout", FT_UINT8, BASE_HEX, vals_24_timer_action_timeout, 0x07, "", HFILL }},
1203 { &hf_ipmi_app_25_pretimeout,
1204 { "Pre-timeout interval",
1205 "ipmi.app25.pretimeout", FT_UINT8, BASE_CUSTOM, ipmi_fmt_1s_1based, 0, "", HFILL }},
1206 { &hf_ipmi_app_25_expiration_flags_oem,
1208 "ipmi.app25.exp_flags.oem", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x20, "", HFILL }},
1209 { &hf_ipmi_app_25_expiration_flags_smsos,
1211 "ipmi.app25.exp_flags.sms_os", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x10, "", HFILL }},
1212 { &hf_ipmi_app_25_expiration_flags_osload,
1214 "ipmi.app25.exp_flags.osload", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x08, "", HFILL }},
1215 { &hf_ipmi_app_25_expiration_flags_biospost,
1217 "ipmi.app25.exp_flags.biospost", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x04, "", HFILL }},
1218 { &hf_ipmi_app_25_expiration_flags_biosfrb2,
1220 "ipmi.app25.exp_flags.biosfrb2", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x02, "", HFILL }},
1221 { &hf_ipmi_app_25_initial_countdown,
1222 { "Initial countdown value (100ms/count)",
1223 "ipmi.app25.initial_countdown", FT_UINT16, BASE_DEC, NULL, 0, "", HFILL }},
1224 { &hf_ipmi_app_25_present_countdown,
1225 { "Present countdown value (100ms/count)",
1226 "ipmi.app25.initial_countdown", FT_UINT16, BASE_DEC, NULL, 0, "", HFILL }},
1228 { &hf_ipmi_app_2e_byte1_oem2,
1230 "ipmi.app2e.bmc_global_enables.oem2", FT_BOOLEAN, 8, TFS(&tfs_2e_enable), 0x80, "", HFILL }},
1231 { &hf_ipmi_app_2e_byte1_oem1,
1233 "ipmi.app2e.bmc_global_enables.oem1", FT_BOOLEAN, 8, TFS(&tfs_2e_enable), 0x40, "", HFILL }},
1234 { &hf_ipmi_app_2e_byte1_oem0,
1236 "ipmi.app2e.bmc_global_enables.oem0", FT_BOOLEAN, 8, TFS(&tfs_2e_enable), 0x20, "", HFILL }},
1237 { &hf_ipmi_app_2e_byte1_sel,
1238 { "System Event Logging",
1239 "ipmi.app2e.bmc_global_enables.sel", FT_BOOLEAN, 8, TFS(&tfs_2e_enable), 0x08, "", HFILL }},
1240 { &hf_ipmi_app_2e_byte1_emb,
1241 { "Event Message Buffer",
1242 "ipmi.app2e.bmc_global_enables.emb", FT_BOOLEAN, 8, TFS(&tfs_2e_enable), 0x04, "", HFILL }},
1243 { &hf_ipmi_app_2e_byte1_emb_full_intr,
1244 { "Event Message Buffer Full Interrupt",
1245 "ipmi.app2e.bmc_global_enables.emb_full_intr", FT_BOOLEAN, 8, TFS(&tfs_2e_enable), 0x02, "", HFILL }},
1246 { &hf_ipmi_app_2e_byte1_rmq_intr,
1247 { "Receive Message Queue Interrupt",
1248 "ipmi.app2e.bmc_global_enables.rmq_intr", FT_BOOLEAN, 8, TFS(&tfs_2e_enable), 0x01, "", HFILL }},
1250 { &hf_ipmi_app_2f_byte1_oem2,
1252 "ipmi.app2f.bmc_global_enables.oem2", FT_BOOLEAN, 8, TFS(&tfs_2f_enabled), 0x80, "", HFILL }},
1253 { &hf_ipmi_app_2f_byte1_oem1,
1255 "ipmi.app2f.bmc_global_enables.oem1", FT_BOOLEAN, 8, TFS(&tfs_2f_enabled), 0x40, "", HFILL }},
1256 { &hf_ipmi_app_2f_byte1_oem0,
1258 "ipmi.app2f.bmc_global_enables.oem0", FT_BOOLEAN, 8, TFS(&tfs_2f_enabled), 0x20, "", HFILL }},
1259 { &hf_ipmi_app_2f_byte1_sel,
1260 { "System Event Logging",
1261 "ipmi.app2f.bmc_global_enables.sel", FT_BOOLEAN, 8, TFS(&tfs_2f_enabled), 0x08, "", HFILL }},
1262 { &hf_ipmi_app_2f_byte1_emb,
1263 { "Event Message Buffer",
1264 "ipmi.app2f.bmc_global_enables.emb", FT_BOOLEAN, 8, TFS(&tfs_2f_enabled), 0x04, "", HFILL }},
1265 { &hf_ipmi_app_2f_byte1_emb_full_intr,
1266 { "Event Message Buffer Full Interrupt",
1267 "ipmi.app2f.bmc_global_enables.emb_full_intr", FT_BOOLEAN, 8, TFS(&tfs_2f_enabled), 0x02, "", HFILL }},
1268 { &hf_ipmi_app_2f_byte1_rmq_intr,
1269 { "Receive Message Queue Interrupt",
1270 "ipmi.app2f.bmc_global_enables.rmq_intr", FT_BOOLEAN, 8, TFS(&tfs_2f_enabled), 0x01, "", HFILL }},
1272 { &hf_ipmi_app_30_byte1_oem2,
1274 "ipmi.app30.byte1.oem2", FT_BOOLEAN, 8, TFS(&tfs_30_clear), 0x80, "", HFILL }},
1275 { &hf_ipmi_app_30_byte1_oem1,
1277 "ipmi.app30.byte1.oem1", FT_BOOLEAN, 8, TFS(&tfs_30_clear), 0x40, "", HFILL }},
1278 { &hf_ipmi_app_30_byte1_oem0,
1280 "ipmi.app30.byte1.oem0", FT_BOOLEAN, 8, TFS(&tfs_30_clear), 0x20, "", HFILL }},
1281 { &hf_ipmi_app_30_byte1_wd_pretimeout,
1282 { "Watchdog pre-timeout interrupt flag",
1283 "ipmi.app30.byte1.wd_pretimeout", FT_BOOLEAN, 8, TFS(&tfs_30_clear), 0x08, "", HFILL }},
1284 { &hf_ipmi_app_30_byte1_emb,
1285 { "Event Message Buffer",
1286 "ipmi.app30.byte1.emb", FT_BOOLEAN, 8, TFS(&tfs_30_clear), 0x02, "", HFILL }},
1287 { &hf_ipmi_app_30_byte1_rmq,
1288 { "Receive Message Queue",
1289 "ipmi.app30.byte1.rmq", FT_BOOLEAN, 8, TFS(&tfs_30_clear), 0x01, "", HFILL }},
1291 { &hf_ipmi_app_31_byte1_oem2,
1292 { "OEM 2 data available",
1293 "ipmi.app31.byte1.oem2", FT_BOOLEAN, 8, NULL, 0x80, "", HFILL }},
1294 { &hf_ipmi_app_31_byte1_oem1,
1295 { "OEM 1 data available",
1296 "ipmi.app31.byte1.oem1", FT_BOOLEAN, 8, NULL, 0x40, "", HFILL }},
1297 { &hf_ipmi_app_31_byte1_oem0,
1298 { "OEM 0 data available",
1299 "ipmi.app31.byte1.oem0", FT_BOOLEAN, 8, NULL, 0x20, "", HFILL }},
1300 { &hf_ipmi_app_31_byte1_wd_pretimeout,
1301 { "Watchdog pre-timeout interrupt occurred",
1302 "ipmi.app31.byte1.wd_pretimeout", FT_BOOLEAN, 8, NULL, 0x08, "", HFILL }},
1303 { &hf_ipmi_app_31_byte1_emb,
1304 { "Event Message Buffer Full",
1305 "ipmi.app31.byte1.emb", FT_BOOLEAN, 8, NULL, 0x02, "", HFILL }},
1306 { &hf_ipmi_app_31_byte1_rmq,
1307 { "Receive Message Available",
1308 "ipmi.app31.byte1.rmq", FT_BOOLEAN, 8, NULL, 0x01, "", HFILL }},
1310 { &hf_ipmi_app_32_rq_chno,
1312 "ipmi.app32.rq_chno", FT_UINT8, BASE_CUSTOM, ipmi_fmt_channel, 0x0f, "", HFILL }},
1313 { &hf_ipmi_app_32_rq_state,
1315 "ipmi.app32.rq_state", FT_UINT8, BASE_HEX, vals_32_state, 0x03, "", HFILL }},
1316 { &hf_ipmi_app_32_rs_chno,
1318 "ipmi.app32.rs_chno", FT_UINT8, BASE_CUSTOM, ipmi_fmt_channel, 0x0f, "", HFILL }},
1319 { &hf_ipmi_app_32_rs_state,
1321 "ipmi.app32.rs_state", FT_BOOLEAN, 8, TFS(&tfs_32_state), 0x01, "", HFILL }},
1323 { &hf_ipmi_app_34_track,
1325 "ipmi.app34.track", FT_UINT8, BASE_HEX, vals_34_track, 0xc0, "", HFILL }},
1326 { &hf_ipmi_app_34_encrypt,
1327 { "Encryption required",
1328 "ipmi.app34.encrypt", FT_BOOLEAN, 8, NULL, 0x20, "", HFILL }},
1329 { &hf_ipmi_app_34_auth,
1330 { "Authentication required",
1331 "ipmi.app34.auth", FT_BOOLEAN, 8, NULL, 0x10, "", HFILL }},
1332 { &hf_ipmi_app_34_chan,
1334 "ipmi.app34.chan", FT_UINT8, BASE_CUSTOM, ipmi_fmt_channel, 0x0f, "", HFILL }},
1336 { &hf_ipmi_app_38_rq_ipmi20,
1337 { "Version compatibility",
1338 "ipmi.app38.rq_ipmi20", FT_UINT8, BASE_DEC, &vals_38_ipmi20, 0x80, "", HFILL }},
1339 { &hf_ipmi_app_38_rq_chan,
1341 "ipmi.app38.rq_chan", FT_UINT8, BASE_CUSTOM, ipmi_fmt_channel, 0x0f, "", HFILL }},
1342 { &hf_ipmi_app_38_rq_priv,
1343 { "Requested privilege level",
1344 "ipmi.app38.rq_priv", FT_UINT8, BASE_HEX, vals_XX_priv, 0x0f, "", HFILL }},
1345 { &hf_ipmi_app_38_rs_chan,
1347 "ipmi.app38.rs_chan", FT_UINT8, BASE_CUSTOM, ipmi_fmt_channel, 0x0f, "", HFILL }},
1348 { &hf_ipmi_app_38_rs_ipmi20,
1349 { "Version compatibility",
1350 "ipmi.app38.rs_ipmi20", FT_UINT8, BASE_DEC, vals_38_ipmi20, 0x80, "", HFILL }},
1351 { &hf_ipmi_app_38_rs_auth_oem,
1352 { "OEM Proprietary authentication",
1353 "ipmi.app38.rs_auth_oem", FT_BOOLEAN, 8, TFS(&tfs_38_supp), 0x20, "", HFILL }},
1354 { &hf_ipmi_app_38_rs_auth_straight,
1355 { "Straight password/key",
1356 "ipmi.app38.rs_auth_straight", FT_BOOLEAN, 8, TFS(&tfs_38_supp), 0x10, "", HFILL }},
1357 { &hf_ipmi_app_38_rs_auth_md5,
1359 "ipmi.app38.rs_auth_md5", FT_BOOLEAN, 8, TFS(&tfs_38_supp), 0x04, "", HFILL }},
1360 { &hf_ipmi_app_38_rs_auth_md2,
1362 "ipmi.app38.rs_auth_md2", FT_BOOLEAN, 8, TFS(&tfs_38_supp), 0x02, "", HFILL }},
1363 { &hf_ipmi_app_38_rs_auth_none,
1365 "ipmi.app38.rs_auth_none", FT_BOOLEAN, 8, TFS(&tfs_38_supp), 0x01, "", HFILL }},
1366 { &hf_ipmi_app_38_rs_kg,
1368 "ipmi.app38.rs_kg_status", FT_BOOLEAN, 8, TFS(&tfs_38_kg), 0x20, "", HFILL }},
1369 { &hf_ipmi_app_38_rs_permsg,
1370 { "Per-message Authentication disabled",
1371 "ipmi.app38.rs_permsg", FT_BOOLEAN, 8, NULL, 0x10, "", HFILL }},
1372 { &hf_ipmi_app_38_rs_userauth,
1373 { "User-level Authentication disabled",
1374 "ipmi.app38.rs_userauth", FT_BOOLEAN, 8, NULL, 0x08, "", HFILL }},
1375 { &hf_ipmi_app_38_rs_user_nonnull,
1376 { "Non-null usernames enabled",
1377 "ipmi.app38.rs_user_nonnull", FT_BOOLEAN, 8, NULL, 0x04, "", HFILL }},
1378 { &hf_ipmi_app_38_rs_user_null,
1379 { "Null usernames enabled",
1380 "ipmi.app38.rs_user_null", FT_BOOLEAN, 8, NULL, 0x02, "", HFILL }},
1381 { &hf_ipmi_app_38_rs_user_anon,
1382 { "Anonymous login enabled",
1383 "ipmi.app38.rs_user_anon", FT_BOOLEAN, 8, NULL, 0x01, "", HFILL }},
1384 { &hf_ipmi_app_38_rs_ipmi20_conn,
1386 "ipmi.app38.rs_ipmi20_conn", FT_BOOLEAN, 8, NULL, 0x02, "", HFILL }},
1387 { &hf_ipmi_app_38_rs_ipmi15_conn,
1389 "ipmi.app38.rs_ipmi15_conn", FT_BOOLEAN, 8, NULL, 0x01, "", HFILL }},
1390 { &hf_ipmi_app_38_rs_oem_iana,
1392 "ipmi.app38.rs_oem_iana", FT_UINT24, BASE_DEC, NULL, 0, "", HFILL }},
1393 { &hf_ipmi_app_38_rs_oem_aux,
1394 { "OEM Auxillary data",
1395 "ipmi.app38.rs_oem_aux", FT_UINT8, BASE_HEX, NULL, 0, "", HFILL }},
1397 { &hf_ipmi_app_39_authtype,
1398 { "Authentication Type",
1399 "ipmi.app39.authtype", FT_UINT8, BASE_HEX, vals_XX_auth, 0x0f, "", HFILL }},
1400 { &hf_ipmi_app_39_user,
1402 "ipmi.app39.user", FT_STRING, BASE_NONE, NULL, 0, "", HFILL }},
1403 { &hf_ipmi_app_39_temp_session,
1404 { "Temporary Session ID",
1405 "ipmi.app39.temp_session", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
1406 { &hf_ipmi_app_39_challenge,
1408 "ipmi.app39.challenge", FT_BYTES, BASE_NONE, NULL, 0, "", HFILL }},
1410 { &hf_ipmi_app_3a_authtype,
1411 { "Authentication Type",
1412 "ipmi.app3a.authtype", FT_UINT8, BASE_HEX, vals_XX_auth, 0x0f, "", HFILL }},
1413 { &hf_ipmi_app_3a_privlevel,
1414 { "Requested Maximum Privilege Level",
1415 "ipmi.app3a.privlevel", FT_UINT8, BASE_HEX, vals_XX_priv, 0x0f, "", HFILL }},
1416 { &hf_ipmi_app_3a_authcode,
1417 { "Challenge string/Auth Code",
1418 "ipmi.app3a.authcode", FT_BYTES, BASE_HEX, NULL, 0, "", HFILL }},
1419 { &hf_ipmi_app_3a_outbound_seq,
1420 { "Initial Outbound Sequence Number",
1421 "ipmi.app3a.outbound_seq", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
1422 { &hf_ipmi_app_3a_authtype_session,
1423 { "Authentication Type for session",
1424 "ipmi.app3a.authtype_session", FT_UINT8, BASE_HEX, vals_XX_auth, 0x0f, "", HFILL }},
1425 { &hf_ipmi_app_3a_session_id,
1427 "ipmi.app3a.session_id", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
1428 { &hf_ipmi_app_3a_inbound_seq,
1429 { "Initial Inbound Sequence Number",
1430 "ipmi.app3a.inbound_seq", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
1431 { &hf_ipmi_app_3a_maxpriv_session,
1432 { "Maximum Privilege Level for session",
1433 "ipmi.app3a.maxpriv_session", FT_UINT8, BASE_HEX, vals_XX_priv, 0x0f, "", HFILL }},
1435 { &hf_ipmi_app_3b_req_priv,
1436 { "Requested Privilege Level",
1437 "ipmi.app3b.req_priv", FT_UINT8, BASE_HEX, vals_XX_priv, 0x0f, "", HFILL }},
1438 { &hf_ipmi_app_3b_new_priv,
1439 { "New Privilege Level",
1440 "ipmi.app3b.new_priv", FT_UINT8, BASE_HEX, vals_XX_priv, 0x0f, "", HFILL }},
1442 { &hf_ipmi_app_3c_session_id,
1444 "ipmi.app3c.session_id", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
1445 { &hf_ipmi_app_3c_session_handle,
1447 "ipmi.app3c.session_handle", FT_UINT8, BASE_HEX, NULL, 0, "", HFILL }},
1449 static gint *ett[] = {
1450 &ett_ipmi_app_01_byte2,
1451 &ett_ipmi_app_01_byte3,
1452 &ett_ipmi_app_01_byte6,
1453 &ett_ipmi_app_04_byte2,
1454 &ett_ipmi_app_06_syspwr,
1455 &ett_ipmi_app_06_devpwr,
1456 &ett_ipmi_app_07_syspwr,
1457 &ett_ipmi_app_07_devpwr,
1458 &ett_ipmi_app_24_timer_use,
1459 &ett_ipmi_app_24_timer_action,
1460 &ett_ipmi_app_24_expiration_flags,
1461 &ett_ipmi_app_25_timer_use,
1462 &ett_ipmi_app_25_timer_action,
1463 &ett_ipmi_app_25_expiration_flags,
1464 &ett_ipmi_app_2e_byte1,
1465 &ett_ipmi_app_2f_byte1,
1466 &ett_ipmi_app_30_byte1,
1467 &ett_ipmi_app_31_byte1,
1468 &ett_ipmi_app_32_rq_byte1,
1469 &ett_ipmi_app_32_rq_byte2,
1470 &ett_ipmi_app_32_rs_byte1,
1471 &ett_ipmi_app_32_rs_byte2,
1472 &ett_ipmi_app_34_byte1,
1473 &ett_ipmi_app_34_msg,
1474 &ett_ipmi_app_38_rq_byte1,
1475 &ett_ipmi_app_38_rq_byte2,
1476 &ett_ipmi_app_38_rs_byte1,
1477 &ett_ipmi_app_38_rs_byte2,
1478 &ett_ipmi_app_38_rs_byte3,
1479 &ett_ipmi_app_38_rs_byte4,
1480 &ett_ipmi_app_39_byte1,
1481 &ett_ipmi_app_3a_rq_byte1,
1482 &ett_ipmi_app_3a_rq_byte2,
1483 &ett_ipmi_app_3a_rs_byte1,
1484 &ett_ipmi_app_3a_rs_byte10,
1485 &ett_ipmi_app_3b_rq_byte1,
1486 &ett_ipmi_app_3b_rs_byte1,
1489 proto_register_field_array(proto_ipmi, hf, array_length(hf));
1490 proto_register_subtree_array(ett, array_length(ett));
1491 ipmi_register_netfn_cmdtab(IPMI_APP_REQ, IPMI_OEM_NONE, NULL, 0, NULL,
1492 cmd_app, array_length(cmd_app));