Coverage Report

Created: 2026-05-14 06:28

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-ipmi-app.c
Line
Count
Source
1
/* packet-ipmi-app.c
2
 * Sub-dissectors for IPMI messages (netFn=Application)
3
 * Copyright 2007-2008, Alexey Neyman, Pigeon Point Systems <avn@pigeonpoint.com>
4
 *
5
 * Wireshark - Network traffic analyzer
6
 * By Gerald Combs <gerald@wireshark.org>
7
 * Copyright 1998 Gerald Combs
8
 *
9
 * SPDX-License-Identifier: GPL-2.0-or-later
10
 */
11
12
#include "config.h"
13
14
15
#include <epan/packet.h>
16
#include <epan/tfs.h>
17
#include <wsutil/array.h>
18
19
#include "packet-ipmi.h"
20
21
void proto_register_ipmi_app(void);
22
23
static int ett_ipmi_app_01_byte2;
24
static int ett_ipmi_app_01_byte3;
25
static int ett_ipmi_app_01_byte6;
26
27
static int ett_ipmi_app_04_byte2;
28
29
static int ett_ipmi_app_06_syspwr;
30
static int ett_ipmi_app_06_devpwr;
31
32
static int ett_ipmi_app_07_syspwr;
33
static int ett_ipmi_app_07_devpwr;
34
35
static int ett_ipmi_app_24_timer_use;
36
static int ett_ipmi_app_24_timer_action;
37
static int ett_ipmi_app_24_expiration_flags;
38
39
static int ett_ipmi_app_25_timer_use;
40
static int ett_ipmi_app_25_timer_action;
41
static int ett_ipmi_app_25_expiration_flags;
42
43
static int ett_ipmi_app_2e_byte1;
44
static int ett_ipmi_app_2f_byte1;
45
static int ett_ipmi_app_30_byte1;
46
static int ett_ipmi_app_31_byte1;
47
static int ett_ipmi_app_32_rq_byte1;
48
static int ett_ipmi_app_32_rq_byte2;
49
static int ett_ipmi_app_32_rs_byte1;
50
static int ett_ipmi_app_32_rs_byte2;
51
static int ett_ipmi_app_33_rs_byte1;
52
static int ett_ipmi_app_33_msg;
53
static int ett_ipmi_app_34_byte1;
54
static int ett_ipmi_app_34_msg;
55
56
static int ett_ipmi_app_38_rq_byte1;
57
static int ett_ipmi_app_38_rq_byte2;
58
static int ett_ipmi_app_38_rs_byte1;
59
static int ett_ipmi_app_38_rs_byte2;
60
static int ett_ipmi_app_38_rs_byte3;
61
static int ett_ipmi_app_38_rs_byte4;
62
63
static int ett_ipmi_app_39_byte1;
64
65
static int ett_ipmi_app_3a_rq_byte1;
66
static int ett_ipmi_app_3a_rq_byte2;
67
static int ett_ipmi_app_3a_rs_byte1;
68
static int ett_ipmi_app_3a_rs_byte10;
69
70
static int ett_ipmi_app_3b_rq_byte1;
71
static int ett_ipmi_app_3b_rs_byte1;
72
73
static int hf_ipmi_app_01_dev_id;
74
static int hf_ipmi_app_01_dev_prov_sdr;
75
static int hf_ipmi_app_01_dev_rev;
76
static int hf_ipmi_app_01_dev_avail;
77
static int hf_ipmi_app_01_fw_rev_maj;
78
static int hf_ipmi_app_01_fw_rev_min;
79
static int hf_ipmi_app_01_ipmi_version;
80
static int hf_ipmi_app_01_ipmi_ads_chassis;
81
static int hf_ipmi_app_01_ipmi_ads_bridge;
82
static int hf_ipmi_app_01_ipmi_ads_ipmb_ev_gen;
83
static int hf_ipmi_app_01_ipmi_ads_ipmb_ev_recv;
84
static int hf_ipmi_app_01_ipmi_ads_fru;
85
static int hf_ipmi_app_01_ipmi_ads_sel;
86
static int hf_ipmi_app_01_ipmi_ads_sdr;
87
static int hf_ipmi_app_01_ipmi_ads_sensor;
88
static int hf_ipmi_app_01_manufacturer;
89
static int hf_ipmi_app_01_product;
90
static int hf_ipmi_app_01_fw_aux;
91
92
static int hf_ipmi_app_04_result;
93
static int hf_ipmi_app_04_fail;
94
static int hf_ipmi_app_04_fail_sel;
95
static int hf_ipmi_app_04_fail_sdr;
96
static int hf_ipmi_app_04_fail_bmc_fru;
97
static int hf_ipmi_app_04_fail_ipmb_sig;
98
static int hf_ipmi_app_04_fail_sdr_empty;
99
static int hf_ipmi_app_04_fail_iua;
100
static int hf_ipmi_app_04_fail_bb_fw;
101
static int hf_ipmi_app_04_fail_oper_fw;
102
103
static int hf_ipmi_app_05_devspec;
104
105
static int hf_ipmi_app_06_syspwr_set;
106
static int hf_ipmi_app_06_syspwr_enum;
107
static int hf_ipmi_app_06_devpwr_set;
108
static int hf_ipmi_app_06_devpwr_enum;
109
110
static int hf_ipmi_app_07_syspwr_enum;
111
static int hf_ipmi_app_07_devpwr_enum;
112
113
static int hf_ipmi_app_08_guid;
114
115
static int hf_ipmi_app_24_timer_use_dont_log;
116
static int hf_ipmi_app_24_timer_use_dont_stop;
117
static int hf_ipmi_app_24_timer_use_timer_use;
118
static int hf_ipmi_app_24_timer_action_interrupt;
119
static int hf_ipmi_app_24_timer_action_timeout_action;
120
static int hf_ipmi_app_24_pretimeout;
121
static int hf_ipmi_app_24_expiration_flags_oem;
122
static int hf_ipmi_app_24_expiration_flags_smsos;
123
static int hf_ipmi_app_24_expiration_flags_osload;
124
static int hf_ipmi_app_24_expiration_flags_biospost;
125
static int hf_ipmi_app_24_expiration_flags_biosfrb2;
126
static int hf_ipmi_app_24_initial_countdown;
127
128
static int hf_ipmi_app_25_timer_use_dont_log;
129
static int hf_ipmi_app_25_timer_use_started;
130
static int hf_ipmi_app_25_timer_use_timer_use;
131
static int hf_ipmi_app_25_timer_action_interrupt;
132
static int hf_ipmi_app_25_timer_action_timeout_action;
133
static int hf_ipmi_app_25_pretimeout;
134
static int hf_ipmi_app_25_expiration_flags_oem;
135
static int hf_ipmi_app_25_expiration_flags_smsos;
136
static int hf_ipmi_app_25_expiration_flags_osload;
137
static int hf_ipmi_app_25_expiration_flags_biospost;
138
static int hf_ipmi_app_25_expiration_flags_biosfrb2;
139
static int hf_ipmi_app_25_initial_countdown;
140
static int hf_ipmi_app_25_present_countdown;
141
142
static int hf_ipmi_app_2e_byte1_oem2;
143
static int hf_ipmi_app_2e_byte1_oem1;
144
static int hf_ipmi_app_2e_byte1_oem0;
145
static int hf_ipmi_app_2e_byte1_sel;
146
static int hf_ipmi_app_2e_byte1_emb;
147
static int hf_ipmi_app_2e_byte1_emb_full_intr;
148
static int hf_ipmi_app_2e_byte1_rmq_intr;
149
150
static int hf_ipmi_app_2f_byte1_oem2;
151
static int hf_ipmi_app_2f_byte1_oem1;
152
static int hf_ipmi_app_2f_byte1_oem0;
153
static int hf_ipmi_app_2f_byte1_sel;
154
static int hf_ipmi_app_2f_byte1_emb;
155
static int hf_ipmi_app_2f_byte1_emb_full_intr;
156
static int hf_ipmi_app_2f_byte1_rmq_intr;
157
158
static int hf_ipmi_app_30_byte1_oem2;
159
static int hf_ipmi_app_30_byte1_oem1;
160
static int hf_ipmi_app_30_byte1_oem0;
161
static int hf_ipmi_app_30_byte1_wd_pretimeout;
162
static int hf_ipmi_app_30_byte1_emb;
163
static int hf_ipmi_app_30_byte1_rmq;
164
165
static int hf_ipmi_app_31_byte1_oem2;
166
static int hf_ipmi_app_31_byte1_oem1;
167
static int hf_ipmi_app_31_byte1_oem0;
168
static int hf_ipmi_app_31_byte1_wd_pretimeout;
169
static int hf_ipmi_app_31_byte1_emb;
170
static int hf_ipmi_app_31_byte1_rmq;
171
172
static int hf_ipmi_app_32_rq_chno;
173
static int hf_ipmi_app_32_rq_state;
174
static int hf_ipmi_app_32_rs_chno;
175
static int hf_ipmi_app_32_rs_state;
176
177
static int hf_ipmi_app_33_rs_chan;
178
static int hf_ipmi_app_33_rs_priv;
179
static int hf_ipmi_app_33_msg;
180
181
static int hf_ipmi_app_34_track;
182
static int hf_ipmi_app_34_encrypt;
183
static int hf_ipmi_app_34_auth;
184
static int hf_ipmi_app_34_chan;
185
static int hf_ipmi_app_34_msg;
186
187
static int hf_ipmi_app_38_rq_ipmi20;
188
static int hf_ipmi_app_38_rq_chan;
189
static int hf_ipmi_app_38_rq_priv;
190
static int hf_ipmi_app_38_rs_chan;
191
static int hf_ipmi_app_38_rs_ipmi20;
192
static int hf_ipmi_app_38_rs_auth_oem;
193
static int hf_ipmi_app_38_rs_auth_straight;
194
static int hf_ipmi_app_38_rs_auth_md5;
195
static int hf_ipmi_app_38_rs_auth_md2;
196
static int hf_ipmi_app_38_rs_auth_none;
197
static int hf_ipmi_app_38_rs_kg;
198
static int hf_ipmi_app_38_rs_permsg;
199
static int hf_ipmi_app_38_rs_userauth;
200
static int hf_ipmi_app_38_rs_user_nonnull;
201
static int hf_ipmi_app_38_rs_user_null;
202
static int hf_ipmi_app_38_rs_user_anon;
203
static int hf_ipmi_app_38_rs_ipmi20_conn;
204
static int hf_ipmi_app_38_rs_ipmi15_conn;
205
static int hf_ipmi_app_38_rs_oem_iana;
206
static int hf_ipmi_app_38_rs_oem_aux;
207
208
static int hf_ipmi_app_39_authtype;
209
static int hf_ipmi_app_39_user;
210
static int hf_ipmi_app_39_temp_session;
211
static int hf_ipmi_app_39_challenge;
212
213
static int hf_ipmi_app_3a_authtype;
214
static int hf_ipmi_app_3a_privlevel;
215
static int hf_ipmi_app_3a_authcode;
216
static int hf_ipmi_app_3a_outbound_seq;
217
static int hf_ipmi_app_3a_authtype_session;
218
static int hf_ipmi_app_3a_session_id;
219
static int hf_ipmi_app_3a_inbound_seq;
220
static int hf_ipmi_app_3a_maxpriv_session;
221
222
static int hf_ipmi_app_3b_req_priv;
223
static int hf_ipmi_app_3b_new_priv;
224
225
static int hf_ipmi_app_3c_session_id;
226
static int hf_ipmi_app_3c_session_handle;
227
228
static const struct true_false_string tfs_01_dev_avail = {
229
  "Device firmware, SDR Repository update or self-initialization in progress",
230
  "Normal operation"
231
};
232
233
static const value_string vals_04_result[] = {
234
  { 0x55, "No error. All Self Tests Passed" },
235
  { 0x56, "Self Test function not implemented in this controller" },
236
  { 0x57, "Corrupted or inaccessible data or devices" },
237
  { 0x58, "Fatal hardware error" },
238
  { 0xff, "Reserved" },
239
  { 0, NULL }
240
};
241
242
static const struct true_false_string tfs_04_fail_unknown = {
243
  "Test failed",
244
  "Unknown"
245
};
246
247
static const struct true_false_string tfs_06_pwr = {
248
  "Set",
249
  "Do not change"
250
};
251
252
static const value_string vals_06_syspwr[] = {
253
  { 0x00, "Set S0 / G0" },
254
  { 0x01, "Set S1" },
255
  { 0x02, "Set S2" },
256
  { 0x03, "Set S3" },
257
  { 0x04, "Set S4" },
258
  { 0x05, "Set S5 / G2" },
259
  { 0x06, "Set S4/S5" },
260
  { 0x07, "Set G3" },
261
  { 0x08, "Sleeping" },
262
  { 0x09, "G1 sleeping" },
263
  { 0x0a, "Set override" },
264
  { 0x20, "Set Legacy On" },
265
  { 0x21, "Set Legacy Off" },
266
  { 0x2a, "Set unknown" },
267
  { 0x7f, "No change" },
268
  { 0, NULL }
269
};
270
271
static const value_string vals_06_devpwr[] = {
272
  { 0x00, "Set D0" },
273
  { 0x01, "Set D1" },
274
  { 0x02, "Set D2" },
275
  { 0x03, "Set D3" },
276
  { 0x2a, "Set unknown" },
277
  { 0x7f, "No change" },
278
  { 0, NULL }
279
};
280
281
static const value_string vals_07_syspwr[] = {
282
  { 0x00, "S0 / G0" },
283
  { 0x01, "S1" },
284
  { 0x02, "S2" },
285
  { 0x03, "S3" },
286
  { 0x04, "S4" },
287
  { 0x05, "S5 / G2" },
288
  { 0x06, "S4/S5" },
289
  { 0x07, "G3" },
290
  { 0x08, "Sleeping" },
291
  { 0x09, "G1 sleeping" },
292
  { 0x0a, "Override" },
293
  { 0x20, "Legacy On" },
294
  { 0x21, "Legacy Off" },
295
  { 0x2a, "unknown" },
296
  { 0, NULL }
297
};
298
299
static const value_string vals_07_devpwr[] = {
300
  { 0x00, "D0" },
301
  { 0x01, "D1" },
302
  { 0x02, "D2" },
303
  { 0x03, "D3" },
304
  { 0x2a, "unknown" },
305
  { 0, NULL }
306
};
307
308
static const value_string vals_24_timer_use[] = {
309
  { 0x00, "reserved" },
310
  { 0x01, "BIOS FRB2" },
311
  { 0x02, "BIOS/POST" },
312
  { 0x03, "OS Load" },
313
  { 0x04, "SMS/OS" },
314
  { 0x05, "OEM" },
315
  { 0x06, "reserved" },
316
  { 0x07, "reserved" },
317
318
  { 0, NULL }
319
};
320
321
static const value_string vals_24_timer_action_interrupt[] = {
322
  { 0x00, "none" },
323
  { 0x01, "SMI" },
324
  { 0x02, "NMI / Diagnostic interrupt" },
325
  { 0x03, "Messaging interrupt" },
326
  { 0x04, "reserved" },
327
  { 0x05, "reserved" },
328
  { 0x06, "reserved" },
329
  { 0x07, "reserved" },
330
331
  { 0, NULL }
332
};
333
334
static const value_string vals_24_timer_action_timeout[] = {
335
  { 0x00, "no action" },
336
  { 0x01, "Hard Reset" },
337
  { 0x02, "Power Down" },
338
  { 0x03, "Power Cycle" },
339
  { 0x04, "reserved" },
340
  { 0x05, "reserved" },
341
  { 0x06, "reserved" },
342
  { 0x07, "reserved" },
343
344
  { 0, NULL }
345
};
346
347
static const struct true_false_string tfs_24_exp_flags = {
348
  "clear timer use expiration bit",
349
  "leave alone"
350
};
351
352
static const struct true_false_string tfs_2e_enable = { "Enable", "Disable" };
353
static const struct true_false_string tfs_2f_enabled = { "Enabled", "Disabled" };
354
355
static const struct true_false_string tfs_30_clear = {
356
  "clear",
357
  "leave alone"
358
};
359
360
static const value_string vals_32_state[] = {
361
  { 0x00, "Disable channel" },
362
  { 0x01, "Enable channel" },
363
  { 0x02, "Get channel enable/disable state" },
364
  { 0x03, "Reserved" },
365
366
  { 0, NULL }
367
};
368
369
static const struct true_false_string tfs_32_state = {
370
  "Channel enabled",
371
  "Channel disabled"
372
};
373
374
static const value_string vals_34_track[] = {
375
  { 0x00, "No tracking" },
376
  { 0x01, "Track Request" },
377
  { 0x02, "Send Raw" },
378
  { 0, NULL }
379
};
380
381
static const value_string vals_38_ipmi20[] = {
382
  { 0x00, "Backward compatible with IPMI 1.5" },
383
  { 0x01, "IPMI v2.0+ extended data" },
384
  { 0, NULL }
385
};
386
387
static const value_string vals_XX_priv[] = {
388
  { 0x00, "None / No change" },
389
  { 0x01, "Callback" },
390
  { 0x02, "User" },
391
  { 0x03, "Operator" },
392
  { 0x04, "Administrator" },
393
  { 0x05, "OEM Proprietary" },
394
  { 0, NULL }
395
};
396
397
static const struct true_false_string tfs_38_supp = { "Supported", "Not supported" };
398
static const struct true_false_string tfs_38_kg = { "Set to non-zero", "Set to default (0)" };
399
400
static const value_string vals_XX_auth[] = {
401
  { 0x00, "None" },
402
  { 0x01, "MD2" },
403
  { 0x02, "MD5" },
404
  { 0x04, "straight password" },
405
  { 0x05, "OEM" },
406
  { 0, NULL }
407
};
408
409
410
/* Get Device ID.
411
 */
412
static void
413
rs01(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
414
0
{
415
0
  static int * const byte2[] = { &hf_ipmi_app_01_dev_prov_sdr, &hf_ipmi_app_01_dev_rev, NULL };
416
0
  static int * const byte3[] = { &hf_ipmi_app_01_dev_avail, &hf_ipmi_app_01_fw_rev_maj, NULL };
417
0
  static int * const byte6[] = { &hf_ipmi_app_01_ipmi_ads_chassis, &hf_ipmi_app_01_ipmi_ads_bridge,
418
0
    &hf_ipmi_app_01_ipmi_ads_ipmb_ev_gen, &hf_ipmi_app_01_ipmi_ads_ipmb_ev_recv,
419
0
    &hf_ipmi_app_01_ipmi_ads_fru, &hf_ipmi_app_01_ipmi_ads_sel, &hf_ipmi_app_01_ipmi_ads_sdr,
420
0
    &hf_ipmi_app_01_ipmi_ads_sensor, NULL };
421
0
  size_t len;
422
423
0
  len = tvb_captured_length(tvb);
424
425
0
  proto_tree_add_item(tree, hf_ipmi_app_01_dev_id, tvb, 0, 1, ENC_LITTLE_ENDIAN);
426
0
  proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_app_01_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
427
0
  proto_tree_add_bitmask_text(tree, tvb, 2, 1, NULL, NULL, ett_ipmi_app_01_byte3, byte3, ENC_LITTLE_ENDIAN, 0);
428
0
  proto_tree_add_item(tree, hf_ipmi_app_01_fw_rev_min, tvb, 3, 1, ENC_LITTLE_ENDIAN);
429
430
0
  proto_tree_add_item(tree, hf_ipmi_app_01_ipmi_version, tvb, 4, 1, ENC_LITTLE_ENDIAN);
431
432
0
  proto_tree_add_bitmask_text(tree, tvb, 5, 1, "Additional device support: ", "None",
433
0
      ett_ipmi_app_01_byte6, byte6, ENC_LITTLE_ENDIAN, 0);
434
0
  proto_tree_add_item(tree, hf_ipmi_app_01_manufacturer, tvb, 6, 3, ENC_LITTLE_ENDIAN);
435
0
  proto_tree_add_item(tree, hf_ipmi_app_01_product, tvb, 9, 2, ENC_LITTLE_ENDIAN);
436
0
  if (len > 11) {
437
    /* IPMI states that Aux Revision should be displayed in MSB order */
438
0
    proto_tree_add_item(tree, hf_ipmi_app_01_fw_aux, tvb, 11, 4, ENC_NA);
439
0
  }
440
0
}
441
442
/* Get Self Test Results.
443
 */
444
static void
445
rs04(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
446
0
{
447
0
  static int * const byte2[] = { &hf_ipmi_app_04_fail_sel, &hf_ipmi_app_04_fail_sdr,
448
0
    &hf_ipmi_app_04_fail_bmc_fru, &hf_ipmi_app_04_fail_ipmb_sig, &hf_ipmi_app_04_fail_sdr_empty,
449
0
    &hf_ipmi_app_04_fail_iua, &hf_ipmi_app_04_fail_bb_fw, &hf_ipmi_app_04_fail_oper_fw, NULL };
450
0
  int res, fail;
451
452
0
  res = tvb_get_uint8(tvb, 0);
453
0
  fail = tvb_get_uint8(tvb, 1);
454
455
0
  proto_tree_add_uint_format_value(tree, hf_ipmi_app_04_result, tvb, 0, 1,
456
0
      res, "%s (0x%02x)",
457
0
      val_to_str_const(res, vals_04_result, "Device-specific internal failure"),
458
0
      res);
459
460
0
  if (res == 0x55 || res == 0x56 || res == 0xff) {
461
0
    proto_tree_add_uint_format_value(tree, hf_ipmi_app_04_fail, tvb, 1, 1,
462
0
        fail, "0x%02x (must be 0x00)",
463
0
        fail);
464
0
    return;
465
0
  }
466
467
0
  if (res != 0x57) {
468
0
    proto_tree_add_uint_format_value(tree, hf_ipmi_app_04_fail, tvb, 1, 1,
469
0
        fail, "0x%02x (device-specific)",
470
0
        fail);
471
0
    return;
472
0
  }
473
474
0
  proto_tree_add_bitmask(tree, tvb, 1, hf_ipmi_app_04_fail, ett_ipmi_app_04_byte2, byte2, ENC_LITTLE_ENDIAN);
475
0
}
476
477
/* Manufacturing Test On.
478
 */
479
static void
480
rq05(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
481
0
{
482
0
  proto_tree_add_item(tree, hf_ipmi_app_05_devspec, tvb, 0, -1, ENC_NA);
483
0
}
484
485
/* Set ACPI Power State.
486
 */
487
static void
488
rq06(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
489
0
{
490
0
  static int * const byte1[] = { &hf_ipmi_app_06_syspwr_set, &hf_ipmi_app_06_syspwr_enum, NULL };
491
0
  static int * const byte2[] = { &hf_ipmi_app_06_devpwr_set, &hf_ipmi_app_06_devpwr_enum, NULL };
492
493
0
  proto_tree_add_bitmask_text(tree, tvb, 0, 1, "ACPI System Power State: ", NULL,
494
0
      ett_ipmi_app_06_syspwr, byte1, ENC_LITTLE_ENDIAN, 0);
495
0
  proto_tree_add_bitmask_text(tree, tvb, 1, 1, "ACPI Device Power State: ", NULL,
496
0
      ett_ipmi_app_06_devpwr, byte2, ENC_LITTLE_ENDIAN, 0);
497
0
}
498
499
/* Get ACPI Power State.
500
 */
501
static void
502
rs07(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
503
0
{
504
0
  static int * const byte1[] = { &hf_ipmi_app_07_syspwr_enum, NULL };
505
0
  static int * const byte2[] = { &hf_ipmi_app_07_devpwr_enum, NULL };
506
507
0
  proto_tree_add_bitmask_text(tree, tvb, 0, 1, "ACPI System Power State: ", NULL,
508
0
      ett_ipmi_app_07_syspwr, byte1, ENC_LITTLE_ENDIAN, 0);
509
0
  proto_tree_add_bitmask_text(tree, tvb, 1, 1, "ACPI Device Power State: ", NULL,
510
0
      ett_ipmi_app_07_devpwr, byte2, ENC_LITTLE_ENDIAN, 0);
511
0
}
512
513
/* Get Device GUID.
514
 */
515
static void
516
rs08(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
517
0
{
518
0
  ipmi_add_guid(tree, hf_ipmi_app_08_guid, tvb, 0);
519
0
}
520
521
/* Reset Watchdog Timer.
522
 */
523
static const value_string cc22[] = {
524
  { 0x80, "Attempt to start un-initialized watchdog" },
525
  { 0, NULL }
526
};
527
528
/* Set Watchdog Timer.
529
 */
530
static void
531
rq24(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
532
0
{
533
0
  static int * const byte1[] = { &hf_ipmi_app_24_timer_use_dont_log,
534
0
    &hf_ipmi_app_24_timer_use_dont_stop, &hf_ipmi_app_24_timer_use_timer_use, NULL };
535
0
  static int * const byte2[] = { &hf_ipmi_app_24_timer_action_interrupt,
536
0
    &hf_ipmi_app_24_timer_action_timeout_action, NULL };
537
0
  static int * const byte4[] = { &hf_ipmi_app_24_expiration_flags_oem,
538
0
    &hf_ipmi_app_24_expiration_flags_smsos, &hf_ipmi_app_24_expiration_flags_osload,
539
0
    &hf_ipmi_app_24_expiration_flags_biospost, &hf_ipmi_app_24_expiration_flags_biosfrb2, NULL };
540
541
0
  proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Timer Use: ", NULL, ett_ipmi_app_24_timer_use,
542
0
      byte1, ENC_LITTLE_ENDIAN, 0);
543
0
  proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_app_24_timer_action,
544
0
      byte2, ENC_LITTLE_ENDIAN, 0);
545
0
  proto_tree_add_item(tree, hf_ipmi_app_24_pretimeout, tvb, 2, 1, ENC_LITTLE_ENDIAN);
546
0
  proto_tree_add_bitmask_text(tree, tvb, 3, 1, "Timer Use Expiration flags clear: ", "None",
547
0
      ett_ipmi_app_24_expiration_flags, byte4, ENC_LITTLE_ENDIAN, BMT_NO_TFS);
548
0
  proto_tree_add_item(tree, hf_ipmi_app_24_initial_countdown, tvb, 4, 2, ENC_LITTLE_ENDIAN);
549
0
}
550
551
/* Get Watchdog Timer.
552
 */
553
static void
554
rs25(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
555
0
{
556
0
  static int * const byte1[] = { &hf_ipmi_app_25_timer_use_dont_log,
557
0
    &hf_ipmi_app_25_timer_use_started, &hf_ipmi_app_25_timer_use_timer_use, NULL };
558
0
  static int * const byte2[] = { &hf_ipmi_app_25_timer_action_interrupt,
559
0
    &hf_ipmi_app_25_timer_action_timeout_action, NULL };
560
0
  static int * const byte4[] = { &hf_ipmi_app_25_expiration_flags_oem, &hf_ipmi_app_25_expiration_flags_smsos,
561
0
    &hf_ipmi_app_25_expiration_flags_osload, &hf_ipmi_app_25_expiration_flags_biospost,
562
0
    &hf_ipmi_app_25_expiration_flags_biosfrb2, NULL };
563
564
0
  proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Timer Use: ", NULL, ett_ipmi_app_25_timer_use,
565
0
      byte1, ENC_LITTLE_ENDIAN, 0);
566
0
  proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_app_25_timer_action,
567
0
      byte2, ENC_LITTLE_ENDIAN, 0);
568
0
  proto_tree_add_item(tree, hf_ipmi_app_25_pretimeout, tvb, 2, 1, ENC_LITTLE_ENDIAN);
569
0
  proto_tree_add_bitmask_text(tree, tvb, 3, 1, "Timer Use Expiration flags: ", "None",
570
0
      ett_ipmi_app_25_expiration_flags, byte4, ENC_LITTLE_ENDIAN, BMT_NO_TFS);
571
0
  proto_tree_add_item(tree, hf_ipmi_app_25_initial_countdown, tvb, 4, 2, ENC_LITTLE_ENDIAN);
572
0
  proto_tree_add_item(tree, hf_ipmi_app_25_present_countdown, tvb, 6, 2, ENC_LITTLE_ENDIAN);
573
0
}
574
575
/* Set BMC Global Enables.
576
 */
577
static void
578
rq2e(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
579
0
{
580
0
  static int * const byte1[] = { &hf_ipmi_app_2e_byte1_oem2, &hf_ipmi_app_2e_byte1_oem1,
581
0
    &hf_ipmi_app_2e_byte1_oem0, &hf_ipmi_app_2e_byte1_sel, &hf_ipmi_app_2e_byte1_emb,
582
0
    &hf_ipmi_app_2e_byte1_emb_full_intr, &hf_ipmi_app_2e_byte1_rmq_intr, NULL };
583
584
0
  proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Enables: ", "None", ett_ipmi_app_2e_byte1,
585
0
      byte1, ENC_LITTLE_ENDIAN, BMT_NO_TFS);
586
0
}
587
588
/* Get BMC Global Enables.
589
 */
590
static void
591
rs2f(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
592
0
{
593
0
  static int * const byte1[] = { &hf_ipmi_app_2f_byte1_oem2, &hf_ipmi_app_2f_byte1_oem1,
594
0
    &hf_ipmi_app_2f_byte1_oem0, &hf_ipmi_app_2f_byte1_sel, &hf_ipmi_app_2f_byte1_emb,
595
0
    &hf_ipmi_app_2f_byte1_emb_full_intr, &hf_ipmi_app_2f_byte1_rmq_intr, NULL };
596
597
0
  proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Enables: ", "None", ett_ipmi_app_2f_byte1,
598
0
      byte1, ENC_LITTLE_ENDIAN, BMT_NO_TFS);
599
0
}
600
601
/* Clear Message Flags.
602
 */
603
static void
604
rq30(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
605
0
{
606
0
  static int * const byte1[] = { &hf_ipmi_app_30_byte1_oem2, &hf_ipmi_app_30_byte1_oem1,
607
0
    &hf_ipmi_app_30_byte1_oem0, &hf_ipmi_app_30_byte1_wd_pretimeout,
608
0
    &hf_ipmi_app_30_byte1_emb, &hf_ipmi_app_30_byte1_rmq, NULL };
609
610
0
  proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Clear Message Flags: ", "None",
611
0
      ett_ipmi_app_30_byte1, byte1, ENC_LITTLE_ENDIAN, BMT_NO_TFS);
612
0
}
613
614
/* Get Message Flags.
615
 */
616
static void
617
rs31(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
618
0
{
619
0
  static int * const byte1[] = { &hf_ipmi_app_31_byte1_oem2, &hf_ipmi_app_31_byte1_oem1,
620
0
    &hf_ipmi_app_31_byte1_oem0, &hf_ipmi_app_31_byte1_wd_pretimeout,
621
0
    &hf_ipmi_app_31_byte1_emb, &hf_ipmi_app_31_byte1_rmq, NULL };
622
623
0
  proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Flags: ", "None",
624
0
      ett_ipmi_app_31_byte1, byte1, ENC_LITTLE_ENDIAN, BMT_NO_TFS);
625
0
}
626
627
/* Enable Message Channel Receive.
628
 */
629
static void
630
rq32(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
631
0
{
632
0
  static int * const byte1[] = { &hf_ipmi_app_32_rq_chno, NULL };
633
0
  static int * const byte2[] = { &hf_ipmi_app_32_rq_state, NULL };
634
635
0
  proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_app_32_rq_byte1,
636
0
      byte1, ENC_LITTLE_ENDIAN, 0);
637
0
  proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_app_32_rq_byte2,
638
0
      byte2, ENC_LITTLE_ENDIAN, 0);
639
0
}
640
641
static void
642
rs32(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
643
0
{
644
0
  static int * const byte1[] = { &hf_ipmi_app_32_rs_chno, NULL };
645
0
  static int * const byte2[] = { &hf_ipmi_app_32_rs_state, NULL };
646
647
0
  proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_app_32_rs_byte1,
648
0
      byte1, ENC_LITTLE_ENDIAN, 0);
649
0
  proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_app_32_rs_byte2,
650
0
      byte2, ENC_LITTLE_ENDIAN, 0);
651
0
}
652
653
/* Get Message
654
 */
655
static const value_string cc33[] = {
656
  { 0x80, "Data not available (queue/buffer empty)" },
657
  { 0, NULL }
658
};
659
660
static void
661
rs33(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
662
0
{
663
0
  static int * const byte1[] = { &hf_ipmi_app_33_rs_chan,
664
0
      &hf_ipmi_app_33_rs_priv, NULL };
665
0
  tvbuff_t *next;
666
0
  ipmi_dissect_arg_t arg;
667
668
0
  proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_app_33_rs_byte1,
669
0
      byte1, ENC_LITTLE_ENDIAN, 0);
670
671
0
  next = tvb_new_subset_remaining(tvb, 1);
672
673
0
  arg.context = IPMI_E_GETMSG;
674
0
  arg.channel = tvb_get_uint8(tvb, 0) & 0xF;
675
0
  arg.flags = 0;
676
677
0
  do_dissect_ipmb(next, pinfo, tree,
678
0
      hf_ipmi_app_33_msg, ett_ipmi_app_33_msg, &arg);
679
680
0
}
681
682
683
/* Send Message
684
 */
685
static void
686
rq34(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
687
0
{
688
0
  static int * const byte1[] = { &hf_ipmi_app_34_track, &hf_ipmi_app_34_encrypt,
689
0
    &hf_ipmi_app_34_auth, &hf_ipmi_app_34_chan, NULL };
690
0
  tvbuff_t *next;
691
0
  ipmi_dissect_arg_t arg;
692
693
0
  proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
694
0
      ett_ipmi_app_34_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
695
696
0
  next = tvb_new_subset_remaining(tvb, 1);
697
698
0
  arg.context = IPMI_E_SENDMSG_RQ;
699
0
  arg.channel = tvb_get_uint8(tvb, 0) & 0xF;
700
0
  arg.flags = 0;
701
702
0
  do_dissect_ipmb(next, pinfo, tree,
703
0
      hf_ipmi_app_34_msg, ett_ipmi_app_34_msg, &arg);
704
0
}
705
706
static void
707
rs34(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
708
0
{
709
0
  if (tvb_captured_length(tvb)) {
710
0
    ipmi_dissect_arg_t arg;
711
712
0
    arg.context = IPMI_E_SENDMSG_RS;
713
0
    arg.channel = 0;
714
0
    arg.flags = 0;
715
716
0
    do_dissect_ipmb(tvb, pinfo, tree,
717
0
        hf_ipmi_app_34_msg, ett_ipmi_app_34_msg, &arg);
718
0
  }
719
0
}
720
721
static const value_string cc34[] = {
722
  { 0x80, "Invalid Session Handle" },
723
  { 0x81, "Lost Arbitration" },
724
  { 0x82, "Bus Error" },
725
  { 0x83, "NAK on Write" },
726
  { 0, NULL }
727
};
728
729
/* Read Event Message Buffer
730
 */
731
static const value_string cc35[] = {
732
  { 0x80, "Data not available (queue/buffer empty)" },
733
  { 0, NULL }
734
};
735
736
/* Get Channel Authentication Capabilities
737
 */
738
static void
739
rq38(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
740
0
{
741
0
  static int * const byte1[] = { &hf_ipmi_app_38_rq_ipmi20, &hf_ipmi_app_38_rq_chan, NULL };
742
0
  static int * const byte2[] = { &hf_ipmi_app_38_rq_priv, NULL };
743
744
0
  proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_app_38_rq_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
745
0
  proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_app_38_rq_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
746
0
}
747
748
static void
749
rs38(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
750
0
{
751
0
  static int * const byte1[] = { &hf_ipmi_app_38_rs_chan, NULL };
752
0
  static int * const byte2[] = { &hf_ipmi_app_38_rs_ipmi20, &hf_ipmi_app_38_rs_auth_oem,
753
0
    &hf_ipmi_app_38_rs_auth_straight, &hf_ipmi_app_38_rs_auth_md5, &hf_ipmi_app_38_rs_auth_md2,
754
0
    &hf_ipmi_app_38_rs_auth_none, NULL };
755
0
  static int * const byte3[] = { &hf_ipmi_app_38_rs_kg, &hf_ipmi_app_38_rs_permsg, &hf_ipmi_app_38_rs_userauth,
756
0
    &hf_ipmi_app_38_rs_user_nonnull, &hf_ipmi_app_38_rs_user_null, &hf_ipmi_app_38_rs_user_anon, NULL };
757
0
  static int * const byte4[] = { &hf_ipmi_app_38_rs_ipmi20_conn, &hf_ipmi_app_38_rs_ipmi15_conn, NULL };
758
759
0
  proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_app_38_rs_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
760
0
  proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_app_38_rs_byte2, byte2, ENC_LITTLE_ENDIAN, BMT_NO_FALSE);
761
0
  proto_tree_add_bitmask_text(tree, tvb, 2, 1, NULL, NULL, ett_ipmi_app_38_rs_byte3, byte3, ENC_LITTLE_ENDIAN, BMT_NO_FALSE);
762
0
  proto_tree_add_bitmask_text(tree, tvb, 3, 1, "Supported connections: ", "None",
763
0
      ett_ipmi_app_38_rs_byte4, byte4, ENC_LITTLE_ENDIAN, 0);
764
0
  proto_tree_add_item(tree, hf_ipmi_app_38_rs_oem_iana, tvb, 4, 3, ENC_LITTLE_ENDIAN);
765
0
  proto_tree_add_item(tree, hf_ipmi_app_38_rs_oem_aux, tvb, 7, 1, ENC_LITTLE_ENDIAN);
766
0
}
767
768
/* Get Session Challenge
769
 */
770
static void
771
rq39(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
772
0
{
773
0
  static int * const byte1[] = { &hf_ipmi_app_39_authtype, NULL };
774
775
0
  proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
776
0
      ett_ipmi_app_39_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
777
0
  proto_tree_add_item(tree, hf_ipmi_app_39_user, tvb, 1, 16, ENC_ASCII);
778
0
}
779
780
static void
781
rs39(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
782
0
{
783
0
  proto_tree_add_item(tree, hf_ipmi_app_39_temp_session, tvb, 0, 4, ENC_LITTLE_ENDIAN);
784
0
  proto_tree_add_item(tree, hf_ipmi_app_39_challenge, tvb, 4, 16, ENC_NA);
785
0
}
786
787
static const value_string cc39[] = {
788
  { 0x81, "Invalid user name" },
789
  { 0x82, "Null user name (User 1) not enabled" },
790
  { 0, NULL }
791
};
792
793
/* Activate Session
794
 */
795
static void
796
rq3a(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
797
0
{
798
0
  static int * const byte1[] = { &hf_ipmi_app_3a_authtype, NULL };
799
0
  static int * const byte2[] = { &hf_ipmi_app_3a_privlevel, NULL };
800
801
0
  proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
802
0
      ett_ipmi_app_3a_rq_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
803
0
  proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
804
0
      ett_ipmi_app_3a_rq_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
805
0
  proto_tree_add_item(tree, hf_ipmi_app_3a_authcode, tvb, 2, 16, ENC_NA);
806
0
  proto_tree_add_item(tree, hf_ipmi_app_3a_outbound_seq, tvb, 18, 4, ENC_LITTLE_ENDIAN);
807
0
}
808
809
static void
810
rs3a(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
811
0
{
812
0
  static int * const byte1[] = { &hf_ipmi_app_3a_authtype_session, NULL };
813
0
  static int * const byte10[] = { &hf_ipmi_app_3a_maxpriv_session, NULL };
814
815
0
  proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
816
0
      ett_ipmi_app_3a_rs_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
817
0
  proto_tree_add_item(tree, hf_ipmi_app_3a_session_id, tvb, 1, 4, ENC_LITTLE_ENDIAN);
818
0
  proto_tree_add_item(tree, hf_ipmi_app_3a_inbound_seq, tvb, 5, 4, ENC_LITTLE_ENDIAN);
819
0
  proto_tree_add_bitmask_text(tree, tvb, 9, 1, NULL, NULL,
820
0
      ett_ipmi_app_3a_rs_byte10, byte10, ENC_LITTLE_ENDIAN, 0);
821
0
}
822
823
static const value_string cc3a[] = {
824
  { 0x81, "No session slot available" },
825
  { 0x82, "No slot available for given user" },
826
  { 0x83, "No slot available to support user due to maximum privilege capability" },
827
  { 0x84, "Session sequence number out-of-range" },
828
  { 0x85, "Invalid session ID in request" },
829
  { 0x86, "Requested maximum privilege level exceeds user and/or channel privilege limit" },
830
  { 0, NULL }
831
};
832
833
/* Set Session Privilege Level
834
 */
835
static void
836
rq3b(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
837
0
{
838
0
  static int * const byte1[] = { &hf_ipmi_app_3b_req_priv, NULL };
839
840
0
  proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
841
0
      ett_ipmi_app_3b_rq_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
842
0
}
843
844
static void
845
rs3b(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
846
0
{
847
0
  static int * const byte1[] = { &hf_ipmi_app_3b_new_priv, NULL };
848
849
0
  proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
850
0
      ett_ipmi_app_3b_rs_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
851
0
}
852
853
static const value_string cc3b[] = {
854
  { 0x80, "Requested level not available for this user" },
855
  { 0x81, "Requested level exceeds Channel and/or User Privilege Limit" },
856
  { 0x82, "Cannot disable User Level authentication" },
857
  { 0, NULL }
858
};
859
860
/* Close Session
861
 */
862
static void
863
rq3c(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
864
0
{
865
0
  proto_tree_add_item(tree, hf_ipmi_app_3c_session_id, tvb, 0, 4, ENC_LITTLE_ENDIAN);
866
0
  if (tvb_captured_length(tvb) > 4) {
867
0
    proto_tree_add_item(tree, hf_ipmi_app_3c_session_handle, tvb, 4, 1, ENC_LITTLE_ENDIAN);
868
0
  }
869
0
}
870
871
static const value_string cc3c[] = {
872
  { 0x87, "Invalid Session ID in request" },
873
  { 0x88, "Invalid Session Handle in request" },
874
  { 0, NULL }
875
};
876
877
static const value_string cc40[] = {
878
  { 0x82, "Set not supported on selected channel" },
879
  { 0x83, "Access mode not supported" },
880
  { 0, NULL }
881
};
882
883
static const value_string cc41[] = {
884
  { 0x82, "Command not supported for selected channel" },
885
  { 0, NULL }
886
};
887
888
static const value_string cc47[] = {
889
  { 0x80, "Password test failed: password data does not match stored value" },
890
  { 0x81, "Password test failed: wrong password size was used" },
891
  { 0, NULL }
892
};
893
894
static const value_string cc48[] = {
895
  { 0x80, "Payload already active on another session" },
896
  { 0x81, "Payload type is disabled" },
897
  { 0x82, "Payload activation limit reached" },
898
  { 0x83, "Cannot activate payload with encryption" },
899
  { 0x84, "Cannot activate payload without encryption" },
900
  { 0, NULL }
901
};
902
903
static const value_string cc49[] = {
904
  { 0x80, "Payload already deactivated" },
905
  { 0x81, "Payload type is disabled" },
906
  { 0, NULL }
907
};
908
909
static const value_string cc4f[] = {
910
  { 0x80, "Payload type not available on given channel" },
911
  { 0, NULL }
912
};
913
914
static const value_string cc50[] = {
915
  { 0x80, "OEM Payload IANA and/or Payload ID not supported" },
916
  { 0, NULL }
917
};
918
919
static const value_string cc52[] = {
920
  { 0x81, "Lost Arbitration" },
921
  { 0x82, "Bus Error" },
922
  { 0x83, "NAK on Write" },
923
  { 0x84, "Truncated Read" },
924
  { 0, NULL }
925
};
926
927
static const value_string cc55[] = {
928
  { 0x80, "Operation not supported for given payload type" },
929
  { 0x81, "Operation not allowed under present configuration" },
930
  { 0x82, "Encryption not available for session that payload type is active under" },
931
  { 0x83, "Payload instance is not presently active" },
932
  { 0, NULL }
933
};
934
935
static const value_string cc56[] = {
936
  { 0x80, "Cannot perform set/confirm, key is locked" },
937
  { 0x81, "Insufficient key bytes" },
938
  { 0x82, "Too many key bytes" },
939
  { 0x83, "Key value does not meet criteria for specified type" },
940
  { 0x84, "KR is not used" },
941
  { 0, NULL }
942
};
943
944
static const value_string cc58[] = {
945
  { 0x80, "Parameter not supported" },
946
  { 0x81, "Attempt to set the set-in-progress when not in set-complete state" },
947
  { 0x82, "Attempt to write read-only parameter" },
948
  { 0, NULL }
949
};
950
951
static const value_string cc59[] = {
952
  { 0x80, "Parameter not supported" },
953
  { 0, NULL }
954
};
955
956
static const value_string cc60[] = {
957
  { 0x80, "Attempt to enable unsupported/unconfigurable command" },
958
  { 0, NULL }
959
};
960
961
static const value_string cc62[] = {
962
  { 0x80, "Attempt to enable unsupported/unconfigurable sub-function" },
963
  { 0, NULL }
964
};
965
966
static const ipmi_cmd_t cmd_app[] = {
967
  /* IPM Device Global Commands */
968
  { 0x01, NULL, rs01, NULL, NULL, "Get Device ID", 0 },
969
  { 0x02, NULL, NULL, NULL, NULL, "Cold Reset", 0 },
970
  { 0x03, NULL, NULL, NULL, NULL, "Warm Reset", 0 },
971
  { 0x04, NULL, rs04, NULL, NULL, "Get Self Test Results", 0 },
972
  { 0x05, rq05, NULL, NULL, NULL, "Manufacturing Test On", 0 },
973
  { 0x06, rq06, NULL, NULL, NULL, "Set ACPI Power State", 0 },
974
  { 0x07, NULL, rs07, NULL, NULL, "Get ACPI Power State", 0 },
975
  { 0x08, NULL, rs08, NULL, NULL, "Get Device GUID", 0 },
976
  { 0x09, IPMI_TBD,   NULL, NULL, "Get NetFn Support", 0 },
977
  { 0x0a, IPMI_TBD,   NULL, NULL, "Get Command Support", 0 },
978
  { 0x0b, IPMI_TBD,   NULL, NULL, "Get Command Sub-function Support", 0 },
979
  { 0x0c, IPMI_TBD,   NULL, NULL, "Get Configurable Commands", 0 },
980
  { 0x0d, IPMI_TBD,   NULL, NULL, "Get Configurable Command Sub-functions", 0 },
981
982
  /* BMC Watchdog Timer Commands */
983
  { 0x22, NULL, NULL, cc22, NULL, "Reset Watchdog Timer", 0 },
984
  { 0x24, rq24, NULL, NULL, NULL, "Set Watchdog Timer", 0 },
985
  { 0x25, NULL, rs25, NULL, NULL, "Get Watchdog Timer", 0 },
986
987
  /* BMC Device and Messaging Commands */
988
  { 0x2e, rq2e, NULL, NULL, NULL, "Set BMC Global Enables", 0 },
989
  { 0x2f, NULL, rs2f, NULL, NULL, "Get BMC Global Enables", 0 },
990
  { 0x30, rq30, NULL, NULL, NULL, "Clear Message Flags", 0 },
991
  { 0x31, NULL, rs31, NULL, NULL, "Get Message Flags", 0 },
992
  { 0x32, rq32, rs32, NULL, NULL, "Enable Message Channel Receive", 0 },
993
  { 0x33, NULL, rs33, cc33, NULL, "Get Message", CMD_CALLRQ },
994
  { 0x34, rq34, rs34, cc34, NULL, "Send Message", CMD_CALLRQ },
995
  { 0x35, IPMI_TBD,   cc35, NULL, "Read Event Message Buffer", 0 },
996
  { 0x36, IPMI_TBD,   NULL, NULL, "Get BT Interface Capabilities", 0 },
997
  { 0x37, IPMI_TBD,   NULL, NULL, "Get System GUID", 0 },
998
  { 0x38, rq38, rs38, NULL, NULL, "Get Channel Authentication Capabilities", 0 },
999
  { 0x39, rq39, rs39, cc39, NULL, "Get Session Challenge", 0 },
1000
  { 0x3a, rq3a, rs3a, cc3a, NULL, "Activate Session", 0 },
1001
  { 0x3b, rq3b, rs3b, cc3b, NULL, "Set Session Privilege Level", 0 },
1002
  { 0x3c, rq3c, NULL, cc3c, NULL, "Close Session", 0 },
1003
  { 0x3d, IPMI_TBD,   NULL, NULL, "Get Session Info", 0 },
1004
  { 0x3f, IPMI_TBD,   NULL, NULL, "Get AuthCode", 0 },
1005
  { 0x40, IPMI_TBD,   cc40, NULL, "Set Channel Access", 0 },
1006
  { 0x41, IPMI_TBD,   cc41, NULL, "Get Channel Access", 0 },
1007
  { 0x42, IPMI_TBD,   NULL, NULL, "Get Channel Info", 0 },
1008
  { 0x43, IPMI_TBD,   NULL, NULL, "Set User Access", 0 },
1009
  { 0x44, IPMI_TBD,   NULL, NULL, "Get User Access", 0 },
1010
  { 0x45, IPMI_TBD,   NULL, NULL, "Set User Name", 0 },
1011
  { 0x46, IPMI_TBD,   NULL, NULL, "Get User Name", 0 },
1012
  { 0x47, IPMI_TBD,   cc47, NULL, "Set User Password", 0 },
1013
  { 0x48, IPMI_TBD,   cc48, NULL, "Activate Payload", 0 },
1014
  { 0x49, IPMI_TBD,   cc49, NULL, "Deactivate Payload", 0 },
1015
  { 0x4a, IPMI_TBD,   NULL, NULL, "Get Payload Activation Status", 0 },
1016
  { 0x4b, IPMI_TBD,   NULL, NULL, "Get Payload Instance Info", 0 },
1017
  { 0x4c, IPMI_TBD,   NULL, NULL, "Set User Payload Access", 0 },
1018
  { 0x4d, IPMI_TBD,   NULL, NULL, "Get User Payload Access", 0 },
1019
  { 0x4e, IPMI_TBD,   NULL, NULL, "Get Channel Payload Support", 0 },
1020
  { 0x4f, IPMI_TBD,   cc4f, NULL, "Get Channel Payload Version", 0 },
1021
  { 0x50, IPMI_TBD,   cc50, NULL, "Get Channel OEM Payload Info", 0 },
1022
  { 0x52, IPMI_TBD,   cc52, NULL, "Master Write-Read", 0 },
1023
  { 0x54, IPMI_TBD,   NULL, NULL, "Get Channel Cipher Suites", 0 },
1024
  { 0x55, IPMI_TBD,   cc55, NULL, "Suspend/Resume Payload Encryption", 0 },
1025
  { 0x56, IPMI_TBD,   cc56, NULL, "Set Channel Security Keys", 0 },
1026
  { 0x57, IPMI_TBD,   NULL, NULL, "Get System Interface Capabilities", 0 },
1027
  { 0x58, IPMI_TBD,   cc58, NULL, "Set System Info Parameters", 0 },
1028
  { 0x59, IPMI_TBD,   cc59, NULL, "Get System Info Parameters", 0 },
1029
1030
  /* Device "Global" commands, continued */
1031
  { 0x60, IPMI_TBD,   cc60, NULL, "Set Command Enables", 0 },
1032
  { 0x61, IPMI_TBD,   NULL, NULL, "Get Command Enables", 0 },
1033
  { 0x62, IPMI_TBD,   cc62, NULL, "Set Command Sub-function Enables", 0 },
1034
  { 0x63, IPMI_TBD,   NULL, NULL, "Get Command Sub-function Enables", 0 },
1035
  { 0x64, IPMI_TBD,   NULL, NULL, "Get OEM NetFn IANA Support", 0 },
1036
};
1037
1038
void
1039
proto_register_ipmi_app(void)
1040
15
{
1041
15
  static hf_register_info hf[] = {
1042
15
    { &hf_ipmi_app_01_dev_id,
1043
15
      { "Device ID",
1044
15
        "ipmi.app00.dev.id", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
1045
15
    { &hf_ipmi_app_01_dev_prov_sdr,
1046
15
      { "Device provides Device SDRs",
1047
15
        "ipmi.app00.dev.provides_dev_sdr", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
1048
15
    { &hf_ipmi_app_01_dev_rev,
1049
15
      { "Device Revision (binary encoded)",
1050
15
        "ipmi.app00.dev.rev", FT_UINT8, BASE_HEX, NULL, 0x0f, NULL, HFILL }},
1051
15
    { &hf_ipmi_app_01_dev_avail,
1052
15
      { "Device availability",
1053
15
        "ipmi.app01.dev.avail", FT_BOOLEAN, 8, TFS(&tfs_01_dev_avail), 0x80, NULL, HFILL }},
1054
15
    { &hf_ipmi_app_01_fw_rev_maj,
1055
15
      { "Major Firmware Revision (binary encoded)",
1056
15
        "ipmi.app01.fw.major", FT_UINT8, BASE_HEX, NULL, 0x7f, NULL, HFILL }},
1057
15
    { &hf_ipmi_app_01_fw_rev_min,
1058
15
      { "Minor Firmware Revision (BCD encoded)",
1059
15
        "ipmi.app01.fw.minor", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
1060
15
    { &hf_ipmi_app_01_ipmi_version,
1061
15
      { "IPMI version",
1062
15
        "ipmi.app01.ipmi.version", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_version), 0, NULL, HFILL }},
1063
15
    { &hf_ipmi_app_01_ipmi_ads_chassis,
1064
15
      { "Chassis",
1065
15
        "ipmi.app01.ads.chassis", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
1066
15
    { &hf_ipmi_app_01_ipmi_ads_bridge,
1067
15
      { "Bridge",
1068
15
        "ipmi.app01.ads.bridge", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
1069
15
    { &hf_ipmi_app_01_ipmi_ads_ipmb_ev_gen,
1070
15
      { "Event Generator",
1071
15
        "ipmi.app01.ads.ipmb_ev_gen", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
1072
15
    { &hf_ipmi_app_01_ipmi_ads_ipmb_ev_recv,
1073
15
      { "Event Receiver",
1074
15
        "ipmi.app01.ads.ipmb_ev_recv", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
1075
15
    { &hf_ipmi_app_01_ipmi_ads_fru,
1076
15
      { "FRU Inventory",
1077
15
        "ipmi.app01.ads.fru", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
1078
15
    { &hf_ipmi_app_01_ipmi_ads_sel,
1079
15
      { "SEL",
1080
15
        "ipmi.app01.ads.sel", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
1081
15
    { &hf_ipmi_app_01_ipmi_ads_sdr,
1082
15
      { "SDR Repository",
1083
15
        "ipmi.app01.ads.sdr", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
1084
15
    { &hf_ipmi_app_01_ipmi_ads_sensor,
1085
15
      { "Sensor",
1086
15
        "ipmi.app01.ads.sensor", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
1087
15
    { &hf_ipmi_app_01_manufacturer,
1088
15
      { "Manufacturer ID",
1089
15
        "ipmi.app01.manufacturer", FT_UINT24, BASE_DEC, NULL, 0, NULL, HFILL }},
1090
15
    { &hf_ipmi_app_01_product,
1091
15
      { "Product ID",
1092
15
        "ipmi.app01.product", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
1093
15
    { &hf_ipmi_app_01_fw_aux,
1094
15
      { "Auxiliary Firmware Revision Information",
1095
15
        "ipmi.app01.fw.aux", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
1096
1097
15
    { &hf_ipmi_app_04_result,
1098
15
      { "Self test result",
1099
15
        "ipmi.app04.self_test_result", FT_UINT8, BASE_HEX, VALS(vals_04_result), 0, NULL, HFILL }},
1100
15
    { &hf_ipmi_app_04_fail,
1101
15
      { "Self-test error bitfield",
1102
15
        "ipmi.app04.fail", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
1103
15
    { &hf_ipmi_app_04_fail_sel,
1104
15
      { "Cannot access SEL device",
1105
15
        "ipmi.app04.fail.sel", FT_BOOLEAN, 8, TFS(&tfs_04_fail_unknown), 0x80, NULL, HFILL }},
1106
15
    { &hf_ipmi_app_04_fail_sdr,
1107
15
      { "Cannot access SDR Repository",
1108
15
        "ipmi.app04.fail.sdr", FT_BOOLEAN, 8, TFS(&tfs_04_fail_unknown), 0x40, NULL, HFILL }},
1109
15
    { &hf_ipmi_app_04_fail_bmc_fru,
1110
15
      { "Cannot access BMC FRU device",
1111
15
        "ipmi.app04.fail.bmc_fru", FT_BOOLEAN, 8, TFS(&tfs_04_fail_unknown), 0x20, NULL, HFILL }},
1112
15
    { &hf_ipmi_app_04_fail_ipmb_sig,
1113
15
      { "IPMB signal lines do not respond",
1114
15
        "ipmi.app04.fail.ipmb_sig", FT_BOOLEAN, 8, TFS(&tfs_04_fail_unknown), 0x10, NULL, HFILL }},
1115
15
    { &hf_ipmi_app_04_fail_sdr_empty,
1116
15
      { "SDR Repository is empty",
1117
15
        "ipmi.app04.fail.sdr_empty", FT_BOOLEAN, 8, TFS(&tfs_04_fail_unknown), 0x08, NULL, HFILL }},
1118
15
    { &hf_ipmi_app_04_fail_iua,
1119
15
      { "Internal Use Area of BMC FRU corrupted",
1120
15
        "ipmi.app04.fail.iua", FT_BOOLEAN, 8, TFS(&tfs_04_fail_unknown), 0x04, NULL, HFILL }},
1121
15
    { &hf_ipmi_app_04_fail_bb_fw,
1122
15
      { "Controller update boot block firmware corrupted",
1123
15
        "ipmi.app04.fail.bb_fw", FT_BOOLEAN, 8, TFS(&tfs_04_fail_unknown), 0x02, NULL, HFILL }},
1124
15
    { &hf_ipmi_app_04_fail_oper_fw,
1125
15
      { "Controller operational firmware corrupted",
1126
15
        "ipmi.app04.fail.oper_fw", FT_BOOLEAN, 8, TFS(&tfs_04_fail_unknown), 0x01, NULL, HFILL }},
1127
1128
15
    { &hf_ipmi_app_05_devspec,
1129
15
      { "Device-specific parameters",
1130
15
        "ipmi.app05.devspec", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
1131
1132
15
    { &hf_ipmi_app_06_syspwr_set,
1133
15
      { "System Power State",
1134
15
        "ipmi.app06.syspwr.set", FT_BOOLEAN, 8, TFS(&tfs_06_pwr), 0x80, NULL, HFILL }},
1135
15
    { &hf_ipmi_app_06_syspwr_enum,
1136
15
      { "System Power State enumeration",
1137
15
        "ipmi.app06.syspwr.enum", FT_UINT8, BASE_HEX, VALS(vals_06_syspwr), 0x7f, NULL, HFILL }},
1138
15
    { &hf_ipmi_app_06_devpwr_set,
1139
15
      { "Device Power State",
1140
15
        "ipmi.app06.devpwr.set", FT_BOOLEAN, 8, TFS(&tfs_06_pwr), 0x80, NULL, HFILL }},
1141
15
    { &hf_ipmi_app_06_devpwr_enum,
1142
15
      { "Device Power State enumeration",
1143
15
        "ipmi.app06.devpwr.enum", FT_UINT8, BASE_HEX, VALS(vals_06_devpwr), 0x7f, NULL, HFILL }},
1144
1145
15
    { &hf_ipmi_app_07_syspwr_enum,
1146
15
      { "ACPI System Power State",
1147
15
        "ipmi.app07.syspwr", FT_UINT8, BASE_HEX, VALS(vals_07_syspwr), 0x7f, NULL, HFILL }},
1148
15
    { &hf_ipmi_app_07_devpwr_enum,
1149
15
      { "ACPI Device Power State",
1150
15
        "ipmi.app07.devpwr", FT_UINT8, BASE_HEX, VALS(vals_07_devpwr), 0x7f, NULL, HFILL }},
1151
1152
15
    { &hf_ipmi_app_08_guid,
1153
15
      { "GUID",
1154
15
        "ipmi.app08.guid", FT_GUID, BASE_NONE, NULL, 0, NULL, HFILL }},
1155
1156
15
    { &hf_ipmi_app_24_timer_use_dont_log,
1157
15
      { "Don't log",
1158
15
        "ipmi.app24.timer_use.dont_log", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
1159
15
    { &hf_ipmi_app_24_timer_use_dont_stop,
1160
15
      { "Don't stop timer on Set Watchdog command",
1161
15
        "ipmi.app24.timer_use.dont_stop", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
1162
15
    { &hf_ipmi_app_24_timer_use_timer_use,
1163
15
      { "Timer use",
1164
15
        "ipmi.app24.timer_use.timer_use", FT_UINT8, BASE_HEX, VALS(vals_24_timer_use), 0x07, NULL, HFILL }},
1165
15
    { &hf_ipmi_app_24_timer_action_interrupt,
1166
15
      { "Pre-timeout interrupt",
1167
15
        "ipmi.app24.timer_action.interrupt", FT_UINT8, BASE_HEX, VALS(vals_24_timer_action_interrupt), 0x70, NULL, HFILL }},
1168
15
    { &hf_ipmi_app_24_timer_action_timeout_action,
1169
15
      { "Timeout action",
1170
15
        "ipmi.app24.timer_action.timeout", FT_UINT8, BASE_HEX, VALS(vals_24_timer_action_timeout), 0x07, NULL, HFILL }},
1171
15
    { &hf_ipmi_app_24_pretimeout,
1172
15
      { "Pre-timeout interval",
1173
15
        "ipmi.app24.pretimeout", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_1s_1based), 0, NULL, HFILL }},
1174
15
    { &hf_ipmi_app_24_expiration_flags_oem,
1175
15
      { "OEM",
1176
15
        "ipmi.app24.exp_flags.oem", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x20, NULL, HFILL }},
1177
15
    { &hf_ipmi_app_24_expiration_flags_smsos,
1178
15
      { "SMS/OS",
1179
15
        "ipmi.app24.exp_flags.sms_os", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x10, NULL, HFILL }},
1180
15
    { &hf_ipmi_app_24_expiration_flags_osload,
1181
15
      { "OS Load",
1182
15
        "ipmi.app24.exp_flags.osload", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x08, NULL, HFILL }},
1183
15
    { &hf_ipmi_app_24_expiration_flags_biospost,
1184
15
      { "BIOS/POST",
1185
15
        "ipmi.app24.exp_flags.biospost", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x04, NULL, HFILL }},
1186
15
    { &hf_ipmi_app_24_expiration_flags_biosfrb2,
1187
15
      { "BIOS FRB2",
1188
15
        "ipmi.app24.exp_flags.biosfrb2", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x02, NULL, HFILL }},
1189
15
    { &hf_ipmi_app_24_initial_countdown,
1190
15
      { "Initial countdown value (100ms/count)",
1191
15
        "ipmi.app24.initial_countdown", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
1192
1193
15
    { &hf_ipmi_app_25_timer_use_dont_log,
1194
15
      { "Don't log",
1195
15
        "ipmi.app25.timer_use.dont_log", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
1196
15
    { &hf_ipmi_app_25_timer_use_started,
1197
15
      { "Started",
1198
15
        "ipmi.app25.timer_use.started", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
1199
15
    { &hf_ipmi_app_25_timer_use_timer_use,
1200
15
      { "Timer user",
1201
15
        "ipmi.app25.timer_use.timer_use", FT_UINT8, BASE_HEX, VALS(vals_24_timer_use), 0x07, NULL, HFILL }},
1202
15
    { &hf_ipmi_app_25_timer_action_interrupt,
1203
15
      { "Pre-timeout interrupt",
1204
15
        "ipmi.app25.timer_action.interrupt", FT_UINT8, BASE_HEX, VALS(vals_24_timer_action_interrupt), 0x70, NULL, HFILL }},
1205
15
    { &hf_ipmi_app_25_timer_action_timeout_action,
1206
15
      { "Timeout action",
1207
15
        "ipmi.app25.timer_action.timeout", FT_UINT8, BASE_HEX, VALS(vals_24_timer_action_timeout), 0x07, NULL, HFILL }},
1208
15
    { &hf_ipmi_app_25_pretimeout,
1209
15
      { "Pre-timeout interval",
1210
15
        "ipmi.app25.pretimeout", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_1s_1based), 0, NULL, HFILL }},
1211
15
    { &hf_ipmi_app_25_expiration_flags_oem,
1212
15
      { "OEM",
1213
15
        "ipmi.app25.exp_flags.oem", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x20, NULL, HFILL }},
1214
15
    { &hf_ipmi_app_25_expiration_flags_smsos,
1215
15
      { "SMS/OS",
1216
15
        "ipmi.app25.exp_flags.sms_os", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x10, NULL, HFILL }},
1217
15
    { &hf_ipmi_app_25_expiration_flags_osload,
1218
15
      { "OS Load",
1219
15
        "ipmi.app25.exp_flags.osload", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x08, NULL, HFILL }},
1220
15
    { &hf_ipmi_app_25_expiration_flags_biospost,
1221
15
      { "BIOS/POST",
1222
15
        "ipmi.app25.exp_flags.biospost", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x04, NULL, HFILL }},
1223
15
    { &hf_ipmi_app_25_expiration_flags_biosfrb2,
1224
15
      { "BIOS FRB2",
1225
15
        "ipmi.app25.exp_flags.biosfrb2", FT_BOOLEAN, 8, TFS(&tfs_24_exp_flags), 0x02, NULL, HFILL }},
1226
15
    { &hf_ipmi_app_25_initial_countdown,
1227
15
      { "Initial countdown value (100ms/count)",
1228
15
        "ipmi.app25.initial_countdown", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
1229
15
    { &hf_ipmi_app_25_present_countdown,
1230
15
      { "Present countdown value (100ms/count)",
1231
15
        "ipmi.app25.present_countdown", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
1232
1233
15
    { &hf_ipmi_app_2e_byte1_oem2,
1234
15
      { "OEM 2",
1235
15
        "ipmi.app2e.bmc_global_enables.oem2", FT_BOOLEAN, 8, TFS(&tfs_2e_enable), 0x80, NULL, HFILL }},
1236
15
    { &hf_ipmi_app_2e_byte1_oem1,
1237
15
      { "OEM 1",
1238
15
        "ipmi.app2e.bmc_global_enables.oem1", FT_BOOLEAN, 8, TFS(&tfs_2e_enable), 0x40, NULL, HFILL }},
1239
15
    { &hf_ipmi_app_2e_byte1_oem0,
1240
15
      { "OEM 0",
1241
15
        "ipmi.app2e.bmc_global_enables.oem0", FT_BOOLEAN, 8, TFS(&tfs_2e_enable), 0x20, NULL, HFILL }},
1242
15
    { &hf_ipmi_app_2e_byte1_sel,
1243
15
      { "System Event Logging",
1244
15
        "ipmi.app2e.bmc_global_enables.sel", FT_BOOLEAN, 8, TFS(&tfs_2e_enable), 0x08, NULL, HFILL }},
1245
15
    { &hf_ipmi_app_2e_byte1_emb,
1246
15
      { "Event Message Buffer",
1247
15
        "ipmi.app2e.bmc_global_enables.emb", FT_BOOLEAN, 8, TFS(&tfs_2e_enable), 0x04, NULL, HFILL }},
1248
15
    { &hf_ipmi_app_2e_byte1_emb_full_intr,
1249
15
      { "Event Message Buffer Full Interrupt",
1250
15
        "ipmi.app2e.bmc_global_enables.emb_full_intr", FT_BOOLEAN, 8, TFS(&tfs_2e_enable), 0x02, NULL, HFILL }},
1251
15
    { &hf_ipmi_app_2e_byte1_rmq_intr,
1252
15
      { "Receive Message Queue Interrupt",
1253
15
        "ipmi.app2e.bmc_global_enables.rmq_intr", FT_BOOLEAN, 8, TFS(&tfs_2e_enable), 0x01, NULL, HFILL }},
1254
1255
15
    { &hf_ipmi_app_2f_byte1_oem2,
1256
15
      { "OEM 2",
1257
15
        "ipmi.app2f.bmc_global_enables.oem2", FT_BOOLEAN, 8, TFS(&tfs_2f_enabled), 0x80, NULL, HFILL }},
1258
15
    { &hf_ipmi_app_2f_byte1_oem1,
1259
15
      { "OEM 1",
1260
15
        "ipmi.app2f.bmc_global_enables.oem1", FT_BOOLEAN, 8, TFS(&tfs_2f_enabled), 0x40, NULL, HFILL }},
1261
15
    { &hf_ipmi_app_2f_byte1_oem0,
1262
15
      { "OEM 0",
1263
15
        "ipmi.app2f.bmc_global_enables.oem0", FT_BOOLEAN, 8, TFS(&tfs_2f_enabled), 0x20, NULL, HFILL }},
1264
15
    { &hf_ipmi_app_2f_byte1_sel,
1265
15
      { "System Event Logging",
1266
15
        "ipmi.app2f.bmc_global_enables.sel", FT_BOOLEAN, 8, TFS(&tfs_2f_enabled), 0x08, NULL, HFILL }},
1267
15
    { &hf_ipmi_app_2f_byte1_emb,
1268
15
      { "Event Message Buffer",
1269
15
        "ipmi.app2f.bmc_global_enables.emb", FT_BOOLEAN, 8, TFS(&tfs_2f_enabled), 0x04, NULL, HFILL }},
1270
15
    { &hf_ipmi_app_2f_byte1_emb_full_intr,
1271
15
      { "Event Message Buffer Full Interrupt",
1272
15
        "ipmi.app2f.bmc_global_enables.emb_full_intr", FT_BOOLEAN, 8, TFS(&tfs_2f_enabled), 0x02, NULL, HFILL }},
1273
15
    { &hf_ipmi_app_2f_byte1_rmq_intr,
1274
15
      { "Receive Message Queue Interrupt",
1275
15
        "ipmi.app2f.bmc_global_enables.rmq_intr", FT_BOOLEAN, 8, TFS(&tfs_2f_enabled), 0x01, NULL, HFILL }},
1276
1277
15
    { &hf_ipmi_app_30_byte1_oem2,
1278
15
      { "OEM 2",
1279
15
        "ipmi.app30.byte1.oem2", FT_BOOLEAN, 8, TFS(&tfs_30_clear), 0x80, NULL, HFILL }},
1280
15
    { &hf_ipmi_app_30_byte1_oem1,
1281
15
      { "OEM 1",
1282
15
        "ipmi.app30.byte1.oem1", FT_BOOLEAN, 8, TFS(&tfs_30_clear), 0x40, NULL, HFILL }},
1283
15
    { &hf_ipmi_app_30_byte1_oem0,
1284
15
      { "OEM 0",
1285
15
        "ipmi.app30.byte1.oem0", FT_BOOLEAN, 8, TFS(&tfs_30_clear), 0x20, NULL, HFILL }},
1286
15
    { &hf_ipmi_app_30_byte1_wd_pretimeout,
1287
15
      { "Watchdog pre-timeout interrupt flag",
1288
15
        "ipmi.app30.byte1.wd_pretimeout", FT_BOOLEAN, 8, TFS(&tfs_30_clear), 0x08, NULL, HFILL }},
1289
15
    { &hf_ipmi_app_30_byte1_emb,
1290
15
      { "Event Message Buffer",
1291
15
        "ipmi.app30.byte1.emb", FT_BOOLEAN, 8, TFS(&tfs_30_clear), 0x02, NULL, HFILL }},
1292
15
    { &hf_ipmi_app_30_byte1_rmq,
1293
15
      { "Receive Message Queue",
1294
15
        "ipmi.app30.byte1.rmq", FT_BOOLEAN, 8, TFS(&tfs_30_clear), 0x01, NULL, HFILL }},
1295
1296
15
    { &hf_ipmi_app_31_byte1_oem2,
1297
15
      { "OEM 2 data available",
1298
15
        "ipmi.app31.byte1.oem2", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
1299
15
    { &hf_ipmi_app_31_byte1_oem1,
1300
15
      { "OEM 1 data available",
1301
15
        "ipmi.app31.byte1.oem1", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
1302
15
    { &hf_ipmi_app_31_byte1_oem0,
1303
15
      { "OEM 0 data available",
1304
15
        "ipmi.app31.byte1.oem0", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
1305
15
    { &hf_ipmi_app_31_byte1_wd_pretimeout,
1306
15
      { "Watchdog pre-timeout interrupt occurred",
1307
15
        "ipmi.app31.byte1.wd_pretimeout", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
1308
15
    { &hf_ipmi_app_31_byte1_emb,
1309
15
      { "Event Message Buffer Full",
1310
15
        "ipmi.app31.byte1.emb", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
1311
15
    { &hf_ipmi_app_31_byte1_rmq,
1312
15
      { "Receive Message Available",
1313
15
        "ipmi.app31.byte1.rmq", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
1314
1315
15
    { &hf_ipmi_app_32_rq_chno,
1316
15
      { "Channel",
1317
15
        "ipmi.app32.rq_chno", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
1318
15
    { &hf_ipmi_app_32_rq_state,
1319
15
      { "Channel State",
1320
15
        "ipmi.app32.rq_state", FT_UINT8, BASE_HEX, VALS(vals_32_state), 0x03, NULL, HFILL }},
1321
15
    { &hf_ipmi_app_32_rs_chno,
1322
15
      { "Channel",
1323
15
        "ipmi.app32.rs_chno", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
1324
15
    { &hf_ipmi_app_32_rs_state,
1325
15
      { "Channel State",
1326
15
        "ipmi.app32.rs_state", FT_BOOLEAN, 8, TFS(&tfs_32_state), 0x01, NULL, HFILL }},
1327
1328
15
    { &hf_ipmi_app_33_rs_chan,
1329
15
      { "Channel",
1330
15
        "ipmi.app33.chan", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
1331
15
    { &hf_ipmi_app_33_rs_priv,
1332
15
      { "Inferred privilege level",
1333
15
        "ipmi.app33.priv", FT_UINT8, BASE_HEX, VALS(vals_XX_priv), 0xf0, NULL, HFILL }},
1334
15
    { &hf_ipmi_app_33_msg,
1335
15
      { "Message data",
1336
15
        "ipmi.app33.msg", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
1337
1338
15
    { &hf_ipmi_app_34_track,
1339
15
      { "Tracking",
1340
15
        "ipmi.app34.track", FT_UINT8, BASE_HEX, VALS(vals_34_track), 0xc0, NULL, HFILL }},
1341
15
    { &hf_ipmi_app_34_encrypt,
1342
15
      { "Encryption required",
1343
15
        "ipmi.app34.encrypt", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
1344
15
    { &hf_ipmi_app_34_auth,
1345
15
      { "Authentication required",
1346
15
        "ipmi.app34.auth", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
1347
15
    { &hf_ipmi_app_34_chan,
1348
15
      { "Channel",
1349
15
        "ipmi.app34.chan", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
1350
15
    { &hf_ipmi_app_34_msg,
1351
15
      { "Embedded message",
1352
15
        "ipmi.app34.msg", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
1353
1354
15
    { &hf_ipmi_app_38_rq_ipmi20,
1355
15
      { "Version compatibility",
1356
15
        "ipmi.app38.rq_ipmi20", FT_UINT8, BASE_DEC, VALS(vals_38_ipmi20), 0x80, NULL, HFILL }},
1357
15
    { &hf_ipmi_app_38_rq_chan,
1358
15
      { "Channel",
1359
15
        "ipmi.app38.rq_chan", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
1360
15
    { &hf_ipmi_app_38_rq_priv,
1361
15
      { "Requested privilege level",
1362
15
        "ipmi.app38.rq_priv", FT_UINT8, BASE_HEX, VALS(vals_XX_priv), 0x0f, NULL, HFILL }},
1363
15
    { &hf_ipmi_app_38_rs_chan,
1364
15
      { "Channel",
1365
15
        "ipmi.app38.rs_chan", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
1366
15
    { &hf_ipmi_app_38_rs_ipmi20,
1367
15
      { "Version compatibility",
1368
15
        "ipmi.app38.rs_ipmi20", FT_UINT8, BASE_DEC, VALS(vals_38_ipmi20), 0x80, NULL, HFILL }},
1369
15
    { &hf_ipmi_app_38_rs_auth_oem,
1370
15
      { "OEM Proprietary authentication",
1371
15
        "ipmi.app38.rs_auth_oem", FT_BOOLEAN, 8, TFS(&tfs_38_supp), 0x20, NULL, HFILL }},
1372
15
    { &hf_ipmi_app_38_rs_auth_straight,
1373
15
      { "Straight password/key",
1374
15
        "ipmi.app38.rs_auth_straight", FT_BOOLEAN, 8, TFS(&tfs_38_supp), 0x10, NULL, HFILL }},
1375
15
    { &hf_ipmi_app_38_rs_auth_md5,
1376
15
      { "MD5",
1377
15
        "ipmi.app38.rs_auth_md5", FT_BOOLEAN, 8, TFS(&tfs_38_supp), 0x04, NULL, HFILL }},
1378
15
    { &hf_ipmi_app_38_rs_auth_md2,
1379
15
      { "MD2",
1380
15
        "ipmi.app38.rs_auth_md2", FT_BOOLEAN, 8, TFS(&tfs_38_supp), 0x02, NULL, HFILL }},
1381
15
    { &hf_ipmi_app_38_rs_auth_none,
1382
15
      { "No auth",
1383
15
        "ipmi.app38.rs_auth_none", FT_BOOLEAN, 8, TFS(&tfs_38_supp), 0x01, NULL, HFILL }},
1384
15
    { &hf_ipmi_app_38_rs_kg,
1385
15
      { "KG",
1386
15
        "ipmi.app38.rs_kg_status", FT_BOOLEAN, 8, TFS(&tfs_38_kg), 0x20, NULL, HFILL }},
1387
15
    { &hf_ipmi_app_38_rs_permsg,
1388
15
      { "Per-message Authentication disabled",
1389
15
        "ipmi.app38.rs_permsg", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
1390
15
    { &hf_ipmi_app_38_rs_userauth,
1391
15
      { "User-level Authentication disabled",
1392
15
        "ipmi.app38.rs_userauth", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
1393
15
    { &hf_ipmi_app_38_rs_user_nonnull,
1394
15
      { "Non-null usernames enabled",
1395
15
        "ipmi.app38.rs_user_nonnull", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
1396
15
    { &hf_ipmi_app_38_rs_user_null,
1397
15
      { "Null usernames enabled",
1398
15
        "ipmi.app38.rs_user_null", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
1399
15
    { &hf_ipmi_app_38_rs_user_anon,
1400
15
      { "Anonymous login enabled",
1401
15
        "ipmi.app38.rs_user_anon", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
1402
15
    { &hf_ipmi_app_38_rs_ipmi20_conn,
1403
15
      { "IPMI v2.0",
1404
15
        "ipmi.app38.rs_ipmi20_conn", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
1405
15
    { &hf_ipmi_app_38_rs_ipmi15_conn,
1406
15
      { "IPMI v1.5",
1407
15
        "ipmi.app38.rs_ipmi15_conn", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
1408
15
    { &hf_ipmi_app_38_rs_oem_iana,
1409
15
      { "OEM ID",
1410
15
        "ipmi.app38.rs_oem_iana", FT_UINT24, BASE_DEC, NULL, 0, NULL, HFILL }},
1411
15
    { &hf_ipmi_app_38_rs_oem_aux,
1412
15
      { "OEM Auxiliary data",
1413
15
        "ipmi.app38.rs_oem_aux", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
1414
1415
15
    { &hf_ipmi_app_39_authtype,
1416
15
      { "Authentication Type",
1417
15
        "ipmi.app39.authtype", FT_UINT8, BASE_HEX, VALS(vals_XX_auth), 0x0f, NULL, HFILL }},
1418
15
    { &hf_ipmi_app_39_user,
1419
15
      { "User Name",
1420
15
        "ipmi.app39.user", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
1421
15
    { &hf_ipmi_app_39_temp_session,
1422
15
      { "Temporary Session ID",
1423
15
        "ipmi.app39.temp_session", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
1424
15
    { &hf_ipmi_app_39_challenge,
1425
15
      { "Challenge",
1426
15
        "ipmi.app39.challenge", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
1427
1428
15
    { &hf_ipmi_app_3a_authtype,
1429
15
      { "Authentication Type",
1430
15
        "ipmi.app3a.authtype", FT_UINT8, BASE_HEX, VALS(vals_XX_auth), 0x0f, NULL, HFILL }},
1431
15
    { &hf_ipmi_app_3a_privlevel,
1432
15
      { "Requested Maximum Privilege Level",
1433
15
        "ipmi.app3a.privlevel", FT_UINT8, BASE_HEX, VALS(vals_XX_priv), 0x0f, NULL, HFILL }},
1434
15
    { &hf_ipmi_app_3a_authcode,
1435
15
      { "Challenge string/Auth Code",
1436
15
        "ipmi.app3a.authcode", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
1437
15
    { &hf_ipmi_app_3a_outbound_seq,
1438
15
      { "Initial Outbound Sequence Number",
1439
15
        "ipmi.app3a.outbound_seq", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
1440
15
    { &hf_ipmi_app_3a_authtype_session,
1441
15
      { "Authentication Type for session",
1442
15
        "ipmi.app3a.authtype_session", FT_UINT8, BASE_HEX, VALS(vals_XX_auth), 0x0f, NULL, HFILL }},
1443
15
    { &hf_ipmi_app_3a_session_id,
1444
15
      { "Session ID",
1445
15
        "ipmi.app3a.session_id", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
1446
15
    { &hf_ipmi_app_3a_inbound_seq,
1447
15
      { "Initial Inbound Sequence Number",
1448
15
        "ipmi.app3a.inbound_seq", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
1449
15
    { &hf_ipmi_app_3a_maxpriv_session,
1450
15
      { "Maximum Privilege Level for session",
1451
15
        "ipmi.app3a.maxpriv_session", FT_UINT8, BASE_HEX, VALS(vals_XX_priv), 0x0f, NULL, HFILL }},
1452
1453
15
    { &hf_ipmi_app_3b_req_priv,
1454
15
      { "Requested Privilege Level",
1455
15
        "ipmi.app3b.req_priv", FT_UINT8, BASE_HEX, VALS(vals_XX_priv), 0x0f, NULL, HFILL }},
1456
15
    { &hf_ipmi_app_3b_new_priv,
1457
15
      { "New Privilege Level",
1458
15
        "ipmi.app3b.new_priv", FT_UINT8, BASE_HEX, VALS(vals_XX_priv), 0x0f, NULL, HFILL }},
1459
1460
15
    { &hf_ipmi_app_3c_session_id,
1461
15
      { "Session ID",
1462
15
        "ipmi.app3c.session_id", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
1463
15
    { &hf_ipmi_app_3c_session_handle,
1464
15
      { "Session handle",
1465
15
        "ipmi.app3c.session_handle", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
1466
15
  };
1467
15
  static int *ett[] = {
1468
15
    &ett_ipmi_app_01_byte2,
1469
15
    &ett_ipmi_app_01_byte3,
1470
15
    &ett_ipmi_app_01_byte6,
1471
15
    &ett_ipmi_app_04_byte2,
1472
15
    &ett_ipmi_app_06_syspwr,
1473
15
    &ett_ipmi_app_06_devpwr,
1474
15
    &ett_ipmi_app_07_syspwr,
1475
15
    &ett_ipmi_app_07_devpwr,
1476
15
    &ett_ipmi_app_24_timer_use,
1477
15
    &ett_ipmi_app_24_timer_action,
1478
15
    &ett_ipmi_app_24_expiration_flags,
1479
15
    &ett_ipmi_app_25_timer_use,
1480
15
    &ett_ipmi_app_25_timer_action,
1481
15
    &ett_ipmi_app_25_expiration_flags,
1482
15
    &ett_ipmi_app_2e_byte1,
1483
15
    &ett_ipmi_app_2f_byte1,
1484
15
    &ett_ipmi_app_30_byte1,
1485
15
    &ett_ipmi_app_31_byte1,
1486
15
    &ett_ipmi_app_32_rq_byte1,
1487
15
    &ett_ipmi_app_32_rq_byte2,
1488
15
    &ett_ipmi_app_32_rs_byte1,
1489
15
    &ett_ipmi_app_32_rs_byte2,
1490
15
    &ett_ipmi_app_33_rs_byte1,
1491
15
    &ett_ipmi_app_33_msg,
1492
15
    &ett_ipmi_app_34_byte1,
1493
15
    &ett_ipmi_app_34_msg,
1494
15
    &ett_ipmi_app_38_rq_byte1,
1495
15
    &ett_ipmi_app_38_rq_byte2,
1496
15
    &ett_ipmi_app_38_rs_byte1,
1497
15
    &ett_ipmi_app_38_rs_byte2,
1498
15
    &ett_ipmi_app_38_rs_byte3,
1499
15
    &ett_ipmi_app_38_rs_byte4,
1500
15
    &ett_ipmi_app_39_byte1,
1501
15
    &ett_ipmi_app_3a_rq_byte1,
1502
15
    &ett_ipmi_app_3a_rq_byte2,
1503
15
    &ett_ipmi_app_3a_rs_byte1,
1504
15
    &ett_ipmi_app_3a_rs_byte10,
1505
15
    &ett_ipmi_app_3b_rq_byte1,
1506
15
    &ett_ipmi_app_3b_rs_byte1,
1507
15
  };
1508
1509
15
  proto_register_field_array(proto_ipmi, hf, array_length(hf));
1510
15
  proto_register_subtree_array(ett, array_length(ett));
1511
15
  ipmi_register_netfn_cmdtab(IPMI_APP_REQ, IPMI_OEM_NONE, NULL, 0, NULL,
1512
15
      cmd_app, array_length(cmd_app));
1513
15
}
1514
1515
/*
1516
 * Editor modelines  -  https://www.wireshark.org/tools/modelines.html
1517
 *
1518
 * Local variables:
1519
 * c-basic-offset: 8
1520
 * tab-width: 8
1521
 * indent-tabs-mode: t
1522
 * End:
1523
 *
1524
 * vi: set shiftwidth=8 tabstop=8 noexpandtab:
1525
 * :indentSize=8:tabSize=8:noTabs=false:
1526
 */