checkAPIs.pl: support for new-style dissectors in check_hf_entries
[metze/wireshark/wip.git] / epan / dissectors / packet-ipmi-transport.c
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 const int *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
819 lan_serial_00(tvbuff_t *tvb, proto_tree *tree)
820 {
821         static const int *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
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
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
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
862 lan_04(tvbuff_t *tvb, proto_tree *tree)
863 {
864         static const int *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
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
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
883 lan_07(tvbuff_t *tvb, proto_tree *tree)
884 {
885         static const int *byte2[] = { &hf_ipmi_trn_lan07_flags, NULL };
886         static const int *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
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
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
906 lan_10(tvbuff_t *tvb, proto_tree *tree)
907 {
908         static const int *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
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
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
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
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
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
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
950 lan_17(tvbuff_t *tvb, proto_tree *tree)
951 {
952         static const int *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
958 lan_18(tvbuff_t *tvb, proto_tree *tree)
959 {
960         static const int *byte1[] = { &hf_ipmi_trn_lan18_dst_selector, NULL };
961         static const int *byte2[] = { &hf_ipmi_trn_lan18_ack, &hf_ipmi_trn_lan18_dst_type, NULL };
962         static const int *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
971 lan_19(tvbuff_t *tvb, proto_tree *tree)
972 {
973         static const int *byte1[] = { &hf_ipmi_trn_lan19_dst_selector, NULL };
974         static const int *byte2[] = { &hf_ipmi_trn_lan19_addr_format, NULL };
975         static const int *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
996 lan_20(tvbuff_t *tvb, proto_tree *tree)
997 {
998         static const int *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
1004 lan_21(tvbuff_t *tvb, proto_tree *tree)
1005 {
1006         static const int *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
1012 lan_22(tvbuff_t *tvb, proto_tree *tree)
1013 {
1014         static const int *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
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
1033 lan_24(tvbuff_t *tvb, proto_tree *tree)
1034 {
1035         static const int *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
1058 lan_25(tvbuff_t *tvb, proto_tree *tree)
1059 {
1060         static const int *byte1[] = { &hf_ipmi_trn_lan25_dst_selector, NULL };
1061         static const int *byte2[] = { &hf_ipmi_trn_lan25_addr_format, NULL };
1062         static const int *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
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
1091 lan_50(tvbuff_t *tvb, proto_tree *tree)
1092 {
1093         static const int *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
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
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
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
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
1124 lan_55(tvbuff_t *tvb, proto_tree *tree)
1125 {
1126         static const int *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
1134 lan_56(tvbuff_t *tvb, proto_tree *tree)
1135 {
1136         static const int *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
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
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
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
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
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
1217 lan_64(tvbuff_t *tvb, proto_tree *tree)
1218 {
1219         static const int *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
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
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
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
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
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
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
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
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
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
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
1401 rq01(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1402 {
1403         static const int *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
1439 rq02(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1440 {
1441         static const int *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
1471 rs02(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1472 {
1473         static const int *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
1524 rq03(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1525 {
1526         static const int *byte1[] = { &hf_ipmi_trn_03_chan, NULL };
1527         static const int *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
1536 rs03(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1537 {
1538         static const int *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
1546 rq04(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
1547 {
1548         static const int *byte1[] = { &hf_ipmi_trn_04_chan, NULL };
1549         static const int *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
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
1572 serial_03(tvbuff_t *tvb, proto_tree *tree)
1573 {
1574         static const int *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
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
1593 serial_04(tvbuff_t *tvb, proto_tree *tree)
1594 {
1595         static const gint *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
1602 serial_05(tvbuff_t *tvb, proto_tree *tree)
1603 {
1604         static const int *byte1[] = { &hf_ipmi_trn_serial05_cbcp_callback,
1605                 &hf_ipmi_trn_serial05_ipmi_callback, NULL };
1606         static const int *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
1619 serial_06(tvbuff_t *tvb, proto_tree *tree)
1620 {
1621         static const gint *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
1629 serial_07(tvbuff_t *tvb, proto_tree *tree)
1630 {
1631         static const gint *byte1[] = { &hf_ipmi_trn_serial07_flowctl, &hf_ipmi_trn_serial07_dtrhangup, NULL };
1632         static const gint *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
1641 serial_08(tvbuff_t *tvb, proto_tree *tree)
1642 {
1643         static const gint *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 const gint *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
1658 serial_09(tvbuff_t *tvb, proto_tree *tree)
1659 {
1660         static const gint *byte1[] = { &hf_ipmi_trn_serial09_ring_duration, NULL };
1661         static const gint *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
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
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
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
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
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
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
1707 serial_16(tvbuff_t *tvb, proto_tree *tree)
1708 {
1709         static const gint *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
1716 serial_17(tvbuff_t *tvb, proto_tree *tree)
1717 {
1718         static const gint *byte1[] = { &hf_ipmi_trn_serial17_dest_sel, NULL };
1719         static const gint *byte2[] = { &hf_ipmi_trn_serial17_ack, &hf_ipmi_trn_serial17_dest_type, NULL };
1720         static const gint *byte4[] = { &hf_ipmi_trn_serial17_alert_retries, &hf_ipmi_trn_serial17_call_retries, NULL };
1721         const gint *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
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
1761 serial_19(tvbuff_t *tvb, proto_tree *tree)
1762 {
1763         static const gint *byte1[] = { &hf_ipmi_trn_serial19_destsel, NULL };
1764         static const gint *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 const gint *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
1777 serial_20(tvbuff_t *tvb, proto_tree *tree)
1778 {
1779         static const gint *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
1786 serial_21(tvbuff_t *tvb, proto_tree *tree)
1787 {
1788         static const gint *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
1797 serial_22(tvbuff_t *tvb, proto_tree *tree)
1798 {
1799         static const gint *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
1806 serial_23(tvbuff_t *tvb, proto_tree *tree)
1807 {
1808         static const gint *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
1816 serial_24(tvbuff_t *tvb, proto_tree *tree)
1817 {
1818         static const gint *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
1825 serial_25(tvbuff_t *tvb, proto_tree *tree)
1826 {
1827         static const gint *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
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
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
1849 serial_28(tvbuff_t *tvb, proto_tree *tree)
1850 {
1851         static const gint *byte1[] = { &hf_ipmi_trn_serial28_tapsrv_sel, NULL };
1852         static const gint *byte2[] = { &hf_ipmi_trn_serial28_confirm, NULL };
1853         static const gint *byte10[] = { &hf_ipmi_trn_serial28_t2, &hf_ipmi_trn_serial28_t1, NULL };
1854         static const gint *byte11[] = { &hf_ipmi_trn_serial28_t4, &hf_ipmi_trn_serial28_t3, NULL };
1855         static const gint *byte12[] = { &hf_ipmi_trn_serial28_t6, &hf_ipmi_trn_serial28_t5, NULL };
1856         static const gint *byte13[] = { &hf_ipmi_trn_serial28_n2, &hf_ipmi_trn_serial28_n1, NULL };
1857         static const gint *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
1878 serial_29(tvbuff_t *tvb, proto_tree *tree)
1879 {
1880         static const gint *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 const gint *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
1891 serial_30(tvbuff_t *tvb, proto_tree *tree)
1892 {
1893         static const gint *byte1[] = { &hf_ipmi_trn_serial30_snooping, &hf_ipmi_trn_serial30_snoopctl, NULL };
1894         static const gint *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 const gint *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
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
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
1920 serial_33(tvbuff_t *tvb, proto_tree *tree)
1921 {
1922         static const gint *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
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
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
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
1948 serial_37(tvbuff_t *tvb, proto_tree *tree)
1949 {
1950         static const gint *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
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
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
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
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
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
2010 serial_43(tvbuff_t *tvb, proto_tree *tree)
2011 {
2012         static const gint *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
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
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
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
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
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
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
2065 serial_50(tvbuff_t *tvb, proto_tree *tree)
2066 {
2067         static const gint *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
2075 serial_51(tvbuff_t *tvb, proto_tree *tree)
2076 {
2077         static const gint *byte2[] = { &hf_ipmi_trn_serial51_ipmi_channel, &hf_ipmi_trn_serial51_conn_num, NULL };
2078         static const gint *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
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
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
2165 rq10(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2166 {
2167         static const int *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
2204 rq11(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2205 {
2206         static const int *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
2236 rs11(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2237 {
2238         static const int *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
2290 rq12(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2291 {
2292         static const gint *byte1[] = { &hf_ipmi_trn_12_chan, NULL };
2293         static const gint *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
2302 rs12(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2303 {
2304         static const gint *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
2314 rq13(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2315 {
2316         static const gint *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
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
2335 rq14(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2336 {
2337         static const gint *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
2348 rq15(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2349 {
2350         static const gint *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
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
2366 rq16(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2367 {
2368         static const gint *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
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
2395 rq17(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2396 {
2397         static const gint *byte1[] = { &hf_ipmi_trn_17_chan, NULL };
2398         static const gint *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
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
2434 rq18(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2435 {
2436         static const gint *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
2446 rq19(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2447 {
2448         static const gint *byte1[] = { &hf_ipmi_trn_19_chan, NULL };
2449         static const gint *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
2466 parse_callback_options(tvbuff_t *tvb, guint offs, proto_tree *tree)
2467 {
2468         static const gint *usercap[] = { &hf_ipmi_trn_XX_cap_cbcp, &hf_ipmi_trn_XX_cap_ipmi, NULL };
2469         static const gint *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
2486 rq1a(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2487 {
2488         static const gint *byte1[] = { &hf_ipmi_trn_1a_user, NULL };
2489         static const gint *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
2501 rq1b(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2502 {
2503         static const gint *byte1[] = { &hf_ipmi_trn_1b_user, NULL };
2504         static const gint *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
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
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.both", 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_SOLICITATIOIN_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_SOLICITATIOIN_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_SOLICITATIOINS",
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  -  http://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  */