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