HACK: pinfo->private_data points to smb_info again
[wireshark-wip.git] / epan / dissectors / packet-homeplug-av.c
blob64e87d3f4ea0910d304e04244e35a4f4928cc59b
1 /* packet-homeplug-av.c
2 * Routines for HomePlug AV dissection
4 * Copyright 2011, Florian Fainelli <florian[AT]openwrt.org>
6 * $Id$
8 * Wireshark - Network traffic analyzer
9 * By Gerald Combs <gerald[AT]wireshark.org>
10 * Copyright 1998 Gerald Combs
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27 #include "config.h"
29 #include <epan/packet.h>
30 #include <epan/etypes.h>
31 #include <epan/ptvcursor.h>
33 static int proto_homeplug_av = -1;
35 static int hf_homeplug_av_mmhdr = -1;
36 static int hf_homeplug_av_mmhdr_mmver = -1;
37 static int hf_homeplug_av_mmhdr_mmtype = -1;
38 static int hf_homeplug_av_mmhdr_mmtype_lsb = -1;
39 static int hf_homeplug_av_mmhdr_mmtype_msb = -1;
40 static int hf_homeplug_av_mmhdr_fmi = -1;
41 static int hf_homeplug_av_vendor = -1;
42 static int hf_homeplug_av_vendor_oui = -1;
43 static int hf_homeplug_av_reserved = -1;
45 /* Beacon */
46 static int hf_homeplug_av_bcn = -1;
47 static int hf_homeplug_av_bcn_bts = -1;
48 static int hf_homeplug_av_bcn_bto_0 = -1;
49 static int hf_homeplug_av_bcn_bto_1 = -1;
50 static int hf_homeplug_av_bcn_bto_2 = -1;
51 static int hf_homeplug_av_bcn_bto_3 = -1;
53 /* Frame Control */
54 static int hf_homeplug_av_fc = -1;
55 static int hf_homeplug_av_fc_stei = -1;
56 static int hf_homeplug_av_fc_dtei = -1;
57 static int hf_homeplug_av_fc_lid = -1;
58 static int hf_homeplug_av_fc_cfs = -1;
59 static int hf_homeplug_av_fc_bdf = -1;
60 static int hf_homeplug_av_fc_hp10df = -1;
61 static int hf_homeplug_av_fc_hp11df = -1;
62 static int hf_homeplug_av_fc_ppb = -1;
63 static int hf_homeplug_av_fc_ble = -1;
64 static int hf_homeplug_av_fc_pbsz = -1;
65 static int hf_homeplug_av_fc_num_sym = -1;
66 static int hf_homeplug_av_fc_tmi_av = -1;
67 static int hf_homeplug_av_fc_fl_av = -1;
68 static int hf_homeplug_av_fc_mpdu_cnt = -1;
69 static int hf_homeplug_av_fc_burst_cnt = -1;
70 static int hf_homeplug_av_fc_clst = -1;
71 static int hf_homeplug_av_fc_rg_len = -1;
72 static int hf_homeplug_av_fc_mfs_cmd_mgmt = -1;
73 static int hf_homeplug_av_fc_mfs_cmd_data = -1;
74 static int hf_homeplug_av_fc_rsr = -1;
75 static int hf_homeplug_av_fc_mcf = -1;
76 static int hf_homeplug_av_fc_dccpcf = -1;
77 static int hf_homeplug_av_fc_mnbf = -1;
80 /* Public MMEs */
81 static int hf_homeplug_av_public = -1;
82 static int hf_homeplug_av_public_frag_count = -1;
83 static int hf_homeplug_av_public_frag_index = -1;
84 static int hf_homeplug_av_public_frag_seqnum = -1;
86 static int hf_homeplug_av_cc_disc_list_cnf = -1;
88 static int hf_homeplug_av_cc_disc_list_sta_cnt = -1;
89 static int hf_homeplug_av_cc_sta_info = -1;
90 static int hf_homeplug_av_cc_sta_info_mac = -1;
91 static int hf_homeplug_av_cc_sta_info_tei = -1;
92 static int hf_homeplug_av_cc_sta_info_same_net = -1;
93 static int hf_homeplug_av_cc_sta_info_sig_level = -1;
94 static int hf_homeplug_av_cc_sta_info_avg_ble = -1;
96 static int hf_homeplug_av_cc_disc_list_net_cnt = -1;
97 static int hf_homeplug_av_cc_net_info = -1;
98 static int hf_homeplug_av_cc_net_info_hyb_mode = -1;
99 static int hf_homeplug_av_cc_net_info_bcn_slots = -1;
100 static int hf_homeplug_av_cc_net_info_cco_sts = -1;
101 static int hf_homeplug_av_cc_net_info_bcn_ofs = -1;
103 static int hf_homeplug_av_brg_infos_cnf = -1;
104 static int hf_homeplug_av_brg_infos_cnf_brd = -1;
105 static int hf_homeplug_av_brg_infos_cnf_btei = -1;
106 static int hf_homeplug_av_brg_infos_cnf_num_stas = -1;
107 static int hf_homeplug_av_brg_infos_cnf_mac = -1;
109 static int hf_homeplug_av_cm_nw_infos_cnf = -1;
111 static int hf_homeplug_av_nw_stats_cnf = -1;
113 /* Shared network informations fields */
114 static int hf_homeplug_av_nw_info_del_type = -1;
115 static int hf_homeplug_av_nw_info_fccs_av = -1;
116 static int hf_homeplug_av_nw_info_peks = -1;
117 static int hf_homeplug_av_nw_info_pid = -1;
118 static int hf_homeplug_av_nw_info_prn = -1;
119 static int hf_homeplug_av_nw_info_pmn = -1;
120 static int hf_homeplug_av_nw_info_my_nonce = -1;
121 static int hf_homeplug_av_nw_info_your_nonce = -1;
122 static int hf_homeplug_av_nw_info_key_type = -1;
123 static int hf_homeplug_av_nw_info_cco_cap = -1;
124 static int hf_homeplug_av_nw_info_num_avlns = -1;
125 static int hf_homeplug_av_nw_info_nid = -1;
126 static int hf_homeplug_av_nw_info_snid = -1;
127 static int hf_homeplug_av_nw_info_tei = -1;
128 static int hf_homeplug_av_nw_info_sta_role = -1;
129 static int hf_homeplug_av_nw_info_cco_mac = -1;
130 static int hf_homeplug_av_nw_info_cco_tei = -1;
131 static int hf_homeplug_av_nw_info_num_stas = -1;
132 static int hf_homeplug_av_nw_info_access = -1;
133 static int hf_homeplug_av_nw_info_num_coord = -1;
136 static int hf_homeplug_av_cm_enc_pld_ind = -1;
137 static int hf_homeplug_av_cm_enc_pld_ind_avlns = -1;
138 static int hf_homeplug_av_cm_enc_pld_ind_iv = -1;
139 static int hf_homeplug_av_cm_enc_pld_ind_uuid = -1;
140 static int hf_homeplug_av_cm_enc_pld_ind_len = -1;
141 static int hf_homeplug_av_cm_enc_pld_ind_pld = -1;
143 static int hf_homeplug_av_cm_enc_pld_rsp = -1;
144 static int hf_homeplug_av_cm_enc_pld_rsp_result = -1;
146 static int hf_homeplug_av_cm_set_key_req = -1;
147 static int hf_homeplug_av_cm_set_key_req_nw_key = -1;
149 static int hf_homeplug_av_cm_set_key_cnf = -1;
150 static int hf_homeplug_av_cm_set_key_cnf_result = -1;
152 static int hf_homeplug_av_cm_get_key_req = -1;
153 static int hf_homeplug_av_cm_get_key_req_type = -1;
154 static int hf_homeplug_av_cm_get_key_req_has_key = -1;
156 static int hf_homeplug_av_cm_get_key_cnf = -1;
157 static int hf_homeplug_av_cm_get_key_cnf_result = -1;
158 static int hf_homeplug_av_cm_get_key_cnf_rtype = -1;
159 static int hf_homeplug_av_cm_get_key_cnf_key = -1;
162 /* Intellon specific vendor MMEs */
163 static int hf_homeplug_av_get_sw_cnf = -1;
164 static int hf_homeplug_av_get_sw_cnf_status = -1;
165 static int hf_homeplug_av_get_sw_cnf_dev_id = -1;
166 static int hf_homeplug_av_get_sw_cnf_ver_len = -1;
167 static int hf_homeplug_av_get_sw_cnf_ver_str = -1;
168 static int hf_homeplug_av_get_sw_cnf_upg = -1;
170 /* Shared memory related fields */
171 static int hf_homeplug_av_mem_len_16bits = -1;
172 static int hf_homeplug_av_mem_len_32bits = -1;
173 static int hf_homeplug_av_mem_offset = -1;
174 static int hf_homeplug_av_mem_checksum = -1;
175 static int hf_homeplug_av_mem_data = -1;
176 static int hf_homeplug_av_mem_addr = -1;
177 static int hf_homeplug_av_mem_status = -1;
179 static int hf_homeplug_av_wr_mem_req = -1;
180 static int hf_homeplug_av_wr_mem_cnf = -1;
182 static int hf_homeplug_av_rd_mem_req = -1;
183 static int hf_homeplug_av_rd_mem_cnf = -1;
185 static int hf_homeplug_av_mac_module_id = -1;
187 static int hf_homeplug_av_st_mac_req = -1;
188 static int hf_homeplug_av_st_mac_req_img_load = -1;
189 static int hf_homeplug_av_st_mac_req_img_len = -1;
190 static int hf_homeplug_av_st_mac_req_img_chksum = -1;
191 static int hf_homeplug_av_st_mac_req_img_start = -1;
193 static int hf_homeplug_av_st_mac_cnf = -1;
194 static int hf_homeplug_av_st_mac_cnf_status = -1;
196 static int hf_homeplug_av_get_nvm_cnf = -1;
197 static int hf_homeplug_av_get_nvm_cnf_status = -1;
198 static int hf_homeplug_av_get_nvm_cnf_nvm_type = -1;
199 static int hf_homeplug_av_get_nvm_cnf_nvm_page = -1;
200 static int hf_homeplug_av_get_nvm_cnf_nvm_block = -1;
201 static int hf_homeplug_av_get_nvm_cnf_nvm_size = -1;
203 static int hf_homeplug_av_rs_dev_cnf = -1;
204 static int hf_homeplug_av_rs_dev_cnf_status = -1;
206 static int hf_homeplug_av_wr_mod_req = -1;
208 static int hf_homeplug_av_wr_mod_cnf = -1;
209 static int hf_homeplug_av_wr_mod_cnf_status = -1;
211 static int hf_homeplug_av_wr_mod_ind = -1;
212 static int hf_homeplug_av_wr_mod_ind_status = -1;
214 static int hf_homeplug_av_rd_mod_req = -1;
216 static int hf_homeplug_av_rd_mod_cnf = -1;
217 static int hf_homeplug_av_rd_mod_cnf_status = -1;
219 static int hf_homeplug_av_mod_nvm_req = -1;
221 static int hf_homeplug_av_mod_nvm_cnf = -1;
222 static int hf_homeplug_av_mod_nvm_cnf_status = -1;
224 static int hf_homeplug_av_wd_rpt_req = -1;
225 static int hf_homeplug_av_wd_rpt_req_session_id = -1;
226 static int hf_homeplug_av_wd_rpt_req_clr = -1;
228 static int hf_homeplug_av_wd_rpt_ind = -1;
229 static int hf_homeplug_av_wd_rpt_ind_status = -1;
230 static int hf_homeplug_av_wd_rpt_ind_session_id = -1;
231 static int hf_homeplug_av_wd_rpt_ind_num_parts = -1;
232 static int hf_homeplug_av_wd_rpt_ind_curr_part = -1;
233 static int hf_homeplug_av_wd_rpt_ind_rdata_len = -1;
234 static int hf_homeplug_av_wd_rpt_ind_rdata_ofs = -1;
235 static int hf_homeplug_av_wd_rpt_ind_rdata = -1;
237 static int hf_homeplug_av_lnk_stats_req = -1;
238 static int hf_homeplug_av_lnk_stats_req_mcontrol = -1;
239 static int hf_homeplug_av_lnk_stats_req_dir = -1;
240 static int hf_homeplug_av_lnk_stats_req_lid = -1;
241 static int hf_homeplug_av_lnk_stats_req_macaddr = -1;
243 static int hf_homeplug_av_lnk_stats_cnf = -1;
244 static int hf_homeplug_av_lnk_stats_cnf_status = -1;
245 static int hf_homeplug_av_lnk_stats_cnf_dir = -1;
246 static int hf_homeplug_av_lnk_stats_cnf_lid = -1;
247 static int hf_homeplug_av_lnk_stats_cnf_tei = -1;
248 static int hf_homeplug_av_lnk_stats_cnf_lstats = -1;
250 static int hf_homeplug_av_lnk_stats_tx = -1;
251 static int hf_homeplug_av_lnk_stats_tx_mpdu_ack = -1;
252 static int hf_homeplug_av_lnk_stats_tx_mpdu_col = -1;
253 static int hf_homeplug_av_lnk_stats_tx_mpdu_fai = -1;
254 static int hf_homeplug_av_lnk_stats_tx_pbs_pass = -1;
255 static int hf_homeplug_av_lnk_stats_tx_pbs_fail = -1;
257 static int hf_homeplug_av_lnk_stats_rx = -1;
258 static int hf_homeplug_av_lnk_stats_rx_mpdu_ack = -1;
259 static int hf_homeplug_av_lnk_stats_rx_mpdu_fai = -1;
260 static int hf_homeplug_av_lnk_stats_rx_pbs_pass = -1;
261 static int hf_homeplug_av_lnk_stats_rx_pbs_fail = -1;
262 static int hf_homeplug_av_lnk_stats_rx_tb_pass = -1;
263 static int hf_homeplug_av_lnk_stats_rx_tb_fail = -1;
264 static int hf_homeplug_av_lnk_stats_rx_num_int = -1;
266 static int hf_homeplug_av_rx_inv_stats = -1;
267 static int hf_homeplug_av_rx_inv_phy_rate = -1;
268 static int hf_homeplug_av_rx_inv_pbs_pass = -1;
269 static int hf_homeplug_av_rx_inv_pbs_fail = -1;
270 static int hf_homeplug_av_rx_inv_tb_pass = -1;
271 static int hf_homeplug_av_rx_inv_tb_fail = -1;
273 static int hf_homeplug_av_sniffer_req = -1;
274 static int hf_homeplug_av_sniffer_req_ctrl = -1;
276 static int hf_homeplug_av_sniffer_cnf = -1;
277 static int hf_homeplug_av_sniffer_cnf_status = -1;
278 static int hf_homeplug_av_sniffer_cnf_state = -1;
279 static int hf_homeplug_av_sniffer_cnf_da = -1;
281 static int hf_homeplug_av_sniffer_ind = -1;
282 static int hf_homeplug_av_sniffer_ind_type = -1;
283 static int hf_homeplug_av_sniffer_ind_data = -1;
284 static int hf_homeplug_av_sniffer_data_dir = -1;
285 static int hf_homeplug_av_sniffer_data_systime = -1;
286 static int hf_homeplug_av_sniffer_data_bc_time = -1;
288 static int hf_homeplug_av_nw_info_cnf = -1;
290 static int hf_homeplug_av_nw_info_sta_info = -1;
291 static int hf_homeplug_av_nw_info_net_info = -1;
293 static int hf_homeplug_av_nw_info_sta_da = -1;
294 static int hf_homeplug_av_nw_info_sta_tei = -1;
295 static int hf_homeplug_av_nw_info_sta_bda = -1;
296 static int hf_homeplug_av10_nw_info_sta_phy_dr_tx= -1;
297 static int hf_homeplug_av10_nw_info_sta_phy_dr_rx= -1;
298 static int hf_homeplug_av11_nw_info_sta_phy_dr_tx= -1;
299 static int hf_homeplug_av11_nw_info_sta_cpling_tx = -1;
300 static int hf_homeplug_av11_nw_info_sta_phy_dr_rx= -1;
301 static int hf_homeplug_av11_nw_info_sta_cpling_rx = -1;
303 static int hf_homeplug_av_cp_rpt_req = -1;
304 static int hf_homeplug_av_cp_rpt_req_session_id = -1;
305 static int hf_homeplug_av_cp_rpt_req_clr = -1;
307 static int hf_homeplug_av_cp_rpt_ind = -1;
308 static int hf_homeplug_av_cp_rpt_ind_status = -1;
309 static int hf_homeplug_av_cp_rpt_ind_major_ver = -1;
310 static int hf_homeplug_av_cp_rpt_ind_minor_ver = -1;
311 static int hf_homeplug_av_cp_rpt_ind_session_id = -1;
312 static int hf_homeplug_av_cp_rpt_ind_total_size = -1;
313 static int hf_homeplug_av_cp_rpt_ind_blk_offset = -1;
314 static int hf_homeplug_av_cp_rpt_ind_byte_index = -1;
315 static int hf_homeplug_av_cp_rpt_ind_num_parts = -1;
316 static int hf_homeplug_av_cp_rpt_ind_curr_part = -1;
317 static int hf_homeplug_av_cp_rpt_ind_data_len = -1;
318 static int hf_homeplug_av_cp_rpt_ind_data_ofs = -1;
319 static int hf_homeplug_av_cp_rpt_ind_data = -1;
321 static int hf_homeplug_av_fr_lbk_duration = -1;
322 static int hf_homeplug_av_fr_lbk_len = -1;
324 static int hf_homeplug_av_fr_lbk_req = -1;
325 static int hf_homeplug_av_fr_lbk_req_data = -1;
327 static int hf_homeplug_av_fr_lbk_cnf = -1;
328 static int hf_homeplug_av_fr_lbk_cnf_status = -1;
330 static int hf_homeplug_av_lbk_stat_cnf = -1;
331 static int hf_homeplug_av_lbk_stat_cnf_status = -1;
332 static int hf_homeplug_av_lbk_stat_cnf_lbk_stat = -1;
334 static int hf_homeplug_av_set_key_req = -1;
335 static int hf_homeplug_av_set_key_req_eks = -1;
336 static int hf_homeplug_av_set_key_req_nmk = -1;
337 static int hf_homeplug_av_set_key_req_rda = -1;
338 static int hf_homeplug_av_set_key_req_dak = -1;
340 static int hf_homeplug_av_set_key_cnf = -1;
341 static int hf_homeplug_av_set_key_cnf_status = -1;
343 static int hf_homeplug_av_mfg_string_cnf = -1;
344 static int hf_homeplug_av_mfg_string_cnf_status = -1;
345 static int hf_homeplug_av_mfg_string_cnf_len = -1;
346 static int hf_homeplug_av_mfg_string_cnf_string = -1;
348 static int hf_homeplug_av_rd_cblock_cnf = -1;
349 static int hf_homeplug_av_rd_cblock_cnf_status = -1;
350 static int hf_homeplug_av_rd_cblock_cnf_len = -1;
352 static int hf_homeplug_av_cblock_hdr = -1;
353 static int hf_homeplug_av_cblock_hdr_ver = -1;
354 static int hf_homeplug_av_cblock_img_rom_addr = -1;
355 static int hf_homeplug_av_cblock_img_addr = -1;
356 static int hf_homeplug_av_cblock_img_len = -1;
357 static int hf_homeplug_av_cblock_img_chksum = -1;
358 static int hf_homeplug_av_cblock_entry_point = -1;
359 static int hf_homeplug_av_cblock_hdr_minor = -1;
360 static int hf_homeplug_av_cblock_hdr_img_type = -1;
361 static int hf_homeplug_av_cblock_hdr_ignore_mask = -1;
362 static int hf_homeplug_av_cblock_hdr_module_id = -1;
363 static int hf_homeplug_av_cblock_hdr_module_subid= -1;
364 static int hf_homeplug_av_cblock_next_hdr = -1;
365 static int hf_homeplug_av_cblock_hdr_chksum = -1;
367 static int hf_homeplug_av_cblock = -1;
368 static int hf_homeplug_av_cblock_sdram_size = -1;
369 static int hf_homeplug_av_cblock_sdram_conf = -1;
370 static int hf_homeplug_av_cblock_sdram_tim0 = -1;
371 static int hf_homeplug_av_cblock_sdram_tim1 = -1;
372 static int hf_homeplug_av_cblock_sdram_cntrl = -1;
373 static int hf_homeplug_av_cblock_sdram_refresh = -1;
374 static int hf_homeplug_av_cblock_mac_clock = -1;
376 static int hf_homeplug_av_set_sdram_req = -1;
377 static int hf_homeplug_av_set_sdram_req_chksum = -1;
379 static int hf_homeplug_av_set_sdram_cnf = -1;
380 static int hf_homeplug_av_set_sdram_cnf_status = -1;
382 static int hf_homeplug_av_host_action_ind = -1;
383 static int hf_homeplug_av_host_action_ind_act = -1;
385 static int hf_homeplug_av_host_action_rsp = -1;
386 static int hf_homeplug_av_host_action_rsp_sts = -1;
388 static int hf_homeplug_av_op_attr_cookie = -1;
389 static int hf_homeplug_av_op_attr_rep_type = -1;
391 static int hf_homeplug_av_op_attr_req = -1;
393 static int hf_homeplug_av_op_attr_cnf = -1;
394 static int hf_homeplug_av_op_attr_cnf_status = -1;
395 static int hf_homeplug_av_op_attr_cnf_size = -1;
396 static int hf_homeplug_av_op_attr_cnf_data = -1;
398 static int hf_homeplug_av_op_attr_data_hw = -1;
399 static int hf_homeplug_av_op_attr_data_sw = -1;
400 static int hf_homeplug_av_op_attr_data_sw_major = -1;
401 static int hf_homeplug_av_op_attr_data_sw_minor = -1;
402 static int hf_homeplug_av_op_attr_data_sw_sub = -1;
403 static int hf_homeplug_av_op_attr_data_sw_num = -1;
404 static int hf_homeplug_av_op_attr_data_sw_date = -1;
405 static int hf_homeplug_av_op_attr_data_sw_rel = -1;
406 static int hf_homeplug_av_op_attr_data_sw_sdram_type = -1;
407 static int hf_homeplug_av_op_attr_data_sw_linefreq = -1;
408 static int hf_homeplug_av_op_attr_data_sw_zerocross = -1;
409 static int hf_homeplug_av_op_attr_data_sw_sdram_size = -1;
410 static int hf_homeplug_av_op_attr_data_sw_auth_mode = -1;
412 static int hf_homeplug_av_enet_phy_req = -1;
413 static int hf_homeplug_av_enet_phy_req_mcontrol = -1;
414 static int hf_homeplug_av_enet_phy_req_addcaps = -1;
416 static int hf_homeplug_av_enet_phy_cnf = -1;
417 static int hf_homeplug_av_enet_phy_cnf_status = -1;
418 static int hf_homeplug_av_enet_phy_cnf_speed = -1;
419 static int hf_homeplug_av_enet_phy_cnf_duplex = -1;
421 static int hf_homeplug_av_tone_map_tx_req = -1;
422 static int hf_homeplug_av_tone_map_tx_req_mac = -1;
423 static int hf_homeplug_av_tone_map_tx_req_slot = -1;
424 static int hf_homeplug_av_tone_map_tx_req_coupling = -1;
426 static int hf_homeplug_av_tone_map_rx_req = -1;
427 static int hf_homeplug_av_tone_map_rx_req_mac = -1;
428 static int hf_homeplug_av_tone_map_rx_req_slot = -1;
429 static int hf_homeplug_av_tone_map_rx_req_coupling = -1;
431 static int hf_homeplug_av_tone_map_tx_cnf = -1;
432 static int hf_homeplug_av_tone_map_tx_cnf_status = -1;
433 static int hf_homeplug_av_tone_map_tx_cnf_len = -1;
434 static int hf_homeplug_av_tone_map_tx_cnf_mac = -1;
435 static int hf_homeplug_av_tone_map_tx_cnf_slot = -1;
436 static int hf_homeplug_av_tone_map_tx_cnf_num_tms = -1;
437 static int hf_homeplug_av_tone_map_tx_cnf_num_act = -1;
439 static int hf_homeplug_av_tone_map_rx_cnf = -1;
440 static int hf_homeplug_av_tone_map_rx_cnf_status = -1;
441 static int hf_homeplug_av_tone_map_rx_cnf_len = -1;
442 static int hf_homeplug_av_tone_map_rx_cnf_subver = -1;
443 static int hf_homeplug_av_tone_map_rx_cnf_coupling = -1;
444 static int hf_homeplug_av_tone_map_rx_cnf_mac = -1;
445 static int hf_homeplug_av_tone_map_rx_cnf_slot = -1;
446 static int hf_homeplug_av_tone_map_rx_cnf_num_tms = -1;
447 static int hf_homeplug_av_tone_map_rx_cnf_num_act = -1;
448 static int hf_homeplug_av_tone_map_rx_cnf_agc = -1;
449 static int hf_homeplug_av_tone_map_rx_cnf_gil = -1;
451 static int hf_homeplug_av_tone_map_carriers = -1;
452 static int hf_homeplug_av_tone_map_carrier = -1;
453 static int hf_homeplug_av_tone_map_carrier_lo = -1;
454 static int hf_homeplug_av_tone_map_carrier_hi = -1;
456 static gint ett_homeplug_av = -1;
457 static gint ett_homeplug_av_mmhdr = -1;
458 static gint ett_homeplug_av_mmtype = -1;
459 static gint ett_homeplug_av_fmi = -1;
460 static gint ett_homeplug_av_vendor = -1;
461 static gint ett_homeplug_av_public = -1;
463 static gint ett_homeplug_av_fc = -1;
464 static gint ett_homeplug_av_bcn = -1;
465 static gint ett_homeplug_av_cc_disc_list_cnf = -1;
466 static gint ett_homeplug_av_cc_sta_info = -1;
467 static gint ett_homeplug_av_cc_net_info = -1;
468 static gint ett_homeplug_av_cm_enc_pld_ind = -1;
469 static gint ett_homeplug_av_cm_enc_pld_rsp = -1;
470 static gint ett_homeplug_av_cm_set_key_req = -1;
471 static gint ett_homeplug_av_cm_set_key_cnf = -1;
472 static gint ett_homeplug_av_cm_get_key_req = -1;
473 static gint ett_homeplug_av_cm_get_key_cnf = -1;
474 static gint ett_homeplug_av_brg_infos_cnf = -1;
475 static gint ett_homeplug_av_cm_nw_infos_cnf = -1;
476 static gint ett_homeplug_av_nw_stats_cnf = -1;
478 static gint ett_homeplug_av_get_sw_cnf = -1;
479 static gint ett_homeplug_av_wr_mem_req = -1;
480 static gint ett_homeplug_av_wr_mem_cnf = -1;
481 static gint ett_homeplug_av_rd_mem_req = -1;
482 static gint ett_homeplug_av_st_mac_req = -1;
483 static gint ett_homeplug_av_st_mac_cnf = -1;
484 static gint ett_homeplug_av_rd_mem_cnf = -1;
485 static gint ett_homeplug_av_get_nvm_cnf = -1;
486 static gint ett_homeplug_av_rs_dev_cnf = -1;
487 static gint ett_homeplug_av_wr_mod_req = -1;
488 static gint ett_homeplug_av_wr_mod_cnf = -1;
489 static gint ett_homeplug_av_wr_mod_ind = -1;
490 static gint ett_homeplug_av_rd_mod_req = -1;
491 static gint ett_homeplug_av_rd_mod_cnf = -1;
492 static gint ett_homeplug_av_mod_nvm_req = -1;
493 static gint ett_homeplug_av_mod_nvm_cnf = -1;
494 static gint ett_homeplug_av_wd_rpt_req = -1;
495 static gint ett_homeplug_av_wd_rpt_ind = -1;
496 static gint ett_homeplug_av_lnk_stats_req = -1;
497 static gint ett_homeplug_av_lnk_stats_cnf = -1;
498 static gint ett_homeplug_av_lnk_stats_tx = -1;
499 static gint ett_homeplug_av_lnk_stats_rx = -1;
500 static gint ett_homeplug_av_lnk_stats_rx_inv = -1;
501 static gint ett_homeplug_av_sniffer_req = -1;
502 static gint ett_homeplug_av_sniffer_cnf = -1;
503 static gint ett_homeplug_av_sniffer_ind = -1;
504 static gint ett_homeplug_av_sniffer_ind_data = -1;
505 static gint ett_homeplug_av_nw_info_cnf = -1;
506 static gint ett_homeplug_av_nw_info_sta_info = -1;
507 static gint ett_homeplug_av_nw_info_net_info = -1;
508 static gint ett_homeplug_av_cp_rpt_req = -1;
509 static gint ett_homeplug_av_cp_rpt_ind = -1;
510 static gint ett_homeplug_av_fr_lbk_req = -1;
511 static gint ett_homeplug_av_fr_lbk_cnf = -1;
512 static gint ett_homeplug_av_lbk_stat_cnf = -1;
513 static gint ett_homeplug_av_set_key_req = -1;
514 static gint ett_homeplug_av_set_key_cnf = -1;
515 static gint ett_homeplug_av_mfg_string_cnf = -1;
516 static gint ett_homeplug_av_rd_cblock_cnf = -1;
517 static gint ett_homeplug_av_cblock_hdr = -1;
518 static gint ett_homeplug_av_cblock = -1;
519 static gint ett_homeplug_av_set_sdram_req = -1;
520 static gint ett_homeplug_av_set_sdram_cnf = -1;
521 static gint ett_homeplug_av_host_action_ind = -1;
522 static gint ett_homeplug_av_host_action_rsp = -1;
523 static gint ett_homeplug_av_op_attr_req = -1;
524 static gint ett_homeplug_av_op_attr_cnf = -1;
525 static gint ett_homeplug_av_op_attr_data = -1;
526 static gint ett_homeplug_av_enet_phy_req = -1;
527 static gint ett_homeplug_av_enet_phy_cnf = -1;
528 static gint ett_homeplug_av_tone_map_tx_req = -1;
529 static gint ett_homeplug_av_tone_map_rx_req = -1;
530 static gint ett_homeplug_av_tone_map_tx_cnf = -1;
531 static gint ett_homeplug_av_tone_map_rx_cnf = -1;
532 static gint ett_homeplug_av_tone_map_carriers = -1;
533 static gint ett_homeplug_av_tone_map_carrier = -1;
535 #define HOMEPLUG_AV_MMHDR_LEN 3 /* MM version (1) + MM type (2) */
537 #define HOMEPLUG_AV_PUBLIC_FRAG_COUNT_MASK 0x0F
538 #define HOMEPLUG_AV_PUBLIC_FRAG_INDEX_MASK 0xF0
540 #define HOMEPLUG_AV_MMTYPE_CC_DISC_LIST_REQ 0x0014
541 #define HOMEPLUG_AV_MMTYPE_CC_DISC_LIST_CNF 0x0015
542 #define HOMEPLUG_AV_MMTYPE_CM_ENC_PLD_IND 0x6004
543 #define HOMEPLUG_AV_MMTYPE_CM_ENC_PLD_RSP 0x6005
544 #define HOMEPLUG_AV_MMTYPE_CM_SET_KEY_REQ 0x6008
545 #define HOMEPLUG_AV_MMTYPE_CM_SET_KEY_CNF 0x6009
546 #define HOMEPLUG_AV_MMTYPE_CM_GET_KEY_REQ 0x600C
547 #define HOMEPLUG_AV_MMTYPE_CM_GET_KEY_CNF 0x600D
548 #define HOMEPLUG_AV_MMTYPE_CM_BRG_INFO_REQ 0x6020
549 #define HOMEPLUG_AV_MMTYPE_CM_BRG_INFO_CNF 0x6021
550 #define HOMEPLUG_AV_MMTYPE_CM_NW_INFO_REQ 0x6038
551 #define HOMEPLUG_AV_MMTYPE_CM_NW_INFO_CNF 0x6039
552 #define HOMEPLUG_AV_MMTYPE_CM_NW_STATS_REQ 0x6048
553 #define HOMEPLUG_AV_MMTYPE_CM_NW_STATS_CNF 0x6049
554 #define HOMEPLUG_AV_MMTYPE_GET_SW_REQ 0xA000
555 #define HOMEPLUG_AV_MMTYPE_GET_SW_CNF 0xA001
556 #define HOMEPLUG_AV_MMTYPE_WR_MEM_REQ 0xA004
557 #define HOMEPLUG_AV_MMTYPE_WR_MEM_CNF 0xA005
558 #define HOMEPLUG_AV_MMTYPE_RD_MEM_REQ 0xA008
559 #define HOMEPLUG_AV_MMTYPE_RD_MEM_CNF 0xA009
560 #define HOMEPLUG_AV_MMTYPE_ST_MAC_REQ 0xA00C
561 #define HOMEPLUG_AV_MMTYPE_ST_MAC_CNF 0xA00D
562 #define HOMEPLUG_AV_MMTYPE_GET_NVM_REQ 0xA010
563 #define HOMEPLUG_AV_MMTYPE_GET_NVM_CNF 0xA011
564 #define HOMEPLUG_AV_MMTYPE_RS_DEV_REQ 0xA01C
565 #define HOMEPLUG_AV_MMTYPE_RS_DEV_CNF 0xA01D
566 #define HOMEPLUG_AV_MMTYPE_WR_MOD_REQ 0xA020
567 #define HOMEPLUG_AV_MMTYPE_WR_MOD_CNF 0xA021
568 #define HOMEPLUG_AV_MMTYPE_WR_MOD_IND 0xA022
569 #define HOMEPLUG_AV_MMTYPE_RD_MOD_REQ 0xA024
570 #define HOMEPLUG_AV_MMTYPE_RD_MOD_CNF 0xA025
571 #define HOMEPLUG_AV_MMTYPE_NVM_MOD_REQ 0xA028
572 #define HOMEPLUG_AV_MMTYPE_NVM_MOD_CNF 0xA029
573 #define HOMEPLUG_AV_MMTYPE_WD_RPT_REQ 0xA02C
574 #define HOMEPLUG_AV_MMTYPE_WD_RPT_IND 0xA02E
575 #define HOMEPLUG_AV_MMTYPE_LNK_STATS_REQ 0xA030
576 #define HOMEPLUG_AV_MMTYPE_LNK_STATS_CNF 0xA031
577 #define HOMEPLUG_AV_MMTYPE_SNIFFER_REQ 0xA034
578 #define HOMEPLUG_AV_MMTYPE_SNIFFER_CNF 0xA035
579 #define HOMEPLUG_AV_MMTYPE_SNIFFER_IND 0xA036
580 #define HOMEPLUG_AV_MMTYPE_NW_INFO_REQ 0xA038
581 #define HOMEPLUG_AV_MMTYPE_NW_INFO_CNF 0xA039
582 #define HOMEPLUG_AV_MMTYPE_CP_RPT_REQ 0xA040
583 #define HOMEPLUG_AV_MMTYPE_CP_RPT_IND 0xA042
584 #define HOMEPLUG_AV_MMTYPE_FR_LBK_REQ 0xA048
585 #define HOMEPLUG_AV_MMTYPE_FR_LBK_CNF 0xA049
586 #define HOMEPLUG_AV_MMTYPE_LBK_STAT_REQ 0xA04C
587 #define HOMEPLUG_AV_MMTYPE_LBK_STAT_CNF 0xA04D
588 #define HOMEPLUG_AV_MMTYPE_SET_KEY_REQ 0xA050
589 #define HOMEPLUG_AV_MMTYPE_SET_KEY_CNF 0xA051
590 #define HOMEPLUG_AV_MMTYPE_MFG_STRING_REQ 0xA054
591 #define HOMEPLUG_AV_MMTYPE_MFG_STRING_CNF 0xA055
592 #define HOMEPLUG_AV_MMTYPE_RD_CBLOCK_REQ 0xA058
593 #define HOMEPLUG_AV_MMTYPE_RD_CBLOCK_CNF 0xA059
594 #define HOMEPLUG_AV_MMTYPE_SET_SDRAM_REQ 0xA05C
595 #define HOMEPLUG_AV_MMTYPE_SET_SDRAM_CNF 0xA05D
596 #define HOMEPLUG_AV_MMTYPE_HOST_ACTION_IND 0xA062
597 #define HOMEPLUG_AV_MMTYPE_HOST_ACTION_RSP 0xA063
598 #define HOMEPLUG_AV_MMTYPE_OP_ATTR_REQ 0xA068
599 #define HOMEPLUG_AV_MMTYPE_OP_ATTR_CNF 0xA069
600 #define HOMEPLUG_AV_MMTYPE_GET_ENET_PHY_REQ 0xA06C
601 #define HOMEPLUG_AV_MMTYPE_GET_ENET_PHY_CNF 0xA06D
602 #define HOMEPLUG_AV_MMTYPE_TONE_MAP_TX_REQ 0xA070
603 #define HOMEPLUG_AV_MMTYPE_TONE_MAP_TX_CNF 0xA071
604 #define HOMEPLUG_AV_MMTYPE_TONE_MAP_RX_REQ 0xA090
605 #define HOMEPLUG_AV_MMTYPE_TONE_MAP_RX_CNF 0xA091
607 static const value_string homeplug_av_mmtype_vals[] = {
608 /* Public MMEs */
609 { HOMEPLUG_AV_MMTYPE_CC_DISC_LIST_REQ, "Central Coordination Discovery List Request" },
610 { HOMEPLUG_AV_MMTYPE_CC_DISC_LIST_CNF, "Central Coordination Discovery List Confirmation" },
611 { HOMEPLUG_AV_MMTYPE_CM_ENC_PLD_IND, "Encrypted Payload Indicate" },
612 { HOMEPLUG_AV_MMTYPE_CM_ENC_PLD_RSP, "Encrypted Payload Respons" },
613 { HOMEPLUG_AV_MMTYPE_CM_SET_KEY_REQ, "Set Key Request" },
614 { HOMEPLUG_AV_MMTYPE_CM_SET_KEY_CNF, "Set Key Confirmation" },
615 { HOMEPLUG_AV_MMTYPE_CM_GET_KEY_REQ, "Get Key Request" },
616 { HOMEPLUG_AV_MMTYPE_CM_GET_KEY_CNF, "Get Key Confirmation" },
617 { HOMEPLUG_AV_MMTYPE_CM_BRG_INFO_REQ, "Get Bridge Informations Request" },
618 { HOMEPLUG_AV_MMTYPE_CM_BRG_INFO_CNF, "Get Bridge Informations Confirmation" },
619 { HOMEPLUG_AV_MMTYPE_CM_NW_INFO_REQ, "Get Network Informations Request" },
620 { HOMEPLUG_AV_MMTYPE_CM_NW_INFO_CNF, "Get Network Informations Confirmation" },
621 { HOMEPLUG_AV_MMTYPE_CM_NW_STATS_REQ, "Get Network Statistics Request" },
622 { HOMEPLUG_AV_MMTYPE_CM_NW_STATS_CNF, "Get Network Statistics Confirmation" },
624 /* Intellon vendor-specific MMEs */
625 { HOMEPLUG_AV_MMTYPE_GET_SW_REQ, "Get Device/SW Version Request" },
626 { HOMEPLUG_AV_MMTYPE_GET_SW_CNF, "Get Device/SW Version Confirmation" },
627 { HOMEPLUG_AV_MMTYPE_WR_MEM_REQ, "Write MAC Memory Request" },
628 { HOMEPLUG_AV_MMTYPE_WR_MEM_CNF, "Write MAC Memory Confirmation" },
629 { HOMEPLUG_AV_MMTYPE_RD_MEM_REQ, "Read MAC Memory Request" },
630 { HOMEPLUG_AV_MMTYPE_RD_MEM_CNF, "Read MAC Memory Confirmation" },
631 { HOMEPLUG_AV_MMTYPE_ST_MAC_REQ, "Start MAC Request" },
632 { HOMEPLUG_AV_MMTYPE_ST_MAC_CNF, "Start MAC Confirmation" },
633 { HOMEPLUG_AV_MMTYPE_GET_NVM_REQ, "Get NVM Parameters Request" },
634 { HOMEPLUG_AV_MMTYPE_GET_NVM_CNF, "Get NVM Parameters Confirmation" },
635 { HOMEPLUG_AV_MMTYPE_RS_DEV_REQ, "Reset Device Request" },
636 { HOMEPLUG_AV_MMTYPE_RS_DEV_CNF, "Reset Device Confirmation" },
637 { HOMEPLUG_AV_MMTYPE_WR_MOD_REQ, "Write Module Data Request" },
638 { HOMEPLUG_AV_MMTYPE_WR_MOD_CNF, "Write Module Data Confirmation" },
639 { HOMEPLUG_AV_MMTYPE_WR_MOD_IND, "Write Module Data Indicate" },
640 { HOMEPLUG_AV_MMTYPE_RD_MOD_REQ, "Read Module Data Request" },
641 { HOMEPLUG_AV_MMTYPE_RD_MOD_CNF, "Read Module Data Confirmation" },
642 { HOMEPLUG_AV_MMTYPE_NVM_MOD_REQ, "Write Module Data to NVM Request" },
643 { HOMEPLUG_AV_MMTYPE_NVM_MOD_CNF, "Write Module Data to NVM Confirmation" },
644 { HOMEPLUG_AV_MMTYPE_WD_RPT_REQ, "Get Watchdog Report Request" },
645 { HOMEPLUG_AV_MMTYPE_WD_RPT_IND, "Get Watchdog Report Indicate" },
646 { HOMEPLUG_AV_MMTYPE_LNK_STATS_REQ, "Link Statistics Request" },
647 { HOMEPLUG_AV_MMTYPE_LNK_STATS_CNF, "Link Statistics Confirmation" },
648 { HOMEPLUG_AV_MMTYPE_SNIFFER_REQ, "Sniffer Request" },
649 { HOMEPLUG_AV_MMTYPE_SNIFFER_CNF, "Sniffer Confirmation" },
650 { HOMEPLUG_AV_MMTYPE_SNIFFER_IND, "Sniffer Indicate" },
651 { HOMEPLUG_AV_MMTYPE_NW_INFO_REQ, "Network Info Request" },
652 { HOMEPLUG_AV_MMTYPE_NW_INFO_CNF, "Network Info Confirmation" },
653 { HOMEPLUG_AV_MMTYPE_CP_RPT_REQ, "Check Points Request" },
654 { HOMEPLUG_AV_MMTYPE_CP_RPT_IND, "Check Points Indicate" },
655 { HOMEPLUG_AV_MMTYPE_FR_LBK_REQ, "Loopback Request" },
656 { HOMEPLUG_AV_MMTYPE_FR_LBK_CNF, "Loopback Confirmation" },
657 { HOMEPLUG_AV_MMTYPE_LBK_STAT_REQ, "Loopback Status Request" },
658 { HOMEPLUG_AV_MMTYPE_LBK_STAT_CNF, "Loopback Status Confirmation" },
659 { HOMEPLUG_AV_MMTYPE_SET_KEY_REQ, "Set Encryption Key Request" },
660 { HOMEPLUG_AV_MMTYPE_SET_KEY_CNF, "Set Encryption Key Confirmation" },
661 { HOMEPLUG_AV_MMTYPE_MFG_STRING_REQ, "Get Manufacturer String Request" },
662 { HOMEPLUG_AV_MMTYPE_MFG_STRING_CNF, "Get Manufacturer String Confirmation" },
663 { HOMEPLUG_AV_MMTYPE_RD_CBLOCK_REQ, "Read Configuration Block Request" },
664 { HOMEPLUG_AV_MMTYPE_RD_CBLOCK_CNF, "Read Configuration Block Confirmation" },
665 { HOMEPLUG_AV_MMTYPE_SET_SDRAM_REQ, "Set SDRAM Configuration Request" },
666 { HOMEPLUG_AV_MMTYPE_SET_SDRAM_CNF, "Set SDRAM Configuration Confirmation" },
667 { HOMEPLUG_AV_MMTYPE_HOST_ACTION_IND, "Embedded Host Action Required Indication" },
668 { HOMEPLUG_AV_MMTYPE_HOST_ACTION_RSP, "Embedded Host Action Required Respons" },
669 { HOMEPLUG_AV_MMTYPE_OP_ATTR_REQ, "Get Device Attributes Request" },
670 { HOMEPLUG_AV_MMTYPE_OP_ATTR_CNF, "Get Device Attributes Confirmation" },
671 { HOMEPLUG_AV_MMTYPE_GET_ENET_PHY_REQ, "Get Ethernet PHY Settings Request" },
672 { HOMEPLUG_AV_MMTYPE_GET_ENET_PHY_CNF, "Get Ethernet PHY Settings Confirmation" },
673 { HOMEPLUG_AV_MMTYPE_TONE_MAP_TX_REQ, "Tone Map Tx Characteristics Request" },
674 { HOMEPLUG_AV_MMTYPE_TONE_MAP_TX_CNF, "Tone Map Tx Characteristics Confirmation" },
675 { HOMEPLUG_AV_MMTYPE_TONE_MAP_RX_REQ, "Tone Map Rx Characteristics Request" },
676 { HOMEPLUG_AV_MMTYPE_TONE_MAP_RX_CNF, "Tone Map Rx Characteristics Confirmation" },
677 { 0, NULL }
679 static value_string_ext homeplug_av_mmtype_vals_ext = VALUE_STRING_EXT_INIT(homeplug_av_mmtype_vals);
681 /* Versions */
682 #define HOMEPLUG_AV_MMVER_MASK 0x01
683 #define HOMEPLUG_AV_MMVER_1_0 0x00
684 #define HOMEPLUG_AV_MMVER_1_1 0x01
686 static const value_string homeplug_av_mmver_vals[] = {
687 { HOMEPLUG_AV_MMVER_1_0, "1.0" },
688 { HOMEPLUG_AV_MMVER_1_1, "1.1" },
689 { 0, NULL }
692 /* MMTYPE LSB Values */
693 #define HOMEPLUG_AV_MMTYPE_LSB_MASK 0x03
695 static const value_string homeplug_av_mmtype_lsb_vals[] = {
696 { 0x00, "Request" },
697 { 0x01, "Confirm" },
698 { 0x02, "Indication" },
699 { 0x03, "Response" },
700 { 0, NULL }
703 /* MMTYPE MSB Values */
704 #define HOMEPLUG_AV_MMTYPE_MSB_STA_CCO 0x00
705 #define HOMEPLUG_AV_MMTYPE_MSB_PROXY 0x01
706 #define HOMEPLUG_AV_MMTYPE_MSB_CCO_CCO 0x02
707 #define HOMEPLUG_AV_MMTYPE_MSB_STA_STA 0x03
708 #define HOMEPLUG_AV_MMTYPE_MSB_MANUF 0x04
709 #define HOMEPLUG_AV_MMTYPE_MSB_VENDOR 0x05
710 #define HOMEPLUG_AV_MMTYPE_MSB_RSV 0x06
711 #define HOMEPLUG_AV_MMTYPE_MSB_MASK 0x06
712 #define HOMEPLUG_AV_MMTYPE_MSB_SHIFT (5)
714 static const value_string homeplug_av_mmtype_msb_vals[] = {
715 { HOMEPLUG_AV_MMTYPE_MSB_STA_CCO, "STA - Central Coordinator" },
716 { HOMEPLUG_AV_MMTYPE_MSB_PROXY, "Proxy Coordinator" },
717 { HOMEPLUG_AV_MMTYPE_MSB_CCO_CCO, "Central Coordinator - Central Coordinator" },
718 { HOMEPLUG_AV_MMTYPE_MSB_STA_STA, "STA - STA" },
719 { HOMEPLUG_AV_MMTYPE_MSB_MANUF, "Manufacturer Specific" },
720 { HOMEPLUG_AV_MMTYPE_MSB_VENDOR, "Vendor Specific" },
721 { 0, NULL }
724 #define HOMEPLUG_AV_CC_STA_NET_MASK 0x01
726 static const value_string homeplug_av_cc_sta_net_type_vals[] = {
727 { 0x00, "Different network" },
728 { 0x01, "Same network" },
729 { 0, NULL }
732 static const value_string homeplug_av_sig_level_vals[] = {
733 { 0x00, "N/A" },
734 { 0x01, "> - 10 dB, but <= 0 dB" },
735 { 0x02, "> - 15 dB, but <= -10 dB" },
736 { 0x03, "> - 20 dB, but <= -15 dB" },
737 { 0x04, "> - 25 dB, but <= -20 dB" },
738 { 0x05, "> - 30 dB, but <= -25 dB" },
739 { 0x06, "> - 35 dB, but <= -30 dB" },
740 { 0x07, "> - 40 dB, but <= -35 dB" },
741 { 0x08, "> - 45 dB, but <= -40 dB" },
742 { 0x09, "> - 50 dB, but <= -45 dB" },
743 { 0x0A, "> - 55 dB, but <= -50 dB" },
744 { 0x0B, "> - 60 dB, but <= -55 dB" },
745 { 0x0C, "> - 65 dB, but <= -60 dB" },
746 { 0x0D, "> - 70 dB, but <= -65 dB" },
747 { 0x0E, "> - 75 dB, but <= -70 dB" },
748 { 0x0F, "<= -75 dB" },
749 { 0, NULL }
751 static value_string_ext homeplug_av_sig_level_vals_ext = VALUE_STRING_EXT_INIT(homeplug_av_sig_level_vals);
753 #define HOMEPLUG_AV_CCO_STATUS_MASK 0x07
755 static const value_string homeplug_av_cco_status_vals[] = {
756 { 0x00, "Unknown" },
757 { 0x01, "Non-coordinating Network" },
758 { 0x02, "Coordinating, group status unknown" },
759 { 0x03, "Coordinating network in the same group" },
760 { 0x04, "Coordinating network not in the same group" },
761 { 0, NULL }
764 #define HOMEPLUG_AV_NW_INFO_ROLE_MASK 0x03
766 static const value_string homeplug_av_nw_info_role_vals[] = {
767 { 0x00, "Station" },
768 { 0x01, "Proxy coordinator" },
769 { 0x02, "Central coordinator" },
770 { 0, NULL }
773 #define HOMEPLUG_AV_NW_INFO_NID_MASK 0x01
775 static const value_string homeplug_nw_info_access_vals[] = {
776 { 0x00, "In-home" },
777 { 0x01, "Access" },
778 { 0, NULL }
781 #define HOMEPLUG_AV_PEKS_MASK 0x0F
783 static const value_string homeplug_av_peks_vals[] = {
784 { 0x00, "Destination STA's DAK" },
785 { 0x01, "NMK known to STA" },
786 { 0x02, "TEK Index 0" },
787 { 0x03, "TEK Index 1" },
788 { 0x04, "TEK Index 2" },
789 { 0x05, "TEK Index 3" },
790 { 0x06, "TEK Index 4" },
791 { 0x07, "TEK Index 5" },
792 { 0x08, "TEK Index 6" },
793 { 0x09, "TEK Index 7" },
794 { 0x0A, "TEK Index 8" },
795 { 0x0B, "TEK Index 9" },
796 { 0x0C, "TEK Index 10" },
797 { 0x0D, "TEK Index 11" },
798 { 0x0E, "TEK Index 12" },
799 { 0x0F, "No key" },
800 { 0, NULL }
802 static value_string_ext homeplug_av_peks_vals_ext = VALUE_STRING_EXT_INIT(homeplug_av_peks_vals);
804 #define HOMEPLUG_AV_AVLN_STATUS_MASK 0x0F
806 static const value_string homeplug_av_avln_status_vals[] = {
807 { 0x00, "Unassociated and Level-0 CCo capable" },
808 { 0x01, "Unassociated and Level-1 CCo capable" },
809 { 0x02, "Unassociated and Level-2 CCo capable" },
810 { 0x03, "Unassociated and Level-3 CCo capable" },
811 { 0x04, "Associated but not PCo capable" },
812 { 0x05, "Associated but and PCo capable" },
813 { 0x06, "Reserved" },
814 { 0x07, "Reserved" },
815 { 0x08, "CCo of an AV Logical Network" },
816 { 0, NULL }
819 #define HOMEPLUG_AV_PID_AUTH_STA 0x00
820 #define HOMEPLUG_AV_PID_PROV_AUTH_NEK 0x01
821 #define HOMEPLUG_AV_PID_PROV_AUTH_DAK 0x02
822 #define HOMEPLUG_AV_PID_PROV_AUTH_UKE 0x03
823 #define HOMEPLUG_AV_PID_HLE 0x04
824 #define HOMEPLUG_AV_PID_MASK 0x07
826 static const value_string homeplug_av_pid_vals[] = {
827 { HOMEPLUG_AV_PID_AUTH_STA, "Authentication request by new STA" },
828 { HOMEPLUG_AV_PID_PROV_AUTH_NEK, "Provision authenticated STA with new NEK by CCo" },
829 { HOMEPLUG_AV_PID_PROV_AUTH_DAK, "Provision STA with NMK using DAK" },
830 { HOMEPLUG_AV_PID_PROV_AUTH_UKE, "Provision STA with NMK using UKE" },
831 { HOMEPLUG_AV_PID_HLE, "HLE" },
832 { 0, NULL }
835 #define HOMEPLUG_AV_KEY_TYPE_DAK 0x00
836 #define HOMEPLUG_AV_KEY_TYPE_NMK 0x01
837 #define HOMEPLUG_AV_KEY_TYPE_NEK 0x02
838 #define HOMEPLUG_AV_KEY_TYPE_TEK 0x03
839 #define HOMEPLUG_AV_KEY_TYPE_HASH 0x04
840 #define HOMEPLUG_AV_KEY_TYPE_NONE 0x05
841 #define HOMEPLUG_AV_KEY_TYPE_MASK 0x07
843 static const value_string homeplug_av_key_type_vals[] = {
844 { HOMEPLUG_AV_KEY_TYPE_DAK, "DAK" },
845 { HOMEPLUG_AV_KEY_TYPE_NMK, "NMK" },
846 { HOMEPLUG_AV_KEY_TYPE_NEK, "NEK" },
847 { HOMEPLUG_AV_KEY_TYPE_TEK, "TEK" },
848 { HOMEPLUG_AV_KEY_TYPE_HASH, "Hash Key" },
849 { HOMEPLUG_AV_KEY_TYPE_NONE, "Nonce only (no key)" },
850 { 0, NULL }
853 #define HOMEPLUG_AV_DEV_ID_MASK 0xff
855 static const value_string homeplug_av_dev_id_vals[] = {
856 { 0x00, "Unknown" },
857 { 0x01, "INT6000" },
858 { 0x02, "INT6300" },
859 { 0x03, "INT6400" },
860 { 0x04, "AR7400" },
861 { 0x05, "AR6405" },
862 { 0x20, "QCA7450/QCA7420" },
863 { 0x21, "QCA6410/QCA6411" },
864 { 0x22, "QCA7000" },
865 { 0, NULL }
868 #define HOMEPLUG_AV_REQ_TYPE_MASK 0x01
870 static const value_string homeplug_av_req_type_vals[] = {
871 { 0x00, "Direct" },
872 { 0x01, "Relayed" },
873 { 0, NULL }
876 #define HOMEPLUG_AV_KEY_RESULT_MASK 0x03
878 static const value_string homeplug_av_key_result_vals[] = {
879 { 0x00, "Key granted" },
880 { 0x01, "Request refused" },
881 { 0x02, "Unsupported method/key type" },
882 { 0, NULL }
885 #define HOMEPLUG_AV_LINEFREQ_MASK 0x03
887 static const value_string homeplug_av_linefreq_vals[] = {
888 { 0x00, "Unknown frequency" },
889 { 0x01, "50Hz" },
890 { 0x02, "60Hz" },
891 { 0, NULL }
894 #define HOMEPLUG_AV_ZEROCROSS_MASK 0x03
896 static const value_string homeplug_av_zerocrossing_vals[] = {
897 { 0x00, "Not yet detected" },
898 { 0x01, "Detected" },
899 { 0x02, "Missing" },
900 { 0, NULL }
903 #define HOMEPLUG_AV_ENET_PHY_SPEED_MASK 0x03
905 static const value_string homeplug_av_enet_phy_speed_vals[] = {
906 { 0x00, "10 Mbits/sec" },
907 { 0x01, "100 Mbits/sec" },
908 { 0x02, "1 Gbits/sec" },
909 { 0, NULL }
912 #define HOMEPLUG_AV_ENET_PHY_DUPLEX_MASK 0x01
914 static const value_string homeplug_av_enet_phy_duplex_vals[] = {
915 { 0x00, "Half" },
916 { 0x01, "Full" },
917 { 0, NULL }
920 #define HOMEPLUG_AV_ENET_PHY_MCONTROL_MASK 0x01
922 static const value_string homeplug_av_enet_phy_mcontrol_vals[] = {
923 { 0x00, "Read" },
924 { 0x01, "Write" },
925 { 0, NULL }
928 static const value_string homeplug_av_wr_rd_mem_status_vals[] = {
929 { 0x00, "Success" },
930 { 0x10, "Invalid Address" },
931 { 0x14, "Invalid Length" },
932 { 0, NULL }
935 static const value_string homeplug_av_mac_module_id_vals[] = {
936 { 0x00, "MAC Soft-Loader Image" },
937 { 0x01, "MAC Software Image" },
938 { 0x02, "PIB" },
939 { 0x10, "Write Alternate Flash Location" },
940 { 0, NULL }
943 static const value_string homeplug_av_st_mac_status_vals[] = {
944 { 0x00, "Success" },
945 { 0x10, "Invalid Module ID" },
946 { 0x14, "Invalid Command" },
947 { 0, NULL }
950 static const value_string homeplug_av_get_nvm_status_vals[] = {
951 { 0x00, "Success" },
952 { 0x10, "NVM Not Present" },
953 { 0, NULL }
956 static const value_string homeplug_av_rs_dev_status_vals[] = {
957 { 0x00, "Success" },
958 { 0x01, "NVM Not Present" },
959 { 0, NULL }
962 static const value_string homeplug_av_wr_rd_mod_cnf_status_vals[] = {
963 { 0x00, "Success" },
964 { 0x10, "Invalid Module ID" },
965 { 0x12, "Invalid Length" },
966 { 0x14, "Invalid Checksum" },
967 { 0x18, "Bad Header Checksum" },
968 { 0x1C, "Invalid Length" },
969 { 0x20, "Unexpected Offset" },
970 { 0, NULL }
973 static const value_string homeplug_av_wr_mod_ind_status_vals[] = {
974 { 0x00, "Successful module update" },
975 { 0x10, "Update occurred but not successful" },
976 { 0, NULL }
979 static const value_string homeplug_av_mod_nvm_status_vals[] = {
980 { 0x00, "Success" },
981 { 0x10, "Invalid Module ID" },
982 { 0x14, "NVM Module Not Present" },
983 { 0x18, "NVM Too Small" },
984 { 0x1C, "Invalid Header Checksum" },
985 { 0x20, "Invalid Section Mismatch" },
986 { 0, NULL }
989 #define HOMEPLUG_AV_RPT_CLR_MASK 0x01
991 static const value_string homeplug_av_rpt_clr_vals[] = {
992 { 0x00, "Get Report" },
993 { 0x01, "Get Report and Clear" },
994 { 0, NULL }
997 #define HOMEPLUG_AV_GEN_STATUS_MASK 0x03
999 static const value_string homeplug_av_generic_status_vals[] = {
1000 { 0x00, "Success" },
1001 { 0x01, "Failure" },
1002 { 0x02, "Not supported" },
1003 { 0, NULL }
1006 #define HOMEPLUG_AV_LNK_STATS_MCTL_MASK 0x01
1008 static const value_string homeplug_av_lnk_stats_mctrl_vals[] = {
1009 { 0x00, "Read" },
1010 { 0x01, "Clear" },
1011 { 0, NULL }
1014 #define HOMEPLUG_AV_LNK_STATS_DIR_TX 0x00
1015 #define HOMEPLUG_AV_LNK_STATS_DIR_RX 0x01
1016 #define HOMEPLUG_AV_LNK_STATS_DIR_TX_RX 0x02
1017 #define HOMEPLUG_AV_LNK_STATS_DIR_MASK 0x03
1019 static const value_string homeplug_av_lnk_stats_dir_vals[] = {
1020 { HOMEPLUG_AV_LNK_STATS_DIR_TX, "Tx" },
1021 { HOMEPLUG_AV_LNK_STATS_DIR_RX, "Rx" },
1022 { HOMEPLUG_AV_LNK_STATS_DIR_TX_RX, "Tx/Rx" },
1023 { 0, NULL }
1026 static const value_string homeplug_av_lnk_stats_lid_vals[] = {
1027 { 0x00, "CSMA Channel Access Priority 0" },
1028 { 0x01, "CSMA Channel Access Priority 1" },
1029 { 0x02, "CSMA Channel Access Priority 2" },
1030 { 0x03, "CSMA Channel Access Priority 3" },
1031 { 0xF8, "Sum of all CSMA stats for Peer Node" },
1032 { 0xFB, "Reserved" },
1033 { 0xFC, "Sum of all CSMA stats" },
1034 { 0, NULL }
1037 #define HOMEPLUG_AV_LNK_STATS_STATUS_SUCCESS 0x00
1038 #define HOMEPLUG_AV_LNK_STATS_STATUS_INV_CTRL 0x01
1039 #define HOMEPLUG_AV_LNK_STATS_STATUS_INV_DIR 0x02
1040 #define HOMEPLUG_AV_LNK_STATS_STATUS_INV_LID 0x10
1041 #define HOMEPLUG_AV_LNK_STATS_STATUS_INV_MAC 0x20
1043 static const value_string homeplug_av_lnk_status_vals[] = {
1044 { HOMEPLUG_AV_LNK_STATS_STATUS_SUCCESS, "Success" },
1045 { HOMEPLUG_AV_LNK_STATS_STATUS_INV_CTRL, "Invalid Control" },
1046 { HOMEPLUG_AV_LNK_STATS_STATUS_INV_DIR, "Invalid Direction" },
1047 { HOMEPLUG_AV_LNK_STATS_STATUS_INV_LID, "Invalid Link ID" },
1048 { HOMEPLUG_AV_LNK_STATS_STATUS_INV_MAC, "Invalid MAC Address" },
1049 { 0, NULL }
1052 #define HOMEPLUG_AV_SNIFFER_CTRL_MASK 0x03
1054 static const value_string homeplug_av_sniffer_ctrl_vals[] = {
1055 { 0x00, "Disable" },
1056 { 0x01, "Enable" },
1057 { 0x02, "No change" },
1058 { 0, NULL }
1061 static const value_string homeplug_av_sniffer_status_vals[] = {
1062 { 0x00, "Success" },
1063 { 0x10, "Invalid Control" },
1064 { 0, NULL }
1067 static const value_string homeplug_av_sniffer_type_vals[] = {
1068 { 0x00, "Regular" },
1069 { 0, NULL }
1072 #define HOMEPLUG_AV_LBK_STATUS_MASK 0x01
1074 static const value_string homeplug_av_lbk_status_vals[] = {
1075 { 0x00, "Done" },
1076 { 0x01, "Looping frame" },
1077 { 0, NULL }
1080 static const value_string homeplug_av_set_key_peks_vals[] = {
1081 { 0x00, "Remote" },
1082 { 0x0F, "Local" },
1083 { 0, NULL }
1086 static const value_string homeplug_av_set_key_status_vals[] = {
1087 { 0x00, "Success" },
1088 { 0x10, "Invalid EKS" },
1089 { 0x11, "Invalid PKS" },
1090 { 0, NULL }
1093 static const value_string homeplug_av_cblock_status_vals[] = {
1094 { 0x00, "Success" },
1095 { 0x01, "Failure" },
1096 { 0x10, "No Flash" },
1097 { 0x30, "Invalid Checksum" },
1098 { 0x34, "BIST Failed" },
1099 { 0, NULL }
1102 #define HOMEPLUG_AV_NVM_IMG_TYPE_MASK 0x1F
1104 static const value_string homeplug_av_nvm_img_type_vals[] = {
1105 { 0x00, "Generic Image" },
1106 { 0x01, "Synopsis configuration" },
1107 { 0x02, "Denali configuration" },
1108 { 0x03, "Denali applet" },
1109 { 0x04, "Runtime firmware" },
1110 { 0x05, "OAS client" },
1111 { 0x06, "Custom image" },
1112 { 0x07, "Memory control applet" },
1113 { 0x08, "Power management applet" },
1114 { 0x09, "OAS client IP stack" },
1115 { 0x0A, "OAS client TR069" },
1116 { 0x0B, "SoftLoader" },
1117 { 0x0C, "Flash layout" },
1118 { 0x0D, "Unknown" },
1119 { 0x0E, "Chain manifest" },
1120 { 0x0F, "Runtime parameters" },
1121 { 0x10, "Custom module in scratch" },
1122 { 0x11, "Custom module update applet" },
1123 { 0, NULL }
1126 #define HOMEPLUG_AV_NVM_IGNORE_MASK_MASK 0x1FF
1128 static const value_string homeplug_av_nvm_ignore_mask_vals[] = {
1129 { 0x00, "INT6000" },
1130 { 0x01, "INT6300" },
1131 { 0x04, "INT6400" },
1132 { 0x10, "AR7400" },
1133 { 0x100, "AR7420" },
1134 { 0, NULL }
1137 #define HOMEPLUG_AV_HOST_ACTION_SOFT_LDR 0x00
1138 #define HOMEPLUG_AV_HOST_ACTION_FW_UPG_RDY 0x01
1139 #define HOMEPLUG_AV_HOST_ACTION_PIB_UP_RDY 0x02
1140 #define HOMEPLUG_AV_HOST_ACTION_FW_PIB_UP_RDY 0x03
1141 #define HOMEPLUG_AV_HOST_ACTION_BOOT_LDR 0x04
1143 static const value_string homeplug_av_host_action_vals[] = {
1144 { HOMEPLUG_AV_HOST_ACTION_SOFT_LDR, "Loader (Soft/Bootloader)" },
1145 { HOMEPLUG_AV_HOST_ACTION_FW_UPG_RDY, "Firmware Upgrade Ready" },
1146 { HOMEPLUG_AV_HOST_ACTION_PIB_UP_RDY, "PIB Update Ready" },
1147 { HOMEPLUG_AV_HOST_ACTION_FW_PIB_UP_RDY, "Firmware Upgrade and PIB Update Ready" },
1148 { HOMEPLUG_AV_HOST_ACTION_BOOT_LDR, "Loader (Bootloader)" },
1149 { 0, NULL }
1152 static const value_string homeplug_av_op_attr_report_vals[] = {
1153 { 0x00, "Binary" },
1154 { 0x01, "XML" },
1155 { 0, NULL }
1158 #define HOMEPLUG_AV_TONE_MAP_MAX_NUM_CARRIERS_A 1155
1159 #define HOMEPLUG_AV_TONE_MAP_MAX_NUM_CARRIERS_B 2880
1161 #define HOMEPLUG_AV_TONE_MAP_MASK 0x0f
1163 static const value_string homeplug_av_tone_map_vals[] = {
1164 { 0x00, "No modulation" },
1165 { 0x01, "BPSK" },
1166 { 0x02, "QPSK" },
1167 { 0x03, "8-QAM" },
1168 { 0x04, "16-QAM" },
1169 { 0x05, "64-QAM" },
1170 { 0x06, "256-QAM" },
1171 { 0x07, "1024-QAM" },
1172 { 0x08, "4096-QAM" },
1173 { 0, NULL }
1176 static const value_string homeplug_av_tone_map_status_vals[] = {
1177 { 0x00, "Success" },
1178 { 0x01, "Unknown MAC address" },
1179 { 0x02, "Unknown Tone Map slot" },
1180 { 0, NULL }
1183 #define HOMEPLUG_AV_COUPLING_MASK 0x0F
1185 static const value_string homeplug_av_coupling_vals[] = {
1186 { 0x00, "Primary" },
1187 { 0x01, "Alternate" },
1188 { 0, NULL }
1191 #define TVB_LEN_GREATEST 1
1192 #define TVB_LEN_UNDEF 0
1193 #define TVB_LEN_SHORTEST -1
1194 static int check_tvb_length(ptvcursor_t *cursor, const gint length)
1196 if (!cursor)
1197 return TVB_LEN_UNDEF;
1199 if (tvb_reported_length_remaining(ptvcursor_tvbuff(cursor),
1200 ptvcursor_current_offset(cursor)) < length)
1201 return TVB_LEN_SHORTEST;
1203 return TVB_LEN_GREATEST;
1206 static inline unsigned int homeplug_av_mmtype_msb_is_vendor(guint8 msb)
1208 return ((msb & (HOMEPLUG_AV_MMTYPE_MSB_VENDOR << HOMEPLUG_AV_MMTYPE_MSB_SHIFT)) ==
1209 (HOMEPLUG_AV_MMTYPE_MSB_VENDOR << HOMEPLUG_AV_MMTYPE_MSB_SHIFT));
1212 /* Dissection of MMHDR */
1213 static void
1214 dissect_homeplug_av_mmhdr(ptvcursor_t *cursor, guint8 *homeplug_av_mmver, guint16 *homeplug_av_mmtype)
1216 proto_item *ti;
1217 proto_tree *ti_mmtype;
1218 proto_tree *ti_vendor;
1219 proto_tree *ti_public;
1220 guint8 lsb, msb, mmv;
1222 mmv = tvb_get_guint8(ptvcursor_tvbuff(cursor),
1223 ptvcursor_current_offset(cursor));
1224 lsb = tvb_get_guint8(ptvcursor_tvbuff(cursor),
1225 ptvcursor_current_offset(cursor) + 1);
1226 msb = tvb_get_guint8(ptvcursor_tvbuff(cursor),
1227 ptvcursor_current_offset(cursor) + 2);
1229 *homeplug_av_mmver = mmv;
1230 *homeplug_av_mmtype = (msb << 8) | lsb;
1232 /* Header in HomePlug AV 1.1 is 2 bytes larger (Fragmentation information) */
1233 if (mmv)
1235 ti = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mmhdr, 5, ENC_NA);
1237 else
1239 ti = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mmhdr, 3, ENC_NA);
1242 if (!ptvcursor_tree(cursor))
1243 return;
1245 ptvcursor_push_subtree(cursor, ti, ett_homeplug_av_mmhdr);
1247 ptvcursor_add(cursor, hf_homeplug_av_mmhdr_mmver, 1, ENC_BIG_ENDIAN);
1248 ti_mmtype = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mmhdr_mmtype, 2, ENC_LITTLE_ENDIAN);
1250 ptvcursor_push_subtree(cursor, ti_mmtype, ett_homeplug_av_mmtype);
1252 ptvcursor_add(cursor, hf_homeplug_av_mmhdr_mmtype_lsb, 1, ENC_BIG_ENDIAN);
1253 ptvcursor_add(cursor, hf_homeplug_av_mmhdr_mmtype_msb, 1, ENC_BIG_ENDIAN);
1255 ptvcursor_pop_subtree(cursor);
1257 /* Fragmentation information is part of the header in HomePlug AV 1.1 */
1258 if (mmv)
1260 ti_public = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mmhdr_fmi, 2, ENC_LITTLE_ENDIAN);
1262 ptvcursor_push_subtree(cursor, ti_public, ett_homeplug_av_fmi);
1264 ptvcursor_add_no_advance(cursor, hf_homeplug_av_public_frag_count, 1, ENC_BIG_ENDIAN);
1265 ptvcursor_add(cursor, hf_homeplug_av_public_frag_index, 1, ENC_BIG_ENDIAN);
1266 ptvcursor_add(cursor, hf_homeplug_av_public_frag_seqnum, 1, ENC_BIG_ENDIAN);
1268 ptvcursor_pop_subtree(cursor);
1271 ptvcursor_pop_subtree(cursor);
1273 /* Vendor management frame */
1274 if (homeplug_av_mmtype_msb_is_vendor(msb))
1276 ti_vendor = ptvcursor_add_no_advance(cursor, hf_homeplug_av_vendor, -1, ENC_NA);
1278 ptvcursor_push_subtree(cursor, ti_vendor, ett_homeplug_av_vendor);
1280 ptvcursor_add(cursor, hf_homeplug_av_vendor_oui, 3, ENC_NA);
1282 ptvcursor_pop_subtree(cursor);
1284 /* Public management frame in HomePlug AV 1.0 */
1285 else if (!mmv)
1287 ti_public = ptvcursor_add_no_advance(cursor, hf_homeplug_av_public, -1, ENC_NA);
1289 ptvcursor_push_subtree(cursor, ti_public, ett_homeplug_av_public);
1291 ptvcursor_add_no_advance(cursor, hf_homeplug_av_public_frag_count, 1, ENC_BIG_ENDIAN);
1292 ptvcursor_add(cursor, hf_homeplug_av_public_frag_index, 1, ENC_BIG_ENDIAN);
1293 ptvcursor_add(cursor, hf_homeplug_av_public_frag_seqnum, 1, ENC_BIG_ENDIAN);
1295 ptvcursor_pop_subtree(cursor);
1299 /* Beacon body */
1300 static void
1301 dissect_homeplug_av_beacon(ptvcursor_t *cursor)
1303 proto_item *it;
1305 if (!ptvcursor_tree(cursor))
1306 return;
1308 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_bcn, -1, ENC_NA);
1310 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_bcn);
1312 ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_info_del_type, 1, ENC_BIG_ENDIAN);
1313 ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_info_access, 1, ENC_BIG_ENDIAN);
1314 ptvcursor_add(cursor, hf_homeplug_av_nw_info_snid, 1, ENC_BIG_ENDIAN);
1315 ptvcursor_add(cursor, hf_homeplug_av_bcn_bts, 4, ENC_LITTLE_ENDIAN);
1316 ptvcursor_add(cursor, hf_homeplug_av_bcn_bto_0, 2, ENC_LITTLE_ENDIAN);
1317 ptvcursor_add(cursor, hf_homeplug_av_bcn_bto_1, 2, ENC_LITTLE_ENDIAN);
1318 ptvcursor_add(cursor, hf_homeplug_av_bcn_bto_2, 2, ENC_LITTLE_ENDIAN);
1319 ptvcursor_add(cursor, hf_homeplug_av_bcn_bto_3, 2, ENC_LITTLE_ENDIAN);
1320 ptvcursor_add(cursor, hf_homeplug_av_nw_info_fccs_av, 3, ENC_NA);
1322 ptvcursor_pop_subtree(cursor);
1325 /* Frame control */
1326 static void
1327 dissect_homeplug_av_frame_control(ptvcursor_t *cursor)
1329 proto_item *it;
1331 if (!ptvcursor_tree(cursor))
1332 return;
1334 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc, -1, ENC_NA);
1336 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_fc);
1338 ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_info_del_type, 1, ENC_BIG_ENDIAN);
1339 ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_info_access, 1, ENC_BIG_ENDIAN);
1340 ptvcursor_add(cursor, hf_homeplug_av_nw_info_snid, 1, ENC_BIG_ENDIAN);
1341 ptvcursor_add(cursor, hf_homeplug_av_fc_stei, 1, ENC_BIG_ENDIAN);
1342 ptvcursor_add(cursor, hf_homeplug_av_fc_dtei, 1, ENC_BIG_ENDIAN);
1343 ptvcursor_add(cursor, hf_homeplug_av_fc_lid, 1, ENC_BIG_ENDIAN);
1344 ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_cfs, 1, ENC_BIG_ENDIAN);
1345 ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_bdf, 1, ENC_BIG_ENDIAN);
1346 ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_hp10df, 1, ENC_BIG_ENDIAN);
1347 ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_hp11df, 1, ENC_BIG_ENDIAN);
1348 ptvcursor_add(cursor, hf_homeplug_av_nw_info_peks, 1, ENC_BIG_ENDIAN);
1349 ptvcursor_add(cursor, hf_homeplug_av_fc_ppb, 1, ENC_BIG_ENDIAN);
1350 ptvcursor_add(cursor, hf_homeplug_av_fc_ble, 1, ENC_BIG_ENDIAN);
1351 ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_pbsz, 1, ENC_BIG_ENDIAN);
1352 ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_num_sym, 1, ENC_BIG_ENDIAN);
1353 ptvcursor_add(cursor, hf_homeplug_av_fc_tmi_av, 1, ENC_BIG_ENDIAN);
1354 ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_mpdu_cnt, 2, ENC_BIG_ENDIAN);
1355 ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_burst_cnt, 2, ENC_BIG_ENDIAN);
1356 ptvcursor_add(cursor, hf_homeplug_av_fc_fl_av, 2, ENC_LITTLE_ENDIAN);
1357 ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_clst, 1, ENC_BIG_ENDIAN);
1358 ptvcursor_add(cursor, hf_homeplug_av_fc_rg_len, 1, ENC_BIG_ENDIAN);
1359 ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_mfs_cmd_mgmt, 1, ENC_BIG_ENDIAN);
1360 ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_mfs_cmd_data, 1, ENC_BIG_ENDIAN);
1361 ptvcursor_add(cursor, hf_homeplug_av_fc_rsr, 1, ENC_BIG_ENDIAN);
1362 ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_mcf, 1, ENC_BIG_ENDIAN);
1363 ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_dccpcf, 1, ENC_BIG_ENDIAN);
1364 ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_mnbf, 1, ENC_BIG_ENDIAN);
1365 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
1366 ptvcursor_add(cursor, hf_homeplug_av_nw_info_fccs_av, 3, ENC_NA);
1368 ptvcursor_pop_subtree(cursor);
1371 static void
1372 dissect_homeplug_av_nw_info_sta(ptvcursor_t *cursor, gboolean vendor, guint homeplug_av_mmver)
1374 proto_item *it;
1376 if (!ptvcursor_tree(cursor))
1377 return;
1379 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_info_sta_info, -1, ENC_NA);
1381 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_nw_info_sta_info);
1383 ptvcursor_add(cursor, hf_homeplug_av_nw_info_sta_da, 6, ENC_NA);
1384 if (vendor) {
1385 ptvcursor_add(cursor, hf_homeplug_av_nw_info_sta_tei, 1, ENC_BIG_ENDIAN);
1387 if (homeplug_av_mmver == 1)
1388 ptvcursor_add(cursor, hf_homeplug_av_reserved, 3, ENC_NA);
1390 ptvcursor_add(cursor, hf_homeplug_av_nw_info_sta_bda, 6, ENC_NA);
1392 if (!homeplug_av_mmver)
1394 ptvcursor_add(cursor, hf_homeplug_av10_nw_info_sta_phy_dr_tx, 1, ENC_BIG_ENDIAN);
1395 ptvcursor_add(cursor, hf_homeplug_av10_nw_info_sta_phy_dr_rx, 1, ENC_BIG_ENDIAN);
1397 else if (homeplug_av_mmver == 1)
1399 ptvcursor_add(cursor, hf_homeplug_av11_nw_info_sta_phy_dr_tx, 2, ENC_LITTLE_ENDIAN);
1400 ptvcursor_add_no_advance(cursor, hf_homeplug_av11_nw_info_sta_cpling_tx, 1, ENC_BIG_ENDIAN);
1401 ptvcursor_add(cursor, hf_homeplug_av11_nw_info_sta_cpling_rx, 1, ENC_BIG_ENDIAN);
1402 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
1403 ptvcursor_add(cursor, hf_homeplug_av11_nw_info_sta_phy_dr_rx, 2, ENC_LITTLE_ENDIAN);
1404 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
1407 ptvcursor_pop_subtree(cursor);
1410 static void
1411 dissect_homeplug_av_nw_info_net(ptvcursor_t *cursor, gboolean vendor, guint8 homeplug_av_mmver)
1413 proto_item *it;
1415 if (!ptvcursor_tree(cursor))
1416 return;
1418 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_info_net_info, -1, ENC_NA);
1420 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_nw_info_net_info);
1422 ptvcursor_add(cursor, hf_homeplug_av_nw_info_nid, 7, ENC_NA);
1424 if (homeplug_av_mmver == 1)
1425 ptvcursor_add(cursor, hf_homeplug_av_reserved, 2, ENC_NA);
1427 ptvcursor_add(cursor, hf_homeplug_av_nw_info_snid, 1, ENC_BIG_ENDIAN);
1428 ptvcursor_add(cursor, hf_homeplug_av_nw_info_tei, 1, ENC_BIG_ENDIAN);
1430 if (homeplug_av_mmver == 1)
1431 ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
1433 ptvcursor_add(cursor, hf_homeplug_av_nw_info_sta_role, 1, ENC_BIG_ENDIAN);
1434 ptvcursor_add(cursor, hf_homeplug_av_nw_info_cco_mac, 6, ENC_NA);
1435 if (vendor) {
1436 ptvcursor_add(cursor, hf_homeplug_av_nw_info_cco_tei, 1, ENC_BIG_ENDIAN);
1438 if (homeplug_av_mmver == 1)
1439 ptvcursor_add(cursor, hf_homeplug_av_reserved, 3, ENC_NA);
1441 else
1443 ptvcursor_add(cursor, hf_homeplug_av_nw_info_access, 1, ENC_BIG_ENDIAN);
1444 ptvcursor_add(cursor, hf_homeplug_av_nw_info_num_coord, 1, ENC_BIG_ENDIAN);
1447 ptvcursor_pop_subtree(cursor);
1450 /* Public MMEs */
1451 static void
1452 dissect_homeplug_av_cc_sta_info(ptvcursor_t *cursor)
1454 proto_item *it;
1456 if (!ptvcursor_tree(cursor))
1457 return;
1459 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cc_sta_info, -1, ENC_NA);
1461 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cc_sta_info);
1463 ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_mac, 6, ENC_NA);
1464 ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_tei, 1, ENC_BIG_ENDIAN);
1465 ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_same_net, 1, ENC_BIG_ENDIAN);
1466 ptvcursor_add(cursor, hf_homeplug_av_nw_info_snid, 1, ENC_BIG_ENDIAN);
1467 ptvcursor_add(cursor, hf_homeplug_av_nw_info_cco_cap, 1, ENC_BIG_ENDIAN);
1468 ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_sig_level, 1, ENC_BIG_ENDIAN);
1469 ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_avg_ble, 1, ENC_BIG_ENDIAN);
1471 ptvcursor_pop_subtree(cursor);
1474 static void
1475 dissect_homeplug_av_cc_net_info(ptvcursor_t *cursor)
1477 proto_item *it;
1479 if (!ptvcursor_tree(cursor))
1480 return;
1482 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cc_net_info, -1, ENC_NA);
1484 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cc_net_info);
1486 ptvcursor_add(cursor, hf_homeplug_av_nw_info_nid, 7, ENC_NA);
1487 ptvcursor_add(cursor, hf_homeplug_av_nw_info_snid, 1, ENC_BIG_ENDIAN);
1488 ptvcursor_add(cursor, hf_homeplug_av_cc_net_info_hyb_mode, 1, ENC_BIG_ENDIAN);
1489 ptvcursor_add(cursor, hf_homeplug_av_cc_net_info_bcn_slots, 1, ENC_BIG_ENDIAN);
1490 ptvcursor_add(cursor, hf_homeplug_av_cc_net_info_cco_sts, 1, ENC_BIG_ENDIAN);
1491 ptvcursor_add(cursor, hf_homeplug_av_cc_net_info_bcn_ofs, 2, ENC_BIG_ENDIAN);
1493 ptvcursor_pop_subtree(cursor);
1496 static void
1497 dissect_homeplug_av_cc_disc_list_cnf(ptvcursor_t *cursor)
1499 proto_item *it;
1500 guint8 num_stas;
1501 guint8 sta;
1502 guint8 num_nets;
1503 guint8 net;
1505 if (!ptvcursor_tree(cursor))
1506 return;
1508 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cc_disc_list_cnf, -1, ENC_NA);
1510 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cc_disc_list_cnf);
1512 num_stas = tvb_get_guint8(ptvcursor_tvbuff(cursor),
1513 ptvcursor_current_offset(cursor));
1514 ptvcursor_add(cursor, hf_homeplug_av_cc_disc_list_sta_cnt, 1, ENC_BIG_ENDIAN);
1516 for (sta = 0; sta < num_stas; sta++) {
1517 dissect_homeplug_av_cc_sta_info(cursor);
1520 num_nets = tvb_get_guint8(ptvcursor_tvbuff(cursor),
1521 ptvcursor_current_offset(cursor));
1522 ptvcursor_add(cursor, hf_homeplug_av_cc_disc_list_net_cnt, 1, ENC_BIG_ENDIAN);
1524 for (net = 0; net < num_nets; net++) {
1525 dissect_homeplug_av_cc_net_info(cursor);
1528 ptvcursor_pop_subtree(cursor);
1531 static void
1532 dissect_homeplug_av_cm_enc_pld_ind(ptvcursor_t *cursor)
1534 proto_item *it;
1535 guint8 pid;
1537 if (!ptvcursor_tree(cursor))
1538 return;
1540 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_enc_pld_ind, -1, ENC_NA);
1542 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_enc_pld_ind);
1544 ptvcursor_add(cursor, hf_homeplug_av_nw_info_peks, 1, ENC_BIG_ENDIAN);
1545 ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_avlns, 1, ENC_BIG_ENDIAN);
1546 pid = tvb_get_guint8(ptvcursor_tvbuff(cursor),
1547 ptvcursor_current_offset(cursor));
1548 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN);
1549 ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN);
1550 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pmn, 1, ENC_BIG_ENDIAN);
1551 if (pid == HOMEPLUG_AV_PID_HLE) {
1552 ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_iv, 16, ENC_NA);
1553 } else {
1554 ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_uuid, 16, ENC_LITTLE_ENDIAN);
1556 ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_len, 2, ENC_LITTLE_ENDIAN);
1558 /* Encrypted payload follows */
1559 if (pid != HOMEPLUG_AV_PID_HLE) {
1560 ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_pld, -1, ENC_NA);
1563 ptvcursor_pop_subtree(cursor);
1566 static void
1567 dissect_homeplug_av_cm_enc_pld_rsp(ptvcursor_t *cursor)
1569 proto_item *it;
1571 if (!ptvcursor_tree(cursor))
1572 return;
1574 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_enc_pld_rsp, -1, ENC_NA);
1576 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_enc_pld_rsp);
1578 ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_rsp_result, 1, ENC_BIG_ENDIAN);
1579 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN);
1580 ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN);
1582 ptvcursor_pop_subtree(cursor);
1585 static void
1586 dissect_homeplug_av_cm_set_key_req(ptvcursor_t *cursor)
1588 proto_item *it;
1590 if (!ptvcursor_tree(cursor))
1591 return;
1593 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_set_key_req, -1, ENC_NA);
1595 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_set_key_req);
1597 ptvcursor_add(cursor, hf_homeplug_av_nw_info_key_type, 1, ENC_BIG_ENDIAN);
1598 ptvcursor_add(cursor, hf_homeplug_av_nw_info_my_nonce, 4, ENC_LITTLE_ENDIAN);
1599 ptvcursor_add(cursor, hf_homeplug_av_nw_info_your_nonce, 4, ENC_LITTLE_ENDIAN);
1600 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN);
1601 ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN);
1602 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pmn, 1, ENC_BIG_ENDIAN);
1603 ptvcursor_add(cursor, hf_homeplug_av_nw_info_cco_cap, 1, ENC_BIG_ENDIAN);
1604 ptvcursor_add(cursor, hf_homeplug_av_nw_info_nid, 7, ENC_NA);
1605 ptvcursor_add(cursor, hf_homeplug_av_nw_info_peks, 1, ENC_BIG_ENDIAN);
1606 ptvcursor_add(cursor, hf_homeplug_av_cm_set_key_req_nw_key, -1, ENC_NA);
1608 ptvcursor_pop_subtree(cursor);
1611 static void
1612 dissect_homeplug_av_cm_set_key_cnf(ptvcursor_t *cursor)
1614 proto_item *it;
1616 if (!ptvcursor_tree(cursor))
1617 return;
1619 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_set_key_cnf, -1, ENC_NA);
1621 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_set_key_cnf);
1623 ptvcursor_add(cursor, hf_homeplug_av_cm_set_key_cnf_result, 1, ENC_BIG_ENDIAN);
1624 ptvcursor_add(cursor, hf_homeplug_av_nw_info_my_nonce, 4, ENC_LITTLE_ENDIAN);
1625 ptvcursor_add(cursor, hf_homeplug_av_nw_info_your_nonce, 4, ENC_LITTLE_ENDIAN);
1626 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN);
1627 ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN);
1628 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pmn, 1, ENC_BIG_ENDIAN);
1629 ptvcursor_add(cursor, hf_homeplug_av_nw_info_cco_cap, 1, ENC_BIG_ENDIAN);
1631 ptvcursor_pop_subtree(cursor);
1634 static void
1635 dissect_homeplug_av_cm_get_key_req(ptvcursor_t *cursor)
1637 proto_item *it;
1638 guint8 key_type;
1640 if (!ptvcursor_tree(cursor))
1641 return;
1643 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_get_key_req, -1, ENC_NA);
1645 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_get_key_req);
1648 ptvcursor_add(cursor, hf_homeplug_av_cm_get_key_req_type, 1, ENC_BIG_ENDIAN);
1649 key_type = tvb_get_guint8(ptvcursor_tvbuff(cursor),
1650 ptvcursor_current_offset(cursor));
1651 ptvcursor_add(cursor, hf_homeplug_av_nw_info_key_type, 1, ENC_BIG_ENDIAN);
1652 ptvcursor_add(cursor, hf_homeplug_av_nw_info_nid, 7, ENC_NA);
1653 ptvcursor_add(cursor, hf_homeplug_av_nw_info_my_nonce, 4, ENC_LITTLE_ENDIAN);
1654 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN);
1655 ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN);
1656 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pmn, 1, ENC_BIG_ENDIAN);
1657 if (key_type == HOMEPLUG_AV_KEY_TYPE_HASH) {
1658 ptvcursor_add(cursor, hf_homeplug_av_cm_get_key_req_has_key, -1, ENC_NA);
1661 ptvcursor_pop_subtree(cursor);
1664 static void
1665 dissect_homeplug_av_cm_get_key_cnf(ptvcursor_t *cursor)
1667 proto_item *it;
1669 if (!ptvcursor_tree(cursor))
1670 return;
1672 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_get_key_cnf, -1, ENC_NA);
1674 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_get_key_cnf);
1676 ptvcursor_add(cursor, hf_homeplug_av_cm_get_key_cnf_result, 1, ENC_BIG_ENDIAN);
1677 ptvcursor_add(cursor, hf_homeplug_av_cm_get_key_cnf_rtype, 1, ENC_BIG_ENDIAN);
1678 ptvcursor_add(cursor, hf_homeplug_av_nw_info_my_nonce, 4, ENC_LITTLE_ENDIAN);
1679 ptvcursor_add(cursor, hf_homeplug_av_nw_info_your_nonce, 4, ENC_LITTLE_ENDIAN);
1680 ptvcursor_add(cursor, hf_homeplug_av_nw_info_nid, 7, ENC_NA);
1681 ptvcursor_add(cursor, hf_homeplug_av_nw_info_peks, 1, ENC_BIG_ENDIAN);
1682 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN);
1683 ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN);
1684 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pmn, 1, ENC_BIG_ENDIAN);
1685 ptvcursor_add(cursor, hf_homeplug_av_cm_get_key_cnf_key, -1, ENC_NA);
1687 ptvcursor_pop_subtree(cursor);
1690 static void
1691 dissect_homeplug_av_get_brg_infos_cnf(ptvcursor_t *cursor)
1693 proto_item *it;
1694 guint8 bridging;
1695 guint8 num_stas;
1696 guint8 sta;
1698 if (!ptvcursor_tree(cursor))
1699 return;
1701 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_brg_infos_cnf, -1, ENC_NA);
1703 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_brg_infos_cnf);
1705 bridging = tvb_get_guint8(ptvcursor_tvbuff(cursor),
1706 ptvcursor_current_offset(cursor));
1707 ptvcursor_add(cursor, hf_homeplug_av_brg_infos_cnf_brd, 1, ENC_BIG_ENDIAN);
1709 if (bridging) {
1710 ptvcursor_add(cursor, hf_homeplug_av_brg_infos_cnf_btei, 1, ENC_BIG_ENDIAN);
1712 num_stas = tvb_get_guint8(ptvcursor_tvbuff(cursor),
1713 ptvcursor_current_offset(cursor));
1714 ptvcursor_add(cursor, hf_homeplug_av_brg_infos_cnf_num_stas, 1, ENC_BIG_ENDIAN);
1716 for (sta = 0; sta < num_stas; sta++) {
1717 ptvcursor_add(cursor, hf_homeplug_av_brg_infos_cnf_mac, 6, ENC_NA);
1721 ptvcursor_pop_subtree(cursor);
1724 static void
1725 dissect_homeplug_av_nw_infos_cnf(ptvcursor_t *cursor)
1727 proto_item *it;
1728 guint8 num_avlns;
1729 guint8 net;
1731 if (!ptvcursor_tree(cursor))
1732 return;
1734 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_nw_infos_cnf, -1, ENC_NA);
1736 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_nw_infos_cnf);
1738 num_avlns = tvb_get_guint8(ptvcursor_tvbuff(cursor),
1739 ptvcursor_current_offset(cursor));
1740 ptvcursor_add(cursor, hf_homeplug_av_nw_info_num_avlns, 1, ENC_BIG_ENDIAN);
1742 for (net = 0; net < num_avlns; net++) {
1743 /* Force HomePlug AV 1.0 layout here */
1744 dissect_homeplug_av_nw_info_net(cursor, FALSE, 0);
1747 ptvcursor_pop_subtree(cursor);
1750 static void
1751 dissect_homeplug_av_nw_stats_cnf(ptvcursor_t *cursor)
1753 proto_item *it;
1754 guint8 num_stas;
1755 guint8 sta;
1757 if (!ptvcursor_tree(cursor))
1758 return;
1760 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_stats_cnf, -1, ENC_NA);
1762 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_nw_stats_cnf);
1764 num_stas = tvb_get_guint8(ptvcursor_tvbuff(cursor),
1765 ptvcursor_current_offset(cursor));
1766 ptvcursor_add(cursor, hf_homeplug_av_nw_info_num_stas, 1, ENC_BIG_ENDIAN);
1768 for (sta = 0; sta < num_stas; sta++) {
1769 /* Force HomePlug AV 1.0 layout here */
1770 dissect_homeplug_av_nw_info_sta(cursor, FALSE, 0);
1773 ptvcursor_pop_subtree(cursor);
1776 /* Intellon specific vendor MMEs */
1777 static void
1778 dissect_homeplug_av_get_sw_cnf(ptvcursor_t *cursor)
1780 proto_item *it;
1782 if (!ptvcursor_tree(cursor))
1783 return;
1785 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_get_sw_cnf, -1, ENC_NA);
1787 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_get_sw_cnf);
1789 ptvcursor_add(cursor, hf_homeplug_av_get_sw_cnf_status, 1, ENC_BIG_ENDIAN);
1790 ptvcursor_add(cursor, hf_homeplug_av_get_sw_cnf_dev_id, 1, ENC_BIG_ENDIAN);
1791 ptvcursor_add(cursor, hf_homeplug_av_get_sw_cnf_ver_len, 1, ENC_BIG_ENDIAN);
1792 ptvcursor_add(cursor, hf_homeplug_av_get_sw_cnf_ver_str, 64, ENC_ASCII|ENC_NA);
1793 ptvcursor_add(cursor, hf_homeplug_av_get_sw_cnf_upg, 1, ENC_BIG_ENDIAN);
1795 ptvcursor_pop_subtree(cursor);
1798 static void
1799 dissect_homeplug_av_wr_mem_req(ptvcursor_t *cursor)
1801 proto_item *it;
1803 if (!ptvcursor_tree(cursor))
1804 return;
1806 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wr_mem_req, -1, ENC_NA);
1808 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wr_mem_req);
1810 ptvcursor_add(cursor, hf_homeplug_av_mem_addr, 4, ENC_LITTLE_ENDIAN);
1811 ptvcursor_add(cursor, hf_homeplug_av_mem_len_32bits, 4, ENC_LITTLE_ENDIAN);
1812 ptvcursor_add_no_advance(cursor, hf_homeplug_av_mem_data, -1, ENC_NA);
1814 ptvcursor_pop_subtree(cursor);
1817 static void
1818 dissect_homeplug_av_wr_mem_cnf(ptvcursor_t *cursor)
1820 proto_item *it;
1822 if (!ptvcursor_tree(cursor))
1823 return;
1825 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wr_mem_cnf, -1, ENC_NA);
1827 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wr_mem_cnf);
1829 ptvcursor_add(cursor, hf_homeplug_av_mem_status, 1, ENC_BIG_ENDIAN);
1830 ptvcursor_add(cursor, hf_homeplug_av_mem_addr, 4, ENC_LITTLE_ENDIAN);
1831 ptvcursor_add(cursor, hf_homeplug_av_mem_len_32bits, 4, ENC_LITTLE_ENDIAN);
1833 ptvcursor_pop_subtree(cursor);
1836 static void
1837 dissect_homeplug_av_rd_mem_req(ptvcursor_t *cursor)
1839 proto_item *it;
1841 if (!ptvcursor_tree(cursor))
1842 return;
1844 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rd_mem_req, -1, ENC_NA);
1846 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rd_mem_req);
1848 ptvcursor_add(cursor, hf_homeplug_av_mem_addr, 4, ENC_LITTLE_ENDIAN);
1849 ptvcursor_add(cursor, hf_homeplug_av_mem_len_32bits, 4, ENC_LITTLE_ENDIAN);
1851 ptvcursor_pop_subtree(cursor);
1854 static void
1855 dissect_homeplug_av_rd_mem_cnf(ptvcursor_t *cursor)
1857 proto_item *it;
1859 if (!ptvcursor_tree(cursor))
1860 return;
1862 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rd_mem_cnf, -1, ENC_NA);
1864 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rd_mem_cnf);
1866 ptvcursor_add(cursor, hf_homeplug_av_mem_status, 1, ENC_BIG_ENDIAN);
1867 ptvcursor_add(cursor, hf_homeplug_av_mem_addr, 4, ENC_LITTLE_ENDIAN);
1868 ptvcursor_add(cursor, hf_homeplug_av_mem_len_32bits, 4, ENC_LITTLE_ENDIAN);
1869 ptvcursor_add_no_advance(cursor, hf_homeplug_av_mem_data, -1, ENC_NA);
1871 ptvcursor_pop_subtree(cursor);
1874 static void
1875 dissect_homeplug_av_st_mac_req(ptvcursor_t *cursor)
1877 proto_item *it;
1879 if (!ptvcursor_tree(cursor))
1880 return;
1882 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_st_mac_req, -1, ENC_NA);
1884 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_st_mac_req);
1886 ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
1887 ptvcursor_add(cursor, hf_homeplug_av_reserved, 3, ENC_NA);
1888 ptvcursor_add(cursor, hf_homeplug_av_st_mac_req_img_load, 4, ENC_LITTLE_ENDIAN);
1889 ptvcursor_add(cursor, hf_homeplug_av_st_mac_req_img_len, 4, ENC_LITTLE_ENDIAN);
1890 ptvcursor_add(cursor, hf_homeplug_av_st_mac_req_img_chksum, 4, ENC_LITTLE_ENDIAN);
1891 ptvcursor_add(cursor, hf_homeplug_av_st_mac_req_img_start, 4, ENC_LITTLE_ENDIAN);
1893 ptvcursor_pop_subtree(cursor);
1897 static void
1898 dissect_homeplug_av_st_mac_cnf(ptvcursor_t *cursor)
1900 proto_item *it;
1902 if (!ptvcursor_tree(cursor))
1903 return;
1905 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_st_mac_cnf, -1, ENC_NA);
1907 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_st_mac_cnf);
1909 ptvcursor_add(cursor, hf_homeplug_av_st_mac_cnf_status, 1, ENC_BIG_ENDIAN);
1910 ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
1912 ptvcursor_pop_subtree(cursor);
1915 static void
1916 dissect_homeplug_av_get_nvm_cnf(ptvcursor_t *cursor)
1918 proto_item *it;
1920 if (!ptvcursor_tree(cursor))
1921 return;
1923 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_get_nvm_cnf, -1, ENC_NA);
1925 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_get_nvm_cnf);
1927 ptvcursor_add(cursor, hf_homeplug_av_get_nvm_cnf_status, 1, ENC_BIG_ENDIAN);
1928 ptvcursor_add(cursor, hf_homeplug_av_get_nvm_cnf_nvm_type, 4, ENC_LITTLE_ENDIAN);
1929 ptvcursor_add(cursor, hf_homeplug_av_get_nvm_cnf_nvm_page, 4, ENC_LITTLE_ENDIAN);
1930 ptvcursor_add(cursor, hf_homeplug_av_get_nvm_cnf_nvm_block, 4, ENC_LITTLE_ENDIAN);
1931 ptvcursor_add(cursor, hf_homeplug_av_get_nvm_cnf_nvm_size, 4, ENC_LITTLE_ENDIAN);
1933 ptvcursor_pop_subtree(cursor);
1936 static void
1937 dissect_homeplug_av_rs_dev_cnf(ptvcursor_t *cursor)
1939 proto_item *it;
1941 if (!ptvcursor_tree(cursor))
1942 return;
1944 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rs_dev_cnf, -1, ENC_NA);
1946 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rs_dev_cnf);
1948 ptvcursor_add(cursor, hf_homeplug_av_rs_dev_cnf_status, 1, ENC_BIG_ENDIAN);
1950 ptvcursor_pop_subtree(cursor);
1953 static void dissect_homeplug_av_wr_mod_req(ptvcursor_t *cursor)
1955 proto_item *it;
1957 if (!ptvcursor_tree(cursor))
1958 return;
1960 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wr_mod_req, -1, ENC_NA);
1962 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wr_mod_req);
1964 ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
1965 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
1966 ptvcursor_add(cursor, hf_homeplug_av_mem_len_16bits, 2, ENC_LITTLE_ENDIAN);
1967 ptvcursor_add(cursor, hf_homeplug_av_mem_offset, 4, ENC_LITTLE_ENDIAN);
1968 ptvcursor_add(cursor, hf_homeplug_av_mem_checksum, 4, ENC_LITTLE_ENDIAN);
1969 ptvcursor_add_no_advance(cursor, hf_homeplug_av_mem_data, -1, ENC_NA);
1971 ptvcursor_pop_subtree(cursor);
1974 static void dissect_homeplug_av_wr_mod_cnf(ptvcursor_t *cursor)
1976 proto_item *it;
1978 if (!ptvcursor_tree(cursor))
1979 return;
1981 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wr_mod_cnf, -1, ENC_NA);
1983 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wr_mod_cnf);
1985 ptvcursor_add(cursor, hf_homeplug_av_wr_mod_cnf_status, 1, ENC_BIG_ENDIAN);
1986 ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
1987 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
1988 ptvcursor_add(cursor, hf_homeplug_av_mem_len_16bits, 2, ENC_LITTLE_ENDIAN);
1989 ptvcursor_add(cursor, hf_homeplug_av_mem_offset, 4, ENC_LITTLE_ENDIAN);
1991 ptvcursor_pop_subtree(cursor);
1994 static void dissect_homeplug_av_wr_mod_ind(ptvcursor_t *cursor)
1996 proto_item *it;
1998 if (!ptvcursor_tree(cursor))
1999 return;
2001 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wr_mod_ind, -1, ENC_NA);
2003 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wr_mod_ind);
2005 ptvcursor_add(cursor, hf_homeplug_av_wr_mod_ind_status, 1, ENC_BIG_ENDIAN);
2006 ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
2008 ptvcursor_pop_subtree(cursor);
2011 static void
2012 dissect_homeplug_av_rd_mod_req(ptvcursor_t *cursor)
2014 proto_item *it;
2016 if (!ptvcursor_tree(cursor))
2017 return;
2019 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rd_mod_req, -1, ENC_NA);
2021 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rd_mod_req);
2023 ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
2024 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
2025 ptvcursor_add(cursor, hf_homeplug_av_mem_len_16bits, 2, ENC_LITTLE_ENDIAN);
2026 ptvcursor_add(cursor, hf_homeplug_av_mem_offset, 4, ENC_LITTLE_ENDIAN);
2028 ptvcursor_pop_subtree(cursor);
2031 static void
2032 dissect_homeplug_av_rd_mod_cnf(ptvcursor_t *cursor)
2034 proto_item *it;
2036 if (!ptvcursor_tree(cursor))
2037 return;
2039 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rd_mod_cnf, -1, ENC_NA);
2041 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rd_mod_cnf);
2043 ptvcursor_add(cursor, hf_homeplug_av_rd_mod_cnf_status, 1, ENC_BIG_ENDIAN);
2044 ptvcursor_add(cursor, hf_homeplug_av_reserved, 3, ENC_NA);
2045 ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
2046 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
2047 ptvcursor_add(cursor, hf_homeplug_av_mem_len_16bits, 2, ENC_LITTLE_ENDIAN);
2048 ptvcursor_add(cursor, hf_homeplug_av_mem_offset, 4, ENC_LITTLE_ENDIAN);
2049 ptvcursor_add(cursor, hf_homeplug_av_mem_checksum, 4, ENC_LITTLE_ENDIAN);
2050 ptvcursor_add_no_advance(cursor, hf_homeplug_av_mem_data, -1, ENC_NA);
2052 ptvcursor_pop_subtree(cursor);
2055 static void
2056 dissect_homeplug_av_mod_nvm_req(ptvcursor_t *cursor)
2058 proto_item *it;
2060 if (!ptvcursor_tree(cursor))
2061 return;
2063 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mod_nvm_req, -1, ENC_NA);
2065 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_mod_nvm_req);
2067 ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
2069 ptvcursor_pop_subtree(cursor);
2072 static void
2073 dissect_homeplug_av_mod_nvm_cnf(ptvcursor_t *cursor)
2075 proto_item *it;
2077 if (!ptvcursor_tree(cursor))
2078 return;
2080 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mod_nvm_cnf, -1, ENC_NA);
2082 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_mod_nvm_cnf);
2084 ptvcursor_add(cursor, hf_homeplug_av_mod_nvm_cnf_status, 1, ENC_BIG_ENDIAN);
2085 ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
2087 ptvcursor_pop_subtree(cursor);
2090 static void
2091 dissect_homeplug_av_wd_rpt_req(ptvcursor_t *cursor)
2093 proto_item *it;
2095 if (!ptvcursor_tree(cursor))
2096 return;
2098 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wd_rpt_req, -1, ENC_NA);
2100 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wd_rpt_req);
2102 ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_req_session_id, 2, ENC_LITTLE_ENDIAN);
2103 ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_req_clr, 1, ENC_BIG_ENDIAN);
2105 ptvcursor_pop_subtree(cursor);
2108 static void
2109 dissect_homeplug_av_wd_rpt_ind(ptvcursor_t *cursor)
2111 proto_item *it;
2113 if (!ptvcursor_tree(cursor))
2114 return;
2116 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wd_rpt_ind, -1, ENC_NA);
2118 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wd_rpt_ind);
2120 ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_status, 1, ENC_BIG_ENDIAN);
2121 ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_session_id, 2, ENC_LITTLE_ENDIAN);
2122 ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_num_parts, 1, ENC_BIG_ENDIAN);
2123 ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_curr_part, 1, ENC_BIG_ENDIAN);
2124 ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_rdata_len, 2, ENC_LITTLE_ENDIAN);
2125 ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_rdata_ofs, 1, ENC_BIG_ENDIAN);
2126 ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_rdata, -1, ENC_NA);
2128 ptvcursor_pop_subtree(cursor);
2131 static void
2132 dissect_homeplug_av_lnk_stats_req(ptvcursor_t *cursor)
2134 proto_item *it;
2136 if (!ptvcursor_tree(cursor))
2137 return;
2139 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_lnk_stats_req, -1, ENC_NA);
2141 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_lnk_stats_req);
2143 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_req_mcontrol, 1, ENC_BIG_ENDIAN);
2144 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_req_dir, 1, ENC_BIG_ENDIAN);
2145 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_req_lid, 1, ENC_BIG_ENDIAN);
2146 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_req_macaddr, 6, ENC_NA);
2148 ptvcursor_pop_subtree(cursor);
2151 static void
2152 dissect_homeplug_av_lnk_stats_tx(ptvcursor_t *cursor)
2154 proto_item *it;
2156 if (!ptvcursor_tree(cursor))
2157 return;
2159 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_lnk_stats_tx, -1, ENC_NA);
2161 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_lnk_stats_tx);
2163 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_tx_mpdu_ack, 8, ENC_LITTLE_ENDIAN);
2164 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_tx_mpdu_col, 8, ENC_LITTLE_ENDIAN);
2165 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_tx_mpdu_fai, 8, ENC_LITTLE_ENDIAN);
2166 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_tx_pbs_pass, 8, ENC_LITTLE_ENDIAN);
2167 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_tx_pbs_fail, 8, ENC_LITTLE_ENDIAN);
2169 ptvcursor_pop_subtree(cursor);
2172 static void
2173 dissect_homeplug_av_lnk_stats_rx_interval(ptvcursor_t *cursor)
2175 proto_item *it;
2177 if (!ptvcursor_tree(cursor))
2178 return;
2180 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rx_inv_stats, -1, ENC_NA);
2182 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_lnk_stats_rx_inv);
2184 ptvcursor_add(cursor, hf_homeplug_av_rx_inv_phy_rate, 1, ENC_BIG_ENDIAN);
2185 ptvcursor_add(cursor, hf_homeplug_av_rx_inv_pbs_pass, 8, ENC_LITTLE_ENDIAN);
2186 ptvcursor_add(cursor, hf_homeplug_av_rx_inv_pbs_fail, 8, ENC_LITTLE_ENDIAN);
2187 ptvcursor_add(cursor, hf_homeplug_av_rx_inv_tb_pass, 8, ENC_LITTLE_ENDIAN);
2188 ptvcursor_add(cursor, hf_homeplug_av_rx_inv_tb_fail, 8, ENC_LITTLE_ENDIAN);
2190 ptvcursor_pop_subtree(cursor);
2193 static void
2194 dissect_homeplug_av_lnk_stats_rx(ptvcursor_t *cursor)
2196 proto_item *it;
2197 guint8 num_rx_interval;
2198 guint8 interval;
2200 if (!ptvcursor_tree(cursor))
2201 return;
2203 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_lnk_stats_rx, -1, ENC_NA);
2205 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_lnk_stats_rx);
2207 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_mpdu_ack, 8, ENC_LITTLE_ENDIAN);
2208 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_mpdu_fai, 8, ENC_LITTLE_ENDIAN);
2209 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_pbs_pass, 8, ENC_LITTLE_ENDIAN);
2210 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_pbs_fail, 8, ENC_LITTLE_ENDIAN);
2211 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_tb_pass, 8, ENC_LITTLE_ENDIAN);
2212 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_tb_fail, 8, ENC_LITTLE_ENDIAN);
2213 num_rx_interval = tvb_get_guint8(ptvcursor_tvbuff(cursor),
2214 ptvcursor_current_offset(cursor));
2215 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_num_int, 1, ENC_BIG_ENDIAN);
2217 for (interval = 0; interval < num_rx_interval; interval++) {
2218 dissect_homeplug_av_lnk_stats_rx_interval(cursor);
2221 ptvcursor_pop_subtree(cursor);
2224 static void
2225 dissect_homeplug_av_lnk_stats_cnf(ptvcursor_t *cursor)
2227 proto_item *it;
2228 guint8 status;
2229 guint8 direction;
2231 if (!ptvcursor_tree(cursor))
2232 return;
2234 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_lnk_stats_cnf, -1, ENC_NA);
2236 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_lnk_stats_cnf);
2238 status = tvb_get_guint8(ptvcursor_tvbuff(cursor),
2239 ptvcursor_current_offset(cursor));
2240 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_cnf_status, 1, ENC_BIG_ENDIAN);
2242 direction = tvb_get_guint8(ptvcursor_tvbuff(cursor),
2243 ptvcursor_current_offset(cursor));
2244 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_cnf_dir, 1, ENC_BIG_ENDIAN);
2246 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_cnf_lid, 1, ENC_BIG_ENDIAN);
2247 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_cnf_tei, 1, ENC_BIG_ENDIAN);
2249 ptvcursor_add_no_advance(cursor, hf_homeplug_av_lnk_stats_cnf_lstats, -1, ENC_NA);
2251 if (status == HOMEPLUG_AV_LNK_STATS_STATUS_SUCCESS)
2253 switch (direction) {
2254 case HOMEPLUG_AV_LNK_STATS_DIR_TX:
2255 dissect_homeplug_av_lnk_stats_tx(cursor);
2256 break;
2257 case HOMEPLUG_AV_LNK_STATS_DIR_RX:
2258 dissect_homeplug_av_lnk_stats_rx(cursor);
2259 break;
2260 case HOMEPLUG_AV_LNK_STATS_DIR_TX_RX:
2261 dissect_homeplug_av_lnk_stats_tx(cursor);
2262 dissect_homeplug_av_lnk_stats_rx(cursor);
2263 break;
2267 ptvcursor_pop_subtree(cursor);
2270 static void
2271 dissect_homeplug_av_sniffer_req(ptvcursor_t *cursor)
2273 proto_item *it;
2275 if (!ptvcursor_tree(cursor))
2276 return;
2278 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sniffer_req, -1, ENC_NA);
2280 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_sniffer_req);
2282 ptvcursor_add(cursor, hf_homeplug_av_sniffer_req_ctrl, 1, ENC_BIG_ENDIAN);
2283 ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
2285 ptvcursor_pop_subtree(cursor);
2288 static void
2289 dissect_homeplug_av_sniffer_cnf(ptvcursor_t *cursor)
2291 proto_item *it;
2293 if (!ptvcursor_tree(cursor))
2294 return;
2296 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sniffer_cnf, -1, ENC_NA);
2298 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_sniffer_cnf);
2300 ptvcursor_add(cursor, hf_homeplug_av_sniffer_cnf_status, 1, ENC_BIG_ENDIAN);
2301 ptvcursor_add(cursor, hf_homeplug_av_sniffer_cnf_state, 1, ENC_BIG_ENDIAN);
2302 ptvcursor_add(cursor, hf_homeplug_av_sniffer_cnf_da, 6, ENC_NA);
2304 ptvcursor_pop_subtree(cursor);
2307 static void
2308 dissect_homeplug_av_sniffer_ind(ptvcursor_t *cursor)
2310 proto_item *it;
2311 proto_item *it_data;
2313 if (!ptvcursor_tree(cursor))
2314 return;
2316 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sniffer_ind, -1, ENC_NA);
2318 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_sniffer_ind);
2320 ptvcursor_add(cursor, hf_homeplug_av_sniffer_ind_type, 1, ENC_BIG_ENDIAN);
2322 it_data = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sniffer_ind_data, -1, ENC_NA);
2324 ptvcursor_push_subtree(cursor, it_data, ett_homeplug_av_sniffer_ind_data);
2326 ptvcursor_add(cursor, hf_homeplug_av_sniffer_data_dir, 1, ENC_BIG_ENDIAN);
2327 ptvcursor_add(cursor, hf_homeplug_av_sniffer_data_systime, 8, ENC_LITTLE_ENDIAN);
2328 ptvcursor_add(cursor, hf_homeplug_av_sniffer_data_bc_time, 4, ENC_LITTLE_ENDIAN);
2329 dissect_homeplug_av_frame_control(cursor);
2330 dissect_homeplug_av_beacon(cursor);
2332 ptvcursor_pop_subtree(cursor);
2334 ptvcursor_pop_subtree(cursor);
2337 static void
2338 dissect_homeplug_av_nw_info_cnf(ptvcursor_t *cursor, guint8 homeplug_av_mmver)
2340 proto_item *it;
2341 guint8 num_avlns;
2342 guint8 num_stas;
2343 guint8 sta;
2345 if (!ptvcursor_tree(cursor))
2346 return;
2348 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_info_cnf, -1, ENC_NA);
2350 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_nw_info_cnf);
2352 if (homeplug_av_mmver == 1)
2353 ptvcursor_add(cursor, hf_homeplug_av_reserved, 5, ENC_NA);
2355 num_avlns = tvb_get_guint8(ptvcursor_tvbuff(cursor),
2356 ptvcursor_current_offset(cursor));
2357 ptvcursor_add(cursor, hf_homeplug_av_nw_info_num_avlns, 1, ENC_BIG_ENDIAN);
2359 if (num_avlns) {
2360 dissect_homeplug_av_nw_info_net(cursor, TRUE, homeplug_av_mmver);
2361 num_stas = tvb_get_guint8(ptvcursor_tvbuff(cursor),
2362 ptvcursor_current_offset(cursor));
2363 ptvcursor_add(cursor, hf_homeplug_av_nw_info_num_stas, 1, ENC_BIG_ENDIAN);
2365 if (homeplug_av_mmver == 1)
2366 ptvcursor_add(cursor, hf_homeplug_av_reserved, 5, ENC_NA);
2368 for (sta = 0; sta < num_stas; sta++) {
2369 dissect_homeplug_av_nw_info_sta(cursor, TRUE, homeplug_av_mmver);
2373 ptvcursor_pop_subtree(cursor);
2376 static void
2377 dissect_homeplug_av_cp_rpt_req(ptvcursor_t *cursor)
2379 proto_item *it;
2381 if (!ptvcursor_tree(cursor))
2382 return;
2384 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cp_rpt_req, -1, ENC_NA);
2386 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cp_rpt_req);
2388 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_req_session_id, 2, ENC_LITTLE_ENDIAN);
2389 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_req_clr, 1, ENC_BIG_ENDIAN);
2391 ptvcursor_pop_subtree(cursor);
2394 static void
2395 dissect_homeplug_av_cp_rpt_ind(ptvcursor_t *cursor)
2397 proto_item *it;
2399 if (!ptvcursor_tree(cursor))
2400 return;
2402 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cp_rpt_ind, -1, ENC_NA);
2404 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cp_rpt_ind);
2406 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_status, 1, ENC_LITTLE_ENDIAN);
2407 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_major_ver, 1, ENC_BIG_ENDIAN);
2408 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_minor_ver, 1, ENC_BIG_ENDIAN);
2409 ptvcursor_add(cursor, hf_homeplug_av_reserved, 14, ENC_NA);
2410 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_session_id, 2, ENC_LITTLE_ENDIAN);
2411 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_total_size, 4, ENC_LITTLE_ENDIAN);
2412 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_blk_offset, 4, ENC_LITTLE_ENDIAN);
2413 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_byte_index, 4, ENC_LITTLE_ENDIAN);
2414 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_num_parts, 1, ENC_BIG_ENDIAN);
2415 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_curr_part, 1, ENC_BIG_ENDIAN);
2416 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_data_len, 2, ENC_LITTLE_ENDIAN);
2417 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_data_ofs, 1, ENC_LITTLE_ENDIAN);
2418 ptvcursor_add_no_advance(cursor, hf_homeplug_av_cp_rpt_ind_data, -1, ENC_NA);
2420 ptvcursor_pop_subtree(cursor);
2423 static void
2424 dissect_homeplug_av_fr_lbk_req(ptvcursor_t *cursor)
2426 proto_item *it;
2428 if (!ptvcursor_tree(cursor))
2429 return;
2431 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_fr_lbk_req, -1, ENC_NA);
2433 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_fr_lbk_req);
2435 ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_duration, 1, ENC_BIG_ENDIAN);
2436 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
2437 ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_len, 2, ENC_BIG_ENDIAN);
2438 ptvcursor_add_no_advance(cursor, hf_homeplug_av_fr_lbk_req_data, -1, ENC_NA);
2440 ptvcursor_pop_subtree(cursor);
2443 static void
2444 dissect_homeplug_av_fr_lbk_cnf(ptvcursor_t *cursor)
2446 proto_item *it;
2448 if (!ptvcursor_tree(cursor))
2449 return;
2451 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_fr_lbk_cnf, -1, ENC_NA);
2453 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_fr_lbk_cnf);
2455 ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_cnf_status, 1, ENC_BIG_ENDIAN);
2456 ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_duration, 1, ENC_BIG_ENDIAN);
2457 ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_len, 2, ENC_BIG_ENDIAN);
2459 ptvcursor_pop_subtree(cursor);
2462 static void
2463 dissect_homeplug_av_lbk_stat_cnf(ptvcursor_t *cursor)
2465 proto_item *it;
2467 if (!ptvcursor_tree(cursor))
2468 return;
2470 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_lbk_stat_cnf, -1, ENC_NA);
2472 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_lbk_stat_cnf);
2474 ptvcursor_add(cursor, hf_homeplug_av_lbk_stat_cnf_status, 1, ENC_BIG_ENDIAN);
2475 ptvcursor_add(cursor, hf_homeplug_av_lbk_stat_cnf_lbk_stat, 1, ENC_BIG_ENDIAN);
2477 ptvcursor_pop_subtree(cursor);
2480 static void
2481 dissect_homeplug_av_set_key_req(ptvcursor_t *cursor)
2483 proto_item *it;
2485 if (!ptvcursor_tree(cursor))
2486 return;
2488 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_set_key_req, -1, ENC_NA);
2490 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_set_key_req);
2492 ptvcursor_add(cursor, hf_homeplug_av_set_key_req_eks, 1, ENC_BIG_ENDIAN);
2493 ptvcursor_add(cursor, hf_homeplug_av_set_key_req_nmk, 16, ENC_NA);
2494 ptvcursor_add(cursor, hf_homeplug_av_nw_info_peks, 1, ENC_BIG_ENDIAN);
2495 ptvcursor_add(cursor, hf_homeplug_av_set_key_req_rda, 6, ENC_NA);
2496 ptvcursor_add(cursor, hf_homeplug_av_set_key_req_dak, 16, ENC_NA);
2498 ptvcursor_pop_subtree(cursor);
2501 static void
2502 dissect_homeplug_av_set_key_cnf(ptvcursor_t *cursor)
2504 proto_item *it;
2506 if (!ptvcursor_tree(cursor))
2507 return;
2509 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_set_key_cnf, -1, ENC_NA);
2511 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_set_key_cnf);
2513 ptvcursor_add(cursor, hf_homeplug_av_set_key_cnf_status, 1, ENC_BIG_ENDIAN);
2515 ptvcursor_pop_subtree(cursor);
2518 static void
2519 dissect_homeplug_av_mfg_string_cnf(ptvcursor_t *cursor)
2521 proto_item *it;
2523 if (!ptvcursor_tree(cursor))
2524 return;
2526 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mfg_string_cnf, -1, ENC_NA);
2528 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_mfg_string_cnf);
2530 ptvcursor_add(cursor, hf_homeplug_av_mfg_string_cnf_status, 1, ENC_BIG_ENDIAN);
2531 ptvcursor_add(cursor, hf_homeplug_av_mfg_string_cnf_len, 1, ENC_BIG_ENDIAN);
2532 ptvcursor_add(cursor, hf_homeplug_av_mfg_string_cnf_string, 64, ENC_ASCII|ENC_NA);
2534 ptvcursor_pop_subtree(cursor);
2537 static void
2538 dissect_homeplug_av_cblock_hdr(ptvcursor_t *cursor)
2540 proto_item *it;
2542 if (!ptvcursor_tree(cursor))
2543 return;
2545 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cblock_hdr, -1, ENC_NA);
2547 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cblock_hdr);
2549 ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_ver, 4, ENC_LITTLE_ENDIAN);
2550 ptvcursor_add(cursor, hf_homeplug_av_cblock_img_rom_addr, 4, ENC_LITTLE_ENDIAN);
2551 ptvcursor_add(cursor, hf_homeplug_av_cblock_img_addr, 4, ENC_LITTLE_ENDIAN);
2552 ptvcursor_add(cursor, hf_homeplug_av_cblock_img_len, 4, ENC_LITTLE_ENDIAN);
2553 ptvcursor_add(cursor, hf_homeplug_av_cblock_img_chksum, 4, ENC_LITTLE_ENDIAN);
2554 ptvcursor_add(cursor, hf_homeplug_av_cblock_entry_point, 4, ENC_LITTLE_ENDIAN);
2555 ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_minor, 1, ENC_NA);
2556 ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_img_type, 1, ENC_NA);
2557 ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_ignore_mask, 2, ENC_LITTLE_ENDIAN);
2558 ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_module_id, 4, ENC_LITTLE_ENDIAN);
2559 ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_module_subid, 4, ENC_LITTLE_ENDIAN);
2560 ptvcursor_add(cursor, hf_homeplug_av_cblock_next_hdr, 4, ENC_LITTLE_ENDIAN);
2561 ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_chksum, 4, ENC_LITTLE_ENDIAN);
2563 ptvcursor_pop_subtree(cursor);
2566 static void
2567 dissect_homeplug_av_cblock(ptvcursor_t *cursor)
2569 proto_item *it;
2571 if (!ptvcursor_tree(cursor))
2572 return;
2574 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cblock, -1, ENC_NA);
2576 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cblock);
2578 ptvcursor_add(cursor, hf_homeplug_av_cblock_sdram_size, 4, ENC_LITTLE_ENDIAN);
2579 ptvcursor_add(cursor, hf_homeplug_av_cblock_sdram_conf, 4, ENC_LITTLE_ENDIAN);
2580 ptvcursor_add(cursor, hf_homeplug_av_cblock_sdram_tim0, 4, ENC_LITTLE_ENDIAN);
2581 ptvcursor_add(cursor, hf_homeplug_av_cblock_sdram_tim1, 4, ENC_LITTLE_ENDIAN);
2582 ptvcursor_add(cursor, hf_homeplug_av_cblock_sdram_cntrl, 4, ENC_LITTLE_ENDIAN);
2583 ptvcursor_add(cursor, hf_homeplug_av_cblock_sdram_refresh, 4, ENC_LITTLE_ENDIAN);
2584 ptvcursor_add(cursor, hf_homeplug_av_cblock_mac_clock, 4, ENC_LITTLE_ENDIAN);
2585 ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
2587 ptvcursor_pop_subtree(cursor);
2590 static void
2591 dissect_homeplug_av_rd_cblock_cnf(ptvcursor_t *cursor)
2593 proto_item *it;
2595 if (!ptvcursor_tree(cursor))
2596 return;
2598 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rd_cblock_cnf, -1, ENC_NA);
2600 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rd_cblock_cnf);
2602 ptvcursor_add(cursor, hf_homeplug_av_rd_cblock_cnf_status, 1, ENC_BIG_ENDIAN);
2603 ptvcursor_add(cursor, hf_homeplug_av_rd_cblock_cnf_len, 1, ENC_BIG_ENDIAN);
2604 dissect_homeplug_av_cblock_hdr(cursor);
2605 dissect_homeplug_av_cblock(cursor);
2607 ptvcursor_pop_subtree(cursor);
2610 static void
2611 dissect_homeplug_av_set_sdram_req(ptvcursor_t *cursor)
2613 proto_item *it;
2615 if (!ptvcursor_tree(cursor))
2616 return;
2618 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_set_sdram_req, -1, ENC_NA);
2620 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_set_sdram_req);
2622 dissect_homeplug_av_cblock(cursor);
2623 ptvcursor_add(cursor, hf_homeplug_av_set_sdram_req_chksum, 4, ENC_LITTLE_ENDIAN);
2625 ptvcursor_pop_subtree(cursor);
2628 static void
2629 dissect_homeplug_av_set_sdram_cnf(ptvcursor_t *cursor)
2631 proto_item *it;
2633 if (!ptvcursor_tree(cursor))
2634 return;
2636 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_set_sdram_cnf, -1, ENC_NA);
2638 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_set_sdram_cnf);
2640 ptvcursor_add(cursor, hf_homeplug_av_set_sdram_cnf_status, 1, ENC_BIG_ENDIAN);
2642 ptvcursor_pop_subtree(cursor);
2645 static void
2646 dissect_homeplug_av_host_action_ind(ptvcursor_t *cursor)
2648 proto_item *it;
2650 if (!ptvcursor_tree(cursor))
2651 return;
2653 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_host_action_ind, -1, ENC_NA);
2655 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_host_action_ind);
2657 ptvcursor_add(cursor, hf_homeplug_av_host_action_ind_act, 1, ENC_BIG_ENDIAN);
2659 ptvcursor_pop_subtree(cursor);
2662 static void
2663 dissect_homeplug_av_host_action_rsp(ptvcursor_t *cursor)
2665 proto_item *it;
2667 if (!ptvcursor_tree(cursor))
2668 return;
2670 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_host_action_rsp, -1, ENC_NA);
2672 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_host_action_rsp);
2674 ptvcursor_add(cursor, hf_homeplug_av_host_action_rsp_sts, 1, ENC_BIG_ENDIAN);
2676 ptvcursor_pop_subtree(cursor);
2679 static void
2680 dissect_homeplug_av_op_attr_req(ptvcursor_t *cursor)
2682 proto_item *it;
2684 if (!ptvcursor_tree(cursor))
2685 return;
2687 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_op_attr_req, -1, ENC_NA);
2689 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_op_attr_req);
2691 ptvcursor_add(cursor, hf_homeplug_av_op_attr_cookie, 4, ENC_LITTLE_ENDIAN);
2692 ptvcursor_add(cursor, hf_homeplug_av_op_attr_rep_type, 1, ENC_BIG_ENDIAN);
2694 ptvcursor_pop_subtree(cursor);
2697 static void
2698 dissect_homeplug_av_op_attr_bin_report(ptvcursor_t *cursor)
2700 proto_item *it;
2702 if (!ptvcursor_tree(cursor))
2703 return;
2705 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_op_attr_cnf_data, -1, ENC_NA);
2707 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_op_attr_data);
2709 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_hw, 16, ENC_ASCII|ENC_NA);
2710 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw, 16, ENC_ASCII|ENC_NA);
2711 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_major, 4, ENC_LITTLE_ENDIAN);
2712 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_minor, 4, ENC_LITTLE_ENDIAN);
2713 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_sub, 4, ENC_LITTLE_ENDIAN);
2714 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_num, 4, ENC_LITTLE_ENDIAN);
2715 ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
2716 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_date, 8, ENC_ASCII|ENC_NA);
2717 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_rel, 12, ENC_ASCII|ENC_NA);
2718 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_sdram_type, 1, ENC_NA);
2719 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
2720 ptvcursor_add_no_advance(cursor, hf_homeplug_av_op_attr_data_sw_linefreq, 1, ENC_NA);
2721 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_zerocross, 1, ENC_NA);
2722 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_sdram_size, 4, ENC_LITTLE_ENDIAN);
2723 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_auth_mode, 1, ENC_NA);
2725 ptvcursor_pop_subtree(cursor);
2728 static void
2729 dissect_homeplug_av_op_attr_cnf(ptvcursor_t *cursor)
2731 proto_item *it;
2733 if (!ptvcursor_tree(cursor))
2734 return;
2736 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_op_attr_cnf, -1, ENC_NA);
2738 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_op_attr_cnf);
2740 ptvcursor_add(cursor, hf_homeplug_av_op_attr_cnf_status, 2, ENC_LITTLE_ENDIAN);
2741 ptvcursor_add(cursor, hf_homeplug_av_op_attr_cookie, 4, ENC_LITTLE_ENDIAN);
2742 ptvcursor_add(cursor, hf_homeplug_av_op_attr_rep_type, 1, ENC_BIG_ENDIAN);
2743 ptvcursor_add(cursor, hf_homeplug_av_op_attr_cnf_size, 2, ENC_LITTLE_ENDIAN);
2744 dissect_homeplug_av_op_attr_bin_report(cursor);
2746 ptvcursor_pop_subtree(cursor);
2749 static void
2750 dissect_homeplug_av_get_enet_phy_req(ptvcursor_t *cursor)
2752 proto_item *it;
2754 if (!ptvcursor_tree(cursor))
2755 return;
2757 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_enet_phy_req, -1, ENC_NA);
2759 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_enet_phy_req);
2761 ptvcursor_add(cursor, hf_homeplug_av_enet_phy_req_mcontrol, 1, ENC_BIG_ENDIAN);
2762 ptvcursor_add(cursor, hf_homeplug_av_enet_phy_req_addcaps, 1, ENC_BIG_ENDIAN);
2763 ptvcursor_add(cursor, hf_homeplug_av_reserved, 3, ENC_NA);
2765 ptvcursor_pop_subtree(cursor);
2768 static void
2769 dissect_homeplug_av_get_enet_phy_cnf(ptvcursor_t *cursor)
2771 proto_item *it;
2773 if (!ptvcursor_tree(cursor))
2774 return;
2776 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_enet_phy_cnf, -1, ENC_NA);
2778 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_enet_phy_cnf);
2780 ptvcursor_add(cursor, hf_homeplug_av_enet_phy_cnf_status, 1, ENC_BIG_ENDIAN);
2781 ptvcursor_add(cursor, hf_homeplug_av_enet_phy_cnf_speed, 1, ENC_BIG_ENDIAN);
2782 ptvcursor_add(cursor, hf_homeplug_av_enet_phy_cnf_duplex, 1, ENC_BIG_ENDIAN);
2784 ptvcursor_pop_subtree(cursor);
2787 static void
2788 dissect_homeplug_av_tone_map_tx_req(ptvcursor_t *cursor, guint8 homeplug_av_mmver)
2790 proto_item *it;
2792 if (!ptvcursor_tree(cursor))
2793 return;
2795 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_tx_req, -1, ENC_NA);
2796 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_tone_map_tx_req);
2798 if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
2800 ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
2801 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_req_mac, 6, ENC_NA);
2802 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_req_slot, 1, ENC_BIG_ENDIAN);
2803 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_req_coupling, 1, ENC_LITTLE_ENDIAN);
2805 else
2807 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_req_mac, 6, ENC_NA);
2808 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_req_slot, 1, ENC_BIG_ENDIAN);
2811 ptvcursor_pop_subtree(cursor);
2814 static void
2815 dissect_homeplug_av_tone_map_rx_req(ptvcursor_t *cursor, guint8 homeplug_av_mmver)
2817 proto_item *it;
2819 if (!ptvcursor_tree(cursor))
2820 return;
2822 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_rx_req, -1, ENC_NA);
2823 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_tone_map_rx_req);
2825 if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
2827 ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
2828 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_req_mac, 6, ENC_NA);
2829 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_req_slot, 1, ENC_BIG_ENDIAN);
2830 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_req_coupling, 1, ENC_LITTLE_ENDIAN);
2832 else
2834 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_req_mac, 6, ENC_NA);
2835 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_req_slot, 1, ENC_BIG_ENDIAN);
2838 ptvcursor_pop_subtree(cursor);
2841 static void
2842 dissect_homeplug_av_tone_map_carrier(ptvcursor_t *cursor, guint16 num_carriers)
2844 proto_item *it, *ittm;
2845 guint8 hilo, hi_bits, lo_bits, hi_snr, lo_snr;
2846 guint16 num_carrier_bytes, cb, cid;
2847 guint16 num_act_carriers=0, total_bits=0, total_snr=0;
2849 static const guint8 map_carrier2modbits[] = { 0, 1, 2, 3, 4, 6, 8, 10, 12, 0, 0, 0, 0, 0, 0, 0 }; /* Carrier-Nibble to #Modulated-Bits Mapping */
2850 static const guint8 map_carrier2modbitsSnr[] = { 0, 2, 4, 7, 10, 16, 22, 28, 36, 0, 0, 0, 0, 0, 0, 0 }; /* Carrier-Nibble to #Modulated-Bits-SNR Mapping */
2852 if (!ptvcursor_tree(cursor))
2853 return;
2854 num_carrier_bytes = num_carriers / 2;
2856 /* check if number of carriers is odd */
2857 if (num_carriers & 1)
2858 num_carrier_bytes += 1;
2860 ittm = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_carriers, num_carrier_bytes, ENC_NA);
2861 ptvcursor_push_subtree(cursor, ittm, ett_homeplug_av_tone_map_carriers);
2863 for (cb = 0; cb < num_carrier_bytes; cb++)
2865 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_carrier, 1, ENC_NA);
2866 cid = cb*2;
2867 proto_item_append_text(it, " (Carrier #%d/#%d)", cid, cid+1 );
2869 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_tone_map_carrier);
2871 hilo = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2872 lo_bits = map_carrier2modbits[ (hilo & 0x0f) ];
2873 hi_bits = map_carrier2modbits[ (hilo & 0xf0) >> 4 ];
2874 if(lo_bits) num_act_carriers++;
2875 if(hi_bits) num_act_carriers++;
2876 lo_snr = map_carrier2modbitsSnr[ (hilo & 0x0f) ];
2877 hi_snr = map_carrier2modbitsSnr[ (hilo & 0xf0) >> 4 ];
2879 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_carrier_lo, 1, ENC_BIG_ENDIAN);
2880 proto_item_prepend_text(it, "Carrier #%d -> %u bits@SNR %udB: ", cid , lo_bits, lo_snr);
2881 it = ptvcursor_add(cursor, hf_homeplug_av_tone_map_carrier_hi, 1, ENC_BIG_ENDIAN);
2882 proto_item_prepend_text(it, "Carrier #%d -> %u bits@SNR %udB: ", cid+1, hi_bits, hi_snr );
2884 ptvcursor_pop_subtree(cursor);
2885 total_bits += (hi_bits+lo_bits);
2886 total_snr += (hi_snr+lo_snr);
2889 if (num_act_carriers)
2891 /* Append to TM-Subtree: total modulated bits, number of active carriers, Average #Bits/Carrier, Average SNR/Carrier */
2892 proto_item_append_text(ittm, " (Total #ModulatedBits=%d bit, Active #Carriers=%d, Average #Bits/Carrier=%.2f bit), Average SNR/Carrier=%.2f dB)",
2893 total_bits, num_act_carriers, (float) total_bits/num_act_carriers, (float) total_snr/num_act_carriers );
2895 ptvcursor_pop_subtree(cursor);
2898 static void
2899 dissect_homeplug_av_tone_map_tx_cnf(ptvcursor_t *cursor, guint8 homeplug_av_mmver)
2901 proto_item *it;
2902 guint16 num_act_carriers;
2904 if (!ptvcursor_tree(cursor))
2905 return;
2907 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_tx_cnf, -1, ENC_NA);
2908 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_tone_map_tx_cnf);
2910 if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
2912 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_status, 2, ENC_LITTLE_ENDIAN);
2913 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_len, 2, ENC_LITTLE_ENDIAN);
2914 ptvcursor_add(cursor, hf_homeplug_av_reserved, 2, ENC_NA);
2915 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_mac, 6, ENC_NA);
2916 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_slot, 2, ENC_LITTLE_ENDIAN);
2917 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_num_tms, 2, ENC_LITTLE_ENDIAN);
2919 num_act_carriers = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2920 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_num_act, 2, ENC_LITTLE_ENDIAN);
2921 ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
2923 if (num_act_carriers)
2925 dissect_homeplug_av_tone_map_carrier(cursor, num_act_carriers);
2928 else
2930 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_status, 1, ENC_LITTLE_ENDIAN);
2931 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_slot, 1, ENC_LITTLE_ENDIAN);
2932 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_num_tms, 1, ENC_LITTLE_ENDIAN);
2934 num_act_carriers = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2935 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_num_act, 2, ENC_LITTLE_ENDIAN);
2937 if (num_act_carriers)
2939 dissect_homeplug_av_tone_map_carrier(cursor, num_act_carriers);
2943 ptvcursor_pop_subtree(cursor);
2946 static void
2947 dissect_homeplug_av_tone_map_rx_cnf(ptvcursor_t *cursor, guint8 homeplug_av_mmver)
2949 proto_item *it;
2950 guint16 num_act_carriers;
2952 if (!ptvcursor_tree(cursor))
2953 return;
2955 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_rx_cnf, -1, ENC_NA);
2956 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_tone_map_rx_cnf);
2958 if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
2960 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_status, 1, ENC_LITTLE_ENDIAN);
2961 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
2962 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_len, 2, ENC_LITTLE_ENDIAN);
2963 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_subver, 1, ENC_LITTLE_ENDIAN);
2964 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
2965 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_mac, 6, ENC_NA);
2966 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_slot, 1, ENC_LITTLE_ENDIAN);
2967 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_coupling, 1, ENC_LITTLE_ENDIAN);
2968 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_num_tms, 1, ENC_LITTLE_ENDIAN);
2969 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
2971 num_act_carriers = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2972 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_num_act, 2, ENC_LITTLE_ENDIAN);
2974 if (num_act_carriers)
2976 ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
2977 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_gil, 1, ENC_LITTLE_ENDIAN);
2978 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
2979 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_agc, 1, ENC_LITTLE_ENDIAN);
2980 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
2982 dissect_homeplug_av_tone_map_carrier(cursor, num_act_carriers);
2985 else
2987 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_status, 1, ENC_LITTLE_ENDIAN);
2988 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_slot, 1, ENC_LITTLE_ENDIAN);
2989 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_num_tms, 1, ENC_LITTLE_ENDIAN);
2991 num_act_carriers = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2992 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_num_act, 2, ENC_LITTLE_ENDIAN);
2994 if (num_act_carriers)
2996 dissect_homeplug_av_tone_map_carrier(cursor, num_act_carriers);
2998 if (num_act_carriers > HOMEPLUG_AV_TONE_MAP_MAX_NUM_CARRIERS_A)
2999 ptvcursor_add(cursor, hf_homeplug_av_reserved, (HOMEPLUG_AV_TONE_MAP_MAX_NUM_CARRIERS_B-num_act_carriers) >>1 , ENC_NA);
3000 else
3001 ptvcursor_add(cursor, hf_homeplug_av_reserved, (HOMEPLUG_AV_TONE_MAP_MAX_NUM_CARRIERS_A-num_act_carriers) >>1 , ENC_NA);
3003 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_gil, 1, ENC_LITTLE_ENDIAN);
3004 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_agc, 1, ENC_LITTLE_ENDIAN);
3008 ptvcursor_pop_subtree(cursor);
3011 static void
3012 dissect_homeplug_av_mme(ptvcursor_t *cursor, guint8 homeplug_av_mmver, guint16 homeplug_av_mmtype)
3015 switch (homeplug_av_mmtype) {
3016 /* Public MMEs */
3017 case HOMEPLUG_AV_MMTYPE_CC_DISC_LIST_CNF:
3018 dissect_homeplug_av_cc_disc_list_cnf(cursor);
3019 break;
3020 case HOMEPLUG_AV_MMTYPE_CM_ENC_PLD_IND:
3021 dissect_homeplug_av_cm_enc_pld_ind(cursor);
3022 break;
3023 case HOMEPLUG_AV_MMTYPE_CM_ENC_PLD_RSP:
3024 dissect_homeplug_av_cm_enc_pld_rsp(cursor);
3025 break;
3026 case HOMEPLUG_AV_MMTYPE_CM_SET_KEY_REQ:
3027 dissect_homeplug_av_cm_set_key_req(cursor);
3028 break;
3029 case HOMEPLUG_AV_MMTYPE_CM_SET_KEY_CNF:
3030 dissect_homeplug_av_cm_set_key_cnf(cursor);
3031 break;
3032 case HOMEPLUG_AV_MMTYPE_CM_GET_KEY_REQ:
3033 dissect_homeplug_av_cm_get_key_req(cursor);
3034 break;
3035 case HOMEPLUG_AV_MMTYPE_CM_GET_KEY_CNF:
3036 dissect_homeplug_av_cm_get_key_cnf(cursor);
3037 break;
3038 case HOMEPLUG_AV_MMTYPE_CM_BRG_INFO_CNF:
3039 dissect_homeplug_av_get_brg_infos_cnf(cursor);
3040 break;
3041 case HOMEPLUG_AV_MMTYPE_CM_NW_INFO_CNF:
3042 dissect_homeplug_av_nw_infos_cnf(cursor);
3043 break;
3044 case HOMEPLUG_AV_MMTYPE_CM_NW_STATS_CNF:
3045 dissect_homeplug_av_nw_stats_cnf(cursor);
3046 break;
3048 /* Intellon Vendor-specific MMEs */
3049 case HOMEPLUG_AV_MMTYPE_GET_SW_CNF:
3050 dissect_homeplug_av_get_sw_cnf(cursor);
3051 break;
3052 case HOMEPLUG_AV_MMTYPE_WR_MEM_REQ:
3053 dissect_homeplug_av_wr_mem_req(cursor);
3054 break;
3055 case HOMEPLUG_AV_MMTYPE_WR_MEM_CNF:
3056 dissect_homeplug_av_wr_mem_cnf(cursor);
3057 break;
3058 case HOMEPLUG_AV_MMTYPE_RD_MEM_REQ:
3059 dissect_homeplug_av_rd_mem_req(cursor);
3060 break;
3061 case HOMEPLUG_AV_MMTYPE_RD_MEM_CNF:
3062 dissect_homeplug_av_rd_mem_cnf(cursor);
3063 break;
3064 case HOMEPLUG_AV_MMTYPE_ST_MAC_REQ:
3065 dissect_homeplug_av_st_mac_req(cursor);
3066 break;
3067 case HOMEPLUG_AV_MMTYPE_ST_MAC_CNF:
3068 dissect_homeplug_av_st_mac_cnf(cursor);
3069 break;
3070 case HOMEPLUG_AV_MMTYPE_GET_NVM_CNF:
3071 dissect_homeplug_av_get_nvm_cnf(cursor);
3072 break;
3073 case HOMEPLUG_AV_MMTYPE_RS_DEV_CNF:
3074 dissect_homeplug_av_rs_dev_cnf(cursor);
3075 break;
3076 case HOMEPLUG_AV_MMTYPE_WR_MOD_REQ:
3077 dissect_homeplug_av_wr_mod_req(cursor);
3078 break;
3079 case HOMEPLUG_AV_MMTYPE_WR_MOD_CNF:
3080 dissect_homeplug_av_wr_mod_cnf(cursor);
3081 break;
3082 case HOMEPLUG_AV_MMTYPE_WR_MOD_IND:
3083 dissect_homeplug_av_wr_mod_ind(cursor);
3084 break;
3085 case HOMEPLUG_AV_MMTYPE_RD_MOD_REQ:
3086 dissect_homeplug_av_rd_mod_req(cursor);
3087 break;
3088 case HOMEPLUG_AV_MMTYPE_RD_MOD_CNF:
3089 dissect_homeplug_av_rd_mod_cnf(cursor);
3090 break;
3091 case HOMEPLUG_AV_MMTYPE_NVM_MOD_REQ:
3092 dissect_homeplug_av_mod_nvm_req(cursor);
3093 break;
3094 case HOMEPLUG_AV_MMTYPE_NVM_MOD_CNF:
3095 dissect_homeplug_av_mod_nvm_cnf(cursor);
3096 break;
3097 case HOMEPLUG_AV_MMTYPE_WD_RPT_REQ:
3098 dissect_homeplug_av_wd_rpt_req(cursor);
3099 break;
3100 case HOMEPLUG_AV_MMTYPE_WD_RPT_IND:
3101 dissect_homeplug_av_wd_rpt_ind(cursor);
3102 break;
3103 case HOMEPLUG_AV_MMTYPE_LNK_STATS_REQ:
3104 dissect_homeplug_av_lnk_stats_req(cursor);
3105 break;
3106 case HOMEPLUG_AV_MMTYPE_LNK_STATS_CNF:
3107 dissect_homeplug_av_lnk_stats_cnf(cursor);
3108 break;
3109 case HOMEPLUG_AV_MMTYPE_SNIFFER_REQ:
3110 dissect_homeplug_av_sniffer_req(cursor);
3111 break;
3112 case HOMEPLUG_AV_MMTYPE_SNIFFER_CNF:
3113 dissect_homeplug_av_sniffer_cnf(cursor);
3114 break;
3115 case HOMEPLUG_AV_MMTYPE_SNIFFER_IND:
3116 dissect_homeplug_av_sniffer_ind(cursor);
3117 break;
3118 case HOMEPLUG_AV_MMTYPE_NW_INFO_CNF:
3119 dissect_homeplug_av_nw_info_cnf(cursor, homeplug_av_mmver);
3120 break;
3121 case HOMEPLUG_AV_MMTYPE_CP_RPT_REQ:
3122 dissect_homeplug_av_cp_rpt_req(cursor);
3123 break;
3124 case HOMEPLUG_AV_MMTYPE_CP_RPT_IND:
3125 dissect_homeplug_av_cp_rpt_ind(cursor);
3126 break;
3127 case HOMEPLUG_AV_MMTYPE_FR_LBK_REQ:
3128 dissect_homeplug_av_fr_lbk_req(cursor);
3129 break;
3130 case HOMEPLUG_AV_MMTYPE_FR_LBK_CNF:
3131 dissect_homeplug_av_fr_lbk_cnf(cursor);
3132 break;
3133 case HOMEPLUG_AV_MMTYPE_LBK_STAT_CNF:
3134 dissect_homeplug_av_lbk_stat_cnf(cursor);
3135 break;
3136 case HOMEPLUG_AV_MMTYPE_SET_KEY_REQ:
3137 dissect_homeplug_av_set_key_req(cursor);
3138 break;
3139 case HOMEPLUG_AV_MMTYPE_SET_KEY_CNF:
3140 dissect_homeplug_av_set_key_cnf(cursor);
3141 break;
3142 case HOMEPLUG_AV_MMTYPE_MFG_STRING_CNF:
3143 dissect_homeplug_av_mfg_string_cnf(cursor);
3144 break;
3145 case HOMEPLUG_AV_MMTYPE_RD_CBLOCK_CNF:
3146 dissect_homeplug_av_rd_cblock_cnf(cursor);
3147 break;
3148 case HOMEPLUG_AV_MMTYPE_SET_SDRAM_REQ:
3149 dissect_homeplug_av_set_sdram_req(cursor);
3150 break;
3151 case HOMEPLUG_AV_MMTYPE_SET_SDRAM_CNF:
3152 dissect_homeplug_av_set_sdram_cnf(cursor);
3153 break;
3154 case HOMEPLUG_AV_MMTYPE_HOST_ACTION_IND:
3155 dissect_homeplug_av_host_action_ind(cursor);
3156 break;
3157 case HOMEPLUG_AV_MMTYPE_HOST_ACTION_RSP:
3158 dissect_homeplug_av_host_action_rsp(cursor);
3159 break;
3160 case HOMEPLUG_AV_MMTYPE_OP_ATTR_REQ:
3161 dissect_homeplug_av_op_attr_req(cursor);
3162 break;
3163 case HOMEPLUG_AV_MMTYPE_OP_ATTR_CNF:
3164 dissect_homeplug_av_op_attr_cnf(cursor);
3165 break;
3166 case HOMEPLUG_AV_MMTYPE_GET_ENET_PHY_REQ:
3167 dissect_homeplug_av_get_enet_phy_req(cursor);
3168 break;
3169 case HOMEPLUG_AV_MMTYPE_GET_ENET_PHY_CNF:
3170 dissect_homeplug_av_get_enet_phy_cnf(cursor);
3171 break;
3172 case HOMEPLUG_AV_MMTYPE_TONE_MAP_RX_REQ:
3173 dissect_homeplug_av_tone_map_rx_req(cursor, homeplug_av_mmver);
3174 break;
3175 case HOMEPLUG_AV_MMTYPE_TONE_MAP_RX_CNF:
3176 dissect_homeplug_av_tone_map_rx_cnf(cursor, homeplug_av_mmver);
3177 break;
3178 case HOMEPLUG_AV_MMTYPE_TONE_MAP_TX_REQ:
3179 dissect_homeplug_av_tone_map_tx_req(cursor, homeplug_av_mmver);
3180 break;
3181 case HOMEPLUG_AV_MMTYPE_TONE_MAP_TX_CNF:
3182 dissect_homeplug_av_tone_map_tx_cnf(cursor, homeplug_av_mmver);
3183 break;
3184 default:
3185 break;
3188 return;
3191 static void
3192 dissect_homeplug_av(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3194 proto_item *ti = NULL;
3195 proto_tree *homeplug_av_tree = NULL;
3196 ptvcursor_t *cursor;
3197 guint8 homeplug_av_mmver;
3198 guint16 homeplug_av_mmtype;
3200 col_set_str(pinfo->cinfo, COL_PROTOCOL, "HomePlug AV");
3201 col_set_str(pinfo->cinfo, COL_INFO, "MAC Management");
3203 if (tree) {
3204 ti = proto_tree_add_item(tree, proto_homeplug_av, tvb, 0, -1, ENC_NA);
3205 homeplug_av_tree = proto_item_add_subtree(ti, ett_homeplug_av);
3208 cursor = ptvcursor_new(homeplug_av_tree, tvb, 0);
3210 /* Check if we have enough data to process the header */
3211 if (check_tvb_length(cursor, HOMEPLUG_AV_MMHDR_LEN) != TVB_LEN_SHORTEST) {
3213 dissect_homeplug_av_mmhdr(cursor, &homeplug_av_mmver, &homeplug_av_mmtype);
3215 col_append_sep_str(pinfo->cinfo, COL_INFO, ", ",
3216 val_to_str_ext(homeplug_av_mmtype, &homeplug_av_mmtype_vals_ext, "Unknown 0x%x"));
3218 dissect_homeplug_av_mme(cursor, homeplug_av_mmver, homeplug_av_mmtype);
3221 ptvcursor_free(cursor);
3224 void
3225 proto_register_homeplug_av(void)
3227 static hf_register_info hf[] = {
3228 { &hf_homeplug_av_reserved,
3229 { "Reserved", "homeplug_av.reserved",
3230 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3232 /* MM Header */
3233 { &hf_homeplug_av_mmhdr,
3234 { "MAC Management Header", "homeplug_av.mmhdr",
3235 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3237 { &hf_homeplug_av_mmhdr_mmver,
3238 { "Version", "homeplug_av.mmhdr.mmver",
3239 FT_UINT8, BASE_DEC, VALS(homeplug_av_mmver_vals), HOMEPLUG_AV_MMVER_MASK, NULL, HFILL }
3241 { &hf_homeplug_av_mmhdr_mmtype,
3242 { "Type", "homeplug_av.mmhdr.mmtype",
3243 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &homeplug_av_mmtype_vals_ext, 0x0000, NULL, HFILL }
3245 { &hf_homeplug_av_mmhdr_mmtype_lsb,
3246 { "LSB", "homeplug_av.mmhdr.mmtype.lsb",
3247 FT_UINT8, BASE_HEX, VALS(homeplug_av_mmtype_lsb_vals), HOMEPLUG_AV_MMTYPE_LSB_MASK, NULL, HFILL }
3249 { &hf_homeplug_av_mmhdr_mmtype_msb,
3250 { "MSB", "homeplug_av.mmhdr.mmtype.msb",
3251 FT_UINT8, BASE_HEX, VALS(homeplug_av_mmtype_msb_vals), HOMEPLUG_AV_MMTYPE_MSB_MASK, "Reserved", HFILL },
3253 { &hf_homeplug_av_mmhdr_fmi,
3254 { "Fragmentation Info", "homeplug_av.mmhdr.fmi",
3255 FT_UINT16, BASE_HEX, NULL, 0x0000, "Reserved", HFILL },
3257 /* Public MME */
3258 { &hf_homeplug_av_public,
3259 { "Public MME", "homeplug_av.public",
3260 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3262 { &hf_homeplug_av_public_frag_count,
3263 { "Fragment count", "homeplug_av.public.frag_count",
3264 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_PUBLIC_FRAG_COUNT_MASK, NULL, HFILL }
3266 { &hf_homeplug_av_public_frag_index,
3267 { "Fragment index", "homeplug_av.public.frag_index",
3268 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_PUBLIC_FRAG_INDEX_MASK, NULL, HFILL }
3270 { &hf_homeplug_av_public_frag_seqnum,
3271 { "Fragment Sequence number", "homeplug_av.public.frag_seqnum",
3272 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
3274 /* Frame Control */
3275 { &hf_homeplug_av_fc,
3276 { "Frame control", "homeplug_av.fc",
3277 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3279 { &hf_homeplug_av_fc_stei,
3280 { "Source Terminal Equipment Identifier", "homeplug_av.fc.snei",
3281 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
3283 { &hf_homeplug_av_fc_dtei,
3284 { "Destination Terminal Equipment Identifier", "homeplug_av.fc.dtei",
3285 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
3287 { &hf_homeplug_av_fc_lid,
3288 { "Link ID", "homeplug_av.fc.lid",
3289 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
3291 { &hf_homeplug_av_fc_cfs,
3292 { "Contention free session", "homeplug_av.fc.cfs",
3293 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }
3295 { &hf_homeplug_av_fc_bdf,
3296 { "Beacon detect flag", "homeplug_av.fc.bdf",
3297 FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }
3299 { &hf_homeplug_av_fc_hp10df,
3300 { "Homeplug AV version 1.0", "homeplug_av.fc.hp10df",
3301 FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }
3303 { &hf_homeplug_av_fc_hp11df,
3304 { "Homeplug AV version 1.1", "homeplug_av.fc.hp11df",
3305 FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }
3307 { &hf_homeplug_av_fc_ppb,
3308 { "Pending PHY blocks", "homeplug_av.fc.ppb",
3309 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
3311 { &hf_homeplug_av_fc_ble,
3312 { "Bit loading estimate", "homeplug_av.fc.ble",
3313 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
3315 { &hf_homeplug_av_fc_pbsz,
3316 { "PHY block size", "homeplug_av.fc.pbsz",
3317 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }
3319 { &hf_homeplug_av_fc_num_sym,
3320 { "Number of symbols", "homeplug_av.fc.num_sym",
3321 FT_UINT8, BASE_DEC, NULL, 0x06, NULL, HFILL }
3323 { &hf_homeplug_av_fc_tmi_av,
3324 { "Tonemap index", "homeplug_av.fc.tmi_av",
3325 FT_UINT8, BASE_DEC, NULL, 0xF8, NULL, HFILL }
3327 { &hf_homeplug_av_fc_fl_av,
3328 { "Frame length", "homeplug_av.fc.fl_av",
3329 FT_UINT16, BASE_DEC, NULL, 0x0FFF, NULL, HFILL }
3331 { &hf_homeplug_av_fc_mpdu_cnt,
3332 { "MPDU count", "homeplug_av.fc.mpdu_cnt",
3333 FT_UINT8, BASE_DEC, NULL, 0x3000, NULL, HFILL }
3335 { &hf_homeplug_av_fc_burst_cnt,
3336 { "Burst count", "homeplug_av.fc.burst_cnt",
3337 FT_UINT8, BASE_DEC, NULL, 0xC000, NULL, HFILL }
3339 { &hf_homeplug_av_fc_clst,
3340 { "Convergence layer SAP type", "homeplug_av.fc.clst",
3341 FT_UINT8, BASE_HEX, NULL, 0x07, NULL, HFILL }
3343 { &hf_homeplug_av_fc_rg_len,
3344 { "Reverse grant length", "homeplug_av.fc.rg_len",
3345 FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }
3347 { &hf_homeplug_av_fc_mfs_cmd_mgmt,
3348 { "Management MAC frame stream command", "homeplug_av.fc.mfs_cmd_mgmt",
3349 FT_UINT8, BASE_DEC, NULL, 0x0E, NULL, HFILL }
3351 { &hf_homeplug_av_fc_mfs_cmd_data,
3352 { "Data MAC frame stream command", "homeplug_av.fc.mfs_data_mgmt",
3353 FT_UINT8, BASE_DEC, NULL, 0x70, NULL, HFILL }
3355 { &hf_homeplug_av_fc_rsr,
3356 { "Request SACK transmission", "homeplug_av.fc.rsr",
3357 FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }
3359 { &hf_homeplug_av_fc_mcf,
3360 { "Multicast", "homeplug_av.fc.mcf",
3361 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }
3363 { &hf_homeplug_av_fc_dccpcf,
3364 { "Different CP PHY clock", "homeplug_av.fc.dccpcf",
3365 FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }
3367 { &hf_homeplug_av_fc_mnbf,
3368 { "Multinetwork broadcast", "homeplug_av.fc.mnbf",
3369 FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }
3371 /* Beacon body */
3372 { &hf_homeplug_av_bcn,
3373 { "Beacon", "homeplug_av.bcn",
3374 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3376 { &hf_homeplug_av_bcn_bts,
3377 { "Beacon timestamp", "homeplug_av.bcn.bts",
3378 FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }
3380 { &hf_homeplug_av_bcn_bto_0,
3381 { "Beacon transmission offset 0", "homeplug_av.bcn.bto_0",
3382 FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL }
3384 { &hf_homeplug_av_bcn_bto_1,
3385 { "Beacon transmission offset 1", "homeplug_av.bcn.bto_1",
3386 FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL }
3388 { &hf_homeplug_av_bcn_bto_2,
3389 { "Beacon transmission offset 2", "homeplug_av.bcn.bto_2",
3390 FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL }
3392 { &hf_homeplug_av_bcn_bto_3,
3393 { "Beacon transmission offset 3", "homeplug_av.bcn.bto_3",
3394 FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL }
3396 /* Central Coordination Discovery List Confirmation */
3397 { &hf_homeplug_av_cc_disc_list_cnf,
3398 { "Central Coordination Discovery List Confirmation", "homeplug_av.cc_disc_list_cnf",
3399 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3401 /* Station informations */
3402 { &hf_homeplug_av_cc_disc_list_sta_cnt,
3403 { "Station count", "homeplug_av.cc_disc_list_cnf.sta_cnt",
3404 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
3406 { &hf_homeplug_av_cc_sta_info,
3407 { "Station information", "homeplug_av.cc_disc_list_cnf.sta_info",
3408 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3410 { &hf_homeplug_av_cc_sta_info_mac,
3411 { "MAC address", "homeplug_av.cc_disc_list_cnf.sta_info.mac",
3412 FT_ETHER, BASE_NONE, NULL, 0x00, NULL, HFILL }
3414 { &hf_homeplug_av_cc_sta_info_tei,
3415 { "Terminal Equipment Identifier", "homeplug_av.cc_disc_list_cnf.sta_info.tei",
3416 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
3418 { &hf_homeplug_av_cc_sta_info_same_net,
3419 { "Network type", "homeplug_av.cc_disc_list_cnf.sta_info.same_net",
3420 FT_UINT8, BASE_HEX, VALS(homeplug_av_cc_sta_net_type_vals), HOMEPLUG_AV_CC_STA_NET_MASK, NULL, HFILL }
3422 { &hf_homeplug_av_cc_sta_info_sig_level,
3423 { "Signal level", "homeplug_av.cc_disc_list_cnf.sta_info.sig_level",
3424 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &homeplug_av_sig_level_vals_ext, 0x00, "Reserved", HFILL }
3426 { &hf_homeplug_av_cc_sta_info_avg_ble,
3427 { "Average BLE", "homeplug_av.cc_disc_list_cnf.sta_info.avg_ble",
3428 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
3430 /* Network infos */
3431 { &hf_homeplug_av_cc_disc_list_net_cnt,
3432 { "Network count", "homeplug_av.cc_disc_list_cnf.net_cnt",
3433 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
3435 { &hf_homeplug_av_cc_net_info,
3436 { "Network information", "homeplug_av.cc_disc_list_cnf.net_info",
3437 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3439 { &hf_homeplug_av_cc_net_info_hyb_mode,
3440 { "Hybrid mode", "homeplug_av.cc_disc_list_cnf.net_info.hyb_mode",
3441 FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL }
3443 { &hf_homeplug_av_cc_net_info_bcn_slots,
3444 { "Beacon slots", "homeplug_av.cc_disc_list_cnf.net_info.bcn_slots",
3445 FT_UINT8, BASE_DEC, NULL, 0x08, "Reserved", HFILL }
3447 { &hf_homeplug_av_cc_net_info_cco_sts,
3448 { "Coordinating status", "homeplug_av.cc_disc_list_cnf.net_info.cco_status",
3449 FT_UINT8, BASE_HEX, VALS(homeplug_av_cco_status_vals), HOMEPLUG_AV_CCO_STATUS_MASK, "Unknown", HFILL }
3451 { &hf_homeplug_av_cc_net_info_bcn_ofs,
3452 { "Beacon offset", "homeplug_av.cc_disc_list_cnf.net_info.bcn_ofs",
3453 FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL }
3455 /* Shared encrypted related fields */
3456 { &hf_homeplug_av_nw_info_del_type,
3457 { "Delimiter type", "homeplug_av.nw_info.del_type",
3458 FT_UINT8, BASE_HEX, NULL, 0x07, NULL, HFILL }
3460 { &hf_homeplug_av_nw_info_fccs_av,
3461 { "Frame control check sequence", "homeplug_av.nw_info.fccs_av",
3462 FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL }
3464 { &hf_homeplug_av_nw_info_peks,
3465 { "Payload Encryption Key Select", "homeplug_av.nw_info.peks",
3466 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &homeplug_av_peks_vals_ext, HOMEPLUG_AV_PEKS_MASK, NULL, HFILL }
3468 { &hf_homeplug_av_nw_info_pid,
3469 { "Protocol ID", "homeplug_av.nw_info.pid",
3470 FT_UINT8, BASE_HEX, VALS(homeplug_av_pid_vals), HOMEPLUG_AV_PID_MASK, "Reserved", HFILL }
3472 { &hf_homeplug_av_nw_info_prn,
3473 { "Protocol run number", "homeplug_av.nw_info.prn",
3474 FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
3476 { &hf_homeplug_av_nw_info_pmn,
3477 { "Protocol message number", "homeplug_av.nw_info.pmn",
3478 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
3480 { &hf_homeplug_av_nw_info_my_nonce,
3481 { "My nonce", "homeplug_av.nw_info.my_nonce",
3482 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
3484 { &hf_homeplug_av_nw_info_your_nonce,
3485 { "Your nonce", "homeplug_av.nw_info.your_nonce",
3486 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
3488 { &hf_homeplug_av_nw_info_cco_cap,
3489 { "CCo capabilities", "homeplug_av.nw_info.cco_cap",
3490 FT_UINT8, BASE_HEX, VALS(homeplug_av_nw_info_role_vals), HOMEPLUG_AV_NW_INFO_ROLE_MASK, NULL, HFILL }
3492 { &hf_homeplug_av_nw_info_key_type,
3493 { "Key type", "homeplug_av.nw_info.key_type",
3494 FT_UINT8, BASE_HEX, VALS(homeplug_av_key_type_vals), HOMEPLUG_AV_KEY_TYPE_MASK, NULL, HFILL }
3496 /* Encrypted Payload Indicate */
3497 { &hf_homeplug_av_cm_enc_pld_ind,
3498 { "Encrypted Payload Indicate", "homeplug_av.cm_enc_pld_ind",
3499 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3501 { &hf_homeplug_av_cm_enc_pld_ind_avlns,
3502 { "AVLN status", "homeplug_av.cm_enc_pld_ind.avlns",
3503 FT_UINT8, BASE_HEX, VALS(homeplug_av_avln_status_vals), HOMEPLUG_AV_AVLN_STATUS_MASK, "Reserved", HFILL }
3505 { &hf_homeplug_av_cm_enc_pld_ind_iv,
3506 { "Initialization vector", "homeplug_av.cm_enc_pld_ind.iv",
3507 FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL }
3509 { &hf_homeplug_av_cm_enc_pld_ind_uuid,
3510 { "UUID", "homeplug_av.cm_enc_pld_ind.uuid",
3511 FT_GUID, BASE_NONE, NULL, 0x00, NULL, HFILL }
3513 { &hf_homeplug_av_cm_enc_pld_ind_len,
3514 { "Length", "homeplug_av.cm_enc_pld_ind.len",
3515 FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
3517 { &hf_homeplug_av_cm_enc_pld_ind_pld,
3518 { "Encrypted payload", "homeplug_av.cm_enc_pld_ind.pld",
3519 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3521 /* Encrypted Payload Response */
3522 { &hf_homeplug_av_cm_enc_pld_rsp,
3523 { "Encrypted Payload Response", "homeplug_av.cm_enc_pld_rsp",
3524 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3526 { &hf_homeplug_av_cm_enc_pld_rsp_result,
3527 { "Result", "homeplug_av.cm_enc_pld_rsp.result",
3528 FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
3530 /* Set Key Request */
3531 { &hf_homeplug_av_cm_set_key_req,
3532 { "Set Key Request", "homeplug_av.cm_set_key_req",
3533 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3535 { &hf_homeplug_av_cm_set_key_req_nw_key,
3536 { "New Key", "homeplug_av.cm_set_key_req.nw_key",
3537 FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL }
3539 /* Set Key Confirmation */
3540 { &hf_homeplug_av_cm_set_key_cnf,
3541 { "Set Key Confirmation", "homeplug_av.cm_set_key_cnf",
3542 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3544 { &hf_homeplug_av_cm_set_key_cnf_result,
3545 { "Result", "homeplug_av.cm_set_key_cnf.result",
3546 FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
3548 /* Get Key Request */
3549 { &hf_homeplug_av_cm_get_key_req,
3550 { "Get Key request", "homeplug_av.cm_get_key_req",
3551 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3553 { &hf_homeplug_av_cm_get_key_req_type,
3554 { "Request type", "homeplug_av.cm_get_key_req.type",
3555 FT_UINT8, BASE_HEX, VALS(homeplug_av_req_type_vals), HOMEPLUG_AV_REQ_TYPE_MASK, "Reserved", HFILL }
3557 { &hf_homeplug_av_cm_get_key_req_has_key,
3558 { "Hash key", "homeplug_av.cm_get_key_req.hash_key",
3559 FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL }
3561 /* Get Key Confirmation */
3562 { &hf_homeplug_av_cm_get_key_cnf,
3563 { "Get Key Confirmation", "homeplug_av.cm_get_key_cnf",
3564 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3566 { &hf_homeplug_av_cm_get_key_cnf_result,
3567 { "Result", "homeplug_av.cm_get_key_cnf.result",
3568 FT_UINT8, BASE_HEX, VALS(homeplug_av_key_result_vals), HOMEPLUG_AV_KEY_RESULT_MASK, NULL, HFILL }
3570 { &hf_homeplug_av_cm_get_key_cnf_rtype,
3571 { "Requested key type", "homeplug_av.cm_get_key_cnf.rtype",
3572 FT_UINT8, BASE_HEX, VALS(homeplug_av_key_type_vals), HOMEPLUG_AV_KEY_TYPE_MASK, NULL, HFILL }
3574 { &hf_homeplug_av_cm_get_key_cnf_key,
3575 { "Encryption/Hash key", "homeplug_av.cm_get_key_cnf.key",
3576 FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL }
3578 /* Get Bridge Informations Confirmation */
3579 { &hf_homeplug_av_brg_infos_cnf,
3580 { "Get Bridge Informations Confirmation", "homeplug_av.brg_infos_cnf",
3581 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3583 { &hf_homeplug_av_brg_infos_cnf_brd,
3584 { "Bridging", "homeplug_av.brg_infos_cnf.brd",
3585 FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL }
3587 { &hf_homeplug_av_brg_infos_cnf_btei,
3588 { "Bridge Terminal Equipement Identifier", "homeplug_av.brg_infos_cnf.btei",
3589 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
3591 { &hf_homeplug_av_brg_infos_cnf_num_stas,
3592 { "Number of stations", "homeplug_av.brg_infos_cnf.num_stas",
3593 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
3595 { &hf_homeplug_av_brg_infos_cnf_mac,
3596 { "Bridged Destination Address", "homeplug_av.brg_infos_cnf.mac",
3597 FT_ETHER, BASE_NONE, NULL, 0x00, NULL, HFILL }
3599 /* Get Network Informations Confirmation */
3600 { &hf_homeplug_av_cm_nw_infos_cnf,
3601 { "Get Network Informations Confirmation", "homeplug_av.nw_infos_cnf",
3602 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3604 /* Get Network Statistics Confirmation */
3605 { &hf_homeplug_av_nw_stats_cnf,
3606 { "Get Network Statistics Confirmation", "homeplug_av.nw_stats_cnf",
3607 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3609 /* Vendor Specific */
3610 { &hf_homeplug_av_vendor,
3611 { "Vendor MME", "homeplug_av.vendor",
3612 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3614 { &hf_homeplug_av_vendor_oui,
3615 { "OUI", "homeplug_av.vendor.oui",
3616 FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL }
3618 /* Get Device/SW Version */
3619 { &hf_homeplug_av_get_sw_cnf,
3620 { "Get Device/SW Version", "homeplug_av.get_sw_cnf",
3621 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3623 { &hf_homeplug_av_get_sw_cnf_status,
3624 { "Status", "homeplug_av.get_sw_cnf.status",
3625 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
3627 { &hf_homeplug_av_get_sw_cnf_dev_id,
3628 { "Device ID", "homeplug_av.get_sw_cnf.dev_id",
3629 FT_UINT8, BASE_HEX, VALS(homeplug_av_dev_id_vals), HOMEPLUG_AV_DEV_ID_MASK, NULL, HFILL }
3631 { &hf_homeplug_av_get_sw_cnf_ver_len,
3632 { "Version length", "homeplug_av.get_sw_cnf.ver_len",
3633 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
3635 { &hf_homeplug_av_get_sw_cnf_ver_str,
3636 { "Version", "homeplug_av.get_sw_cnf.ver_str",
3637 FT_STRING, BASE_NONE, NULL, 0x00, NULL, HFILL }
3639 { &hf_homeplug_av_get_sw_cnf_upg,
3640 { "Upgradable", "homeplug_av.get_sw_cnf.upg",
3641 FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL }
3643 /* Write MAC Memory Request */
3644 { &hf_homeplug_av_wr_mem_req,
3645 { "Write MAC Memory Request", "homeplug_av.wr_mem_req",
3646 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3648 { &hf_homeplug_av_mem_addr,
3649 { "Address", "homeplug_av.mem.addr",
3650 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
3652 { &hf_homeplug_av_mem_len_32bits,
3653 { "Length", "homeplug_av.mem.len_32bits",
3654 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
3656 /* Write MAC Memory Confirmation */
3657 { &hf_homeplug_av_wr_mem_cnf,
3658 { "Write MAC Memory Confirmation", "homeplug_av.wr_mem_cnf",
3659 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3661 /* Read MAC Memory Request */
3662 { &hf_homeplug_av_rd_mem_req,
3663 { "Read MAC Memory Request", "homeplug_av.rd_mem_req",
3664 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3666 { &hf_homeplug_av_rd_mem_cnf,
3667 { "Read MAC Memory Confirmation", "homeplug_av.rd_mem_cnf",
3668 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3670 /* Start MAC Request */
3671 { &hf_homeplug_av_st_mac_req,
3672 { "Start MAC Request", "homeplug_av.st_mac_req",
3673 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3675 { &hf_homeplug_av_st_mac_req_img_load,
3676 { "Image Load Starting Address", "homeplug_av.st_mac_req.img_load",
3677 FT_UINT32, BASE_HEX, NULL, 0x00, "Unknown", HFILL }
3679 { &hf_homeplug_av_st_mac_req_img_len,
3680 { "Image Length", "homeplug_av.st_mac_req.img_len",
3681 FT_UINT32, BASE_HEX, NULL, 0x00, "Unknown", HFILL }
3683 { &hf_homeplug_av_st_mac_req_img_chksum,
3684 { "Image Checksum", "homeplug_av.st_mac_req.img_chksum",
3685 FT_UINT32, BASE_HEX, NULL, 0x00, "Unknown", HFILL }
3687 { &hf_homeplug_av_st_mac_req_img_start,
3688 { "Image Starting Address", "homeplug_av.st_mac_req.img_start",
3689 FT_UINT32, BASE_HEX, NULL, 0x00, "Unknown", HFILL }
3691 /* Start MAC Confirmation */
3692 { &hf_homeplug_av_st_mac_cnf,
3693 { "Start MAC Confirmation", "homeplug_av.st_mac_cnf",
3694 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3696 { &hf_homeplug_av_st_mac_cnf_status,
3697 { "Module ID", "homeplug_av.st_mac_cnf.status",
3698 FT_UINT8, BASE_HEX, VALS(homeplug_av_st_mac_status_vals), 0x00, "Unknown", HFILL }
3700 /* Get NVM Parameters Confirmation */
3701 { &hf_homeplug_av_get_nvm_cnf,
3702 { "Get NVM Parameters Confirmation", "homeplug_av.get_nvm_cnf",
3703 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3705 { &hf_homeplug_av_get_nvm_cnf_status,
3706 { "Status", "homeplug_av.get_nvm_cnf.status",
3707 FT_UINT8, BASE_HEX, VALS(homeplug_av_get_nvm_status_vals), 0x00, "Unknown", HFILL }
3709 { &hf_homeplug_av_get_nvm_cnf_nvm_type,
3710 { "NVM Type", "homeplug_av.get_nvm_cnf.nvm_type",
3711 FT_UINT32, BASE_HEX, NULL, 0x00, "Unknown", HFILL }
3713 { &hf_homeplug_av_get_nvm_cnf_nvm_page,
3714 { "NVM Page Size", "homeplug_av.get_nvm_cnf.nvm_page",
3715 FT_UINT32, BASE_HEX, NULL, 0x00, "Unknown", HFILL }
3717 { &hf_homeplug_av_get_nvm_cnf_nvm_block,
3718 { "NVM Block Size", "homeplug_av.get_nvm_cnf.nvm_block",
3719 FT_UINT32, BASE_HEX, NULL, 0x00, "Unknown", HFILL }
3721 { &hf_homeplug_av_get_nvm_cnf_nvm_size,
3722 { "NVM Memory Size", "homeplug_av.get_nvm_cnf.nvm_size",
3723 FT_UINT32, BASE_HEX, NULL, 0x00, "Unknown", HFILL }
3725 /* Reset Device Confirmation */
3726 { &hf_homeplug_av_rs_dev_cnf,
3727 { "Reset Device Confirmation", "homeplug_av.rs_dev_cnf",
3728 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3730 { &hf_homeplug_av_rs_dev_cnf_status,
3731 { "Status", "homeplug_av.rs_dev_cnf.status",
3732 FT_UINT8, BASE_HEX, VALS(homeplug_av_rs_dev_status_vals), 0x00, "Unknown", HFILL }
3734 /* Shared memory related fields */
3735 { &hf_homeplug_av_mem_len_16bits,
3736 { "Length", "homeplug_av.mem.len_16bits",
3737 FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL }
3739 { &hf_homeplug_av_mem_offset,
3740 { "Offset", "homeplug_av.mem.offset",
3741 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
3743 { &hf_homeplug_av_mem_checksum,
3744 { "Checksum", "homeplug_av.mem.checksum",
3745 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
3747 { &hf_homeplug_av_mem_data,
3748 { "Data", "homeplug_av.mem.data",
3749 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3751 { &hf_homeplug_av_mem_status,
3752 { "Status", "homeplug_av.mem.status",
3753 FT_UINT8, BASE_HEX, VALS(homeplug_av_wr_rd_mem_status_vals), 0x00, "Unknown", HFILL }
3755 /* Write Module Data Request */
3756 { &hf_homeplug_av_wr_mod_req,
3757 { "Write Module Data Request", "homeplug_av.wr_mod_req",
3758 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3760 /* Write Module Data Confirmation */
3761 { &hf_homeplug_av_wr_mod_cnf,
3762 { "Write Module Data Confirmation", "homeplug_av.wr_mod_cnf",
3763 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3765 { &hf_homeplug_av_wr_mod_cnf_status,
3766 { "Status", "homeplug_av.wr_mod_cnf.status",
3767 FT_UINT8, BASE_HEX, VALS(homeplug_av_wr_rd_mod_cnf_status_vals), 0x00, "Unknown", HFILL }
3769 /* Write Module Data Indicate */
3770 { &hf_homeplug_av_wr_mod_ind,
3771 { "Write Module Data Indicate", "homeplug_av.wr_mod_ind",
3772 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3774 { &hf_homeplug_av_wr_mod_ind_status,
3775 { "Status", "homeplug_av.wr_mod_ind.status",
3776 FT_UINT8, BASE_HEX, VALS(homeplug_av_wr_mod_ind_status_vals), 0x00, "Unknown", HFILL }
3778 /* Read Module Data Request */
3779 { &hf_homeplug_av_rd_mod_req,
3780 { "Read Module Data Request", "homeplug_av.rd_mod_req",
3781 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3783 /* Read Module Data Confirmation */
3784 { &hf_homeplug_av_rd_mod_cnf,
3785 { "Read Module Data Confirmation", "homeplug_av.rd_mod_cnf",
3786 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3788 { &hf_homeplug_av_rd_mod_cnf_status,
3789 { "Status", "homeplug_av.rd_mod_cnf.status",
3790 FT_UINT8, BASE_HEX, VALS(homeplug_av_wr_rd_mod_cnf_status_vals), 0x00, "Unknown", HFILL }
3792 { &hf_homeplug_av_mac_module_id,
3793 { "Module ID", "homeplug_av.module_id",
3794 FT_UINT8, BASE_HEX, VALS(homeplug_av_mac_module_id_vals), 0x00, "Unknown", HFILL }
3796 /* Write Module Data to NVM Request */
3797 { &hf_homeplug_av_mod_nvm_req,
3798 { "Write Module Data to NVM Request", "homeplug_av.mod_nvm_req",
3799 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3801 /* Write Module Data to NVM Confirmation */
3802 { &hf_homeplug_av_mod_nvm_cnf,
3803 { "Write Module Data to NVM Confirmation", "homeplug_av.mod_nvm_cnf",
3804 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3806 { &hf_homeplug_av_mod_nvm_cnf_status,
3807 { "Status", "homeplug_av.mod_nvm_cnf.status",
3808 FT_UINT8, BASE_HEX, VALS(homeplug_av_mod_nvm_status_vals), 0x00, "Unknown", HFILL }
3810 /* Get Watchdog Report Request */
3811 { &hf_homeplug_av_wd_rpt_req,
3812 { "Get Watchdog Report Request", "homeplug_av.wd_rpt_req",
3813 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3815 { &hf_homeplug_av_wd_rpt_req_session_id,
3816 { "Session ID", "homeplug_av.wd_rpt_req.session_id",
3817 FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
3819 { &hf_homeplug_av_wd_rpt_req_clr,
3820 { "Clear flag", "homeplug_av.wd_rpt_req.clr",
3821 FT_UINT8, BASE_HEX, VALS(homeplug_av_rpt_clr_vals), HOMEPLUG_AV_RPT_CLR_MASK, "Unknown", HFILL }
3823 /* Get Watchdog Report Indicate */
3824 { &hf_homeplug_av_wd_rpt_ind,
3825 { "Get Watchdog Report Indicate", "homeplug_av.wd_rpt_ind",
3826 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3828 { &hf_homeplug_av_wd_rpt_ind_status,
3829 { "Status", "homeplug_av.wd_rpt_ind.status",
3830 FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, "Unknown", HFILL }
3832 { &hf_homeplug_av_wd_rpt_ind_session_id,
3833 { "Session ID", "homeplug_av.wd_rpt_ind.session_id",
3834 FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
3836 { &hf_homeplug_av_wd_rpt_ind_num_parts,
3837 { "Number of parts", "homeplug_av.wd_rpt_ind.num_parts",
3838 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
3840 { &hf_homeplug_av_wd_rpt_ind_curr_part,
3841 { "Current Part", "homeplug_av.wd_rpt_ind.curr_part",
3842 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
3844 { &hf_homeplug_av_wd_rpt_ind_rdata_len,
3845 { "Report Data Length", "homeplug_av.wd_rpt_ind.rdata_len",
3846 FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
3848 { &hf_homeplug_av_wd_rpt_ind_rdata_ofs,
3849 { "Report Data Offset", "homeplug_av.wd_rpt_ind.rdata_offset",
3850 FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL }
3852 { &hf_homeplug_av_wd_rpt_ind_rdata,
3853 { "Report Data", "homeplug_av.wd_rpt_ind.rdata",
3854 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3856 /* Link Statistics Request */
3857 { &hf_homeplug_av_lnk_stats_req,
3858 { "Link Statistics Request", "homeplug_av.lnk_stats_req",
3859 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3861 { &hf_homeplug_av_lnk_stats_req_mcontrol,
3862 { "Control", "homeplug_av.lnk_stats_req.mcontrol",
3863 FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_stats_mctrl_vals), HOMEPLUG_AV_LNK_STATS_MCTL_MASK, "Unknown", HFILL }
3865 { &hf_homeplug_av_lnk_stats_req_dir,
3866 { "Direction", "homeplug_av.lnk_stats_req.dir",
3867 FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_stats_dir_vals), HOMEPLUG_AV_LNK_STATS_DIR_MASK, "Unknown", HFILL }
3869 { &hf_homeplug_av_lnk_stats_req_lid,
3870 { "Link ID", "homeplug_av.lnk_stats_req.lid",
3871 FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_stats_lid_vals), 0x00, "Unknown", HFILL }
3873 { &hf_homeplug_av_lnk_stats_req_macaddr,
3874 { "Peer Node", "homeplug_av.lnk_stats_req.macaddr",
3875 FT_ETHER, BASE_NONE, NULL, 0x00, NULL, HFILL }
3877 /* Link Statistics Confirmation */
3878 { &hf_homeplug_av_lnk_stats_cnf,
3879 { "Link Statistics Confirmation", "homeplug_av.lnk_stats_cnf",
3880 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3882 { &hf_homeplug_av_lnk_stats_cnf_status,
3883 { "Status", "homeplug_av.lnk_stats_cnf.status",
3884 FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_status_vals), 0x00, "Unknown", HFILL }
3886 { &hf_homeplug_av_lnk_stats_cnf_dir,
3887 { "Direction", "homeplug_av.lnk_stats_cnf.dir",
3888 FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_stats_dir_vals), HOMEPLUG_AV_LNK_STATS_DIR_MASK, "Unknown", HFILL }
3890 { &hf_homeplug_av_lnk_stats_cnf_lid,
3891 { "Link ID", "homeplug_av.lnk_stats_cnf.lid",
3892 FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_stats_lid_vals), 0x00, "Unknown", HFILL }
3894 { &hf_homeplug_av_lnk_stats_cnf_tei,
3895 { "TEI", "homeplug_av.lnk_stats_cnf.tei",
3896 FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL }
3898 { &hf_homeplug_av_lnk_stats_cnf_lstats,
3899 { "Link statistics", "homeplug_av.lnk_stats_cnf.lstats",
3900 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3902 /* Link statistics members */
3903 { &hf_homeplug_av_lnk_stats_tx,
3904 { "Tx link statistics", "homeplug_av.lnk_stats.tx",
3905 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3907 { &hf_homeplug_av_lnk_stats_tx_mpdu_ack,
3908 { "Number of MPDUs Transmitted and Acknowledged", "homeplug_av.lnk_stats.tx.mpdu_ack",
3909 FT_UINT64, BASE_DEC, NULL, 0x00, NULL, HFILL }
3911 { &hf_homeplug_av_lnk_stats_tx_mpdu_col,
3912 { "Number of MPDUs Transmitted and Collided", "homeplug_av.lnk_stats.tx.mpdu_col",
3913 FT_UINT64, BASE_DEC, NULL, 0x00, NULL, HFILL }
3915 { &hf_homeplug_av_lnk_stats_tx_mpdu_fai,
3916 { "Number of MPDUs Transmitted and Failed", "homeplug_av.lnk_stats.tx.mpdu_fail",
3917 FT_UINT64, BASE_DEC, NULL, 0x00, NULL, HFILL }
3919 { &hf_homeplug_av_lnk_stats_tx_pbs_pass,
3920 { "Number of PB Transmitted Successfully", "homeplug_av.lnk_stats.tx.pbs_pass",
3921 FT_UINT64, BASE_DEC, NULL, 0x00, NULL, HFILL }
3923 { &hf_homeplug_av_lnk_stats_tx_pbs_fail,
3924 { "Number of PB Transmitted Unsuccessfully", "homeplug_av.lnk_stats.tx.pbs_fail",
3925 FT_UINT64, BASE_DEC, NULL, 0x00, NULL, HFILL }
3927 { &hf_homeplug_av_lnk_stats_rx,
3928 { "Rx link statistics", "homeplug_av.lnk_stats.rx",
3929 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3931 { &hf_homeplug_av_lnk_stats_rx_mpdu_ack,
3932 { "Number of MPDUs Received and Acknowledged", "homeplug_av.lnk_stats.rx.mdpu_ack",
3933 FT_UINT64, BASE_DEC, NULL, 0x00, NULL, HFILL }
3935 { &hf_homeplug_av_lnk_stats_rx_mpdu_fai,
3936 { "Number of MPDUs Received and Failed", "homeplug_av.lnk_stats.rx.mdpu_fail",
3937 FT_UINT64, BASE_DEC, NULL, 0x00, NULL, HFILL }
3939 { &hf_homeplug_av_lnk_stats_rx_pbs_pass,
3940 { "Number of PB Received Successfully", "homeplug_av.lnk_stats.rx.pbs_pass",
3941 FT_UINT64, BASE_DEC, NULL, 0x00, NULL, HFILL }
3943 { &hf_homeplug_av_lnk_stats_rx_pbs_fail,
3944 { "Number of PB Received Unsuccessfully", "homeplug_av.lnk_stats.rx.pbs_fail",
3945 FT_UINT64, BASE_DEC, NULL, 0x00, NULL, HFILL }
3947 { &hf_homeplug_av_lnk_stats_rx_tb_pass,
3948 { "Sum of Turbo Bit Error over successfully recevied PBs", "homeplug_av.lnk_stats.rx.tb_pass",
3949 FT_UINT64, BASE_DEC, NULL, 0x00, NULL, HFILL }
3951 { &hf_homeplug_av_lnk_stats_rx_tb_fail,
3952 { "Sum of Turbo Bit Error over unsuccessfully recevied PBs", "homeplug_av.lnk_stats.rx.tb_fail",
3953 FT_UINT64, BASE_DEC, NULL, 0x00, NULL, HFILL }
3955 { &hf_homeplug_av_lnk_stats_rx_num_int,
3956 { "Number of Tone Map Intervals", "homeplug_av.lnk_stats.rx.num_int",
3957 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
3959 { &hf_homeplug_av_rx_inv_stats,
3960 { "Rx Interval Statistics", "homeplug_av.lnk_stats.rx.inv",
3961 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3963 { &hf_homeplug_av_rx_inv_phy_rate,
3964 { "Rx Phy Rate for Tone Map Interval 0", "homeplug_av.lnk_stats.rx.inv.phy_rate",
3965 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
3967 { &hf_homeplug_av_rx_inv_pbs_pass,
3968 { "Number of PB Received Successfully", "homeplug_av.lnk_stats.rx.inv.pbs_pass",
3969 FT_UINT64, BASE_DEC, NULL, 0x00, NULL, HFILL }
3971 { &hf_homeplug_av_rx_inv_pbs_fail,
3972 { "Number of PB Received Unsuccessfully", "homeplug_av.lnk_stats.rx.inv.pbs_fail",
3973 FT_UINT64, BASE_DEC, NULL, 0x00, NULL, HFILL }
3975 { &hf_homeplug_av_rx_inv_tb_pass,
3976 { "Sum of the Turbo Bit Error over all PBs received successfully", "homeplug_av.lnk_stats.rx.inv.tb_pass",
3977 FT_UINT64, BASE_DEC, NULL, 0x00, NULL, HFILL }
3979 { &hf_homeplug_av_rx_inv_tb_fail,
3980 { "Sum of the Turbo Bit Error over all PBs received unsuccessfully", "homeplug_av.lnk_stats.rx.inv.tb_fail",
3981 FT_UINT64, BASE_DEC, NULL, 0x00, NULL, HFILL }
3983 /* Sniffer Request */
3984 { &hf_homeplug_av_sniffer_req,
3985 { "Sniffer Request", "homeplug_av.sniffer_req",
3986 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3988 { &hf_homeplug_av_sniffer_req_ctrl,
3989 { "Sniffer Control", "homeplug_av.sniffer_req.ctrl",
3990 FT_UINT8, BASE_HEX, VALS(homeplug_av_sniffer_ctrl_vals), HOMEPLUG_AV_SNIFFER_CTRL_MASK, NULL, HFILL }
3992 /* Sniffer Confirmation */
3993 { &hf_homeplug_av_sniffer_cnf,
3994 { "Sniffer Confirmation" , "homeplug_av.sniffer_cnf",
3995 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
3997 { &hf_homeplug_av_sniffer_cnf_status,
3998 { "Status", "homeplug_av.sniffer_cnf.status",
3999 FT_UINT8, BASE_HEX, VALS(homeplug_av_sniffer_status_vals), 0x00, NULL, HFILL }
4001 { &hf_homeplug_av_sniffer_cnf_state,
4002 { "State", "homeplug_av.sniffer_cnf.state",
4003 FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL }
4005 { &hf_homeplug_av_sniffer_cnf_da,
4006 { "Destination address", "homeplug_av.sniffer_cnf.da",
4007 FT_ETHER, BASE_NONE, NULL, 0x00, NULL, HFILL }
4009 /* Sniffer Indicate */
4010 { &hf_homeplug_av_sniffer_ind,
4011 { "Sniffer Indicate", "homeplug_av.sniffer_ind",
4012 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4014 { &hf_homeplug_av_sniffer_ind_type,
4015 { "Sniffer Type", "homeplug_av.sniffer_ind.type",
4016 FT_UINT8, BASE_HEX, VALS(homeplug_av_sniffer_type_vals), 0x00, "Unknown", HFILL }
4018 { &hf_homeplug_av_sniffer_ind_data,
4019 { "Sniffer Data", "homeplug_av.sniffer_ind.data",
4020 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4022 { &hf_homeplug_av_sniffer_data_dir,
4023 { "Direction", "homeplug_av.sniffer_ind.data.dir",
4024 FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_stats_dir_vals), HOMEPLUG_AV_LNK_STATS_DIR_MASK, NULL, HFILL }
4026 { &hf_homeplug_av_sniffer_data_systime,
4027 { "System time", "homeplug_av.sniffer_ind.data.systime",
4028 FT_UINT64, BASE_DEC, NULL, 0x00, NULL, HFILL }
4030 { &hf_homeplug_av_sniffer_data_bc_time,
4031 { "Beacon time", "homeplug_av.sniffer_ind.data.bc_time",
4032 FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }
4034 /* Network Info Confirmation */
4035 { &hf_homeplug_av_nw_info_cnf,
4036 { "Network Info Confirmation", "homeplug_av.nw_info_cnf",
4037 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4039 { &hf_homeplug_av_nw_info_net_info,
4040 { "Networks informations", "homeplug_av.nw_info_cnf.net_info",
4041 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4043 { &hf_homeplug_av_nw_info_num_avlns,
4044 { "Number of AV Logical Networks", "homeplug_av.nw_info.num_avlns",
4045 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4047 { &hf_homeplug_av_nw_info_nid,
4048 { "Network ID", "homeplug_av.nw_info.nid",
4049 FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL }
4051 { &hf_homeplug_av_nw_info_snid,
4052 { "Short Network ID", "homeplug_av.nw_info.snid",
4053 FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL }
4055 { &hf_homeplug_av_nw_info_tei,
4056 { "Terminal Equipement Identifer", "homeplug_av.nw_info.tei",
4057 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4059 { &hf_homeplug_av_nw_info_sta_role,
4060 { "Station Role", "homeplug_av.nw_info.sta_role",
4061 FT_UINT8, BASE_HEX, VALS(homeplug_av_nw_info_role_vals), HOMEPLUG_AV_NW_INFO_ROLE_MASK, "Reserved", HFILL }
4063 { &hf_homeplug_av_nw_info_cco_mac,
4064 { "CCo MAC Address", "homeplug_av.nw_info_cnf.cco_mac",
4065 FT_ETHER, BASE_NONE, NULL, 0x00, NULL, HFILL }
4067 { &hf_homeplug_av_nw_info_cco_tei,
4068 { "CCo Terminal Equipement Identifier", "homeplug_av.nw_info_cnf.cco_tei",
4069 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4071 { &hf_homeplug_av_nw_info_num_stas,
4072 { "Number of AV Stations", "homeplug_av.nw_info_cnf.num_stas",
4073 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4075 { &hf_homeplug_av_nw_info_access,
4076 { "Access network", "homeplug_av.nw_info_cnf.access",
4077 FT_UINT8, BASE_HEX, VALS(homeplug_nw_info_access_vals), HOMEPLUG_AV_NW_INFO_NID_MASK, "Reserved", HFILL }
4079 { &hf_homeplug_av_nw_info_num_coord,
4080 { "Number of neighbor networks coordinating", "homeplug_av.nw_info_cnf.num_coord",
4081 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4083 /* Network Info per station */
4084 { &hf_homeplug_av_nw_info_sta_info,
4085 { "Stations Informations", "homeplug_av.nw_info_cnf.sta_info",
4086 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4088 { &hf_homeplug_av_nw_info_sta_da,
4089 { "Station MAC Address", "homeplug_av.nw_info_cnf.sta_info.da",
4090 FT_ETHER, BASE_NONE, NULL, 0x00, NULL, HFILL }
4092 { &hf_homeplug_av_nw_info_sta_tei,
4093 { "Station Terminal Equipement Identifier", "homeplug_av.nw_info_cnf.sta_indo.tei",
4094 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4096 { &hf_homeplug_av_nw_info_sta_bda,
4097 { "MAC Address of first Node Bridged by Station", "homeplug_av.nw_info_cnf.sta_indo.bda",
4098 FT_ETHER, BASE_NONE, NULL, 0x00, NULL, HFILL }
4100 { &hf_homeplug_av10_nw_info_sta_phy_dr_tx,
4101 { "Average PHY Tx data Rate (Mbits/sec)", "homeplug_av.nw_info_cnf.sta_indo.phy_dr_tx",
4102 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4104 { &hf_homeplug_av10_nw_info_sta_phy_dr_rx,
4105 { "Average PHY Rx data Rate (Mbits/sec)", "homeplug_av.nw_info_cnf.sta_indo.phy_dr_rx",
4106 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4108 { &hf_homeplug_av11_nw_info_sta_phy_dr_tx,
4109 { "Average PHY Tx data Rate (Mbits/sec)", "homeplug_av.nw_info_cnf.sta_indo.phy_dr_tx",
4110 FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
4112 { &hf_homeplug_av11_nw_info_sta_phy_dr_rx,
4113 { "Average PHY Rx data Rate (Mbits/sec)", "homeplug_av.nw_info_cnf.sta_indo.phy_dr_rx",
4114 FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
4116 { &hf_homeplug_av11_nw_info_sta_cpling_tx,
4117 { "PHY Tx Coupling", "homeplug_av.nw_info_cnf.sta_info.phy_coupling_tx",
4118 FT_UINT8, BASE_DEC, VALS(homeplug_av_coupling_vals), HOMEPLUG_AV_COUPLING_MASK, "Unknown", HFILL }
4120 { &hf_homeplug_av11_nw_info_sta_cpling_rx,
4121 { "PHY Rx Coupling", "homeplug_av.nw_info_cnf.sta_info.phy_coupling_rx",
4122 FT_UINT8, BASE_DEC, VALS(homeplug_av_coupling_vals), HOMEPLUG_AV_COUPLING_MASK << 4, "Unknown", HFILL }
4124 /* Check Points Request */
4125 { &hf_homeplug_av_cp_rpt_req,
4126 { "Check Points Request", "homeplug_av.cp_rpt_req",
4127 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4129 { &hf_homeplug_av_cp_rpt_req_session_id,
4130 { "Session ID", "homeplug_av.cp_rpt_req.session_id",
4131 FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
4133 { &hf_homeplug_av_cp_rpt_req_clr,
4134 { "Clear flag", "homeplug_av.cp_rpt_req.clr",
4135 FT_UINT8, BASE_HEX, VALS(homeplug_av_rpt_clr_vals), HOMEPLUG_AV_RPT_CLR_MASK, "Unknown", HFILL }
4137 /* Check Points Confirmation */
4138 { &hf_homeplug_av_cp_rpt_ind,
4139 { "Check Points Confirmation", "homeplug_av.cp_rpt_ind",
4140 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4142 { &hf_homeplug_av_cp_rpt_ind_status,
4143 { "Status", "homeplug_av.cp_rpt_ind.status",
4144 FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, "Unknown", HFILL }
4146 { &hf_homeplug_av_cp_rpt_ind_major_ver,
4147 { "Major version", "homeplug_av.cp_rpt_ind.major_ver",
4148 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4150 { &hf_homeplug_av_cp_rpt_ind_minor_ver,
4151 { "Minor version", "homeplug_av.cp_rpt_ind.minor_ver",
4152 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4154 { &hf_homeplug_av_cp_rpt_ind_session_id,
4155 { "Session ID", "homeplug_av.cp_rpt_ind.session_id",
4156 FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
4158 { &hf_homeplug_av_cp_rpt_ind_total_size,
4159 { "Total size", "homeplug_av.cp_rpt_ind.total_size",
4160 FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }
4162 { &hf_homeplug_av_cp_rpt_ind_blk_offset,
4163 { "Offset", "homeplug_av.cp_rpt_ind.blk_offset",
4164 FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }
4166 { &hf_homeplug_av_cp_rpt_ind_byte_index,
4167 { "Byte Index", "homeplug_av.cp_rpt_ind.byte_index",
4168 FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }
4170 { &hf_homeplug_av_cp_rpt_ind_num_parts,
4171 { "Number of parts", "homeplug_av.cp_rpt_ind.num_parts",
4172 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4174 { &hf_homeplug_av_cp_rpt_ind_curr_part,
4175 { "Current part", "homeplug_av.cp_rpt_ind.curr_part",
4176 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4178 { &hf_homeplug_av_cp_rpt_ind_data_len,
4179 { "Data length", "homeplug_av.cp_rpt_ind.data_len",
4180 FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
4182 { &hf_homeplug_av_cp_rpt_ind_data_ofs,
4183 { "Data offset", "homeplug_av.cp_rpt_ind.data_ofs",
4184 FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL }
4186 { &hf_homeplug_av_cp_rpt_ind_data,
4187 { "Report Data", "homeplug_av.cp_rpt_ind.data",
4188 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4190 /* Loopback Request */
4191 { &hf_homeplug_av_fr_lbk_req,
4192 { "Loopback Request", "homeplug_av.fr_lbk.req",
4193 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4195 { &hf_homeplug_av_fr_lbk_duration,
4196 { "Duration", "homeplug_av.lbk.duration",
4197 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4199 { &hf_homeplug_av_fr_lbk_len,
4200 { "Length", "homeplug_av.lbk.len",
4201 FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
4203 { &hf_homeplug_av_fr_lbk_req_data,
4204 { "Data", "homeplug_av.fr_lbj_req.data",
4205 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4207 /* Loopback Confirmation */
4208 { &hf_homeplug_av_fr_lbk_cnf,
4209 { "Loopback Confirmation", "homeplug_av.fr_lbk_cnf",
4210 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4212 { &hf_homeplug_av_fr_lbk_cnf_status,
4213 { "Status", "homeplug_av.fr_lbk_cnf.status",
4214 FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, "Unknown", HFILL }
4216 { &hf_homeplug_av_lbk_stat_cnf,
4217 { "Loopback Status Confirmation", "homeplug_av.lnk_stat_cnf",
4218 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4220 { &hf_homeplug_av_lbk_stat_cnf_status,
4221 { "Status", "homeplug_av.lnk_stat_cnf.status",
4222 FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
4224 { &hf_homeplug_av_lbk_stat_cnf_lbk_stat,
4225 { "Loopback Status", "homeplug_av.lnk_stat_cnf.lbk_stat",
4226 FT_UINT8, BASE_HEX, VALS(homeplug_av_lbk_status_vals), HOMEPLUG_AV_LBK_STATUS_MASK, NULL, HFILL }
4228 /* Set Encryption Key Request */
4229 { &hf_homeplug_av_set_key_req,
4230 { "Set Encryption Key Request", "homeplug_av.set_key_req",
4231 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4233 { &hf_homeplug_av_set_key_req_eks,
4234 { "EKS", "homeplug_av.set_key_req.eks",
4235 FT_UINT8, BASE_HEX, VALS(homeplug_av_set_key_peks_vals), 0x00, "Unknown", HFILL }
4237 { &hf_homeplug_av_set_key_req_nmk,
4238 { "NMK", "homeplug_av.set_key_req.nmk",
4239 FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL }
4241 { &hf_homeplug_av_set_key_req_rda,
4242 { "Destination Address", "homeplug_av.set_key_req.rda",
4243 FT_ETHER, BASE_NONE, NULL, 0x00, NULL, HFILL }
4245 { &hf_homeplug_av_set_key_req_dak,
4246 { "DAK", "homeplug_av.set_key_req.dak",
4247 FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL }
4249 /* Set Encryption Key Confirmation */
4250 { &hf_homeplug_av_set_key_cnf,
4251 { "Set Encryption Key Confirmation", "homeplug_av.set_key_cnf",
4252 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4254 { &hf_homeplug_av_set_key_cnf_status,
4255 { "Status", "homeplug_av.set_key_cnf.status",
4256 FT_UINT8, BASE_HEX, VALS(homeplug_av_set_key_status_vals), 0x00, NULL, HFILL }
4258 /* Get Manufacturer String Confirmation */
4259 { &hf_homeplug_av_mfg_string_cnf,
4260 { "Get Manufacturer String Confirmation", "homeplug_av.mfg_string_cnf",
4261 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4263 { &hf_homeplug_av_mfg_string_cnf_status,
4264 { "Status", "homeplug_av.mfg_string_cnf.status",
4265 FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
4267 { &hf_homeplug_av_mfg_string_cnf_len,
4268 { "Length", "homeplug_av.mfg_string_cnf.len",
4269 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4271 { &hf_homeplug_av_mfg_string_cnf_string,
4272 { "Manufacturing String", "homeplug_av.mfg_string_cnf.string",
4273 FT_STRING, BASE_NONE, NULL, 0x00, NULL, HFILL }
4275 /* Read Configuration Block Confirmation */
4276 { &hf_homeplug_av_rd_cblock_cnf,
4277 { "Read Configuration Block Confirmation", "homeplug_av.rd_block_cnf",
4278 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4280 { &hf_homeplug_av_rd_cblock_cnf_status,
4281 { "Status", "homeplug_av.rd_block_cnf.status",
4282 FT_UINT8, BASE_HEX, VALS(homeplug_av_cblock_status_vals), 0x00, NULL, HFILL }
4284 { &hf_homeplug_av_rd_cblock_cnf_len,
4285 { "Length", "homeplug_av.rd_block_cnf.len",
4286 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4288 /* Configuration Block Header */
4289 { &hf_homeplug_av_cblock_hdr,
4290 { "Configuration Block Header", "homeplug_av.cblock_hdr",
4291 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4293 { &hf_homeplug_av_cblock_hdr_ver,
4294 { "Header Version Number", "homeplug_av.cblock_hdr.ver",
4295 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
4297 { &hf_homeplug_av_cblock_img_rom_addr,
4298 { "Image address in NVM", "homeplug_av.cblock_hdr.img_rom_addr",
4299 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
4301 { &hf_homeplug_av_cblock_img_addr,
4302 { "Image address in SDRAM", "homeplug_av.cblock_hdr.img_addr",
4303 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
4305 { &hf_homeplug_av_cblock_img_len,
4306 { "Image length", "homeplug_av.cblock_hdr.img_len",
4307 FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }
4309 { &hf_homeplug_av_cblock_img_chksum,
4310 { "Image Checksum", "homeplug_av.cblock_hdr.img_chksum",
4311 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
4313 { &hf_homeplug_av_cblock_entry_point,
4314 { "Entry Point", "homeplug_av.cblock_hdr.entry_point",
4315 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
4317 { &hf_homeplug_av_cblock_hdr_minor,
4318 { "Header minor version", "homeplug_av.cblock_hdr.minor",
4319 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4321 { &hf_homeplug_av_cblock_hdr_img_type,
4322 { "Header image type", "homeplug_av.cblock_hdr.img_type",
4323 FT_UINT8, BASE_DEC, VALS(homeplug_av_nvm_img_type_vals), HOMEPLUG_AV_NVM_IMG_TYPE_MASK, "Unknown", HFILL }
4325 { &hf_homeplug_av_cblock_hdr_ignore_mask,
4326 { "Header ignore mask", "homeplug_av.cblock_hdr.ignore_mask",
4327 FT_UINT16, BASE_HEX, VALS(homeplug_av_nvm_ignore_mask_vals), HOMEPLUG_AV_NVM_IGNORE_MASK_MASK, "Unknown", HFILL }
4329 { &hf_homeplug_av_cblock_hdr_module_id,
4330 { "Header module ID", "homeplug_av.cblock_hdr.module_id",
4331 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
4333 { &hf_homeplug_av_cblock_hdr_module_subid,
4334 { "Header module sub ID", "homeplug_av.cblock_hdr.module_subid",
4335 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
4337 { &hf_homeplug_av_cblock_next_hdr,
4338 { "Address of next header in NVM", "homeplug_av.cblock_hdr.next_hdr",
4339 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
4341 { &hf_homeplug_av_cblock_hdr_chksum,
4342 { "Header checksum", "homeplug_av.cblock_hdr.hdr_chksum",
4343 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
4345 /* Configuration Block */
4346 { &hf_homeplug_av_cblock,
4347 { "Configuration Block", "homeplug_av.cblock",
4348 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4350 { &hf_homeplug_av_cblock_sdram_size,
4351 { "SDRAM size", "homeplug_av.cblock.sdram_size",
4352 FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }
4354 { &hf_homeplug_av_cblock_sdram_conf,
4355 { "SDRAM Configuration Register", "homeplug_av.cblock.sdram_conf",
4356 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
4358 { &hf_homeplug_av_cblock_sdram_tim0,
4359 { "SDRAM Timing Register 0", "homeplug_av.cblock.sdram_tim0",
4360 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
4362 { &hf_homeplug_av_cblock_sdram_tim1,
4363 { "SDRAM Timing Register 1", "homeplug_av.cblock.sdram_tim1",
4364 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
4366 { &hf_homeplug_av_cblock_sdram_cntrl,
4367 { "SDRAM Control Register", "homeplug_av.cblock.sdram_cntrl",
4368 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
4370 { &hf_homeplug_av_cblock_sdram_refresh,
4371 { "SDRAM Refresh Register", "homeplug_av.cblock.sdram_refresh",
4372 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
4374 { &hf_homeplug_av_cblock_mac_clock,
4375 { "MAC Clock Register", "homeplug_av.cblock.mac_clock",
4376 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
4378 /* Set SDRAM Configuration Request */
4379 { &hf_homeplug_av_set_sdram_req,
4380 { "Set SDRAM Configuration Request", "homeplug_av.set_sdram_req",
4381 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4383 { &hf_homeplug_av_set_sdram_req_chksum,
4384 { "Checksum", "homeplug_av.set_sdram_req.chksum",
4385 FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
4387 /* Set SDRAM Configuration Confirmation */
4388 { &hf_homeplug_av_set_sdram_cnf,
4389 { "Set SDRAM Configuration Confirmation", "homeplug_av.set_sdram_cnf",
4390 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4392 { &hf_homeplug_av_set_sdram_cnf_status,
4393 { "Status", "homeplug_av.set_sdram_cnf.status",
4394 FT_UINT8, BASE_HEX, VALS(homeplug_av_cblock_status_vals), 0x00, "Unknown", HFILL }
4396 /* Embedded Host Action Required Indicate */
4397 { &hf_homeplug_av_host_action_ind,
4398 { "Embedded Host Action Required Indicate", "homeplug_av.host_action_ind",
4399 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4401 { &hf_homeplug_av_host_action_ind_act,
4402 { "Action required", "homeplug_av.host_action_ind.action",
4403 FT_UINT8, BASE_HEX, VALS(homeplug_av_host_action_vals), 0x00, NULL, HFILL }
4405 /* Embedded Host Action Required Reponse */
4406 { &hf_homeplug_av_host_action_rsp,
4407 { "Embedded Host Action Required Response", "homeplug_av.host_action_rsp",
4408 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4410 { &hf_homeplug_av_host_action_rsp_sts,
4411 { "Status", "homeplug_av.host_action_rsp.status",
4412 FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, "Unknown", HFILL }
4414 /* Get Device Attributes Request */
4415 { &hf_homeplug_av_op_attr_req,
4416 { "Get Device Attributes Request", "homeplug_av.op_attr_req",
4417 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4419 { &hf_homeplug_av_op_attr_cookie,
4420 { "Cookie", "homeplug_av.op_attr.cookie",
4421 FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }
4423 { &hf_homeplug_av_op_attr_rep_type,
4424 { "Report Type", "homeplug_av.op_attr.rep_type",
4425 FT_UINT8, BASE_HEX, VALS(homeplug_av_op_attr_report_vals), 0x00, NULL, HFILL }
4427 /* Get Device Attributes Confirmation */
4428 { &hf_homeplug_av_op_attr_cnf,
4429 { "Get Device Attributes Confirmation", "homeplug_av.op_attr_cnf",
4430 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4432 { &hf_homeplug_av_op_attr_cnf_status,
4433 { "Status", "homeplug_av.op_attr_cnf.status",
4434 FT_UINT16, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
4436 { &hf_homeplug_av_op_attr_cnf_size,
4437 { "Size", "homeplug_av.op_attr_cnf.size",
4438 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4440 { &hf_homeplug_av_op_attr_cnf_data,
4441 { "Data", "homeplug_av.op_attr_cnf.data",
4442 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4444 /* Device Attributes binary report */
4445 { &hf_homeplug_av_op_attr_data_hw,
4446 { "Hardware platform", "homeplug_av.op_attr_cnf.data.hw",
4447 FT_STRING, BASE_NONE, NULL, 0x00, NULL, HFILL }
4449 { &hf_homeplug_av_op_attr_data_sw,
4450 { "Software platform", "homeplug_av.op_attr_cnf.data.sw",
4451 FT_STRING, BASE_NONE, NULL, 0x00, NULL, HFILL }
4453 { &hf_homeplug_av_op_attr_data_sw_major,
4454 { "Major version", "homeplug_av.op_attr_cnf.data.sw_major",
4455 FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }
4457 { &hf_homeplug_av_op_attr_data_sw_minor,
4458 { "Minor version", "homeplug_av.op_attr_cnf.data.sw_minor",
4459 FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }
4461 { &hf_homeplug_av_op_attr_data_sw_sub,
4462 { "Software/PIB version", "homeplug_av.op_attr_cnf.data.sw_sub",
4463 FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }
4465 { &hf_homeplug_av_op_attr_data_sw_num,
4466 { "Software build number", "homeplug_av.op_attr_cnf.data.sw_sub",
4467 FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }
4469 { &hf_homeplug_av_op_attr_data_sw_date,
4470 { "Build date", "homeplug_av.op_attr_cnf.data.sw_date",
4471 FT_STRING, BASE_NONE, NULL, 0x00, NULL, HFILL }
4473 { &hf_homeplug_av_op_attr_data_sw_rel,
4474 { "Release type", "homeplug_av.op_attr_cnf.data.sw_rel",
4475 FT_STRING, BASE_NONE, NULL, 0x00, NULL, HFILL }
4477 { &hf_homeplug_av_op_attr_data_sw_sdram_type,
4478 { "SDRAM type", "homeplug_av.op_attr_cnf.data.sw_sdram_type",
4479 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4481 { &hf_homeplug_av_op_attr_data_sw_linefreq,
4482 { "Line frequency (Hz)", "homeplug_av.op_attr_cnf.data.sw_linefreq",
4483 FT_UINT8, BASE_DEC, VALS(homeplug_av_linefreq_vals), HOMEPLUG_AV_LINEFREQ_MASK, "Unknown", HFILL }
4485 { &hf_homeplug_av_op_attr_data_sw_zerocross,
4486 { "Zero-crossing", "homeplug_av.op_attr_cnf.data.sw_zerocross",
4487 FT_UINT8, BASE_DEC, VALS(homeplug_av_zerocrossing_vals), HOMEPLUG_AV_ZEROCROSS_MASK << 2, "Unknown", HFILL }
4489 { &hf_homeplug_av_op_attr_data_sw_sdram_size,
4490 { "SDRAM size (Mbytes)", "homeplug_av.op_attr_cnf.data.sw_sdram_size",
4491 FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }
4493 { &hf_homeplug_av_op_attr_data_sw_auth_mode,
4494 { "Authorization mode", "homeplug_av.op_attr_cnf.data.sw_auth_mode",
4495 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4497 /* Get Ethernet PHY Settings Request */
4498 { &hf_homeplug_av_enet_phy_req,
4499 { "Get Ethernet PHY Settings Request", "homeplug_av.enet_phy_req",
4500 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4502 { &hf_homeplug_av_enet_phy_req_mcontrol,
4503 { "Message Control", "homeplug_av.enet_phy_req.mcontrol",
4504 FT_UINT8, BASE_DEC, VALS(homeplug_av_enet_phy_mcontrol_vals), HOMEPLUG_AV_ENET_PHY_MCONTROL_MASK, "Unknown", HFILL }
4506 { &hf_homeplug_av_enet_phy_req_addcaps,
4507 { "Advertisement Capabilities", "homeplug_av.enet_phy_req.addcaps",
4508 FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL }
4510 /* Get Ethernet PHY Settings Confirmation */
4511 { &hf_homeplug_av_enet_phy_cnf,
4512 { "Get Ethernet PHY Settings Confirmation", "homeplug_av.enet_phy_cnf",
4513 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4515 { &hf_homeplug_av_enet_phy_cnf_status,
4516 { "Status", "homeplug_av.enet_phy_cnf.status",
4517 FT_UINT8, BASE_DEC, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
4519 { &hf_homeplug_av_enet_phy_cnf_speed,
4520 { "Speed", "homeplug_av.enet_phy.speed",
4521 FT_UINT8, BASE_DEC, VALS(homeplug_av_enet_phy_speed_vals), HOMEPLUG_AV_ENET_PHY_SPEED_MASK, "Unknown", HFILL },
4523 { &hf_homeplug_av_enet_phy_cnf_duplex,
4524 { "Duplex", "homeplug_av.enet_phy.duplex",
4525 FT_UINT8, BASE_DEC, VALS(homeplug_av_enet_phy_duplex_vals), HOMEPLUG_AV_ENET_PHY_DUPLEX_MASK, "Unknown", HFILL },
4527 /* Tone Map Tx Characteristics Request */
4528 { &hf_homeplug_av_tone_map_tx_req,
4529 { "Tone Map Tx Characteristics Request", "homeplug_av.tone_map_tx_req",
4530 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4532 { &hf_homeplug_av_tone_map_tx_req_mac,
4533 { "Peer address", "homeplug_av.tone_map_tx_req.mac",
4534 FT_ETHER, BASE_NONE, NULL, 0x00, NULL, HFILL }
4536 { &hf_homeplug_av_tone_map_tx_req_slot,
4537 { "Tone Map slot", "homeplug_av.tone_map_tx_req.slot",
4538 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4540 { &hf_homeplug_av_tone_map_tx_req_coupling,
4541 { "Coupling", "homeplug_av.tone_map_tx_req.coupling",
4542 FT_UINT8, BASE_DEC, VALS(homeplug_av_coupling_vals), HOMEPLUG_AV_COUPLING_MASK, "Unknown", HFILL }
4544 /* Tone Map Rx Characteristics Request */
4545 { &hf_homeplug_av_tone_map_rx_req,
4546 { "Tone Map Rx Characteristics Request", "homeplug_av.tone_map_rx_req",
4547 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4549 { &hf_homeplug_av_tone_map_rx_req_mac,
4550 { "Peer address", "homeplug_av.tone_map_rx_req.mac",
4551 FT_ETHER, BASE_NONE, NULL, 0x00, NULL, HFILL }
4553 { &hf_homeplug_av_tone_map_rx_req_slot,
4554 { "Tone Map slot", "homeplug_av.tone_map_rx_req.slot",
4555 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4557 { &hf_homeplug_av_tone_map_rx_req_coupling,
4558 { "Coupling", "homeplug_av.tone_map_rx_req.coupling",
4559 FT_UINT8, BASE_DEC, VALS(homeplug_av_coupling_vals), HOMEPLUG_AV_COUPLING_MASK, "Unknown", HFILL }
4561 /* Tone Map Tx Characteristics Confirmation */
4562 { &hf_homeplug_av_tone_map_tx_cnf,
4563 { "Tone Map Tx Characteristics Confirmation", "homeplug_av.tone_map_tx_cnf",
4564 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4566 { &hf_homeplug_av_tone_map_tx_cnf_status,
4567 { "Status", "homeplug_av.tone_map_tx_cnf.status",
4568 FT_UINT8, BASE_HEX, VALS(homeplug_av_tone_map_status_vals), 0x00, NULL, HFILL }
4570 { &hf_homeplug_av_tone_map_tx_cnf_len,
4571 { "Length", "homeplug_av.tone_map_tx_cnf.len",
4572 FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
4574 { &hf_homeplug_av_tone_map_tx_cnf_mac,
4575 { "Peer address", "homeplug_av.tone_map_tx_cnf.mac",
4576 FT_ETHER, BASE_NONE, NULL, 0x00, NULL, HFILL }
4578 { &hf_homeplug_av_tone_map_tx_cnf_slot,
4579 { "Slot", "homeplug_av.tone_map_tx_cnf.slot",
4580 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4582 { &hf_homeplug_av_tone_map_tx_cnf_num_tms,
4583 { "Number of Tone Maps in use", "homeplug_av.tone_map_tx_cnf.num_tms",
4584 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4586 { &hf_homeplug_av_tone_map_tx_cnf_num_act,
4587 { "Tone map number of active carriers", "homeplug_av.tone_map_tx_cnf.num_act",
4588 FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
4590 /* Tone Map Rx Characteristics Confirmation */
4591 { &hf_homeplug_av_tone_map_rx_cnf,
4592 { "Tone Map Rx Characteristics Confirmation", "homeplug_av.tone_map_rx_cnf",
4593 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4595 { &hf_homeplug_av_tone_map_rx_cnf_status,
4596 { "Status", "homeplug_av.tone_map_rx_cnf.status",
4597 FT_UINT8, BASE_HEX, VALS(homeplug_av_tone_map_status_vals), 0x00, NULL, HFILL }
4599 { &hf_homeplug_av_tone_map_rx_cnf_len,
4600 { "Length", "homeplug_av.tone_map_rx_cnf.len",
4601 FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
4603 { &hf_homeplug_av_tone_map_rx_cnf_subver,
4604 { "MME Subversion", "homeplug_av.tone_map_rx_cnf.mmesubversion",
4605 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4607 { &hf_homeplug_av_tone_map_rx_cnf_mac,
4608 { "Peer address", "homeplug_av.tone_map_rx_cnf.mac",
4609 FT_ETHER, BASE_NONE, NULL, 0x00, NULL, HFILL }
4611 { &hf_homeplug_av_tone_map_rx_cnf_slot,
4612 { "Slot", "homeplug_av.tone_map_rx_cnf.slot",
4613 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4615 { &hf_homeplug_av_tone_map_rx_cnf_coupling,
4616 { "Coupling", "homeplug_av.tone_map_rx_cnf.coupling",
4617 FT_UINT8, BASE_DEC, VALS(homeplug_av_coupling_vals), HOMEPLUG_AV_COUPLING_MASK, "Unknown", HFILL }
4619 { &hf_homeplug_av_tone_map_rx_cnf_num_tms,
4620 { "Number of Tone Maps in use", "homeplug_av.tone_map_rx_cnf.num_tms",
4621 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4623 { &hf_homeplug_av_tone_map_rx_cnf_num_act,
4624 { "Tone map number of active carriers", "homeplug_av.tone_map_rx_cnf.num_act",
4625 FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
4627 { &hf_homeplug_av_tone_map_rx_cnf_agc,
4628 { "Automatic Gain Control (AGC)", "homeplug_av.tone_map_rx_cnf.agc",
4629 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4631 { &hf_homeplug_av_tone_map_rx_cnf_gil,
4632 { "Guard Interval Length (GIL)", "homeplug_av.tone_map_rx_cnf.gil",
4633 FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
4635 /* Tone Map Carrier informations */
4636 { &hf_homeplug_av_tone_map_carriers,
4637 { "Tone Map carriers", "homeplug_av.tone_map_cnf.carriers",
4638 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4640 { &hf_homeplug_av_tone_map_carrier,
4641 { "Modulation per carrier", "homeplug_av.tone_map_cnf.carrier",
4642 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
4644 { &hf_homeplug_av_tone_map_carrier_lo,
4645 { "Modulation (Low carrier)", "homeplug_av.tone_map_cnf.carrier.lo",
4646 FT_UINT8, BASE_HEX, VALS(homeplug_av_tone_map_vals), HOMEPLUG_AV_TONE_MAP_MASK, NULL, HFILL }
4648 { &hf_homeplug_av_tone_map_carrier_hi,
4649 { "Modulation (High carrier)", "homeplug_av.tone_map_cnf.carrier.hi",
4650 FT_UINT8, BASE_HEX, VALS(homeplug_av_tone_map_vals), HOMEPLUG_AV_TONE_MAP_MASK << 4, NULL, HFILL }
4654 static gint *ett[] = {
4655 &ett_homeplug_av,
4656 &ett_homeplug_av_mmhdr,
4657 &ett_homeplug_av_mmtype,
4658 &ett_homeplug_av_fmi,
4659 &ett_homeplug_av_vendor,
4660 &ett_homeplug_av_public,
4662 &ett_homeplug_av_fc,
4663 &ett_homeplug_av_bcn,
4664 &ett_homeplug_av_cc_disc_list_cnf,
4665 &ett_homeplug_av_cc_sta_info,
4666 &ett_homeplug_av_cc_net_info,
4667 &ett_homeplug_av_cm_enc_pld_ind,
4668 &ett_homeplug_av_cm_enc_pld_rsp,
4669 &ett_homeplug_av_cm_set_key_req,
4670 &ett_homeplug_av_cm_set_key_cnf,
4671 &ett_homeplug_av_cm_get_key_req,
4672 &ett_homeplug_av_cm_get_key_cnf,
4673 &ett_homeplug_av_brg_infos_cnf,
4674 &ett_homeplug_av_cm_nw_infos_cnf,
4675 &ett_homeplug_av_nw_stats_cnf,
4677 &ett_homeplug_av_get_sw_cnf,
4678 &ett_homeplug_av_wr_mem_req,
4679 &ett_homeplug_av_wr_mem_cnf,
4680 &ett_homeplug_av_rd_mem_req,
4681 &ett_homeplug_av_st_mac_req,
4682 &ett_homeplug_av_st_mac_cnf,
4683 &ett_homeplug_av_rd_mem_cnf,
4684 &ett_homeplug_av_get_nvm_cnf,
4685 &ett_homeplug_av_rs_dev_cnf,
4686 &ett_homeplug_av_wr_mod_req,
4687 &ett_homeplug_av_wr_mod_cnf,
4688 &ett_homeplug_av_wr_mod_ind,
4689 &ett_homeplug_av_rd_mod_req,
4690 &ett_homeplug_av_rd_mod_cnf,
4691 &ett_homeplug_av_mod_nvm_req,
4692 &ett_homeplug_av_mod_nvm_cnf,
4693 &ett_homeplug_av_wd_rpt_req,
4694 &ett_homeplug_av_wd_rpt_ind,
4695 &ett_homeplug_av_lnk_stats_req,
4696 &ett_homeplug_av_lnk_stats_cnf,
4697 &ett_homeplug_av_lnk_stats_tx,
4698 &ett_homeplug_av_lnk_stats_rx,
4699 &ett_homeplug_av_lnk_stats_rx_inv,
4700 &ett_homeplug_av_sniffer_req,
4701 &ett_homeplug_av_sniffer_cnf,
4702 &ett_homeplug_av_sniffer_ind,
4703 &ett_homeplug_av_sniffer_ind_data,
4704 &ett_homeplug_av_nw_info_cnf,
4705 &ett_homeplug_av_nw_info_sta_info,
4706 &ett_homeplug_av_nw_info_net_info,
4707 &ett_homeplug_av_cp_rpt_req,
4708 &ett_homeplug_av_cp_rpt_ind,
4709 &ett_homeplug_av_fr_lbk_req,
4710 &ett_homeplug_av_fr_lbk_cnf,
4711 &ett_homeplug_av_lbk_stat_cnf,
4712 &ett_homeplug_av_set_key_req,
4713 &ett_homeplug_av_set_key_cnf,
4714 &ett_homeplug_av_mfg_string_cnf,
4715 &ett_homeplug_av_rd_cblock_cnf,
4716 &ett_homeplug_av_cblock_hdr,
4717 &ett_homeplug_av_cblock,
4718 &ett_homeplug_av_set_sdram_req,
4719 &ett_homeplug_av_set_sdram_cnf,
4720 &ett_homeplug_av_host_action_ind,
4721 &ett_homeplug_av_host_action_rsp,
4722 &ett_homeplug_av_op_attr_req,
4723 &ett_homeplug_av_op_attr_cnf,
4724 &ett_homeplug_av_op_attr_data,
4725 &ett_homeplug_av_enet_phy_req,
4726 &ett_homeplug_av_enet_phy_cnf,
4727 &ett_homeplug_av_tone_map_tx_req,
4728 &ett_homeplug_av_tone_map_rx_req,
4729 &ett_homeplug_av_tone_map_tx_cnf,
4730 &ett_homeplug_av_tone_map_rx_cnf,
4731 &ett_homeplug_av_tone_map_carriers,
4732 &ett_homeplug_av_tone_map_carrier
4736 proto_homeplug_av = proto_register_protocol("HomePlug AV protocol", "HomePlug AV", "homeplug-av");
4738 proto_register_field_array(proto_homeplug_av, hf, array_length(hf));
4740 proto_register_subtree_array(ett, array_length(ett));
4743 void
4744 proto_reg_handoff_homeplug_av(void)
4746 dissector_handle_t homeplug_av_handle;
4748 homeplug_av_handle = create_dissector_handle(dissect_homeplug_av, proto_homeplug_av);
4749 dissector_add_uint("ethertype", ETHERTYPE_HOMEPLUG_AV, homeplug_av_handle);
4753 * Editor modelines
4755 * Local Variables:
4756 * c-basic-offset: 3
4757 * tab-width: 8
4758 * indent-tabs-mode: nil
4759 * End:
4761 * ex: set shiftwidth=3 tabstop=8 expandtab:
4762 * :indentSize=3:tabSize=8:noTabs=true: