1 /* packet-ipmi-transport.c
2 * Sub-dissectors for IPMI messages (netFn=Transport)
3 * Copyright 2007-2008, Alexey Neyman, Pigeon Point Systems <avn@pigeonpoint.com>
4 * Copyright 2015, Dmitry Bazhenov, Pigeon Point Systems <dima_b@pigeonpoint.com>
5 *
6 * Wireshark - Network traffic analyzer
7 * By Gerald Combs <gerald@wireshark.org>
8 * Copyright 1998 Gerald Combs
9 *
10 * SPDX-License-Identifier: GPL-2.0-or-later
11 */
12
13 #include "config.h"
14
15 #include <epan/packet.h>
16
17 #include "packet-ipmi.h"
18
19 void proto_register_ipmi_transport(void);
20
21 static gint ett_ipmi_trn_lan00_byte1 = -1;
22 static gint ett_ipmi_trn_lan01_byte1 = -1;
23 static gint ett_ipmi_trn_lan02_byte1 = -1;
24 static gint ett_ipmi_trn_lan02_byte2 = -1;
25 static gint ett_ipmi_trn_lan02_byte3 = -1;
26 static gint ett_ipmi_trn_lan02_byte4 = -1;
27 static gint ett_ipmi_trn_lan02_byte5 = -1;
28 static gint ett_ipmi_trn_lan04_byte1 = -1;
29 static gint ett_ipmi_trn_lan07_byte2 = -1;
30 static gint ett_ipmi_trn_lan07_byte3 = -1;
31 static gint ett_ipmi_trn_lan10_byte1 = -1;
32 static gint ett_ipmi_trn_lan17_byte1 = -1;
33 static gint ett_ipmi_trn_lan18_byte1 = -1;
34 static gint ett_ipmi_trn_lan18_byte2 = -1;
35 static gint ett_ipmi_trn_lan18_byte4 = -1;
36 static gint ett_ipmi_trn_lan19_byte1 = -1;
37 static gint ett_ipmi_trn_lan19_byte2 = -1;
38 static gint ett_ipmi_trn_lan19_byte3 = -1;
39 static gint ett_ipmi_trn_lan20_byte12 = -1;
40 static gint ett_ipmi_trn_lan21_byte1 = -1;
41 static gint ett_ipmi_trn_lan22_byte1 = -1;
42 static gint ett_ipmi_trn_lan24_byte1 = -1;
43 static gint ett_ipmi_trn_lan24_byte2 = -1;
44 static gint ett_ipmi_trn_lan24_byte3 = -1;
45 static gint ett_ipmi_trn_lan24_byte4 = -1;
46 static gint ett_ipmi_trn_lan24_byte5 = -1;
47 static gint ett_ipmi_trn_lan24_byte6 = -1;
48 static gint ett_ipmi_trn_lan24_byte7 = -1;
49 static gint ett_ipmi_trn_lan24_byte8 = -1;
50 static gint ett_ipmi_trn_lan25_byte1 = -1;
51 static gint ett_ipmi_trn_lan25_byte2 = -1;
52 static gint ett_ipmi_trn_lan25_byte34 = -1;
53 static gint ett_ipmi_trn_lan50_byte1 = -1;
54 static gint ett_ipmi_trn_lan55_byte3 = -1;
55 static gint ett_ipmi_trn_lan56_byte2 = -1;
56 static gint ett_ipmi_trn_lan64_byte1 = -1;
57 static gint ett_ipmi_trn_serial03_byte1 = -1;
58 static gint ett_ipmi_trn_serial04_byte1 = -1;
59 static gint ett_ipmi_trn_serial05_byte1 = -1;
60 static gint ett_ipmi_trn_serial05_byte2 = -1;
61 static gint ett_ipmi_trn_serial06_byte1 = -1;
62 static gint ett_ipmi_trn_serial07_byte1 = -1;
63 static gint ett_ipmi_trn_serial07_byte2 = -1;
64 static gint ett_ipmi_trn_serial08_byte1 = -1;
65 static gint ett_ipmi_trn_serial08_byte2 = -1;
66 static gint ett_ipmi_trn_serial09_byte1 = -1;
67 static gint ett_ipmi_trn_serial09_byte2 = -1;
68 static gint ett_ipmi_trn_serial16_byte1 = -1;
69 static gint ett_ipmi_trn_serial17_byte1 = -1;
70 static gint ett_ipmi_trn_serial17_byte2 = -1;
71 static gint ett_ipmi_trn_serial17_byte4 = -1;
72 static gint ett_ipmi_trn_serial17_byte5 = -1;
73 static gint ett_ipmi_trn_serial19_byte1 = -1;
74 static gint ett_ipmi_trn_serial19_byte2 = -1;
75 static gint ett_ipmi_trn_serial19_byte3 = -1;
76 static gint ett_ipmi_trn_serial20_byte1 = -1;
77 static gint ett_ipmi_trn_serial21_byte1 = -1;
78 static gint ett_ipmi_trn_serial22_byte1 = -1;
79 static gint ett_ipmi_trn_serial23_byte1 = -1;
80 static gint ett_ipmi_trn_serial24_byte1 = -1;
81 static gint ett_ipmi_trn_serial25_byte2 = -1;
82 static gint ett_ipmi_trn_serial28_byte1 = -1;
83 static gint ett_ipmi_trn_serial28_byte2 = -1;
84 static gint ett_ipmi_trn_serial28_byte10 = -1;
85 static gint ett_ipmi_trn_serial28_byte11 = -1;
86 static gint ett_ipmi_trn_serial28_byte12 = -1;
87 static gint ett_ipmi_trn_serial28_byte13 = -1;
88 static gint ett_ipmi_trn_serial28_byte14 = -1;
89 static gint ett_ipmi_trn_serial29_byte1 = -1;
90 static gint ett_ipmi_trn_serial29_byte2 = -1;
91 static gint ett_ipmi_trn_serial30_byte1 = -1;
92 static gint ett_ipmi_trn_serial30_byte2 = -1;
93 static gint ett_ipmi_trn_serial30_byte3 = -1;
94 static gint ett_ipmi_trn_serial33_byte1 = -1;
95 static gint ett_ipmi_trn_serial37_byte1 = -1;
96 static gint ett_ipmi_trn_serial43_byte1 = -1;
97 static gint ett_ipmi_trn_serial50_byte1 = -1;
98 static gint ett_ipmi_trn_serial51_byte2 = -1;
99 static gint ett_ipmi_trn_serial51_byte3 = -1;
100 static gint ett_ipmi_trn_01_byte1 = -1;
101 static gint ett_ipmi_trn_02_byte1 = -1;
102 static gint ett_ipmi_trn_02_rev = -1;
103 static gint ett_ipmi_trn_03_rq_byte1 = -1;
104 static gint ett_ipmi_trn_03_rq_byte2 = -1;
105 static gint ett_ipmi_trn_03_rs_byte1 = -1;
106 static gint ett_ipmi_trn_04_byte1 = -1;
107 static gint ett_ipmi_trn_04_byte2 = -1;
108 static gint ett_ipmi_trn_10_byte1 = -1;
109 static gint ett_ipmi_trn_11_byte1 = -1;
110 static gint ett_ipmi_trn_11_rev = -1;
111 static gint ett_ipmi_trn_12_rq_byte1 = -1;
112 static gint ett_ipmi_trn_12_rq_byte2 = -1;
113 static gint ett_ipmi_trn_12_rs_byte1 = -1;
114 static gint ett_ipmi_trn_13_byte1 = -1;
115 static gint ett_ipmi_trn_14_byte1 = -1;
116 static gint ett_ipmi_trn_15_byte1 = -1;
117 static gint ett_ipmi_trn_16_byte1 = -1;
118 static gint ett_ipmi_trn_17_byte1 = -1;
119 static gint ett_ipmi_trn_17_byte2 = -1;
120 static gint ett_ipmi_trn_18_byte1 = -1;
121 static gint ett_ipmi_trn_19_byte1 = -1;
122 static gint ett_ipmi_trn_19_byte2 = -1;
123 static gint ett_ipmi_trn_XX_usercap = -1;
124 static gint ett_ipmi_trn_XX_cbcp = -1;
125 static gint ett_ipmi_trn_1a_byte1 = -1;
126 static gint ett_ipmi_trn_1a_byte2 = -1;
127 static gint ett_ipmi_trn_1b_byte1 = -1;
128 static gint ett_ipmi_trn_1b_byte2 = -1;
129 static gint ett_ipmi_trn_parameter = -1;
130
131 static gint hf_ipmi_trn_lan00_sip = -1;
132
133 static gint hf_ipmi_trn_lanXX_oem = -1;
134 static gint hf_ipmi_trn_lanXX_passwd = -1;
135 static gint hf_ipmi_trn_lanXX_md5 = -1;
136 static gint hf_ipmi_trn_lanXX_md2 = -1;
137 static gint hf_ipmi_trn_lanXX_none = -1;
138
139 static gint hf_ipmi_trn_lan03_ip = -1;
140
141 static gint hf_ipmi_trn_lan04_ipsrc = -1;
142
143 static gint hf_ipmi_trn_lan05_ether = -1;
144
145 static gint hf_ipmi_trn_lan06_subnet = -1;
146
147 static gint hf_ipmi_trn_lan07_ttl = -1;
148 static gint hf_ipmi_trn_lan07_flags = -1;
149 static gint hf_ipmi_trn_lan07_precedence = -1;
150 static gint hf_ipmi_trn_lan07_tos = -1;
151
152 static gint hf_ipmi_trn_lan08_rmcp_port = -1;
153
154 static gint hf_ipmi_trn_lan09_rmcp_port = -1;
155
156 static gint hf_ipmi_trn_lan10_responses = -1;
157 static gint hf_ipmi_trn_lan10_gratuitous = -1;
158
159 static gint hf_ipmi_trn_lan11_arp_interval = -1;
160
161 static gint hf_ipmi_trn_lan12_def_gw_ip = -1;
162
163 static gint hf_ipmi_trn_lan13_def_gw_mac = -1;
164
165 static gint hf_ipmi_trn_lan14_bkp_gw_ip = -1;
166
167 static gint hf_ipmi_trn_lan15_bkp_gw_mac = -1;
168
169 static gint hf_ipmi_trn_lan16_comm_string = -1;
170
171 static gint hf_ipmi_trn_lan17_num_dst = -1;
172
173 static gint hf_ipmi_trn_lan18_dst_selector = -1;
174 static gint hf_ipmi_trn_lan18_ack = -1;
175 static gint hf_ipmi_trn_lan18_dst_type = -1;
176 static gint hf_ipmi_trn_lan18_tout = -1;
177 static gint hf_ipmi_trn_lan18_retries = -1;
178
179 static gint hf_ipmi_trn_lan19_dst_selector = -1;
180 static gint hf_ipmi_trn_lan19_addr_format = -1;
181 static gint hf_ipmi_trn_lan19_address = -1;
182 static gint hf_ipmi_trn_lan19_gw_sel = -1;
183 static gint hf_ipmi_trn_lan19_ip = -1;
184 static gint hf_ipmi_trn_lan19_mac = -1;
185
186 static gint hf_ipmi_trn_lan20_vlan_id_enable = -1;
187 static gint hf_ipmi_trn_lan20_vlan_id = -1;
188
189 static gint hf_ipmi_trn_lan21_vlan_prio = -1;
190
191 static gint hf_ipmi_trn_lan22_num_cs_entries = -1;
192
193 static gint hf_ipmi_trn_lan23_cs_entry = -1;
194
195 static gint hf_ipmi_trn_lan24_priv1 = -1;
196 static gint hf_ipmi_trn_lan24_priv2 = -1;
197
198 static gint hf_ipmi_trn_lan25_dst_selector = -1;
199 static gint hf_ipmi_trn_lan25_addr_format = -1;
200 static gint hf_ipmi_trn_lan25_address = -1;
201 static gint hf_ipmi_trn_lan25_uprio = -1;
202 static gint hf_ipmi_trn_lan25_cfi = -1;
203 static gint hf_ipmi_trn_lan25_vlan_id = -1;
204
205 static gint hf_ipmi_trn_lan26_gen_event = -1;
206 static gint hf_ipmi_trn_lan26_thresh_number = -1;
207 static gint hf_ipmi_trn_lan26_reset_interval = -1;
208 static gint hf_ipmi_trn_lan26_lock_interval = -1;
209
210 static gint hf_ipmi_trn_lan50_ipv6_only = -1;
211 static gint hf_ipmi_trn_lan50_both_ipv4_ipv6 = -1;
212 static gint hf_ipmi_trn_lan50_ipv6_alerting = -1;
213
214 static gint hf_ipmi_trn_lan51_enables = -1;
215
216 static gint hf_ipmi_trn_lan52_traffic_class = -1;
217
218 static gint hf_ipmi_trn_lanXX_hop_limit = -1;
219
220 static gint hf_ipmi_trn_lan54_flow_label = -1;
221
222 static gint hf_ipmi_trn_lan55_static_addr_max = -1;
223 static gint hf_ipmi_trn_lan55_dynamic_addr_max = -1;
224 static gint hf_ipmi_trn_lan55_dhcpv6_support = -1;
225 static gint hf_ipmi_trn_lan55_slaac_support = -1;
226
227 static gint hf_ipmi_trn_lanXX_addr_selector = -1;
228 static gint hf_ipmi_trn_lanXX_addr_type = -1;
229 static gint hf_ipmi_trn_lanXX_addr_enable = -1;
230 static gint hf_ipmi_trn_lanXX_addr = -1;
231 static gint hf_ipmi_trn_lanXX_prefix_len = -1;
232 static gint hf_ipmi_trn_lanXX_addr_status = -1;
233
234 static gint hf_ipmi_trn_lanXX_max_duid_blocks = -1;
235
236 static gint hf_ipmi_trn_lanXX_duid_selector = -1;
237 static gint hf_ipmi_trn_lanXX_block_selector = -1;
238 static gint hf_ipmi_trn_lanXX_duid = -1;
239
240 static gint hf_ipmi_trn_lanXX_timing_support = -1;
241
242 static gint hf_ipmi_trn_lanXX_iface_selector = -1;
243 static gint hf_ipmi_trn_lan63_sol_max_delay = -1;
244 static gint hf_ipmi_trn_lan63_sol_timeout = -1;
245 static gint hf_ipmi_trn_lan63_sol_max_rt = -1;
246 static gint hf_ipmi_trn_lan63_req_timeout = -1;
247 static gint hf_ipmi_trn_lan63_req_max_rt = -1;
248 static gint hf_ipmi_trn_lan63_req_max_rc = -1;
249 static gint hf_ipmi_trn_lan63_cnf_max_delay = -1;
250 static gint hf_ipmi_trn_lan63_cnf_timeout = -1;
251 static gint hf_ipmi_trn_lan63_cnf_max_rt = -1;
252 static gint hf_ipmi_trn_lan63_cnf_max_rd = -1;
253 static gint hf_ipmi_trn_lan63_ren_timeout = -1;
254 static gint hf_ipmi_trn_lan63_ren_max_rt = -1;
255 static gint hf_ipmi_trn_lan63_reb_timeout = -1;
256 static gint hf_ipmi_trn_lan63_reb_max_rt = -1;
257 static gint hf_ipmi_trn_lan63_inf_max_delay = -1;
258 static gint hf_ipmi_trn_lan63_inf_timeout = -1;
259 static gint hf_ipmi_trn_lan63_inf_max_rt = -1;
260 static gint hf_ipmi_trn_lan63_rel_timeout = -1;
261 static gint hf_ipmi_trn_lan63_rel_max_rc = -1;
262 static gint hf_ipmi_trn_lan63_dec_timeout = -1;
263 static gint hf_ipmi_trn_lan63_dec_max_rc = -1;
264 static gint hf_ipmi_trn_lan63_hop_count_limit = -1;
265
266 static gint hf_ipmi_trn_lan64_static_cfg = -1;
267 static gint hf_ipmi_trn_lan64_dynamic_cfg = -1;
268
269 static gint hf_ipmi_trn_lanXX_router_selector = -1;
270 static gint hf_ipmi_trn_lanXX_router_mac = -1;
271 static gint hf_ipmi_trn_lanXX_router_prefix = -1;
272
273 static gint hf_ipmi_trn_lan73_num_dynamic_sets = -1;
274
275 static gint hf_ipmi_trn_lan80_max_rtr_solicitation_delay = -1;
276 static gint hf_ipmi_trn_lan80_rtr_solicitation_interval = -1;
277 static gint hf_ipmi_trn_lan80_max_rtr_solicitations = -1;
278 static gint hf_ipmi_trn_lan80_dup_addr_detect_transmits = -1;
279 static gint hf_ipmi_trn_lan80_max_multicast_solicit = -1;
280 static gint hf_ipmi_trn_lan80_max_unicast_solicit = -1;
281 static gint hf_ipmi_trn_lan80_max_anycast_delay_time = -1;
282 static gint hf_ipmi_trn_lan80_max_neighbor_advertisement = -1;
283 static gint hf_ipmi_trn_lan80_reachable_time = -1;
284 static gint hf_ipmi_trn_lan80_retrans_timer = -1;
285 static gint hf_ipmi_trn_lan80_delay_first_probe_time = -1;
286 static gint hf_ipmi_trn_lan80_max_random_factor = -1;
287 static gint hf_ipmi_trn_lan80_min_random_factor = -1;
288
289 static gint hf_ipmi_trn_serial03_connmode = -1;
290 static gint hf_ipmi_trn_serial03_terminal = -1;
291 static gint hf_ipmi_trn_serial03_ppp = -1;
292 static gint hf_ipmi_trn_serial03_basic = -1;
293
294 static gint hf_ipmi_trn_serial04_timeout = -1;
295
296 static gint hf_ipmi_trn_serial05_cbcp_callback = -1;
297 static gint hf_ipmi_trn_serial05_ipmi_callback = -1;
298 static gint hf_ipmi_trn_serial05_cb_list = -1;
299 static gint hf_ipmi_trn_serial05_cb_user = -1;
300 static gint hf_ipmi_trn_serial05_cb_prespec = -1;
301 static gint hf_ipmi_trn_serial05_no_cb = -1;
302 static gint hf_ipmi_trn_serial05_cb_dest1 = -1;
303 static gint hf_ipmi_trn_serial05_cb_dest2 = -1;
304 static gint hf_ipmi_trn_serial05_cb_dest3 = -1;
305
306 static gint hf_ipmi_trn_serial06_inactivity = -1;
307 static gint hf_ipmi_trn_serial06_dcd = -1;
308
309 static gint hf_ipmi_trn_serial07_flowctl = -1;
310 static gint hf_ipmi_trn_serial07_dtrhangup = -1;
311 static gint hf_ipmi_trn_serial07_bitrate = -1;
312
313 static gint hf_ipmi_trn_serial08_esc_powerup = -1;
314 static gint hf_ipmi_trn_serial08_esc_reset = -1;
315 static gint hf_ipmi_trn_serial08_switch_authcap = -1;
316 static gint hf_ipmi_trn_serial08_switch_rmcp = -1;
317 static gint hf_ipmi_trn_serial08_esc_switch1 = -1;
318 static gint hf_ipmi_trn_serial08_esc_switch2 = -1;
319 static gint hf_ipmi_trn_serial08_switch_dcdloss = -1;
320 static gint hf_ipmi_trn_serial08_sharing = -1;
321 static gint hf_ipmi_trn_serial08_ping_callback = -1;
322 static gint hf_ipmi_trn_serial08_ping_direct = -1;
323 static gint hf_ipmi_trn_serial08_ping_retry = -1;
324
325 static gint hf_ipmi_trn_serial09_ring_duration = -1;
326 static gint hf_ipmi_trn_serial09_ring_dead = -1;
327
328 static gint hf_ipmi_trn_serial10_set_sel = -1;
329 static gint hf_ipmi_trn_serial10_init_str = -1;
330 static gint hf_ipmi_trn_serial11_esc_seq = -1;
331 static gint hf_ipmi_trn_serial12_hangup_seq = -1;
332 static gint hf_ipmi_trn_serial13_dial_cmd = -1;
333 static gint hf_ipmi_trn_serial14_page_blackout = -1;
334 static gint hf_ipmi_trn_serial15_comm_string = -1;
335
336 static gint hf_ipmi_trn_serial16_ndest = -1;
337
338 static gint hf_ipmi_trn_serial17_dest_sel = -1;
339 static gint hf_ipmi_trn_serial17_ack = -1;
340 static gint hf_ipmi_trn_serial17_dest_type = -1;
341 /* static gint hf_ipmi_trn_serial17_ack_timeout = -1; */
342 static gint hf_ipmi_trn_serial17_alert_retries = -1;
343 static gint hf_ipmi_trn_serial17_call_retries = -1;
344 static gint hf_ipmi_trn_serial17_alert_ack_timeout = -1;
345 static gint hf_ipmi_trn_serial17_dialstr_sel = -1;
346 static gint hf_ipmi_trn_serial17_tap_sel = -1;
347 static gint hf_ipmi_trn_serial17_ipaddr_sel = -1;
348 static gint hf_ipmi_trn_serial17_ppp_sel = -1;
349 static gint hf_ipmi_trn_serial17_unknown = -1;
350
351 static gint hf_ipmi_trn_serial18_call_retry = -1;
352
353 static gint hf_ipmi_trn_serial19_destsel = -1;
354 static gint hf_ipmi_trn_serial19_flowctl = -1;
355 static gint hf_ipmi_trn_serial19_dtrhangup = -1;
356 static gint hf_ipmi_trn_serial19_stopbits = -1;
357 static gint hf_ipmi_trn_serial19_charsize = -1;
358 static gint hf_ipmi_trn_serial19_parity = -1;
359 static gint hf_ipmi_trn_serial19_bitrate = -1;
360
361 static gint hf_ipmi_trn_serial20_num_dial_strings = -1;
362 static gint hf_ipmi_trn_serial21_dialsel = -1;
363 static gint hf_ipmi_trn_serial21_blockno = -1;
364 static gint hf_ipmi_trn_serial21_dialstr = -1;
365 static gint hf_ipmi_trn_serial22_num_ipaddrs = -1;
366 static gint hf_ipmi_trn_serial23_destsel = -1;
367 static gint hf_ipmi_trn_serial23_ipaddr = -1;
368 static gint hf_ipmi_trn_serial24_num_tap_accounts = -1;
369 static gint hf_ipmi_trn_serial25_tap_acct = -1;
370 static gint hf_ipmi_trn_serial25_dialstr_sel = -1;
371 static gint hf_ipmi_trn_serial25_tapsrv_sel = -1;
372 static gint hf_ipmi_trn_serial26_tap_acct = -1;
373 static gint hf_ipmi_trn_serial26_tap_passwd = -1;
374 static gint hf_ipmi_trn_serial27_tap_acct = -1;
375 static gint hf_ipmi_trn_serial27_tap_pager_id = -1;
376
377 static gint hf_ipmi_trn_serial28_tapsrv_sel = -1;
378 static gint hf_ipmi_trn_serial28_confirm = -1;
379 static gint hf_ipmi_trn_serial28_srvtype = -1;
380 static gint hf_ipmi_trn_serial28_ctrl_esc = -1;
381 static gint hf_ipmi_trn_serial28_t2 = -1;
382 static gint hf_ipmi_trn_serial28_t1 = -1;
383 static gint hf_ipmi_trn_serial28_t4 = -1;
384 static gint hf_ipmi_trn_serial28_t3 = -1;
385 static gint hf_ipmi_trn_serial28_t6 = -1;
386 static gint hf_ipmi_trn_serial28_t5 = -1;
387 static gint hf_ipmi_trn_serial28_n2 = -1;
388 static gint hf_ipmi_trn_serial28_n1 = -1;
389 static gint hf_ipmi_trn_serial28_n4 = -1;
390 static gint hf_ipmi_trn_serial28_n3 = -1;
391
392 static gint hf_ipmi_trn_serial29_op = -1;
393 static gint hf_ipmi_trn_serial29_lineedit = -1;
394 static gint hf_ipmi_trn_serial29_deletectl = -1;
395 static gint hf_ipmi_trn_serial29_echo = -1;
396 static gint hf_ipmi_trn_serial29_handshake = -1;
397 static gint hf_ipmi_trn_serial29_o_newline = -1;
398 static gint hf_ipmi_trn_serial29_i_newline = -1;
399 static gint hf_ipmi_trn_serial30_snooping = -1;
400 static gint hf_ipmi_trn_serial30_snoopctl = -1;
401 static gint hf_ipmi_trn_serial30_negot_ctl = -1;
402 static gint hf_ipmi_trn_serial30_use_xmit_accm = -1;
403 static gint hf_ipmi_trn_serial30_xmit_addr_comp = -1;
404 static gint hf_ipmi_trn_serial30_xmit_proto_comp = -1;
405 static gint hf_ipmi_trn_serial30_ipaddr = -1;
406 static gint hf_ipmi_trn_serial30_accm = -1;
407 static gint hf_ipmi_trn_serial30_addr_comp = -1;
408 static gint hf_ipmi_trn_serial30_proto_comp = -1;
409 static gint hf_ipmi_trn_serial31_port = -1;
410 static gint hf_ipmi_trn_serial32_port = -1;
411 static gint hf_ipmi_trn_serial33_auth_proto = -1;
412 static gint hf_ipmi_trn_serial34_chap_name = -1;
413
414 static gint hf_ipmi_trn_serial35_recv_accm = -1;
415 static gint hf_ipmi_trn_serial35_xmit_accm = -1;
416 static gint hf_ipmi_trn_serial36_snoop_accm = -1;
417 static gint hf_ipmi_trn_serial37_num_ppp = -1;
418 static gint hf_ipmi_trn_serial38_acct_sel = -1;
419 static gint hf_ipmi_trn_serial38_dialstr_sel = -1;
420 static gint hf_ipmi_trn_serial39_acct_sel = -1;
421 static gint hf_ipmi_trn_serial39_ipaddr = -1;
422 static gint hf_ipmi_trn_serial40_acct_sel = -1;
423 static gint hf_ipmi_trn_serial40_username = -1;
424 static gint hf_ipmi_trn_serial41_acct_sel = -1;
425 static gint hf_ipmi_trn_serial41_userdomain = -1;
426 static gint hf_ipmi_trn_serial42_acct_sel = -1;
427 static gint hf_ipmi_trn_serial42_userpass = -1;
428 static gint hf_ipmi_trn_serial43_acct_sel = -1;
429 static gint hf_ipmi_trn_serial43_auth_proto = -1;
430 static gint hf_ipmi_trn_serial44_acct_sel = -1;
431 static gint hf_ipmi_trn_serial44_hold_time = -1;
432
433 static gint hf_ipmi_trn_serial45_src_ipaddr = -1;
434 static gint hf_ipmi_trn_serial45_dst_ipaddr = -1;
435 static gint hf_ipmi_trn_serial46_tx_bufsize = -1;
436 static gint hf_ipmi_trn_serial47_rx_bufsize = -1;
437 static gint hf_ipmi_trn_serial48_ipaddr = -1;
438 static gint hf_ipmi_trn_serial49_blockno = -1;
439 static gint hf_ipmi_trn_serial49_dialstr = -1;
440 static gint hf_ipmi_trn_serial50_115200 = -1;
441 static gint hf_ipmi_trn_serial50_57600 = -1;
442 static gint hf_ipmi_trn_serial50_38400 = -1;
443 static gint hf_ipmi_trn_serial50_19200 = -1;
444 static gint hf_ipmi_trn_serial50_9600 = -1;
445
446 static gint hf_ipmi_trn_serial51_port_assoc_sel = -1;
447 static gint hf_ipmi_trn_serial51_ipmi_channel = -1;
448 static gint hf_ipmi_trn_serial51_conn_num = -1;
449 static gint hf_ipmi_trn_serial51_ipmi_sharing = -1;
450 static gint hf_ipmi_trn_serial51_ipmi_sol = -1;
451 static gint hf_ipmi_trn_serial51_chan_num = -1;
452 static gint hf_ipmi_trn_serial52_port_assoc_sel = -1;
453 static gint hf_ipmi_trn_serial52_conn_name = -1;
454 static gint hf_ipmi_trn_serial53_port_assoc_sel = -1;
455 static gint hf_ipmi_trn_serial53_chan_name = -1;
456
457 static gint hf_ipmi_trn_01_chan = -1;
458 static gint hf_ipmi_trn_01_param = -1;
459 static gint hf_ipmi_trn_01_param_data = -1;
460
461 static gint hf_ipmi_trn_02_getrev = -1;
462 static gint hf_ipmi_trn_02_chan = -1;
463 static gint hf_ipmi_trn_02_param = -1;
464 static gint hf_ipmi_trn_02_set = -1;
465 static gint hf_ipmi_trn_02_block = -1;
466 static gint hf_ipmi_trn_02_rev_present = -1;
467 static gint hf_ipmi_trn_02_rev_compat = -1;
468 static gint hf_ipmi_trn_02_param_data = -1;
469
470 static gint hf_ipmi_trn_03_chan = -1;
471 static gint hf_ipmi_trn_03_arp_resp = -1;
472 static gint hf_ipmi_trn_03_gratuitous_arp = -1;
473 static gint hf_ipmi_trn_03_status_arp_resp = -1;
474 static gint hf_ipmi_trn_03_status_gratuitous_arp = -1;
475
476 static gint hf_ipmi_trn_04_chan = -1;
477 static gint hf_ipmi_trn_04_clear = -1;
478 static gint hf_ipmi_trn_04_rx_ippkts = -1;
479 static gint hf_ipmi_trn_04_rx_iphdr_err = -1;
480 static gint hf_ipmi_trn_04_rx_ipaddr_err = -1;
481 static gint hf_ipmi_trn_04_rx_ippkts_frag = -1;
482 static gint hf_ipmi_trn_04_tx_ippkts = -1;
483 static gint hf_ipmi_trn_04_rx_udppkts = -1;
484 static gint hf_ipmi_trn_04_rx_validrmcp = -1;
485 static gint hf_ipmi_trn_04_rx_udpproxy = -1;
486 static gint hf_ipmi_trn_04_dr_udpproxy = -1;
487
488 static gint hf_ipmi_trn_10_chan = -1;
489 static gint hf_ipmi_trn_10_param = -1;
490 static gint hf_ipmi_trn_10_param_data = -1;
491
492 static gint hf_ipmi_trn_11_getrev = -1;
493 static gint hf_ipmi_trn_11_chan = -1;
494 static gint hf_ipmi_trn_11_param = -1;
495 static gint hf_ipmi_trn_11_set = -1;
496 static gint hf_ipmi_trn_11_block = -1;
497 static gint hf_ipmi_trn_11_rev_present = -1;
498 static gint hf_ipmi_trn_11_rev_compat = -1;
499 static gint hf_ipmi_trn_11_param_data = -1;
500
501 static gint hf_ipmi_trn_12_chan = -1;
502 static gint hf_ipmi_trn_12_mux_setting = -1;
503 static gint hf_ipmi_trn_12_sw_to_sys = -1;
504 static gint hf_ipmi_trn_12_sw_to_bmc = -1;
505 static gint hf_ipmi_trn_12_alert = -1;
506 static gint hf_ipmi_trn_12_msg = -1;
507 static gint hf_ipmi_trn_12_req = -1;
508 static gint hf_ipmi_trn_12_mux_state = -1;
509
510 static gint hf_ipmi_trn_13_chan = -1;
511 static gint hf_ipmi_trn_13_code1 = -1;
512 static gint hf_ipmi_trn_13_code2 = -1;
513 static gint hf_ipmi_trn_13_code3 = -1;
514 static gint hf_ipmi_trn_13_code4 = -1;
515 static gint hf_ipmi_trn_13_code5 = -1;
516
517 static gint hf_ipmi_trn_14_chan = -1;
518 static gint hf_ipmi_trn_14_block = -1;
519 static gint hf_ipmi_trn_14_data = -1;
520
521 static gint hf_ipmi_trn_15_chan = -1;
522 static gint hf_ipmi_trn_15_block = -1;
523 static gint hf_ipmi_trn_15_data = -1;
524
525 static gint hf_ipmi_trn_16_chan = -1;
526 static gint hf_ipmi_trn_16_src_port = -1;
527 static gint hf_ipmi_trn_16_dst_port = -1;
528 static gint hf_ipmi_trn_16_src_addr = -1;
529 static gint hf_ipmi_trn_16_dst_addr = -1;
530 static gint hf_ipmi_trn_16_bytes = -1;
531
532 static gint hf_ipmi_trn_17_chan = -1;
533 static gint hf_ipmi_trn_17_clear = -1;
534 static gint hf_ipmi_trn_17_block_num = -1;
535 static gint hf_ipmi_trn_17_size = -1;
536 static gint hf_ipmi_trn_17_data = -1;
537
538 static gint hf_ipmi_trn_18_state = -1;
539 static gint hf_ipmi_trn_18_ipmi_ver = -1;
540
541 static gint hf_ipmi_trn_19_chan = -1;
542 static gint hf_ipmi_trn_19_dest_sel = -1;
543
544 static gint hf_ipmi_trn_XX_cap_cbcp = -1;
545 static gint hf_ipmi_trn_XX_cap_ipmi = -1;
546 static gint hf_ipmi_trn_XX_cbcp_from_list = -1;
547 static gint hf_ipmi_trn_XX_cbcp_user = -1;
548 static gint hf_ipmi_trn_XX_cbcp_prespec = -1;
549 static gint hf_ipmi_trn_XX_cbcp_nocb = -1;
550 static gint hf_ipmi_trn_XX_dst1 = -1;
551 static gint hf_ipmi_trn_XX_dst2 = -1;
552 static gint hf_ipmi_trn_XX_dst3 = -1;
553
554 static gint hf_ipmi_trn_1a_user = -1;
555 static gint hf_ipmi_trn_1a_chan = -1;
556
557 static gint hf_ipmi_trn_1b_user = -1;
558 static gint hf_ipmi_trn_1b_chan = -1;
559
560 static expert_field ei_ipmi_trn_02_request_param_rev = EI_INIT;
561 static expert_field ei_ipmi_trn_02_request_param_data = EI_INIT;
562 static expert_field ei_ipmi_trn_11_request_param_rev = EI_INIT;
563 static expert_field ei_ipmi_trn_11_request_param_data = EI_INIT;
564
565 static const value_string lan00_sip_vals[] = {
566 { 0x00, "Set complete" },
567 { 0x01, "Set in progress" },
568 { 0x02, "Commit write" },
569 { 0x03, "Reserved" },
570 { 0, NULL }
571 };
572
573 static const value_string lan04_ipsrc_vals[] = {
574 { 0x00, "Unspecified" },
575 { 0x01, "Static address (manually configured)" },
576 { 0x02, "Address obtained by BMC running DHCP" },
577 { 0x03, "Address loaded by BIOS or system software" },
578 { 0x04, "Address obtained by BMC running other address assignment protocol" },
579 { 0, NULL }
580 };
581
582 static const struct true_false_string lan18_ack_tfs = {
583 "Acknowledged", "Unacknowledged"
584 };
585
586 static const value_string lan18_dst_type_vals[] = {
587 { 0x00, "PET Trap destination" },
588 { 0x06, "OEM 1" },
589 { 0x07, "OEM 2" },
590 { 0, NULL }
591 };
592
593 static const value_string lan19_af_vals[] = {
594 { 0x00, "IPv4 Address followed by Ethernet/802.3 MAC Address" },
595 { 0x01, "IPv6 Address" },
596 { 0, NULL }
597 };
598
599 static const struct true_false_string lan19_gw_sel_tfs = {
600 "Use backup gateway", "Use default gateway"
601 };
602
603 static const struct true_false_string lan20_enable_tfs = {
604 "Enabled", "Disabled"
605 };
606
607 static const value_string lan24_priv_vals[] = {
608 { 0x00, "Unspecified" },
609 { 0x01, "Callback" },
610 { 0x02, "User" },
611 { 0x03, "Operator" },
612 { 0x04, "Administrator" },
613 { 0x05, "OEM" },
614 { 0, NULL }
615 };
616
617 static const value_string lan25_af_vals[] = {
618 { 0x00, "VLAN ID not used" },
619 { 0x01, "802.1q VLAN TAG" },
620 { 0, NULL }
621 };
622
623 static const value_string lan51_enables[] = {
624 { 0, "IPv6 addressing disabled" },
625 { 1, "Enable IPv6 addressing only. IPv5 addressing is disabled" },
626 { 2, "Enable IPv6 and IPv4 addressing simultaneously" },
627 { 0, NULL }
628 };
629
630 static const value_string lanXX_addr_type[] = {
631 { 0, "Static" },
632 { 1, "SLAAC" },
633 { 2, "DHCPv6" },
634 { 0, NULL }
635 };
636
637 static const value_string lanXX_addr_status[] = {
638 { 0, "Active (in-use)" },
639 { 1, "Disabled" },
640 { 2, "Pending" },
641 { 3, "Failed" },
642 { 4, "Deprecated" },
643 { 5, "Invalid" },
644 { 0, NULL }
645 };
646
647 static const value_string lanXX_timing_support[] = {
648 { 0, "Not supported" },
649 { 1, "Global" },
650 { 2, "Per interface" },
651 { 0, NULL }
652 };
653
654 static const value_string serialXX_flowctl_vals[] = {
655 { 0x00, "No flow control" },
656 { 0x01, "RTS/CTS flow control" },
657 { 0x02, "XON/XOFF flow control" },
658 { 0x03, "Reserved" },
659 { 0, NULL }
660 };
661
662 static const value_string serialXX_bitrate_vals[] = {
663 { 0x06, "9600 bps" },
664 { 0x07, "19.2 kbps" },
665 { 0x08, "38.4 kbps" },
666 { 0x09, "57.6 kbps" },
667 { 0x0A, "115.2 kbps" },
668 { 0, NULL }
669 };
670
671 static const struct true_false_string serial03_connmode_tfs = {
672 "Direct Connect", "Modem Connect"
673 };
674
675 static const value_string serial17_dest_type_vals[] = {
676 { 0x00, "Dial Page" },
677 { 0x01, "TAP Page" },
678 { 0x02, "PPP Alert" },
679 { 0x03, "Basic Mode Callback" },
680 { 0x04, "PPP Mode Callback" },
681 { 0x0e, "OEM 1" },
682 { 0x0f, "OEM 2" },
683 { 0, NULL }
684 };
685
686 static const struct true_false_string serial19_stopbits_tfs = {
687 "2 stop bits", "1 stop bit"
688 };
689
690 static const struct true_false_string serial19_charsize_tfs = {
691 "7-bit", "8-bit"
692 };
693
694 static const value_string serial19_parity_vals[] = {
695 { 0x00, "No" },
696 { 0x01, "Odd" },
697 { 0x02, "Even" },
698 { 0, NULL }
699 };
700
701 static const value_string serial28_confirm_vals[] = {
702 { 0x00, "ACK received after end-of-transaction only" },
703 { 0x01, "Code 211 and ACK received after ETX" },
704 { 0x02, "Code 211 or 213, and ACK received after ETX" },
705 { 0, NULL }
706 };
707
708 static const value_string serial29_op_vals[] = {
709 { 0x00, "Set volatile settings" },
710 { 0x01, "Set non-volatile settings" },
711 { 0x02, "Restore default" },
712 { 0, NULL }
713 };
714
715 static const value_string serial29_delete_vals[] = {
716 { 0x00, "<del>" },
717 { 0x01, "<bksp><sp><bksp>" },
718 { 0, NULL }
719 };
720
721 static const value_string serial29_o_nl_vals[] = {
722 { 0x00, "None" },
723 { 0x01, "<CR><LF>" },
724 { 0x02, "<NUL>" },
725 { 0x03, "<CR>" },
726 { 0x04, "<LF><CR>" },
727 { 0x05, "<LF>" },
728 { 0, NULL }
729 };
730
731 static const value_string serial29_i_nl_vals[] = {
732 { 0x01, "<CR>" },
733 { 0x02, "<NUL>" },
734 { 0, NULL }
735 };
736
737 static const value_string serial30_snoopctl_vals[] = {
738 { 0x00, "BMC uses Transmit ACCM" },
739 { 0x01, "BMC uses Snoop ACCM" },
740 { 0, NULL }
741 };
742
743 static const value_string serial30_negoctl_vals[] = {
744 { 0x00, "On initial connection and mux switch" },
745 { 0x01, "On initial connection" },
746 { 0x02, "Never" },
747 { 0, NULL }
748 };
749
750 static const struct true_false_string serial30_filter_tfs = {
751 "Using Transmit ACCM", "Assuming all control chars escaped"
752 };
753
754 static const value_string serial30_ipaddr_val[] = {
755 { 0x00, "Request IP Address" },
756 { 0x01, "Request Fixed IP Address" },
757 { 0x02, "No Negotiation" },
758 { 0, NULL }
759 };
760
761 static const value_string serialXX_proto_vals[] = {
762 { 0x00, "None" },
763 { 0x01, "CHAP" },
764 { 0x02, "PAP" },
765 { 0x03, "MS-CHAP v1, Windows NT" },
766 { 0x04, "MS-CHAP v1, Lan Manager" },
767 { 0x05, "MS-CHAP v2" },
768 { 0, NULL }
769 };
770
771 static const struct true_false_string tfs_03_suspend = {
772 "Suspend", "Do not suspend"
773 };
774
775 static const struct true_false_string tfs_03_arp_status = {
776 "Occurring", "Suspended"
777 };
778
779 static const struct true_false_string tfs_04_clear = {
780 "Clear", "Do not clear"
781 };
782
783 static const value_string vals_12_mux[] = {
784 { 0x00, "Get present status" },
785 { 0x01, "Request switch to system" },
786 { 0x02, "Request switch to BMC" },
787 { 0x03, "Force switch to system" },
788 { 0x04, "Force switch to BMC" },
789 { 0x05, "Block requests to switch to system" },
790 { 0x06, "Allow requests to switch to system" },
791 { 0x07, "Block requests to switch to BMC" },
792 { 0x08, "Allow requests to switch to BMC" },
793 { 0, NULL }
794 };
795
796 static const struct true_false_string tfs_12_blocked = {
797 "blocked", "allowed"
798 };
799
800 static const struct true_false_string tfs_12_req = {
801 "accepted/forced", "rejected"
802 };
803
804 static const struct true_false_string tfs_12_mux_state = {
805 "BMC", "system"
806 };
807
808 static const value_string vals_18_state[] = {
809 { 0x00, "No session active" },
810 { 0x01, "Session active (mux switched to BMC)" },
811 { 0x02, "Switching mux to system" },
812 { 0, NULL }
813 };
814
815 static int * const lanXX_authtypes_byte[] = { &hf_ipmi_trn_lanXX_oem, &hf_ipmi_trn_lanXX_passwd, &hf_ipmi_trn_lanXX_md5,
816 &hf_ipmi_trn_lanXX_md2, &hf_ipmi_trn_lanXX_none, NULL };
817
818 static void
lan_serial_00(tvbuff_t * tvb,proto_tree * tree)819 lan_serial_00(tvbuff_t *tvb, proto_tree *tree)
820 {
821 static int * const byte1[] = { &hf_ipmi_trn_lan00_sip, NULL };
822
823 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_trn_lan00_byte1,
824 byte1, ENC_LITTLE_ENDIAN, 0);
825 }
826
827 static void
lan_serial_01(tvbuff_t * tvb,proto_tree * tree)828 lan_serial_01(tvbuff_t *tvb, proto_tree *tree)
829 {
830 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Authentication types supported: ",
831 "No authentication types supported for this channel", ett_ipmi_trn_lan01_byte1,
832 lanXX_authtypes_byte, ENC_LITTLE_ENDIAN, 0);
833 }
834
835 static void
lan_serial_02(tvbuff_t * tvb,proto_tree * tree)836 lan_serial_02(tvbuff_t *tvb, proto_tree *tree)
837 {
838 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Authentication types for Callback level: ",
839 "No authentication types enabled", ett_ipmi_trn_lan02_byte1,
840 lanXX_authtypes_byte, ENC_LITTLE_ENDIAN, 0);
841 proto_tree_add_bitmask_text(tree, tvb, 1, 1, "Authentication types for User level: ",
842 "No authentication types enabled", ett_ipmi_trn_lan02_byte2,
843 lanXX_authtypes_byte, ENC_LITTLE_ENDIAN, 0);
844 proto_tree_add_bitmask_text(tree, tvb, 2, 1, "Authentication types for Operator level: ",
845 "No authentication types enabled", ett_ipmi_trn_lan02_byte3,
846 lanXX_authtypes_byte, ENC_LITTLE_ENDIAN, 0);
847 proto_tree_add_bitmask_text(tree, tvb, 3, 1, "Authentication types for Administrator level: ",
848 "No authentication types enabled", ett_ipmi_trn_lan02_byte4,
849 lanXX_authtypes_byte, ENC_LITTLE_ENDIAN, 0);
850 proto_tree_add_bitmask_text(tree, tvb, 4, 1, "Authentication types for OEM level: ",
851 "No authentication types enabled", ett_ipmi_trn_lan02_byte5,
852 lanXX_authtypes_byte, ENC_LITTLE_ENDIAN, 0);
853 }
854
855 static void
lan_03(tvbuff_t * tvb,proto_tree * tree)856 lan_03(tvbuff_t *tvb, proto_tree *tree)
857 {
858 proto_tree_add_item(tree, hf_ipmi_trn_lan03_ip, tvb, 0, 4, ENC_BIG_ENDIAN);
859 }
860
861 static void
lan_04(tvbuff_t * tvb,proto_tree * tree)862 lan_04(tvbuff_t *tvb, proto_tree *tree)
863 {
864 static int * const byte1[] = { &hf_ipmi_trn_lan04_ipsrc, NULL };
865
866 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_trn_lan04_byte1,
867 byte1, ENC_LITTLE_ENDIAN, 0);
868 }
869
870 static void
lan_05(tvbuff_t * tvb,proto_tree * tree)871 lan_05(tvbuff_t *tvb, proto_tree *tree)
872 {
873 proto_tree_add_item(tree, hf_ipmi_trn_lan05_ether, tvb, 0, 6, ENC_NA);
874 }
875
876 static void
lan_06(tvbuff_t * tvb,proto_tree * tree)877 lan_06(tvbuff_t *tvb, proto_tree *tree)
878 {
879 proto_tree_add_item(tree, hf_ipmi_trn_lan06_subnet, tvb, 0, 4, ENC_BIG_ENDIAN);
880 }
881
882 static void
lan_07(tvbuff_t * tvb,proto_tree * tree)883 lan_07(tvbuff_t *tvb, proto_tree *tree)
884 {
885 static int * const byte2[] = { &hf_ipmi_trn_lan07_flags, NULL };
886 static int * const byte3[] = { &hf_ipmi_trn_lan07_precedence, &hf_ipmi_trn_lan07_tos, NULL };
887
888 proto_tree_add_item(tree, hf_ipmi_trn_lan07_ttl, tvb, 0, 1, ENC_LITTLE_ENDIAN);
889 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_trn_lan07_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
890 proto_tree_add_bitmask_text(tree, tvb, 2, 1, NULL, NULL, ett_ipmi_trn_lan07_byte3, byte3, ENC_LITTLE_ENDIAN, 0);
891 }
892
893 static void
lan_08(tvbuff_t * tvb,proto_tree * tree)894 lan_08(tvbuff_t *tvb, proto_tree *tree)
895 {
896 proto_tree_add_item(tree, hf_ipmi_trn_lan08_rmcp_port, tvb, 0, 2, ENC_LITTLE_ENDIAN);
897 }
898
899 static void
lan_09(tvbuff_t * tvb,proto_tree * tree)900 lan_09(tvbuff_t *tvb, proto_tree *tree)
901 {
902 proto_tree_add_item(tree, hf_ipmi_trn_lan09_rmcp_port, tvb, 0, 2, ENC_LITTLE_ENDIAN);
903 }
904
905 static void
lan_10(tvbuff_t * tvb,proto_tree * tree)906 lan_10(tvbuff_t *tvb, proto_tree *tree)
907 {
908 static int * const byte1[] = { &hf_ipmi_trn_lan10_responses, &hf_ipmi_trn_lan10_gratuitous, NULL };
909
910 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_trn_lan10_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
911 }
912
913 static void
lan_11(tvbuff_t * tvb,proto_tree * tree)914 lan_11(tvbuff_t *tvb, proto_tree *tree)
915 {
916 proto_tree_add_item(tree, hf_ipmi_trn_lan11_arp_interval, tvb, 0, 1, ENC_LITTLE_ENDIAN);
917 }
918
919 static void
lan_12(tvbuff_t * tvb,proto_tree * tree)920 lan_12(tvbuff_t *tvb, proto_tree *tree)
921 {
922 proto_tree_add_item(tree, hf_ipmi_trn_lan12_def_gw_ip, tvb, 0, 4, ENC_BIG_ENDIAN);
923 }
924
925 static void
lan_13(tvbuff_t * tvb,proto_tree * tree)926 lan_13(tvbuff_t *tvb, proto_tree *tree)
927 {
928 proto_tree_add_item(tree, hf_ipmi_trn_lan13_def_gw_mac, tvb, 0, 6, ENC_NA);
929 }
930
931 static void
lan_14(tvbuff_t * tvb,proto_tree * tree)932 lan_14(tvbuff_t *tvb, proto_tree *tree)
933 {
934 proto_tree_add_item(tree, hf_ipmi_trn_lan14_bkp_gw_ip, tvb, 0, 4, ENC_BIG_ENDIAN);
935 }
936
937 static void
lan_15(tvbuff_t * tvb,proto_tree * tree)938 lan_15(tvbuff_t *tvb, proto_tree *tree)
939 {
940 proto_tree_add_item(tree, hf_ipmi_trn_lan15_bkp_gw_mac, tvb, 0, 6, ENC_NA);
941 }
942
943 static void
lan_16(tvbuff_t * tvb,proto_tree * tree)944 lan_16(tvbuff_t *tvb, proto_tree *tree)
945 {
946 proto_tree_add_item(tree, hf_ipmi_trn_lan16_comm_string, tvb, 0, 18, ENC_ASCII|ENC_NA);
947 }
948
949 static void
lan_17(tvbuff_t * tvb,proto_tree * tree)950 lan_17(tvbuff_t *tvb, proto_tree *tree)
951 {
952 static int * const byte1[] = { &hf_ipmi_trn_lan17_num_dst, NULL };
953
954 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_trn_lan17_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
955 }
956
957 static void
lan_18(tvbuff_t * tvb,proto_tree * tree)958 lan_18(tvbuff_t *tvb, proto_tree *tree)
959 {
960 static int * const byte1[] = { &hf_ipmi_trn_lan18_dst_selector, NULL };
961 static int * const byte2[] = { &hf_ipmi_trn_lan18_ack, &hf_ipmi_trn_lan18_dst_type, NULL };
962 static int * const byte4[] = { &hf_ipmi_trn_lan18_retries, NULL };
963
964 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_trn_lan18_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
965 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_trn_lan18_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
966 proto_tree_add_item(tree, hf_ipmi_trn_lan18_tout, tvb, 2, 1, ENC_LITTLE_ENDIAN);
967 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_trn_lan18_byte4, byte4, ENC_LITTLE_ENDIAN, 0);
968 }
969
970 static void
lan_19(tvbuff_t * tvb,proto_tree * tree)971 lan_19(tvbuff_t *tvb, proto_tree *tree)
972 {
973 static int * const byte1[] = { &hf_ipmi_trn_lan19_dst_selector, NULL };
974 static int * const byte2[] = { &hf_ipmi_trn_lan19_addr_format, NULL };
975 static int * const byte3[] = { &hf_ipmi_trn_lan19_gw_sel, NULL };
976 guint8 v;
977
978 v = tvb_get_guint8(tvb, 1) >> 4;
979 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_trn_lan19_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
980 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_trn_lan19_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
981
982 if (v == 0) {
983 proto_tree_add_bitmask_text(tree, tvb, 2, 1, NULL, NULL, ett_ipmi_trn_lan19_byte3, byte3, ENC_LITTLE_ENDIAN, 0);
984 proto_tree_add_item(tree, hf_ipmi_trn_lan19_ip, tvb, 3, 4, ENC_BIG_ENDIAN);
985 proto_tree_add_item(tree, hf_ipmi_trn_lan19_mac, tvb, 7, 6, ENC_NA);
986 return;
987 } else if (v == 1) {
988 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_addr, tvb, 2, 16, ENC_NA);
989 return;
990 }
991
992 proto_tree_add_item(tree, hf_ipmi_trn_lan19_address, tvb, 2, -1, ENC_NA);
993 }
994
995 static void
lan_20(tvbuff_t * tvb,proto_tree * tree)996 lan_20(tvbuff_t *tvb, proto_tree *tree)
997 {
998 static int * const byte12[] = { &hf_ipmi_trn_lan20_vlan_id_enable, &hf_ipmi_trn_lan20_vlan_id, NULL };
999
1000 proto_tree_add_bitmask_text(tree, tvb, 0, 2, NULL, NULL, ett_ipmi_trn_lan20_byte12, byte12, ENC_LITTLE_ENDIAN, 0);
1001 }
1002
1003 static void
lan_21(tvbuff_t * tvb,proto_tree * tree)1004 lan_21(tvbuff_t *tvb, proto_tree *tree)
1005 {
1006 static int * const byte1[] = { &hf_ipmi_trn_lan21_vlan_prio, NULL };
1007
1008 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_trn_lan21_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1009 }
1010
1011 static void
lan_22(tvbuff_t * tvb,proto_tree * tree)1012 lan_22(tvbuff_t *tvb, proto_tree *tree)
1013 {
1014 static int * const byte1[] = { &hf_ipmi_trn_lan22_num_cs_entries, NULL };
1015
1016 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_trn_lan22_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1017 }
1018
1019 static void
lan_23(tvbuff_t * tvb,proto_tree * tree)1020 lan_23(tvbuff_t *tvb, proto_tree *tree)
1021 {
1022 guint i;
1023 guint8 v;
1024
1025 for (i = 0; i < 16; i++) {
1026 v = tvb_get_guint8(tvb, i + 1);
1027 proto_tree_add_uint_format(tree, hf_ipmi_trn_lan23_cs_entry, tvb, i + 1, 1,
1028 v, "Cipher Suite ID entry %c: %u", 'A' + i, v);
1029 }
1030 }
1031
1032 static void
lan_24(tvbuff_t * tvb,proto_tree * tree)1033 lan_24(tvbuff_t *tvb, proto_tree *tree)
1034 {
1035 static int * const ett[] = { &ett_ipmi_trn_lan24_byte1, &ett_ipmi_trn_lan24_byte2, &ett_ipmi_trn_lan24_byte3,
1036 &ett_ipmi_trn_lan24_byte4, &ett_ipmi_trn_lan24_byte5, &ett_ipmi_trn_lan24_byte6, &ett_ipmi_trn_lan24_byte7,
1037 &ett_ipmi_trn_lan24_byte8 };
1038 proto_tree *s_tree;
1039 guint i;
1040 guint8 v, v1, v2;
1041
1042 for (i = 0; i < 8; i++) {
1043 v = tvb_get_guint8(tvb, i + 1);
1044 v1 = v & 0x0f;
1045 v2 = v >> 4;
1046 s_tree = proto_tree_add_subtree_format(tree, tvb, i + 1, 1,
1047 *ett[i], NULL, "Cipher Suite #%d: %s (0x%02x), Cipher Suite #%d: %s (0x%02x)",
1048 i * 2 + 1, val_to_str_const(v1, lan24_priv_vals, "Reserved"), v1,
1049 i * 2 + 2, val_to_str_const(v2, lan24_priv_vals, "Reserved"), v2);
1050 proto_tree_add_uint_format_value(s_tree, hf_ipmi_trn_lan24_priv1, tvb, i + 1, 1,
1051 v2 << 4, " #%d: %s (0x%02x)", i * 2 + 2, val_to_str_const(v2, lan24_priv_vals, "Reserved"), v2);
1052 proto_tree_add_uint_format_value(s_tree, hf_ipmi_trn_lan24_priv2, tvb, i + 1, 1,
1053 v1, " #%d: %s (0x%02x)", i * 2 + 1, val_to_str_const(v1, lan24_priv_vals, "Reserved"), v1);
1054 }
1055 }
1056
1057 static void
lan_25(tvbuff_t * tvb,proto_tree * tree)1058 lan_25(tvbuff_t *tvb, proto_tree *tree)
1059 {
1060 static int * const byte1[] = { &hf_ipmi_trn_lan25_dst_selector, NULL };
1061 static int * const byte2[] = { &hf_ipmi_trn_lan25_addr_format, NULL };
1062 static int * const byte34[] = { &hf_ipmi_trn_lan25_uprio, &hf_ipmi_trn_lan25_cfi, &hf_ipmi_trn_lan25_vlan_id, NULL };
1063 guint8 v;
1064
1065 v = tvb_get_guint8(tvb, 1) >> 4;
1066 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_trn_lan25_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1067 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_trn_lan25_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
1068 switch (v) {
1069 case 0:
1070 break;
1071 case 1:
1072 proto_tree_add_bitmask_text(tree, tvb, 2, 2, NULL, NULL, ett_ipmi_trn_lan25_byte34,
1073 byte34, ENC_LITTLE_ENDIAN, 0);
1074 break;
1075 default:
1076 proto_tree_add_item(tree, hf_ipmi_trn_lan25_address, tvb, 2, -1, ENC_LITTLE_ENDIAN);
1077 break;
1078 }
1079 }
1080
1081 static void
lan_26(tvbuff_t * tvb,proto_tree * tree)1082 lan_26(tvbuff_t *tvb, proto_tree *tree)
1083 {
1084 proto_tree_add_item(tree, hf_ipmi_trn_lan26_gen_event, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1085 proto_tree_add_item(tree, hf_ipmi_trn_lan26_thresh_number, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1086 proto_tree_add_item(tree, hf_ipmi_trn_lan26_reset_interval, tvb, 2, 2, ENC_LITTLE_ENDIAN);
1087 proto_tree_add_item(tree, hf_ipmi_trn_lan26_lock_interval, tvb, 4, 2, ENC_LITTLE_ENDIAN);
1088 }
1089
1090 static void
lan_50(tvbuff_t * tvb,proto_tree * tree)1091 lan_50(tvbuff_t *tvb, proto_tree *tree)
1092 {
1093 static int * const byte1[] = { &hf_ipmi_trn_lan50_ipv6_only,
1094 &hf_ipmi_trn_lan50_both_ipv4_ipv6,
1095 &hf_ipmi_trn_lan50_ipv6_alerting, NULL };
1096 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Data 1", NULL, ett_ipmi_trn_lan50_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1097 }
1098
1099 static void
lan_51(tvbuff_t * tvb,proto_tree * tree)1100 lan_51(tvbuff_t *tvb, proto_tree *tree)
1101 {
1102 proto_tree_add_item(tree, hf_ipmi_trn_lan51_enables, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1103 }
1104
1105 static void
lan_52(tvbuff_t * tvb,proto_tree * tree)1106 lan_52(tvbuff_t *tvb, proto_tree *tree)
1107 {
1108 proto_tree_add_item(tree, hf_ipmi_trn_lan52_traffic_class, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1109 }
1110
1111 static void
lan_53_78(tvbuff_t * tvb,proto_tree * tree)1112 lan_53_78(tvbuff_t *tvb, proto_tree *tree)
1113 {
1114 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_hop_limit, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1115 }
1116
1117 static void
lan_54(tvbuff_t * tvb,proto_tree * tree)1118 lan_54(tvbuff_t *tvb, proto_tree *tree)
1119 {
1120 proto_tree_add_item(tree, hf_ipmi_trn_lan54_flow_label, tvb, 0, 3, ENC_BIG_ENDIAN);
1121 }
1122
1123 static void
lan_55(tvbuff_t * tvb,proto_tree * tree)1124 lan_55(tvbuff_t *tvb, proto_tree *tree)
1125 {
1126 static int * const byte3[] = { &hf_ipmi_trn_lan55_dhcpv6_support,
1127 &hf_ipmi_trn_lan55_slaac_support, NULL };
1128 proto_tree_add_item(tree, hf_ipmi_trn_lan55_static_addr_max, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1129 proto_tree_add_item(tree, hf_ipmi_trn_lan55_dynamic_addr_max, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1130 proto_tree_add_bitmask_text(tree, tvb, 2, 1, NULL, NULL, ett_ipmi_trn_lan55_byte3, byte3, ENC_LITTLE_ENDIAN, 0);
1131 }
1132
1133 static void
lan_56(tvbuff_t * tvb,proto_tree * tree)1134 lan_56(tvbuff_t *tvb, proto_tree *tree)
1135 {
1136 static int * const byte2[] = { &hf_ipmi_trn_lanXX_addr_type,
1137 &hf_ipmi_trn_lanXX_addr_enable, NULL };
1138 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_addr_selector, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1139 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL, ett_ipmi_trn_lan56_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
1140 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_addr, tvb, 2, 16, ENC_NA);
1141 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_prefix_len, tvb, 18, 1, ENC_LITTLE_ENDIAN);
1142 if (tvb_captured_length(tvb) > 19) {
1143 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_addr_status, tvb, 19, 1, ENC_LITTLE_ENDIAN);
1144 }
1145 }
1146
1147 static void
lan_57_60(tvbuff_t * tvb,proto_tree * tree)1148 lan_57_60(tvbuff_t *tvb, proto_tree *tree)
1149 {
1150 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_max_duid_blocks, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1151 }
1152
1153 static void
lan_58_61(tvbuff_t * tvb,proto_tree * tree)1154 lan_58_61(tvbuff_t *tvb, proto_tree *tree)
1155 {
1156 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_duid_selector, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1157 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_block_selector, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1158 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_duid, tvb, 2, -1, ENC_NA);
1159 }
1160
1161 static void
lan_59(tvbuff_t * tvb,proto_tree * tree)1162 lan_59(tvbuff_t *tvb, proto_tree *tree)
1163 {
1164 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_addr_selector, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1165 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_addr_type, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1166 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_addr, tvb, 2, 16, ENC_NA);
1167 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_prefix_len, tvb, 18, 1, ENC_LITTLE_ENDIAN);
1168 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_addr_status, tvb, 19, 1, ENC_LITTLE_ENDIAN);
1169 }
1170
1171 static void
lan_62_79(tvbuff_t * tvb,proto_tree * tree)1172 lan_62_79(tvbuff_t *tvb, proto_tree *tree)
1173 {
1174 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_timing_support, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1175 }
1176
1177 static void
lan_63(tvbuff_t * tvb,proto_tree * tree)1178 lan_63(tvbuff_t *tvb, proto_tree *tree)
1179 {
1180 guint8 v;
1181
1182 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_iface_selector, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1183 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_block_selector, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1184
1185 v = tvb_get_guint8(tvb, 1);
1186 if (v == 0) {
1187 proto_tree_add_item(tree, hf_ipmi_trn_lan63_sol_max_delay, tvb, 2, 1, ENC_LITTLE_ENDIAN);
1188 proto_tree_add_item(tree, hf_ipmi_trn_lan63_sol_timeout, tvb, 3, 1, ENC_LITTLE_ENDIAN);
1189 proto_tree_add_item(tree, hf_ipmi_trn_lan63_sol_max_rt, tvb, 4, 1, ENC_LITTLE_ENDIAN);
1190 proto_tree_add_item(tree, hf_ipmi_trn_lan63_req_timeout, tvb, 5, 1, ENC_LITTLE_ENDIAN);
1191 proto_tree_add_item(tree, hf_ipmi_trn_lan63_req_max_rt, tvb, 6, 1, ENC_LITTLE_ENDIAN);
1192 proto_tree_add_item(tree, hf_ipmi_trn_lan63_req_max_rc, tvb, 7, 1, ENC_LITTLE_ENDIAN);
1193 proto_tree_add_item(tree, hf_ipmi_trn_lan63_cnf_max_delay, tvb, 8, 1, ENC_LITTLE_ENDIAN);
1194 proto_tree_add_item(tree, hf_ipmi_trn_lan63_cnf_timeout, tvb, 9, 1, ENC_LITTLE_ENDIAN);
1195 proto_tree_add_item(tree, hf_ipmi_trn_lan63_cnf_max_rt, tvb, 10, 1, ENC_LITTLE_ENDIAN);
1196 proto_tree_add_item(tree, hf_ipmi_trn_lan63_cnf_max_rd, tvb, 11, 1, ENC_LITTLE_ENDIAN);
1197 proto_tree_add_item(tree, hf_ipmi_trn_lan63_ren_timeout, tvb, 12, 1, ENC_LITTLE_ENDIAN);
1198 proto_tree_add_item(tree, hf_ipmi_trn_lan63_ren_max_rt, tvb, 13, 1, ENC_LITTLE_ENDIAN);
1199 proto_tree_add_item(tree, hf_ipmi_trn_lan63_reb_timeout, tvb, 14, 1, ENC_LITTLE_ENDIAN);
1200 proto_tree_add_item(tree, hf_ipmi_trn_lan63_reb_max_rt, tvb, 15, 1, ENC_LITTLE_ENDIAN);
1201 proto_tree_add_item(tree, hf_ipmi_trn_lan63_inf_max_delay, tvb, 16, 1, ENC_LITTLE_ENDIAN);
1202 proto_tree_add_item(tree, hf_ipmi_trn_lan63_inf_timeout, tvb, 17, 1, ENC_LITTLE_ENDIAN);
1203 } else if (v == 1) {
1204 proto_tree_add_item(tree, hf_ipmi_trn_lan63_inf_max_rt, tvb, 2, 1, ENC_LITTLE_ENDIAN);
1205 proto_tree_add_item(tree, hf_ipmi_trn_lan63_rel_timeout, tvb, 3, 1, ENC_LITTLE_ENDIAN);
1206 proto_tree_add_item(tree, hf_ipmi_trn_lan63_rel_max_rc, tvb, 4, 1, ENC_LITTLE_ENDIAN);
1207 proto_tree_add_item(tree, hf_ipmi_trn_lan63_dec_timeout, tvb, 5, 1, ENC_LITTLE_ENDIAN);
1208 proto_tree_add_item(tree, hf_ipmi_trn_lan63_dec_max_rc, tvb, 6, 1, ENC_LITTLE_ENDIAN);
1209 proto_tree_add_item(tree, hf_ipmi_trn_lan63_hop_count_limit, tvb, 7, 1, ENC_LITTLE_ENDIAN);
1210 proto_tree_add_item(tree, hf_ipmi_trn_01_param_data, tvb, 8, -1, ENC_NA);
1211 } else {
1212 proto_tree_add_item(tree, hf_ipmi_trn_01_param_data, tvb, 2, -1, ENC_NA);
1213 }
1214 }
1215
1216 static void
lan_64(tvbuff_t * tvb,proto_tree * tree)1217 lan_64(tvbuff_t *tvb, proto_tree *tree)
1218 {
1219 static int * const byte1[] = { &hf_ipmi_trn_lan64_static_cfg,
1220 &hf_ipmi_trn_lan64_dynamic_cfg, NULL };
1221 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_trn_lan64_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1222 }
1223
1224 static void
lan_65_69(tvbuff_t * tvb,proto_tree * tree)1225 lan_65_69(tvbuff_t *tvb, proto_tree *tree)
1226 {
1227 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_addr, tvb, 0, 16, ENC_NA);
1228 }
1229
1230 static void
lan_66_70(tvbuff_t * tvb,proto_tree * tree)1231 lan_66_70(tvbuff_t *tvb, proto_tree *tree)
1232 {
1233 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_router_mac, tvb, 0, 6, ENC_NA);
1234 }
1235
1236 static void
lan_67_71(tvbuff_t * tvb,proto_tree * tree)1237 lan_67_71(tvbuff_t *tvb, proto_tree *tree)
1238 {
1239 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_prefix_len, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1240 }
1241
1242 static void
lan_68_72(tvbuff_t * tvb,proto_tree * tree)1243 lan_68_72(tvbuff_t *tvb, proto_tree *tree)
1244 {
1245 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_router_prefix, tvb, 0, 16, ENC_NA);
1246 }
1247
1248 static void
lan_73(tvbuff_t * tvb,proto_tree * tree)1249 lan_73(tvbuff_t *tvb, proto_tree *tree)
1250 {
1251 proto_tree_add_item(tree, hf_ipmi_trn_lan73_num_dynamic_sets, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1252 }
1253
1254 static void
lan_74(tvbuff_t * tvb,proto_tree * tree)1255 lan_74(tvbuff_t *tvb, proto_tree *tree)
1256 {
1257 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_router_selector, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1258 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_addr, tvb, 1, 16, ENC_NA);
1259 }
1260
1261 static void
lan_75(tvbuff_t * tvb,proto_tree * tree)1262 lan_75(tvbuff_t *tvb, proto_tree *tree)
1263 {
1264 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_router_selector, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1265 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_router_mac, tvb, 1, 6, ENC_NA);
1266 }
1267
1268 static void
lan_76(tvbuff_t * tvb,proto_tree * tree)1269 lan_76(tvbuff_t *tvb, proto_tree *tree)
1270 {
1271 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_router_selector, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1272 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_prefix_len, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1273 }
1274
1275 static void
lan_77(tvbuff_t * tvb,proto_tree * tree)1276 lan_77(tvbuff_t *tvb, proto_tree *tree)
1277 {
1278 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_router_selector, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1279 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_router_prefix, tvb, 1, 16, ENC_NA);
1280 }
1281
1282 static void
lan_80(tvbuff_t * tvb,proto_tree * tree)1283 lan_80(tvbuff_t *tvb, proto_tree *tree)
1284 {
1285 guint8 v;
1286
1287 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_iface_selector, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1288 proto_tree_add_item(tree, hf_ipmi_trn_lanXX_block_selector, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1289
1290 v = tvb_get_guint8(tvb, 1);
1291 if (v == 0) {
1292 proto_tree_add_item(tree, hf_ipmi_trn_lan80_max_rtr_solicitation_delay, tvb, 2, 1, ENC_LITTLE_ENDIAN);
1293 proto_tree_add_item(tree, hf_ipmi_trn_lan80_rtr_solicitation_interval, tvb, 3, 1, ENC_LITTLE_ENDIAN);
1294 proto_tree_add_item(tree, hf_ipmi_trn_lan80_max_rtr_solicitations, tvb, 4, 1, ENC_LITTLE_ENDIAN);
1295 proto_tree_add_item(tree, hf_ipmi_trn_lan80_dup_addr_detect_transmits, tvb, 5, 1, ENC_LITTLE_ENDIAN);
1296 proto_tree_add_item(tree, hf_ipmi_trn_lan80_max_multicast_solicit, tvb, 6, 1, ENC_LITTLE_ENDIAN);
1297 proto_tree_add_item(tree, hf_ipmi_trn_lan80_max_unicast_solicit, tvb, 7, 1, ENC_LITTLE_ENDIAN);
1298 proto_tree_add_item(tree, hf_ipmi_trn_lan80_max_anycast_delay_time, tvb, 8, 1, ENC_LITTLE_ENDIAN);
1299 proto_tree_add_item(tree, hf_ipmi_trn_lan80_max_neighbor_advertisement, tvb, 9, 1, ENC_LITTLE_ENDIAN);
1300 proto_tree_add_item(tree, hf_ipmi_trn_lan80_reachable_time, tvb, 10, 1, ENC_LITTLE_ENDIAN);
1301 proto_tree_add_item(tree, hf_ipmi_trn_lan80_retrans_timer, tvb, 11, 1, ENC_LITTLE_ENDIAN);
1302 proto_tree_add_item(tree, hf_ipmi_trn_lan80_delay_first_probe_time, tvb, 12, 1, ENC_LITTLE_ENDIAN);
1303 proto_tree_add_item(tree, hf_ipmi_trn_lan80_max_random_factor, tvb, 13, 1, ENC_LITTLE_ENDIAN);
1304 proto_tree_add_item(tree, hf_ipmi_trn_lan80_min_random_factor, tvb, 14, 1, ENC_LITTLE_ENDIAN);
1305 proto_tree_add_item(tree, hf_ipmi_trn_01_param_data, tvb, 15, -1, ENC_NA);
1306 } else {
1307 proto_tree_add_item(tree, hf_ipmi_trn_01_param_data, tvb, 2, -1, ENC_NA);
1308 }
1309 }
1310
1311 static struct {
1312 void (*intrp)(tvbuff_t *tvb, proto_tree *tree);
1313 const char *name;
1314 } lan_options[] = {
1315 { lan_serial_00, "Set In Progress" },
1316 { lan_serial_01, "Authentication Type Support" },
1317 { lan_serial_02, "Authentication Type Enables" },
1318 { lan_03, "IP Address" },
1319 { lan_04, "IP Address Source" },
1320 { lan_05, "MAC Address" },
1321 { lan_06, "Subnet Mask" },
1322 { lan_07, "IPv4 Header Parameters" },
1323 { lan_08, "Primary RMCP Port Number" },
1324 { lan_09, "Secondary RMCP Port Number" },
1325 { lan_10, "BMC-generated ARP Control" },
1326 { lan_11, "Gratuitous ARP Interval" },
1327 { lan_12, "Default Gateway Address" },
1328 { lan_13, "Default Gateway MAC Address" },
1329 { lan_14, "Backup Gateway Address" },
1330 { lan_15, "Backup Gateway MAC Address" },
1331 { lan_16, "Community String" },
1332 { lan_17, "Number of Destinations" },
1333 { lan_18, "Destination Type" },
1334 { lan_19, "Destination Addresses" },
1335 { lan_20, "VLAN ID (802.1q)" },
1336 { lan_21, "VLAN Priority (802.1q)" },
1337 { lan_22, "Cipher Suite Entry Support (RMCP+)" },
1338 { lan_23, "Cipher Suite Entries (RMCP+)" },
1339 { lan_24, "Cipher Suite Privilege Levels (RMCP+)" },
1340 { lan_25, "Destination Address VLAN TAGs" },
1341 { lan_26, "Bad Password Threshold" },
1342 { NULL, "Reserved" },
1343 { NULL, "Reserved" },
1344 { NULL, "Reserved" },
1345 { NULL, "Reserved" },
1346 { NULL, "Reserved" },
1347 { NULL, "Reserved" },
1348 { NULL, "Reserved" },
1349 { NULL, "Reserved" },
1350 { NULL, "Reserved" },
1351 { NULL, "Reserved" },
1352 { NULL, "Reserved" },
1353 { NULL, "Reserved" },
1354 { NULL, "Reserved" },
1355 { NULL, "Reserved" },
1356 { NULL, "Reserved" },
1357 { NULL, "Reserved" },
1358 { NULL, "Reserved" },
1359 { NULL, "Reserved" },
1360 { NULL, "Reserved" },
1361 { NULL, "Reserved" },
1362 { NULL, "Reserved" },
1363 { NULL, "Reserved" },
1364 { NULL, "Reserved" },
1365 { lan_50, "IPv6/IPv4 Support" },
1366 { lan_51, "IPv6/IPv4 Addressing enables" },
1367 { lan_52, "IPv6 Header Static Traffic Class" },
1368 { lan_53_78, "IPv6 Header Static Hop Limit" },
1369 { lan_54, "IPv6 Header Flow Label" },
1370 { lan_55, "IPv6 Status" },
1371 { lan_56, "IPv6 Static Addresses" },
1372 { lan_57_60, "IPv6 DHCPv6 Static DUID storage length" },
1373 { lan_58_61, "IPv6 DHCPv6 Static DUIDs" },
1374 { lan_59, "IPv6 Dynamic Addresses" },
1375 { lan_57_60, "IPv6 DHCPv6 Dynamic DUID storage length" },
1376 { lan_58_61, "IPv6 DHCPv6 Dynamic DUIDs" },
1377 { lan_62_79, "IPv6 DHCPv6 Timing Configuration Support" },
1378 { lan_63, "IPv6 DHCPv6 Timing Configuration" },
1379 { lan_64, "IPv6 Router Address Configuration Control" },
1380 { lan_65_69, "IPv6 Static Router 1 IP Address" },
1381 { lan_66_70, "IPv6 Static Router 1 MAC Address" },
1382 { lan_67_71, "IPv6 Static Router 1 Prefix Length" },
1383 { lan_68_72, "IPv6 Static Router 1 Prefix Value" },
1384 { lan_65_69, "IPv6 Static Router 2 IP Address" },
1385 { lan_66_70, "IPv6 Static Router 2 MAC Address" },
1386 { lan_67_71, "IPv6 Static Router 2 Prefix Length" },
1387 { lan_68_72, "IPv6 Static Router 2 Prefix Value" },
1388 { lan_73, "Number of Dynamic Router Info Sets" },
1389 { lan_74, "IPv6 Dynamic Router Info IP Address" },
1390 { lan_75, "IPv6 Dynamic Router Info MAC Address" },
1391 { lan_76, "IPv6 Dynamic Router Info Prefix Length" },
1392 { lan_77, "IPv6 Dynamic Router Info Prefix Value" },
1393 { lan_53_78, "IPv6 Dynamic Router Received Hop Limit" },
1394 { lan_62_79, "IPv6 NDISC/SLAAC Timing Configuration Support" },
1395 { lan_80, "IPv6 NDISC/SLAAC Timing Configuration" },
1396 };
1397
1398 /* Set LAN Configuration Parameters
1399 */
1400 static void
rq01(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)1401 rq01(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1402 {
1403 static int * const byte1[] = { &hf_ipmi_trn_01_chan, NULL };
1404 tvbuff_t *next;
1405 const char *desc;
1406 guint8 pno;
1407
1408 pno = tvb_get_guint8(tvb, 1);
1409 if (pno < array_length(lan_options)) {
1410 desc = lan_options[pno].name;
1411 } else if (pno >= 0xC0) {
1412 desc = "OEM";
1413 } else {
1414 desc = "Reserved";
1415 }
1416
1417 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_trn_01_byte1,
1418 byte1, ENC_LITTLE_ENDIAN, 0);
1419 proto_tree_add_uint_format_value(tree, hf_ipmi_trn_01_param, tvb, 1, 1,
1420 pno, "%s (0x%02x)", desc, pno);
1421 if (pno < array_length(lan_options) && lan_options[pno].intrp) {
1422 next = tvb_new_subset_remaining(tvb, 2);
1423 lan_options[pno].intrp(next, tree);
1424 } else {
1425 proto_tree_add_item(tree, hf_ipmi_trn_01_param_data, tvb, 2, -1, ENC_NA);
1426 }
1427 }
1428
1429 static const value_string cc01[] = {
1430 { 0x80, "Parameter not supported" },
1431 { 0x81, "Attempt to set the 'set in progress' value (in parameter #0) when not in the 'set complete' state" },
1432 { 0x82, "Attempt to write read-only parameter" },
1433 { 0, NULL }
1434 };
1435
1436 /* Get LAN Configuration Parameters
1437 */
1438 static void
rq02(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)1439 rq02(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1440 {
1441 static int * const byte1[] = { &hf_ipmi_trn_02_getrev, &hf_ipmi_trn_02_chan, NULL };
1442 const char *desc;
1443 guint8 pno;
1444
1445 pno = tvb_get_guint8(tvb, 1);
1446
1447 ipmi_set_data(pinfo, 0, pno);
1448 ipmi_set_data(pinfo, 1, tvb_get_guint8(tvb, 0) & 0x80);
1449
1450 if (!tree) {
1451 return;
1452 }
1453
1454 if (pno < array_length(lan_options)) {
1455 desc = lan_options[pno].name;
1456 } else if (pno >= 0xC0) {
1457 desc = "OEM";
1458 } else {
1459 desc = "Reserved";
1460 }
1461
1462 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1463 ett_ipmi_trn_02_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1464 proto_tree_add_uint_format_value(tree, hf_ipmi_trn_02_param, tvb, 1, 1,
1465 pno, "%s (0x%02x)", desc, pno);
1466 proto_tree_add_item(tree, hf_ipmi_trn_02_set, tvb, 2, 1, ENC_LITTLE_ENDIAN);
1467 proto_tree_add_item(tree, hf_ipmi_trn_02_block, tvb, 3, 1, ENC_LITTLE_ENDIAN);
1468 }
1469
1470 static void
rs02(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)1471 rs02(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1472 {
1473 static int * const byte1[] = { &hf_ipmi_trn_02_rev_present, &hf_ipmi_trn_02_rev_compat, NULL };
1474 proto_item *ti;
1475 proto_tree *subtree;
1476 tvbuff_t *next;
1477 const char *desc;
1478 guint32 pno, req;
1479
1480 ti = proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1481 ett_ipmi_trn_02_rev, byte1, ENC_LITTLE_ENDIAN, 0);
1482
1483 if (!ipmi_get_data(pinfo, 0, &pno) || !ipmi_get_data(pinfo, 1, &req)) {
1484 /* No request found - cannot parse further */
1485 if (tvb_captured_length(tvb) > 1) {
1486 proto_tree_add_item(tree, hf_ipmi_trn_02_param_data, tvb, 1, -1, ENC_NA);
1487 };
1488 return;
1489 }
1490
1491 if ((req & 0x80) && tvb_captured_length(tvb) > 1) {
1492 expert_add_info(pinfo, ti, &ei_ipmi_trn_02_request_param_rev);
1493 } else if (!(req & 0x80) && tvb_captured_length(tvb) == 1) {
1494 expert_add_info(pinfo, ti, &ei_ipmi_trn_02_request_param_data);
1495 }
1496
1497 if (pno < array_length(lan_options)) {
1498 desc = lan_options[pno].name;
1499 } else if (pno >= 0xC0) {
1500 desc = "OEM";
1501 } else {
1502 desc = "Reserved";
1503 }
1504
1505 subtree = proto_tree_add_subtree_format(tree, tvb, 0, 0, ett_ipmi_trn_parameter, NULL, "Parameter: %s", desc);
1506
1507 if (tvb_captured_length(tvb) > 1) {
1508 if (pno < array_length(lan_options) && lan_options[pno].intrp) {
1509 next = tvb_new_subset_remaining(tvb, 1);
1510 lan_options[pno].intrp(next, subtree);
1511 } else {
1512 proto_tree_add_item(subtree, hf_ipmi_trn_02_param_data, tvb, 1, -1, ENC_NA);
1513 }
1514 }
1515 }
1516
1517 static const value_string cc02[] = {
1518 { 0x80, "Parameter not supported" },
1519 { 0x83, "Attempt to read write-only parameter" },
1520 { 0, NULL }
1521 };
1522
1523 static void
rq03(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)1524 rq03(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1525 {
1526 static int * const byte1[] = { &hf_ipmi_trn_03_chan, NULL };
1527 static int * const byte2[] = { &hf_ipmi_trn_03_arp_resp, &hf_ipmi_trn_03_gratuitous_arp, NULL };
1528
1529 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1530 ett_ipmi_trn_03_rq_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1531 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
1532 ett_ipmi_trn_03_rq_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
1533 }
1534
1535 static void
rs03(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)1536 rs03(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1537 {
1538 static int * const byte1[] = { &hf_ipmi_trn_03_status_arp_resp,
1539 &hf_ipmi_trn_03_status_gratuitous_arp, NULL };
1540
1541 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1542 ett_ipmi_trn_03_rs_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1543 }
1544
1545 static void
rq04(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)1546 rq04(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1547 {
1548 static int * const byte1[] = { &hf_ipmi_trn_04_chan, NULL };
1549 static int * const byte2[] = { &hf_ipmi_trn_04_clear, NULL };
1550
1551 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1552 ett_ipmi_trn_04_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1553 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
1554 ett_ipmi_trn_04_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
1555 }
1556
1557 static void
rs04(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)1558 rs04(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1559 {
1560 proto_tree_add_item(tree, hf_ipmi_trn_04_rx_ippkts, tvb, 0, 2, ENC_LITTLE_ENDIAN);
1561 proto_tree_add_item(tree, hf_ipmi_trn_04_rx_iphdr_err, tvb, 2, 2, ENC_LITTLE_ENDIAN);
1562 proto_tree_add_item(tree, hf_ipmi_trn_04_rx_ipaddr_err, tvb, 4, 2, ENC_LITTLE_ENDIAN);
1563 proto_tree_add_item(tree, hf_ipmi_trn_04_rx_ippkts_frag, tvb, 6, 2, ENC_LITTLE_ENDIAN);
1564 proto_tree_add_item(tree, hf_ipmi_trn_04_tx_ippkts, tvb, 8, 2, ENC_LITTLE_ENDIAN);
1565 proto_tree_add_item(tree, hf_ipmi_trn_04_rx_udppkts, tvb, 10, 2, ENC_LITTLE_ENDIAN);
1566 proto_tree_add_item(tree, hf_ipmi_trn_04_rx_validrmcp, tvb, 12, 2, ENC_LITTLE_ENDIAN);
1567 proto_tree_add_item(tree, hf_ipmi_trn_04_rx_udpproxy, tvb, 14, 2, ENC_LITTLE_ENDIAN);
1568 proto_tree_add_item(tree, hf_ipmi_trn_04_dr_udpproxy, tvb, 16, 2, ENC_LITTLE_ENDIAN);
1569 }
1570
1571 static void
serial_03(tvbuff_t * tvb,proto_tree * tree)1572 serial_03(tvbuff_t *tvb, proto_tree *tree)
1573 {
1574 static int * const byte1[] = { &hf_ipmi_trn_serial03_connmode, &hf_ipmi_trn_serial03_terminal,
1575 &hf_ipmi_trn_serial03_ppp, &hf_ipmi_trn_serial03_basic, NULL };
1576
1577 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1578 ett_ipmi_trn_serial03_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1579 }
1580
1581 static void
serial04_timeout_fmt(gchar * s,guint32 v)1582 serial04_timeout_fmt(gchar *s, guint32 v)
1583 {
1584 if (v) {
1585 g_snprintf(s, ITEM_LABEL_LENGTH, "%d sec", 30 * v);
1586 }
1587 else {
1588 g_snprintf(s, ITEM_LABEL_LENGTH, "Does not timeout");
1589 }
1590 }
1591
1592 static void
serial_04(tvbuff_t * tvb,proto_tree * tree)1593 serial_04(tvbuff_t *tvb, proto_tree *tree)
1594 {
1595 static int * const byte1[] = { &hf_ipmi_trn_serial04_timeout, NULL };
1596
1597 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1598 ett_ipmi_trn_serial04_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1599 }
1600
1601 static void
serial_05(tvbuff_t * tvb,proto_tree * tree)1602 serial_05(tvbuff_t *tvb, proto_tree *tree)
1603 {
1604 static int * const byte1[] = { &hf_ipmi_trn_serial05_cbcp_callback,
1605 &hf_ipmi_trn_serial05_ipmi_callback, NULL };
1606 static int * const byte2[] = { &hf_ipmi_trn_serial05_cb_list, &hf_ipmi_trn_serial05_cb_user,
1607 &hf_ipmi_trn_serial05_cb_prespec, &hf_ipmi_trn_serial05_no_cb, NULL };
1608
1609 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Callback capabilities: ", "None",
1610 ett_ipmi_trn_serial05_byte1, byte1, ENC_LITTLE_ENDIAN, BMT_NO_TFS);
1611 proto_tree_add_bitmask_text(tree, tvb, 1, 1, "CBCP negotiation options: ", "None",
1612 ett_ipmi_trn_serial05_byte2, byte2, ENC_LITTLE_ENDIAN, BMT_NO_TFS);
1613 proto_tree_add_item(tree, hf_ipmi_trn_serial05_cb_dest1, tvb, 2, 1, ENC_LITTLE_ENDIAN);
1614 proto_tree_add_item(tree, hf_ipmi_trn_serial05_cb_dest2, tvb, 3, 1, ENC_LITTLE_ENDIAN);
1615 proto_tree_add_item(tree, hf_ipmi_trn_serial05_cb_dest3, tvb, 4, 1, ENC_LITTLE_ENDIAN);
1616 }
1617
1618 static void
serial_06(tvbuff_t * tvb,proto_tree * tree)1619 serial_06(tvbuff_t *tvb, proto_tree *tree)
1620 {
1621 static int * const byte1[] = { &hf_ipmi_trn_serial06_inactivity,
1622 &hf_ipmi_trn_serial06_dcd, NULL };
1623
1624 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1625 ett_ipmi_trn_serial06_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1626 }
1627
1628 static void
serial_07(tvbuff_t * tvb,proto_tree * tree)1629 serial_07(tvbuff_t *tvb, proto_tree *tree)
1630 {
1631 static int * const byte1[] = { &hf_ipmi_trn_serial07_flowctl, &hf_ipmi_trn_serial07_dtrhangup, NULL };
1632 static int * const byte2[] = { &hf_ipmi_trn_serial07_bitrate, NULL };
1633
1634 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1635 ett_ipmi_trn_serial07_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1636 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
1637 ett_ipmi_trn_serial07_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
1638 }
1639
1640 static void
serial_08(tvbuff_t * tvb,proto_tree * tree)1641 serial_08(tvbuff_t *tvb, proto_tree *tree)
1642 {
1643 static int * const byte1[] = { &hf_ipmi_trn_serial08_esc_powerup,
1644 &hf_ipmi_trn_serial08_esc_reset, &hf_ipmi_trn_serial08_switch_authcap,
1645 &hf_ipmi_trn_serial08_switch_rmcp, &hf_ipmi_trn_serial08_esc_switch1,
1646 &hf_ipmi_trn_serial08_esc_switch2, &hf_ipmi_trn_serial08_switch_dcdloss, NULL };
1647 static int * const byte2[] = { &hf_ipmi_trn_serial08_sharing,
1648 &hf_ipmi_trn_serial08_ping_callback, &hf_ipmi_trn_serial08_ping_direct,
1649 &hf_ipmi_trn_serial08_ping_retry, NULL };
1650
1651 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Switch/escape settings", NULL,
1652 ett_ipmi_trn_serial08_byte1, byte1, ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
1653 proto_tree_add_bitmask_text(tree, tvb, 1, 1, "Sharing/ping settings", NULL,
1654 ett_ipmi_trn_serial08_byte2, byte2, ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
1655 }
1656
1657 static void
serial_09(tvbuff_t * tvb,proto_tree * tree)1658 serial_09(tvbuff_t *tvb, proto_tree *tree)
1659 {
1660 static int * const byte1[] = { &hf_ipmi_trn_serial09_ring_duration, NULL };
1661 static int * const byte2[] = { &hf_ipmi_trn_serial09_ring_dead, NULL };
1662
1663 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1664 ett_ipmi_trn_serial09_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1665 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
1666 ett_ipmi_trn_serial09_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
1667 }
1668
1669 static void
serial_10(tvbuff_t * tvb,proto_tree * tree)1670 serial_10(tvbuff_t *tvb, proto_tree *tree)
1671 {
1672 proto_tree_add_item(tree, hf_ipmi_trn_serial10_set_sel, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1673 proto_tree_add_item(tree, hf_ipmi_trn_serial10_init_str, tvb, 1, -1, ENC_ASCII|ENC_NA);
1674 }
1675
1676 static void
serial_11(tvbuff_t * tvb,proto_tree * tree)1677 serial_11(tvbuff_t *tvb, proto_tree *tree)
1678 {
1679 proto_tree_add_item(tree, hf_ipmi_trn_serial11_esc_seq, tvb, 0, 5, ENC_ASCII|ENC_NA);
1680 }
1681
1682 static void
serial_12(tvbuff_t * tvb,proto_tree * tree)1683 serial_12(tvbuff_t *tvb, proto_tree *tree)
1684 {
1685 proto_tree_add_item(tree, hf_ipmi_trn_serial12_hangup_seq, tvb, 0, 8, ENC_ASCII|ENC_NA);
1686 }
1687
1688 static void
serial_13(tvbuff_t * tvb,proto_tree * tree)1689 serial_13(tvbuff_t *tvb, proto_tree *tree)
1690 {
1691 proto_tree_add_item(tree, hf_ipmi_trn_serial13_dial_cmd, tvb, 0, 8, ENC_ASCII|ENC_NA);
1692 }
1693
1694 static void
serial_14(tvbuff_t * tvb,proto_tree * tree)1695 serial_14(tvbuff_t *tvb, proto_tree *tree)
1696 {
1697 proto_tree_add_item(tree, hf_ipmi_trn_serial14_page_blackout, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1698 }
1699
1700 static void
serial_15(tvbuff_t * tvb,proto_tree * tree)1701 serial_15(tvbuff_t *tvb, proto_tree *tree)
1702 {
1703 proto_tree_add_item(tree, hf_ipmi_trn_serial15_comm_string, tvb, 0, 18, ENC_ASCII|ENC_NA);
1704 }
1705
1706 static void
serial_16(tvbuff_t * tvb,proto_tree * tree)1707 serial_16(tvbuff_t *tvb, proto_tree *tree)
1708 {
1709 static int * const byte1[] = { &hf_ipmi_trn_serial16_ndest, NULL };
1710
1711 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1712 ett_ipmi_trn_serial16_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1713 }
1714
1715 static void
serial_17(tvbuff_t * tvb,proto_tree * tree)1716 serial_17(tvbuff_t *tvb, proto_tree *tree)
1717 {
1718 static int * const byte1[] = { &hf_ipmi_trn_serial17_dest_sel, NULL };
1719 static int * const byte2[] = { &hf_ipmi_trn_serial17_ack, &hf_ipmi_trn_serial17_dest_type, NULL };
1720 static int * const byte4[] = { &hf_ipmi_trn_serial17_alert_retries, &hf_ipmi_trn_serial17_call_retries, NULL };
1721 int * byte5[3] = { NULL, NULL, NULL };
1722 guint8 v;
1723
1724 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1725 ett_ipmi_trn_serial17_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1726 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
1727 ett_ipmi_trn_serial17_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
1728 proto_tree_add_item(tree, hf_ipmi_trn_serial17_alert_ack_timeout, tvb, 2, 1, ENC_LITTLE_ENDIAN);
1729 proto_tree_add_bitmask_text(tree, tvb, 3, 1, NULL, NULL,
1730 ett_ipmi_trn_serial17_byte4, byte4, ENC_LITTLE_ENDIAN, 0);
1731
1732 v = tvb_get_guint8(tvb, 1) & 0x0f;
1733 switch (v) {
1734 case 0: /* Dial Page */
1735 case 3: /* Basic Mode Callback */
1736 byte5[0] = &hf_ipmi_trn_serial17_dialstr_sel;
1737 break;
1738 case 1: /* TAP Page */
1739 byte5[0] = &hf_ipmi_trn_serial17_tap_sel;
1740 break;
1741 case 2: /* PPP Alert */
1742 case 4: /* PPP Callback */
1743 byte5[0] = &hf_ipmi_trn_serial17_ipaddr_sel;
1744 byte5[1] = &hf_ipmi_trn_serial17_ppp_sel;
1745 break;
1746 default:
1747 proto_tree_add_item(tree, hf_ipmi_trn_serial17_unknown, tvb, 4, 1, ENC_LITTLE_ENDIAN);
1748 return;
1749 }
1750 proto_tree_add_bitmask_text(tree, tvb, 4, 1, NULL, NULL,
1751 ett_ipmi_trn_serial17_byte5, byte5, ENC_LITTLE_ENDIAN, 0);
1752 }
1753
1754 static void
serial_18(tvbuff_t * tvb,proto_tree * tree)1755 serial_18(tvbuff_t *tvb, proto_tree *tree)
1756 {
1757 proto_tree_add_item(tree, hf_ipmi_trn_serial18_call_retry, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1758 }
1759
1760 static void
serial_19(tvbuff_t * tvb,proto_tree * tree)1761 serial_19(tvbuff_t *tvb, proto_tree *tree)
1762 {
1763 static int * const byte1[] = { &hf_ipmi_trn_serial19_destsel, NULL };
1764 static int * const byte2[] = { &hf_ipmi_trn_serial19_flowctl, &hf_ipmi_trn_serial19_dtrhangup,
1765 &hf_ipmi_trn_serial19_stopbits, &hf_ipmi_trn_serial19_charsize, &hf_ipmi_trn_serial19_parity, NULL };
1766 static int * const byte3[] = { &hf_ipmi_trn_serial19_bitrate, NULL };
1767
1768 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1769 ett_ipmi_trn_serial19_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1770 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
1771 ett_ipmi_trn_serial19_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
1772 proto_tree_add_bitmask_text(tree, tvb, 2, 1, NULL, NULL,
1773 ett_ipmi_trn_serial19_byte3, byte3, ENC_LITTLE_ENDIAN, 0);
1774 }
1775
1776 static void
serial_20(tvbuff_t * tvb,proto_tree * tree)1777 serial_20(tvbuff_t *tvb, proto_tree *tree)
1778 {
1779 static int * const byte1[] = { &hf_ipmi_trn_serial20_num_dial_strings, NULL };
1780
1781 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1782 ett_ipmi_trn_serial20_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1783 }
1784
1785 static void
serial_21(tvbuff_t * tvb,proto_tree * tree)1786 serial_21(tvbuff_t *tvb, proto_tree *tree)
1787 {
1788 static int * const byte1[] = { &hf_ipmi_trn_serial21_dialsel, NULL };
1789
1790 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1791 ett_ipmi_trn_serial21_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1792 proto_tree_add_item(tree, hf_ipmi_trn_serial21_blockno, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1793 proto_tree_add_item(tree, hf_ipmi_trn_serial21_dialstr, tvb, 2, 1, ENC_ASCII|ENC_NA);
1794 }
1795
1796 static void
serial_22(tvbuff_t * tvb,proto_tree * tree)1797 serial_22(tvbuff_t *tvb, proto_tree *tree)
1798 {
1799 static int * const byte1[] = { &hf_ipmi_trn_serial22_num_ipaddrs, NULL };
1800
1801 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1802 ett_ipmi_trn_serial22_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1803 }
1804
1805 static void
serial_23(tvbuff_t * tvb,proto_tree * tree)1806 serial_23(tvbuff_t *tvb, proto_tree *tree)
1807 {
1808 static int * const byte1[] = { &hf_ipmi_trn_serial23_destsel, NULL };
1809
1810 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1811 ett_ipmi_trn_serial23_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1812 proto_tree_add_item(tree, hf_ipmi_trn_serial23_ipaddr, tvb, 1, 4, ENC_BIG_ENDIAN);
1813 }
1814
1815 static void
serial_24(tvbuff_t * tvb,proto_tree * tree)1816 serial_24(tvbuff_t *tvb, proto_tree *tree)
1817 {
1818 static int * const byte1[] = { &hf_ipmi_trn_serial24_num_tap_accounts, NULL };
1819
1820 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1821 ett_ipmi_trn_serial24_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1822 }
1823
1824 static void
serial_25(tvbuff_t * tvb,proto_tree * tree)1825 serial_25(tvbuff_t *tvb, proto_tree *tree)
1826 {
1827 static int * const byte2[] = { &hf_ipmi_trn_serial25_dialstr_sel, &hf_ipmi_trn_serial25_tapsrv_sel, NULL };
1828
1829 proto_tree_add_item(tree, hf_ipmi_trn_serial25_tap_acct, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1830 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
1831 ett_ipmi_trn_serial25_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
1832 }
1833
1834 static void
serial_26(tvbuff_t * tvb,proto_tree * tree)1835 serial_26(tvbuff_t *tvb, proto_tree *tree)
1836 {
1837 proto_tree_add_item(tree, hf_ipmi_trn_serial26_tap_acct, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1838 proto_tree_add_item(tree, hf_ipmi_trn_serial26_tap_passwd, tvb, 1, 6, ENC_ASCII|ENC_NA);
1839 }
1840
1841 static void
serial_27(tvbuff_t * tvb,proto_tree * tree)1842 serial_27(tvbuff_t *tvb, proto_tree *tree)
1843 {
1844 proto_tree_add_item(tree, hf_ipmi_trn_serial27_tap_acct, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1845 proto_tree_add_item(tree, hf_ipmi_trn_serial27_tap_pager_id, tvb, 1, 16, ENC_ASCII|ENC_NA);
1846 }
1847
1848 static void
serial_28(tvbuff_t * tvb,proto_tree * tree)1849 serial_28(tvbuff_t *tvb, proto_tree *tree)
1850 {
1851 static int * const byte1[] = { &hf_ipmi_trn_serial28_tapsrv_sel, NULL };
1852 static int * const byte2[] = { &hf_ipmi_trn_serial28_confirm, NULL };
1853 static int * const byte10[] = { &hf_ipmi_trn_serial28_t2, &hf_ipmi_trn_serial28_t1, NULL };
1854 static int * const byte11[] = { &hf_ipmi_trn_serial28_t4, &hf_ipmi_trn_serial28_t3, NULL };
1855 static int * const byte12[] = { &hf_ipmi_trn_serial28_t6, &hf_ipmi_trn_serial28_t5, NULL };
1856 static int * const byte13[] = { &hf_ipmi_trn_serial28_n2, &hf_ipmi_trn_serial28_n1, NULL };
1857 static int * const byte14[] = { &hf_ipmi_trn_serial28_n4, &hf_ipmi_trn_serial28_n3, NULL };
1858
1859 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1860 ett_ipmi_trn_serial28_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1861 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
1862 ett_ipmi_trn_serial28_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
1863 proto_tree_add_item(tree, hf_ipmi_trn_serial28_srvtype, tvb, 2, 3, ENC_ASCII|ENC_NA);
1864 proto_tree_add_item(tree, hf_ipmi_trn_serial28_ctrl_esc, tvb, 5, 4, ENC_LITTLE_ENDIAN);
1865 proto_tree_add_bitmask_text(tree, tvb, 9, 1, NULL, NULL,
1866 ett_ipmi_trn_serial28_byte10, byte10, ENC_LITTLE_ENDIAN, 0);
1867 proto_tree_add_bitmask_text(tree, tvb, 10, 1, NULL, NULL,
1868 ett_ipmi_trn_serial28_byte11, byte11, ENC_LITTLE_ENDIAN, 0);
1869 proto_tree_add_bitmask_text(tree, tvb, 11, 1, NULL, NULL,
1870 ett_ipmi_trn_serial28_byte12, byte12, ENC_LITTLE_ENDIAN, 0);
1871 proto_tree_add_bitmask_text(tree, tvb, 12, 1, NULL, NULL,
1872 ett_ipmi_trn_serial28_byte13, byte13, ENC_LITTLE_ENDIAN, 0);
1873 proto_tree_add_bitmask_text(tree, tvb, 13, 1, NULL, NULL,
1874 ett_ipmi_trn_serial28_byte14, byte14, ENC_LITTLE_ENDIAN, 0);
1875 }
1876
1877 static void
serial_29(tvbuff_t * tvb,proto_tree * tree)1878 serial_29(tvbuff_t *tvb, proto_tree *tree)
1879 {
1880 static int * const byte1[] = { &hf_ipmi_trn_serial29_op, &hf_ipmi_trn_serial29_lineedit,
1881 &hf_ipmi_trn_serial29_deletectl, &hf_ipmi_trn_serial29_echo, &hf_ipmi_trn_serial29_handshake, NULL };
1882 static int * const byte2[] = { &hf_ipmi_trn_serial29_o_newline, &hf_ipmi_trn_serial29_i_newline, NULL };
1883
1884 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1885 ett_ipmi_trn_serial29_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1886 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
1887 ett_ipmi_trn_serial29_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
1888 }
1889
1890 static void
serial_30(tvbuff_t * tvb,proto_tree * tree)1891 serial_30(tvbuff_t *tvb, proto_tree *tree)
1892 {
1893 static int * const byte1[] = { &hf_ipmi_trn_serial30_snooping, &hf_ipmi_trn_serial30_snoopctl, NULL };
1894 static int * const byte2[] = { &hf_ipmi_trn_serial30_negot_ctl, &hf_ipmi_trn_serial30_use_xmit_accm,
1895 &hf_ipmi_trn_serial30_xmit_addr_comp, &hf_ipmi_trn_serial30_xmit_proto_comp, NULL };
1896 static int * const byte3[] = { &hf_ipmi_trn_serial30_ipaddr, &hf_ipmi_trn_serial30_accm,
1897 &hf_ipmi_trn_serial30_addr_comp, &hf_ipmi_trn_serial30_proto_comp, NULL };
1898
1899 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1900 ett_ipmi_trn_serial30_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1901 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
1902 ett_ipmi_trn_serial30_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
1903 proto_tree_add_bitmask_text(tree, tvb, 2, 1, NULL, NULL,
1904 ett_ipmi_trn_serial30_byte3, byte3, ENC_LITTLE_ENDIAN, 0);
1905 }
1906
1907 static void
serial_31(tvbuff_t * tvb,proto_tree * tree)1908 serial_31(tvbuff_t *tvb, proto_tree *tree)
1909 {
1910 proto_tree_add_item(tree, hf_ipmi_trn_serial31_port, tvb, 0, 2, ENC_LITTLE_ENDIAN);
1911 }
1912
1913 static void
serial_32(tvbuff_t * tvb,proto_tree * tree)1914 serial_32(tvbuff_t *tvb, proto_tree *tree)
1915 {
1916 proto_tree_add_item(tree, hf_ipmi_trn_serial32_port, tvb, 0, 2, ENC_LITTLE_ENDIAN);
1917 }
1918
1919 static void
serial_33(tvbuff_t * tvb,proto_tree * tree)1920 serial_33(tvbuff_t *tvb, proto_tree *tree)
1921 {
1922 static int * const byte1[] = { &hf_ipmi_trn_serial33_auth_proto, NULL };
1923
1924 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1925 ett_ipmi_trn_serial33_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1926 }
1927
1928 static void
serial_34(tvbuff_t * tvb,proto_tree * tree)1929 serial_34(tvbuff_t *tvb, proto_tree *tree)
1930 {
1931 proto_tree_add_item(tree, hf_ipmi_trn_serial34_chap_name, tvb, 0, 16, ENC_ASCII|ENC_NA);
1932 }
1933
1934 static void
serial_35(tvbuff_t * tvb,proto_tree * tree)1935 serial_35(tvbuff_t *tvb, proto_tree *tree)
1936 {
1937 proto_tree_add_item(tree, hf_ipmi_trn_serial35_recv_accm, tvb, 0, 4, ENC_BIG_ENDIAN);
1938 proto_tree_add_item(tree, hf_ipmi_trn_serial35_xmit_accm, tvb, 4, 4, ENC_BIG_ENDIAN);
1939 }
1940
1941 static void
serial_36(tvbuff_t * tvb,proto_tree * tree)1942 serial_36(tvbuff_t *tvb, proto_tree *tree)
1943 {
1944 proto_tree_add_item(tree, hf_ipmi_trn_serial36_snoop_accm, tvb, 0, 4, ENC_BIG_ENDIAN);
1945 }
1946
1947 static void
serial_37(tvbuff_t * tvb,proto_tree * tree)1948 serial_37(tvbuff_t *tvb, proto_tree *tree)
1949 {
1950 static int * const byte1[] = { &hf_ipmi_trn_serial37_num_ppp, NULL };
1951
1952 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
1953 ett_ipmi_trn_serial37_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
1954 }
1955
1956 static void
serial_38(tvbuff_t * tvb,proto_tree * tree)1957 serial_38(tvbuff_t *tvb, proto_tree *tree)
1958 {
1959 proto_tree_add_item(tree, hf_ipmi_trn_serial38_acct_sel, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1960 proto_tree_add_item(tree, hf_ipmi_trn_serial38_dialstr_sel, tvb, 1, 1, ENC_LITTLE_ENDIAN);
1961 }
1962
1963 static void
serial_39(tvbuff_t * tvb,proto_tree * tree)1964 serial_39(tvbuff_t *tvb, proto_tree *tree)
1965 {
1966 proto_tree_add_item(tree, hf_ipmi_trn_serial39_acct_sel, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1967 proto_tree_add_item(tree, hf_ipmi_trn_serial39_ipaddr, tvb, 1, 4, ENC_BIG_ENDIAN);
1968 }
1969
1970 static void
serial_40(tvbuff_t * tvb,proto_tree * tree)1971 serial_40(tvbuff_t *tvb, proto_tree *tree)
1972 {
1973 int slen;
1974
1975 proto_tree_add_item(tree, hf_ipmi_trn_serial40_acct_sel, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1976 slen = tvb_captured_length(tvb) - 1;
1977 if (slen > 16) {
1978 slen = 16;
1979 }
1980 proto_tree_add_item(tree, hf_ipmi_trn_serial40_username, tvb, 1, slen, ENC_ASCII|ENC_NA);
1981 }
1982
1983 static void
serial_41(tvbuff_t * tvb,proto_tree * tree)1984 serial_41(tvbuff_t *tvb, proto_tree *tree)
1985 {
1986 int slen;
1987
1988 proto_tree_add_item(tree, hf_ipmi_trn_serial41_acct_sel, tvb, 0, 1, ENC_LITTLE_ENDIAN);
1989 slen = tvb_captured_length(tvb) - 1;
1990 if (slen > 16) {
1991 slen = 16;
1992 }
1993 proto_tree_add_item(tree, hf_ipmi_trn_serial41_userdomain, tvb, 1, slen, ENC_ASCII|ENC_NA);
1994 }
1995
1996 static void
serial_42(tvbuff_t * tvb,proto_tree * tree)1997 serial_42(tvbuff_t *tvb, proto_tree *tree)
1998 {
1999 int slen;
2000
2001 proto_tree_add_item(tree, hf_ipmi_trn_serial42_acct_sel, tvb, 0, 1, ENC_LITTLE_ENDIAN);
2002 slen = tvb_captured_length(tvb) - 1;
2003 if (slen > 16) {
2004 slen = 16;
2005 }
2006 proto_tree_add_item(tree, hf_ipmi_trn_serial42_userpass, tvb, 1, slen, ENC_ASCII|ENC_NA);
2007 }
2008
2009 static void
serial_43(tvbuff_t * tvb,proto_tree * tree)2010 serial_43(tvbuff_t *tvb, proto_tree *tree)
2011 {
2012 static int * const byte1[] = { &hf_ipmi_trn_serial43_auth_proto, NULL };
2013
2014 proto_tree_add_item(tree, hf_ipmi_trn_serial43_acct_sel, tvb, 0, 1, ENC_LITTLE_ENDIAN);
2015 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
2016 ett_ipmi_trn_serial43_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
2017 }
2018
2019 static void
serial_44(tvbuff_t * tvb,proto_tree * tree)2020 serial_44(tvbuff_t *tvb, proto_tree *tree)
2021 {
2022 proto_tree_add_item(tree, hf_ipmi_trn_serial44_acct_sel, tvb, 0, 1, ENC_LITTLE_ENDIAN);
2023 proto_tree_add_item(tree, hf_ipmi_trn_serial44_hold_time, tvb, 1, 1, ENC_LITTLE_ENDIAN);
2024 }
2025
2026 static void
serial_45(tvbuff_t * tvb,proto_tree * tree)2027 serial_45(tvbuff_t *tvb, proto_tree *tree)
2028 {
2029 proto_tree_add_item(tree, hf_ipmi_trn_serial45_src_ipaddr, tvb, 0, 4, ENC_BIG_ENDIAN);
2030 proto_tree_add_item(tree, hf_ipmi_trn_serial45_dst_ipaddr, tvb, 4, 4, ENC_BIG_ENDIAN);
2031 }
2032
2033 static void
serial_46(tvbuff_t * tvb,proto_tree * tree)2034 serial_46(tvbuff_t *tvb, proto_tree *tree)
2035 {
2036 proto_tree_add_item(tree, hf_ipmi_trn_serial46_tx_bufsize, tvb, 0, 2, ENC_LITTLE_ENDIAN);
2037 }
2038
2039 static void
serial_47(tvbuff_t * tvb,proto_tree * tree)2040 serial_47(tvbuff_t *tvb, proto_tree *tree)
2041 {
2042 proto_tree_add_item(tree, hf_ipmi_trn_serial47_rx_bufsize, tvb, 0, 2, ENC_LITTLE_ENDIAN);
2043 }
2044
2045 static void
serial_48(tvbuff_t * tvb,proto_tree * tree)2046 serial_48(tvbuff_t *tvb, proto_tree *tree)
2047 {
2048 proto_tree_add_item(tree, hf_ipmi_trn_serial48_ipaddr, tvb, 0, 4, ENC_BIG_ENDIAN);
2049 }
2050
2051 static void
serial_49(tvbuff_t * tvb,proto_tree * tree)2052 serial_49(tvbuff_t *tvb, proto_tree *tree)
2053 {
2054 int slen;
2055
2056 proto_tree_add_item(tree, hf_ipmi_trn_serial49_blockno, tvb, 0, 1, ENC_LITTLE_ENDIAN);
2057 slen = tvb_captured_length(tvb) - 1;
2058 if (slen > 16) {
2059 slen = 16;
2060 }
2061 proto_tree_add_item(tree, hf_ipmi_trn_serial49_dialstr, tvb, 1, slen, ENC_ASCII|ENC_NA);
2062 }
2063
2064 static void
serial_50(tvbuff_t * tvb,proto_tree * tree)2065 serial_50(tvbuff_t *tvb, proto_tree *tree)
2066 {
2067 static int * const byte1[] = { &hf_ipmi_trn_serial50_115200, &hf_ipmi_trn_serial50_57600,
2068 &hf_ipmi_trn_serial50_38400, &hf_ipmi_trn_serial50_19200, &hf_ipmi_trn_serial50_9600, NULL };
2069
2070 proto_tree_add_bitmask_text(tree, tvb, 0, 1, "Bit rate support: ", "None",
2071 ett_ipmi_trn_serial50_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
2072 }
2073
2074 static void
serial_51(tvbuff_t * tvb,proto_tree * tree)2075 serial_51(tvbuff_t *tvb, proto_tree *tree)
2076 {
2077 static int * const byte2[] = { &hf_ipmi_trn_serial51_ipmi_channel, &hf_ipmi_trn_serial51_conn_num, NULL };
2078 static int * const byte3[] = { &hf_ipmi_trn_serial51_ipmi_sharing,
2079 &hf_ipmi_trn_serial51_ipmi_sol, &hf_ipmi_trn_serial51_chan_num, NULL };
2080
2081 proto_tree_add_item(tree, hf_ipmi_trn_serial51_port_assoc_sel, tvb, 0, 1, ENC_LITTLE_ENDIAN);
2082 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
2083 ett_ipmi_trn_serial51_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
2084 proto_tree_add_bitmask_text(tree, tvb, 2, 1, NULL, NULL,
2085 ett_ipmi_trn_serial51_byte3, byte3, ENC_LITTLE_ENDIAN, 0);
2086 }
2087
2088 static void
serial_52(tvbuff_t * tvb,proto_tree * tree)2089 serial_52(tvbuff_t *tvb, proto_tree *tree)
2090 {
2091 proto_tree_add_item(tree, hf_ipmi_trn_serial52_port_assoc_sel, tvb, 0, 1, ENC_LITTLE_ENDIAN);
2092 proto_tree_add_item(tree, hf_ipmi_trn_serial52_conn_name, tvb, 1, 16, ENC_NA);
2093 }
2094
2095 static void
serial_53(tvbuff_t * tvb,proto_tree * tree)2096 serial_53(tvbuff_t *tvb, proto_tree *tree)
2097 {
2098 proto_tree_add_item(tree, hf_ipmi_trn_serial53_port_assoc_sel, tvb, 0, 1, ENC_LITTLE_ENDIAN);
2099 proto_tree_add_item(tree, hf_ipmi_trn_serial53_chan_name, tvb, 1, 16, ENC_NA);
2100 }
2101
2102 static struct {
2103 void (*intrp)(tvbuff_t *tvb, proto_tree *tree);
2104 const char *name;
2105 } serial_options[] = {
2106 { lan_serial_00, "Set In Progress" },
2107 { lan_serial_01, "Authentication Type Support" },
2108 { lan_serial_02, "Authentication Type Enables" },
2109 { serial_03, "Connection Mode" },
2110 { serial_04, "Session Inactivity Timeout" },
2111 { serial_05, "Channel Callback Control" },
2112 { serial_06, "Session Termination" },
2113 { serial_07, "IPMI Messaging Comm Settings" },
2114 { serial_08, "Mux Switch Control" },
2115 { serial_09, "Modem Ring Time" },
2116 { serial_10, "Modem Init String" },
2117 { serial_11, "Modem Escape Sequence" },
2118 { serial_12, "Modem Hang-up Sequence" },
2119 { serial_13, "Modem Dial Command" },
2120 { serial_14, "Page Blackout Interval" },
2121 { serial_15, "Community String" },
2122 { serial_16, "Number of Alert Destinations" },
2123 { serial_17, "Destination Info" },
2124 { serial_18, "Call Retry Interval" },
2125 { serial_19, "Destination Comm Settings" },
2126 { serial_20, "Number of Dial Strings" },
2127 { serial_21, "Destination Dial Strings" },
2128 { serial_22, "Number of Alert Destination IP Addresses" },
2129 { serial_23, "Destination IP Addresses" },
2130 { serial_24, "Number of TAP Accounts" },
2131 { serial_25, "TAP Account" },
2132 { serial_26, "TAP Passwords" },
2133 { serial_27, "TAP Pager ID Strings" },
2134 { serial_28, "TAP Service Settings" },
2135 { serial_29, "Terminal Mode Configuration" },
2136 { serial_30, "PPP Protocol Options" },
2137 { serial_31, "PPP Primary RMCP Port" },
2138 { serial_32, "PPP Secondary RMCP Port" },
2139 { serial_33, "PPP Link Authentication" },
2140 { serial_34, "CHAP Name" },
2141 { serial_35, "PPP ACCM" },
2142 { serial_36, "PPP Snoop ACCM" },
2143 { serial_37, "Number of PPP Accounts" },
2144 { serial_38, "PPP Account Dial String Selector" },
2145 { serial_39, "PPP Account IP Addresses" },
2146 { serial_40, "PPP Account User Names" },
2147 { serial_41, "PPP Account User Domains" },
2148 { serial_42, "PPP Account User Passwords" },
2149 { serial_43, "PPP Account Authentication Settings" },
2150 { serial_44, "PPP Account Connection Hold Times" },
2151 { serial_45, "PPP UDP Proxy IP Header" },
2152 { serial_46, "PPP UDP Proxy Transmit Buffer Size" },
2153 { serial_47, "PPP UDP Proxy Receive Buffer Size" },
2154 { serial_48, "PPP Remote Console IP Address" },
2155 { serial_49, "System Phone Number" },
2156 { serial_50, "Bitrate Support" },
2157 { serial_51, "System Serial Port Association" },
2158 { serial_52, "System Connector Names" },
2159 { serial_53, "System Serial Channel Names" }
2160 };
2161
2162 /* Set Serial/Modem Configuration Parameters
2163 */
2164 static void
rq10(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)2165 rq10(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2166 {
2167 static int * const byte1[] = { &hf_ipmi_trn_10_chan, NULL };
2168 tvbuff_t *next;
2169 const char *desc;
2170 guint8 pno;
2171
2172 pno = tvb_get_guint8(tvb, 1);
2173 if (pno < array_length(serial_options)) {
2174 desc = serial_options[pno].name;
2175 } else if (pno >= 0xC0) {
2176 desc = "OEM";
2177 } else {
2178 desc = "Reserved";
2179 }
2180
2181 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL, ett_ipmi_trn_10_byte1,
2182 byte1, ENC_LITTLE_ENDIAN, 0);
2183 proto_tree_add_uint_format_value(tree, hf_ipmi_trn_10_param, tvb, 1, 1,
2184 pno, "%s (0x%02x)", desc, pno);
2185 if (pno < array_length(serial_options)) {
2186 next = tvb_new_subset_remaining(tvb, 2);
2187 serial_options[pno].intrp(next, tree);
2188 } else {
2189 proto_tree_add_item(tree, hf_ipmi_trn_10_param_data, tvb, 2, -1, ENC_NA);
2190 }
2191 }
2192
2193 static const value_string cc10[] = {
2194 { 0x80, "Parameter not supported" },
2195 { 0x81, "Attempt to set the 'set in progress' value (in parameter #0) when not in the 'set complete' state" },
2196 { 0x82, "Attempt to write read-only parameter" },
2197 { 0x83, "Attempt to read write-only parameter" },
2198 { 0, NULL }
2199 };
2200
2201 /* Get LAN Configuration Parameters
2202 */
2203 static void
rq11(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)2204 rq11(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2205 {
2206 static int * const byte1[] = { &hf_ipmi_trn_11_getrev, &hf_ipmi_trn_11_chan, NULL };
2207 const char *desc;
2208 guint8 pno;
2209
2210 pno = tvb_get_guint8(tvb, 1);
2211
2212 ipmi_set_data(pinfo, 0, pno);
2213 ipmi_set_data(pinfo, 1, tvb_get_guint8(tvb, 0));
2214
2215 if (!tree) {
2216 return;
2217 }
2218
2219 if (pno < array_length(serial_options)) {
2220 desc = serial_options[pno].name;
2221 } else if (pno >= 0xC0) {
2222 desc = "OEM";
2223 } else {
2224 desc = "Reserved";
2225 }
2226
2227 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
2228 ett_ipmi_trn_11_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
2229 proto_tree_add_uint_format_value(tree, hf_ipmi_trn_11_param, tvb, 1, 1,
2230 pno, "%s (0x%02x)", desc, pno);
2231 proto_tree_add_item(tree, hf_ipmi_trn_11_set, tvb, 2, 1, ENC_LITTLE_ENDIAN);
2232 proto_tree_add_item(tree, hf_ipmi_trn_11_block, tvb, 2, 1, ENC_LITTLE_ENDIAN);
2233 }
2234
2235 static void
rs11(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)2236 rs11(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2237 {
2238 static int * const byte1[] = { &hf_ipmi_trn_11_rev_present, &hf_ipmi_trn_11_rev_compat, NULL };
2239 proto_item *ti;
2240 proto_tree *subtree;
2241 tvbuff_t *next;
2242 const char *desc;
2243 guint32 pno, req;
2244
2245 ti = proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
2246 ett_ipmi_trn_11_rev, byte1, ENC_LITTLE_ENDIAN, 0);
2247
2248 if (!ipmi_get_data(pinfo, 0, &pno) || !ipmi_get_data(pinfo, 1, &req)) {
2249 /* No request found - cannot parse further */
2250 if (tvb_captured_length(tvb) > 1) {
2251 proto_tree_add_item(tree, hf_ipmi_trn_11_param_data, tvb, 1, -1, ENC_NA);
2252 };
2253 return;
2254 }
2255
2256 if (pno < array_length(serial_options)) {
2257 desc = serial_options[pno].name;
2258 } else if (pno >= 0xC0) {
2259 desc = "OEM";
2260 } else {
2261 desc = "Reserved";
2262 }
2263
2264 if ((req & 0x80) && tvb_captured_length(tvb) > 1) {
2265 expert_add_info(pinfo, ti, &ei_ipmi_trn_11_request_param_rev);
2266 } else if (!(req & 0x80) && tvb_captured_length(tvb) == 1) {
2267 expert_add_info(pinfo, ti, &ei_ipmi_trn_11_request_param_data);
2268 }
2269
2270 subtree = proto_tree_add_subtree_format(tree, tvb, 0, 0, ett_ipmi_trn_parameter, NULL, "Parameter: %s", desc);
2271
2272 if (tvb_captured_length(tvb) > 1) {
2273 if (pno < array_length(serial_options)) {
2274 next = tvb_new_subset_remaining(tvb, 1);
2275 serial_options[pno].intrp(next, subtree);
2276 } else {
2277 proto_tree_add_item(subtree, hf_ipmi_trn_11_param_data, tvb, 1, -1, ENC_NA);
2278 }
2279 }
2280 }
2281
2282 static const value_string cc11[] = {
2283 { 0x80, "Parameter not supported" },
2284 { 0, NULL }
2285 };
2286
2287 /* Set Serial/Modem Mux
2288 */
2289 static void
rq12(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)2290 rq12(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2291 {
2292 static int * const byte1[] = { &hf_ipmi_trn_12_chan, NULL };
2293 static int * const byte2[] = { &hf_ipmi_trn_12_mux_setting, NULL };
2294
2295 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
2296 ett_ipmi_trn_12_rq_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
2297 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
2298 ett_ipmi_trn_12_rq_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
2299 }
2300
2301 static void
rs12(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)2302 rs12(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2303 {
2304 static int * const byte1[] = { &hf_ipmi_trn_12_sw_to_sys, &hf_ipmi_trn_12_sw_to_bmc,
2305 &hf_ipmi_trn_12_alert, &hf_ipmi_trn_12_msg, &hf_ipmi_trn_12_req, &hf_ipmi_trn_12_mux_state, NULL };
2306
2307 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
2308 ett_ipmi_trn_12_rs_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
2309 }
2310
2311 /* Get TAP Response Codes
2312 */
2313 static void
rq13(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)2314 rq13(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2315 {
2316 static int * const byte1[] = { &hf_ipmi_trn_13_chan, NULL };
2317
2318 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
2319 ett_ipmi_trn_13_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
2320 }
2321
2322 static void
rs13(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)2323 rs13(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2324 {
2325 proto_tree_add_item(tree, hf_ipmi_trn_13_code1, tvb, 0, 3, ENC_ASCII|ENC_NA);
2326 proto_tree_add_item(tree, hf_ipmi_trn_13_code2, tvb, 3, 3, ENC_ASCII|ENC_NA);
2327 proto_tree_add_item(tree, hf_ipmi_trn_13_code3, tvb, 6, 3, ENC_ASCII|ENC_NA);
2328 proto_tree_add_item(tree, hf_ipmi_trn_13_code4, tvb, 9, 3, ENC_ASCII|ENC_NA);
2329 proto_tree_add_item(tree, hf_ipmi_trn_13_code5, tvb, 12, 3, ENC_ASCII|ENC_NA);
2330 }
2331
2332 /* Set PPP UDP Proxy Transmit Data
2333 */
2334 static void
rq14(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)2335 rq14(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2336 {
2337 static int * const byte1[] = { &hf_ipmi_trn_14_chan, NULL };
2338
2339 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
2340 ett_ipmi_trn_14_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
2341 proto_tree_add_item(tree, hf_ipmi_trn_14_block, tvb, 1, 1, ENC_LITTLE_ENDIAN);
2342 proto_tree_add_item(tree, hf_ipmi_trn_14_data, tvb, 2, 16, ENC_NA);
2343 }
2344
2345 /* Get PPP UDP Proxy Transmit Data
2346 */
2347 static void
rq15(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)2348 rq15(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2349 {
2350 static int * const byte1[] = { &hf_ipmi_trn_15_chan, NULL };
2351
2352 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
2353 ett_ipmi_trn_15_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
2354 proto_tree_add_item(tree, hf_ipmi_trn_15_block, tvb, 1, 1, ENC_LITTLE_ENDIAN);
2355 }
2356
2357 static void
rs15(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)2358 rs15(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2359 {
2360 proto_tree_add_item(tree, hf_ipmi_trn_15_data, tvb, 0, 16, ENC_NA);
2361 }
2362
2363 /* Send PPP UDP Proxy Packet
2364 */
2365 static void
rq16(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)2366 rq16(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2367 {
2368 static int * const byte1[] = { &hf_ipmi_trn_16_chan, NULL };
2369
2370 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
2371 ett_ipmi_trn_16_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
2372 proto_tree_add_item(tree, hf_ipmi_trn_16_src_port, tvb, 1, 2, ENC_LITTLE_ENDIAN);
2373 proto_tree_add_item(tree, hf_ipmi_trn_16_dst_port, tvb, 3, 2, ENC_LITTLE_ENDIAN);
2374 proto_tree_add_item(tree, hf_ipmi_trn_16_src_addr, tvb, 5, 4, ENC_BIG_ENDIAN);
2375 proto_tree_add_item(tree, hf_ipmi_trn_16_dst_addr, tvb, 9, 4, ENC_BIG_ENDIAN);
2376 proto_tree_add_item(tree, hf_ipmi_trn_16_bytes, tvb, 13, 2, ENC_LITTLE_ENDIAN);
2377 }
2378
2379 static const value_string cc16[] = {
2380 { 0x80, "PPP link is not up" },
2381 { 0x81, "IP protocol is not up" },
2382 { 0, NULL }
2383 };
2384
2385 /* Get PPP UDP Proxy Receive Data
2386 */
2387 static void
tr17_fmt_blockno(gchar * s,guint32 v)2388 tr17_fmt_blockno(gchar *s, guint32 v)
2389 {
2390 g_snprintf(s, ITEM_LABEL_LENGTH, "%d%s",
2391 v, v ? "" : " (get received data length)");
2392 }
2393
2394 static void
rq17(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)2395 rq17(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2396 {
2397 static int * const byte1[] = { &hf_ipmi_trn_17_chan, NULL };
2398 static int * const byte2[] = { &hf_ipmi_trn_17_clear, &hf_ipmi_trn_17_block_num, NULL };
2399
2400 ipmi_set_data(pinfo, 0, tvb_get_guint8(tvb, 1) & 0x7f);
2401 if (!tree) {
2402 /* Save block number */
2403 return;
2404 }
2405
2406 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
2407 ett_ipmi_trn_17_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
2408 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
2409 ett_ipmi_trn_17_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
2410 }
2411
2412 static void
rs17(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)2413 rs17(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2414 {
2415 guint32 bno;
2416
2417 if (ipmi_get_data(pinfo, 0, &bno) && bno == 0) {
2418 /* Request for length */
2419 proto_tree_add_item(tree, hf_ipmi_trn_17_size, tvb, 0, 2, ENC_LITTLE_ENDIAN);
2420 } else {
2421 proto_tree_add_item(tree, hf_ipmi_trn_17_data, tvb, 0,
2422 tvb_captured_length(tvb) < 16 ? tvb_captured_length(tvb) : 16, ENC_NA);
2423 }
2424 }
2425
2426 static const value_string cc17[] = {
2427 { 0x80, "No packet data available" },
2428 { 0, NULL }
2429 };
2430
2431 /* Serial/Modem Connection Active
2432 */
2433 static void
rq18(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)2434 rq18(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2435 {
2436 static int * const byte1[] = { &hf_ipmi_trn_18_state, NULL };
2437
2438 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
2439 ett_ipmi_trn_18_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
2440 proto_tree_add_item(tree, hf_ipmi_trn_18_ipmi_ver, tvb, 1, 1, ENC_LITTLE_ENDIAN);
2441 }
2442
2443 /* Callback
2444 */
2445 static void
rq19(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)2446 rq19(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2447 {
2448 static int * const byte1[] = { &hf_ipmi_trn_19_chan, NULL };
2449 static int * const byte2[] = { &hf_ipmi_trn_19_dest_sel, NULL };
2450
2451 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
2452 ett_ipmi_trn_19_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
2453 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
2454 ett_ipmi_trn_19_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
2455 }
2456
2457 static const value_string cc19[] = {
2458 { 0x81, "Callback rejected, alert in progress on this channel" },
2459 { 0x82, "Callback rejected, IPMI messaging active on this channel" },
2460 { 0, NULL }
2461 };
2462
2463 /* Common for Set/Get User Callback Options
2464 */
2465 static void
parse_callback_options(tvbuff_t * tvb,guint offs,proto_tree * tree)2466 parse_callback_options(tvbuff_t *tvb, guint offs, proto_tree *tree)
2467 {
2468 static int * const usercap[] = { &hf_ipmi_trn_XX_cap_cbcp, &hf_ipmi_trn_XX_cap_ipmi, NULL };
2469 static int * const cbcp[] = { &hf_ipmi_trn_XX_cbcp_from_list, &hf_ipmi_trn_XX_cbcp_user,
2470 &hf_ipmi_trn_XX_cbcp_prespec, &hf_ipmi_trn_XX_cbcp_nocb, NULL };
2471
2472 proto_tree_add_bitmask_text(tree, tvb, offs, 1,
2473 "User callback capabilities: ", "None",
2474 ett_ipmi_trn_XX_usercap, usercap, ENC_LITTLE_ENDIAN, BMT_NO_TFS);
2475 proto_tree_add_bitmask_text(tree, tvb, offs + 1, 1,
2476 "CBCP negotiation options: ", "None",
2477 ett_ipmi_trn_XX_cbcp, cbcp, ENC_LITTLE_ENDIAN, BMT_NO_TFS);
2478 proto_tree_add_item(tree, hf_ipmi_trn_XX_dst1, tvb, offs + 2, 1, ENC_LITTLE_ENDIAN);
2479 proto_tree_add_item(tree, hf_ipmi_trn_XX_dst2, tvb, offs + 3, 1, ENC_LITTLE_ENDIAN);
2480 proto_tree_add_item(tree, hf_ipmi_trn_XX_dst3, tvb, offs + 4, 1, ENC_LITTLE_ENDIAN);
2481 }
2482
2483 /* Set User Callback Options
2484 */
2485 static void
rq1a(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)2486 rq1a(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2487 {
2488 static int * const byte1[] = { &hf_ipmi_trn_1a_user, NULL };
2489 static int * const byte2[] = { &hf_ipmi_trn_1a_chan, NULL };
2490
2491 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
2492 ett_ipmi_trn_1a_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
2493 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
2494 ett_ipmi_trn_1a_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
2495 parse_callback_options(tvb, 2, tree);
2496 }
2497
2498 /* Get User Callback Options
2499 */
2500 static void
rq1b(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)2501 rq1b(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2502 {
2503 static int * const byte1[] = { &hf_ipmi_trn_1b_user, NULL };
2504 static int * const byte2[] = { &hf_ipmi_trn_1b_chan, NULL };
2505
2506 proto_tree_add_bitmask_text(tree, tvb, 0, 1, NULL, NULL,
2507 ett_ipmi_trn_1b_byte1, byte1, ENC_LITTLE_ENDIAN, 0);
2508 proto_tree_add_bitmask_text(tree, tvb, 1, 1, NULL, NULL,
2509 ett_ipmi_trn_1b_byte2, byte2, ENC_LITTLE_ENDIAN, 0);
2510 }
2511
2512 static void
rs1b(tvbuff_t * tvb,packet_info * pinfo _U_,proto_tree * tree)2513 rs1b(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2514 {
2515 parse_callback_options(tvb, 0, tree);
2516 }
2517
2518 static const value_string cc21[] = {
2519 { 0x80, "Parameter not supported" },
2520 { 0x81, "Attempt to set the 'set in progress' value (in parameter #0) when not in the 'set complete' state" },
2521 { 0x82, "Attempt to write read-only parameter" },
2522 { 0x83, "Attempt to read write-only parameter" },
2523 { 0, NULL }
2524 };
2525
2526 static const value_string cc22[] = {
2527 { 0x80, "Parameter not supported" },
2528 { 0, NULL }
2529 };
2530
2531 static const value_string cc33[] = {
2532 { 0x80, "Target controller unavailable" },
2533 { 0, NULL }
2534 };
2535
2536 static ipmi_cmd_t cmd_transport[] = {
2537 /* LAN Device Commands */
2538 { 0x01, rq01, NULL, cc01, NULL, "Set LAN Configuration Parameters", 0 },
2539 { 0x02, rq02, rs02, cc02, NULL, "Get LAN Configuration Parameters", CMD_CALLRQ },
2540 { 0x03, rq03, rs03, NULL, NULL, "Suspend BMC ARPs", 0 },
2541 { 0x04, rq04, rs04, NULL, NULL, "Get IP/UDP/RMCP Statistics", 0 },
2542
2543 /* Serial/Modem Device Commands */
2544 { 0x10, rq10, NULL, cc10, NULL, "Set Serial/Modem Configuration", 0 },
2545 { 0x11, rq11, rs11, cc11, NULL, "Get Serial/Modem Configuration", CMD_CALLRQ },
2546 { 0x12, rq12, rs12, NULL, NULL, "Set Serial/Modem Mux", 0 },
2547 { 0x13, rq13, rs13, NULL, NULL, "Get TAP Response Codes", 0 },
2548 { 0x14, rq14, NULL, NULL, NULL, "Set PPP UDP Proxy Transmit Data", 0 },
2549 { 0x15, rq15, rs15, NULL, NULL, "Get PPP UDP Proxy Transmit Data", 0 },
2550 { 0x16, rq16, NULL, cc16, NULL, "Send PPP UDP Proxy Packet", 0 },
2551 { 0x17, rq17, rs17, cc17, NULL, "Get PPP UDP Proxy Receive Data", CMD_CALLRQ },
2552 { 0x18, rq18, NULL, NULL, NULL, "Serial/Modem Connection Active", 0 },
2553 { 0x19, rq19, NULL, cc19, NULL, "Callback", 0 },
2554 { 0x1a, rq1a, NULL, NULL, NULL, "Set User Callback Options", 0 },
2555 { 0x1b, rq1b, rs1b, NULL, NULL, "Get User Callback Options", 0 },
2556 { 0x1c, IPMI_TBD, NULL, NULL, "Set Serial Routing Mux", 0 },
2557
2558 /* Serial-Over-LAN Commands */
2559 { 0x20, IPMI_TBD, NULL, NULL, "SOL Activating", 0 },
2560 { 0x21, IPMI_TBD, cc21, NULL, "Set SOL Configuration Parameters", 0 },
2561 { 0x22, IPMI_TBD, cc22, NULL, "Get SOL Configuration Parameters", CMD_CALLRQ },
2562
2563 /* Command Forwarding Commands */
2564 { 0x30, IPMI_TBD, NULL, NULL, "Forwarded Command", 0 },
2565 { 0x31, IPMI_TBD, NULL, NULL, "Set Forwarded Commands", 0 },
2566 { 0x32, IPMI_TBD, NULL, NULL, "Get Forwarded Commands", 0 },
2567 { 0x33, IPMI_TBD, cc33, NULL, "Enable Forwarded Commands", 0 },
2568 };
2569
2570 void
proto_register_ipmi_transport(void)2571 proto_register_ipmi_transport(void)
2572 {
2573 static hf_register_info hf[] = {
2574 { &hf_ipmi_trn_lan00_sip,
2575 { "Set In Progress",
2576 "ipmi.lan00.sip", FT_UINT8, BASE_HEX, VALS(lan00_sip_vals), 0x03, NULL, HFILL }},
2577
2578 { &hf_ipmi_trn_lanXX_oem,
2579 { "OEM Proprietary",
2580 "ipmi.lanXX.oem", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2581 { &hf_ipmi_trn_lanXX_passwd,
2582 { "Straight password/key",
2583 "ipmi.lanXX.passwd", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2584 { &hf_ipmi_trn_lanXX_md5,
2585 { "MD5",
2586 "ipmi.lanXX.md5", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2587 { &hf_ipmi_trn_lanXX_md2,
2588 { "MD2",
2589 "ipmi.lanXX.md2", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2590 { &hf_ipmi_trn_lanXX_none,
2591 { "None",
2592 "ipmi.lanXX.none", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2593
2594 { &hf_ipmi_trn_lan03_ip,
2595 { "IP Address",
2596 "ipmi.lan03.ip", FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }},
2597
2598 { &hf_ipmi_trn_lan04_ipsrc,
2599 { "IP Address Source",
2600 "ipmi.lan04.ipsrc", FT_UINT8, BASE_HEX, VALS(lan04_ipsrc_vals), 0x0f, NULL, HFILL }},
2601
2602 { &hf_ipmi_trn_lan05_ether,
2603 { "MAC Address",
2604 "ipmi.lan05.mac", FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
2605
2606 { &hf_ipmi_trn_lan06_subnet,
2607 { "Subnet Mask",
2608 "ipmi.lan06.subnet", FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }},
2609
2610 { &hf_ipmi_trn_lan07_ttl,
2611 { "Time-to-live",
2612 "ipmi.lan07.ttl", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2613 { &hf_ipmi_trn_lan07_flags,
2614 { "Flags",
2615 "ipmi.lan07.flags", FT_UINT8, BASE_HEX, NULL, 0xe0, NULL, HFILL }},
2616 { &hf_ipmi_trn_lan07_precedence,
2617 { "Precedence",
2618 "ipmi.lan07.precedence", FT_UINT8, BASE_DEC, NULL, 0xe0, NULL, HFILL }},
2619 { &hf_ipmi_trn_lan07_tos,
2620 { "Type of service",
2621 "ipmi.lan07.tos", FT_UINT8, BASE_HEX, NULL, 0x1e, NULL, HFILL }},
2622
2623 { &hf_ipmi_trn_lan08_rmcp_port,
2624 { "Primary RMCP Port Number",
2625 "ipmi.lan08.rmcp_port", FT_UINT16, BASE_CUSTOM, CF_FUNC(ipmi_fmt_udpport), 0, NULL, HFILL }},
2626
2627 { &hf_ipmi_trn_lan09_rmcp_port,
2628 { "Secondary RMCP Port Number",
2629 "ipmi.lan09.rmcp_port", FT_UINT16, BASE_CUSTOM, CF_FUNC(ipmi_fmt_udpport), 0, NULL, HFILL }},
2630
2631 { &hf_ipmi_trn_lan10_responses,
2632 { "ARP responses",
2633 "ipmi.lan10.responses", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02, NULL, HFILL }},
2634 { &hf_ipmi_trn_lan10_gratuitous,
2635 { "Gratuitous ARPs",
2636 "ipmi.lan10.gratuitous", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL }},
2637
2638 { &hf_ipmi_trn_lan11_arp_interval,
2639 { "Gratuitous ARP interval",
2640 "ipmi.lan10.arp_interval", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_500ms_0based), 0, NULL, HFILL }},
2641
2642 { &hf_ipmi_trn_lan12_def_gw_ip,
2643 { "Default Gateway Address",
2644 "ipmi.lan12.def_gw_ip", FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }},
2645
2646 { &hf_ipmi_trn_lan13_def_gw_mac,
2647 { "Default Gateway MAC Address",
2648 "ipmi.lan13.def_gw_mac", FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
2649
2650 { &hf_ipmi_trn_lan14_bkp_gw_ip,
2651 { "Backup Gateway Address",
2652 "ipmi.lan14.bkp_gw_ip", FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }},
2653
2654 { &hf_ipmi_trn_lan15_bkp_gw_mac,
2655 { "Backup Gateway MAC Address",
2656 "ipmi.lan15.bkp_gw_mac", FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
2657
2658 { &hf_ipmi_trn_lan16_comm_string,
2659 { "Community String",
2660 "ipmi.lan16.comm_string", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
2661
2662 { &hf_ipmi_trn_lan17_num_dst,
2663 { "Number of Destinations",
2664 "ipmi.lan17.num_dst", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
2665
2666 { &hf_ipmi_trn_lan18_dst_selector,
2667 { "Destination Selector",
2668 "ipmi.lan18.dst_selector", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
2669 { &hf_ipmi_trn_lan18_ack,
2670 { "Alert Acknowledged",
2671 "ipmi.lan18.ack", FT_BOOLEAN, 8, TFS(&lan18_ack_tfs), 0x80, NULL, HFILL }},
2672 { &hf_ipmi_trn_lan18_dst_type,
2673 { "Destination Type",
2674 "ipmi.lan18.dst_type", FT_UINT8, BASE_HEX, VALS(lan18_dst_type_vals), 0x07, NULL, HFILL }},
2675 { &hf_ipmi_trn_lan18_tout,
2676 { "Timeout/Retry Interval",
2677 "ipmi.lan18.tout", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_1s_0based), 0, NULL, HFILL }},
2678 { &hf_ipmi_trn_lan18_retries,
2679 { "Retries",
2680 "ipmi.lan18.retries", FT_UINT8, BASE_DEC, NULL, 0x07, NULL, HFILL }},
2681
2682 { &hf_ipmi_trn_lan19_dst_selector,
2683 { "Destination Selector",
2684 "ipmi.lan19.dst_selector", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
2685 { &hf_ipmi_trn_lan19_addr_format,
2686 { "Address Format",
2687 "ipmi.lan19.addr_format", FT_UINT8, BASE_HEX, VALS(lan19_af_vals), 0xf0, NULL, HFILL }},
2688 { &hf_ipmi_trn_lan19_address,
2689 { "Address (format unknown)",
2690 "ipmi.lan19.address", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
2691 { &hf_ipmi_trn_lan19_gw_sel,
2692 { "Gateway selector",
2693 "ipmi.lan19.gw_sel", FT_BOOLEAN, 8, TFS(&lan19_gw_sel_tfs), 0x01, NULL, HFILL }},
2694 { &hf_ipmi_trn_lan19_ip,
2695 { "Alerting IP Address",
2696 "ipmi.lan19.ip", FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }},
2697 { &hf_ipmi_trn_lan19_mac,
2698 { "Alerting MAC Address",
2699 "ipmi.lan19.mac", FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
2700
2701 { &hf_ipmi_trn_lan20_vlan_id_enable,
2702 { "VLAN ID Enable",
2703 "ipmi.lan20.vlan_id_enable", FT_BOOLEAN, 16, TFS(&lan20_enable_tfs), 0x8000, NULL, HFILL }},
2704 { &hf_ipmi_trn_lan20_vlan_id,
2705 { "VLAN ID",
2706 "ipmi.lan20.vlan_id", FT_UINT16, BASE_HEX, NULL, 0x0fff, NULL, HFILL }},
2707
2708 { &hf_ipmi_trn_lan21_vlan_prio,
2709 { "VLAN Priority",
2710 "ipmi.lan21.vlan_prio", FT_UINT8, BASE_DEC, NULL, 0x07, NULL, HFILL }},
2711
2712 { &hf_ipmi_trn_lan22_num_cs_entries,
2713 { "Number of Cipher Suite Entries",
2714 "ipmi.lan22.num_cs_entries", FT_UINT8, BASE_DEC, NULL, 0x1f, NULL, HFILL }},
2715
2716 { &hf_ipmi_trn_lan23_cs_entry,
2717 { "Cipher Suite ID",
2718 "ipmi.lan23.cs_entry", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2719
2720 { &hf_ipmi_trn_lan24_priv1,
2721 { "Maximum Privilege Level for Cipher Suite",
2722 "ipmi.lan24.priv", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL }},
2723
2724 { &hf_ipmi_trn_lan24_priv2,
2725 { "Maximum Privilege Level for Cipher Suite",
2726 "ipmi.lan24.priv", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL }},
2727
2728 { &hf_ipmi_trn_lan25_dst_selector,
2729 { "Destination Selector",
2730 "ipmi.lan25.dst_selector", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
2731 { &hf_ipmi_trn_lan25_addr_format,
2732 { "Address Format",
2733 "ipmi.lan25.addr_format", FT_UINT8, BASE_HEX, VALS(lan25_af_vals), 0xf0, NULL, HFILL }},
2734 { &hf_ipmi_trn_lan25_address,
2735 { "Address (format unknown)",
2736 "ipmi.lan25.address", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
2737 { &hf_ipmi_trn_lan25_uprio,
2738 { "User priority",
2739 "ipmi.lan25.uprio", FT_UINT16, BASE_DEC, NULL, 0xe000, NULL, HFILL }},
2740 { &hf_ipmi_trn_lan25_cfi,
2741 { "CFI",
2742 "ipmi.lan25.cfi", FT_BOOLEAN, 16, NULL, 0x1000, NULL, HFILL }},
2743 { &hf_ipmi_trn_lan25_vlan_id,
2744 { "VLAN ID",
2745 "ipmi.lan25.vlan_id", FT_UINT16, BASE_HEX, NULL, 0x0fff, NULL, HFILL }},
2746
2747 { &hf_ipmi_trn_lan26_gen_event,
2748 { "Generate a Session Audit sensor \"Invalid password disable\" event message",
2749 "ipmi.lan26.gen_event", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2750 { &hf_ipmi_trn_lan26_thresh_number,
2751 { "Bad Password Threshold number",
2752 "ipmi.lan26.thresh_number", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2753 { &hf_ipmi_trn_lan26_reset_interval,
2754 { "Attempt Count Reset Interval",
2755 "ipmi.lan26.reset_interval", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
2756 { &hf_ipmi_trn_lan26_lock_interval,
2757 { "User Lockout Interval",
2758 "ipmi.lan26.lock_interval", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
2759
2760 { &hf_ipmi_trn_lan50_ipv6_only,
2761 { "Support IPv6 addressing only",
2762 "ipmi.lan50.ipv6_only", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2763 { &hf_ipmi_trn_lan50_both_ipv4_ipv6,
2764 { "Support both IPv4 and IPv6 simultaneously",
2765 "ipmi.lan50.both", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2766 { &hf_ipmi_trn_lan50_ipv6_alerting,
2767 { "Support IPv6 destinations for LAN Alerting",
2768 "ipmi.lan50.ipv6_alerting", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2769
2770 { &hf_ipmi_trn_lan51_enables,
2771 { "Enables",
2772 "ipmi.lan51.enables", FT_UINT8, BASE_HEX, VALS(lan51_enables), 0, NULL, HFILL }},
2773
2774 { &hf_ipmi_trn_lan52_traffic_class,
2775 { "Traffic Class",
2776 "ipmi.lan52.class", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
2777
2778 { &hf_ipmi_trn_lanXX_hop_limit,
2779 { "Hop Limit",
2780 "ipmi.lanXX.hop_limit", FT_UINT8, BASE_DEC_HEX, NULL, 0, NULL, HFILL }},
2781
2782 { &hf_ipmi_trn_lan54_flow_label,
2783 { "Flow Label",
2784 "ipmi.lan.flow_label", FT_UINT24, BASE_HEX, NULL, 0xFFFFF, NULL, HFILL }},
2785
2786 { &hf_ipmi_trn_lan55_static_addr_max,
2787 { "Static Address Max",
2788 "ipmi.lan55.static_max", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2789 { &hf_ipmi_trn_lan55_dynamic_addr_max,
2790 { "Dynamic Address Max",
2791 "ipmi.lan55.dynamic_max", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2792 { &hf_ipmi_trn_lan55_dhcpv6_support,
2793 { "DHCPv6 is supported",
2794 "ipmi.lan55.dhcpv6", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2795 { &hf_ipmi_trn_lan55_slaac_support,
2796 { "SLAAC is supported",
2797 "ipmi.lan55.slaac", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2798
2799 { &hf_ipmi_trn_lanXX_addr_selector,
2800 { "Address Selector",
2801 "ipmi.lanXX.addr_sel", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2802 { &hf_ipmi_trn_lanXX_addr_type,
2803 { "Address source/type",
2804 "ipmi.lanXX.addr_type", FT_UINT8, BASE_DEC, VALS(lanXX_addr_type), 0xF, NULL, HFILL }},
2805 { &hf_ipmi_trn_lanXX_addr_enable,
2806 { "Address is enabled",
2807 "ipmi.lanXX.addr_enable", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2808 { &hf_ipmi_trn_lanXX_addr,
2809 { "IPv6 Address",
2810 "ipmi.lanXX.addr", FT_IPv6, BASE_NONE, NULL, 0, NULL, HFILL }},
2811 { &hf_ipmi_trn_lanXX_prefix_len,
2812 { "Prefix Length",
2813 "ipmi.lanXX.prefix_len", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2814 { &hf_ipmi_trn_lanXX_addr_status,
2815 { "Address status",
2816 "ipmi.lanXX.addr_status", FT_UINT8, BASE_DEC, VALS(lanXX_addr_status), 0, NULL, HFILL }},
2817
2818 { &hf_ipmi_trn_lanXX_max_duid_blocks,
2819 { "Maximum number of 16-byte blocks",
2820 "ipmi.lanXX.max_duid_blocks", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2821
2822 { &hf_ipmi_trn_lanXX_duid_selector,
2823 { "DUID selector",
2824 "ipmi.lanXX.duid_sel", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2825 { &hf_ipmi_trn_lanXX_block_selector,
2826 { "Block selector",
2827 "ipmi.lanXX.block_sel", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2828 { &hf_ipmi_trn_lanXX_duid,
2829 { "DUID data",
2830 "ipmi.lanXX.duid", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
2831
2832 { &hf_ipmi_trn_lanXX_timing_support,
2833 { "Timing Configuration Support",
2834 "ipmi.lanXX.timing_support", FT_UINT8, BASE_DEC, VALS(lanXX_timing_support), 0, NULL, HFILL }},
2835
2836 { &hf_ipmi_trn_lanXX_iface_selector,
2837 { "IPv6 Interface selector",
2838 "ipmi.lanXX.iface_sel", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2839 { &hf_ipmi_trn_lan63_sol_max_delay,
2840 { "SOL_MAX_DELAY",
2841 "ipmi.lan63.sol_max_delay", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2842 { &hf_ipmi_trn_lan63_sol_timeout,
2843 { "SOL_TIMEOUT",
2844 "ipmi.lan63.sol_timeout", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2845 { &hf_ipmi_trn_lan63_sol_max_rt,
2846 { "SOL_MAX_RT",
2847 "ipmi.lan63.sol_max_rt", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2848 { &hf_ipmi_trn_lan63_req_timeout,
2849 { "REQ_TIMEOUT",
2850 "ipmi.lan63.req_timeout", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2851 { &hf_ipmi_trn_lan63_req_max_rt,
2852 { "REQ_MAX_RT",
2853 "ipmi.lan63.req_max_rt", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2854 { &hf_ipmi_trn_lan63_req_max_rc,
2855 { "REQ_MAX_RC",
2856 "ipmi.lan63.req_max_rc", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2857 { &hf_ipmi_trn_lan63_cnf_max_delay,
2858 { "CNF_MAX_DELAY",
2859 "ipmi.lan63.cnf_max_delay", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2860 { &hf_ipmi_trn_lan63_cnf_timeout,
2861 { "CNF_TIMEOUT",
2862 "ipmi.lan63.cnf_timeout", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2863 { &hf_ipmi_trn_lan63_cnf_max_rt,
2864 { "CNF_MAX_RT",
2865 "ipmi.lan63.cnf_max_rt", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2866 { &hf_ipmi_trn_lan63_cnf_max_rd,
2867 { "CNF_MAX_RD",
2868 "ipmi.lan63.cnf_max_rd", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2869 { &hf_ipmi_trn_lan63_ren_timeout,
2870 { "REN_TIMEOUT",
2871 "ipmi.lan63.ren_timeout", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2872 { &hf_ipmi_trn_lan63_ren_max_rt,
2873 { "REN_MAX_RT",
2874 "ipmi.lan63.ren_max_rt", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2875 { &hf_ipmi_trn_lan63_reb_timeout,
2876 { "REB_TIMEOUT",
2877 "ipmi.lan63.reb_timeout", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2878 { &hf_ipmi_trn_lan63_reb_max_rt,
2879 { "REB_MAX_RT",
2880 "ipmi.lan63.reb_max_rt", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2881 { &hf_ipmi_trn_lan63_inf_max_delay,
2882 { "INF_MAX_DELAY",
2883 "ipmi.lan63.inf_max_delay", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2884 { &hf_ipmi_trn_lan63_inf_timeout,
2885 { "INF_TIMEOUT",
2886 "ipmi.lan63.inf_timeout", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2887 { &hf_ipmi_trn_lan63_inf_max_rt,
2888 { "INF_MAX_RT",
2889 "ipmi.lan63.inf_max_rt", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2890 { &hf_ipmi_trn_lan63_rel_timeout,
2891 { "REL_TIMEOUT",
2892 "ipmi.lan63.rel_timeout", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2893 { &hf_ipmi_trn_lan63_rel_max_rc,
2894 { "REL_MAX_RC",
2895 "ipmi.lan63.rel_max_rc", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2896 { &hf_ipmi_trn_lan63_dec_timeout,
2897 { "DEC_TIMEOUT",
2898 "ipmi.lan63.dec_timeout", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2899 { &hf_ipmi_trn_lan63_dec_max_rc,
2900 { "DEC_MAX_RC",
2901 "ipmi.lan63.dec_max_rc", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2902 { &hf_ipmi_trn_lan63_hop_count_limit,
2903 { "HOP_COUNT_LIMIT",
2904 "ipmi.lan63.hop_count_limit", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2905
2906 { &hf_ipmi_trn_lan64_static_cfg,
2907 { "Enable static router address",
2908 "ipmi.lan64.static_cfg", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2909 { &hf_ipmi_trn_lan64_dynamic_cfg,
2910 { "Enable dynamic router address configuration",
2911 "ipmi.lan64.dynamic_cfg", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2912
2913 { &hf_ipmi_trn_lanXX_router_selector,
2914 { "Router selector",
2915 "ipmi.lanXX.router_sel", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2916 { &hf_ipmi_trn_lanXX_router_mac,
2917 { "MAC Address",
2918 "ipmi.lanXX.mac", FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
2919 { &hf_ipmi_trn_lanXX_router_prefix,
2920 { "Prefix Value",
2921 "ipmi.lanXX.prefix", FT_IPv6, BASE_NONE, NULL, 0, NULL, HFILL }},
2922
2923 { &hf_ipmi_trn_lan73_num_dynamic_sets,
2924 { "Number of Dynamic Router Info sets",
2925 "ipmi.lanXX.num_dynamic_sets", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2926
2927 { &hf_ipmi_trn_lan80_max_rtr_solicitation_delay,
2928 { "MAX_RTR_SOLICITATION_DELAY",
2929 "ipmi.lan80.max_rtr_sol_delay", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2930 { &hf_ipmi_trn_lan80_rtr_solicitation_interval,
2931 { "RTR_SOLICITATION_INTERVAL",
2932 "ipmi.lan80.rtr_sol_interval", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2933 { &hf_ipmi_trn_lan80_max_rtr_solicitations,
2934 { "MAX_RTR_SOLICITATIONS",
2935 "ipmi.lan80.max_rtr_sols", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2936 { &hf_ipmi_trn_lan80_dup_addr_detect_transmits,
2937 { "DupAddrDetectTransmits",
2938 "ipmi.lan80.dup_addr_transmits", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2939 { &hf_ipmi_trn_lan80_max_multicast_solicit,
2940 { "MAX_MULTICAST_SOLICIT",
2941 "ipmi.lan80.max_mcast_sol", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2942 { &hf_ipmi_trn_lan80_max_unicast_solicit,
2943 { "MAX_UNICAST_SOLICIT",
2944 "ipmi.lan80.max_ucast_sol", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2945 { &hf_ipmi_trn_lan80_max_anycast_delay_time,
2946 { "MAX_ANYCAST_DELAY_TIME",
2947 "ipmi.lan80.max_anycast_delay", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2948 { &hf_ipmi_trn_lan80_max_neighbor_advertisement,
2949 { "MAX_NEIGHBOR_ADVERTISEMENT",
2950 "ipmi.lan80.max_neigh_adv", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2951 { &hf_ipmi_trn_lan80_reachable_time,
2952 { "REACHABLE_TIME",
2953 "ipmi.lan80.reach_time", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2954 { &hf_ipmi_trn_lan80_retrans_timer,
2955 { "RETRANS_TIMER",
2956 "ipmi.lan80.retrans_timer", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2957 { &hf_ipmi_trn_lan80_delay_first_probe_time,
2958 { "DELAY_FIRST_PROBE_TIME",
2959 "ipmi.lan80.delay_first_probe", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2960 { &hf_ipmi_trn_lan80_max_random_factor,
2961 { "MAX_RANDOM_FACTOR",
2962 "ipmi.lan80.max_rand", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2963 { &hf_ipmi_trn_lan80_min_random_factor,
2964 { "MIN_RANDOM_FACTOR",
2965 "ipmi.lan80.min_rand", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
2966
2967 { &hf_ipmi_trn_serial03_connmode,
2968 { "Connection Mode",
2969 "ipmi.serial03.connmode", FT_BOOLEAN, 8, TFS(&serial03_connmode_tfs), 0x80, NULL, HFILL }},
2970 { &hf_ipmi_trn_serial03_terminal,
2971 { "Terminal Mode",
2972 "ipmi.serial03.terminal", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04, NULL, HFILL }},
2973 { &hf_ipmi_trn_serial03_ppp,
2974 { "PPP Mode",
2975 "ipmi.serial03.ppp", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02, NULL, HFILL }},
2976 { &hf_ipmi_trn_serial03_basic,
2977 { "Basic Mode",
2978 "ipmi.serial03.basic", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL }},
2979 { &hf_ipmi_trn_serial04_timeout,
2980 { "Session Inactivity Timeout",
2981 "ipmi.serial04.timeout", FT_UINT8, BASE_CUSTOM, CF_FUNC(serial04_timeout_fmt), 0x0f, NULL, HFILL }},
2982 { &hf_ipmi_trn_serial05_cbcp_callback,
2983 { "CBCP Callback",
2984 "ipmi.serial05.cbcp", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02, NULL, HFILL }},
2985 { &hf_ipmi_trn_serial05_ipmi_callback,
2986 { "IPMI Callback",
2987 "ipmi.serial05.ipmi", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL }},
2988 { &hf_ipmi_trn_serial05_cb_list,
2989 { "Callback to list of possible numbers",
2990 "ipmi.serial05.cb_list", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08, NULL, HFILL }},
2991 { &hf_ipmi_trn_serial05_cb_user,
2992 { "Callback to user-specifiable number",
2993 "ipmi.serial05.cb_user", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04, NULL, HFILL }},
2994 { &hf_ipmi_trn_serial05_cb_prespec,
2995 { "Callback to pre-specified number",
2996 "ipmi.serial05.cb_prespec", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02, NULL, HFILL }},
2997 { &hf_ipmi_trn_serial05_no_cb,
2998 { "No callback",
2999 "ipmi.serial05.no_cb", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL }},
3000 { &hf_ipmi_trn_serial05_cb_dest1,
3001 { "Callback destination 1",
3002 "ipmi.serial05.cb_dest1", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3003 { &hf_ipmi_trn_serial05_cb_dest2,
3004 { "Callback destination 2",
3005 "ipmi.serial05.cb_dest2", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3006 { &hf_ipmi_trn_serial05_cb_dest3,
3007 { "Callback destination 3",
3008 "ipmi.serial05.cb_dest3", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3009 { &hf_ipmi_trn_serial06_inactivity,
3010 { "Session Inactivity Timeout",
3011 "ipmi.serial06.inactivity", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02, NULL, HFILL }},
3012 { &hf_ipmi_trn_serial06_dcd,
3013 { "Close on DCD Loss",
3014 "ipmi.serial06.dcd", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL }},
3015 { &hf_ipmi_trn_serial07_flowctl,
3016 { "Flow Control",
3017 "ipmi.serial07.flowctl", FT_UINT8, BASE_HEX, VALS(serialXX_flowctl_vals), 0xc0, NULL, HFILL }},
3018 { &hf_ipmi_trn_serial07_dtrhangup,
3019 { "DTR Hang-up",
3020 "ipmi.serial07.dtrhangup", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20, NULL, HFILL }},
3021 { &hf_ipmi_trn_serial07_bitrate,
3022 { "Bit rate",
3023 "ipmi.serial07.bitrate", FT_UINT8, BASE_HEX, VALS(serialXX_bitrate_vals), 0x0f, NULL, HFILL }},
3024 { &hf_ipmi_trn_serial08_esc_powerup,
3025 { "Power-up/wakeup via ESC-^",
3026 "ipmi.serial08.esc_powerup", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x40, NULL, HFILL }},
3027 { &hf_ipmi_trn_serial08_esc_reset,
3028 { "Hard reset via ESC-R-ESC-r-ESC-R",
3029 "ipmi.serial08.esc_reset", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20, NULL, HFILL }},
3030 { &hf_ipmi_trn_serial08_switch_authcap,
3031 { "Baseboard-to-BMC switch on Get Channel Auth Capabilities",
3032 "ipmi.serial08.switch_authcap", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10, NULL, HFILL }},
3033 { &hf_ipmi_trn_serial08_switch_rmcp,
3034 { "Switch to BMC on IPMI-RMCP pattern",
3035 "ipmi.serial08.switch_rmcp", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08, NULL, HFILL }},
3036 { &hf_ipmi_trn_serial08_esc_switch1,
3037 { "BMC-to-Baseboard switch via ESC-Q",
3038 "ipmi.serial08.esc_switch1", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04, NULL, HFILL }},
3039 { &hf_ipmi_trn_serial08_esc_switch2,
3040 { "Baseboard-to-BMC switch via ESC-(",
3041 "ipmi.serial08.esc_switch2", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02, NULL, HFILL }},
3042 { &hf_ipmi_trn_serial08_switch_dcdloss,
3043 { "Switch to BMC on DCD loss",
3044 "ipmi.serial08.switch_dcdloss", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL }},
3045 { &hf_ipmi_trn_serial08_sharing,
3046 { "Serial Port Sharing",
3047 "ipmi.serial08.sharing", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08, NULL, HFILL }},
3048 { &hf_ipmi_trn_serial08_ping_callback,
3049 { "Serial/Modem Connection Active during callback",
3050 "ipmi.serial08.ping_callback", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04, NULL, HFILL }},
3051 { &hf_ipmi_trn_serial08_ping_direct,
3052 { "Serial/Modem Connection Active during direct call",
3053 "ipmi.serial08.ping_direct", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02, NULL, HFILL }},
3054 { &hf_ipmi_trn_serial08_ping_retry,
3055 { "Retry Serial/Modem Connection Active",
3056 "ipmi.serial08.ping_retry", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL }},
3057 { &hf_ipmi_trn_serial09_ring_duration,
3058 { "Ring Duration",
3059 "ipmi.serial09.ring_duration", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_500ms_1based), 0x3f, NULL, HFILL }},
3060 { &hf_ipmi_trn_serial09_ring_dead,
3061 { "Ring Dead Time",
3062 "ipmi.serial09.ring_dead", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_500ms_0based), 0x0f, NULL, HFILL }},
3063 { &hf_ipmi_trn_serial10_set_sel,
3064 { "Set selector (16-byte block #)",
3065 "ipmi.serial10.set_sel", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3066 { &hf_ipmi_trn_serial10_init_str,
3067 { "Modem Init String",
3068 "ipmi.serial10.init_str", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3069 { &hf_ipmi_trn_serial11_esc_seq,
3070 { "Modem Escape Sequence",
3071 "ipmi.serial11.esc_seq", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3072 { &hf_ipmi_trn_serial12_hangup_seq,
3073 { "Modem Hang-up Sequence",
3074 "ipmi.serial12.hangup_seq", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3075 { &hf_ipmi_trn_serial13_dial_cmd,
3076 { "Modem Dial Command",
3077 "ipmi.serial13.dial_cmd", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3078 { &hf_ipmi_trn_serial14_page_blackout,
3079 { "Page Blackout Interval (minutes)",
3080 "ipmi.serial14.page_blackout", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3081 { &hf_ipmi_trn_serial15_comm_string,
3082 { "Community String",
3083 "ipmi.serial15.comm_string", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3084 { &hf_ipmi_trn_serial16_ndest,
3085 { "Number of non-volatile Alert Destinations",
3086 "ipmi.serial16.ndest", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3087 { &hf_ipmi_trn_serial17_dest_sel,
3088 { "Destination Selector",
3089 "ipmi.serial17.dest_sel", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3090 { &hf_ipmi_trn_serial17_ack,
3091 { "Alert Acknowledge",
3092 "ipmi.serial17.ack", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
3093 { &hf_ipmi_trn_serial17_dest_type,
3094 { "Destination Type",
3095 "ipmi.serial17.dest_type", FT_UINT8, BASE_HEX, VALS(serial17_dest_type_vals), 0x0f, NULL, HFILL }},
3096 #if 0
3097 { &hf_ipmi_trn_serial17_ack_timeout,
3098 { "Alert Acknowledge Timeout",
3099 "ipmi.serial17.ack_timeout", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3100 #endif
3101 { &hf_ipmi_trn_serial17_alert_retries,
3102 { "Alert retries",
3103 "ipmi.serial17.alert_retries", FT_UINT8, BASE_DEC, NULL, 0x70, NULL, HFILL }},
3104 { &hf_ipmi_trn_serial17_call_retries,
3105 { "Call retries",
3106 "ipmi.serial17.call_retries", FT_UINT8, BASE_DEC, NULL, 0x07, NULL, HFILL }},
3107 { &hf_ipmi_trn_serial17_alert_ack_timeout,
3108 { "Alert Acknowledge Timeout",
3109 "ipmi.serial17.alert_ack_timeout", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_1s_0based), 0, NULL, HFILL }},
3110 { &hf_ipmi_trn_serial17_dialstr_sel,
3111 { "Dial String Selector",
3112 "ipmi.serial17.dialstr_sel", FT_UINT8, BASE_DEC, NULL, 0xf0, NULL, HFILL }},
3113 { &hf_ipmi_trn_serial17_tap_sel,
3114 { "TAP Account Selector",
3115 "ipmi.serial17.tap_sel", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3116 { &hf_ipmi_trn_serial17_ipaddr_sel,
3117 { "Destination IP Address Selector",
3118 "ipmi.serial17.ipaddr_sel", FT_UINT8, BASE_DEC, NULL, 0xf0, NULL, HFILL }},
3119 { &hf_ipmi_trn_serial17_ppp_sel,
3120 { "PPP Account Set Selector",
3121 "ipmi.serial17.ppp_sel", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3122 { &hf_ipmi_trn_serial17_unknown,
3123 { "Destination-specific (format unknown)",
3124 "ipmi.serial17.unknown", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3125 { &hf_ipmi_trn_serial18_call_retry,
3126 { "Call Retry Interval",
3127 "ipmi.serial18.call_retry", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3128 { &hf_ipmi_trn_serial19_destsel,
3129 { "Destination selector",
3130 "ipmi.serial19.destsel", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3131 { &hf_ipmi_trn_serial19_flowctl,
3132 { "Flow Control",
3133 "ipmi.serial19.flowctl", FT_UINT8, BASE_HEX, VALS(serialXX_flowctl_vals), 0xc0, NULL, HFILL }},
3134 { &hf_ipmi_trn_serial19_dtrhangup,
3135 { "DTR Hang-up",
3136 "ipmi.serial19.dtrhangup", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20, NULL, HFILL }},
3137 { &hf_ipmi_trn_serial19_stopbits,
3138 { "Stop bits",
3139 "ipmi.serial19.stopbits", FT_BOOLEAN, 8, TFS(&serial19_stopbits_tfs), 0x10, NULL, HFILL }},
3140 { &hf_ipmi_trn_serial19_charsize,
3141 { "Character size",
3142 "ipmi.serial19.charsize", FT_BOOLEAN, 8, TFS(&serial19_charsize_tfs), 0x08, NULL, HFILL }},
3143 { &hf_ipmi_trn_serial19_parity,
3144 { "Parity",
3145 "ipmi.serial19.parity", FT_UINT8, BASE_HEX, VALS(serial19_parity_vals), 0x07, NULL, HFILL }},
3146 { &hf_ipmi_trn_serial19_bitrate,
3147 { "Bit rate",
3148 "ipmi.serial19.bitrate", FT_UINT8, BASE_HEX, VALS(serialXX_bitrate_vals), 0x0f, NULL, HFILL }},
3149 { &hf_ipmi_trn_serial20_num_dial_strings,
3150 { "Number of Dial Strings",
3151 "ipmi.serial20.num_dial_strings", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3152 { &hf_ipmi_trn_serial21_dialsel,
3153 { "Dial String Selector",
3154 "ipmi.serial21.dialsel", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3155 { &hf_ipmi_trn_serial21_blockno,
3156 { "Block number",
3157 "ipmi.serial21.blockno", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3158 { &hf_ipmi_trn_serial21_dialstr,
3159 { "Dial string",
3160 "ipmi.serial21.dialstr", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3161 { &hf_ipmi_trn_serial22_num_ipaddrs,
3162 { "Number of Alert Destination IP Addresses",
3163 "ipmi.serial22.num_ipaddrs", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3164 { &hf_ipmi_trn_serial23_destsel,
3165 { "Destination IP Address selector",
3166 "ipmi.serial23.destsel", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3167 { &hf_ipmi_trn_serial23_ipaddr,
3168 { "Destination IP Address",
3169 "ipmi.serial23.ipaddr", FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }},
3170 { &hf_ipmi_trn_serial24_num_tap_accounts,
3171 { "Number of TAP Accounts",
3172 "ipmi.serial24.num_tap_accounts", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3173 { &hf_ipmi_trn_serial25_tap_acct,
3174 { "TAP Account Selector",
3175 "ipmi.serial25.tap_acct", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3176 { &hf_ipmi_trn_serial25_dialstr_sel,
3177 { "Dial String Selector",
3178 "ipmi.serial25.dialstr_sel", FT_UINT8, BASE_DEC, NULL, 0xf0, NULL, HFILL }},
3179 { &hf_ipmi_trn_serial25_tapsrv_sel,
3180 { "TAP Service Settings Selector",
3181 "ipmi.serial25.tapsrv_sel", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3182 { &hf_ipmi_trn_serial26_tap_acct,
3183 { "TAP Account Selector",
3184 "ipmi.serial26.tap_acct", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3185 { &hf_ipmi_trn_serial26_tap_passwd,
3186 { "TAP Password",
3187 "ipmi.serial26.tap_passwd", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3188 { &hf_ipmi_trn_serial27_tap_acct,
3189 { "TAP Account Selector",
3190 "ipmi.serial27.tap_acct", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3191 { &hf_ipmi_trn_serial27_tap_pager_id,
3192 { "TAP Pager ID String",
3193 "ipmi.serial27.tap_pager_id", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3194 { &hf_ipmi_trn_serial28_tapsrv_sel,
3195 { "TAP Service Settings Selector",
3196 "ipmi.serial28.tapsrv_sel", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3197 { &hf_ipmi_trn_serial28_confirm,
3198 { "TAP Confirmation",
3199 "ipmi.serial28.confirm", FT_UINT8, BASE_HEX, VALS(serial28_confirm_vals), 0x03, NULL, HFILL }},
3200 { &hf_ipmi_trn_serial28_srvtype,
3201 { "TAP 'SST' Service Type",
3202 "ipmi.serial28.srvtype", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3203 { &hf_ipmi_trn_serial28_ctrl_esc,
3204 { "TAP Control-character escaping mask",
3205 "ipmi.serial28.ctrl_esc", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
3206 { &hf_ipmi_trn_serial28_t2,
3207 { "TAP T2",
3208 "ipmi.serial28.tap_t2", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_500ms_0based), 0xf0, NULL, HFILL }},
3209 { &hf_ipmi_trn_serial28_t1,
3210 { "TAP T1",
3211 "ipmi.serial28.tap_t1", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_1s_0based), 0x0f, NULL, HFILL }},
3212 { &hf_ipmi_trn_serial28_t4,
3213 { "TAP T4",
3214 "ipmi.serial28.tap_t4", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_1s_0based), 0xf0, NULL, HFILL }},
3215 { &hf_ipmi_trn_serial28_t3,
3216 { "TAP T3",
3217 "ipmi.serial28.tap_t3", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_2s_0based), 0x0f, NULL, HFILL }},
3218 { &hf_ipmi_trn_serial28_t6,
3219 { "IPMI T6",
3220 "ipmi.serial28.ipmi_t6", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_1s_0based), 0xf0, NULL, HFILL }},
3221 { &hf_ipmi_trn_serial28_t5,
3222 { "TAP T5",
3223 "ipmi.serial28.tap_t5", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_2s_0based), 0x0f, NULL, HFILL }},
3224 { &hf_ipmi_trn_serial28_n2,
3225 { "TAP N2",
3226 "ipmi.serial28.tap_n2", FT_UINT8, BASE_DEC, NULL, 0xf0, NULL, HFILL }},
3227 { &hf_ipmi_trn_serial28_n1,
3228 { "TAP N1",
3229 "ipmi.serial28.tap_n1", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3230 { &hf_ipmi_trn_serial28_n4,
3231 { "IPMI N4",
3232 "ipmi.serial28.ipmi_n4", FT_UINT8, BASE_DEC, NULL, 0xf0, NULL, HFILL }},
3233 { &hf_ipmi_trn_serial28_n3,
3234 { "TAP N3",
3235 "ipmi.serial28.tap_n3", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3236 { &hf_ipmi_trn_serial29_op,
3237 { "Parameter Operation",
3238 "ipmi.serial29.op", FT_UINT8, BASE_HEX, VALS(serial29_op_vals), 0xc0, NULL, HFILL }},
3239 { &hf_ipmi_trn_serial29_lineedit,
3240 { "Line Editing",
3241 "ipmi.serial29.lineedit", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20, NULL, HFILL }},
3242 { &hf_ipmi_trn_serial29_deletectl,
3243 { "Delete control",
3244 "ipmi.serial29.deletectl", FT_UINT8, BASE_HEX, VALS(serial29_delete_vals), 0x0c, NULL, HFILL }},
3245 { &hf_ipmi_trn_serial29_echo,
3246 { "Echo",
3247 "ipmi.serial29.echo", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02, NULL, HFILL }},
3248 { &hf_ipmi_trn_serial29_handshake,
3249 { "Handshake",
3250 "ipmi.serial29.handshake", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL }},
3251 { &hf_ipmi_trn_serial29_o_newline,
3252 { "Output newline sequence",
3253 "ipmi.serial29.o_newline", FT_UINT8, BASE_HEX, VALS(serial29_o_nl_vals), 0xf0, NULL, HFILL }},
3254 { &hf_ipmi_trn_serial29_i_newline,
3255 { "Input newline sequence",
3256 "ipmi.serial29.i_newline", FT_UINT8, BASE_HEX, VALS(serial29_i_nl_vals), 0x0f, NULL, HFILL }},
3257 { &hf_ipmi_trn_serial30_snooping,
3258 { "System Negotiation Snooping",
3259 "ipmi.serial30.snooping", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
3260 { &hf_ipmi_trn_serial30_snoopctl,
3261 { "Snoop ACCM Control",
3262 "ipmi.serial30.snoopctl", FT_UINT8, BASE_HEX, VALS(serial30_snoopctl_vals), 0x03, NULL, HFILL }},
3263 { &hf_ipmi_trn_serial30_negot_ctl,
3264 { "BMC negotiates link parameters",
3265 "ipmi.serial30.negot_ctl", FT_UINT8, BASE_HEX, VALS(serial30_negoctl_vals), 0x30, NULL, HFILL }},
3266 { &hf_ipmi_trn_serial30_use_xmit_accm,
3267 { "Filtering incoming chars",
3268 "ipmi.serial30.filter", FT_BOOLEAN, 8, TFS(&serial30_filter_tfs), 0x04, NULL, HFILL }},
3269 { &hf_ipmi_trn_serial30_xmit_addr_comp,
3270 { "Transmit with Address and Ctl Field Compression",
3271 "ipmi.serial30.xmit_addr_comp", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
3272 { &hf_ipmi_trn_serial30_xmit_proto_comp,
3273 { "Transmit with Protocol Field Compression",
3274 "ipmi.serial30.xmit_proto_comp", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
3275 { &hf_ipmi_trn_serial30_ipaddr,
3276 { "IP Address negotiation",
3277 "ipmi.serial30.ipaddr", FT_UINT8, BASE_HEX, VALS(serial30_ipaddr_val), 0x18, NULL, HFILL }},
3278 { &hf_ipmi_trn_serial30_accm,
3279 { "ACCM Negotiation",
3280 "ipmi.serial30.accm", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04, NULL, HFILL }},
3281 { &hf_ipmi_trn_serial30_addr_comp,
3282 { "Address and Ctl Field Compression",
3283 "ipmi.serial30.addr_comp", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02, NULL, HFILL }},
3284 { &hf_ipmi_trn_serial30_proto_comp,
3285 { "Protocol Field Compression",
3286 "ipmi.serial30.proto_comp", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL }},
3287 { &hf_ipmi_trn_serial31_port,
3288 { "Primary RMCP Port Number",
3289 "ipmi.serial31.port", FT_UINT16, BASE_CUSTOM, CF_FUNC(ipmi_fmt_udpport), 0, NULL, HFILL }},
3290 { &hf_ipmi_trn_serial32_port,
3291 { "Secondary RMCP Port Number",
3292 "ipmi.serial32.port", FT_UINT16, BASE_CUSTOM, CF_FUNC(ipmi_fmt_udpport), 0, NULL, HFILL }},
3293 { &hf_ipmi_trn_serial33_auth_proto,
3294 { "PPP Link Authentication Protocol",
3295 "ipmi.serial33.auth_proto", FT_UINT8, BASE_HEX, VALS(serialXX_proto_vals), 0x0f, NULL, HFILL }},
3296 { &hf_ipmi_trn_serial34_chap_name,
3297 { "CHAP Name",
3298 "ipmi.serial34.chap_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3299 { &hf_ipmi_trn_serial35_recv_accm,
3300 { "Receive ACCM",
3301 "ipmi.serial35.recv_accm", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
3302 { &hf_ipmi_trn_serial35_xmit_accm,
3303 { "Transmit ACCM",
3304 "ipmi.serial35.xmit_accm", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
3305 { &hf_ipmi_trn_serial36_snoop_accm,
3306 { "Snoop Receive ACCM",
3307 "ipmi.serial36.snoop_accm", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
3308 { &hf_ipmi_trn_serial37_num_ppp,
3309 { "Number of PPP Accounts",
3310 "ipmi.serial37.num_ppp", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3311 { &hf_ipmi_trn_serial38_acct_sel,
3312 { "PPP Account Selector",
3313 "ipmi.serial38.acct_sel", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3314 { &hf_ipmi_trn_serial38_dialstr_sel,
3315 { "Dial String Selector",
3316 "ipmi.serial38.dialstr_sel", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3317 { &hf_ipmi_trn_serial39_acct_sel,
3318 { "PPP Account Selector",
3319 "ipmi.serial39.acct_sel", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3320 { &hf_ipmi_trn_serial39_ipaddr,
3321 { "IP Address",
3322 "ipmi.serial39.ipaddr", FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }},
3323 { &hf_ipmi_trn_serial40_acct_sel,
3324 { "PPP Account Selector",
3325 "ipmi.serial40.acct_sel", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3326 { &hf_ipmi_trn_serial40_username,
3327 { "User Name",
3328 "ipmi.serial40.username", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3329 { &hf_ipmi_trn_serial41_acct_sel,
3330 { "PPP Account Selector",
3331 "ipmi.serial41.acct_sel", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3332 { &hf_ipmi_trn_serial41_userdomain,
3333 { "User Domain",
3334 "ipmi.serial41.userdomain", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3335 { &hf_ipmi_trn_serial42_acct_sel,
3336 { "PPP Account Selector",
3337 "ipmi.serial42.acct_sel", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3338 { &hf_ipmi_trn_serial42_userpass,
3339 { "User Password",
3340 "ipmi.serial42.userpass", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3341 { &hf_ipmi_trn_serial43_acct_sel,
3342 { "PPP Account Selector",
3343 "ipmi.serial43.acct_sel", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3344 { &hf_ipmi_trn_serial43_auth_proto,
3345 { "Link Auth Type",
3346 "ipmi.serial43.auth_proto", FT_UINT8, BASE_HEX, VALS(serialXX_proto_vals), 0x0f, NULL, HFILL }},
3347 { &hf_ipmi_trn_serial44_acct_sel,
3348 { "PPP Account Selector",
3349 "ipmi.serial44.acct_sel", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3350 { &hf_ipmi_trn_serial44_hold_time,
3351 { "Connection Hold Time",
3352 "ipmi.serial44.hold_time", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_1s_1based), 0, NULL, HFILL }},
3353 { &hf_ipmi_trn_serial45_src_ipaddr,
3354 { "Source IP Address",
3355 "ipmi.serial45.src_ipaddr", FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }},
3356 { &hf_ipmi_trn_serial45_dst_ipaddr,
3357 { "Destination IP Address",
3358 "ipmi.serial45.dst_ipaddr", FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }},
3359 { &hf_ipmi_trn_serial46_tx_bufsize,
3360 { "Transmit Buffer Size",
3361 "ipmi.serial46.tx_size", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
3362 { &hf_ipmi_trn_serial47_rx_bufsize,
3363 { "Receive Buffer Size",
3364 "ipmi.serial47.rx_size", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
3365 { &hf_ipmi_trn_serial48_ipaddr,
3366 { "Remote Console IP Address",
3367 "ipmi.serial48.ipaddr", FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }},
3368 { &hf_ipmi_trn_serial49_blockno,
3369 { "Block number",
3370 "ipmi.serial49.blockno", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3371 { &hf_ipmi_trn_serial49_dialstr,
3372 { "Dial string",
3373 "ipmi.serial49.dialstr", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3374 { &hf_ipmi_trn_serial50_115200,
3375 { "115200",
3376 "ipmi.serial50.115200", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
3377 { &hf_ipmi_trn_serial50_57600,
3378 { "57600",
3379 "ipmi.serial50.57600", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
3380 { &hf_ipmi_trn_serial50_38400,
3381 { "38400",
3382 "ipmi.serial50.38400", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
3383 { &hf_ipmi_trn_serial50_19200,
3384 { "19200",
3385 "ipmi.serial50.19200", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
3386 { &hf_ipmi_trn_serial50_9600,
3387 { "9600",
3388 "ipmi.serial50.9600", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
3389 { &hf_ipmi_trn_serial51_port_assoc_sel,
3390 { "Serial Port Association Entry",
3391 "ipmi.serial51.port_assoc_sel", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3392 { &hf_ipmi_trn_serial51_ipmi_channel,
3393 { "IPMI Channel",
3394 "ipmi.serial51.ipmi_channel", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0xf0, NULL, HFILL }},
3395 { &hf_ipmi_trn_serial51_conn_num,
3396 { "Connector number",
3397 "ipmi.serial51.conn_num", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3398 { &hf_ipmi_trn_serial51_ipmi_sharing,
3399 { "Used with IPMI Serial Port Sharing",
3400 "ipmi.serial51.ipmi_sharing", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
3401 { &hf_ipmi_trn_serial51_ipmi_sol,
3402 { "Used with IPMI Serial-over-LAN",
3403 "ipmi.serial51.ipmi_sol", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
3404 { &hf_ipmi_trn_serial51_chan_num,
3405 { "Serial controller channel number",
3406 "ipmi.serial51.chan_num", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3407 { &hf_ipmi_trn_serial52_port_assoc_sel,
3408 { "Serial Port Association Entry",
3409 "ipmi.serial52.port_assoc_sel", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3410 { &hf_ipmi_trn_serial52_conn_name,
3411 { "Connector Name",
3412 "ipmi.serial52_conn_name", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
3413 { &hf_ipmi_trn_serial53_port_assoc_sel,
3414 { "Serial Port Association Entry",
3415 "ipmi.serial53.port_assoc_sel", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3416 { &hf_ipmi_trn_serial53_chan_name,
3417 { "Channel Name",
3418 "ipmi.serial52_chan_name", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
3419
3420 { &hf_ipmi_trn_01_chan,
3421 { "Channel",
3422 "ipmi.tr01.chan", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
3423 { &hf_ipmi_trn_01_param,
3424 { "Parameter Selector",
3425 "ipmi.tr01.param", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3426 { &hf_ipmi_trn_01_param_data,
3427 { "Parameter data",
3428 "ipmi.tr01.param_data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
3429
3430 { &hf_ipmi_trn_02_getrev,
3431 { "Get parameter revision only",
3432 "ipmi.tr02.getrev", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
3433 { &hf_ipmi_trn_02_chan,
3434 { "Channel",
3435 "ipmi.tr02.chan", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
3436 { &hf_ipmi_trn_02_param,
3437 { "Parameter selector",
3438 "ipmi.tr02.param", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3439 { &hf_ipmi_trn_02_set,
3440 { "Set selector",
3441 "ipmi.tr02.set", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3442 { &hf_ipmi_trn_02_block,
3443 { "Block selector",
3444 "ipmi.tr02.block", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3445 { &hf_ipmi_trn_02_rev_present,
3446 { "Present parameter revision",
3447 "ipmi.tr02.rev.present", FT_UINT8, BASE_DEC, NULL, 0xf0, NULL, HFILL }},
3448 { &hf_ipmi_trn_02_rev_compat,
3449 { "Oldest forward-compatible",
3450 "ipmi.tr02.rev.compat", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3451 { &hf_ipmi_trn_02_param_data,
3452 { "Parameter data",
3453 "ipmi.tr02.param_data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
3454
3455 { &hf_ipmi_trn_03_chan,
3456 { "Channel",
3457 "ipmi.tr03.chan", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
3458 { &hf_ipmi_trn_03_arp_resp,
3459 { "BMC-generated ARP responses",
3460 "ipmi.tr03.arp_resp", FT_BOOLEAN, 8, TFS(&tfs_03_suspend), 0x02, NULL, HFILL }},
3461 { &hf_ipmi_trn_03_gratuitous_arp,
3462 { "Gratuitous ARPs",
3463 "ipmi.tr03.gratuitous_arp", FT_BOOLEAN, 8, TFS(&tfs_03_suspend), 0x01, NULL, HFILL }},
3464 { &hf_ipmi_trn_03_status_arp_resp,
3465 { "ARP Response status",
3466 "ipmi.tr03.status_arp_resp", FT_BOOLEAN, 8, TFS(&tfs_03_arp_status), 0x02, NULL, HFILL }},
3467 { &hf_ipmi_trn_03_status_gratuitous_arp,
3468 { "Gratuitous ARP status",
3469 "ipmi.tr03.status_gratuitous_arp", FT_BOOLEAN, 8, TFS(&tfs_03_arp_status), 0x01, NULL, HFILL }},
3470
3471 { &hf_ipmi_trn_04_chan,
3472 { "Channel",
3473 "ipmi.tr04.chan", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
3474 { &hf_ipmi_trn_04_clear,
3475 { "Statistics",
3476 "ipmi.tr04.clear", FT_BOOLEAN, 8, TFS(&tfs_04_clear), 0x01, NULL, HFILL }},
3477 { &hf_ipmi_trn_04_rx_ippkts,
3478 { "Received IP Packets",
3479 "ipmi.tr04.rx_ippkts", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
3480 { &hf_ipmi_trn_04_rx_iphdr_err,
3481 { "Received IP Header Errors",
3482 "ipmi.tr04.rx_iphdr_err", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
3483 { &hf_ipmi_trn_04_rx_ipaddr_err,
3484 { "Received IP Address Errors",
3485 "ipmi.tr04.rx_ipaddr_err", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
3486 { &hf_ipmi_trn_04_rx_ippkts_frag,
3487 { "Received Fragmented IP Packets",
3488 "ipmi.tr04.rx_ippkts_frag", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
3489 { &hf_ipmi_trn_04_tx_ippkts,
3490 { "Transmitted IP Packets",
3491 "ipmi.tr04.tx_ippkts", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
3492 { &hf_ipmi_trn_04_rx_udppkts,
3493 { "Received UDP Packets",
3494 "ipmi.tr04.rx_udppkts", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
3495 { &hf_ipmi_trn_04_rx_validrmcp,
3496 { "Received Valid RMCP Packets",
3497 "ipmi.tr04.rx_validrmcp", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
3498 { &hf_ipmi_trn_04_rx_udpproxy,
3499 { "Received UDP Proxy Packets",
3500 "ipmi.tr04.rx_udpproxy", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
3501 { &hf_ipmi_trn_04_dr_udpproxy,
3502 { "Dropped UDP Proxy Packets",
3503 "ipmi.tr04.dr_udpproxy", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
3504
3505 { &hf_ipmi_trn_10_chan,
3506 { "Channel",
3507 "ipmi.tr10.chan", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
3508 { &hf_ipmi_trn_10_param,
3509 { "Parameter Selector",
3510 "ipmi.tr10.param", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3511 { &hf_ipmi_trn_10_param_data,
3512 { "Parameter data",
3513 "ipmi.tr10.param_data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
3514
3515 { &hf_ipmi_trn_11_getrev,
3516 { "Get parameter revision only",
3517 "ipmi.tr11.getrev", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
3518 { &hf_ipmi_trn_11_chan,
3519 { "Channel",
3520 "ipmi.tr11.chan", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
3521 { &hf_ipmi_trn_11_param,
3522 { "Parameter selector",
3523 "ipmi.tr11.param", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3524 { &hf_ipmi_trn_11_set,
3525 { "Set selector",
3526 "ipmi.tr11.set", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3527 { &hf_ipmi_trn_11_block,
3528 { "Block selector",
3529 "ipmi.tr11.block", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
3530 { &hf_ipmi_trn_11_rev_present,
3531 { "Present parameter revision",
3532 "ipmi.tr11.rev.present", FT_UINT8, BASE_DEC, NULL, 0xf0, NULL, HFILL }},
3533 { &hf_ipmi_trn_11_rev_compat,
3534 { "Oldest forward-compatible",
3535 "ipmi.tr11.rev.compat", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3536 { &hf_ipmi_trn_11_param_data,
3537 { "Parameter data",
3538 "ipmi.tr11.param_data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
3539
3540 { &hf_ipmi_trn_12_chan,
3541 { "Channel",
3542 "ipmi.tr12.chan", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
3543 { &hf_ipmi_trn_12_mux_setting,
3544 { "Mux Setting",
3545 "ipmi.tr12.mux_setting", FT_UINT8, BASE_HEX, VALS(vals_12_mux), 0x0f, NULL, HFILL }},
3546 { &hf_ipmi_trn_12_sw_to_sys,
3547 { "Requests to switch to system",
3548 "ipmi.tr12.sw_to_sys", FT_BOOLEAN, 8, TFS(&tfs_12_blocked), 0x80, NULL, HFILL }},
3549 { &hf_ipmi_trn_12_sw_to_bmc,
3550 { "Requests to switch to BMC",
3551 "ipmi.tr12.sw_to_bmc", FT_BOOLEAN, 8, TFS(&tfs_12_blocked), 0x40, NULL, HFILL }},
3552 { &hf_ipmi_trn_12_alert,
3553 { "Alert in progress",
3554 "ipmi.tr12.alert", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
3555 { &hf_ipmi_trn_12_msg,
3556 { "IPMI/OEM messaging active",
3557 "ipmi.tr12.msg", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
3558 { &hf_ipmi_trn_12_req,
3559 { "Request",
3560 "ipmi.tr12.req", FT_BOOLEAN, 8, TFS(&tfs_12_req), 0x02, NULL, HFILL }},
3561 { &hf_ipmi_trn_12_mux_state,
3562 { "Mux set to",
3563 "ipmi.tr12.mux_state", FT_BOOLEAN, 8, TFS(&tfs_12_mux_state), 0x01, NULL, HFILL }},
3564
3565 { &hf_ipmi_trn_13_chan,
3566 { "Channel",
3567 "ipmi.tr13.chan", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
3568 { &hf_ipmi_trn_13_code1,
3569 { "Last code",
3570 "ipmi.tr13.code1", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3571 { &hf_ipmi_trn_13_code2,
3572 { "2nd code",
3573 "ipmi.tr13.code2", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3574 { &hf_ipmi_trn_13_code3,
3575 { "3rd code",
3576 "ipmi.tr13.code3", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3577 { &hf_ipmi_trn_13_code4,
3578 { "4th code",
3579 "ipmi.tr13.code4", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3580 { &hf_ipmi_trn_13_code5,
3581 { "5th code",
3582 "ipmi.tr13.code5", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
3583
3584 { &hf_ipmi_trn_14_chan,
3585 { "Channel",
3586 "ipmi.tr14.chan", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
3587 { &hf_ipmi_trn_14_block,
3588 { "Block number",
3589 "ipmi.tr14.block", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3590 { &hf_ipmi_trn_14_data,
3591 { "Block data",
3592 "ipmi.tr14.data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
3593
3594 { &hf_ipmi_trn_15_chan,
3595 { "Channel",
3596 "ipmi.tr15.chan", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
3597 { &hf_ipmi_trn_15_block,
3598 { "Block number",
3599 "ipmi.tr15.block", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3600 { &hf_ipmi_trn_15_data,
3601 { "Block data",
3602 "ipmi.tr15.data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
3603
3604 { &hf_ipmi_trn_16_chan,
3605 { "Channel",
3606 "ipmi.tr16.chan", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
3607 { &hf_ipmi_trn_16_src_port,
3608 { "Source Port",
3609 "ipmi.tr16.src_port", FT_UINT16, BASE_CUSTOM, CF_FUNC(ipmi_fmt_udpport), 0, NULL, HFILL }},
3610 { &hf_ipmi_trn_16_dst_port,
3611 { "Destination Port",
3612 "ipmi.tr16.dst_port", FT_UINT16, BASE_CUSTOM, CF_FUNC(ipmi_fmt_udpport), 0, NULL, HFILL }},
3613 { &hf_ipmi_trn_16_src_addr,
3614 { "Source IP Address",
3615 "ipmi.tr16.src_addr", FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }},
3616 { &hf_ipmi_trn_16_dst_addr,
3617 { "Destination IP Address",
3618 "ipmi.tr16.dst_addr", FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }},
3619 { &hf_ipmi_trn_16_bytes,
3620 { "Bytes to send",
3621 "ipmi.tr16.bytes", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
3622
3623 { &hf_ipmi_trn_17_chan,
3624 { "Channel",
3625 "ipmi.tr17.chan", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
3626 { &hf_ipmi_trn_17_clear,
3627 { "Clear buffer",
3628 "ipmi.tr17.clear", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
3629 { &hf_ipmi_trn_17_block_num,
3630 { "Block number",
3631 "ipmi.tr17.block_num", FT_UINT8, BASE_CUSTOM, CF_FUNC(tr17_fmt_blockno), 0x7f, NULL, HFILL }},
3632 { &hf_ipmi_trn_17_size,
3633 { "Number of received bytes",
3634 "ipmi.tr17.size", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
3635 { &hf_ipmi_trn_17_data,
3636 { "Block Data",
3637 "ipmi.tr17.data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
3638
3639 { &hf_ipmi_trn_18_state,
3640 { "Session state",
3641 "ipmi.tr18.state", FT_UINT8, BASE_HEX, VALS(vals_18_state), 0x0f, NULL, HFILL }},
3642 { &hf_ipmi_trn_18_ipmi_ver,
3643 { "IPMI Version",
3644 "ipmi.tr18.ipmi_ver", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_version), 0, NULL, HFILL }},
3645
3646 { &hf_ipmi_trn_19_chan,
3647 { "Channel",
3648 "ipmi.tr19.chan", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
3649 { &hf_ipmi_trn_19_dest_sel,
3650 { "Destination selector",
3651 "ipmi.tr19.dest_sel", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
3652
3653 { &hf_ipmi_trn_XX_cap_cbcp,
3654 { "CBCP callback",
3655 "ipmi.trXX.cap_cbcp", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02, NULL, HFILL }},
3656 { &hf_ipmi_trn_XX_cap_ipmi,
3657 { "IPMI callback",
3658 "ipmi.trXX.cap_ipmi", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL }},
3659 { &hf_ipmi_trn_XX_cbcp_from_list,
3660 { "Callback to one from list of numbers",
3661 "ipmi.trXX.cbcp_from_list", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08, NULL, HFILL }},
3662 { &hf_ipmi_trn_XX_cbcp_user,
3663 { "Callback to user-specified number",
3664 "ipmi.trXX.cbcp_user", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04, NULL, HFILL }},
3665 { &hf_ipmi_trn_XX_cbcp_prespec,
3666 { "Callback to pre-specified number",
3667 "ipmi.trXX.cbcp_prespec", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02, NULL, HFILL }},
3668 { &hf_ipmi_trn_XX_cbcp_nocb,
3669 { "No callback",
3670 "ipmi.trXX.cbcp_nocb", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL }},
3671 { &hf_ipmi_trn_XX_dst1,
3672 { "Callback destination 1",
3673 "ipmi.trXX.dst1", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3674 { &hf_ipmi_trn_XX_dst2,
3675 { "Callback destination 2",
3676 "ipmi.trXX.dst2", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3677 { &hf_ipmi_trn_XX_dst3,
3678 { "Callback destination 3",
3679 "ipmi.trXX.dst3", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
3680
3681 { &hf_ipmi_trn_1a_user,
3682 { "User ID",
3683 "ipmi.tr1a.user", FT_UINT8, BASE_DEC, NULL, 0x3f, NULL, HFILL }},
3684 { &hf_ipmi_trn_1a_chan,
3685 { "Channel",
3686 "ipmi.tr1a.chan", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
3687
3688 { &hf_ipmi_trn_1b_user,
3689 { "User ID",
3690 "ipmi.tr1b.user", FT_UINT8, BASE_DEC, NULL, 0x3f, NULL, HFILL }},
3691 { &hf_ipmi_trn_1b_chan,
3692 { "Channel",
3693 "ipmi.tr1b.chan", FT_UINT8, BASE_CUSTOM, CF_FUNC(ipmi_fmt_channel), 0x0f, NULL, HFILL }},
3694
3695 };
3696 static gint *ett[] = {
3697 &ett_ipmi_trn_lan00_byte1,
3698 &ett_ipmi_trn_lan01_byte1,
3699 &ett_ipmi_trn_lan02_byte1,
3700 &ett_ipmi_trn_lan02_byte2,
3701 &ett_ipmi_trn_lan02_byte3,
3702 &ett_ipmi_trn_lan02_byte4,
3703 &ett_ipmi_trn_lan02_byte5,
3704 &ett_ipmi_trn_lan04_byte1,
3705 &ett_ipmi_trn_lan07_byte2,
3706 &ett_ipmi_trn_lan07_byte3,
3707 &ett_ipmi_trn_lan10_byte1,
3708 &ett_ipmi_trn_lan17_byte1,
3709 &ett_ipmi_trn_lan18_byte1,
3710 &ett_ipmi_trn_lan18_byte2,
3711 &ett_ipmi_trn_lan18_byte4,
3712 &ett_ipmi_trn_lan19_byte1,
3713 &ett_ipmi_trn_lan19_byte2,
3714 &ett_ipmi_trn_lan19_byte3,
3715 &ett_ipmi_trn_lan20_byte12,
3716 &ett_ipmi_trn_lan21_byte1,
3717 &ett_ipmi_trn_lan22_byte1,
3718 &ett_ipmi_trn_lan24_byte1,
3719 &ett_ipmi_trn_lan24_byte2,
3720 &ett_ipmi_trn_lan24_byte3,
3721 &ett_ipmi_trn_lan24_byte4,
3722 &ett_ipmi_trn_lan24_byte5,
3723 &ett_ipmi_trn_lan24_byte6,
3724 &ett_ipmi_trn_lan24_byte7,
3725 &ett_ipmi_trn_lan24_byte8,
3726 &ett_ipmi_trn_lan25_byte1,
3727 &ett_ipmi_trn_lan25_byte2,
3728 &ett_ipmi_trn_lan25_byte34,
3729 &ett_ipmi_trn_lan50_byte1,
3730 &ett_ipmi_trn_lan55_byte3,
3731 &ett_ipmi_trn_lan56_byte2,
3732 &ett_ipmi_trn_lan64_byte1,
3733 &ett_ipmi_trn_serial03_byte1,
3734 &ett_ipmi_trn_serial04_byte1,
3735 &ett_ipmi_trn_serial05_byte1,
3736 &ett_ipmi_trn_serial05_byte2,
3737 &ett_ipmi_trn_serial06_byte1,
3738 &ett_ipmi_trn_serial07_byte1,
3739 &ett_ipmi_trn_serial07_byte2,
3740 &ett_ipmi_trn_serial08_byte1,
3741 &ett_ipmi_trn_serial08_byte2,
3742 &ett_ipmi_trn_serial09_byte1,
3743 &ett_ipmi_trn_serial09_byte2,
3744 &ett_ipmi_trn_serial16_byte1,
3745 &ett_ipmi_trn_serial17_byte1,
3746 &ett_ipmi_trn_serial17_byte2,
3747 &ett_ipmi_trn_serial17_byte4,
3748 &ett_ipmi_trn_serial17_byte5,
3749 &ett_ipmi_trn_serial19_byte1,
3750 &ett_ipmi_trn_serial19_byte2,
3751 &ett_ipmi_trn_serial19_byte3,
3752 &ett_ipmi_trn_serial20_byte1,
3753 &ett_ipmi_trn_serial21_byte1,
3754 &ett_ipmi_trn_serial22_byte1,
3755 &ett_ipmi_trn_serial23_byte1,
3756 &ett_ipmi_trn_serial24_byte1,
3757 &ett_ipmi_trn_serial25_byte2,
3758 &ett_ipmi_trn_serial28_byte1,
3759 &ett_ipmi_trn_serial28_byte2,
3760 &ett_ipmi_trn_serial28_byte10,
3761 &ett_ipmi_trn_serial28_byte11,
3762 &ett_ipmi_trn_serial28_byte12,
3763 &ett_ipmi_trn_serial28_byte13,
3764 &ett_ipmi_trn_serial28_byte14,
3765 &ett_ipmi_trn_serial29_byte1,
3766 &ett_ipmi_trn_serial29_byte2,
3767 &ett_ipmi_trn_serial30_byte1,
3768 &ett_ipmi_trn_serial30_byte2,
3769 &ett_ipmi_trn_serial30_byte3,
3770 &ett_ipmi_trn_serial33_byte1,
3771 &ett_ipmi_trn_serial37_byte1,
3772 &ett_ipmi_trn_serial43_byte1,
3773 &ett_ipmi_trn_serial50_byte1,
3774 &ett_ipmi_trn_serial51_byte2,
3775 &ett_ipmi_trn_serial51_byte3,
3776 &ett_ipmi_trn_01_byte1,
3777 &ett_ipmi_trn_02_byte1,
3778 &ett_ipmi_trn_02_rev,
3779 &ett_ipmi_trn_03_rq_byte1,
3780 &ett_ipmi_trn_03_rq_byte2,
3781 &ett_ipmi_trn_03_rs_byte1,
3782 &ett_ipmi_trn_04_byte1,
3783 &ett_ipmi_trn_04_byte2,
3784 &ett_ipmi_trn_10_byte1,
3785 &ett_ipmi_trn_11_byte1,
3786 &ett_ipmi_trn_11_rev,
3787 &ett_ipmi_trn_12_rq_byte1,
3788 &ett_ipmi_trn_12_rq_byte2,
3789 &ett_ipmi_trn_12_rs_byte1,
3790 &ett_ipmi_trn_13_byte1,
3791 &ett_ipmi_trn_14_byte1,
3792 &ett_ipmi_trn_15_byte1,
3793 &ett_ipmi_trn_16_byte1,
3794 &ett_ipmi_trn_17_byte1,
3795 &ett_ipmi_trn_17_byte2,
3796 &ett_ipmi_trn_18_byte1,
3797 &ett_ipmi_trn_19_byte1,
3798 &ett_ipmi_trn_19_byte2,
3799 &ett_ipmi_trn_XX_usercap,
3800 &ett_ipmi_trn_XX_cbcp,
3801 &ett_ipmi_trn_1a_byte1,
3802 &ett_ipmi_trn_1a_byte2,
3803 &ett_ipmi_trn_1b_byte1,
3804 &ett_ipmi_trn_1b_byte2,
3805 &ett_ipmi_trn_parameter
3806 };
3807
3808 static ei_register_info ei[] = {
3809 { &ei_ipmi_trn_02_request_param_rev, { "ipmi.tr02.request_param_rev", PI_PROTOCOL, PI_NOTE, "Requested parameter revision; parameter data returned", EXPFILL }},
3810 { &ei_ipmi_trn_02_request_param_data, { "ipmi.tr02.mrequest_param_data", PI_PROTOCOL, PI_NOTE, "Requested parameter data; only parameter version returned", EXPFILL }},
3811 { &ei_ipmi_trn_11_request_param_rev, { "ipmi.tr11.request_param_rev", PI_PROTOCOL, PI_NOTE, "Requested parameter revision; parameter data returned", EXPFILL }},
3812 { &ei_ipmi_trn_11_request_param_data, { "ipmi.tr11.mrequest_param_data", PI_PROTOCOL, PI_NOTE, "Requested parameter data; only parameter version returned", EXPFILL }},
3813 };
3814
3815 expert_module_t* expert_ipmi_trn;
3816
3817 proto_register_field_array(proto_ipmi, hf, array_length(hf));
3818 proto_register_subtree_array(ett, array_length(ett));
3819 expert_ipmi_trn = expert_register_protocol(proto_ipmi);
3820 expert_register_field_array(expert_ipmi_trn, ei, array_length(ei));
3821 ipmi_register_netfn_cmdtab(IPMI_TRANSPORT_REQ, IPMI_OEM_NONE, NULL, 0, NULL,
3822 cmd_transport, array_length(cmd_transport));
3823 }
3824
3825 /*
3826 * Editor modelines - https://www.wireshark.org/tools/modelines.html
3827 *
3828 * Local variables:
3829 * c-basic-offset: 8
3830 * tab-width: 8
3831 * indent-tabs-mode: t
3832 * End:
3833 *
3834 * vi: set shiftwidth=8 tabstop=8 noexpandtab:
3835 * :indentSize=8:tabSize=8:noTabs=false:
3836 */
3837