Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-homeplug-av.c
blob0d8227cb21500bdca59d7503a95d1b6e8e53000b
1 /* packet-homeplug-av.c
2 * Routines for HomePlug AV dissection
4 * Copyright 2011, Florian Fainelli <florian[AT]openwrt.org>
5 * Copyright 2016, Nora Sandler <nsandler[AT]securityinnovation.com>
6 * Copyright 2018, Sergey Rak <sergrak[AT]iotecha.com>
8 * Wireshark - Network traffic analyzer
9 * By Gerald Combs <gerald[AT]wireshark.org>
10 * Copyright 1998 Gerald Combs
12 * SPDX-License-Identifier: GPL-2.0-or-later
15 #include "config.h"
17 #include <epan/packet.h>
18 #include <epan/etypes.h>
19 #include <epan/ptvcursor.h>
20 #include <epan/tfs.h>
22 void proto_register_homeplug_av(void);
23 void proto_reg_handoff_homeplug_av(void);
25 static dissector_handle_t homeplug_av_handle;
27 static int proto_homeplug_av;
29 static int hf_homeplug_av_mmhdr;
30 static int hf_homeplug_av_mmhdr_mmver;
31 static int hf_homeplug_av_mmhdr_mmtype_general;
32 static int hf_homeplug_av_mmhdr_mmtype_qualcomm;
33 static int hf_homeplug_av_mmhdr_mmtype_st;
34 static int hf_homeplug_av_mmhdr_mmtype_lsb;
35 static int hf_homeplug_av_mmhdr_mmtype_msb;
36 static int hf_homeplug_av_mmhdr_fmi;
37 static int hf_homeplug_av_vendor;
38 static int hf_homeplug_av_vendor_oui;
39 static int hf_homeplug_av_reserved;
41 /* Frame Control fields (for sniffer data) */
42 static int hf_homeplug_av_fc;
43 static int hf_homeplug_av_fc_del_type;
44 static int hf_homeplug_av_fc_access;
45 static int hf_homeplug_av_fc_snid;
46 static int hf_homeplug_av_fc_fccs_av;
48 /* Variant fields used by multiple MPDU types */
49 static int hf_homeplug_av_dtei;
50 static int hf_homeplug_av_stei;
51 static int hf_homeplug_av_lid;
52 static int hf_homeplug_av_cfs;
53 static int hf_homeplug_av_bdf;
54 static int hf_homeplug_av_hp10df;
55 static int hf_homeplug_av_hp11df;
56 static int hf_homeplug_av_svn;
57 static int hf_homeplug_av_rrtf;
58 static int hf_homeplug_av_fl_av;
59 static int hf_homeplug_av_ppb;
60 static int hf_homeplug_av_mfs_rsp_data;
61 static int hf_homeplug_av_mfs_rsp_mgmt;
63 /* Beacon */
64 static int hf_homeplug_av_bcn;
65 static int hf_homeplug_av_bcn_bts;
66 static int hf_homeplug_av_bcn_bto_0;
67 static int hf_homeplug_av_bcn_bto_1;
68 static int hf_homeplug_av_bcn_bto_2;
69 static int hf_homeplug_av_bcn_bto_3;
71 /* Beacon MPDU Payload */
72 static int hf_homeplug_av_bcn_payload;
73 static int hf_homeplug_av_bcn_type;
74 static int hf_homeplug_av_bcn_nid;
75 static int hf_homeplug_av_bcn_stei;
76 static int hf_homeplug_av_bcn_ncnr;
77 static int hf_homeplug_av_bcn_num_slots;
78 static int hf_homeplug_av_bcn_slot_use;
79 static int hf_homeplug_av_bcn_slot_id;
80 static int hf_homeplug_av_bcn_aclss;
81 static int hf_homeplug_av_bcn_hm;
82 static int hf_homeplug_av_bcn_nm;
83 static int hf_homeplug_av_bcn_npsm;
84 static int hf_homeplug_av_bcn_cco_cap;
85 static int hf_homeplug_av_bcn_rtsbf;
86 static int hf_homeplug_av_bcn_hoip;
87 static int hf_homeplug_av_bcn_rsf;
88 static int hf_homeplug_av_bcn_plevel;
89 static int hf_homeplug_av_bcn_bentries;
90 static int hf_homeplug_av_bcn_bpcs;
92 /* Start of Frame */
93 static int hf_homeplug_av_sof;
94 static int hf_homeplug_av_sof_peks;
95 static int hf_homeplug_av_sof_ble;
96 static int hf_homeplug_av_sof_pbsz;
97 static int hf_homeplug_av_sof_num_sym;
98 static int hf_homeplug_av_sof_tmi_av;
99 static int hf_homeplug_av_sof_mpdu_cnt;
100 static int hf_homeplug_av_sof_burst_cnt;
101 static int hf_homeplug_av_sof_bbf;
102 static int hf_homeplug_av_sof_mrtfl;
103 static int hf_homeplug_av_sof_clst;
104 static int hf_homeplug_av_sof_mfs_cmd_mgmt;
105 static int hf_homeplug_av_sof_mfs_cmd_data;
106 static int hf_homeplug_av_sof_rsr;
107 static int hf_homeplug_av_sof_mcf;
108 static int hf_homeplug_av_sof_dccpcf;
109 static int hf_homeplug_av_sof_mnbf;
110 static int hf_homeplug_av_sof_mfs_rsp_mgmt;
111 static int hf_homeplug_av_sof_mfs_rsp_data;
112 static int hf_homeplug_av_sof_bm_sack;
114 /* Selective Acknowledgement */
115 static int hf_homeplug_av_sack;
117 /* Request to Send/Clear to Send */
118 static int hf_homeplug_av_rtscts;
119 static int hf_homeplug_av_rtscts_rtsf;
120 static int hf_homeplug_av_rtscts_igf;
121 static int hf_homeplug_av_rtscts_mnbf;
122 static int hf_homeplug_av_rtscts_mcf;
123 static int hf_homeplug_av_rtscts_dur;
125 /* Sound */
126 static int hf_homeplug_av_sound;
127 static int hf_homeplug_av_sound_pbsz;
128 static int hf_homeplug_av_sound_bdf;
129 static int hf_homeplug_av_sound_saf;
130 static int hf_homeplug_av_sound_scf;
131 static int hf_homeplug_av_sound_req_tm;
132 static int hf_homeplug_av_sound_mpdu_cnt;
133 static int hf_homeplug_av_sound_src;
134 static int hf_homeplug_av_sound_add_req_tm;
135 static int hf_homeplug_av_sound_max_pb_sym;
136 static int hf_homeplug_av_sound_ecsf;
137 static int hf_homeplug_av_sound_ecuf;
138 static int hf_homeplug_av_sound_ems;
139 static int hf_homeplug_av_sound_esgisf;
140 static int hf_homeplug_av_sound_elgisf;
141 static int hf_homeplug_av_sound_efrs;
143 /* Reverse Start of Frame */
144 static int hf_homeplug_av_rsof;
145 static int hf_homeplug_av_rsof_fl;
146 static int hf_homeplug_av_rsof_tmi;
147 static int hf_homeplug_av_rsof_pbsz;
148 static int hf_homeplug_av_rsof_num_sym;
149 static int hf_homeplug_av_rsof_mfs_cmd_mgmt;
150 static int hf_homeplug_av_rsof_mfs_cmd_data;
152 /* Public MMEs */
153 static int hf_homeplug_av_public;
154 static int hf_homeplug_av_public_frag_count;
155 static int hf_homeplug_av_public_frag_index;
156 static int hf_homeplug_av_public_frag_seqnum;
158 static int hf_homeplug_av_cc_disc_list_cnf;
160 static int hf_homeplug_av_cc_disc_list_sta_cnt;
161 static int hf_homeplug_av_cc_sta_info;
162 static int hf_homeplug_av_cc_sta_info_mac;
163 static int hf_homeplug_av_cc_sta_info_tei;
164 static int hf_homeplug_av_cc_sta_info_same_net;
165 static int hf_homeplug_av_cc_sta_info_sig_level;
166 static int hf_homeplug_av_cc_sta_info_avg_ble;
168 static int hf_homeplug_av_cc_disc_list_net_cnt;
169 static int hf_homeplug_av_cc_net_info;
170 static int hf_homeplug_av_cc_net_info_hyb_mode;
171 static int hf_homeplug_av_cc_net_info_bcn_slots;
172 static int hf_homeplug_av_cc_net_info_cco_sts;
173 static int hf_homeplug_av_cc_net_info_bcn_ofs;
175 static int hf_homeplug_av_brg_infos_cnf;
176 static int hf_homeplug_av_brg_infos_cnf_brd;
177 static int hf_homeplug_av_brg_infos_cnf_btei;
178 static int hf_homeplug_av_brg_infos_cnf_num_stas;
179 static int hf_homeplug_av_brg_infos_cnf_mac;
181 static int hf_homeplug_av_cm_nw_infos_cnf;
183 static int hf_homeplug_av_nw_stats_cnf;
185 /* Shared network informations fields */
186 static int hf_homeplug_av_nw_info_peks;
187 static int hf_homeplug_av_nw_info_pid;
188 static int hf_homeplug_av_nw_info_prn;
189 static int hf_homeplug_av_nw_info_pmn;
190 static int hf_homeplug_av_nw_info_my_nonce;
191 static int hf_homeplug_av_nw_info_your_nonce;
192 static int hf_homeplug_av_nw_info_key_type;
193 static int hf_homeplug_av_nw_info_cco_cap;
194 static int hf_homeplug_av_nw_info_num_avlns;
195 static int hf_homeplug_av_nw_info_nid;
196 static int hf_homeplug_av_nw_info_snid;
197 static int hf_homeplug_av_nw_info_tei;
198 static int hf_homeplug_av_nw_info_sta_role;
199 static int hf_homeplug_av_nw_info_cco_mac;
200 static int hf_homeplug_av_nw_info_cco_tei;
201 static int hf_homeplug_av_nw_info_num_stas;
202 static int hf_homeplug_av_nw_info_access;
203 static int hf_homeplug_av_nw_info_num_coord;
206 static int hf_homeplug_av_cm_enc_pld_ind;
207 static int hf_homeplug_av_cm_enc_pld_ind_avlns;
208 static int hf_homeplug_av_cm_enc_pld_ind_iv;
209 static int hf_homeplug_av_cm_enc_pld_ind_uuid;
210 static int hf_homeplug_av_cm_enc_pld_ind_len;
211 static int hf_homeplug_av_cm_enc_pld_ind_pld;
213 static int hf_homeplug_av_cm_enc_pld_rsp;
214 static int hf_homeplug_av_cm_enc_pld_rsp_result;
216 static int hf_homeplug_av_cm_set_key_req;
217 static int hf_homeplug_av_cm_set_key_req_nw_key;
219 static int hf_homeplug_av_cm_set_key_cnf;
220 static int hf_homeplug_av_cm_set_key_cnf_result;
222 static int hf_homeplug_av_cm_get_key_req;
223 static int hf_homeplug_av_cm_get_key_req_type;
224 static int hf_homeplug_av_cm_get_key_req_has_key;
226 static int hf_homeplug_av_cm_get_key_cnf;
227 static int hf_homeplug_av_cm_get_key_cnf_result;
228 static int hf_homeplug_av_cm_get_key_cnf_rtype;
229 static int hf_homeplug_av_cm_get_key_cnf_key;
232 /* Intellon specific vendor MMEs */
233 static int hf_homeplug_av_get_sw_cnf;
234 static int hf_homeplug_av_get_sw_cnf_status;
235 static int hf_homeplug_av_get_sw_cnf_dev_id;
236 static int hf_homeplug_av_get_sw_cnf_ver_len;
237 static int hf_homeplug_av_get_sw_cnf_ver_str;
238 static int hf_homeplug_av_get_sw_cnf_upg;
240 /* Shared memory related fields */
241 static int hf_homeplug_av_mem_len_16bits;
242 static int hf_homeplug_av_mem_len_32bits;
243 static int hf_homeplug_av_mem_offset;
244 static int hf_homeplug_av_mem_checksum;
245 static int hf_homeplug_av_mem_data;
246 static int hf_homeplug_av_mem_addr;
247 static int hf_homeplug_av_mem_status;
249 static int hf_homeplug_av_wr_mem_req;
250 static int hf_homeplug_av_wr_mem_cnf;
252 static int hf_homeplug_av_rd_mem_req;
253 static int hf_homeplug_av_rd_mem_cnf;
255 static int hf_homeplug_av_mac_module_id;
257 static int hf_homeplug_av_st_mac_req;
258 static int hf_homeplug_av_st_mac_req_img_load;
259 static int hf_homeplug_av_st_mac_req_img_len;
260 static int hf_homeplug_av_st_mac_req_img_chksum;
261 static int hf_homeplug_av_st_mac_req_img_start;
263 static int hf_homeplug_av_st_mac_cnf;
264 static int hf_homeplug_av_st_mac_cnf_status;
266 static int hf_homeplug_av_get_nvm_cnf;
267 static int hf_homeplug_av_get_nvm_cnf_status;
268 static int hf_homeplug_av_get_nvm_cnf_nvm_type;
269 static int hf_homeplug_av_get_nvm_cnf_nvm_page;
270 static int hf_homeplug_av_get_nvm_cnf_nvm_block;
271 static int hf_homeplug_av_get_nvm_cnf_nvm_size;
273 static int hf_homeplug_av_rs_dev_cnf;
274 static int hf_homeplug_av_rs_dev_cnf_status;
276 static int hf_homeplug_av_wr_mod_req;
278 static int hf_homeplug_av_wr_mod_cnf;
279 static int hf_homeplug_av_wr_mod_cnf_status;
281 static int hf_homeplug_av_wr_mod_ind;
282 static int hf_homeplug_av_wr_mod_ind_status;
284 static int hf_homeplug_av_rd_mod_req;
286 static int hf_homeplug_av_rd_mod_cnf;
287 static int hf_homeplug_av_rd_mod_cnf_status;
289 static int hf_homeplug_av_mod_nvm_req;
291 static int hf_homeplug_av_mod_nvm_cnf;
292 static int hf_homeplug_av_mod_nvm_cnf_status;
294 static int hf_homeplug_av_wd_rpt_req;
295 static int hf_homeplug_av_wd_rpt_req_session_id;
296 static int hf_homeplug_av_wd_rpt_req_clr;
298 static int hf_homeplug_av_wd_rpt_ind;
299 static int hf_homeplug_av_wd_rpt_ind_status;
300 static int hf_homeplug_av_wd_rpt_ind_session_id;
301 static int hf_homeplug_av_wd_rpt_ind_num_parts;
302 static int hf_homeplug_av_wd_rpt_ind_curr_part;
303 static int hf_homeplug_av_wd_rpt_ind_rdata_len;
304 static int hf_homeplug_av_wd_rpt_ind_rdata_ofs;
305 static int hf_homeplug_av_wd_rpt_ind_rdata;
307 static int hf_homeplug_av_lnk_stats_req;
308 static int hf_homeplug_av_lnk_stats_req_mcontrol;
309 static int hf_homeplug_av_lnk_stats_req_dir;
310 static int hf_homeplug_av_lnk_stats_req_lid;
311 static int hf_homeplug_av_lnk_stats_req_macaddr;
313 static int hf_homeplug_av_lnk_stats_cnf;
314 static int hf_homeplug_av_lnk_stats_cnf_status;
315 static int hf_homeplug_av_lnk_stats_cnf_dir;
316 static int hf_homeplug_av_lnk_stats_cnf_lid;
317 static int hf_homeplug_av_lnk_stats_cnf_tei;
318 static int hf_homeplug_av_lnk_stats_cnf_lstats;
320 static int hf_homeplug_av_lnk_stats_tx;
321 static int hf_homeplug_av_lnk_stats_tx_mpdu_ack;
322 static int hf_homeplug_av_lnk_stats_tx_mpdu_col;
323 static int hf_homeplug_av_lnk_stats_tx_mpdu_fai;
324 static int hf_homeplug_av_lnk_stats_tx_pbs_pass;
325 static int hf_homeplug_av_lnk_stats_tx_pbs_fail;
327 static int hf_homeplug_av_lnk_stats_rx;
328 static int hf_homeplug_av_lnk_stats_rx_mpdu_ack;
329 static int hf_homeplug_av_lnk_stats_rx_mpdu_fai;
330 static int hf_homeplug_av_lnk_stats_rx_pbs_pass;
331 static int hf_homeplug_av_lnk_stats_rx_pbs_fail;
332 static int hf_homeplug_av_lnk_stats_rx_tb_pass;
333 static int hf_homeplug_av_lnk_stats_rx_tb_fail;
334 static int hf_homeplug_av_lnk_stats_rx_num_int;
336 static int hf_homeplug_av_rx_inv_stats;
337 static int hf_homeplug_av_rx_inv_phy_rate;
338 static int hf_homeplug_av_rx_inv_pbs_pass;
339 static int hf_homeplug_av_rx_inv_pbs_fail;
340 static int hf_homeplug_av_rx_inv_tb_pass;
341 static int hf_homeplug_av_rx_inv_tb_fail;
343 static int hf_homeplug_av_sniffer_req;
344 static int hf_homeplug_av_sniffer_req_ctrl;
346 static int hf_homeplug_av_sniffer_cnf;
347 static int hf_homeplug_av_sniffer_cnf_status;
348 static int hf_homeplug_av_sniffer_cnf_state;
349 static int hf_homeplug_av_sniffer_cnf_da;
351 static int hf_homeplug_av_sniffer_ind;
352 static int hf_homeplug_av_sniffer_ind_type;
353 static int hf_homeplug_av_sniffer_ind_data;
354 static int hf_homeplug_av_sniffer_data_dir;
355 static int hf_homeplug_av_sniffer_data_systime;
356 static int hf_homeplug_av_sniffer_data_bc_time;
358 static int hf_homeplug_av_nw_info_cnf;
360 static int hf_homeplug_av_nw_info_sta_info;
361 static int hf_homeplug_av_nw_info_net_info;
363 static int hf_homeplug_av_nw_info_sta_da;
364 static int hf_homeplug_av_nw_info_sta_tei;
365 static int hf_homeplug_av_nw_info_sta_bda;
366 static int hf_homeplug_av10_nw_info_sta_phy_dr_tx;
367 static int hf_homeplug_av10_nw_info_sta_phy_dr_rx;
368 static int hf_homeplug_av11_nw_info_sta_phy_dr_tx;
369 static int hf_homeplug_av11_nw_info_sta_cpling_tx;
370 static int hf_homeplug_av11_nw_info_sta_phy_dr_rx;
371 static int hf_homeplug_av11_nw_info_sta_cpling_rx;
373 static int hf_homeplug_av_cp_rpt_req;
374 static int hf_homeplug_av_cp_rpt_req_session_id;
375 static int hf_homeplug_av_cp_rpt_req_clr;
377 static int hf_homeplug_av_cp_rpt_ind;
378 static int hf_homeplug_av_cp_rpt_ind_status;
379 static int hf_homeplug_av_cp_rpt_ind_major_ver;
380 static int hf_homeplug_av_cp_rpt_ind_minor_ver;
381 static int hf_homeplug_av_cp_rpt_ind_session_id;
382 static int hf_homeplug_av_cp_rpt_ind_total_size;
383 static int hf_homeplug_av_cp_rpt_ind_blk_offset;
384 static int hf_homeplug_av_cp_rpt_ind_byte_index;
385 static int hf_homeplug_av_cp_rpt_ind_num_parts;
386 static int hf_homeplug_av_cp_rpt_ind_curr_part;
387 static int hf_homeplug_av_cp_rpt_ind_data_len;
388 static int hf_homeplug_av_cp_rpt_ind_data_ofs;
389 static int hf_homeplug_av_cp_rpt_ind_data;
391 static int hf_homeplug_av_fr_lbk_duration;
392 static int hf_homeplug_av_fr_lbk_len;
394 static int hf_homeplug_av_fr_lbk_req;
395 static int hf_homeplug_av_fr_lbk_req_data;
397 static int hf_homeplug_av_fr_lbk_cnf;
398 static int hf_homeplug_av_fr_lbk_cnf_status;
400 static int hf_homeplug_av_lbk_stat_cnf;
401 static int hf_homeplug_av_lbk_stat_cnf_status;
402 static int hf_homeplug_av_lbk_stat_cnf_lbk_stat;
404 static int hf_homeplug_av_set_key_req;
405 static int hf_homeplug_av_set_key_req_eks;
406 static int hf_homeplug_av_set_key_req_nmk;
407 static int hf_homeplug_av_set_key_req_rda;
408 static int hf_homeplug_av_set_key_req_dak;
410 static int hf_homeplug_av_set_key_cnf;
411 static int hf_homeplug_av_set_key_cnf_status;
413 static int hf_homeplug_av_mfg_string_cnf;
414 static int hf_homeplug_av_mfg_string_cnf_status;
415 static int hf_homeplug_av_mfg_string_cnf_len;
416 static int hf_homeplug_av_mfg_string_cnf_string;
418 static int hf_homeplug_av_rd_cblock_cnf;
419 static int hf_homeplug_av_rd_cblock_cnf_status;
420 static int hf_homeplug_av_rd_cblock_cnf_len;
422 static int hf_homeplug_av_cblock_hdr;
423 static int hf_homeplug_av_cblock_hdr_ver;
424 static int hf_homeplug_av_cblock_img_rom_addr;
425 static int hf_homeplug_av_cblock_img_addr;
426 static int hf_homeplug_av_cblock_img_len;
427 static int hf_homeplug_av_cblock_img_chksum;
428 static int hf_homeplug_av_cblock_entry_point;
429 static int hf_homeplug_av_cblock_hdr_minor;
430 static int hf_homeplug_av_cblock_hdr_img_type;
431 static int hf_homeplug_av_cblock_hdr_ignore_mask;
432 static int hf_homeplug_av_cblock_hdr_module_id;
433 static int hf_homeplug_av_cblock_hdr_module_subid;
434 static int hf_homeplug_av_cblock_next_hdr;
435 static int hf_homeplug_av_cblock_hdr_chksum;
437 static int hf_homeplug_av_cblock;
438 static int hf_homeplug_av_cblock_sdram_size;
439 static int hf_homeplug_av_cblock_sdram_conf;
440 static int hf_homeplug_av_cblock_sdram_tim0;
441 static int hf_homeplug_av_cblock_sdram_tim1;
442 static int hf_homeplug_av_cblock_sdram_cntrl;
443 static int hf_homeplug_av_cblock_sdram_refresh;
444 static int hf_homeplug_av_cblock_mac_clock;
446 static int hf_homeplug_av_set_sdram_req;
447 static int hf_homeplug_av_set_sdram_req_chksum;
449 static int hf_homeplug_av_set_sdram_cnf;
450 static int hf_homeplug_av_set_sdram_cnf_status;
452 static int hf_homeplug_av_host_action_ind;
453 static int hf_homeplug_av_host_action_ind_act;
455 static int hf_homeplug_av_host_action_rsp;
456 static int hf_homeplug_av_host_action_rsp_sts;
458 static int hf_homeplug_av_op_attr_cookie;
459 static int hf_homeplug_av_op_attr_rep_type;
461 static int hf_homeplug_av_op_attr_req;
463 static int hf_homeplug_av_op_attr_cnf;
464 static int hf_homeplug_av_op_attr_cnf_status;
465 static int hf_homeplug_av_op_attr_cnf_size;
466 static int hf_homeplug_av_op_attr_cnf_data;
468 static int hf_homeplug_av_op_attr_data_hw;
469 static int hf_homeplug_av_op_attr_data_sw;
470 static int hf_homeplug_av_op_attr_data_sw_major;
471 static int hf_homeplug_av_op_attr_data_sw_minor;
472 static int hf_homeplug_av_op_attr_data_sw_sub;
473 static int hf_homeplug_av_op_attr_data_sw_num;
474 static int hf_homeplug_av_op_attr_data_sw_date;
475 static int hf_homeplug_av_op_attr_data_sw_rel;
476 static int hf_homeplug_av_op_attr_data_sw_sdram_type;
477 static int hf_homeplug_av_op_attr_data_sw_linefreq;
478 static int hf_homeplug_av_op_attr_data_sw_zerocross;
479 static int hf_homeplug_av_op_attr_data_sw_sdram_size;
480 static int hf_homeplug_av_op_attr_data_sw_auth_mode;
482 static int hf_homeplug_av_enet_phy_req;
483 static int hf_homeplug_av_enet_phy_req_mcontrol;
484 static int hf_homeplug_av_enet_phy_req_addcaps;
486 static int hf_homeplug_av_enet_phy_cnf;
487 static int hf_homeplug_av_enet_phy_cnf_status;
488 static int hf_homeplug_av_enet_phy_cnf_speed;
489 static int hf_homeplug_av_enet_phy_cnf_duplex;
491 static int hf_homeplug_av_tone_map_tx_req;
492 static int hf_homeplug_av_tone_map_tx_req_mac;
493 static int hf_homeplug_av_tone_map_tx_req_slot;
494 static int hf_homeplug_av_tone_map_tx_req_coupling;
496 static int hf_homeplug_av_tone_map_rx_req;
497 static int hf_homeplug_av_tone_map_rx_req_mac;
498 static int hf_homeplug_av_tone_map_rx_req_slot;
499 static int hf_homeplug_av_tone_map_rx_req_coupling;
501 static int hf_homeplug_av_tone_map_tx_cnf;
502 static int hf_homeplug_av_tone_map_tx_cnf_status;
503 static int hf_homeplug_av_tone_map_tx_cnf_len;
504 static int hf_homeplug_av_tone_map_tx_cnf_mac;
505 static int hf_homeplug_av_tone_map_tx_cnf_slot;
506 static int hf_homeplug_av_tone_map_tx_cnf_num_tms;
507 static int hf_homeplug_av_tone_map_tx_cnf_num_act;
509 static int hf_homeplug_av_tone_map_rx_cnf;
510 static int hf_homeplug_av_tone_map_rx_cnf_status;
511 static int hf_homeplug_av_tone_map_rx_cnf_len;
512 static int hf_homeplug_av_tone_map_rx_cnf_subver;
513 static int hf_homeplug_av_tone_map_rx_cnf_coupling;
514 static int hf_homeplug_av_tone_map_rx_cnf_mac;
515 static int hf_homeplug_av_tone_map_rx_cnf_slot;
516 static int hf_homeplug_av_tone_map_rx_cnf_num_tms;
517 static int hf_homeplug_av_tone_map_rx_cnf_num_act;
518 static int hf_homeplug_av_tone_map_rx_cnf_agc;
519 static int hf_homeplug_av_tone_map_rx_cnf_gil;
521 static int hf_homeplug_av_tone_map_carriers;
522 static int hf_homeplug_av_tone_map_carrier;
523 static int hf_homeplug_av_tone_map_carrier_lo;
524 static int hf_homeplug_av_tone_map_carrier_hi;
526 static int hf_homeplug_av_cc_assoc_reqtype;
527 static int hf_homeplug_av_cc_assoc_cco_cap;
528 static int hf_homeplug_av_cc_assoc_proxy_net_cap;
529 static int hf_homeplug_av_cc_assoc_result;
530 static int hf_homeplug_av_cc_assoc_nid;
531 static int hf_homeplug_av_cc_assoc_snid;
532 static int hf_homeplug_av_cc_assoc_tei;
533 static int hf_homeplug_av_cc_assoc_lease_time;
535 static int hf_homeplug_av_cc_set_tei_map_ind_mode;
536 static int hf_homeplug_av_cc_set_tei_map_ind_num;
537 static int hf_homeplug_av_cc_set_tei_map_ind_tei;
538 static int hf_homeplug_av_cc_set_tei_map_ind_mac;
539 static int hf_homeplug_av_cc_set_tei_map_ind_status;
541 static int hf_homeplug_av_cm_unassoc_sta_nid;
542 static int hf_homeplug_av_cm_unassoc_sta_cco_cap;
544 /* HPAV/GP fields*/
545 static int hf_homeplug_av_gp_cm_slac_parm_apptype;
546 static int hf_homeplug_av_gp_cm_slac_parm_sectype;
547 static int hf_homeplug_av_gp_cm_slac_parm_runid;
548 static int hf_homeplug_av_gp_cm_slac_parm_cipher_size;
549 static int hf_homeplug_av_gp_cm_slac_parm_cipher;
550 static int hf_homeplug_av_gp_cm_slac_parm_sound_target;
551 static int hf_homeplug_av_gp_cm_slac_parm_sound_count;
552 static int hf_homeplug_av_gp_cm_slac_parm_time_out;
553 static int hf_homeplug_av_gp_cm_slac_parm_resptype;
554 static int hf_homeplug_av_gp_cm_slac_parm_forwarding_sta;
556 static int hf_homeplug_av_gp_cm_atten_profile_ind_pev_mac;
557 static int hf_homeplug_av_gp_cm_atten_profile_ind_num_groups;
558 static int hf_homeplug_av_gp_cm_atten_profile_ind_aag;
560 static int hf_homeplug_av_gp_cm_atten_char_apptype;
561 static int hf_homeplug_av_gp_cm_atten_char_sectype;
562 static int hf_homeplug_av_gp_cm_atten_char_source_mac;
563 static int hf_homeplug_av_gp_cm_atten_char_runid;
564 static int hf_homeplug_av_gp_cm_atten_char_source_id;
565 static int hf_homeplug_av_gp_cm_atten_char_resp_id;
566 static int hf_homeplug_av_gp_cm_atten_char_numsounds;
567 static int hf_homeplug_av_gp_cm_atten_char_numgroups;
568 static int hf_homeplug_av_gp_cm_atten_char_aag;
569 static int hf_homeplug_av_gp_cm_atten_char_profile;
570 static int hf_homeplug_av_gp_cm_atten_char_cms_data;
571 static int hf_homeplug_av_gp_cm_atten_char_result;
573 static int hf_homeplug_av_gp_cm_start_atten_char_time_out;
574 static int hf_homeplug_av_gp_cm_start_atten_char_resptype;
575 static int hf_homeplug_av_gp_cm_start_atten_char_forwarding_sta;
576 static int hf_homeplug_av_gp_cm_start_atten_char_runid;
577 static int hf_homeplug_av_gp_cm_start_atten_char_numsounds;
579 static int hf_homeplug_av_gp_cm_mnbc_sound_apptype;
580 static int hf_homeplug_av_gp_cm_mnbc_sound_sectype;
581 static int hf_homeplug_av_gp_cm_mnbc_sound_sender_id;
582 static int hf_homeplug_av_gp_cm_mnbc_sound_countdown;
583 static int hf_homeplug_av_gp_cm_mnbc_sound_runid;
584 static int hf_homeplug_av_gp_cm_mnbc_sound_rsvd;
585 static int hf_homeplug_av_gp_cm_mnbc_sound_rnd;
587 static int hf_homeplug_av_gp_cm_validate_signaltype;
588 static int hf_homeplug_av_gp_cm_validate_timer;
589 static int hf_homeplug_av_gp_cm_validate_result;
590 static int hf_homeplug_av_gp_cm_validate_togglenum;
592 static int hf_homeplug_av_gp_cm_slac_match_apptype;
593 static int hf_homeplug_av_gp_cm_slac_match_sectype;
594 static int hf_homeplug_av_gp_cm_slac_match_length;
595 static int hf_homeplug_av_gp_cm_slac_match_pev_id;
596 static int hf_homeplug_av_gp_cm_slac_match_pev_mac;
597 static int hf_homeplug_av_gp_cm_slac_match_evse_id;
598 static int hf_homeplug_av_gp_cm_slac_match_evse_mac;
599 static int hf_homeplug_av_gp_cm_slac_match_runid;
600 static int hf_homeplug_av_gp_cm_slac_match_rsvd;
601 static int hf_homeplug_av_gp_cm_slac_match_nid;
602 static int hf_homeplug_av_gp_cm_slac_match_nmk;
604 static int hf_homeplug_av_gp_cm_slac_user_data_broadcast_tlv_type;
605 static int hf_homeplug_av_gp_cm_slac_user_data_tlv;
606 static int hf_homeplug_av_gp_cm_slac_user_data_tlv_type;
607 static int hf_homeplug_av_gp_cm_slac_user_data_tlv_length;
608 static int hf_homeplug_av_gp_cm_slac_user_data_tlv_str_bytes;
609 static int hf_homeplug_av_gp_cm_slac_user_data_tlv_oui;
610 static int hf_homeplug_av_gp_cm_slac_user_data_tlv_subtype;
611 static int hf_homeplug_av_gp_cm_slac_user_data_tlv_info_str;
612 /* End of HPAV/GP fields*/
614 /* ST/IoTecha fields */
615 static int hf_homeplug_av_st_iotecha_header_rsvd;
616 static int hf_homeplug_av_st_iotecha_header_mmever;
617 static int hf_homeplug_av_st_iotecha_header_mver;
619 static int hf_homeplug_av_st_iotecha_auth_nmk;
620 static int hf_homeplug_av_st_iotecha_status_byte;
622 static int hf_homeplug_av_st_iotecha_linkstatus_status;
623 static int hf_homeplug_av_st_iotecha_linkstatus_devmode;
625 static int hf_homeplug_av_st_iotecha_stp_discover_tlv;
626 static int hf_homeplug_av_st_iotecha_stp_discover_tlv_type;
627 static int hf_homeplug_av_st_iotecha_stp_discover_tlv_length;
628 static int hf_homeplug_av_st_iotecha_stp_discover_tlv_value_bytes;
629 static int hf_homeplug_av_st_iotecha_stp_discover_tlv_value_string;
631 static int hf_homeplug_av_st_iotecha_gain_ask;
632 static int hf_homeplug_av_st_iotecha_gain_new;
633 static int hf_homeplug_av_st_iotecha_gain_prev;
635 static int hf_homeplug_av_st_iotecha_mac_address;
637 static int hf_homeplug_av_st_iotecha_tei_count;
638 static int hf_homeplug_av_st_iotecha_tei;
640 static int hf_homeplug_av_st_iotecha_tei_snap_tei;
641 static int hf_homeplug_av_st_iotecha_tei_snap_addr_count;
642 static int hf_homeplug_av_st_iotecha_tei_snap_mac_address_flag;
644 static int hf_homeplug_av_st_iotecha_bss_list_count;
645 static int hf_homeplug_av_st_iotecha_bss_entry;
646 static int hf_homeplug_av_st_iotecha_bss_type;
647 static int hf_homeplug_av_st_iotecha_bss_value_bytes;
649 static int hf_homeplug_av_st_iotecha_chanqual_req_type;
650 static int hf_homeplug_av_st_iotecha_chanqual_substatus;
651 static int hf_homeplug_av_st_iotecha_chanqual_mac_local;
652 static int hf_homeplug_av_st_iotecha_chanqual_mac_remote;
653 static int hf_homeplug_av_st_iotecha_chanqual_source;
654 static int hf_homeplug_av_st_iotecha_chanqual_response_type;
655 static int hf_homeplug_av_st_iotecha_chanqual_tmi_count;
656 static int hf_homeplug_av_st_iotecha_chanqual_tmi;
657 static int hf_homeplug_av_st_iotecha_chanqual_int;
658 static int hf_homeplug_av_st_iotecha_chanqual_int_count;
659 static int hf_homeplug_av_st_iotecha_chanqual_int_et;
660 static int hf_homeplug_av_st_iotecha_chanqual_int_tmi;
661 static int hf_homeplug_av_st_iotecha_chanqual_tmi_attached;
662 static int hf_homeplug_av_st_iotecha_chanqual_fec_type;
663 static int hf_homeplug_av_st_iotecha_chanqual_cbld;
664 static int hf_homeplug_av_st_iotecha_chanqual_cbld_data_low;
665 static int hf_homeplug_av_st_iotecha_chanqual_cbld_data_high;
667 static int hf_homeplug_av_st_iotecha_mfct_crc;
668 static int hf_homeplug_av_st_iotecha_mfct_total_length;
669 static int hf_homeplug_av_st_iotecha_mfct_offset;
670 static int hf_homeplug_av_st_iotecha_mfct_length;
671 static int hf_homeplug_av_st_iotecha_mfct_data;
672 static int hf_homeplug_av_st_iotecha_mfct_timeout;
673 static int hf_homeplug_av_st_iotecha_mfct_request_type;
674 static int hf_homeplug_av_st_iotecha_mfct_reboot;
675 static int hf_homeplug_av_st_iotecha_mfct_item_offset;
676 static int hf_homeplug_av_st_iotecha_mfct_item_total_length;
677 static int hf_homeplug_av_st_iotecha_mfct_name;
678 static int hf_homeplug_av_st_iotecha_mfct_value;
679 static int hf_homeplug_av_st_iotecha_mfct_result;
681 static int hf_homeplug_av_st_iotecha_stp_fup_mac_da;
682 static int hf_homeplug_av_st_iotecha_stp_fup_mac_sa;
683 static int hf_homeplug_av_st_iotecha_stp_fup_mtype;
685 static int hf_homeplug_av_st_iotecha_cpstate_state;
686 static int hf_homeplug_av_st_iotecha_cpstate_pwm_duty;
687 static int hf_homeplug_av_st_iotecha_cpstate_pwm_freq;
688 static int hf_homeplug_av_st_iotecha_cpstate_voltage;
689 static int hf_homeplug_av_st_iotecha_cpstate_adc_bitmask;
690 static int hf_homeplug_av_st_iotecha_cpstate_adc_voltage_1;
691 static int hf_homeplug_av_st_iotecha_cpstate_adc_voltage_2;
692 static int hf_homeplug_av_st_iotecha_cpstate_adc_voltage_3;
694 static int hf_homeplug_av_st_iotecha_user_message_info;
695 static int hf_homeplug_av_st_iotecha_user_message_details;
697 static int hf_homeplug_av_st_iotecha_test_type;
698 static int hf_homeplug_av_st_iotecha_num_sound;
699 static int hf_homeplug_av_st_iotecha_data_ind_addr;
700 static int hf_homeplug_av_st_iotecha_agc_lock;
701 static int hf_homeplug_av_st_iotecha_db_agc_val;
703 static int hf_homeplug_av_st_iotecha_test_status;
704 static int hf_homeplug_av_st_iotecha_suppress_data;
706 // STP_TEST_CHAN_ATTEN_DATA
707 static int hf_homeplug_av_st_iotecha_sound_remain;
708 static int hf_homeplug_av_st_iotecha_ntb_time;
709 static int hf_homeplug_av_st_iotecha_rsvd1;
710 static int hf_homeplug_av_st_iotecha_rsvd2;
711 static int hf_homeplug_av_st_iotecha_num_segments;
712 static int hf_homeplug_av_st_iotecha_segment;
713 static int hf_homeplug_av_st_iotecha_num_chan;
714 static int hf_homeplug_av_st_iotecha_chan_start;
716 /* End of ST/IoTecha fields */
718 /* Subtrees ett */
719 static int ett_homeplug_av;
720 static int ett_homeplug_av_mmhdr;
721 static int ett_homeplug_av_mmtype;
722 static int ett_homeplug_av_fmi;
723 static int ett_homeplug_av_vendor;
724 static int ett_homeplug_av_public;
726 static int ett_homeplug_av_fc;
727 static int ett_homeplug_av_sof;
728 static int ett_homeplug_av_sack;
729 static int ett_homeplug_av_rtscts;
730 static int ett_homeplug_av_sound;
731 static int ett_homeplug_av_rsof;
732 static int ett_homeplug_av_bcn;
733 static int ett_homeplug_av_bcn_payload;
734 static int ett_homeplug_av_cc_disc_list_cnf;
735 static int ett_homeplug_av_cc_sta_info;
736 static int ett_homeplug_av_cc_net_info;
737 static int ett_homeplug_av_cm_enc_pld_ind;
738 static int ett_homeplug_av_cm_enc_pld_rsp;
739 static int ett_homeplug_av_cm_set_key_req;
740 static int ett_homeplug_av_cm_set_key_cnf;
741 static int ett_homeplug_av_cm_get_key_req;
742 static int ett_homeplug_av_cm_get_key_cnf;
743 static int ett_homeplug_av_brg_infos_cnf;
744 static int ett_homeplug_av_cm_nw_infos_cnf;
745 static int ett_homeplug_av_nw_stats_cnf;
747 static int ett_homeplug_av_get_sw_cnf;
748 static int ett_homeplug_av_wr_mem_req;
749 static int ett_homeplug_av_wr_mem_cnf;
750 static int ett_homeplug_av_rd_mem_req;
751 static int ett_homeplug_av_st_mac_req;
752 static int ett_homeplug_av_st_mac_cnf;
753 static int ett_homeplug_av_rd_mem_cnf;
754 static int ett_homeplug_av_get_nvm_cnf;
755 static int ett_homeplug_av_rs_dev_cnf;
756 static int ett_homeplug_av_wr_mod_req;
757 static int ett_homeplug_av_wr_mod_cnf;
758 static int ett_homeplug_av_wr_mod_ind;
759 static int ett_homeplug_av_rd_mod_req;
760 static int ett_homeplug_av_rd_mod_cnf;
761 static int ett_homeplug_av_mod_nvm_req;
762 static int ett_homeplug_av_mod_nvm_cnf;
763 static int ett_homeplug_av_wd_rpt_req;
764 static int ett_homeplug_av_wd_rpt_ind;
765 static int ett_homeplug_av_lnk_stats_req;
766 static int ett_homeplug_av_lnk_stats_cnf;
767 static int ett_homeplug_av_lnk_stats_tx;
768 static int ett_homeplug_av_lnk_stats_rx;
769 static int ett_homeplug_av_lnk_stats_rx_inv;
770 static int ett_homeplug_av_sniffer_req;
771 static int ett_homeplug_av_sniffer_cnf;
772 static int ett_homeplug_av_sniffer_ind;
773 static int ett_homeplug_av_sniffer_ind_data;
774 static int ett_homeplug_av_nw_info_cnf;
775 static int ett_homeplug_av_nw_info_sta_info;
776 static int ett_homeplug_av_nw_info_net_info;
777 static int ett_homeplug_av_cp_rpt_req;
778 static int ett_homeplug_av_cp_rpt_ind;
779 static int ett_homeplug_av_fr_lbk_req;
780 static int ett_homeplug_av_fr_lbk_cnf;
781 static int ett_homeplug_av_lbk_stat_cnf;
782 static int ett_homeplug_av_set_key_req;
783 static int ett_homeplug_av_set_key_cnf;
784 static int ett_homeplug_av_mfg_string_cnf;
785 static int ett_homeplug_av_rd_cblock_cnf;
786 static int ett_homeplug_av_cblock_hdr;
787 static int ett_homeplug_av_cblock;
788 static int ett_homeplug_av_set_sdram_req;
789 static int ett_homeplug_av_set_sdram_cnf;
790 static int ett_homeplug_av_host_action_ind;
791 static int ett_homeplug_av_host_action_rsp;
792 static int ett_homeplug_av_op_attr_req;
793 static int ett_homeplug_av_op_attr_cnf;
794 static int ett_homeplug_av_op_attr_data;
795 static int ett_homeplug_av_enet_phy_req;
796 static int ett_homeplug_av_enet_phy_cnf;
797 static int ett_homeplug_av_tone_map_tx_req;
798 static int ett_homeplug_av_tone_map_rx_req;
799 static int ett_homeplug_av_tone_map_tx_cnf;
800 static int ett_homeplug_av_tone_map_rx_cnf;
801 static int ett_homeplug_av_tone_map_carriers;
802 static int ett_homeplug_av_tone_map_carrier;
803 /* HPGP */
804 static int ett_homeplug_av_gp_cm_atten_char_profile;
805 static int ett_homeplug_av_gp_cm_slac_user_data_tlv;
807 /* ST/IoTecha specific subtrees */
808 static int ett_homeplug_av_st_iotecha_header;
809 static int ett_homeplug_av_st_iotecha_type_length_value;
810 static int ett_homeplug_av_st_iotecha_chanqual_int;
811 static int ett_homeplug_av_st_iotecha_chanqual_cbld;
812 static int ett_homeplug_av_st_iotecha_bss_entry;
813 /* End of ST/IoTecha specific subtrees */
815 /* Saving vendor specific subtree */
816 static proto_tree *ti_vendor;
818 #define HOMEPLUG_AV_MMHDR_LEN 3 /* MM version (1) + MM type (2) */
820 #define HOMEPLUG_AV_PUBLIC_FRAG_COUNT_MASK 0xF0
821 #define HOMEPLUG_AV_PUBLIC_FRAG_INDEX_MASK 0x0F
823 /* MME Values */
824 /* General MME Types */
825 typedef enum {
826 /* Station - Central Coordinator*/
827 HOMEPLUG_AV_MMTYPE_GENERAL_CC_BACKUP_APPOINT_REQ = 0x0004,
828 HOMEPLUG_AV_MMTYPE_GENERAL_CC_BACKUP_APPOINT_CNF = 0x0005,
829 HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_INFO_REQ = 0x0008,
830 HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_INFO_CNF = 0x0009,
831 HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_INFO_IND = 0x000A,
832 HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_INFO_RSP = 0x000B,
833 HOMEPLUG_AV_MMTYPE_GENERAL_CC_HANDOVER_REQ = 0x000C,
834 HOMEPLUG_AV_MMTYPE_GENERAL_CC_HANDOVER_CNF = 0x000D,
835 HOMEPLUG_AV_MMTYPE_GENERAL_CC_HANDOVER_INFO_IND = 0x0012,
836 HOMEPLUG_AV_MMTYPE_GENERAL_CC_HANDOVER_INFO_RSP = 0x0013,
837 HOMEPLUG_AV_MMTYPE_GENERAL_CC_DISCOVER_LIST_REQ = 0x0014,
838 HOMEPLUG_AV_MMTYPE_GENERAL_CC_DISCOVER_LIST_CNF = 0x0015,
839 HOMEPLUG_AV_MMTYPE_GENERAL_CC_DISCOVER_LIST_IND = 0x0016,
840 HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_NEW_REQ = 0x0018,
841 HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_NEW_CNF = 0x0019,
842 HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_MOD_REQ = 0x001C,
843 HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_MOD_CNF = 0x001D,
844 HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_SQZ_REQ = 0x0020,
845 HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_SQZ_CNF = 0x0021,
846 HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_REL_REQ = 0x0024,
847 HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_REL_IND = 0x0026,
848 HOMEPLUG_AV_MMTYPE_GENERAL_CC_DETECTC_REPORT_REQ = 0x0028,
849 HOMEPLUG_AV_MMTYPE_GENERAL_CC_DETECTC_REPORT_CNF = 0x0029,
850 HOMEPLUG_AV_MMTYPE_GENERAL_CC_WHO_RU_REQ = 0x002C,
851 HOMEPLUG_AV_MMTYPE_GENERAL_CC_WHO_RU_CNF = 0x002D,
852 HOMEPLUG_AV_MMTYPE_GENERAL_CC_ASSOC_REQ = 0x0030,
853 HOMEPLUG_AV_MMTYPE_GENERAL_CC_ASSOC_CNF = 0x0031,
854 HOMEPLUG_AV_MMTYPE_GENERAL_CC_LEAVE_REQ = 0x0034,
855 HOMEPLUG_AV_MMTYPE_GENERAL_CC_LEAVE_CNF = 0x0035,
856 HOMEPLUG_AV_MMTYPE_GENERAL_CC_LEAVE_IND = 0x0036,
857 HOMEPLUG_AV_MMTYPE_GENERAL_CC_LEAVE_RSP = 0x0037,
858 HOMEPLUG_AV_MMTYPE_GENERAL_CC_SET_TEI_MAP_REQ = 0x0038,
859 HOMEPLUG_AV_MMTYPE_GENERAL_CC_SET_TEI_MAP_IND = 0x003A,
860 HOMEPLUG_AV_MMTYPE_GENERAL_CC_RELAY_REQ = 0x003C,
861 HOMEPLUG_AV_MMTYPE_GENERAL_CC_RELAY_IND = 0x003E,
862 HOMEPLUG_AV_MMTYPE_GENERAL_CC_BEACON_RELIABILITY_REQ = 0x0040,
863 HOMEPLUG_AV_MMTYPE_GENERAL_CC_BEACON_RELIABILITY_CNF = 0x0041,
864 HOMEPLUG_AV_MMTYPE_GENERAL_CC_ALLOC_MOVE_REQ = 0x0044,
865 HOMEPLUG_AV_MMTYPE_GENERAL_CC_ALLOC_MOVE_CNF = 0x0045,
866 HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_NEW_REQ = 0x0048,
867 HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_NEW_CNF = 0x0049,
868 HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_NEW_IND = 0x004A,
869 HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_NEW_RSP = 0x004B,
870 HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_REL_REQ = 0x004C,
871 HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_REL_CNF = 0x004D,
872 HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_REL_IND = 0x004E,
873 HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_REL_RSP = 0x004F,
874 HOMEPLUG_AV_MMTYPE_GENERAL_CC_DCPPC_IND = 0x0052,
875 HOMEPLUG_AV_MMTYPE_GENERAL_CC_DCPPC_RSP = 0x0053,
876 HOMEPLUG_AV_MMTYPE_GENERAL_CC_HP1_DET_REQ = 0x0054,
877 HOMEPLUG_AV_MMTYPE_GENERAL_CC_HP1_DET_CNF = 0x0055,
878 HOMEPLUG_AV_MMTYPE_GENERAL_CC_BLE_UPDATE_IND = 0x005A,
879 /* HPGP Specific*/
880 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_BCAST_REPEAT_IND = 0x005E,
881 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_BCAST_REPEAT_RSP = 0x005F,
882 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_MH_LINK_NEW_REQ = 0x0060,
883 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_MH_LINK_NEW_CNF = 0x0061,
884 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_DETECTION_REPORT_IND = 0x0066,
885 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_START_RESYNC_REQ = 0x0068,
886 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_FINISH_RESYNC_REQ = 0x006C,
887 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_DETECTED_RESYNC_IND = 0x0072,
888 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_TRANSMIT_RESYNC_REQ = 0x0074,
889 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_REQ = 0x0078,
890 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_CNF = 0x0079,
891 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_EXIT_REQ = 0x007C,
892 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_EXIT_CNF = 0x007D,
893 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_LIST_REQ = 0x0080,
894 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_LIST_CNF = 0x0081,
895 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_STOP_REQ = 0x0084,
896 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_STOP_CNF = 0x0085,
897 /* Proxy Coordinator */
898 HOMEPLUG_AV_MMTYPE_GENERAL_CP_PROXY_APPOINT_REQ = 0x2000,
899 HOMEPLUG_AV_MMTYPE_GENERAL_CP_PROXY_APPOINT_CNF = 0x2001,
900 HOMEPLUG_AV_MMTYPE_GENERAL_PH_PROXY_APPOINT_IND = 0x2006,
901 HOMEPLUG_AV_MMTYPE_GENERAL_CP_PROXY_WAKE_REQ = 0x2008,
902 /* CCo - CCo */
903 HOMEPLUG_AV_MMTYPE_GENERAL_NN_INL_REQ = 0x4000,
904 HOMEPLUG_AV_MMTYPE_GENERAL_NN_INL_CNF = 0x4001,
905 HOMEPLUG_AV_MMTYPE_GENERAL_NN_NEW_NET_REQ = 0x4004,
906 HOMEPLUG_AV_MMTYPE_GENERAL_NN_NEW_NET_CNF = 0x4005,
907 HOMEPLUG_AV_MMTYPE_GENERAL_NN_NEW_NET_IND = 0x4006,
908 HOMEPLUG_AV_MMTYPE_GENERAL_NN_ADD_ALLOC_REQ = 0x4008,
909 HOMEPLUG_AV_MMTYPE_GENERAL_NN_ADD_ALLOC_CNF = 0x4009,
910 HOMEPLUG_AV_MMTYPE_GENERAL_NN_ADD_ALLOC_IND = 0x400A,
911 HOMEPLUG_AV_MMTYPE_GENERAL_NN_REL_ALLOC_REQ = 0x400C,
912 HOMEPLUG_AV_MMTYPE_GENERAL_NN_REL_ALLOC_CNF = 0x400D,
913 HOMEPLUG_AV_MMTYPE_GENERAL_NN_REL_NET_IND = 0x4012,
914 /* Station - Station */
915 HOMEPLUG_AV_MMTYPE_GENERAL_CM_UNASSOCIATED_STA_IND = 0x6002,
916 HOMEPLUG_AV_MMTYPE_GENERAL_CM_ENCRYPTED_PAYLOAD_IND = 0x6006,
917 HOMEPLUG_AV_MMTYPE_GENERAL_CM_ENCRYPTED_PAYLOAD_RSP = 0x6007,
918 HOMEPLUG_AV_MMTYPE_GENERAL_CM_SET_KEY_REQ = 0x6008,
919 HOMEPLUG_AV_MMTYPE_GENERAL_CM_SET_KEY_CNF = 0x6009,
920 HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_KEY_REQ = 0x600C,
921 HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_KEY_CNF = 0x600D,
922 HOMEPLUG_AV_MMTYPE_GENERAL_CM_SC_JOIN_REQ = 0x6010,
923 HOMEPLUG_AV_MMTYPE_GENERAL_CM_SC_JOIN_CNF = 0x6011,
924 HOMEPLUG_AV_MMTYPE_GENERAL_CM_SC_CHAN_EST_IND = 0x6016,
925 HOMEPLUG_AV_MMTYPE_GENERAL_CM_TM_UPDATE_IND = 0x601A,
926 HOMEPLUG_AV_MMTYPE_GENERAL_CM_AMP_MAP_REQ = 0x601C,
927 HOMEPLUG_AV_MMTYPE_GENERAL_CM_AMP_MAP_CNF = 0x601D,
928 HOMEPLUG_AV_MMTYPE_GENERAL_CM_BRG_INFO_REQ = 0x6020,
929 HOMEPLUG_AV_MMTYPE_GENERAL_CM_BRG_INFO_CNF = 0x6021,
930 HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_NEW_REQ = 0x6024,
931 HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_NEW_CNF = 0x6025,
932 HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_REL_IND = 0x602A,
933 HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_REL_RSP = 0x602B,
934 HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_MOD_REQ = 0x602C,
935 HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_MOD_CNF = 0x602D,
936 HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_INFO_REQ = 0x6030,
937 HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_INFO_CNF = 0x6031,
938 HOMEPLUG_AV_MMTYPE_GENERAL_CM_STA_CAP_REQ = 0x6034,
939 HOMEPLUG_AV_MMTYPE_GENERAL_CM_STA_CAP_CNF = 0x6035,
940 HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_INFO_REQ = 0x6038,
941 HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_INFO_CNF = 0x6039,
942 HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_BEACON_REQ = 0x603C,
943 HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_BEACON_CNF = 0x603D,
944 HOMEPLUG_AV_MMTYPE_GENERAL_CM_HFID_REQ = 0x6040,
945 HOMEPLUG_AV_MMTYPE_GENERAL_CM_HFID_CNF = 0x6041,
946 HOMEPLUG_AV_MMTYPE_GENERAL_CM_MME_ERROR_IND = 0x6046,
947 HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_STATS_REQ = 0x6048,
948 HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_STATS_CNF = 0x6049,
949 HOMEPLUG_AV_MMTYPE_GENERAL_CM_LINK_STATS_REQ = 0x604C,
950 HOMEPLUG_AV_MMTYPE_GENERAL_CM_LINK_STATS_CNF = 0x604D,
951 /* HPGP Specific*/
952 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ROUTE_INFO_REQ = 0x6050,
953 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ROUTE_INFO_CNF = 0x6051,
954 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ROUTE_INFO_IND = 0x6052,
955 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_UNREACHABLE_IND = 0x6056,
956 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_MH_CONN_NEW_REQ = 0x6058,
957 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_MH_CONN_NEW_CNF = 0x6059,
958 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_EXTENDED_TONEMASK_REQ = 0x605C,
959 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_EXTENDED_TONEMASK_CNF = 0x605D,
960 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_STA_IDENTIFY_REQ = 0x6060,
961 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_STA_IDENTIFY_CNF = 0x6061,
962 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_STA_IDENTIFY_IND = 0x6062,
963 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_STA_IDENTIFY_RSP = 0x6063,
964 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_PARM_REQ = 0x6064,
965 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_PARM_CNF = 0x6065,
966 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_START_ATTEN_CHAR_IND = 0x606A,
967 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ATTEN_CHAR_IND = 0x606E,
968 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ATTEN_CHAR_RSP = 0x606F,
969 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_PKCS_CERT_REQ = 0x6070,
970 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_PKCS_CERT_CNF = 0x6071,
971 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_PKCS_CERT_IND = 0x6072,
972 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_PKCS_CERT_RSP = 0x6073,
973 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_MNBC_SOUND_IND = 0x6076,
974 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_VALIDATE_REQ = 0x6078,
975 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_VALIDATE_CNF = 0x6079,
976 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_MATCH_REQ = 0x607C,
977 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_MATCH_CNF = 0x607D,
978 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_USER_DATA_REQ = 0x6080,
979 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_USER_DATA_CNF = 0x6081,
980 HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ATTEN_PROFILE_IND = 0x6086,
981 } homeplug_av_mmetypes_general_type;
983 /* QCA MME Types */
984 typedef enum {
985 HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_SW_REQ = 0xA000,
986 HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_SW_CNF = 0xA001,
987 HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MEM_REQ = 0xA004,
988 HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MEM_CNF = 0xA005,
989 HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MEM_REQ = 0xA008,
990 HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MEM_CNF = 0xA009,
991 HOMEPLUG_AV_MMTYPE_QUALCOMM_ST_MAC_REQ = 0xA00C,
992 HOMEPLUG_AV_MMTYPE_QUALCOMM_ST_MAC_CNF = 0xA00D,
993 HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_NVM_REQ = 0xA010,
994 HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_NVM_CNF = 0xA011,
995 HOMEPLUG_AV_MMTYPE_QUALCOMM_RS_DEV_REQ = 0xA01C,
996 HOMEPLUG_AV_MMTYPE_QUALCOMM_RS_DEV_CNF = 0xA01D,
997 HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MOD_REQ = 0xA020,
998 HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MOD_CNF = 0xA021,
999 HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MOD_IND = 0xA022,
1000 HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MOD_REQ = 0xA024,
1001 HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MOD_CNF = 0xA025,
1002 HOMEPLUG_AV_MMTYPE_QUALCOMM_NVM_MOD_REQ = 0xA028,
1003 HOMEPLUG_AV_MMTYPE_QUALCOMM_NVM_MOD_CNF = 0xA029,
1004 HOMEPLUG_AV_MMTYPE_QUALCOMM_WD_RPT_REQ = 0xA02C,
1005 HOMEPLUG_AV_MMTYPE_QUALCOMM_WD_RPT_IND = 0xA02E,
1006 HOMEPLUG_AV_MMTYPE_QUALCOMM_LNK_STATS_REQ = 0xA030,
1007 HOMEPLUG_AV_MMTYPE_QUALCOMM_LNK_STATS_CNF = 0xA031,
1008 HOMEPLUG_AV_MMTYPE_QUALCOMM_SNIFFER_REQ = 0xA034,
1009 HOMEPLUG_AV_MMTYPE_QUALCOMM_SNIFFER_CNF = 0xA035,
1010 HOMEPLUG_AV_MMTYPE_QUALCOMM_SNIFFER_IND = 0xA036,
1011 HOMEPLUG_AV_MMTYPE_QUALCOMM_NW_INFO_REQ = 0xA038,
1012 HOMEPLUG_AV_MMTYPE_QUALCOMM_NW_INFO_CNF = 0xA039,
1013 HOMEPLUG_AV_MMTYPE_QUALCOMM_CP_RPT_REQ = 0xA040,
1014 HOMEPLUG_AV_MMTYPE_QUALCOMM_CP_RPT_IND = 0xA042,
1015 HOMEPLUG_AV_MMTYPE_QUALCOMM_FR_LBK_REQ = 0xA048,
1016 HOMEPLUG_AV_MMTYPE_QUALCOMM_FR_LBK_CNF = 0xA049,
1017 HOMEPLUG_AV_MMTYPE_QUALCOMM_LBK_STAT_REQ = 0xA04C,
1018 HOMEPLUG_AV_MMTYPE_QUALCOMM_LBK_STAT_CNF = 0xA04D,
1019 HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_KEY_REQ = 0xA050,
1020 HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_KEY_CNF = 0xA051,
1021 HOMEPLUG_AV_MMTYPE_QUALCOMM_MFG_STRING_REQ = 0xA054,
1022 HOMEPLUG_AV_MMTYPE_QUALCOMM_MFG_STRING_CNF = 0xA055,
1023 HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_CBLOCK_REQ = 0xA058,
1024 HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_CBLOCK_CNF = 0xA059,
1025 HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_SDRAM_REQ = 0xA05C,
1026 HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_SDRAM_CNF = 0xA05D,
1027 HOMEPLUG_AV_MMTYPE_QUALCOMM_HOST_ACTION_IND = 0xA062,
1028 HOMEPLUG_AV_MMTYPE_QUALCOMM_HOST_ACTION_RSP = 0xA063,
1029 HOMEPLUG_AV_MMTYPE_QUALCOMM_OP_ATTR_REQ = 0xA068,
1030 HOMEPLUG_AV_MMTYPE_QUALCOMM_OP_ATTR_CNF = 0xA069,
1031 HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_ENET_PHY_REQ = 0xA06C,
1032 HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_ENET_PHY_CNF = 0xA06D,
1033 HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_TX_REQ = 0xA070,
1034 HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_TX_CNF = 0xA071,
1035 HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_RX_REQ = 0xA090,
1036 HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_RX_CNF = 0xA091,
1037 HOMEPLUG_AV_MMTYPE_QUALCOMM_LINK_STATUS_REQ = 0xA0B8,
1038 HOMEPLUG_AV_MMTYPE_QUALCOMM_LINK_STATUS_CNF = 0xA0B9,
1039 } homeplug_av_mmetypes_qualcomm_type;
1041 /* ST/IoTecha MME Types */
1042 typedef enum {
1043 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_AUTH_SET_NMK_REQ = 0x8000,
1044 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_AUTH_SET_NMK_CNF = 0x8001,
1045 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_LINK_STATUS_REQ = 0x8004,
1046 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_LINK_STATUS_CNF = 0x8005,
1047 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_LINK_STATUS_IND = 0x8006,
1048 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_LOCAL_REQ = 0x8008,
1049 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_LOCAL_CNF = 0x8009,
1050 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_SET_MAXGAIN_REQ = 0x800C,
1051 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_SET_MAXGAIN_CNF = 0x800D,
1052 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_REQ = 0xA000,
1053 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_CNF = 0xA001,
1054 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_LIST_REQ = 0xA00C,
1055 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_LIST_CNF = 0xA00D,
1056 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_SNAPSHOT_REQ = 0xA010,
1057 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_SNAPSHOT_CNF = 0xA011,
1058 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_BSS_LIST_REQ = 0xA014,
1059 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_BSS_LIST_CNF = 0xA015,
1060 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CHANQUAL_REPORT_REQ = 0xA018,
1061 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CHANQUAL_REPORT_CNF = 0xA019,
1062 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CHANQUAL_REPORT_IND = 0xA01A,
1063 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_RX_REQ = 0xA100,
1064 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_RX_CNF = 0xA101,
1065 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_DATA_IND = 0xA106,
1066 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_TX_REQ = 0xA108,
1067 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_TX_CNF = 0xA109,
1068 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_SOUND_QUIET_IND = 0xA10E,
1069 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_STAGE_REQ = 0xA200,
1070 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_STAGE_CNF = 0xA201,
1071 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_FINISH_REQ = 0xA204,
1072 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_FINISH_CNF = 0xA205,
1073 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_ITEM_REQ = 0xA208,
1074 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_ITEM_CNF = 0xA209,
1075 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_KEYLIST_REQ = 0xA20C,
1076 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_KEYLIST_CNF = 0xA20D,
1077 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_FUP_REQ = 0xA210,
1078 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_RESERVED_REQ = 0xA214,
1079 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CPSTATE_IND = 0xA22E,
1080 HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_USER_MESSAGE_IND = 0xA232,
1081 } homeplug_av_mmetypes_st_iotecha_type;
1083 /* Vendors OUI */
1084 #define HOMEPLUG_AV_OUI_NONE 0
1085 #define HOMEPLUG_AV_OUI_QCA 0x00B052
1086 #define HOMEPLUG_AV_OUI_ST_IOTECHA 0x0080E1
1088 static const value_string homeplug_av_vendors_oui_vals[] = {
1089 { HOMEPLUG_AV_OUI_QCA, "Qualcomm Atheros" },
1090 { HOMEPLUG_AV_OUI_ST_IOTECHA, "ST/IoTecha" },
1091 { 0, NULL }
1094 /* Packet names */
1095 /* Public MMEs */
1096 static const value_string homeplug_av_mmtype_general_vals[] = {
1097 /* Station - Central Coordinator*/
1098 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_BACKUP_APPOINT_REQ , "CC_BACKUP_APPOINT.REQ" },
1099 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_BACKUP_APPOINT_CNF , "CC_BACKUP_APPOINT.CNF" },
1100 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_INFO_REQ , "CC_LINK_INFO.REQ" },
1101 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_INFO_CNF , "CC_LINK_INFO.CNF" },
1102 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_INFO_IND , "CC_LINK_INFO.IND" },
1103 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_INFO_RSP , "CC_LINK_INFO.RSP" },
1104 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_HANDOVER_REQ , "CC_HANDOVER.REQ" },
1105 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_HANDOVER_CNF , "CC_HANDOVER.CNF" },
1106 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_HANDOVER_INFO_IND , "CC_HANDOVER_INFO.IND" },
1107 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_HANDOVER_INFO_RSP , "CC_HANDOVER_INFO.RSP" },
1108 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_DISCOVER_LIST_REQ , "CC_DISCOVER_LIST.REQ (Central Coordination Discovery List Request)" },
1109 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_DISCOVER_LIST_CNF , "CC_DISCOVER_LIST.CNF (Central Coordination Discovery List Confirmation)" },
1110 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_DISCOVER_LIST_IND , "CC_DISCOVER_LIST.IND" },
1111 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_NEW_REQ , "CC_LINK_NEW.REQ" },
1112 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_NEW_CNF , "CC_LINK_NEW.CNF" },
1113 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_MOD_REQ , "CC_LINK_MOD.REQ" },
1114 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_MOD_CNF , "CC_LINK_MOD.CNF" },
1115 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_SQZ_REQ , "CC_LINK_SQZ.REQ" },
1116 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_SQZ_CNF , "CC_LINK_SQZ.CNF" },
1117 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_REL_REQ , "CC_LINK_REL.REQ" },
1118 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_REL_IND , "CC_LINK_REL.IND" },
1119 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_DETECTC_REPORT_REQ , "CC_DETECTC_REPORT.REQ" },
1120 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_DETECTC_REPORT_CNF , "CC_DETECTC_REPORT.CNF" },
1121 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_WHO_RU_REQ , "CC_WHO_RU.REQ" },
1122 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_WHO_RU_CNF , "CC_WHO_RU.CNF" },
1123 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ASSOC_REQ , "CC_ASSOC.REQ" },
1124 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ASSOC_CNF , "CC_ASSOC.CNF" },
1125 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LEAVE_REQ , "CC_LEAVE.REQ" },
1126 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LEAVE_CNF , "CC_LEAVE.CNF" },
1127 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LEAVE_IND , "CC_LEAVE.IND" },
1128 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LEAVE_RSP , "CC_LEAVE.RSP" },
1129 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_SET_TEI_MAP_REQ , "CC_SET_TEI_MAP.REQ" },
1130 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_SET_TEI_MAP_IND , "CC_SET_TEI_MAP.IND" },
1131 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_RELAY_REQ , "CC_RELAY.REQ" },
1132 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_RELAY_IND , "CC_RELAY.IND" },
1133 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_BEACON_RELIABILITY_REQ , "CC_BEACON_RELIABILITY.REQ" },
1134 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_BEACON_RELIABILITY_CNF , "CC_BEACON_RELIABILITY.CNF" },
1135 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ALLOC_MOVE_REQ , "CC_ALLOC_MOVE.REQ" },
1136 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ALLOC_MOVE_CNF , "CC_ALLOC_MOVE.CNF" },
1137 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_NEW_REQ , "CC_ACCESS_NEW.REQ" },
1138 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_NEW_CNF , "CC_ACCESS_NEW.CNF" },
1139 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_NEW_IND , "CC_ACCESS_NEW.IND" },
1140 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_NEW_RSP , "CC_ACCESS_NEW.RSP" },
1141 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_REL_REQ , "CC_ACCESS_REL.REQ" },
1142 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_REL_CNF , "CC_ACCESS_REL.CNF" },
1143 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_REL_IND , "CC_ACCESS_REL.IND" },
1144 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_REL_RSP , "CC_ACCESS_REL.RSP" },
1145 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_DCPPC_IND , "CC_DCPPC.IND" },
1146 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_DCPPC_RSP , "CC_DCPPC.RSP" },
1147 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_HP1_DET_REQ , "CC_HP1_DET.REQ" },
1148 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_HP1_DET_CNF , "CC_HP1_DET.CNF" },
1149 { HOMEPLUG_AV_MMTYPE_GENERAL_CC_BLE_UPDATE_IND , "CC_BLE_UPDATE.IND" },
1150 /* HPGP Specific*/
1151 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_BCAST_REPEAT_IND , "CC_BCAST_REPEAT.IND" },
1152 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_BCAST_REPEAT_RSP , "CC_BCAST_REPEAT.RSP" },
1153 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_MH_LINK_NEW_REQ , "CC_MH_LINK_NEW.REQ" },
1154 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_MH_LINK_NEW_CNF , "CC_MH_LINK_NEW.CNF" },
1155 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_DETECTION_REPORT_IND , "CC_ISP_DETECTION_REPORT.IND" },
1156 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_START_RESYNC_REQ , "CC_ISP_START_RESYNC.REQ" },
1157 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_FINISH_RESYNC_REQ , "CC_ISP_FINISH_RESYNC.REQ" },
1158 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_DETECTED_RESYNC_IND , "CC_ISP_DETECTED_RESYNC.IND" },
1159 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_TRANSMIT_RESYNC_REQ , "CC_ISP_TRANSMIT_RESYNC.REQ" },
1160 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_REQ , "CC_POWERSAVE.REQ" },
1161 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_CNF , "CC_POWERSAVE.CNF" },
1162 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_EXIT_REQ , "CC_POWERSAVE_EXIT.REQ" },
1163 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_EXIT_CNF , "CC_POWERSAVE_EXIT.CNF" },
1164 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_LIST_REQ , "CC_POWERSAVE_LIST.REQ" },
1165 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_LIST_CNF , "CC_POWERSAVE_LIST.CNF" },
1166 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_STOP_REQ , "CC_POWERSAVE_STOP.REQ" },
1167 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_STOP_CNF , "CC_POWERSAVE_STOP.CNF" },
1168 /* Proxy Coordinator */
1169 { HOMEPLUG_AV_MMTYPE_GENERAL_CP_PROXY_APPOINT_REQ , "CP_PROXY_APPOINT.REQ" },
1170 { HOMEPLUG_AV_MMTYPE_GENERAL_CP_PROXY_APPOINT_CNF , "CP_PROXY_APPOINT.CNF" },
1171 { HOMEPLUG_AV_MMTYPE_GENERAL_PH_PROXY_APPOINT_IND , "PH_PROXY_APPOINT.IND" },
1172 { HOMEPLUG_AV_MMTYPE_GENERAL_CP_PROXY_WAKE_REQ , "CP_PROXY_WAKE.REQ" },
1173 /* CCo - CCo */
1174 { HOMEPLUG_AV_MMTYPE_GENERAL_NN_INL_REQ , "NN_INL.REQ" },
1175 { HOMEPLUG_AV_MMTYPE_GENERAL_NN_INL_CNF , "NN_INL.CNF" },
1176 { HOMEPLUG_AV_MMTYPE_GENERAL_NN_NEW_NET_REQ , "NN_NEW_NET.REQ" },
1177 { HOMEPLUG_AV_MMTYPE_GENERAL_NN_NEW_NET_CNF , "NN_NEW_NET.CNF" },
1178 { HOMEPLUG_AV_MMTYPE_GENERAL_NN_NEW_NET_IND , "NN_NEW_NET.IND" },
1179 { HOMEPLUG_AV_MMTYPE_GENERAL_NN_ADD_ALLOC_REQ , "NN_ADD_ALLOC.REQ" },
1180 { HOMEPLUG_AV_MMTYPE_GENERAL_NN_ADD_ALLOC_CNF , "NN_ADD_ALLOC.CNF" },
1181 { HOMEPLUG_AV_MMTYPE_GENERAL_NN_ADD_ALLOC_IND , "NN_ADD_ALLOC.IND" },
1182 { HOMEPLUG_AV_MMTYPE_GENERAL_NN_REL_ALLOC_REQ , "NN_REL_ALLOC.REQ" },
1183 { HOMEPLUG_AV_MMTYPE_GENERAL_NN_REL_ALLOC_CNF , "NN_REL_ALLOC.CNF" },
1184 { HOMEPLUG_AV_MMTYPE_GENERAL_NN_REL_NET_IND , "NN_REL_NET.IND" },
1185 /* Station - Station */
1186 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_UNASSOCIATED_STA_IND , "CM_UNASSOCIATED_STA.IND" },
1187 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_ENCRYPTED_PAYLOAD_IND , "CM_ENCRYPTED_PAYLOAD.IND (Encrypted Payload Indicate)" },
1188 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_ENCRYPTED_PAYLOAD_RSP , "CM_ENCRYPTED_PAYLOAD.RSP (Encrypted Payload Response)" },
1189 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_SET_KEY_REQ , "CM_SET_KEY.REQ (Set Key Request)" },
1190 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_SET_KEY_CNF , "CM_SET_KEY.CNF (Set Key Confirmation)" },
1191 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_KEY_REQ , "CM_GET_KEY.REQ (Get Key Request)" },
1192 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_KEY_CNF , "CM_GET_KEY.CNF (Get Key Confirmation)" },
1193 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_SC_JOIN_REQ , "CM_SC_JOIN.REQ" },
1194 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_SC_JOIN_CNF , "CM_SC_JOIN.CNF" },
1195 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_SC_CHAN_EST_IND , "CM_SC_CHAN_EST.IND" },
1196 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_TM_UPDATE_IND , "CM_TM_UPDATE.IND" },
1197 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_AMP_MAP_REQ , "CM_AMP_MAP.REQ" },
1198 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_AMP_MAP_CNF , "CM_AMP_MAP.CNF" },
1199 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_BRG_INFO_REQ , "CM_BRG_INFO.REQ (Get Bridge Informations Request)" },
1200 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_BRG_INFO_CNF , "CM_BRG_INFO.CNF (Get Bridge Informations Confirmation)" },
1201 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_NEW_REQ , "CM_CONN_NEW.REQ" },
1202 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_NEW_CNF , "CM_CONN_NEW.CNF" },
1203 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_REL_IND , "CM_CONN_REL.IND" },
1204 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_REL_RSP , "CM_CONN_REL.RSP" },
1205 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_MOD_REQ , "CM_CONN_MOD.REQ" },
1206 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_MOD_CNF , "CM_CONN_MOD.CNF" },
1207 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_INFO_REQ , "CM_CONN_INFO.REQ" },
1208 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_INFO_CNF , "CM_CONN_INFO.CNF" },
1209 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_STA_CAP_REQ , "CM_STA_CAP.REQ" },
1210 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_STA_CAP_CNF , "CM_STA_CAP.CNF" },
1211 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_INFO_REQ , "CM_NW_INFO.REQ (Get Network Informations Request)" },
1212 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_INFO_CNF , "CM_NW_INFO.CNF (Get Network Informations Confirmation)" },
1213 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_BEACON_REQ , "CM_GET_BEACON.REQ" },
1214 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_BEACON_CNF , "CM_GET_BEACON.CNF" },
1215 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_HFID_REQ , "CM_HFID.REQ" },
1216 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_HFID_CNF , "CM_HFID.CNF" },
1217 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_MME_ERROR_IND , "CM_MME_ERROR.IND" },
1218 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_STATS_REQ , "CM_NW_STATS.REQ (Get Network Statistics Request)" },
1219 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_STATS_CNF , "CM_NW_STATS.CNF (Get Network Statistics Confirmation)" },
1220 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_LINK_STATS_REQ , "CM_LINK_STATS.REQ" },
1221 { HOMEPLUG_AV_MMTYPE_GENERAL_CM_LINK_STATS_CNF , "CM_LINK_STATS.CNF" },
1222 /* HPGP Specific*/
1223 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ROUTE_INFO_REQ , "CM_ROUTE_INFO.REQ" },
1224 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ROUTE_INFO_CNF , "CM_ROUTE_INFO.CNF" },
1225 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ROUTE_INFO_IND , "CM_ROUTE_INFO.IND" },
1226 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_UNREACHABLE_IND , "CM_UNREACHABLE.IND" },
1227 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_MH_CONN_NEW_REQ , "CM_MH_CONN_NEW.REQ" },
1228 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_MH_CONN_NEW_CNF , "CM_MH_CONN_NEW.CNF" },
1229 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_EXTENDED_TONEMASK_REQ , "CM_EXTENDED_TONEMASK.REQ" },
1230 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_EXTENDED_TONEMASK_CNF , "CM_EXTENDED_TONEMASK.CNF" },
1231 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_STA_IDENTIFY_REQ , "CM_STA_IDENTIFY.REQ" },
1232 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_STA_IDENTIFY_CNF , "CM_STA_IDENTIFY_CNF" },
1233 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_STA_IDENTIFY_IND , "CM_STA_IDENTIFY.IND" },
1234 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_STA_IDENTIFY_RSP , "CM_STA_IDENTIFY.RSP" },
1235 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_PARM_REQ , "CM_SLAC_PARM.REQ" },
1236 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_PARM_CNF , "CM_SLAC_PARM.CNF" },
1237 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_START_ATTEN_CHAR_IND , "CM_START_ATTEN_CHAR.IND" },
1238 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ATTEN_CHAR_IND , "CM_ATTEN_CHAR.IND" },
1239 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ATTEN_CHAR_RSP , "CM_ATTEN_CHAR.RSP" },
1240 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_PKCS_CERT_REQ , "CM_PKCS_CERT.REQ" },
1241 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_PKCS_CERT_CNF , "CM_PKCS_CERT.CNF" },
1242 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_PKCS_CERT_IND , "CM_PKCS_CERT.IND" },
1243 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_PKCS_CERT_RSP , "CM_PKCS_CERT.RSP" },
1244 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_MNBC_SOUND_IND , "CM_MNBC_SOUND.IND" },
1245 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_VALIDATE_REQ , "CM_VALIDATE.REQ" },
1246 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_VALIDATE_CNF , "CM_VALIDATE.CNF" },
1247 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_MATCH_REQ , "CM_SLAC_MATCH.REQ" },
1248 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_MATCH_CNF , "CM_SLAC_MATCH.CNF" },
1249 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_USER_DATA_REQ , "CM_SLAC_USER_DATA.REQ" },
1250 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_USER_DATA_CNF , "CM_SLAC_USER_DATA.CNF" },
1251 { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ATTEN_PROFILE_IND , "CM_ATTEN_PROFILE.IND" },
1252 { 0, NULL }
1255 /* QCA vendor-specific MMEs */
1256 static const value_string homeplug_av_mmtype_qualcomm_vals[] = {
1257 { HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_SW_REQ, "GET_SW.REQ (Get Device/SW Version Request)" },
1258 { HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_SW_CNF, "GET_SW.CNF (Get Device/SW Version Confirmation)" },
1259 { HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MEM_REQ, "WR_MEM.REQ (Write MAC Memory Request)" },
1260 { HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MEM_CNF, "WR_MEM.CNF (Write MAC Memory Confirmation)" },
1261 { HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MEM_REQ, "RD_MEM.REQ (Read MAC Memory Request)" },
1262 { HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MEM_CNF, "RD_MEM.CNF (Read MAC Memory Confirmation)" },
1263 { HOMEPLUG_AV_MMTYPE_QUALCOMM_ST_MAC_REQ, "ST_MAC.REQ (Start MAC Request)" },
1264 { HOMEPLUG_AV_MMTYPE_QUALCOMM_ST_MAC_CNF, "ST_MAC.CNF (Start MAC Confirmation)" },
1265 { HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_NVM_REQ, "GET_NVM.REQ (Get NVM Parameters Request)" },
1266 { HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_NVM_CNF, "GET_NVM.CNF (Get NVM Parameters Confirmation)" },
1267 { HOMEPLUG_AV_MMTYPE_QUALCOMM_RS_DEV_REQ, "RS_DEV.REQ (Reset Device Request)" },
1268 { HOMEPLUG_AV_MMTYPE_QUALCOMM_RS_DEV_CNF, "RS_DEV.CNF (Reset Device Confirmation)" },
1269 { HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MOD_REQ, "WR_MOD.REQ (Write Module Data Request)" },
1270 { HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MOD_CNF, "WR_MOD.CNF (Write Module Data Confirmation)" },
1271 { HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MOD_IND, "WR_MOD.IND (Write Module Data Indicate)" },
1272 { HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MOD_REQ, "RD_MOD.REQ (Read Module Data Request)" },
1273 { HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MOD_CNF, "RD_MOD.CNF (Read Module Data Confirmation)" },
1274 { HOMEPLUG_AV_MMTYPE_QUALCOMM_NVM_MOD_REQ, "NVM_MOD.REQ (Write Module Data to NVM Request)" },
1275 { HOMEPLUG_AV_MMTYPE_QUALCOMM_NVM_MOD_CNF, "NVM_MOD.CNF (Write Module Data to NVM Confirmation)" },
1276 { HOMEPLUG_AV_MMTYPE_QUALCOMM_WD_RPT_REQ, "WD_RPT.REQ (Get Watchdog Report Request)" },
1277 { HOMEPLUG_AV_MMTYPE_QUALCOMM_WD_RPT_IND, "WD_RPT.IND (Get Watchdog Report Indicate)" },
1278 { HOMEPLUG_AV_MMTYPE_QUALCOMM_LNK_STATS_REQ, "LNK_STATS.REQ (Link Statistics Request)" },
1279 { HOMEPLUG_AV_MMTYPE_QUALCOMM_LNK_STATS_CNF, "LNK_STATS.CNF (Link Statistics Confirmation)" },
1280 { HOMEPLUG_AV_MMTYPE_QUALCOMM_SNIFFER_REQ, "SNIFFER.REQ (Sniffer Request)" },
1281 { HOMEPLUG_AV_MMTYPE_QUALCOMM_SNIFFER_CNF, "SNIFFER.CNF (Sniffer Confirmation)" },
1282 { HOMEPLUG_AV_MMTYPE_QUALCOMM_SNIFFER_IND, "SNIFFER.IND (Sniffer Indicate)" },
1283 { HOMEPLUG_AV_MMTYPE_QUALCOMM_NW_INFO_REQ, "NW_INFO.REQ (Network Info Request)" },
1284 { HOMEPLUG_AV_MMTYPE_QUALCOMM_NW_INFO_CNF, "NW_INFO.CNF (Network Info Confirmation)" },
1285 { HOMEPLUG_AV_MMTYPE_QUALCOMM_CP_RPT_REQ, "CP_RPT.REQ (Check Points Request)" },
1286 { HOMEPLUG_AV_MMTYPE_QUALCOMM_CP_RPT_IND, "CP_RPT.IND (Check Points Indicate)" },
1287 { HOMEPLUG_AV_MMTYPE_QUALCOMM_FR_LBK_REQ, "FR_LBK.REQ (Loopback Request)" },
1288 { HOMEPLUG_AV_MMTYPE_QUALCOMM_FR_LBK_CNF, "FR_LBK.CNF (Loopback Confirmation)" },
1289 { HOMEPLUG_AV_MMTYPE_QUALCOMM_LBK_STAT_REQ, "LBK_STAT.REQ (Loopback Status Request)" },
1290 { HOMEPLUG_AV_MMTYPE_QUALCOMM_LBK_STAT_CNF, "LBK_STAT.CNF (Loopback Status Confirmation)" },
1291 { HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_KEY_REQ, "SET_KEY.REQ (Set Encryption Key Request)" },
1292 { HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_KEY_CNF, "SET_KEY.CNF (Set Encryption Key Confirmation)" },
1293 { HOMEPLUG_AV_MMTYPE_QUALCOMM_MFG_STRING_REQ, "MFG_STRING.REQ (Get Manufacturer String Request)" },
1294 { HOMEPLUG_AV_MMTYPE_QUALCOMM_MFG_STRING_CNF, "MFG_STRING.CNF (Get Manufacturer String Confirmation)" },
1295 { HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_CBLOCK_REQ, "RD_CBLOCK.REQ (Read Configuration Block Request)" },
1296 { HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_CBLOCK_CNF, "RD_CBLOCK.CNF (Read Configuration Block Confirmation)" },
1297 { HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_SDRAM_REQ, "SET_SDRAM.REQ (Set SDRAM Configuration Request)" },
1298 { HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_SDRAM_CNF, "SET_SDRAM.CNF (Set SDRAM Configuration Confirmation)" },
1299 { HOMEPLUG_AV_MMTYPE_QUALCOMM_HOST_ACTION_IND, "HOST_ACTION.IND (Embedded Host Action Required Indication)" },
1300 { HOMEPLUG_AV_MMTYPE_QUALCOMM_HOST_ACTION_RSP, "HOST_ACTION.RSP (Embedded Host Action Required Response)" },
1301 { HOMEPLUG_AV_MMTYPE_QUALCOMM_OP_ATTR_REQ, "OP_ATTR.REQ (Get Device Attributes Request)" },
1302 { HOMEPLUG_AV_MMTYPE_QUALCOMM_OP_ATTR_CNF, "OP_ATTR.CNF (Get Device Attributes Confirmation)" },
1303 { HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_ENET_PHY_REQ, "GET_ENET_PHY.REQ (Get Ethernet PHY Settings Request)" },
1304 { HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_ENET_PHY_CNF, "GET_ENET_PHY.CNF (Get Ethernet PHY Settings Confirmation)" },
1305 { HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_TX_REQ, "TONE_MAP_TX.REQ (Tone Map Tx Characteristics Request)" },
1306 { HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_TX_CNF, "TONE_MAP_TX.CNF (Tone Map Tx Characteristics Confirmation)" },
1307 { HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_RX_REQ, "TONE_MAP_RX.REQ (Tone Map Rx Characteristics Request)" },
1308 { HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_RX_CNF, "TONE_MAP_RX.CNF (Tone Map Rx Characteristics Confirmation)" },
1309 { HOMEPLUG_AV_MMTYPE_QUALCOMM_LINK_STATUS_REQ, "LINK_STATUS.REQ" },
1310 { HOMEPLUG_AV_MMTYPE_QUALCOMM_LINK_STATUS_CNF, "LINK_STATUS.CNF" },
1311 { 0, NULL }
1314 /* ST/IoTecha vendor-specific MMEs */
1315 static const value_string homeplug_av_mmtype_st_iotecha_vals[] = {
1316 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_AUTH_SET_NMK_REQ , "STP_AUTH_SET_NMK.REQ" },
1317 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_AUTH_SET_NMK_CNF , "STP_AUTH_SET_NMK.CNF" },
1318 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_LINK_STATUS_REQ , "STP_LINK_STATUS.REQ" },
1319 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_LINK_STATUS_CNF , "STP_LINK_STATUS.CNF" },
1320 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_LINK_STATUS_IND , "STP_LINK_STATUS.IND" },
1321 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_LOCAL_REQ , "STP_DISCOVER_LOCAL.REQ" },
1322 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_LOCAL_CNF , "STP_DISCOVER_LOCAL.CNF" },
1323 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_SET_MAXGAIN_REQ , "STP_SET_MAXGAIN.REQ" },
1324 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_SET_MAXGAIN_CNF , "STP_SET_MAXGAIN.CNF" },
1325 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_REQ , "STP_DISCOVER.REQ" },
1326 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_CNF , "STP_DISCOVER.CNF" },
1327 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_LIST_REQ , "STP_GET_TEI_LIST.REQ" },
1328 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_LIST_CNF , "STP_GET_TEI_LIST.CNF" },
1329 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_SNAPSHOT_REQ , "STP_GET_TEI_SNAPSHOT.REQ" },
1330 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_SNAPSHOT_CNF , "STP_GET_TEI_SNAPSHOT.CNF" },
1331 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_BSS_LIST_REQ , "STP_GET_BSS_LIST.REQ" },
1332 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_BSS_LIST_CNF , "STP_GET_BSS_LIST.CNF" },
1333 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CHANQUAL_REPORT_REQ , "STP_CHANQUAL_REPORT.REQ" },
1334 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CHANQUAL_REPORT_CNF , "STP_CHANQUAL_REPORT.CNF" },
1335 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CHANQUAL_REPORT_IND , "STP_CHANQUAL_REPORT.IND" },
1336 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_RX_REQ , "STP_TEST_CHAN_ATTEN_START_RX.REQ" },
1337 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_RX_CNF , "STP_TEST_CHAN_ATTEN_START_RX.CNF" },
1338 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_DATA_IND , "STP_TEST_CHAN_ATTEN_DATA.IND" },
1339 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_TX_REQ , "STP_TEST_CHAN_ATTEN_START_TX.REQ" },
1340 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_TX_CNF , "STP_TEST_CHAN_ATTEN_START_TX.CNF" },
1341 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_SOUND_QUIET_IND , "STP_TEST_SOUND_QUIET.IND" },
1342 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_STAGE_REQ , "STP_MFCT_UPDATE_STAGE.REQ" },
1343 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_STAGE_CNF , "STP_MFCT_UPDATE_STAGE.CNF" },
1344 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_FINISH_REQ , "STP_MFCT_UPDATE_FINISH.REQ" },
1345 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_FINISH_CNF , "STP_MFCT_UPDATE_FINISH.CNF" },
1346 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_ITEM_REQ , "STP_MFCT_GET_ITEM.REQ" },
1347 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_ITEM_CNF , "STP_MFCT_GET_ITEM.CNF" },
1348 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_KEYLIST_REQ , "STP_MFCT_GET_KEYLIST.REQ" },
1349 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_KEYLIST_CNF , "STP_MFCT_GET_KEYLIST.CNF" },
1350 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_FUP_REQ , "STP_FUP.REQ" },
1351 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_RESERVED_REQ , "STP_RESERVED.REQ (IoTecha HPGP Analyzer Raw Data)" },
1352 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CPSTATE_IND , "STP_CPSTATE.IND" },
1353 { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_USER_MESSAGE_IND , "STP_USER_MESSAGE.IND" },
1354 { 0, NULL }
1357 /* ext MMType vals */
1358 static value_string_ext homeplug_av_mmtype_general_vals_ext = VALUE_STRING_EXT_INIT(homeplug_av_mmtype_general_vals);
1359 static value_string_ext homeplug_av_mmtype_qualcomm_vals_ext = VALUE_STRING_EXT_INIT(homeplug_av_mmtype_qualcomm_vals);
1360 static value_string_ext homeplug_av_mmtype_st_iotecha_vals_ext = VALUE_STRING_EXT_INIT(homeplug_av_mmtype_st_iotecha_vals);
1362 /* Versions */
1363 #define HOMEPLUG_AV_MMVER_MASK 0x01
1364 #define HOMEPLUG_AV_MMVER_1_0 0x00
1365 #define HOMEPLUG_AV_MMVER_1_1 0x01
1367 static const value_string homeplug_av_mmver_vals[] = {
1368 { HOMEPLUG_AV_MMVER_1_0, "1.0" },
1369 { HOMEPLUG_AV_MMVER_1_1, "1.1" },
1370 { 0, NULL }
1373 /* MMTYPE LSB Values */
1374 #define HOMEPLUG_AV_MMTYPE_LSB_MASK 0x03
1376 static const value_string homeplug_av_mmtype_lsb_vals[] = {
1377 { 0x00, "Request" },
1378 { 0x01, "Confirm" },
1379 { 0x02, "Indication" },
1380 { 0x03, "Response" },
1381 { 0, NULL }
1384 /* MMTYPE MSB Values */
1385 #define HOMEPLUG_AV_MMTYPE_MSB_STA_CCO 0x00
1386 #define HOMEPLUG_AV_MMTYPE_MSB_PROXY 0x01
1387 #define HOMEPLUG_AV_MMTYPE_MSB_CCO_CCO 0x02
1388 #define HOMEPLUG_AV_MMTYPE_MSB_STA_STA 0x03
1389 #define HOMEPLUG_AV_MMTYPE_MSB_MANUF 0x04
1390 #define HOMEPLUG_AV_MMTYPE_MSB_VENDOR 0x05
1391 #define HOMEPLUG_AV_MMTYPE_MSB_RSV 0x06
1392 #define HOMEPLUG_AV_MMTYPE_MSB_MASK 0xe0
1393 #define HOMEPLUG_AV_MMTYPE_MSB_SHIFT (5)
1395 static const value_string homeplug_av_mmtype_msb_vals[] = {
1396 { HOMEPLUG_AV_MMTYPE_MSB_STA_CCO, "STA - Central Coordinator" },
1397 { HOMEPLUG_AV_MMTYPE_MSB_PROXY, "Proxy Coordinator" },
1398 { HOMEPLUG_AV_MMTYPE_MSB_CCO_CCO, "Central Coordinator - Central Coordinator" },
1399 { HOMEPLUG_AV_MMTYPE_MSB_STA_STA, "STA - STA" },
1400 { HOMEPLUG_AV_MMTYPE_MSB_MANUF, "Manufacturer Specific" },
1401 { HOMEPLUG_AV_MMTYPE_MSB_VENDOR, "Vendor Specific" },
1402 { 0, NULL }
1405 #define HOMEPLUG_AV_CC_STA_NET_MASK 0x01
1407 static const value_string homeplug_av_cc_sta_net_type_vals[] = {
1408 { 0x00, "Different network" },
1409 { 0x01, "Same network" },
1410 { 0, NULL }
1413 static const value_string homeplug_av_sig_level_vals[] = {
1414 { 0x00, "N/A" },
1415 { 0x01, "> - 10 dB, but <= 0 dB" },
1416 { 0x02, "> - 15 dB, but <= -10 dB" },
1417 { 0x03, "> - 20 dB, but <= -15 dB" },
1418 { 0x04, "> - 25 dB, but <= -20 dB" },
1419 { 0x05, "> - 30 dB, but <= -25 dB" },
1420 { 0x06, "> - 35 dB, but <= -30 dB" },
1421 { 0x07, "> - 40 dB, but <= -35 dB" },
1422 { 0x08, "> - 45 dB, but <= -40 dB" },
1423 { 0x09, "> - 50 dB, but <= -45 dB" },
1424 { 0x0A, "> - 55 dB, but <= -50 dB" },
1425 { 0x0B, "> - 60 dB, but <= -55 dB" },
1426 { 0x0C, "> - 65 dB, but <= -60 dB" },
1427 { 0x0D, "> - 70 dB, but <= -65 dB" },
1428 { 0x0E, "> - 75 dB, but <= -70 dB" },
1429 { 0x0F, "<= -75 dB" },
1430 { 0, NULL }
1432 static value_string_ext homeplug_av_sig_level_vals_ext = VALUE_STRING_EXT_INIT(homeplug_av_sig_level_vals);
1434 #define HOMEPLUG_AV_CCO_STATUS_MASK 0x07
1436 static const value_string homeplug_av_cco_status_vals[] = {
1437 { 0x00, "Unknown" },
1438 { 0x01, "Non-coordinating Network" },
1439 { 0x02, "Coordinating, group status unknown" },
1440 { 0x03, "Coordinating network in the same group" },
1441 { 0x04, "Coordinating network not in the same group" },
1442 { 0, NULL }
1445 #define HOMEPLUG_AV_NW_INFO_ROLE_MASK 0x03
1447 static const value_string homeplug_av_nw_info_role_vals[] = {
1448 { 0x00, "Station" },
1449 { 0x01, "Proxy coordinator" },
1450 { 0x02, "Central coordinator" },
1451 { 0, NULL }
1454 #define HOMEPLUG_AV_NW_INFO_NID_MASK 0x01
1455 #define HOMEPLUG_AV_NW_INFO_ACCESS_MASK 0x08
1457 static const value_string homeplug_nw_info_access_vals[] = {
1458 { 0x00, "In-home" },
1459 { 0x01, "Access" },
1460 { 0, NULL }
1463 #define HOMEPLUG_AV_PEKS_MASK 0x0F
1464 #define HOMEPLUG_AV_SOF_PEKS_MASK 0xF0
1466 static const value_string homeplug_av_peks_vals[] = {
1467 { 0x00, "Destination STA's DAK" },
1468 { 0x01, "NMK known to STA" },
1469 { 0x02, "TEK Index 0" },
1470 { 0x03, "TEK Index 1" },
1471 { 0x04, "TEK Index 2" },
1472 { 0x05, "TEK Index 3" },
1473 { 0x06, "TEK Index 4" },
1474 { 0x07, "TEK Index 5" },
1475 { 0x08, "TEK Index 6" },
1476 { 0x09, "TEK Index 7" },
1477 { 0x0A, "TEK Index 8" },
1478 { 0x0B, "TEK Index 9" },
1479 { 0x0C, "TEK Index 10" },
1480 { 0x0D, "TEK Index 11" },
1481 { 0x0E, "TEK Index 12" },
1482 { 0x0F, "No key" },
1483 { 0, NULL }
1485 static value_string_ext homeplug_av_peks_vals_ext = VALUE_STRING_EXT_INIT(homeplug_av_peks_vals);
1487 #define HOMEPLUG_AV_CCO_CAP_MASK 0x0C
1489 static const value_string homeplug_av_bcn_cco_cap_vals[] = {
1490 { 0x0, "CSMA-only (no QoS/TDMA)" },
1491 { 0x1, "Uncoordinated mode QoS/TDMA" },
1492 { 0x2, "Coordinated mode QoS/TDMA" },
1493 { 0x3, "Reserved" },
1494 { 0, NULL }
1497 #define HOMEPLUG_AV_AVLN_STATUS_MASK 0x0F
1498 #define HOMEPLUG_AV_RSF_MASK 0x10
1499 #define HOMEPLUG_AV_PLEVEL_MASK 0xE0
1501 static const value_string homeplug_av_avln_status_vals[] = {
1502 { 0x00, "Unassociated and Level-0 CCo capable" },
1503 { 0x01, "Unassociated and Level-1 CCo capable" },
1504 { 0x02, "Unassociated and Level-2 CCo capable" },
1505 { 0x03, "Unassociated and Level-3 CCo capable" },
1506 { 0x04, "Associated but not PCo capable" },
1507 { 0x05, "Associated but and PCo capable" },
1508 { 0x06, "Reserved" },
1509 { 0x07, "Reserved" },
1510 { 0x08, "CCo of an AV Logical Network" },
1511 { 0, NULL }
1514 #define HOMEPLUG_AV_PID_AUTH_STA 0x00
1515 #define HOMEPLUG_AV_PID_PROV_AUTH_NEK 0x01
1516 #define HOMEPLUG_AV_PID_PROV_AUTH_DAK 0x02
1517 #define HOMEPLUG_AV_PID_PROV_AUTH_UKE 0x03
1518 #define HOMEPLUG_AV_PID_HLE 0x04
1519 #define HOMEPLUG_AV_PID_MASK 0x07
1521 static const value_string homeplug_av_pid_vals[] = {
1522 { HOMEPLUG_AV_PID_AUTH_STA, "Authentication request by new STA" },
1523 { HOMEPLUG_AV_PID_PROV_AUTH_NEK, "Provision authenticated STA with new NEK by CCo" },
1524 { HOMEPLUG_AV_PID_PROV_AUTH_DAK, "Provision STA with NMK using DAK" },
1525 { HOMEPLUG_AV_PID_PROV_AUTH_UKE, "Provision STA with NMK using UKE" },
1526 { HOMEPLUG_AV_PID_HLE, "HLE" },
1527 { 0, NULL }
1530 #define HOMEPLUG_AV_KEY_TYPE_DAK 0x00
1531 #define HOMEPLUG_AV_KEY_TYPE_NMK 0x01
1532 #define HOMEPLUG_AV_KEY_TYPE_NEK 0x02
1533 #define HOMEPLUG_AV_KEY_TYPE_TEK 0x03
1534 #define HOMEPLUG_AV_KEY_TYPE_HASH 0x04
1535 #define HOMEPLUG_AV_KEY_TYPE_NONE 0x05
1536 #define HOMEPLUG_AV_KEY_TYPE_MASK 0x07
1538 static const value_string homeplug_av_key_type_vals[] = {
1539 { HOMEPLUG_AV_KEY_TYPE_DAK, "DAK" },
1540 { HOMEPLUG_AV_KEY_TYPE_NMK, "NMK" },
1541 { HOMEPLUG_AV_KEY_TYPE_NEK, "NEK" },
1542 { HOMEPLUG_AV_KEY_TYPE_TEK, "TEK" },
1543 { HOMEPLUG_AV_KEY_TYPE_HASH, "Hash Key" },
1544 { HOMEPLUG_AV_KEY_TYPE_NONE, "Nonce only (no key)" },
1545 { 0, NULL }
1548 #define HOMEPLUG_AV_DEV_ID_MASK 0x0
1550 static const value_string homeplug_av_dev_id_vals[] = {
1551 { 0x00, "Unknown" },
1552 { 0x01, "INT6000" },
1553 { 0x02, "INT6300" },
1554 { 0x03, "INT6400" },
1555 { 0x04, "AR7400" },
1556 { 0x05, "AR6405" },
1557 { 0x20, "QCA7450/QCA7420" },
1558 { 0x21, "QCA6410/QCA6411" },
1559 { 0x22, "QCA7000" },
1560 { 0, NULL }
1563 #define HOMEPLUG_AV_REQ_TYPE_MASK 0x01
1565 static const value_string homeplug_av_req_type_vals[] = {
1566 { 0x00, "Direct" },
1567 { 0x01, "Relayed" },
1568 { 0, NULL }
1571 #define HOMEPLUG_AV_KEY_RESULT_MASK 0x03
1573 static const value_string homeplug_av_key_result_vals[] = {
1574 { 0x00, "Key granted" },
1575 { 0x01, "Request refused" },
1576 { 0x02, "Unsupported method/key type" },
1577 { 0, NULL }
1580 #define HOMEPLUG_AV_LINEFREQ_MASK 0x03
1582 static const value_string homeplug_av_linefreq_vals[] = {
1583 { 0x00, "Unknown frequency" },
1584 { 0x01, "50Hz" },
1585 { 0x02, "60Hz" },
1586 { 0, NULL }
1589 #define HOMEPLUG_AV_ZEROCROSS_MASK 0x03
1591 static const value_string homeplug_av_zerocrossing_vals[] = {
1592 { 0x00, "Not yet detected" },
1593 { 0x01, "Detected" },
1594 { 0x02, "Missing" },
1595 { 0, NULL }
1598 #define HOMEPLUG_AV_ENET_PHY_SPEED_MASK 0x03
1600 static const value_string homeplug_av_enet_phy_speed_vals[] = {
1601 { 0x00, "10 Mbits/sec" },
1602 { 0x01, "100 Mbits/sec" },
1603 { 0x02, "1 Gbits/sec" },
1604 { 0, NULL }
1607 #define HOMEPLUG_AV_ENET_PHY_DUPLEX_MASK 0x01
1609 static const value_string homeplug_av_enet_phy_duplex_vals[] = {
1610 { 0x00, "Half" },
1611 { 0x01, "Full" },
1612 { 0, NULL }
1615 #define HOMEPLUG_AV_ENET_PHY_MCONTROL_MASK 0x01
1617 static const value_string homeplug_av_enet_phy_mcontrol_vals[] = {
1618 { 0x00, "Read" },
1619 { 0x01, "Write" },
1620 { 0, NULL }
1623 static const value_string homeplug_av_wr_rd_mem_status_vals[] = {
1624 { 0x00, "Success" },
1625 { 0x10, "Invalid Address" },
1626 { 0x14, "Invalid Length" },
1627 { 0, NULL }
1630 static const value_string homeplug_av_mac_module_id_vals[] = {
1631 { 0x00, "MAC Soft-Loader Image" },
1632 { 0x01, "MAC Software Image" },
1633 { 0x02, "PIB" },
1634 { 0x10, "Write Alternate Flash Location" },
1635 { 0, NULL }
1638 static const value_string homeplug_av_st_mac_status_vals[] = {
1639 { 0x00, "Success" },
1640 { 0x10, "Invalid Module ID" },
1641 { 0x14, "Invalid Command" },
1642 { 0, NULL }
1645 static const value_string homeplug_av_get_nvm_status_vals[] = {
1646 { 0x00, "Success" },
1647 { 0x10, "NVM Not Present" },
1648 { 0, NULL }
1651 static const value_string homeplug_av_rs_dev_status_vals[] = {
1652 { 0x00, "Success" },
1653 { 0x01, "NVM Not Present" },
1654 { 0, NULL }
1657 static const value_string homeplug_av_wr_rd_mod_cnf_status_vals[] = {
1658 { 0x00, "Success" },
1659 { 0x10, "Invalid Module ID" },
1660 { 0x12, "Invalid Length" },
1661 { 0x14, "Invalid Checksum" },
1662 { 0x18, "Bad Header Checksum" },
1663 { 0x1C, "Invalid Length" },
1664 { 0x20, "Unexpected Offset" },
1665 { 0, NULL }
1668 static const value_string homeplug_av_wr_mod_ind_status_vals[] = {
1669 { 0x00, "Successful module update" },
1670 { 0x10, "Update occurred but not successful" },
1671 { 0, NULL }
1674 static const value_string homeplug_av_mod_nvm_status_vals[] = {
1675 { 0x00, "Success" },
1676 { 0x10, "Invalid Module ID" },
1677 { 0x14, "NVM Module Not Present" },
1678 { 0x18, "NVM Too Small" },
1679 { 0x1C, "Invalid Header Checksum" },
1680 { 0x20, "Invalid Section Mismatch" },
1681 { 0, NULL }
1684 #define HOMEPLUG_AV_RPT_CLR_MASK 0x01
1686 static const value_string homeplug_av_rpt_clr_vals[] = {
1687 { 0x00, "Get Report" },
1688 { 0x01, "Get Report and Clear" },
1689 { 0, NULL }
1692 #define HOMEPLUG_AV_GEN_STATUS_MASK 0x03
1694 static const value_string homeplug_av_generic_status_vals[] = {
1695 { 0x00, "Success" },
1696 { 0x01, "Failure" },
1697 { 0x02, "Not supported" },
1698 { 0, NULL }
1701 #define HOMEPLUG_AV_LNK_STATS_MCTL_MASK 0x01
1703 static const value_string homeplug_av_lnk_stats_mctrl_vals[] = {
1704 { 0x00, "Read" },
1705 { 0x01, "Clear" },
1706 { 0, NULL }
1709 #define HOMEPLUG_AV_LNK_STATS_DIR_TX 0x00
1710 #define HOMEPLUG_AV_LNK_STATS_DIR_RX 0x01
1711 #define HOMEPLUG_AV_LNK_STATS_DIR_TX_RX 0x02
1712 #define HOMEPLUG_AV_LNK_STATS_DIR_MASK 0x03
1714 static const value_string homeplug_av_lnk_stats_dir_vals[] = {
1715 { HOMEPLUG_AV_LNK_STATS_DIR_TX, "Tx" },
1716 { HOMEPLUG_AV_LNK_STATS_DIR_RX, "Rx" },
1717 { HOMEPLUG_AV_LNK_STATS_DIR_TX_RX, "Tx/Rx" },
1718 { 0, NULL }
1721 static const value_string homeplug_av_lnk_stats_lid_vals[] = {
1722 { 0x00, "CSMA Channel Access Priority 0" },
1723 { 0x01, "CSMA Channel Access Priority 1" },
1724 { 0x02, "CSMA Channel Access Priority 2" },
1725 { 0x03, "CSMA Channel Access Priority 3" },
1726 { 0xF8, "Sum of all CSMA stats for Peer Node" },
1727 { 0xFB, "Reserved" },
1728 { 0xFC, "Sum of all CSMA stats" },
1729 { 0, NULL }
1732 #define HOMEPLUG_AV_LNK_STATS_STATUS_SUCCESS 0x00
1733 #define HOMEPLUG_AV_LNK_STATS_STATUS_INV_CTRL 0x01
1734 #define HOMEPLUG_AV_LNK_STATS_STATUS_INV_DIR 0x02
1735 #define HOMEPLUG_AV_LNK_STATS_STATUS_INV_LID 0x10
1736 #define HOMEPLUG_AV_LNK_STATS_STATUS_INV_MAC 0x20
1738 static const value_string homeplug_av_lnk_status_vals[] = {
1739 { HOMEPLUG_AV_LNK_STATS_STATUS_SUCCESS, "Success" },
1740 { HOMEPLUG_AV_LNK_STATS_STATUS_INV_CTRL, "Invalid Control" },
1741 { HOMEPLUG_AV_LNK_STATS_STATUS_INV_DIR, "Invalid Direction" },
1742 { HOMEPLUG_AV_LNK_STATS_STATUS_INV_LID, "Invalid Link ID" },
1743 { HOMEPLUG_AV_LNK_STATS_STATUS_INV_MAC, "Invalid MAC Address" },
1744 { 0, NULL }
1747 #define HOMEPLUG_AV_SNIFFER_CTRL_MASK 0x03
1749 static const value_string homeplug_av_sniffer_ctrl_vals[] = {
1750 { 0x00, "Disable" },
1751 { 0x01, "Enable" },
1752 { 0x02, "No change" },
1753 { 0, NULL }
1756 static const value_string homeplug_av_sniffer_status_vals[] = {
1757 { 0x00, "Success" },
1758 { 0x10, "Invalid Control" },
1759 { 0, NULL }
1762 static const value_string homeplug_av_sniffer_type_vals[] = {
1763 { 0x00, "Regular" },
1764 { 0, NULL }
1767 #define HOMEPLUG_AV_DEL_TYPE_BCN 0x00
1768 #define HOMEPLUG_AV_DEL_TYPE_SOF 0x01
1769 #define HOMEPLUG_AV_DEL_TYPE_SACK 0x02
1770 #define HOMEPLUG_AV_DEL_TYPE_RTS 0x03
1771 #define HOMEPLUG_AV_DEL_TYPE_SOUND 0x04
1772 #define HOMEPLUG_AV_DEL_TYPE_RSOF 0x05
1774 #define HOMEPLUG_AV_DEL_TYPE_MASK 0x07
1776 static const value_string homeplug_av_fc_del_type_vals[] = {
1777 { HOMEPLUG_AV_DEL_TYPE_BCN, "Beacon" },
1778 { HOMEPLUG_AV_DEL_TYPE_SOF, "Start-of-Frame" },
1779 { HOMEPLUG_AV_DEL_TYPE_SACK, "Selective Acknowledgement" },
1780 { HOMEPLUG_AV_DEL_TYPE_RTS, "Request-to-Send/Clear-to-Send" },
1781 { HOMEPLUG_AV_DEL_TYPE_SOUND, "Sound" },
1782 { HOMEPLUG_AV_DEL_TYPE_RSOF, "Reverse Start-of-Frame" },
1783 { 0x06, "Unknown" },
1784 { 0x07, "Unknown" },
1785 { 0, NULL }
1788 /* MPDU Values */
1790 #define HOMEPLUG_AV_SNID_MASK 0xf0
1791 #define HOMEPLUG_AV_CFS_MASK 0x01
1792 #define HOMEPLUG_AV_BDF_MASK 0x02
1793 #define HOMEPLUG_AV_HP10DF_MASK 0x04
1794 #define HOMEPLUG_AV_HP11DF_MASK 0x08
1795 #define HOMEPLUG_AV_SVN_MASK 0x04
1796 #define HOMEPLUG_AV_RRTF_MASK 0x08
1797 #define HOMEPLUG_AV_FL_AV_MASK 0x0FFF
1798 #define HOMEPLUG_AV_RSP_DATA_MASK 0x03
1799 #define HOMEPLUG_AV_RSP_MGMT_MASK 0x0C
1801 static int * const rsof_sack_fields[] = {
1802 &hf_homeplug_av_cfs,
1803 &hf_homeplug_av_bdf,
1804 &hf_homeplug_av_svn,
1805 &hf_homeplug_av_rrtf,
1806 &hf_homeplug_av_mfs_rsp_data,
1807 &hf_homeplug_av_mfs_rsp_mgmt,
1808 NULL
1811 #define HOMEPLUG_AV_PBSZ_MASK 0x01
1813 static const true_false_string homeplug_av_phy_block_size_vals = {
1814 "136 octets",
1815 "520 octets"
1818 #define HOMEPLUG_AV_NUM_SYM_MASK 0x06
1819 #define HOMEPLUG_AV_TMI_AV_MASK 0xF8
1820 #define HOMEPLUG_AV_SOF_MPDU_CNT_MASK 0x3000
1821 #define HOMEPLUG_AV_BURST_CNT_MASK 0xC000
1822 #define HOMEPLUG_AV_BBF_MASK 0x01
1824 static const true_false_string homeplug_av_bbf_vals = {
1825 "May continue",
1826 "Must not continue"
1829 #define HOMEPLUG_AV_MRTLF_MASK 0x1E
1830 #define HOMEPLUG_AV_DCCPCF_MASK 0x20
1831 #define HOMEPLUG_AV_MCF_MASK 0x40
1832 #define HOMEPLUG_AV_MNBF_MASK 0x80
1833 #define HOMEPLUG_AV_RSR_MASK 0x01
1834 #define HOMEPLUG_AV_CLST_MASK 0x02
1836 static const true_false_string homeplug_av_clst_vals = {
1837 "Reserved",
1838 "Ethernet II"
1841 #define HOMEPLUG_AV_MFS_MGMT_MASK 0x1C
1842 #define HOMEPLUG_AV_MFS_DATA_MASK 0xE0
1843 #define HOMEPLUG_AV_SOF_RSP_MGMT_MASK 0x03
1844 #define HOMEPLUG_AV_SOF_RSP_DATA_MASK 0x0C
1845 #define HOMEPLUG_AV_BM_SACK_MASK 0xF0
1847 #define HOMEPLUG_AV_RTSF_MASK 0x10
1849 static const true_false_string homeplug_av_rtsf_vals = {
1850 "RTS MPDU",
1851 "CTS MPDU"
1854 #define HOMEPLUG_AV_IGF_MASK 0x20
1855 #define HOMEPLUG_AV_RTSCTS_MNBF_MASK 0x40
1856 #define HOMEPLUG_AV_RTSCTS_MCF_MASK 0x80
1857 #define HOMEPLUG_AV_DUR_MASK 0x3FFF
1859 #define HOMEPLUG_AV_SOUND_PBSZ_MASK 0x02
1860 #define HOMEPLUG_AV_SOUND_BDF_MASK 0x04
1861 #define HOMEPLUG_AV_SAF_MASK 0x08
1862 #define HOMEPLUG_AV_SCF_MASK 0x10
1863 #define HOMEPLUG_AV_REQ_TM_MASK 0xE0
1864 #define HOMEPLUG_AV_SOUND_MPDU_CNT_MASK 0x3000
1865 #define HOMEPLUG_AV_ADD_REQ_TM_MASK 0x07
1866 #define HOMEPLUG_AV_MAX_PB_SYM_MASK 0x38
1867 #define HOMEPLUG_AV_ECSF_MASK 0x40
1868 #define HOMEPLUG_AV_ECUF_MASK 0x80
1869 #define HOMEPLUG_AV_EMS_MASK 0x03
1871 static const value_string homeplug_av_ems_vals[] = {
1872 { 0x00, "Extended QAM Modulations not supported" },
1873 { 0x01, "4096 QAM Modulation support" },
1874 { 0x02, "Reserved" },
1875 { 0x03, "Reserved" },
1876 { 0, NULL }
1879 #define HOMEPLUG_AV_ESGISF_MASK 0x04
1880 #define HOMEPLUG_AV_ELGISF_MASK 0x08
1881 #define HOMEPLUG_AV_EFRS_MASK 0x30
1883 static const value_string homeplug_av_efrs_vals[] = {
1884 { 0x00, "Extended FEC Rates Not Supported" },
1885 { 0x01, "16/18 FED Rate Supported" },
1886 { 0x02, "Reserved" },
1887 { 0x03, "Reserved" },
1888 { 0, NULL }
1891 #define HOMEPLUG_AV_RSOF_FL_MASK 0x03FF
1892 #define HOMEPLUG_AV_RSOF_TMI_MASK 0x7C00
1893 #define HOMEPLUG_AV_RSOF_PBSZ_MASK 0x8000
1894 #define HOMEPLUG_AV_RSOF_NUM_SYM_MASK 0x03
1896 /* MPDU Beacon payloads */
1898 #define HOMEPLUG_AV_BCN_NID_MASK 0xFFFFFFFFFFFF3F
1899 #define HOMEPLUG_AV_HM_MASK 0xC0
1901 static const val64_string homeplug_av_bcn_hm_vals[] = {
1902 { 0x00, "AV-only mode" },
1903 { 0x01, "Shared CSMA Hybrid Mode" },
1904 { 0x02, "Fully hybrid mode" },
1905 { 0x03, "Fully hybrid mode with unrestricted frame lengths" },
1906 { 0, NULL }
1909 #define HOMEPLUG_AV_BCN_TYPE_MASK 0x07
1911 static const value_string homeplug_av_bcn_type_vals[] = {
1912 { 0x0, "Central" },
1913 { 0x1, "Discover" },
1914 { 0x2, "Proxy" },
1915 { 0, NULL }
1918 #define HOMEPLUG_AV_NCNR_MASK 0x08
1919 #define HOMEPLUG_AV_NPSM_MASK 0x10
1920 #define HOMEPLUG_AV_NUM_SLOTS_MASK 0xE0
1921 #define HOMEPLUG_AV_SLOT_ID_MASK 0x03
1923 /* There must be a better way to do this. */
1924 static const value_string homeplug_av_bcn_slot_vals[] = {
1925 { 0x0, "1" },
1926 { 0x1, "2" },
1927 { 0x2, "3" },
1928 { 0x3, "4" },
1929 { 0x4, "5" },
1930 { 0x5, "6" },
1931 { 0x6, "7" },
1932 { 0x7, "8" },
1933 { 0, NULL }
1936 #define HOMEPLUG_AV_ACLSS_MASK 0x38
1937 #define HOMEPLUG_AV_HOIP_MASK 0x40
1938 #define HOMEPLUG_AV_RTSBF_MASK 0x80
1939 #define HOMEPLUG_AV_NM_MASK 0x03
1941 static const value_string homeplug_av_bcn_nm_vals[] = {
1942 { 0x1, "Uncoordinated Mode" },
1943 { 0x2, "Coordinated Mode" },
1944 { 0x3, "CSMA-only Mode" },
1945 { 0, NULL }
1948 #define HOMEPLUG_AV_LBK_STATUS_MASK 0x01
1950 static const value_string homeplug_av_lbk_status_vals[] = {
1951 { 0x00, "Done" },
1952 { 0x01, "Looping frame" },
1953 { 0, NULL }
1956 static const value_string homeplug_av_set_key_peks_vals[] = {
1957 { 0x00, "Remote" },
1958 { 0x0F, "Local" },
1959 { 0, NULL }
1962 static const value_string homeplug_av_set_key_status_vals[] = {
1963 { 0x00, "Success" },
1964 { 0x10, "Invalid EKS" },
1965 { 0x11, "Invalid PKS" },
1966 { 0, NULL }
1969 static const value_string homeplug_av_cblock_status_vals[] = {
1970 { 0x00, "Success" },
1971 { 0x01, "Failure" },
1972 { 0x10, "No Flash" },
1973 { 0x30, "Invalid Checksum" },
1974 { 0x34, "BIST Failed" },
1975 { 0, NULL }
1978 #define HOMEPLUG_AV_NVM_IMG_TYPE_MASK 0x1F
1980 static const value_string homeplug_av_nvm_img_type_vals[] = {
1981 { 0x00, "Generic Image" },
1982 { 0x01, "Synopsis configuration" },
1983 { 0x02, "Denali configuration" },
1984 { 0x03, "Denali applet" },
1985 { 0x04, "Runtime firmware" },
1986 { 0x05, "OAS client" },
1987 { 0x06, "Custom image" },
1988 { 0x07, "Memory control applet" },
1989 { 0x08, "Power management applet" },
1990 { 0x09, "OAS client IP stack" },
1991 { 0x0A, "OAS client TR069" },
1992 { 0x0B, "SoftLoader" },
1993 { 0x0C, "Flash layout" },
1994 { 0x0D, "Unknown" },
1995 { 0x0E, "Chain manifest" },
1996 { 0x0F, "Runtime parameters" },
1997 { 0x10, "Custom module in scratch" },
1998 { 0x11, "Custom module update applet" },
1999 { 0, NULL }
2002 #define HOMEPLUG_AV_NVM_IGNORE_MASK_MASK 0x01FF
2004 static const value_string homeplug_av_nvm_ignore_mask_vals[] = {
2005 { 0x00, "INT6000" },
2006 { 0x01, "INT6300" },
2007 { 0x04, "INT6400" },
2008 { 0x10, "AR7400" },
2009 { 0x100, "AR7420" },
2010 { 0, NULL }
2013 #define HOMEPLUG_AV_HOST_ACTION_SOFT_LDR 0x00
2014 #define HOMEPLUG_AV_HOST_ACTION_FW_UPG_RDY 0x01
2015 #define HOMEPLUG_AV_HOST_ACTION_PIB_UP_RDY 0x02
2016 #define HOMEPLUG_AV_HOST_ACTION_FW_PIB_UP_RDY 0x03
2017 #define HOMEPLUG_AV_HOST_ACTION_BOOT_LDR 0x04
2019 static const value_string homeplug_av_host_action_vals[] = {
2020 { HOMEPLUG_AV_HOST_ACTION_SOFT_LDR, "Loader (Soft/Bootloader)" },
2021 { HOMEPLUG_AV_HOST_ACTION_FW_UPG_RDY, "Firmware Upgrade Ready" },
2022 { HOMEPLUG_AV_HOST_ACTION_PIB_UP_RDY, "PIB Update Ready" },
2023 { HOMEPLUG_AV_HOST_ACTION_FW_PIB_UP_RDY, "Firmware Upgrade and PIB Update Ready" },
2024 { HOMEPLUG_AV_HOST_ACTION_BOOT_LDR, "Loader (Bootloader)" },
2025 { 0, NULL }
2028 static const value_string homeplug_av_op_attr_report_vals[] = {
2029 { 0x00, "Binary" },
2030 { 0x01, "XML" },
2031 { 0, NULL }
2034 #define HOMEPLUG_AV_TONE_MAP_MAX_NUM_CARRIERS_A 1155
2035 #define HOMEPLUG_AV_TONE_MAP_MAX_NUM_CARRIERS_B 2880
2037 #define HOMEPLUG_AV_TONE_MAP_MASK 0x0f
2039 static const value_string homeplug_av_tone_map_vals[] = {
2040 { 0x00, "No modulation" },
2041 { 0x01, "BPSK" },
2042 { 0x02, "QPSK" },
2043 { 0x03, "8-QAM" },
2044 { 0x04, "16-QAM" },
2045 { 0x05, "64-QAM" },
2046 { 0x06, "256-QAM" },
2047 { 0x07, "1024-QAM" },
2048 { 0x08, "4096-QAM" },
2049 { 0, NULL }
2052 static const value_string homeplug_av_tone_map_status_vals[] = {
2053 { 0x00, "Success" },
2054 { 0x01, "Unknown MAC address" },
2055 { 0x02, "Unknown Tone Map slot" },
2056 { 0, NULL }
2059 #define HOMEPLUG_AV_COUPLING_MASK 0x0F
2061 static const value_string homeplug_av_coupling_vals[] = {
2062 { 0x00, "Primary" },
2063 { 0x01, "Alternate" },
2064 { 0, NULL }
2067 static const value_string homeplug_av_cc_assoc_result_vals[] = {
2068 { 0x00, "Success" },
2069 { 0x01, "Failure due to temporary resource exhaustion, try again later" },
2070 { 0x02, "Failure due to permanent resource exhaustion" },
2071 { 0x03, "Failure" },
2072 { 0, NULL }
2075 static const value_string homeplug_av_cc_assoc_reqtype_vals[] = {
2076 { 0x00, "New request" },
2077 { 0x01, "Renewal request" },
2078 { 0, NULL }
2081 static const value_string homeplug_av_cc_assoc_proxy_net_cap_vals[] = {
2082 { 0x00, "Doesn't support Proxy Networking" },
2083 { 0x01, "Supports Proxy Networking" },
2084 { 0, NULL }
2087 /* HPGP Values */
2089 #define HOMEPLUG_AV_GP_APPTYPE_PEV_EVSE_ASSOC 0x00
2091 #define HOMEPLUG_AV_GP_SECURITY_TYPE_NONE 0x00
2092 #define HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY 0x01
2094 static const value_string homeplug_av_gp_cm_slac_parm_sectype_vals[] = {
2095 { HOMEPLUG_AV_GP_SECURITY_TYPE_NONE, "No Security" },
2096 { HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY, "Public Key Signature" },
2097 { 0, NULL }
2100 static const value_string homeplug_av_gp_cm_slac_parm_resptype_vals[] = {
2101 { 0x00, "Not Transmitted to other GP STA's HLE" },
2102 { 0x01, "Transmitted to another GP STA's HLE" },
2103 { 0, NULL }
2106 #define HOMEPLUG_AV_GP_SIGNAL_TYPE_PEV_S2_TOGGLES 0x00
2108 static const value_string homeplug_av_gp_cm_validate_signaltype_vals[] = {
2109 { HOMEPLUG_AV_GP_SIGNAL_TYPE_PEV_S2_TOGGLES, "PEV S2 toggles on CPLT line" },
2110 { 0, NULL }
2113 static const value_string homeplug_av_gp_cm_validate_result_vals[] = {
2114 { 0x00, "Not Ready" },
2115 { 0x01, "Ready" },
2116 { 0x02, "Success" },
2117 { 0x03, "Failure" },
2118 { 0x04, "Not required" },
2119 { 0, NULL }
2122 /* We need third octet */
2123 #define HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_BROADCAST_MASK (((uint32_t)0xFF) << 16)
2125 static const value_string homeplug_av_gp_cm_slac_user_data_broadcast_vals[] = {
2126 { 0x00, "Unicast" },
2127 { 0x01, "AVLN Broadcast" },
2128 { 0x02, "Multi-network broadcast" },
2129 { 0, NULL }
2132 #define HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_HEADER_SIZE 2
2133 #define HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_TYPE_MASK (((1<<7)-1)<<9)
2134 #define HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_LENGTH_MASK ((1<<9)-1)
2136 #define HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_TYPE_VENDOR_RESERVED 0x1F
2138 static const value_string homeplug_av_gp_cm_slac_user_data_tlv_types_vals[] = {
2139 { HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_TYPE_VENDOR_RESERVED, "Vendor Reserved" },
2140 { 0, NULL }
2143 typedef enum {
2144 HOMEPLUG_AV_CC_SET_TEI_MAP_IND_MODE_FULL_ENTRIES_UPATE = 0x00,
2145 HOMEPLUG_AV_CC_SET_TEI_MAP_IND_MODE_ADD_NEW_ENTRIES = 0x01,
2146 HOMEPLUG_AV_CC_SET_TEI_MAP_IND_MODE_REMOVE_ENTRIES = 0x02
2147 } homeplug_av_cc_set_tei_map_ind_mode_types;
2149 static const value_string homeplug_av_cc_set_tei_map_ind_mode_vals[] = {
2150 { HOMEPLUG_AV_CC_SET_TEI_MAP_IND_MODE_FULL_ENTRIES_UPATE, "Update Entire STA" },
2151 { HOMEPLUG_AV_CC_SET_TEI_MAP_IND_MODE_ADD_NEW_ENTRIES, "Add new STA entries" },
2152 { HOMEPLUG_AV_CC_SET_TEI_MAP_IND_MODE_REMOVE_ENTRIES, "Remove existing STA entries" },
2153 { 0, NULL }
2156 typedef enum {
2157 HOMEPLUG_AV_CC_SET_TEI_MAP_IND_STATUS_NOT_AUTHENTICATED = 0x00,
2158 HOMEPLUG_AV_CC_SET_TEI_MAP_IND_STATUS_AUTHENTICATED = 0x01,
2159 } homeplug_av_cc_set_tei_map_ind_status_types;
2161 static const value_string homeplug_av_cc_set_tei_map_ind_status_vals[] = {
2162 { HOMEPLUG_AV_CC_SET_TEI_MAP_IND_STATUS_NOT_AUTHENTICATED, "Not Authenticated" },
2163 { HOMEPLUG_AV_CC_SET_TEI_MAP_IND_STATUS_AUTHENTICATED, "Authenticated" },
2164 { 0, NULL }
2167 #define HOMEPLUG_AV_GP_CM_ATTEN_CHAR_AAG_FORMAT "Avg. Attenuation of group #%d (dB): %d"
2169 /* ST/IoTecha specific values */
2171 static const value_string homeplug_av_st_iotecha_linkstatus_status_vals[] = {
2172 { 0x00, "No Link" },
2173 { 0x01, "Link with at least 1 device" },
2174 { 0, NULL }
2177 static const value_string homeplug_av_st_iotecha_linkstatus_devmode_vals[] = {
2178 { 0x00, "Unavailable" },
2179 { 0x01, "UNAS STA" },
2180 { 0x02, "ASSC STA" },
2181 { 0x03, "AUTH STA" },
2182 { 0x04, "UNAS BM" },
2183 { 0x05, "ASSC BM" },
2184 { 0x06, "AUTH BM" },
2185 { 0, NULL }
2188 #define HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_HEADER_SIZE 2
2189 #define HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_MASK (((1<<6)-1)<<10)
2190 #define HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_LENGTH_MASK ((1<<10)-1)
2192 typedef enum {
2193 HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_NULL = 0x00,
2194 HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_DEVICE_NAME = 0x01,
2195 HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_DEVICE_TYPE = 0x02,
2196 HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_BUILD_ID = 0x03,
2197 HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_RESERVED = 0x04,
2198 HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_DEVICE_UID = 0x05,
2199 HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_MAC_ADDRESS = 0x06,
2200 HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_HARDWARE_NAME = 0x07,
2201 HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_HARDWARE_VERSION = 0x08,
2202 HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_LINUX_KERNEL_VERSION = 0x09,
2203 HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_LINUX_USER_VERSION = 0x0A,
2204 } homeplug_av_st_iotecha_stp_discover_tlv_types;
2206 static const value_string homeplug_av_st_iotecha_stp_discover_tlv_type_vals[] = {
2207 { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_NULL, "NULL" },
2208 { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_DEVICE_NAME, "Device name" },
2209 { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_DEVICE_TYPE, "Device type" },
2210 { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_BUILD_ID, "Build ID" },
2211 { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_RESERVED, "Reserved" },
2212 { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_DEVICE_UID, "Device UID" },
2213 { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_MAC_ADDRESS, "MAC Address" },
2214 { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_HARDWARE_NAME, "Hardware name" },
2215 { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_HARDWARE_VERSION, "Hardware version" },
2216 { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_LINUX_KERNEL_VERSION, "Linux Kernel version" },
2217 { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_LINUX_USER_VERSION, "Linux User version" },
2218 { 0, NULL }
2221 typedef enum {
2222 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_NULL = 0x00,
2223 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_BEGIN_BSS = 0x01,
2224 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_LOCAL_BSS = 0x02,
2225 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_RESERVED = 0x03,
2226 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_REMOTE_BSS = 0x04,
2227 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SNID = 0x05,
2228 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_NID = 0x06,
2229 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_NET_MODE = 0x07,
2230 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_BEACON_AGE = 0x08,
2231 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_BEACON_FC_RELIABILITY = 0x09,
2232 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_BEACON_PLD_RELIABILITY = 0x0A,
2233 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL = 0x0B,
2234 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_TOS = 0x0C,
2235 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_MIN = 0x0D,
2236 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_TOS_MIN = 0x0E,
2237 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_MAX = 0x0F,
2238 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_TOS_MAX = 0x10,
2239 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_NET_HYB_MODE = 0x11,
2240 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_TEI = 0x12,
2241 HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_END_BSS = 0xFF,
2242 } homeplug_av_st_iotecha_stp_get_bss_tlv_types;
2244 static const value_string homeplug_av_st_iotecha_stp_get_bss_tlv_type_vals[] = {
2245 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_NULL, "NULL" },
2246 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_BEGIN_BSS, "Start of BSS descriptor" },
2247 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_LOCAL_BSS, "Local BSS Manager" },
2248 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_RESERVED, "Reserved Data" },
2249 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_REMOTE_BSS, "Remote BSS" },
2250 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SNID, "Short Network ID" },
2251 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_NID, "Network ID" },
2252 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_NET_MODE, "Network Mode" },
2253 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_BEACON_AGE, "Beacon Age" },
2254 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_BEACON_FC_RELIABILITY, "Beacon Frame Control reliability" },
2255 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_BEACON_PLD_RELIABILITY,"Beacon Payload reliability" },
2256 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL, "Signal Level" },
2257 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_TOS, "Signal Level Time of Sample" },
2258 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_MIN, "Min Signal Level" },
2259 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_TOS_MIN, "Min Signal Level Time of Sample" },
2260 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_MAX, "Max Signal Level" },
2261 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_TOS_MAX, "Max Signal Level Time of Sample" },
2262 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_NET_HYB_MODE, "Network Hybrid Mode" },
2263 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_TEI, "TEI of BM" },
2264 { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_END_BSS, "End of BSS descriptor" },
2265 { 0, NULL }
2268 static const value_string homeplug_av_st_iotecha_mac_address_flag_vals[] = {
2269 { 0x00, "Unknown" },
2270 { 0x01, "Local MAC" },
2271 { 0x02, "Local Bridged MAC" },
2272 { 0x04, "Remote MAC" },
2273 { 0x08, "Remote Bridged MAC" },
2274 { 0, NULL }
2277 static const value_string homeplug_av_st_iotecha_chanqual_tei_source_vals[] = {
2278 { 0x01, "Local Tei" },
2279 { 0x02, "Remote Tei" },
2280 { 0, NULL }
2283 static const value_string homeplug_av_st_iotecha_chanqual_substatus_vals[] = {
2284 { 0x01, "Subscribed" },
2285 { 0x02, "Unsubscribed" },
2286 { 0x03, "Invalid Request Type" },
2287 { 0, NULL }
2290 static const value_string homeplug_av_st_iotecha_chanqual_responsetype_vals[] = {
2291 { 0x00, "Default Tone map transmitted in ICE" },
2292 { 0x01, "Others" },
2293 { 0, NULL }
2296 static const value_string homeplug_av_st_iotecha_chanqual_tmi_vals[] = {
2297 { 0xFE, "Not Available For Particular Interval" },
2298 { 0xFF, "Unusable Interval" },
2299 { 0, NULL }
2302 #define HOMEPLUG_AV_ST_IOTECHA_CHANQUAL_CBLD_DATA_MASK_LOW 0x0F
2303 #define HOMEPLUG_AV_ST_IOTECHA_CHANQUAL_CBLD_DATA_MASK_HIGH 0xF0
2304 /* (1154/2) */
2305 #define HOMEPLUG_AV_ST_IOTECHA_CHANQUAL_CBLD_DATA_COUNT 577
2306 static const value_string homeplug_av_st_iotecha_chanqual_cbld_data_vals[] = {
2307 { 0x00, "Empty" },
2308 { 0x01, "Bitload of 1" },
2309 { 0x02, "Bitload of 2" },
2310 { 0x03, "Bitload of 3" },
2311 { 0x04, "Bitload of 4" },
2312 { 0x05, "Bitload of 5" },
2313 { 0x06, "Bitload of 6" },
2314 { 0x07, "Bitload of 7" },
2315 { 0x08, "Bitload of 8" },
2316 { 0x09, "Bitload of 9" },
2317 { 0x0A, "Bitload of 10" },
2318 { 0x0F, "Unusable" },
2319 { 0, NULL }
2322 static const value_string homeplug_av_st_iotecha_chanqual_reqtype_vals[] = {
2323 { 0x01, "Subscribe" },
2324 { 0x02, "Unsubscribe" },
2325 { 0, NULL }
2328 static const value_string homeplug_av_st_iotecha_mfct_request_type_vals[] = {
2329 { 0x00, "Commit" },
2330 { 0x02, "Abort" },
2331 { 0, NULL }
2334 static const value_string homeplug_av_st_iotecha_mfct_result_vals[] = {
2335 { 0x00, "Success" },
2336 { 0x03, "Parameter Not Found" },
2337 { 0x04, "Permission Error" },
2338 { 0x05, "Insufficient space in parameter region" },
2339 { 0x06, "Internal Error" },
2340 { 0, NULL }
2343 static const value_string homeplug_av_st_iotecha_stp_fwup_mtype_vals[] = {
2344 { 0x00, "Start Request" },
2345 { 0x01, "Start Confirmation" },
2346 { 0x02, "Data Index" },
2347 { 0x03, "Data Response" },
2348 { 0, NULL }
2351 static const value_string homeplug_av_st_iotecha_stp_cpstate_state_vals[] = {
2352 { 0x00, "Invalid"},
2353 { 0x01, "A"},
2354 { 0x02, "Ambiguous (A-B)"},
2355 { 0x03, "B"},
2356 { 0x04, "Ambiguous (B-C)"},
2357 { 0x05, "C"},
2358 { 0x06, "Ambiguous (C-D)"},
2359 { 0x07, "D"},
2360 { 0x08, "Ambiguous (D-E)"},
2361 { 0x09, "E"},
2362 { 0x0A, "F"},
2363 { 0, NULL }
2366 static const value_string homeplug_av_st_iotecha_test_type_vals[] = {
2367 { 0x00, "Power"},
2368 { 0x01, "Error"},
2369 { 0, NULL }
2372 static const value_string homeplug_av_st_iotecha_agc_lock_vals[] = {
2373 { 0x00, "Disabled"},
2374 { 0x01, "Enabled"},
2375 { 0, NULL }
2378 static const value_string homeplug_av_st_iotecha_test_status_vals[] = {
2379 { 0x00, "Test running"},
2380 { 0x01, "Failed to start test"},
2381 { 0x02, "Test reset"},
2382 { 0, NULL }
2385 static const value_string homeplug_av_st_iotecha_suppress_data_vals[] = {
2386 { 0x00, "Disabled"},
2387 { 0x01, "Enabled"},
2388 { 0, NULL }
2391 static void
2392 adc_bitmask_base(char *buf, uint8_t value) {
2393 snprintf(buf, ITEM_LABEL_LENGTH, "%s, %s, %s (%d)",
2394 (value & 0x01) ? "true" : "false",
2395 (value & 0x02) ? "true" : "false",
2396 (value & 0x04) ? "true" : "false",
2397 value);
2400 /* End of ST/IoTecha specific values */
2402 #define TVB_LEN_GREATEST 1
2403 #define TVB_LEN_UNDEF 0
2404 #define TVB_LEN_SHORTEST -1
2405 static int check_tvb_length(ptvcursor_t *cursor, const int length)
2407 if (!cursor)
2408 return TVB_LEN_UNDEF;
2410 if (tvb_reported_length_remaining(ptvcursor_tvbuff(cursor),
2411 ptvcursor_current_offset(cursor)) < length)
2412 return TVB_LEN_SHORTEST;
2414 return TVB_LEN_GREATEST;
2417 static inline unsigned int homeplug_av_mmtype_msb_is_vendor(uint8_t msb)
2419 return ((msb & (HOMEPLUG_AV_MMTYPE_MSB_VENDOR << HOMEPLUG_AV_MMTYPE_MSB_SHIFT)) ==
2420 (HOMEPLUG_AV_MMTYPE_MSB_VENDOR << HOMEPLUG_AV_MMTYPE_MSB_SHIFT));
2423 static inline unsigned int homeplug_av_mmtype_msb_is_manufacturer(uint8_t msb)
2425 return ((msb & (HOMEPLUG_AV_MMTYPE_MSB_MANUF << HOMEPLUG_AV_MMTYPE_MSB_SHIFT)) ==
2426 (HOMEPLUG_AV_MMTYPE_MSB_MANUF << HOMEPLUG_AV_MMTYPE_MSB_SHIFT));
2429 static inline uint8_t homeplug_av_get_mmhdr_size(uint8_t mmv) {
2430 /* Header in HomePlug AV 1.1 is 2 bytes larger (Fragmentation information) */
2431 return (mmv ? 5 : 3);
2434 /* Dissection of MMHDR */
2435 static void
2436 dissect_homeplug_av_mmhdr(ptvcursor_t *cursor, uint8_t *homeplug_av_mmver, uint16_t *homeplug_av_mmtype, uint32_t *homeplug_av_oui)
2438 proto_item *ti;
2439 proto_tree *ti_mmtype;
2440 /* Save in static variable */
2441 /* proto_tree *ti_vendor; */
2442 proto_tree *ti_public;
2443 uint8_t lsb, msb, mmv;
2444 uint32_t offset;
2446 offset = 0;
2448 mmv = tvb_get_uint8(ptvcursor_tvbuff(cursor),
2449 ptvcursor_current_offset(cursor));
2450 lsb = tvb_get_uint8(ptvcursor_tvbuff(cursor),
2451 ptvcursor_current_offset(cursor) + 1);
2452 msb = tvb_get_uint8(ptvcursor_tvbuff(cursor),
2453 ptvcursor_current_offset(cursor) + 2);
2455 *homeplug_av_mmver = mmv;
2456 *homeplug_av_mmtype = (msb << 8) | lsb;
2458 if (homeplug_av_mmtype_msb_is_vendor(msb)
2459 || homeplug_av_mmtype_msb_is_manufacturer(msb))
2461 /* read three bytes of OUI */
2462 *homeplug_av_oui = tvb_get_uint24(ptvcursor_tvbuff(cursor),
2463 ptvcursor_current_offset(cursor)+homeplug_av_get_mmhdr_size(mmv),
2464 ENC_NA);
2467 if (!ptvcursor_tree(cursor)) {
2468 /* advance even there is no tree to be able to extract data in packet specific dissectors */
2469 offset += homeplug_av_get_mmhdr_size(mmv);
2470 if (homeplug_av_mmtype_msb_is_vendor(msb)
2471 || homeplug_av_mmtype_msb_is_manufacturer(msb)) {
2472 offset += 3;
2474 ptvcursor_advance(cursor, offset);
2475 return;
2478 /* Header in HomePlug AV 1.1 is 2 bytes larger (Fragmentation information) */
2479 ti = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mmhdr, homeplug_av_get_mmhdr_size(*homeplug_av_mmver), ENC_NA);
2481 ptvcursor_push_subtree(cursor, ti, ett_homeplug_av_mmhdr);
2483 ptvcursor_add(cursor, hf_homeplug_av_mmhdr_mmver, 1, ENC_BIG_ENDIAN);
2485 switch (*homeplug_av_oui) {
2486 case HOMEPLUG_AV_OUI_QCA:
2487 ti_mmtype = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mmhdr_mmtype_qualcomm, 2, ENC_LITTLE_ENDIAN);
2488 break;
2489 case HOMEPLUG_AV_OUI_ST_IOTECHA:
2490 ti_mmtype = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mmhdr_mmtype_st, 2, ENC_LITTLE_ENDIAN);
2491 break;
2492 default:
2493 ti_mmtype = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mmhdr_mmtype_general, 2, ENC_LITTLE_ENDIAN);
2494 break;
2497 ptvcursor_push_subtree(cursor, ti_mmtype, ett_homeplug_av_mmtype);
2499 ptvcursor_add(cursor, hf_homeplug_av_mmhdr_mmtype_lsb, 1, ENC_BIG_ENDIAN);
2500 ptvcursor_add(cursor, hf_homeplug_av_mmhdr_mmtype_msb, 1, ENC_BIG_ENDIAN);
2502 ptvcursor_pop_subtree(cursor);
2504 /* Fragmentation information is part of the header in HomePlug AV 1.1 */
2505 if (mmv)
2507 ti_public = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mmhdr_fmi, 2, ENC_LITTLE_ENDIAN);
2509 ptvcursor_push_subtree(cursor, ti_public, ett_homeplug_av_fmi);
2511 ptvcursor_add_no_advance(cursor, hf_homeplug_av_public_frag_count, 1, ENC_BIG_ENDIAN);
2512 ptvcursor_add(cursor, hf_homeplug_av_public_frag_index, 1, ENC_BIG_ENDIAN);
2513 ptvcursor_add(cursor, hf_homeplug_av_public_frag_seqnum, 1, ENC_BIG_ENDIAN);
2515 ptvcursor_pop_subtree(cursor);
2518 ptvcursor_pop_subtree(cursor);
2520 /* Vendor management frame */
2521 if (homeplug_av_mmtype_msb_is_vendor(msb) || homeplug_av_mmtype_msb_is_manufacturer(msb))
2523 ti_vendor = ptvcursor_add_no_advance(cursor, hf_homeplug_av_vendor, 3, ENC_NA);
2525 ptvcursor_push_subtree(cursor, ti_vendor, ett_homeplug_av_vendor);
2527 ptvcursor_add(cursor, hf_homeplug_av_vendor_oui, 3, ENC_NA);
2529 ptvcursor_pop_subtree(cursor);
2531 /* Public management frame in HomePlug AV 1.0 */
2532 else if (!mmv)
2534 ti_public = ptvcursor_add_no_advance(cursor, hf_homeplug_av_public, -1, ENC_NA);
2536 ptvcursor_push_subtree(cursor, ti_public, ett_homeplug_av_public);
2538 ptvcursor_add_no_advance(cursor, hf_homeplug_av_public_frag_count, 1, ENC_BIG_ENDIAN);
2539 ptvcursor_add(cursor, hf_homeplug_av_public_frag_index, 1, ENC_BIG_ENDIAN);
2540 ptvcursor_add(cursor, hf_homeplug_av_public_frag_seqnum, 1, ENC_BIG_ENDIAN);
2542 ptvcursor_pop_subtree(cursor);
2546 /* Beacon body */
2548 static void
2549 dissect_homeplug_av_beacon_payload(ptvcursor_t *cursor)
2552 proto_item *it;
2553 proto_tree *tree;
2554 tvbuff_t *tvb;
2556 if (!ptvcursor_tree(cursor))
2557 return;
2559 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_bcn_payload, -1, ENC_NA);
2561 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_bcn_payload);
2563 tree = ptvcursor_tree(cursor);
2564 tvb = ptvcursor_tvbuff(cursor);
2566 static int * const bcn1_fields[] = {
2567 &hf_homeplug_av_bcn_nid,
2568 &hf_homeplug_av_bcn_hm,
2569 NULL
2572 proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 7, bcn1_fields, ENC_BIG_ENDIAN);
2573 ptvcursor_advance(cursor, 7);
2575 ptvcursor_add(cursor, hf_homeplug_av_bcn_stei, 1, ENC_BIG_ENDIAN);
2577 static int * const bcn2_fields[] = {
2578 &hf_homeplug_av_bcn_type,
2579 &hf_homeplug_av_bcn_ncnr,
2580 &hf_homeplug_av_bcn_npsm,
2581 &hf_homeplug_av_bcn_num_slots,
2582 NULL
2585 proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, bcn2_fields, ENC_BIG_ENDIAN);
2586 ptvcursor_advance(cursor, 1);
2588 ptvcursor_add(cursor, hf_homeplug_av_bcn_slot_use, 1, ENC_BIG_ENDIAN);
2590 static int * const bcn3_fields[] = {
2591 &hf_homeplug_av_bcn_slot_id,
2592 &hf_homeplug_av_bcn_aclss,
2593 &hf_homeplug_av_bcn_hoip,
2594 &hf_homeplug_av_bcn_rtsbf,
2595 NULL
2598 proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, bcn3_fields, ENC_BIG_ENDIAN);
2599 ptvcursor_advance(cursor, 1);
2601 static int * const bcn4_fields[] = {
2602 &hf_homeplug_av_bcn_nm,
2603 &hf_homeplug_av_bcn_cco_cap,
2604 &hf_homeplug_av_bcn_rsf,
2605 &hf_homeplug_av_bcn_plevel,
2606 NULL
2609 proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, bcn4_fields, ENC_BIG_ENDIAN);
2610 ptvcursor_advance(cursor, 1);
2612 /* TODO: decode individual beacon entries */
2613 ptvcursor_add(cursor, hf_homeplug_av_bcn_bentries, 120, ENC_NA);
2614 ptvcursor_add(cursor, hf_homeplug_av_bcn_bpcs, 4, ENC_LITTLE_ENDIAN);
2616 ptvcursor_pop_subtree(cursor);
2619 static void
2620 dissect_homeplug_av_beacon(ptvcursor_t *cursor)
2622 proto_item *it;
2624 if (!ptvcursor_tree(cursor))
2625 return;
2627 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_bcn, -1, ENC_NA);
2629 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_bcn);
2631 ptvcursor_add(cursor, hf_homeplug_av_bcn_bts, 4, ENC_LITTLE_ENDIAN);
2632 ptvcursor_add(cursor, hf_homeplug_av_bcn_bto_0, 2, ENC_LITTLE_ENDIAN);
2633 ptvcursor_add(cursor, hf_homeplug_av_bcn_bto_1, 2, ENC_LITTLE_ENDIAN);
2634 ptvcursor_add(cursor, hf_homeplug_av_bcn_bto_2, 2, ENC_LITTLE_ENDIAN);
2635 ptvcursor_add(cursor, hf_homeplug_av_bcn_bto_3, 2, ENC_LITTLE_ENDIAN);
2636 ptvcursor_add(cursor, hf_homeplug_av_fc_fccs_av, 3, ENC_NA);
2637 dissect_homeplug_av_beacon_payload(cursor);
2639 ptvcursor_pop_subtree(cursor);
2642 /* Start of Frame */
2643 static void
2644 dissect_homeplug_av_start_of_frame(ptvcursor_t *cursor)
2646 proto_item *it;
2647 proto_tree *tree;
2648 tvbuff_t *tvb;
2650 if (!ptvcursor_tree(cursor))
2651 return;
2653 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sof, -1, ENC_NA);
2655 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_sof);
2657 tree = ptvcursor_tree(cursor);
2658 tvb = ptvcursor_tvbuff(cursor);
2660 ptvcursor_add(cursor, hf_homeplug_av_stei, 1, ENC_BIG_ENDIAN);
2661 ptvcursor_add(cursor, hf_homeplug_av_dtei, 1, ENC_BIG_ENDIAN);
2662 ptvcursor_add(cursor, hf_homeplug_av_lid, 1, ENC_BIG_ENDIAN);
2664 static int * const sof1_fields[] = {
2665 &hf_homeplug_av_cfs,
2666 &hf_homeplug_av_bdf,
2667 &hf_homeplug_av_hp10df,
2668 &hf_homeplug_av_hp11df,
2669 &hf_homeplug_av_sof_peks,
2670 NULL
2673 proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sof1_fields, ENC_BIG_ENDIAN);
2674 ptvcursor_advance(cursor, 1);
2676 ptvcursor_add(cursor, hf_homeplug_av_ppb, 1, ENC_BIG_ENDIAN);
2677 ptvcursor_add(cursor, hf_homeplug_av_sof_ble, 1, ENC_BIG_ENDIAN);
2679 static int * const sof2_fields[] = {
2680 &hf_homeplug_av_sof_pbsz,
2681 &hf_homeplug_av_sof_num_sym,
2682 &hf_homeplug_av_sof_tmi_av,
2683 NULL
2686 proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sof2_fields, ENC_BIG_ENDIAN);
2687 ptvcursor_advance(cursor, 1);
2689 static int * const sof3_fields[] = {
2690 &hf_homeplug_av_fl_av,
2691 &hf_homeplug_av_sof_mpdu_cnt,
2692 &hf_homeplug_av_sof_burst_cnt,
2693 NULL
2696 proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 2, sof3_fields, ENC_LITTLE_ENDIAN);
2697 ptvcursor_advance(cursor, 2);
2699 static int * const sof4_fields[] = {
2700 &hf_homeplug_av_sof_bbf,
2701 &hf_homeplug_av_sof_mrtfl,
2702 &hf_homeplug_av_sof_dccpcf,
2703 &hf_homeplug_av_sof_mcf,
2704 &hf_homeplug_av_sof_mnbf,
2705 NULL
2708 proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sof4_fields, ENC_BIG_ENDIAN);
2709 ptvcursor_advance(cursor, 1);
2711 static int * const sof5_fields[] = {
2712 &hf_homeplug_av_sof_rsr,
2713 &hf_homeplug_av_sof_clst,
2714 &hf_homeplug_av_sof_mfs_cmd_mgmt,
2715 &hf_homeplug_av_sof_mfs_cmd_data,
2716 NULL
2719 proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sof5_fields, ENC_BIG_ENDIAN);
2720 ptvcursor_advance(cursor, 1);
2722 static int * const sof6_fields[] = {
2723 &hf_homeplug_av_sof_mfs_rsp_mgmt,
2724 &hf_homeplug_av_sof_mfs_rsp_data,
2725 &hf_homeplug_av_sof_bm_sack,
2726 NULL
2729 proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sof6_fields, ENC_BIG_ENDIAN);
2730 ptvcursor_advance(cursor, 1);
2732 ptvcursor_add(cursor, hf_homeplug_av_fc_fccs_av, 3, ENC_NA);
2734 ptvcursor_pop_subtree(cursor);
2737 /* Selective acknowledgment */
2738 static void
2739 dissect_homeplug_av_sack(ptvcursor_t *cursor)
2741 proto_item *it;
2742 proto_tree *tree;
2743 tvbuff_t *tvb;
2745 if (!ptvcursor_tree(cursor))
2746 return;
2748 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sack, -1, ENC_NA);
2750 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_sack);
2752 tree = ptvcursor_tree(cursor);
2753 tvb = ptvcursor_tvbuff(cursor);
2755 ptvcursor_add(cursor, hf_homeplug_av_dtei, 1, ENC_BIG_ENDIAN);
2757 proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, rsof_sack_fields, ENC_BIG_ENDIAN);
2758 ptvcursor_advance(cursor, 1);
2760 /* TODO: add variable fields here */
2761 ptvcursor_advance(cursor, 10);
2762 ptvcursor_add(cursor, hf_homeplug_av_fc_fccs_av, 3, ENC_NA);
2764 ptvcursor_pop_subtree(cursor);
2767 /* Request to send/clear to send */
2768 static void
2769 dissect_homeplug_av_rtscts(ptvcursor_t *cursor)
2771 proto_item *it;
2772 proto_tree *tree;
2773 tvbuff_t *tvb;
2775 if (!ptvcursor_tree(cursor))
2776 return;
2778 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rtscts, -1, ENC_NA);
2780 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rtscts);
2782 tree = ptvcursor_tree(cursor);
2783 tvb = ptvcursor_tvbuff(cursor);
2785 ptvcursor_add(cursor, hf_homeplug_av_stei, 1, ENC_BIG_ENDIAN);
2786 ptvcursor_add(cursor, hf_homeplug_av_dtei, 1, ENC_BIG_ENDIAN);
2787 ptvcursor_add(cursor, hf_homeplug_av_lid, 1, ENC_BIG_ENDIAN);
2789 static int * const rtscts_fields[] = {
2790 &hf_homeplug_av_cfs,
2791 &hf_homeplug_av_bdf,
2792 &hf_homeplug_av_hp10df,
2793 &hf_homeplug_av_hp11df,
2794 &hf_homeplug_av_rtscts_rtsf,
2795 &hf_homeplug_av_rtscts_igf,
2796 &hf_homeplug_av_rtscts_mnbf,
2797 &hf_homeplug_av_rtscts_mcf,
2798 NULL
2801 proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, rtscts_fields, ENC_BIG_ENDIAN);
2802 ptvcursor_advance(cursor, 1);
2804 ptvcursor_add(cursor, hf_homeplug_av_rtscts_dur, 2, ENC_LITTLE_ENDIAN);
2805 ptvcursor_add(cursor, hf_homeplug_av_reserved, 6, ENC_NA);
2806 ptvcursor_add(cursor, hf_homeplug_av_fc_fccs_av, 3, ENC_NA);
2808 ptvcursor_pop_subtree(cursor);
2811 /* Sound */
2812 static void
2813 dissect_homeplug_av_sound(ptvcursor_t *cursor)
2815 proto_item *it;
2816 proto_tree *tree;
2817 tvbuff_t *tvb;
2819 if (!ptvcursor_tree(cursor))
2820 return;
2822 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sound, -1, ENC_NA);
2824 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_sound);
2826 tree = ptvcursor_tree(cursor);
2827 tvb = ptvcursor_tvbuff(cursor);
2829 ptvcursor_add(cursor, hf_homeplug_av_stei, 1, ENC_BIG_ENDIAN);
2830 ptvcursor_add(cursor, hf_homeplug_av_dtei, 1, ENC_BIG_ENDIAN);
2831 ptvcursor_add(cursor, hf_homeplug_av_lid, 1, ENC_BIG_ENDIAN);
2833 static int * const sound1_fields[] = {
2834 &hf_homeplug_av_cfs,
2835 &hf_homeplug_av_sound_pbsz,
2836 &hf_homeplug_av_sound_bdf,
2837 &hf_homeplug_av_sound_saf,
2838 &hf_homeplug_av_sound_scf,
2839 &hf_homeplug_av_sound_req_tm,
2840 NULL
2843 proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sound1_fields, ENC_BIG_ENDIAN);
2844 ptvcursor_advance(cursor, 1);
2846 static int * const sound2_fields[] = {
2847 &hf_homeplug_av_fl_av,
2848 &hf_homeplug_av_sound_mpdu_cnt,
2849 NULL
2852 proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 2, sound2_fields, ENC_LITTLE_ENDIAN);
2853 ptvcursor_advance(cursor, 2);
2855 ptvcursor_add(cursor, hf_homeplug_av_ppb, 1, ENC_BIG_ENDIAN);
2856 ptvcursor_add(cursor, hf_homeplug_av_sound_src, 1, ENC_BIG_ENDIAN);
2858 static int * const sound3_fields[] = {
2859 &hf_homeplug_av_sound_add_req_tm,
2860 &hf_homeplug_av_sound_max_pb_sym,
2861 &hf_homeplug_av_sound_ecsf,
2862 &hf_homeplug_av_sound_ecuf,
2863 NULL
2866 proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sound3_fields, ENC_BIG_ENDIAN);
2867 ptvcursor_advance(cursor, 1);
2869 static int * const sound4_fields[] = {
2870 &hf_homeplug_av_sound_ems,
2871 &hf_homeplug_av_sound_esgisf,
2872 &hf_homeplug_av_sound_elgisf,
2873 &hf_homeplug_av_sound_efrs,
2874 NULL
2877 proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sound4_fields, ENC_BIG_ENDIAN);
2878 ptvcursor_advance(cursor, 3); /* one byte for bitmask plus two reserved bytes we ignore */
2880 ptvcursor_add(cursor, hf_homeplug_av_fc_fccs_av, 3, ENC_NA);
2882 ptvcursor_pop_subtree(cursor);
2885 /* Reverse Start of Frame */
2886 static void
2887 dissect_homeplug_av_rsof(ptvcursor_t *cursor)
2889 proto_item *it;
2890 proto_tree *tree;
2891 tvbuff_t *tvb;
2893 if (!ptvcursor_tree(cursor))
2894 return;
2896 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rsof, -1, ENC_NA);
2898 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rsof);
2900 tree = ptvcursor_tree(cursor);
2901 tvb = ptvcursor_tvbuff(cursor);
2903 ptvcursor_add(cursor, hf_homeplug_av_dtei, 1, ENC_BIG_ENDIAN);
2905 proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, rsof_sack_fields, ENC_BIG_ENDIAN);
2906 ptvcursor_advance(cursor, 8); /* 1 byte for bitmask field, plus 7 bytes of variable data */
2907 /* TODO: fill in variable fields */
2909 static int * const rsof2_fields[] = {
2910 &hf_homeplug_av_rsof_fl,
2911 &hf_homeplug_av_rsof_tmi,
2912 &hf_homeplug_av_rsof_pbsz,
2913 NULL
2916 proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 2, rsof2_fields, ENC_LITTLE_ENDIAN);
2917 ptvcursor_advance(cursor, 2);
2919 static int * const rsof3_fields[] = {
2920 &hf_homeplug_av_rsof_num_sym,
2921 &hf_homeplug_av_rsof_mfs_cmd_mgmt,
2922 &hf_homeplug_av_rsof_mfs_cmd_data,
2923 NULL
2926 proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, rsof3_fields, ENC_BIG_ENDIAN);
2927 ptvcursor_advance(cursor, 1);
2929 ptvcursor_add(cursor, hf_homeplug_av_fc_fccs_av, 3, ENC_NA);
2931 ptvcursor_pop_subtree(cursor);
2934 static void
2935 dissect_homeplug_av_nw_info_sta(ptvcursor_t *cursor, bool vendor, unsigned homeplug_av_mmver)
2937 proto_item *it;
2939 if (!ptvcursor_tree(cursor))
2940 return;
2942 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_info_sta_info, -1, ENC_NA);
2944 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_nw_info_sta_info);
2946 ptvcursor_add(cursor, hf_homeplug_av_nw_info_sta_da, 6, ENC_NA);
2947 if (vendor) {
2948 ptvcursor_add(cursor, hf_homeplug_av_nw_info_sta_tei, 1, ENC_BIG_ENDIAN);
2950 if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
2951 ptvcursor_add(cursor, hf_homeplug_av_reserved, 3, ENC_NA);
2953 ptvcursor_add(cursor, hf_homeplug_av_nw_info_sta_bda, 6, ENC_NA);
2955 if (!homeplug_av_mmver)
2957 ptvcursor_add(cursor, hf_homeplug_av10_nw_info_sta_phy_dr_tx, 1, ENC_BIG_ENDIAN);
2958 ptvcursor_add(cursor, hf_homeplug_av10_nw_info_sta_phy_dr_rx, 1, ENC_BIG_ENDIAN);
2960 else if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
2962 ptvcursor_add(cursor, hf_homeplug_av11_nw_info_sta_phy_dr_tx, 2, ENC_LITTLE_ENDIAN);
2963 ptvcursor_add_no_advance(cursor, hf_homeplug_av11_nw_info_sta_cpling_tx, 1, ENC_BIG_ENDIAN);
2964 ptvcursor_add(cursor, hf_homeplug_av11_nw_info_sta_cpling_rx, 1, ENC_BIG_ENDIAN);
2965 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
2966 ptvcursor_add(cursor, hf_homeplug_av11_nw_info_sta_phy_dr_rx, 2, ENC_LITTLE_ENDIAN);
2967 ptvcursor_add(cursor, hf_homeplug_av_reserved, 2, ENC_NA);
2970 ptvcursor_pop_subtree(cursor);
2973 static void
2974 dissect_homeplug_av_nw_info_net(ptvcursor_t *cursor, bool vendor, uint8_t homeplug_av_mmver)
2976 proto_item *it;
2978 if (!ptvcursor_tree(cursor))
2979 return;
2981 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_info_net_info, -1, ENC_NA);
2983 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_nw_info_net_info);
2985 ptvcursor_add(cursor, hf_homeplug_av_nw_info_nid, 7, ENC_NA);
2987 if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
2988 ptvcursor_add(cursor, hf_homeplug_av_reserved, 2, ENC_NA);
2990 ptvcursor_add(cursor, hf_homeplug_av_nw_info_snid, 1, ENC_BIG_ENDIAN);
2991 ptvcursor_add(cursor, hf_homeplug_av_nw_info_tei, 1, ENC_BIG_ENDIAN);
2993 if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
2994 ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
2996 ptvcursor_add(cursor, hf_homeplug_av_nw_info_sta_role, 1, ENC_BIG_ENDIAN);
2997 ptvcursor_add(cursor, hf_homeplug_av_nw_info_cco_mac, 6, ENC_NA);
2998 if (vendor) {
2999 ptvcursor_add(cursor, hf_homeplug_av_nw_info_cco_tei, 1, ENC_BIG_ENDIAN);
3001 if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
3002 ptvcursor_add(cursor, hf_homeplug_av_reserved, 3, ENC_NA);
3004 else
3006 ptvcursor_add(cursor, hf_homeplug_av_nw_info_access, 1, ENC_BIG_ENDIAN);
3007 ptvcursor_add(cursor, hf_homeplug_av_nw_info_num_coord, 1, ENC_BIG_ENDIAN);
3010 ptvcursor_pop_subtree(cursor);
3013 /* Public MMEs */
3014 static void
3015 dissect_homeplug_av_cc_sta_info(ptvcursor_t *cursor)
3017 proto_item *it;
3019 if (!ptvcursor_tree(cursor))
3020 return;
3022 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cc_sta_info, -1, ENC_NA);
3024 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cc_sta_info);
3026 ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_mac, 6, ENC_NA);
3027 ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_tei, 1, ENC_BIG_ENDIAN);
3028 ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_same_net, 1, ENC_BIG_ENDIAN);
3029 ptvcursor_add(cursor, hf_homeplug_av_nw_info_snid, 1, ENC_BIG_ENDIAN);
3030 ptvcursor_add(cursor, hf_homeplug_av_nw_info_cco_cap, 1, ENC_BIG_ENDIAN);
3031 ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_sig_level, 1, ENC_BIG_ENDIAN);
3032 ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_avg_ble, 1, ENC_BIG_ENDIAN);
3034 ptvcursor_pop_subtree(cursor);
3037 static void
3038 dissect_homeplug_av_cc_net_info(ptvcursor_t *cursor)
3040 proto_item *it;
3042 if (!ptvcursor_tree(cursor))
3043 return;
3045 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cc_net_info, -1, ENC_NA);
3047 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cc_net_info);
3049 ptvcursor_add(cursor, hf_homeplug_av_nw_info_nid, 7, ENC_NA);
3050 ptvcursor_add(cursor, hf_homeplug_av_nw_info_snid, 1, ENC_BIG_ENDIAN);
3051 ptvcursor_add(cursor, hf_homeplug_av_cc_net_info_hyb_mode, 1, ENC_BIG_ENDIAN);
3052 ptvcursor_add(cursor, hf_homeplug_av_cc_net_info_bcn_slots, 1, ENC_BIG_ENDIAN);
3053 ptvcursor_add(cursor, hf_homeplug_av_cc_net_info_cco_sts, 1, ENC_BIG_ENDIAN);
3054 ptvcursor_add(cursor, hf_homeplug_av_cc_net_info_bcn_ofs, 2, ENC_BIG_ENDIAN);
3056 ptvcursor_pop_subtree(cursor);
3059 static void
3060 dissect_homeplug_av_cc_disc_list_cnf(ptvcursor_t *cursor)
3062 proto_item *it;
3063 uint8_t num_stas;
3064 uint8_t sta;
3065 uint8_t num_nets;
3066 uint8_t net;
3068 if (!ptvcursor_tree(cursor))
3069 return;
3071 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cc_disc_list_cnf, -1, ENC_NA);
3073 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cc_disc_list_cnf);
3075 num_stas = tvb_get_uint8(ptvcursor_tvbuff(cursor),
3076 ptvcursor_current_offset(cursor));
3077 ptvcursor_add(cursor, hf_homeplug_av_cc_disc_list_sta_cnt, 1, ENC_BIG_ENDIAN);
3079 for (sta = 0; sta < num_stas; sta++) {
3080 dissect_homeplug_av_cc_sta_info(cursor);
3083 num_nets = tvb_get_uint8(ptvcursor_tvbuff(cursor),
3084 ptvcursor_current_offset(cursor));
3085 ptvcursor_add(cursor, hf_homeplug_av_cc_disc_list_net_cnt, 1, ENC_BIG_ENDIAN);
3087 for (net = 0; net < num_nets; net++) {
3088 dissect_homeplug_av_cc_net_info(cursor);
3091 ptvcursor_pop_subtree(cursor);
3094 static void
3095 dissect_homeplug_av_cm_enc_pld_ind(ptvcursor_t *cursor)
3097 proto_item *it;
3098 uint8_t pid;
3100 if (!ptvcursor_tree(cursor))
3101 return;
3103 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_enc_pld_ind, -1, ENC_NA);
3105 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_enc_pld_ind);
3107 ptvcursor_add(cursor, hf_homeplug_av_nw_info_peks, 1, ENC_BIG_ENDIAN);
3108 ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_avlns, 1, ENC_BIG_ENDIAN);
3109 pid = tvb_get_uint8(ptvcursor_tvbuff(cursor),
3110 ptvcursor_current_offset(cursor));
3111 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN);
3112 ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN);
3113 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pmn, 1, ENC_BIG_ENDIAN);
3114 if (pid == HOMEPLUG_AV_PID_HLE) {
3115 ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_iv, 16, ENC_NA);
3116 } else {
3117 ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_uuid, 16, ENC_LITTLE_ENDIAN);
3119 ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_len, 2, ENC_LITTLE_ENDIAN);
3121 /* Encrypted payload follows */
3122 if (pid != HOMEPLUG_AV_PID_HLE) {
3123 ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_pld, -1, ENC_NA);
3126 ptvcursor_pop_subtree(cursor);
3129 static void
3130 dissect_homeplug_av_cm_enc_pld_rsp(ptvcursor_t *cursor)
3132 proto_item *it;
3134 if (!ptvcursor_tree(cursor))
3135 return;
3137 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_enc_pld_rsp, -1, ENC_NA);
3139 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_enc_pld_rsp);
3141 ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_rsp_result, 1, ENC_BIG_ENDIAN);
3142 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN);
3143 ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN);
3145 ptvcursor_pop_subtree(cursor);
3148 static void
3149 dissect_homeplug_av_cm_set_key_req(ptvcursor_t *cursor)
3151 proto_item *it;
3153 if (!ptvcursor_tree(cursor))
3154 return;
3156 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_set_key_req, -1, ENC_NA);
3158 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_set_key_req);
3160 ptvcursor_add(cursor, hf_homeplug_av_nw_info_key_type, 1, ENC_BIG_ENDIAN);
3161 ptvcursor_add(cursor, hf_homeplug_av_nw_info_my_nonce, 4, ENC_LITTLE_ENDIAN);
3162 ptvcursor_add(cursor, hf_homeplug_av_nw_info_your_nonce, 4, ENC_LITTLE_ENDIAN);
3163 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN);
3164 ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN);
3165 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pmn, 1, ENC_BIG_ENDIAN);
3166 ptvcursor_add(cursor, hf_homeplug_av_nw_info_cco_cap, 1, ENC_BIG_ENDIAN);
3167 ptvcursor_add(cursor, hf_homeplug_av_nw_info_nid, 7, ENC_NA);
3168 ptvcursor_add(cursor, hf_homeplug_av_nw_info_peks, 1, ENC_BIG_ENDIAN);
3169 ptvcursor_add(cursor, hf_homeplug_av_cm_set_key_req_nw_key, 16, ENC_NA);
3171 ptvcursor_pop_subtree(cursor);
3174 static void
3175 dissect_homeplug_av_cm_set_key_cnf(ptvcursor_t *cursor)
3177 proto_item *it;
3179 if (!ptvcursor_tree(cursor))
3180 return;
3182 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_set_key_cnf, -1, ENC_NA);
3184 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_set_key_cnf);
3186 ptvcursor_add(cursor, hf_homeplug_av_cm_set_key_cnf_result, 1, ENC_BIG_ENDIAN);
3187 ptvcursor_add(cursor, hf_homeplug_av_nw_info_my_nonce, 4, ENC_LITTLE_ENDIAN);
3188 ptvcursor_add(cursor, hf_homeplug_av_nw_info_your_nonce, 4, ENC_LITTLE_ENDIAN);
3189 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN);
3190 ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN);
3191 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pmn, 1, ENC_BIG_ENDIAN);
3192 ptvcursor_add(cursor, hf_homeplug_av_nw_info_cco_cap, 1, ENC_BIG_ENDIAN);
3194 ptvcursor_pop_subtree(cursor);
3197 static void
3198 dissect_homeplug_av_cm_get_key_req(ptvcursor_t *cursor)
3200 proto_item *it;
3201 uint8_t key_type;
3203 if (!ptvcursor_tree(cursor))
3204 return;
3206 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_get_key_req, -1, ENC_NA);
3208 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_get_key_req);
3211 ptvcursor_add(cursor, hf_homeplug_av_cm_get_key_req_type, 1, ENC_BIG_ENDIAN);
3212 key_type = tvb_get_uint8(ptvcursor_tvbuff(cursor),
3213 ptvcursor_current_offset(cursor));
3214 ptvcursor_add(cursor, hf_homeplug_av_nw_info_key_type, 1, ENC_BIG_ENDIAN);
3215 ptvcursor_add(cursor, hf_homeplug_av_nw_info_nid, 7, ENC_NA);
3216 ptvcursor_add(cursor, hf_homeplug_av_nw_info_my_nonce, 4, ENC_LITTLE_ENDIAN);
3217 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN);
3218 ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN);
3219 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pmn, 1, ENC_BIG_ENDIAN);
3220 if (key_type == HOMEPLUG_AV_KEY_TYPE_HASH) {
3221 ptvcursor_add(cursor, hf_homeplug_av_cm_get_key_req_has_key, -1, ENC_NA);
3224 ptvcursor_pop_subtree(cursor);
3227 static void
3228 dissect_homeplug_av_cm_get_key_cnf(ptvcursor_t *cursor)
3230 proto_item *it;
3232 if (!ptvcursor_tree(cursor))
3233 return;
3235 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_get_key_cnf, -1, ENC_NA);
3237 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_get_key_cnf);
3239 ptvcursor_add(cursor, hf_homeplug_av_cm_get_key_cnf_result, 1, ENC_BIG_ENDIAN);
3240 ptvcursor_add(cursor, hf_homeplug_av_cm_get_key_cnf_rtype, 1, ENC_BIG_ENDIAN);
3241 ptvcursor_add(cursor, hf_homeplug_av_nw_info_my_nonce, 4, ENC_LITTLE_ENDIAN);
3242 ptvcursor_add(cursor, hf_homeplug_av_nw_info_your_nonce, 4, ENC_LITTLE_ENDIAN);
3243 ptvcursor_add(cursor, hf_homeplug_av_nw_info_nid, 7, ENC_NA);
3244 ptvcursor_add(cursor, hf_homeplug_av_nw_info_peks, 1, ENC_BIG_ENDIAN);
3245 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN);
3246 ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN);
3247 ptvcursor_add(cursor, hf_homeplug_av_nw_info_pmn, 1, ENC_BIG_ENDIAN);
3248 ptvcursor_add(cursor, hf_homeplug_av_cm_get_key_cnf_key, -1, ENC_NA);
3250 ptvcursor_pop_subtree(cursor);
3253 static void
3254 dissect_homeplug_av_get_brg_infos_cnf(ptvcursor_t *cursor)
3256 proto_item *it;
3257 uint8_t bridging;
3258 uint8_t num_stas;
3259 uint8_t sta;
3261 if (!ptvcursor_tree(cursor))
3262 return;
3264 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_brg_infos_cnf, -1, ENC_NA);
3266 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_brg_infos_cnf);
3268 bridging = tvb_get_uint8(ptvcursor_tvbuff(cursor),
3269 ptvcursor_current_offset(cursor));
3270 ptvcursor_add(cursor, hf_homeplug_av_brg_infos_cnf_brd, 1, ENC_BIG_ENDIAN);
3272 if (bridging) {
3273 ptvcursor_add(cursor, hf_homeplug_av_brg_infos_cnf_btei, 1, ENC_BIG_ENDIAN);
3275 num_stas = tvb_get_uint8(ptvcursor_tvbuff(cursor),
3276 ptvcursor_current_offset(cursor));
3277 ptvcursor_add(cursor, hf_homeplug_av_brg_infos_cnf_num_stas, 1, ENC_BIG_ENDIAN);
3279 for (sta = 0; sta < num_stas; sta++) {
3280 ptvcursor_add(cursor, hf_homeplug_av_brg_infos_cnf_mac, 6, ENC_NA);
3284 ptvcursor_pop_subtree(cursor);
3287 static void
3288 dissect_homeplug_av_nw_infos_cnf(ptvcursor_t *cursor)
3290 proto_item *it;
3291 uint8_t num_avlns;
3292 uint8_t net;
3294 if (!ptvcursor_tree(cursor))
3295 return;
3297 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_nw_infos_cnf, -1, ENC_NA);
3299 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_nw_infos_cnf);
3301 num_avlns = tvb_get_uint8(ptvcursor_tvbuff(cursor),
3302 ptvcursor_current_offset(cursor));
3303 ptvcursor_add(cursor, hf_homeplug_av_nw_info_num_avlns, 1, ENC_BIG_ENDIAN);
3305 for (net = 0; net < num_avlns; net++) {
3306 /* Force HomePlug AV 1.0 layout here */
3307 dissect_homeplug_av_nw_info_net(cursor, false, 0);
3310 ptvcursor_pop_subtree(cursor);
3313 static void
3314 dissect_homeplug_av_nw_stats_cnf(ptvcursor_t *cursor)
3316 proto_item *it;
3317 uint8_t num_stas;
3318 uint8_t sta;
3320 if (!ptvcursor_tree(cursor))
3321 return;
3323 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_stats_cnf, -1, ENC_NA);
3325 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_nw_stats_cnf);
3327 num_stas = tvb_get_uint8(ptvcursor_tvbuff(cursor),
3328 ptvcursor_current_offset(cursor));
3329 ptvcursor_add(cursor, hf_homeplug_av_nw_info_num_stas, 1, ENC_BIG_ENDIAN);
3331 for (sta = 0; sta < num_stas; sta++) {
3332 /* Force HomePlug AV 1.0 layout here */
3333 dissect_homeplug_av_nw_info_sta(cursor, false, 0);
3336 ptvcursor_pop_subtree(cursor);
3339 /* Intellon - Qualcomm specific MME Types */
3340 static void
3341 dissect_homeplug_av_get_sw_cnf(ptvcursor_t *cursor)
3343 proto_item *it;
3345 if (!ptvcursor_tree(cursor))
3346 return;
3348 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_get_sw_cnf, -1, ENC_NA);
3350 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_get_sw_cnf);
3352 ptvcursor_add(cursor, hf_homeplug_av_get_sw_cnf_status, 1, ENC_BIG_ENDIAN);
3353 ptvcursor_add(cursor, hf_homeplug_av_get_sw_cnf_dev_id, 1, ENC_BIG_ENDIAN);
3354 ptvcursor_add(cursor, hf_homeplug_av_get_sw_cnf_ver_len, 1, ENC_BIG_ENDIAN);
3355 ptvcursor_add(cursor, hf_homeplug_av_get_sw_cnf_ver_str, 64, ENC_ASCII);
3356 ptvcursor_add(cursor, hf_homeplug_av_get_sw_cnf_upg, 1, ENC_BIG_ENDIAN);
3358 ptvcursor_pop_subtree(cursor);
3361 static void
3362 dissect_homeplug_av_wr_mem_req(ptvcursor_t *cursor)
3364 proto_item *it;
3366 if (!ptvcursor_tree(cursor))
3367 return;
3369 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wr_mem_req, -1, ENC_NA);
3371 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wr_mem_req);
3373 ptvcursor_add(cursor, hf_homeplug_av_mem_addr, 4, ENC_LITTLE_ENDIAN);
3374 ptvcursor_add(cursor, hf_homeplug_av_mem_len_32bits, 4, ENC_LITTLE_ENDIAN);
3375 ptvcursor_add_no_advance(cursor, hf_homeplug_av_mem_data, -1, ENC_NA);
3377 ptvcursor_pop_subtree(cursor);
3380 static void
3381 dissect_homeplug_av_wr_mem_cnf(ptvcursor_t *cursor)
3383 proto_item *it;
3385 if (!ptvcursor_tree(cursor))
3386 return;
3388 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wr_mem_cnf, -1, ENC_NA);
3390 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wr_mem_cnf);
3392 ptvcursor_add(cursor, hf_homeplug_av_mem_status, 1, ENC_BIG_ENDIAN);
3393 ptvcursor_add(cursor, hf_homeplug_av_mem_addr, 4, ENC_LITTLE_ENDIAN);
3394 ptvcursor_add(cursor, hf_homeplug_av_mem_len_32bits, 4, ENC_LITTLE_ENDIAN);
3396 ptvcursor_pop_subtree(cursor);
3399 static void
3400 dissect_homeplug_av_rd_mem_req(ptvcursor_t *cursor)
3402 proto_item *it;
3404 if (!ptvcursor_tree(cursor))
3405 return;
3407 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rd_mem_req, -1, ENC_NA);
3409 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rd_mem_req);
3411 ptvcursor_add(cursor, hf_homeplug_av_mem_addr, 4, ENC_LITTLE_ENDIAN);
3412 ptvcursor_add(cursor, hf_homeplug_av_mem_len_32bits, 4, ENC_LITTLE_ENDIAN);
3414 ptvcursor_pop_subtree(cursor);
3417 static void
3418 dissect_homeplug_av_rd_mem_cnf(ptvcursor_t *cursor)
3420 proto_item *it;
3422 if (!ptvcursor_tree(cursor))
3423 return;
3425 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rd_mem_cnf, -1, ENC_NA);
3427 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rd_mem_cnf);
3429 ptvcursor_add(cursor, hf_homeplug_av_mem_status, 1, ENC_BIG_ENDIAN);
3430 ptvcursor_add(cursor, hf_homeplug_av_mem_addr, 4, ENC_LITTLE_ENDIAN);
3431 ptvcursor_add(cursor, hf_homeplug_av_mem_len_32bits, 4, ENC_LITTLE_ENDIAN);
3432 ptvcursor_add_no_advance(cursor, hf_homeplug_av_mem_data, -1, ENC_NA);
3434 ptvcursor_pop_subtree(cursor);
3437 static void
3438 dissect_homeplug_av_st_mac_req(ptvcursor_t *cursor)
3440 proto_item *it;
3442 if (!ptvcursor_tree(cursor))
3443 return;
3445 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_st_mac_req, -1, ENC_NA);
3447 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_st_mac_req);
3449 ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
3450 ptvcursor_add(cursor, hf_homeplug_av_reserved, 3, ENC_NA);
3451 ptvcursor_add(cursor, hf_homeplug_av_st_mac_req_img_load, 4, ENC_LITTLE_ENDIAN);
3452 ptvcursor_add(cursor, hf_homeplug_av_st_mac_req_img_len, 4, ENC_LITTLE_ENDIAN);
3453 ptvcursor_add(cursor, hf_homeplug_av_st_mac_req_img_chksum, 4, ENC_LITTLE_ENDIAN);
3454 ptvcursor_add(cursor, hf_homeplug_av_st_mac_req_img_start, 4, ENC_LITTLE_ENDIAN);
3456 ptvcursor_pop_subtree(cursor);
3460 static void
3461 dissect_homeplug_av_st_mac_cnf(ptvcursor_t *cursor)
3463 proto_item *it;
3465 if (!ptvcursor_tree(cursor))
3466 return;
3468 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_st_mac_cnf, -1, ENC_NA);
3470 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_st_mac_cnf);
3472 ptvcursor_add(cursor, hf_homeplug_av_st_mac_cnf_status, 1, ENC_BIG_ENDIAN);
3473 ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
3475 ptvcursor_pop_subtree(cursor);
3478 static void
3479 dissect_homeplug_av_get_nvm_cnf(ptvcursor_t *cursor)
3481 proto_item *it;
3483 if (!ptvcursor_tree(cursor))
3484 return;
3486 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_get_nvm_cnf, -1, ENC_NA);
3488 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_get_nvm_cnf);
3490 ptvcursor_add(cursor, hf_homeplug_av_get_nvm_cnf_status, 1, ENC_BIG_ENDIAN);
3491 ptvcursor_add(cursor, hf_homeplug_av_get_nvm_cnf_nvm_type, 4, ENC_LITTLE_ENDIAN);
3492 ptvcursor_add(cursor, hf_homeplug_av_get_nvm_cnf_nvm_page, 4, ENC_LITTLE_ENDIAN);
3493 ptvcursor_add(cursor, hf_homeplug_av_get_nvm_cnf_nvm_block, 4, ENC_LITTLE_ENDIAN);
3494 ptvcursor_add(cursor, hf_homeplug_av_get_nvm_cnf_nvm_size, 4, ENC_LITTLE_ENDIAN);
3496 ptvcursor_pop_subtree(cursor);
3499 static void
3500 dissect_homeplug_av_rs_dev_cnf(ptvcursor_t *cursor)
3502 proto_item *it;
3504 if (!ptvcursor_tree(cursor))
3505 return;
3507 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rs_dev_cnf, -1, ENC_NA);
3509 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rs_dev_cnf);
3511 ptvcursor_add(cursor, hf_homeplug_av_rs_dev_cnf_status, 1, ENC_BIG_ENDIAN);
3513 ptvcursor_pop_subtree(cursor);
3516 static void dissect_homeplug_av_wr_mod_req(ptvcursor_t *cursor)
3518 proto_item *it;
3520 if (!ptvcursor_tree(cursor))
3521 return;
3523 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wr_mod_req, -1, ENC_NA);
3525 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wr_mod_req);
3527 ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
3528 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
3529 ptvcursor_add(cursor, hf_homeplug_av_mem_len_16bits, 2, ENC_LITTLE_ENDIAN);
3530 ptvcursor_add(cursor, hf_homeplug_av_mem_offset, 4, ENC_LITTLE_ENDIAN);
3531 ptvcursor_add(cursor, hf_homeplug_av_mem_checksum, 4, ENC_LITTLE_ENDIAN);
3532 ptvcursor_add_no_advance(cursor, hf_homeplug_av_mem_data, -1, ENC_NA);
3534 ptvcursor_pop_subtree(cursor);
3537 static void dissect_homeplug_av_wr_mod_cnf(ptvcursor_t *cursor)
3539 proto_item *it;
3541 if (!ptvcursor_tree(cursor))
3542 return;
3544 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wr_mod_cnf, -1, ENC_NA);
3546 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wr_mod_cnf);
3548 ptvcursor_add(cursor, hf_homeplug_av_wr_mod_cnf_status, 1, ENC_BIG_ENDIAN);
3549 ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
3550 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
3551 ptvcursor_add(cursor, hf_homeplug_av_mem_len_16bits, 2, ENC_LITTLE_ENDIAN);
3552 ptvcursor_add(cursor, hf_homeplug_av_mem_offset, 4, ENC_LITTLE_ENDIAN);
3554 ptvcursor_pop_subtree(cursor);
3557 static void dissect_homeplug_av_wr_mod_ind(ptvcursor_t *cursor)
3559 proto_item *it;
3561 if (!ptvcursor_tree(cursor))
3562 return;
3564 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wr_mod_ind, -1, ENC_NA);
3566 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wr_mod_ind);
3568 ptvcursor_add(cursor, hf_homeplug_av_wr_mod_ind_status, 1, ENC_BIG_ENDIAN);
3569 ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
3571 ptvcursor_pop_subtree(cursor);
3574 static void
3575 dissect_homeplug_av_rd_mod_req(ptvcursor_t *cursor)
3577 proto_item *it;
3579 if (!ptvcursor_tree(cursor))
3580 return;
3582 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rd_mod_req, -1, ENC_NA);
3584 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rd_mod_req);
3586 ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
3587 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
3588 ptvcursor_add(cursor, hf_homeplug_av_mem_len_16bits, 2, ENC_LITTLE_ENDIAN);
3589 ptvcursor_add(cursor, hf_homeplug_av_mem_offset, 4, ENC_LITTLE_ENDIAN);
3591 ptvcursor_pop_subtree(cursor);
3594 static void
3595 dissect_homeplug_av_rd_mod_cnf(ptvcursor_t *cursor)
3597 proto_item *it;
3599 if (!ptvcursor_tree(cursor))
3600 return;
3602 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rd_mod_cnf, -1, ENC_NA);
3604 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rd_mod_cnf);
3606 ptvcursor_add(cursor, hf_homeplug_av_rd_mod_cnf_status, 1, ENC_BIG_ENDIAN);
3607 ptvcursor_add(cursor, hf_homeplug_av_reserved, 3, ENC_NA);
3608 ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
3609 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
3610 ptvcursor_add(cursor, hf_homeplug_av_mem_len_16bits, 2, ENC_LITTLE_ENDIAN);
3611 ptvcursor_add(cursor, hf_homeplug_av_mem_offset, 4, ENC_LITTLE_ENDIAN);
3612 ptvcursor_add(cursor, hf_homeplug_av_mem_checksum, 4, ENC_LITTLE_ENDIAN);
3613 ptvcursor_add_no_advance(cursor, hf_homeplug_av_mem_data, -1, ENC_NA);
3615 ptvcursor_pop_subtree(cursor);
3618 static void
3619 dissect_homeplug_av_mod_nvm_req(ptvcursor_t *cursor)
3621 proto_item *it;
3623 if (!ptvcursor_tree(cursor))
3624 return;
3626 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mod_nvm_req, -1, ENC_NA);
3628 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_mod_nvm_req);
3630 ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
3632 ptvcursor_pop_subtree(cursor);
3635 static void
3636 dissect_homeplug_av_mod_nvm_cnf(ptvcursor_t *cursor)
3638 proto_item *it;
3640 if (!ptvcursor_tree(cursor))
3641 return;
3643 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mod_nvm_cnf, -1, ENC_NA);
3645 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_mod_nvm_cnf);
3647 ptvcursor_add(cursor, hf_homeplug_av_mod_nvm_cnf_status, 1, ENC_BIG_ENDIAN);
3648 ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
3650 ptvcursor_pop_subtree(cursor);
3653 static void
3654 dissect_homeplug_av_wd_rpt_req(ptvcursor_t *cursor)
3656 proto_item *it;
3658 if (!ptvcursor_tree(cursor))
3659 return;
3661 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wd_rpt_req, -1, ENC_NA);
3663 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wd_rpt_req);
3665 ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_req_session_id, 2, ENC_LITTLE_ENDIAN);
3666 ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_req_clr, 1, ENC_BIG_ENDIAN);
3668 ptvcursor_pop_subtree(cursor);
3671 static void
3672 dissect_homeplug_av_wd_rpt_ind(ptvcursor_t *cursor)
3674 proto_item *it;
3676 if (!ptvcursor_tree(cursor))
3677 return;
3679 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wd_rpt_ind, -1, ENC_NA);
3681 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wd_rpt_ind);
3683 ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_status, 1, ENC_BIG_ENDIAN);
3684 ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_session_id, 2, ENC_LITTLE_ENDIAN);
3685 ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_num_parts, 1, ENC_BIG_ENDIAN);
3686 ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_curr_part, 1, ENC_BIG_ENDIAN);
3687 ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_rdata_len, 2, ENC_LITTLE_ENDIAN);
3688 ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_rdata_ofs, 1, ENC_BIG_ENDIAN);
3689 ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_rdata, -1, ENC_NA);
3691 ptvcursor_pop_subtree(cursor);
3694 static void
3695 dissect_homeplug_av_lnk_stats_req(ptvcursor_t *cursor)
3697 proto_item *it;
3699 if (!ptvcursor_tree(cursor))
3700 return;
3702 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_lnk_stats_req, -1, ENC_NA);
3704 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_lnk_stats_req);
3706 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_req_mcontrol, 1, ENC_BIG_ENDIAN);
3707 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_req_dir, 1, ENC_BIG_ENDIAN);
3708 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_req_lid, 1, ENC_BIG_ENDIAN);
3709 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_req_macaddr, 6, ENC_NA);
3711 ptvcursor_pop_subtree(cursor);
3714 static void
3715 dissect_homeplug_av_lnk_stats_tx(ptvcursor_t *cursor)
3717 proto_item *it;
3719 if (!ptvcursor_tree(cursor))
3720 return;
3722 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_lnk_stats_tx, -1, ENC_NA);
3724 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_lnk_stats_tx);
3726 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_tx_mpdu_ack, 8, ENC_LITTLE_ENDIAN);
3727 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_tx_mpdu_col, 8, ENC_LITTLE_ENDIAN);
3728 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_tx_mpdu_fai, 8, ENC_LITTLE_ENDIAN);
3729 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_tx_pbs_pass, 8, ENC_LITTLE_ENDIAN);
3730 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_tx_pbs_fail, 8, ENC_LITTLE_ENDIAN);
3732 ptvcursor_pop_subtree(cursor);
3735 static void
3736 dissect_homeplug_av_lnk_stats_rx_interval(ptvcursor_t *cursor)
3738 proto_item *it;
3740 if (!ptvcursor_tree(cursor))
3741 return;
3743 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rx_inv_stats, -1, ENC_NA);
3745 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_lnk_stats_rx_inv);
3747 ptvcursor_add(cursor, hf_homeplug_av_rx_inv_phy_rate, 1, ENC_BIG_ENDIAN);
3748 ptvcursor_add(cursor, hf_homeplug_av_rx_inv_pbs_pass, 8, ENC_LITTLE_ENDIAN);
3749 ptvcursor_add(cursor, hf_homeplug_av_rx_inv_pbs_fail, 8, ENC_LITTLE_ENDIAN);
3750 ptvcursor_add(cursor, hf_homeplug_av_rx_inv_tb_pass, 8, ENC_LITTLE_ENDIAN);
3751 ptvcursor_add(cursor, hf_homeplug_av_rx_inv_tb_fail, 8, ENC_LITTLE_ENDIAN);
3753 ptvcursor_pop_subtree(cursor);
3756 static void
3757 dissect_homeplug_av_lnk_stats_rx(ptvcursor_t *cursor)
3759 proto_item *it;
3760 uint8_t num_rx_interval;
3761 uint8_t interval;
3763 if (!ptvcursor_tree(cursor))
3764 return;
3766 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_lnk_stats_rx, -1, ENC_NA);
3768 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_lnk_stats_rx);
3770 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_mpdu_ack, 8, ENC_LITTLE_ENDIAN);
3771 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_mpdu_fai, 8, ENC_LITTLE_ENDIAN);
3772 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_pbs_pass, 8, ENC_LITTLE_ENDIAN);
3773 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_pbs_fail, 8, ENC_LITTLE_ENDIAN);
3774 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_tb_pass, 8, ENC_LITTLE_ENDIAN);
3775 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_tb_fail, 8, ENC_LITTLE_ENDIAN);
3776 num_rx_interval = tvb_get_uint8(ptvcursor_tvbuff(cursor),
3777 ptvcursor_current_offset(cursor));
3778 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_num_int, 1, ENC_BIG_ENDIAN);
3780 for (interval = 0; interval < num_rx_interval; interval++) {
3781 dissect_homeplug_av_lnk_stats_rx_interval(cursor);
3784 ptvcursor_pop_subtree(cursor);
3787 static void
3788 dissect_homeplug_av_lnk_stats_cnf(ptvcursor_t *cursor)
3790 proto_item *it;
3791 uint8_t status;
3792 uint8_t direction;
3794 if (!ptvcursor_tree(cursor))
3795 return;
3797 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_lnk_stats_cnf, -1, ENC_NA);
3799 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_lnk_stats_cnf);
3801 status = tvb_get_uint8(ptvcursor_tvbuff(cursor),
3802 ptvcursor_current_offset(cursor));
3803 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_cnf_status, 1, ENC_BIG_ENDIAN);
3805 direction = tvb_get_uint8(ptvcursor_tvbuff(cursor),
3806 ptvcursor_current_offset(cursor));
3807 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_cnf_dir, 1, ENC_BIG_ENDIAN);
3809 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_cnf_lid, 1, ENC_BIG_ENDIAN);
3810 ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_cnf_tei, 1, ENC_BIG_ENDIAN);
3812 ptvcursor_add_no_advance(cursor, hf_homeplug_av_lnk_stats_cnf_lstats, -1, ENC_NA);
3814 if (status == HOMEPLUG_AV_LNK_STATS_STATUS_SUCCESS)
3816 switch (direction) {
3817 case HOMEPLUG_AV_LNK_STATS_DIR_TX:
3818 dissect_homeplug_av_lnk_stats_tx(cursor);
3819 break;
3820 case HOMEPLUG_AV_LNK_STATS_DIR_RX:
3821 dissect_homeplug_av_lnk_stats_rx(cursor);
3822 break;
3823 case HOMEPLUG_AV_LNK_STATS_DIR_TX_RX:
3824 dissect_homeplug_av_lnk_stats_tx(cursor);
3825 dissect_homeplug_av_lnk_stats_rx(cursor);
3826 break;
3830 ptvcursor_pop_subtree(cursor);
3833 static void
3834 dissect_homeplug_av_sniffer_req(ptvcursor_t *cursor)
3836 proto_item *it;
3838 if (!ptvcursor_tree(cursor))
3839 return;
3841 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sniffer_req, -1, ENC_NA);
3843 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_sniffer_req);
3845 ptvcursor_add(cursor, hf_homeplug_av_sniffer_req_ctrl, 1, ENC_BIG_ENDIAN);
3846 ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
3848 ptvcursor_pop_subtree(cursor);
3851 static void
3852 dissect_homeplug_av_sniffer_cnf(ptvcursor_t *cursor)
3854 proto_item *it;
3856 if (!ptvcursor_tree(cursor))
3857 return;
3859 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sniffer_cnf, -1, ENC_NA);
3861 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_sniffer_cnf);
3863 ptvcursor_add(cursor, hf_homeplug_av_sniffer_cnf_status, 1, ENC_BIG_ENDIAN);
3864 ptvcursor_add(cursor, hf_homeplug_av_sniffer_cnf_state, 1, ENC_BIG_ENDIAN);
3865 ptvcursor_add(cursor, hf_homeplug_av_sniffer_cnf_da, 6, ENC_NA);
3867 ptvcursor_pop_subtree(cursor);
3870 static void
3871 dissect_homeplug_av_sniffer_ind(ptvcursor_t *cursor)
3873 proto_item *it;
3874 proto_item *it_data;
3875 tvbuff_t *tvb;
3876 unsigned offset;
3878 uint8_t del_type;
3880 if (!ptvcursor_tree(cursor))
3881 return;
3883 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sniffer_ind, -1, ENC_NA);
3885 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_sniffer_ind);
3887 ptvcursor_add(cursor, hf_homeplug_av_sniffer_ind_type, 1, ENC_BIG_ENDIAN);
3889 it_data = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sniffer_ind_data, -1, ENC_NA);
3891 ptvcursor_push_subtree(cursor, it_data, ett_homeplug_av_sniffer_ind_data);
3893 ptvcursor_add(cursor, hf_homeplug_av_sniffer_data_dir, 1, ENC_BIG_ENDIAN);
3894 ptvcursor_add(cursor, hf_homeplug_av_sniffer_data_systime, 8, ENC_LITTLE_ENDIAN);
3895 ptvcursor_add(cursor, hf_homeplug_av_sniffer_data_bc_time, 4, ENC_LITTLE_ENDIAN);
3897 offset = ptvcursor_current_offset(cursor);
3898 tvb = ptvcursor_tvbuff(cursor);
3900 del_type = tvb_get_uint8(tvb, offset);
3902 /* bitmask - we only want 3 bits of del_type */
3903 uint8_t bitmask = 0x07;
3905 del_type &= bitmask;
3907 static int * const frame_control_fields[] = {
3908 &hf_homeplug_av_fc_del_type,
3909 &hf_homeplug_av_fc_access,
3910 &hf_homeplug_av_fc_snid,
3911 NULL
3914 proto_tree_add_bitmask(ptvcursor_tree(cursor), tvb, offset, hf_homeplug_av_fc,
3915 ett_homeplug_av_fc, frame_control_fields, ENC_BIG_ENDIAN);
3916 ptvcursor_advance(cursor, 1);
3918 switch (del_type)
3920 case HOMEPLUG_AV_DEL_TYPE_BCN:
3921 dissect_homeplug_av_beacon(cursor);
3922 break;
3923 case HOMEPLUG_AV_DEL_TYPE_SOF:
3924 dissect_homeplug_av_start_of_frame(cursor);
3925 break;
3926 case HOMEPLUG_AV_DEL_TYPE_SACK:
3927 dissect_homeplug_av_sack(cursor);
3928 break;
3929 case HOMEPLUG_AV_DEL_TYPE_RTS:
3930 dissect_homeplug_av_rtscts(cursor);
3931 break;
3932 case HOMEPLUG_AV_DEL_TYPE_SOUND:
3933 dissect_homeplug_av_sound(cursor);
3934 break;
3935 case HOMEPLUG_AV_DEL_TYPE_RSOF:
3936 dissect_homeplug_av_rsof(cursor);
3937 break;
3938 default:
3939 break;
3942 ptvcursor_pop_subtree(cursor);
3944 ptvcursor_pop_subtree(cursor);
3947 static void
3948 dissect_homeplug_av_nw_info_cnf(ptvcursor_t *cursor, uint8_t homeplug_av_mmver)
3950 proto_item *it;
3951 uint8_t num_avlns;
3952 uint8_t num_stas;
3953 uint8_t sta;
3955 if (!ptvcursor_tree(cursor))
3956 return;
3958 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_info_cnf, -1, ENC_NA);
3960 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_nw_info_cnf);
3962 if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
3963 ptvcursor_add(cursor, hf_homeplug_av_reserved, 5, ENC_NA);
3965 num_avlns = tvb_get_uint8(ptvcursor_tvbuff(cursor),
3966 ptvcursor_current_offset(cursor));
3967 ptvcursor_add(cursor, hf_homeplug_av_nw_info_num_avlns, 1, ENC_BIG_ENDIAN);
3969 if (num_avlns) {
3970 dissect_homeplug_av_nw_info_net(cursor, true, homeplug_av_mmver);
3971 num_stas = tvb_get_uint8(ptvcursor_tvbuff(cursor),
3972 ptvcursor_current_offset(cursor));
3973 ptvcursor_add(cursor, hf_homeplug_av_nw_info_num_stas, 1, ENC_BIG_ENDIAN);
3975 if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
3976 ptvcursor_add(cursor, hf_homeplug_av_reserved, 5, ENC_NA);
3978 for (sta = 0; sta < num_stas; sta++) {
3979 dissect_homeplug_av_nw_info_sta(cursor, true, homeplug_av_mmver);
3983 ptvcursor_pop_subtree(cursor);
3986 static void
3987 dissect_homeplug_av_cp_rpt_req(ptvcursor_t *cursor)
3989 proto_item *it;
3991 if (!ptvcursor_tree(cursor))
3992 return;
3994 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cp_rpt_req, -1, ENC_NA);
3996 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cp_rpt_req);
3998 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_req_session_id, 2, ENC_LITTLE_ENDIAN);
3999 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_req_clr, 1, ENC_BIG_ENDIAN);
4001 ptvcursor_pop_subtree(cursor);
4004 static void
4005 dissect_homeplug_av_cp_rpt_ind(ptvcursor_t *cursor)
4007 proto_item *it;
4009 if (!ptvcursor_tree(cursor))
4010 return;
4012 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cp_rpt_ind, -1, ENC_NA);
4014 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cp_rpt_ind);
4016 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_status, 1, ENC_LITTLE_ENDIAN);
4017 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_major_ver, 1, ENC_BIG_ENDIAN);
4018 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_minor_ver, 1, ENC_BIG_ENDIAN);
4019 ptvcursor_add(cursor, hf_homeplug_av_reserved, 14, ENC_NA);
4020 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_session_id, 2, ENC_LITTLE_ENDIAN);
4021 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_total_size, 4, ENC_LITTLE_ENDIAN);
4022 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_blk_offset, 4, ENC_LITTLE_ENDIAN);
4023 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_byte_index, 4, ENC_LITTLE_ENDIAN);
4024 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_num_parts, 1, ENC_BIG_ENDIAN);
4025 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_curr_part, 1, ENC_BIG_ENDIAN);
4026 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_data_len, 2, ENC_LITTLE_ENDIAN);
4027 ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_data_ofs, 1, ENC_LITTLE_ENDIAN);
4028 ptvcursor_add_no_advance(cursor, hf_homeplug_av_cp_rpt_ind_data, -1, ENC_NA);
4030 ptvcursor_pop_subtree(cursor);
4033 static void
4034 dissect_homeplug_av_fr_lbk_req(ptvcursor_t *cursor)
4036 proto_item *it;
4038 if (!ptvcursor_tree(cursor))
4039 return;
4041 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_fr_lbk_req, -1, ENC_NA);
4043 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_fr_lbk_req);
4045 ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_duration, 1, ENC_BIG_ENDIAN);
4046 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
4047 ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_len, 2, ENC_BIG_ENDIAN);
4048 ptvcursor_add_no_advance(cursor, hf_homeplug_av_fr_lbk_req_data, -1, ENC_NA);
4050 ptvcursor_pop_subtree(cursor);
4053 static void
4054 dissect_homeplug_av_fr_lbk_cnf(ptvcursor_t *cursor)
4056 proto_item *it;
4058 if (!ptvcursor_tree(cursor))
4059 return;
4061 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_fr_lbk_cnf, -1, ENC_NA);
4063 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_fr_lbk_cnf);
4065 ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_cnf_status, 1, ENC_BIG_ENDIAN);
4066 ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_duration, 1, ENC_BIG_ENDIAN);
4067 ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_len, 2, ENC_BIG_ENDIAN);
4069 ptvcursor_pop_subtree(cursor);
4072 static void
4073 dissect_homeplug_av_lbk_stat_cnf(ptvcursor_t *cursor)
4075 proto_item *it;
4077 if (!ptvcursor_tree(cursor))
4078 return;
4080 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_lbk_stat_cnf, -1, ENC_NA);
4082 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_lbk_stat_cnf);
4084 ptvcursor_add(cursor, hf_homeplug_av_lbk_stat_cnf_status, 1, ENC_BIG_ENDIAN);
4085 ptvcursor_add(cursor, hf_homeplug_av_lbk_stat_cnf_lbk_stat, 1, ENC_BIG_ENDIAN);
4087 ptvcursor_pop_subtree(cursor);
4090 static void
4091 dissect_homeplug_av_set_key_req(ptvcursor_t *cursor)
4093 proto_item *it;
4095 if (!ptvcursor_tree(cursor))
4096 return;
4098 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_set_key_req, -1, ENC_NA);
4100 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_set_key_req);
4102 ptvcursor_add(cursor, hf_homeplug_av_set_key_req_eks, 1, ENC_BIG_ENDIAN);
4103 ptvcursor_add(cursor, hf_homeplug_av_set_key_req_nmk, 16, ENC_NA);
4104 ptvcursor_add(cursor, hf_homeplug_av_nw_info_peks, 1, ENC_BIG_ENDIAN);
4105 ptvcursor_add(cursor, hf_homeplug_av_set_key_req_rda, 6, ENC_NA);
4106 ptvcursor_add(cursor, hf_homeplug_av_set_key_req_dak, 16, ENC_NA);
4108 ptvcursor_pop_subtree(cursor);
4111 static void
4112 dissect_homeplug_av_set_key_cnf(ptvcursor_t *cursor)
4114 proto_item *it;
4116 if (!ptvcursor_tree(cursor))
4117 return;
4119 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_set_key_cnf, -1, ENC_NA);
4121 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_set_key_cnf);
4123 ptvcursor_add(cursor, hf_homeplug_av_set_key_cnf_status, 1, ENC_BIG_ENDIAN);
4125 ptvcursor_pop_subtree(cursor);
4128 static void
4129 dissect_homeplug_av_mfg_string_cnf(ptvcursor_t *cursor)
4131 proto_item *it;
4133 if (!ptvcursor_tree(cursor))
4134 return;
4136 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mfg_string_cnf, -1, ENC_NA);
4138 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_mfg_string_cnf);
4140 ptvcursor_add(cursor, hf_homeplug_av_mfg_string_cnf_status, 1, ENC_BIG_ENDIAN);
4141 ptvcursor_add(cursor, hf_homeplug_av_mfg_string_cnf_len, 1, ENC_BIG_ENDIAN);
4142 ptvcursor_add(cursor, hf_homeplug_av_mfg_string_cnf_string, 64, ENC_ASCII);
4144 ptvcursor_pop_subtree(cursor);
4147 static void
4148 dissect_homeplug_av_cblock_hdr(ptvcursor_t *cursor)
4150 proto_item *it;
4152 if (!ptvcursor_tree(cursor))
4153 return;
4155 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cblock_hdr, -1, ENC_NA);
4157 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cblock_hdr);
4159 ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_ver, 4, ENC_LITTLE_ENDIAN);
4160 ptvcursor_add(cursor, hf_homeplug_av_cblock_img_rom_addr, 4, ENC_LITTLE_ENDIAN);
4161 ptvcursor_add(cursor, hf_homeplug_av_cblock_img_addr, 4, ENC_LITTLE_ENDIAN);
4162 ptvcursor_add(cursor, hf_homeplug_av_cblock_img_len, 4, ENC_LITTLE_ENDIAN);
4163 ptvcursor_add(cursor, hf_homeplug_av_cblock_img_chksum, 4, ENC_LITTLE_ENDIAN);
4164 ptvcursor_add(cursor, hf_homeplug_av_cblock_entry_point, 4, ENC_LITTLE_ENDIAN);
4165 ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_minor, 1, ENC_NA);
4166 ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_img_type, 1, ENC_NA);
4167 ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_ignore_mask, 2, ENC_LITTLE_ENDIAN);
4168 ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_module_id, 4, ENC_LITTLE_ENDIAN);
4169 ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_module_subid, 4, ENC_LITTLE_ENDIAN);
4170 ptvcursor_add(cursor, hf_homeplug_av_cblock_next_hdr, 4, ENC_LITTLE_ENDIAN);
4171 ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_chksum, 4, ENC_LITTLE_ENDIAN);
4173 ptvcursor_pop_subtree(cursor);
4176 static void
4177 dissect_homeplug_av_cblock(ptvcursor_t *cursor)
4179 proto_item *it;
4181 if (!ptvcursor_tree(cursor))
4182 return;
4184 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cblock, -1, ENC_NA);
4186 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cblock);
4188 ptvcursor_add(cursor, hf_homeplug_av_cblock_sdram_size, 4, ENC_LITTLE_ENDIAN);
4189 ptvcursor_add(cursor, hf_homeplug_av_cblock_sdram_conf, 4, ENC_LITTLE_ENDIAN);
4190 ptvcursor_add(cursor, hf_homeplug_av_cblock_sdram_tim0, 4, ENC_LITTLE_ENDIAN);
4191 ptvcursor_add(cursor, hf_homeplug_av_cblock_sdram_tim1, 4, ENC_LITTLE_ENDIAN);
4192 ptvcursor_add(cursor, hf_homeplug_av_cblock_sdram_cntrl, 4, ENC_LITTLE_ENDIAN);
4193 ptvcursor_add(cursor, hf_homeplug_av_cblock_sdram_refresh, 4, ENC_LITTLE_ENDIAN);
4194 ptvcursor_add(cursor, hf_homeplug_av_cblock_mac_clock, 4, ENC_LITTLE_ENDIAN);
4195 ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
4197 ptvcursor_pop_subtree(cursor);
4200 static void
4201 dissect_homeplug_av_rd_cblock_cnf(ptvcursor_t *cursor)
4203 proto_item *it;
4205 if (!ptvcursor_tree(cursor))
4206 return;
4208 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rd_cblock_cnf, -1, ENC_NA);
4210 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rd_cblock_cnf);
4212 ptvcursor_add(cursor, hf_homeplug_av_rd_cblock_cnf_status, 1, ENC_BIG_ENDIAN);
4213 ptvcursor_add(cursor, hf_homeplug_av_rd_cblock_cnf_len, 1, ENC_BIG_ENDIAN);
4214 dissect_homeplug_av_cblock_hdr(cursor);
4215 dissect_homeplug_av_cblock(cursor);
4217 ptvcursor_pop_subtree(cursor);
4220 static void
4221 dissect_homeplug_av_set_sdram_req(ptvcursor_t *cursor)
4223 proto_item *it;
4225 if (!ptvcursor_tree(cursor))
4226 return;
4228 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_set_sdram_req, -1, ENC_NA);
4230 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_set_sdram_req);
4232 dissect_homeplug_av_cblock(cursor);
4233 ptvcursor_add(cursor, hf_homeplug_av_set_sdram_req_chksum, 4, ENC_LITTLE_ENDIAN);
4235 ptvcursor_pop_subtree(cursor);
4238 static void
4239 dissect_homeplug_av_set_sdram_cnf(ptvcursor_t *cursor)
4241 proto_item *it;
4243 if (!ptvcursor_tree(cursor))
4244 return;
4246 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_set_sdram_cnf, -1, ENC_NA);
4248 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_set_sdram_cnf);
4250 ptvcursor_add(cursor, hf_homeplug_av_set_sdram_cnf_status, 1, ENC_BIG_ENDIAN);
4252 ptvcursor_pop_subtree(cursor);
4255 static void
4256 dissect_homeplug_av_host_action_ind(ptvcursor_t *cursor)
4258 proto_item *it;
4260 if (!ptvcursor_tree(cursor))
4261 return;
4263 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_host_action_ind, -1, ENC_NA);
4265 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_host_action_ind);
4267 ptvcursor_add(cursor, hf_homeplug_av_host_action_ind_act, 1, ENC_BIG_ENDIAN);
4269 ptvcursor_pop_subtree(cursor);
4272 static void
4273 dissect_homeplug_av_host_action_rsp(ptvcursor_t *cursor)
4275 proto_item *it;
4277 if (!ptvcursor_tree(cursor))
4278 return;
4280 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_host_action_rsp, -1, ENC_NA);
4282 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_host_action_rsp);
4284 ptvcursor_add(cursor, hf_homeplug_av_host_action_rsp_sts, 1, ENC_BIG_ENDIAN);
4286 ptvcursor_pop_subtree(cursor);
4289 static void
4290 dissect_homeplug_av_op_attr_req(ptvcursor_t *cursor)
4292 proto_item *it;
4294 if (!ptvcursor_tree(cursor))
4295 return;
4297 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_op_attr_req, -1, ENC_NA);
4299 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_op_attr_req);
4301 ptvcursor_add(cursor, hf_homeplug_av_op_attr_cookie, 4, ENC_LITTLE_ENDIAN);
4302 ptvcursor_add(cursor, hf_homeplug_av_op_attr_rep_type, 1, ENC_BIG_ENDIAN);
4304 ptvcursor_pop_subtree(cursor);
4307 static void
4308 dissect_homeplug_av_op_attr_bin_report(ptvcursor_t *cursor)
4310 proto_item *it;
4312 if (!ptvcursor_tree(cursor))
4313 return;
4315 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_op_attr_cnf_data, -1, ENC_NA);
4317 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_op_attr_data);
4319 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_hw, 16, ENC_ASCII);
4320 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw, 16, ENC_ASCII);
4321 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_major, 4, ENC_LITTLE_ENDIAN);
4322 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_minor, 4, ENC_LITTLE_ENDIAN);
4323 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_sub, 4, ENC_LITTLE_ENDIAN);
4324 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_num, 4, ENC_LITTLE_ENDIAN);
4325 ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
4326 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_date, 8, ENC_ASCII);
4327 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_rel, 12, ENC_ASCII);
4328 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_sdram_type, 1, ENC_NA);
4329 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
4330 ptvcursor_add_no_advance(cursor, hf_homeplug_av_op_attr_data_sw_linefreq, 1, ENC_NA);
4331 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_zerocross, 1, ENC_NA);
4332 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_sdram_size, 4, ENC_LITTLE_ENDIAN);
4333 ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_auth_mode, 1, ENC_NA);
4335 ptvcursor_pop_subtree(cursor);
4338 static void
4339 dissect_homeplug_av_op_attr_cnf(ptvcursor_t *cursor)
4341 proto_item *it;
4343 if (!ptvcursor_tree(cursor))
4344 return;
4346 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_op_attr_cnf, -1, ENC_NA);
4348 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_op_attr_cnf);
4350 ptvcursor_add(cursor, hf_homeplug_av_op_attr_cnf_status, 2, ENC_LITTLE_ENDIAN);
4351 ptvcursor_add(cursor, hf_homeplug_av_op_attr_cookie, 4, ENC_LITTLE_ENDIAN);
4352 ptvcursor_add(cursor, hf_homeplug_av_op_attr_rep_type, 1, ENC_BIG_ENDIAN);
4353 ptvcursor_add(cursor, hf_homeplug_av_op_attr_cnf_size, 2, ENC_LITTLE_ENDIAN);
4354 dissect_homeplug_av_op_attr_bin_report(cursor);
4356 ptvcursor_pop_subtree(cursor);
4359 static void
4360 dissect_homeplug_av_get_enet_phy_req(ptvcursor_t *cursor)
4362 proto_item *it;
4364 if (!ptvcursor_tree(cursor))
4365 return;
4367 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_enet_phy_req, -1, ENC_NA);
4369 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_enet_phy_req);
4371 ptvcursor_add(cursor, hf_homeplug_av_enet_phy_req_mcontrol, 1, ENC_BIG_ENDIAN);
4372 ptvcursor_add(cursor, hf_homeplug_av_enet_phy_req_addcaps, 1, ENC_BIG_ENDIAN);
4373 ptvcursor_add(cursor, hf_homeplug_av_reserved, 3, ENC_NA);
4375 ptvcursor_pop_subtree(cursor);
4378 static void
4379 dissect_homeplug_av_get_enet_phy_cnf(ptvcursor_t *cursor)
4381 proto_item *it;
4383 if (!ptvcursor_tree(cursor))
4384 return;
4386 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_enet_phy_cnf, -1, ENC_NA);
4388 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_enet_phy_cnf);
4390 ptvcursor_add(cursor, hf_homeplug_av_enet_phy_cnf_status, 1, ENC_BIG_ENDIAN);
4391 ptvcursor_add(cursor, hf_homeplug_av_enet_phy_cnf_speed, 1, ENC_BIG_ENDIAN);
4392 ptvcursor_add(cursor, hf_homeplug_av_enet_phy_cnf_duplex, 1, ENC_BIG_ENDIAN);
4394 ptvcursor_pop_subtree(cursor);
4397 static void
4398 dissect_homeplug_av_tone_map_tx_req(ptvcursor_t *cursor, uint8_t homeplug_av_mmver)
4400 proto_item *it;
4402 if (!ptvcursor_tree(cursor))
4403 return;
4405 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_tx_req, -1, ENC_NA);
4406 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_tone_map_tx_req);
4408 if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
4410 ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
4411 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_req_mac, 6, ENC_NA);
4412 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_req_slot, 1, ENC_BIG_ENDIAN);
4413 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_req_coupling, 1, ENC_LITTLE_ENDIAN);
4415 else
4417 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_req_mac, 6, ENC_NA);
4418 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_req_slot, 1, ENC_BIG_ENDIAN);
4421 ptvcursor_pop_subtree(cursor);
4424 static void
4425 dissect_homeplug_av_tone_map_rx_req(ptvcursor_t *cursor, uint8_t homeplug_av_mmver)
4427 proto_item *it;
4429 if (!ptvcursor_tree(cursor))
4430 return;
4432 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_rx_req, -1, ENC_NA);
4433 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_tone_map_rx_req);
4435 if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
4437 ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
4438 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_req_mac, 6, ENC_NA);
4439 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_req_slot, 1, ENC_BIG_ENDIAN);
4440 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_req_coupling, 1, ENC_LITTLE_ENDIAN);
4442 else
4444 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_req_mac, 6, ENC_NA);
4445 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_req_slot, 1, ENC_BIG_ENDIAN);
4448 ptvcursor_pop_subtree(cursor);
4451 static void
4452 dissect_homeplug_av_tone_map_carrier(ptvcursor_t *cursor, uint16_t num_carriers)
4454 proto_item *it, *ittm;
4455 uint8_t hilo, hi_bits, lo_bits, hi_snr, lo_snr;
4456 uint16_t num_carrier_bytes, cb, cid;
4457 uint16_t num_act_carriers=0, total_bits=0, total_snr=0;
4459 static const uint8_t map_carrier2modbits[] = { 0, 1, 2, 3, 4, 6, 8, 10, 12, 0, 0, 0, 0, 0, 0, 0 }; /* Carrier-Nibble to #Modulated-Bits Mapping */
4460 static const uint8_t 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 */
4462 if (!ptvcursor_tree(cursor))
4463 return;
4464 num_carrier_bytes = num_carriers / 2;
4466 /* check if number of carriers is odd */
4467 if (num_carriers & 1)
4468 num_carrier_bytes += 1;
4470 ittm = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_carriers, num_carrier_bytes, ENC_NA);
4471 ptvcursor_push_subtree(cursor, ittm, ett_homeplug_av_tone_map_carriers);
4473 for (cb = 0; cb < num_carrier_bytes; cb++)
4475 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_carrier, 1, ENC_NA);
4476 cid = cb*2;
4477 proto_item_append_text(it, " (Carrier #%d/#%d)", cid, cid+1 );
4479 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_tone_map_carrier);
4481 hilo = tvb_get_uint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4482 lo_bits = map_carrier2modbits[ (hilo & 0x0f) ];
4483 hi_bits = map_carrier2modbits[ (hilo & 0xf0) >> 4 ];
4484 if(lo_bits) num_act_carriers++;
4485 if(hi_bits) num_act_carriers++;
4486 lo_snr = map_carrier2modbitsSnr[ (hilo & 0x0f) ];
4487 hi_snr = map_carrier2modbitsSnr[ (hilo & 0xf0) >> 4 ];
4489 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_carrier_lo, 1, ENC_BIG_ENDIAN);
4490 proto_item_prepend_text(it, "Carrier #%d -> %u bits@SNR %udB: ", cid , lo_bits, lo_snr);
4491 it = ptvcursor_add(cursor, hf_homeplug_av_tone_map_carrier_hi, 1, ENC_BIG_ENDIAN);
4492 proto_item_prepend_text(it, "Carrier #%d -> %u bits@SNR %udB: ", cid+1, hi_bits, hi_snr );
4494 ptvcursor_pop_subtree(cursor);
4495 total_bits += (hi_bits+lo_bits);
4496 total_snr += (hi_snr+lo_snr);
4499 if (num_act_carriers)
4501 /* Append to TM-Subtree: total modulated bits, number of active carriers, Average #Bits/Carrier, Average SNR/Carrier */
4502 proto_item_append_text(ittm, " (Total #ModulatedBits=%d bit, Active #Carriers=%d, Average #Bits/Carrier=%.2f bit), Average SNR/Carrier=%.2f dB)",
4503 total_bits, num_act_carriers, (float) total_bits/num_act_carriers, (float) total_snr/num_act_carriers );
4505 ptvcursor_pop_subtree(cursor);
4508 static void
4509 dissect_homeplug_av_tone_map_tx_cnf(ptvcursor_t *cursor, uint8_t homeplug_av_mmver)
4511 proto_item *it;
4512 uint16_t num_act_carriers;
4514 if (!ptvcursor_tree(cursor))
4515 return;
4517 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_tx_cnf, -1, ENC_NA);
4518 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_tone_map_tx_cnf);
4520 if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
4522 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_status, 2, ENC_LITTLE_ENDIAN);
4523 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_len, 2, ENC_LITTLE_ENDIAN);
4524 ptvcursor_add(cursor, hf_homeplug_av_reserved, 2, ENC_NA);
4525 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_mac, 6, ENC_NA);
4526 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_slot, 2, ENC_LITTLE_ENDIAN);
4527 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_num_tms, 2, ENC_LITTLE_ENDIAN);
4529 num_act_carriers = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4530 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_num_act, 2, ENC_LITTLE_ENDIAN);
4531 ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
4533 if (num_act_carriers)
4535 dissect_homeplug_av_tone_map_carrier(cursor, num_act_carriers);
4538 else
4540 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_status, 1, ENC_LITTLE_ENDIAN);
4541 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_slot, 1, ENC_LITTLE_ENDIAN);
4542 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_num_tms, 1, ENC_LITTLE_ENDIAN);
4544 num_act_carriers = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4545 ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_num_act, 2, ENC_LITTLE_ENDIAN);
4547 if (num_act_carriers)
4549 dissect_homeplug_av_tone_map_carrier(cursor, num_act_carriers);
4553 ptvcursor_pop_subtree(cursor);
4556 static void
4557 dissect_homeplug_av_tone_map_rx_cnf(ptvcursor_t *cursor, uint8_t homeplug_av_mmver)
4559 proto_item *it;
4560 uint16_t num_act_carriers;
4562 if (!ptvcursor_tree(cursor))
4563 return;
4565 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_rx_cnf, -1, ENC_NA);
4566 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_tone_map_rx_cnf);
4568 if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
4570 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_status, 1, ENC_LITTLE_ENDIAN);
4571 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
4572 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_len, 2, ENC_LITTLE_ENDIAN);
4573 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_subver, 1, ENC_LITTLE_ENDIAN);
4574 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
4575 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_mac, 6, ENC_NA);
4576 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_slot, 1, ENC_LITTLE_ENDIAN);
4577 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_coupling, 1, ENC_LITTLE_ENDIAN);
4578 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_num_tms, 1, ENC_LITTLE_ENDIAN);
4579 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
4581 num_act_carriers = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4582 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_num_act, 2, ENC_LITTLE_ENDIAN);
4584 if (num_act_carriers)
4586 ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
4587 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_gil, 1, ENC_LITTLE_ENDIAN);
4588 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
4589 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_agc, 1, ENC_LITTLE_ENDIAN);
4590 ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
4592 dissect_homeplug_av_tone_map_carrier(cursor, num_act_carriers);
4595 else
4597 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_status, 1, ENC_LITTLE_ENDIAN);
4598 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_slot, 1, ENC_LITTLE_ENDIAN);
4599 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_num_tms, 1, ENC_LITTLE_ENDIAN);
4601 num_act_carriers = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4602 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_num_act, 2, ENC_LITTLE_ENDIAN);
4604 if (num_act_carriers)
4606 dissect_homeplug_av_tone_map_carrier(cursor, num_act_carriers);
4608 if (num_act_carriers > HOMEPLUG_AV_TONE_MAP_MAX_NUM_CARRIERS_A)
4609 ptvcursor_add(cursor, hf_homeplug_av_reserved, (HOMEPLUG_AV_TONE_MAP_MAX_NUM_CARRIERS_B-num_act_carriers) >>1 , ENC_NA);
4610 else
4611 ptvcursor_add(cursor, hf_homeplug_av_reserved, (HOMEPLUG_AV_TONE_MAP_MAX_NUM_CARRIERS_A-num_act_carriers) >>1 , ENC_NA);
4613 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_gil, 1, ENC_LITTLE_ENDIAN);
4614 ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_agc, 1, ENC_LITTLE_ENDIAN);
4618 ptvcursor_pop_subtree(cursor);
4622 static void
4623 dissect_homeplug_av_cc_assoc_req(ptvcursor_t *cursor) {
4625 if (!ptvcursor_tree(cursor))
4626 return;
4628 ptvcursor_add(cursor, hf_homeplug_av_cc_assoc_reqtype, 1, ENC_NA);
4629 ptvcursor_add(cursor, hf_homeplug_av_cc_assoc_nid, 7, ENC_NA);
4630 ptvcursor_add(cursor, hf_homeplug_av_cc_assoc_cco_cap, 1, ENC_NA);
4631 ptvcursor_add(cursor, hf_homeplug_av_cc_assoc_proxy_net_cap, 1, ENC_NA);
4634 static void
4635 dissect_homeplug_av_cc_assoc_cnf(ptvcursor_t *cursor) {
4637 if (!ptvcursor_tree(cursor))
4638 return;
4640 ptvcursor_add(cursor, hf_homeplug_av_cc_assoc_result, 1, ENC_NA);
4641 ptvcursor_add(cursor, hf_homeplug_av_cc_assoc_nid, 7, ENC_NA);
4642 ptvcursor_add(cursor, hf_homeplug_av_cc_assoc_snid, 1, ENC_NA);
4643 ptvcursor_add(cursor, hf_homeplug_av_cc_assoc_tei, 1, ENC_NA);
4644 ptvcursor_add(cursor, hf_homeplug_av_cc_assoc_lease_time, 2, ENC_LITTLE_ENDIAN);
4647 static void
4648 dissect_homeplug_av_cc_set_tei_map_ind(ptvcursor_t *cursor) {
4649 uint8_t numberOfSTA = 0;
4650 unsigned iter = 0;
4652 if (!ptvcursor_tree(cursor))
4653 return;
4655 ptvcursor_add(cursor, hf_homeplug_av_cc_set_tei_map_ind_mode, 1, ENC_NA);
4657 numberOfSTA = tvb_get_uint8( ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4658 ptvcursor_add(cursor, hf_homeplug_av_cc_set_tei_map_ind_num, 1, ENC_NA);
4660 for ( iter = 0; iter < numberOfSTA; ++iter ) {
4661 ptvcursor_add(cursor, hf_homeplug_av_cc_set_tei_map_ind_tei, 1, ENC_NA);
4662 ptvcursor_add(cursor, hf_homeplug_av_cc_set_tei_map_ind_mac, 6, ENC_NA);
4663 ptvcursor_add(cursor, hf_homeplug_av_cc_set_tei_map_ind_status, 1, ENC_NA);
4667 static void
4668 dissect_homeplug_av_cm_unassociated_sta_ind(ptvcursor_t *cursor) {
4670 if (!ptvcursor_tree(cursor))
4671 return;
4673 ptvcursor_add(cursor, hf_homeplug_av_cm_unassoc_sta_nid, 7, ENC_NA);
4674 ptvcursor_add(cursor, hf_homeplug_av_cm_unassoc_sta_cco_cap, 1, ENC_NA);
4677 /* HPAV/GP dissect functions */
4678 static void
4679 dissect_homeplug_av_gp_cm_slac_parm_req(ptvcursor_t *cursor) {
4681 uint8_t sectype,cipher_size;
4682 uint16_t Counter;
4684 if (!ptvcursor_tree(cursor))
4685 return;
4687 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_apptype, 1, ENC_NA);
4688 sectype = tvb_get_uint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4689 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_sectype, 1, ENC_NA);
4690 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_runid, 8, ENC_NA);
4691 if (sectype == HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY) {
4692 cipher_size = tvb_get_uint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4693 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_cipher_size, 1, ENC_NA);
4694 for (Counter = 0; Counter < cipher_size; ++Counter) {
4695 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_cipher, 2, ENC_LITTLE_ENDIAN);
4700 static void
4701 dissect_homeplug_av_gp_cm_slac_parm_cnf(ptvcursor_t *cursor) {
4703 uint8_t sectype;
4705 if (!ptvcursor_tree(cursor))
4706 return;
4708 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_sound_target, 6, ENC_NA);
4709 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_sound_count, 1, ENC_NA);
4710 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_time_out, 1, ENC_NA);
4711 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_resptype, 1, ENC_NA);
4712 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_forwarding_sta, 6, ENC_NA);
4713 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_apptype, 1, ENC_NA);
4714 sectype = tvb_get_uint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4715 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_sectype, 1, ENC_NA);
4716 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_runid, 8, ENC_NA);
4717 if (sectype == HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY) {
4718 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_cipher, 2, ENC_LITTLE_ENDIAN);
4722 static void
4723 dissect_homeplug_av_gp_cm_atten_profile_ind(ptvcursor_t *cursor) {
4725 uint8_t group_size;
4726 uint16_t Counter;
4728 if (!ptvcursor_tree(cursor))
4729 return;
4731 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_profile_ind_pev_mac, 6, ENC_NA);
4732 group_size = tvb_get_uint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4733 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_profile_ind_num_groups, 1, ENC_NA);
4734 /* Skip reserved */
4735 ptvcursor_advance(cursor, 1);
4736 for (Counter = 0; Counter < group_size; ++Counter) {
4737 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_profile_ind_aag, 1, ENC_NA);
4741 static void
4742 dissect_homeplug_av_gp_cm_atten_char_ind(ptvcursor_t *cursor, packet_info *pinfo) {
4744 uint8_t sectype, numgroups, val;
4745 uint16_t Counter_groups;
4746 proto_item *it;
4747 float avg;
4749 avg = 0.0f;
4751 if (!ptvcursor_tree(cursor)) {
4752 ptvcursor_advance(cursor, 1);
4753 sectype = tvb_get_uint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4754 ptvcursor_advance(cursor, 1);
4755 if (sectype != HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY) {
4756 ptvcursor_advance(cursor, 6+8+17+17+1);
4757 numgroups = tvb_get_uint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4758 ptvcursor_advance(cursor, 1);
4759 for (Counter_groups = 0; Counter_groups < numgroups; ++Counter_groups) {
4760 val = tvb_get_uint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4761 avg += val;
4762 ptvcursor_advance(cursor,1);
4764 avg /= numgroups;
4765 col_append_fstr(pinfo->cinfo, COL_INFO, " (Groups = %d, Avg. Attenuation = %.2f dB)", numgroups, avg);
4767 return;
4770 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_apptype, 1, ENC_NA);
4771 sectype = tvb_get_uint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
4773 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_sectype, 1, ENC_NA);
4775 if (sectype == HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY) {
4776 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_cms_data, -1, ENC_NA);
4777 } else {
4778 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_source_mac, 6, ENC_NA);
4779 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_runid, 8, ENC_NA);
4780 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_source_id, 17, ENC_NA);
4781 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_resp_id, 17, ENC_NA);
4783 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_numsounds, 1, ENC_NA);
4785 numgroups = tvb_get_uint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
4787 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_gp_cm_atten_char_profile, numgroups+1 , ENC_NA);
4789 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_gp_cm_atten_char_profile);
4791 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_numgroups, 1, ENC_NA);
4792 for (Counter_groups = 0; Counter_groups < numgroups; ++Counter_groups) {
4793 val = tvb_get_uint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
4794 proto_tree_add_uint_format( ptvcursor_tree(cursor),
4795 hf_homeplug_av_gp_cm_atten_char_aag,
4796 ptvcursor_tvbuff(cursor),
4797 ptvcursor_current_offset(cursor), 1, val,
4798 HOMEPLUG_AV_GP_CM_ATTEN_CHAR_AAG_FORMAT, Counter_groups + 1, val );
4799 ptvcursor_advance(cursor, 1);
4802 ptvcursor_pop_subtree(cursor);
4807 static void
4808 dissect_homeplug_av_gp_cm_atten_char_rsp(ptvcursor_t *cursor) {
4810 uint8_t sectype;
4812 if (!ptvcursor_tree(cursor))
4813 return;
4815 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_apptype, 1, ENC_NA);
4816 sectype = tvb_get_uint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
4818 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_sectype, 1, ENC_NA);
4820 if (sectype == HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY) {
4821 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_cms_data, -1, ENC_NA);
4822 } else {
4823 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_source_mac, 6, ENC_NA);
4824 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_runid, 8, ENC_NA);
4825 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_source_id, 17, ENC_NA);
4826 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_resp_id, 17, ENC_NA);
4827 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_result, 1, ENC_NA);
4831 static void
4832 dissect_homeplug_av_gp_cm_start_atten_char_ind(ptvcursor_t *cursor) {
4834 uint8_t sectype;
4836 if (!ptvcursor_tree(cursor))
4837 return;
4839 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_apptype, 1, ENC_NA);
4840 sectype = tvb_get_uint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
4842 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_sectype, 1, ENC_NA);
4844 if (sectype == HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY) {
4845 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_cms_data, -1, ENC_NA);
4846 } else {
4847 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_start_atten_char_numsounds, 1, ENC_NA);
4848 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_start_atten_char_time_out, 1, ENC_NA);
4849 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_start_atten_char_resptype, 1, ENC_NA);
4850 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_start_atten_char_forwarding_sta, 6, ENC_NA);
4851 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_start_atten_char_runid, 8, ENC_NA);
4855 static void
4856 dissect_homeplug_av_gp_cm_mnbc_sound_ind(ptvcursor_t *cursor) {
4858 uint8_t apptype,sectype;
4860 if (!ptvcursor_tree(cursor))
4861 return;
4863 apptype = tvb_get_uint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
4864 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_mnbc_sound_apptype, 1, ENC_NA);
4866 sectype = tvb_get_uint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
4867 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_mnbc_sound_sectype, 1, ENC_NA);
4869 if (sectype == HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY) {
4870 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_cms_data, -1, ENC_NA);
4871 } else {
4872 switch (apptype) {
4873 case HOMEPLUG_AV_GP_APPTYPE_PEV_EVSE_ASSOC:
4874 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_mnbc_sound_sender_id, 17, ENC_NA);
4875 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_mnbc_sound_countdown, 1, ENC_NA);
4876 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_mnbc_sound_runid, 8, ENC_NA);
4877 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_mnbc_sound_rsvd, 8, ENC_NA);
4878 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_mnbc_sound_rnd, 16, ENC_NA);
4879 break;
4884 static void
4885 dissect_homeplug_av_gp_cm_validate_req(ptvcursor_t *cursor) {
4887 uint8_t signaltype;
4889 if (!ptvcursor_tree(cursor))
4890 return;
4892 signaltype = tvb_get_uint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
4893 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_validate_signaltype, 1, ENC_NA);
4894 switch (signaltype) {
4895 case HOMEPLUG_AV_GP_SIGNAL_TYPE_PEV_S2_TOGGLES:
4896 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_validate_timer, 1, ENC_NA);
4897 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_validate_result, 1, ENC_NA);
4898 break;
4902 static void
4903 dissect_homeplug_av_gp_cm_validate_cnf(ptvcursor_t *cursor) {
4905 uint8_t signaltype;
4907 if (!ptvcursor_tree(cursor))
4908 return;
4910 signaltype = tvb_get_uint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
4911 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_validate_signaltype, 1, ENC_NA);
4912 switch (signaltype) {
4913 case HOMEPLUG_AV_GP_SIGNAL_TYPE_PEV_S2_TOGGLES:
4914 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_validate_togglenum, 1, ENC_NA);
4915 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_validate_result, 1, ENC_NA);
4916 break;
4920 static void
4921 dissect_homeplug_av_gp_cm_slac_match_req(ptvcursor_t *cursor) {
4923 /* uint8_t apptype;
4924 uint16_t length; */
4925 uint8_t sectype;
4927 if (!ptvcursor_tree(cursor))
4928 return;
4930 /* apptype = tvb_get_uint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor)); */
4931 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_apptype, 1, ENC_NA);
4933 sectype = tvb_get_uint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
4934 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_sectype, 1, ENC_NA);
4936 /* length = tvb_get_uint16(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor), ENC_LITTLE_ENDIAN); */
4937 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_length, 2, ENC_LITTLE_ENDIAN);
4939 if (sectype == HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY) {
4940 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_cms_data, -1, ENC_NA);
4941 } else {
4942 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_pev_id, 17, ENC_NA);
4943 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_pev_mac, 6, ENC_NA);
4944 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_evse_id, 17, ENC_NA);
4945 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_evse_mac, 6, ENC_NA);
4946 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_runid, 8, ENC_NA);
4947 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_rsvd, 8, ENC_NA);
4951 static void
4952 dissect_homeplug_av_gp_cm_slac_match_cnf(ptvcursor_t *cursor) {
4954 /* uint8_t apptype;
4955 uint16_t length; */
4956 uint8_t sectype;
4958 if (!ptvcursor_tree(cursor))
4959 return;
4961 //apptype = tvb_get_uint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
4962 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_apptype, 1, ENC_NA);
4964 sectype = tvb_get_uint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
4965 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_sectype, 1, ENC_NA);
4967 //length = tvb_get_uint16(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor), ENC_LITTLE_ENDIAN);
4968 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_length, 2, ENC_LITTLE_ENDIAN);
4970 if (sectype == HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY) {
4971 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_cms_data, -1, ENC_NA);
4972 } else {
4973 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_pev_id, 17, ENC_NA);
4974 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_pev_mac, 6, ENC_NA);
4975 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_evse_id, 17, ENC_NA);
4976 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_evse_mac, 6, ENC_NA);
4977 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_runid, 8, ENC_NA);
4978 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_rsvd, 8, ENC_NA);
4979 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_nid, 7, ENC_NA);
4980 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_rsvd,1, ENC_NA);
4981 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_nmk,16, ENC_NA);
4984 static void
4985 dissect_homeplug_av_gp_cm_slac_user_data(ptvcursor_t *cursor) {
4987 uint16_t Type, Length,TypeLen;
4988 proto_item *it;
4990 if (!ptvcursor_tree(cursor))
4991 return;
4993 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_user_data_broadcast_tlv_type, 3, ENC_LITTLE_ENDIAN);
4995 for (;;) {
4996 /* Get Length and Type from TLV Header */
4997 TypeLen = tvb_get_uint16(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor),ENC_LITTLE_ENDIAN);
4998 Length = TypeLen & HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_LENGTH_MASK;
4999 Type = TypeLen & HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_TYPE_MASK;
5000 /* If type and length is null_type - don't add anything and exit */
5001 if (TypeLen == 0)
5002 break;
5003 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_gp_cm_slac_user_data_tlv, HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_HEADER_SIZE, ENC_LITTLE_ENDIAN);
5004 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_gp_cm_slac_user_data_tlv);
5006 ptvcursor_add_no_advance(cursor, hf_homeplug_av_gp_cm_slac_user_data_tlv_type, HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_TYPE_MASK, ENC_LITTLE_ENDIAN);
5007 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_user_data_tlv_length, HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_LENGTH_MASK, ENC_LITTLE_ENDIAN);
5008 if (Type == HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_TYPE_VENDOR_RESERVED) {
5009 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_user_data_tlv_oui, 3, ENC_LITTLE_ENDIAN);
5010 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_user_data_tlv_subtype, 1, ENC_NA);
5011 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_user_data_tlv_info_str, Length - 3 - 1, ENC_NA);
5012 } else {
5013 ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_user_data_tlv_str_bytes, Length, ENC_NA);
5016 ptvcursor_pop_subtree(cursor);
5021 /* End of HPAV/GP dissect functions */
5023 /* ST/IoTecha dissect functions */
5025 /* General parts */
5026 static void
5027 dissect_homeplug_av_st_iotecha_header(ptvcursor_t *cursor) {
5029 proto_tree *tree;
5031 if (!ptvcursor_tree(cursor)) {
5032 ptvcursor_advance(cursor, 5);
5033 return;
5035 /* if we saved vendor subtree */
5036 if (ti_vendor) {
5037 /* Save current position */
5038 tree = ptvcursor_tree(cursor);
5039 /* Go back to vendor subtree */
5040 ptvcursor_set_subtree(cursor, ti_vendor, ett_homeplug_av_public);
5041 /* Add info */
5042 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_header_mmever, 1, ENC_NA);
5043 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_header_rsvd, 3, ENC_NA);
5044 /* Extending length of tree item */
5045 proto_tree_set_appendix(ti_vendor, ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor) - 4, 4);
5046 /* Now back to current position */
5047 ptvcursor_set_tree(cursor,tree);
5048 } else {
5049 /* else - just add fields as is */
5050 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_header_mmever, 1, ENC_NA);
5051 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_header_rsvd, 3, ENC_NA);
5053 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_header_mver, 1, ENC_NA);
5056 static void
5057 dissect_homeplug_av_st_iotecha_status_standard(ptvcursor_t *cursor) {
5059 if (!ptvcursor_tree(cursor))
5060 return;
5062 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_status_byte, 1, ENC_NA);
5065 /* Specific messages */
5067 static void
5068 dissect_homeplug_av_st_iotecha_stp_discover_tlv(ptvcursor_t *cursor) {
5070 uint16_t Type, Length,TypeLen;
5071 proto_item *it;
5073 if (!ptvcursor_tree(cursor))
5074 return;
5076 for (;;) {
5077 /* Get Length and Type from TLV Header */
5078 TypeLen = tvb_get_uint16(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor),ENC_LITTLE_ENDIAN);
5079 Length = TypeLen & HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_LENGTH_MASK;
5080 Type = TypeLen & HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_MASK;
5081 /* If type is null_type - don't add anything and exit */
5082 if (Type == HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_NULL)
5083 break;
5084 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_st_iotecha_stp_discover_tlv, HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_HEADER_SIZE, ENC_LITTLE_ENDIAN);
5085 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_st_iotecha_type_length_value);
5087 ptvcursor_add_no_advance(cursor, hf_homeplug_av_st_iotecha_stp_discover_tlv_type, HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_HEADER_SIZE, ENC_LITTLE_ENDIAN);
5088 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_stp_discover_tlv_length, HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_HEADER_SIZE, ENC_LITTLE_ENDIAN);
5089 if (Type == HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_DEVICE_TYPE) {
5090 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_stp_discover_tlv_value_bytes, Length, ENC_NA);
5091 } else {
5092 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_stp_discover_tlv_value_string, Length, ENC_ASCII);
5095 ptvcursor_pop_subtree(cursor);
5099 static void
5100 dissect_homeplug_av_st_iotecha_stp_get_bss_tlv(ptvcursor_t *cursor, uint8_t count) {
5102 uint8_t Type;
5103 uint16_t Counter, Length;
5104 proto_item *it;
5106 if (!ptvcursor_tree(cursor))
5107 return;
5109 for (Counter = 0; Counter < count; ++Counter) {
5110 Type = tvb_get_uint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
5111 if (Type == HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_BEGIN_BSS) {
5112 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_st_iotecha_bss_entry, 0, ENC_NA);
5113 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_st_iotecha_bss_entry);
5115 while (Type != HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_END_BSS) {
5116 Type = tvb_get_uint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
5117 it = ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_bss_type, 1, ENC_NA);
5118 Length = tvb_get_uint16(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor), ENC_LITTLE_ENDIAN);
5119 /* If no data - skip fields */
5120 if (Length) {
5121 proto_item_append_text(it," Length: %d",Length);
5122 ptvcursor_advance(cursor, 2);
5123 switch (Type) {
5124 default:
5125 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_bss_value_bytes, Length, ENC_NA);
5126 break;
5129 } else {
5130 ptvcursor_advance(cursor, 2);
5134 ptvcursor_pop_subtree(cursor);
5139 static void
5140 dissect_homeplug_av_st_iotecha_stp_auth_set_nmk_req(ptvcursor_t *cursor) {
5142 if (!ptvcursor_tree(cursor))
5143 return;
5145 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_auth_nmk, 16, ENC_NA);
5148 static void
5149 dissect_homeplug_av_st_iotecha_stp_set_maxgain_req(ptvcursor_t *cursor) {
5151 if (!ptvcursor_tree(cursor))
5152 return;
5154 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_gain_ask, 1, ENC_NA);
5157 static void
5158 dissect_homeplug_av_st_iotecha_stp_set_maxgain_cnf(ptvcursor_t *cursor) {
5160 if (!ptvcursor_tree(cursor))
5161 return;
5163 dissect_homeplug_av_st_iotecha_status_standard(cursor);
5164 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_gain_new, 1, ENC_NA);
5165 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_gain_prev, 1, ENC_NA);
5168 static void
5169 dissect_homeplug_av_st_iotecha_linkstatus(ptvcursor_t *cursor) {
5171 if (!ptvcursor_tree(cursor))
5172 return;
5173 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_linkstatus_status, 1, ENC_NA);
5174 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_linkstatus_devmode, 1, ENC_NA);
5178 static void
5179 dissect_homeplug_av_st_iotecha_discover(ptvcursor_t *cursor) {
5181 if (!ptvcursor_tree(cursor))
5182 return;
5184 dissect_homeplug_av_st_iotecha_stp_discover_tlv(cursor);
5187 static void
5188 dissect_homeplug_av_st_iotecha_stp_get_tei_list_cnf(ptvcursor_t *cursor) {
5190 uint8_t TeiCount;
5191 uint8_t Counter;
5193 if (!ptvcursor_tree(cursor))
5194 return;
5196 TeiCount = tvb_get_uint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
5197 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_tei_count, 1, ENC_NA);
5198 for (Counter = 0; Counter < TeiCount; ++Counter) {
5199 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_tei, 1, ENC_NA);
5203 static void
5204 dissect_homeplug_av_st_iotecha_stp_get_tei_snapshot_req(ptvcursor_t *cursor) {
5206 if (!ptvcursor_tree(cursor))
5207 return;
5209 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_tei, 1, ENC_NA);
5212 static void
5213 dissect_homeplug_av_st_iotecha_stp_get_tei_snapshot_cnf(ptvcursor_t *cursor) {
5215 uint8_t AddrCount;
5216 uint8_t Counter;
5218 if (!ptvcursor_tree(cursor))
5219 return;
5221 AddrCount = tvb_get_uint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
5222 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_tei_snap_addr_count, 1, ENC_NA);
5223 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_tei_snap_tei, 1, ENC_NA);
5224 for (Counter = 0; Counter < AddrCount; ++Counter) {
5225 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mac_address, 6, ENC_NA);
5226 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_tei_snap_mac_address_flag, 2, ENC_LITTLE_ENDIAN);
5230 static void
5231 dissect_homeplug_av_st_iotecha_stp_get_bss_list_cnf(ptvcursor_t *cursor) {
5233 uint8_t Count;
5235 if (!ptvcursor_tree(cursor))
5236 return;
5238 Count = tvb_get_uint8( ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5239 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_bss_list_count, 1, ENC_NA);
5240 dissect_homeplug_av_st_iotecha_stp_get_bss_tlv(cursor, Count);
5243 static void
5244 dissect_homeplug_av_st_iotecha_stp_get_chanqual_report_req(ptvcursor_t *cursor) {
5246 if (!ptvcursor_tree(cursor))
5247 return;
5249 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_req_type, 1, ENC_NA);
5250 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mac_address, 6, ENC_NA);
5253 static void
5254 dissect_homeplug_av_st_iotecha_stp_get_chanqual_report_cnf(ptvcursor_t *cursor) {
5256 if (!ptvcursor_tree(cursor))
5257 return;
5259 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_substatus, 1, ENC_NA);
5260 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mac_address, 6, ENC_NA);
5263 static void
5264 dissect_homeplug_av_st_iotecha_stp_get_chanqual_report_ind(ptvcursor_t *cursor) {
5266 proto_item *it;
5267 uint8_t tmi_count, int_count;
5268 uint16_t Counter;
5270 if (!ptvcursor_tree(cursor))
5271 return;
5273 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mac_address, 6, ENC_NA);
5274 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_mac_local, 6, ENC_NA);
5275 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_mac_remote, 6, ENC_NA);
5276 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_source, 1, ENC_NA);
5277 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_response_type, 1, ENC_NA);
5278 /* TMI */
5279 tmi_count = tvb_get_uint8( ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5280 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_tmi_count, 1, ENC_NA);
5281 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_tmi, tmi_count, ENC_NA);
5282 /* Intervals */
5283 int_count = tvb_get_uint8( ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5284 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_int_count, 1, ENC_NA);
5286 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_st_iotecha_chanqual_int,
5287 int_count*3, ENC_NA);
5288 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_st_iotecha_chanqual_int);
5290 for (Counter = 0; Counter < int_count; ++Counter) {
5291 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_int_et, 2, ENC_LITTLE_ENDIAN);
5292 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_int_tmi, 1, ENC_NA);
5295 ptvcursor_pop_subtree(cursor);
5296 /* TMI Attached */
5297 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_tmi_attached, 1, ENC_NA);
5298 /* Reserved 1 */
5299 ptvcursor_advance(cursor,1);
5300 /* FEC */
5301 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_fec_type, 1, ENC_NA);
5302 /* Reserved 2 */
5303 ptvcursor_advance(cursor,1);
5304 /* CBLD */
5305 it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_st_iotecha_chanqual_cbld, -1, ENC_NA);
5306 ptvcursor_push_subtree(cursor, it, ett_homeplug_av_st_iotecha_chanqual_cbld);
5308 for (Counter = 0; Counter < HOMEPLUG_AV_ST_IOTECHA_CHANQUAL_CBLD_DATA_COUNT; ++Counter) {
5309 ptvcursor_add_no_advance(cursor, hf_homeplug_av_st_iotecha_chanqual_cbld_data_low, 1, ENC_NA);
5310 ptvcursor_add_no_advance(cursor, hf_homeplug_av_st_iotecha_chanqual_cbld_data_high, 1, ENC_NA);
5311 ptvcursor_advance(cursor, 1);
5314 ptvcursor_pop_subtree(cursor);
5318 static void
5319 dissect_homeplug_av_st_iotecha_stp_mfct_update_stage_req(ptvcursor_t *cursor) {
5321 uint16_t Length;
5323 if (!ptvcursor_tree(cursor))
5324 return;
5326 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_crc, 2, ENC_NA);
5327 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_total_length, 2, ENC_LITTLE_ENDIAN);
5328 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_offset, 2, ENC_LITTLE_ENDIAN);
5330 Length = tvb_get_uint16(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor),ENC_LITTLE_ENDIAN);
5331 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_length, 2, ENC_LITTLE_ENDIAN);
5332 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_data, Length, ENC_NA);
5335 static void
5336 dissect_homeplug_av_st_iotecha_stp_mfct_update_stage_cnf(ptvcursor_t *cursor) {
5338 if (!ptvcursor_tree(cursor))
5339 return;
5341 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_crc, 2, ENC_NA);
5342 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_timeout, 4, ENC_LITTLE_ENDIAN);
5343 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_offset, 2, ENC_LITTLE_ENDIAN);
5344 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_result, 1, ENC_NA);
5347 static void
5348 dissect_homeplug_av_st_iotecha_stp_mfct_update_finish_req(ptvcursor_t *cursor) {
5350 if (!ptvcursor_tree(cursor))
5351 return;
5353 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_request_type, 1, ENC_NA);
5354 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_reboot, 1, ENC_NA);
5357 static void
5358 dissect_homeplug_av_st_iotecha_stp_mfct_get_item_req(ptvcursor_t *cursor) {
5360 int name_size;
5362 if (!ptvcursor_tree(cursor))
5363 return;
5365 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_item_offset, 4, ENC_LITTLE_ENDIAN);
5366 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_item_total_length, 4, ENC_LITTLE_ENDIAN);
5367 name_size = tvb_strsize(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
5368 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_name, name_size-1, ENC_ASCII);
5369 /* Skip terminator */
5370 ptvcursor_advance(cursor, 1);
5373 static void
5374 dissect_homeplug_av_st_iotecha_stp_mfct_get_item_cnf(ptvcursor_t *cursor) {
5376 int name_size;
5378 if (!ptvcursor_tree(cursor))
5379 return;
5381 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_item_offset, 4, ENC_LITTLE_ENDIAN);
5382 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_item_total_length, 4, ENC_LITTLE_ENDIAN);
5383 name_size = tvb_strsize(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
5384 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_name, name_size - 1, ENC_ASCII);
5385 /* Skip terminator */
5386 ptvcursor_advance(cursor,1);
5387 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_value, -1, ENC_NA);
5390 static void
5391 dissect_homeplug_av_st_iotecha_stp_mfct_get_keylist_cnf(ptvcursor_t *cursor) {
5393 int name_size;
5395 if (!ptvcursor_tree(cursor))
5396 return;
5398 while (tvb_reported_length_remaining(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)) > 1 )
5400 if ((tvb_get_uint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)) == '\0')
5401 && (tvb_get_uint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor) + 1) == '\0'))
5402 break;
5403 name_size = tvb_strsize(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
5404 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_name, name_size - 1, ENC_ASCII);
5405 /* Skip terminator */
5406 ptvcursor_advance(cursor,1);
5410 static void
5411 dissect_homeplug_av_st_iotecha_stp_fup_req(ptvcursor_t *cursor) {
5413 if (!ptvcursor_tree(cursor))
5414 return;
5416 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_stp_fup_mac_da, 6, ENC_NA);
5417 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_stp_fup_mac_sa, 6, ENC_NA);
5418 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_stp_fup_mtype, 1, ENC_NA);
5421 static void
5422 dissect_homeplug_av_st_iotecha_stp_cpstate_ind(ptvcursor_t *cursor, packet_info *pinfo) {
5424 uint8_t bitmask;
5425 uint8_t cp_state;
5426 uint8_t pwm_duty;
5428 cp_state = tvb_get_uint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5429 pwm_duty = tvb_get_uint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)+1);
5430 col_add_fstr(pinfo->cinfo, COL_INFO, "CP State Change: %s, %d%%", val_to_str_const(cp_state, homeplug_av_st_iotecha_stp_cpstate_state_vals, "Unknown"), pwm_duty);
5432 if (!ptvcursor_tree(cursor))
5433 return;
5435 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_cpstate_state, 1, ENC_NA);
5436 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_cpstate_pwm_duty, 1, ENC_NA);
5437 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_cpstate_pwm_freq, 2, ENC_LITTLE_ENDIAN);
5438 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_cpstate_voltage, 2, ENC_LITTLE_ENDIAN);
5439 bitmask = tvb_get_uint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5440 if (bitmask)
5441 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_cpstate_adc_bitmask, 1, ENC_NA);
5442 else
5443 ptvcursor_advance(cursor, 1);
5446 if (bitmask & 0x01)
5447 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_cpstate_adc_voltage_1, 2, ENC_LITTLE_ENDIAN);
5448 else
5449 ptvcursor_advance(cursor, 2);
5451 if (bitmask & 0x02)
5452 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_cpstate_adc_voltage_2, 2, ENC_LITTLE_ENDIAN);
5453 else
5454 ptvcursor_advance(cursor, 2);
5456 if (bitmask & 0x04)
5457 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_cpstate_adc_voltage_3, 2, ENC_LITTLE_ENDIAN);
5458 else
5459 ptvcursor_advance(cursor, 2);
5463 static void
5464 dissect_homeplug_av_st_iotecha_stp_user_message_ind(ptvcursor_t *cursor, packet_info *pinfo) {
5466 int null_offset;
5469 ptvcursor_advance(cursor, 4); // not used fields
5470 ptvcursor_advance(cursor, 4); // not used fields
5472 null_offset = tvb_find_uint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor) + 1, -1, 0);
5474 if (null_offset > -1) {
5475 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s",
5476 tvb_get_stringz_enc(pinfo->pool, ptvcursor_tvbuff(cursor),
5477 ptvcursor_current_offset(cursor),
5478 NULL, ENC_ASCII));
5481 if (!ptvcursor_tree(cursor))
5482 return;
5484 if (null_offset > -1) {
5485 ptvcursor_add(cursor,
5486 hf_homeplug_av_st_iotecha_user_message_info,
5487 null_offset - ptvcursor_current_offset(cursor),
5488 ENC_ASCII);
5491 null_offset = tvb_find_uint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor) + 1, -1, 0);
5493 if (null_offset > -1) {
5494 ptvcursor_add(cursor,
5495 hf_homeplug_av_st_iotecha_user_message_details,
5496 null_offset - ptvcursor_current_offset(cursor),
5497 ENC_ASCII);
5502 static void
5503 dissect_homeplug_av_st_iotecha_stp_test_chan_atten_start_rx_req(ptvcursor_t *cursor) {
5505 if (!ptvcursor_tree(cursor))
5506 return;
5508 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_test_type, 1, ENC_NA);
5509 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_num_sound, 1, ENC_NA);
5510 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_data_ind_addr, 6, ENC_NA);
5511 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_agc_lock, 1, ENC_NA);
5512 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_db_agc_val, 1, ENC_NA);
5515 static void
5516 dissect_homeplug_av_st_iotecha_stp_test_chan_atten_start_rx_cnf(ptvcursor_t *cursor) {
5517 if (!ptvcursor_tree(cursor))
5518 return;
5520 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_test_status, 1, ENC_NA);
5523 static void
5524 dissect_homeplug_av_st_iotecha_stp_test_chan_atten_start_tx_req(ptvcursor_t *cursor) {
5525 if (!ptvcursor_tree(cursor))
5526 return;
5528 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_test_type, 1, ENC_NA);
5529 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_num_sound, 1, ENC_NA);
5530 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_data_ind_addr, 6, ENC_NA);
5531 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_suppress_data, 1, ENC_NA);
5534 static void
5535 dissect_homeplug_av_st_iotecha_stp_test_chan_atten_start_tx_cnf(ptvcursor_t *cursor) {
5536 if (!ptvcursor_tree(cursor))
5537 return;
5539 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_test_status, 1, ENC_NA);
5542 static void
5543 dissect_homeplug_av_st_iotecha_stp_test_chan_atten_data_ind(ptvcursor_t *cursor) {
5544 if (!ptvcursor_tree(cursor))
5545 return;
5547 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_sound_remain, 1, ENC_NA);
5548 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_ntb_time, 4, ENC_NA);
5549 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_db_agc_val, 1, ENC_NA);
5550 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_rsvd1, 3, ENC_NA);
5551 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_rsvd2, 4, ENC_NA);
5552 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_num_segments, 1, ENC_NA);
5553 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_segment, 1, ENC_NA);
5554 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_num_chan, 2, ENC_NA);
5555 ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chan_start, 2, ENC_NA);
5557 /* End of ST/IoTecha dissect functions */
5560 static void
5561 dissect_homeplug_av_mme_general(ptvcursor_t *cursor,
5562 uint8_t homeplug_av_mmver,
5563 uint16_t homeplug_av_mmtype,
5564 packet_info *pinfo) {
5565 (void)homeplug_av_mmver;
5566 /* Public MMEs */
5567 switch ((homeplug_av_mmetypes_general_type)homeplug_av_mmtype)
5569 case HOMEPLUG_AV_MMTYPE_GENERAL_CC_DISCOVER_LIST_CNF:
5570 dissect_homeplug_av_cc_disc_list_cnf(cursor);
5571 break;
5572 case HOMEPLUG_AV_MMTYPE_GENERAL_CM_ENCRYPTED_PAYLOAD_IND:
5573 dissect_homeplug_av_cm_enc_pld_ind(cursor);
5574 break;
5575 case HOMEPLUG_AV_MMTYPE_GENERAL_CM_ENCRYPTED_PAYLOAD_RSP:
5576 dissect_homeplug_av_cm_enc_pld_rsp(cursor);
5577 break;
5578 case HOMEPLUG_AV_MMTYPE_GENERAL_CM_SET_KEY_REQ:
5579 dissect_homeplug_av_cm_set_key_req(cursor);
5580 break;
5581 case HOMEPLUG_AV_MMTYPE_GENERAL_CM_SET_KEY_CNF:
5582 dissect_homeplug_av_cm_set_key_cnf(cursor);
5583 break;
5584 case HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_KEY_REQ:
5585 dissect_homeplug_av_cm_get_key_req(cursor);
5586 break;
5587 case HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_KEY_CNF:
5588 dissect_homeplug_av_cm_get_key_cnf(cursor);
5589 break;
5590 case HOMEPLUG_AV_MMTYPE_GENERAL_CM_BRG_INFO_CNF:
5591 dissect_homeplug_av_get_brg_infos_cnf(cursor);
5592 break;
5593 case HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_INFO_CNF:
5594 dissect_homeplug_av_nw_infos_cnf(cursor);
5595 break;
5596 case HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_STATS_CNF:
5597 dissect_homeplug_av_nw_stats_cnf(cursor);
5598 break;
5599 case HOMEPLUG_AV_MMTYPE_GENERAL_CC_ASSOC_REQ:
5600 dissect_homeplug_av_cc_assoc_req(cursor);
5601 break;
5602 case HOMEPLUG_AV_MMTYPE_GENERAL_CC_ASSOC_CNF:
5603 dissect_homeplug_av_cc_assoc_cnf(cursor);
5604 break;
5605 case HOMEPLUG_AV_MMTYPE_GENERAL_CM_UNASSOCIATED_STA_IND:
5606 dissect_homeplug_av_cm_unassociated_sta_ind(cursor);
5607 break;
5608 case HOMEPLUG_AV_MMTYPE_GENERAL_CC_SET_TEI_MAP_IND:
5609 dissect_homeplug_av_cc_set_tei_map_ind(cursor);
5610 break;
5611 /* HPGP */
5612 case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_PARM_REQ:
5613 dissect_homeplug_av_gp_cm_slac_parm_req(cursor);
5614 break;
5615 case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_PARM_CNF:
5616 dissect_homeplug_av_gp_cm_slac_parm_cnf(cursor);
5617 break;
5618 case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ATTEN_PROFILE_IND:
5619 dissect_homeplug_av_gp_cm_atten_profile_ind(cursor);
5620 break;
5621 case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ATTEN_CHAR_IND:
5622 dissect_homeplug_av_gp_cm_atten_char_ind(cursor, pinfo);
5623 break;
5624 case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ATTEN_CHAR_RSP:
5625 dissect_homeplug_av_gp_cm_atten_char_rsp(cursor);
5626 break;
5627 case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_START_ATTEN_CHAR_IND:
5628 dissect_homeplug_av_gp_cm_start_atten_char_ind(cursor);
5629 break;
5630 case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_MNBC_SOUND_IND:
5631 dissect_homeplug_av_gp_cm_mnbc_sound_ind(cursor);
5632 break;
5633 case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_VALIDATE_REQ:
5634 dissect_homeplug_av_gp_cm_validate_req(cursor);
5635 break;
5636 case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_VALIDATE_CNF:
5637 dissect_homeplug_av_gp_cm_validate_cnf(cursor);
5638 break;
5639 case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_MATCH_REQ:
5640 dissect_homeplug_av_gp_cm_slac_match_req(cursor);
5641 break;
5642 case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_MATCH_CNF:
5643 dissect_homeplug_av_gp_cm_slac_match_cnf(cursor);
5644 break;
5645 case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_USER_DATA_REQ:
5646 case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_USER_DATA_CNF:
5647 dissect_homeplug_av_gp_cm_slac_user_data(cursor);
5648 break;
5649 default:
5650 break;
5654 static void
5655 dissect_homeplug_av_mme_qualcomm(ptvcursor_t *cursor, uint8_t homeplug_av_mmver, uint16_t homeplug_av_mmtype) {
5656 switch ((homeplug_av_mmetypes_qualcomm_type)homeplug_av_mmtype) {
5657 case HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_SW_CNF:
5658 dissect_homeplug_av_get_sw_cnf(cursor);
5659 break;
5660 case HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MEM_REQ:
5661 dissect_homeplug_av_wr_mem_req(cursor);
5662 break;
5663 case HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MEM_CNF:
5664 dissect_homeplug_av_wr_mem_cnf(cursor);
5665 break;
5666 case HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MEM_REQ:
5667 dissect_homeplug_av_rd_mem_req(cursor);
5668 break;
5669 case HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MEM_CNF:
5670 dissect_homeplug_av_rd_mem_cnf(cursor);
5671 break;
5672 case HOMEPLUG_AV_MMTYPE_QUALCOMM_ST_MAC_REQ:
5673 dissect_homeplug_av_st_mac_req(cursor);
5674 break;
5675 case HOMEPLUG_AV_MMTYPE_QUALCOMM_ST_MAC_CNF:
5676 dissect_homeplug_av_st_mac_cnf(cursor);
5677 break;
5678 case HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_NVM_CNF:
5679 dissect_homeplug_av_get_nvm_cnf(cursor);
5680 break;
5681 case HOMEPLUG_AV_MMTYPE_QUALCOMM_RS_DEV_CNF:
5682 dissect_homeplug_av_rs_dev_cnf(cursor);
5683 break;
5684 case HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MOD_REQ:
5685 dissect_homeplug_av_wr_mod_req(cursor);
5686 break;
5687 case HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MOD_CNF:
5688 dissect_homeplug_av_wr_mod_cnf(cursor);
5689 break;
5690 case HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MOD_IND:
5691 dissect_homeplug_av_wr_mod_ind(cursor);
5692 break;
5693 case HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MOD_REQ:
5694 dissect_homeplug_av_rd_mod_req(cursor);
5695 break;
5696 case HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MOD_CNF:
5697 dissect_homeplug_av_rd_mod_cnf(cursor);
5698 break;
5699 case HOMEPLUG_AV_MMTYPE_QUALCOMM_NVM_MOD_REQ:
5700 dissect_homeplug_av_mod_nvm_req(cursor);
5701 break;
5702 case HOMEPLUG_AV_MMTYPE_QUALCOMM_NVM_MOD_CNF:
5703 dissect_homeplug_av_mod_nvm_cnf(cursor);
5704 break;
5705 case HOMEPLUG_AV_MMTYPE_QUALCOMM_WD_RPT_REQ:
5706 dissect_homeplug_av_wd_rpt_req(cursor);
5707 break;
5708 case HOMEPLUG_AV_MMTYPE_QUALCOMM_WD_RPT_IND:
5709 dissect_homeplug_av_wd_rpt_ind(cursor);
5710 break;
5711 case HOMEPLUG_AV_MMTYPE_QUALCOMM_LNK_STATS_REQ:
5712 dissect_homeplug_av_lnk_stats_req(cursor);
5713 break;
5714 case HOMEPLUG_AV_MMTYPE_QUALCOMM_LNK_STATS_CNF:
5715 dissect_homeplug_av_lnk_stats_cnf(cursor);
5716 break;
5717 case HOMEPLUG_AV_MMTYPE_QUALCOMM_SNIFFER_REQ:
5718 dissect_homeplug_av_sniffer_req(cursor);
5719 break;
5720 case HOMEPLUG_AV_MMTYPE_QUALCOMM_SNIFFER_CNF:
5721 dissect_homeplug_av_sniffer_cnf(cursor);
5722 break;
5723 case HOMEPLUG_AV_MMTYPE_QUALCOMM_SNIFFER_IND:
5724 dissect_homeplug_av_sniffer_ind(cursor);
5725 break;
5726 case HOMEPLUG_AV_MMTYPE_QUALCOMM_NW_INFO_CNF:
5727 dissect_homeplug_av_nw_info_cnf(cursor, homeplug_av_mmver);
5728 break;
5729 case HOMEPLUG_AV_MMTYPE_QUALCOMM_CP_RPT_REQ:
5730 dissect_homeplug_av_cp_rpt_req(cursor);
5731 break;
5732 case HOMEPLUG_AV_MMTYPE_QUALCOMM_CP_RPT_IND:
5733 dissect_homeplug_av_cp_rpt_ind(cursor);
5734 break;
5735 case HOMEPLUG_AV_MMTYPE_QUALCOMM_FR_LBK_REQ:
5736 dissect_homeplug_av_fr_lbk_req(cursor);
5737 break;
5738 case HOMEPLUG_AV_MMTYPE_QUALCOMM_FR_LBK_CNF:
5739 dissect_homeplug_av_fr_lbk_cnf(cursor);
5740 break;
5741 case HOMEPLUG_AV_MMTYPE_QUALCOMM_LBK_STAT_CNF:
5742 dissect_homeplug_av_lbk_stat_cnf(cursor);
5743 break;
5744 case HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_KEY_REQ:
5745 dissect_homeplug_av_set_key_req(cursor);
5746 break;
5747 case HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_KEY_CNF:
5748 dissect_homeplug_av_set_key_cnf(cursor);
5749 break;
5750 case HOMEPLUG_AV_MMTYPE_QUALCOMM_MFG_STRING_CNF:
5751 dissect_homeplug_av_mfg_string_cnf(cursor);
5752 break;
5753 case HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_CBLOCK_CNF:
5754 dissect_homeplug_av_rd_cblock_cnf(cursor);
5755 break;
5756 case HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_SDRAM_REQ:
5757 dissect_homeplug_av_set_sdram_req(cursor);
5758 break;
5759 case HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_SDRAM_CNF:
5760 dissect_homeplug_av_set_sdram_cnf(cursor);
5761 break;
5762 case HOMEPLUG_AV_MMTYPE_QUALCOMM_HOST_ACTION_IND:
5763 dissect_homeplug_av_host_action_ind(cursor);
5764 break;
5765 case HOMEPLUG_AV_MMTYPE_QUALCOMM_HOST_ACTION_RSP:
5766 dissect_homeplug_av_host_action_rsp(cursor);
5767 break;
5768 case HOMEPLUG_AV_MMTYPE_QUALCOMM_OP_ATTR_REQ:
5769 dissect_homeplug_av_op_attr_req(cursor);
5770 break;
5771 case HOMEPLUG_AV_MMTYPE_QUALCOMM_OP_ATTR_CNF:
5772 dissect_homeplug_av_op_attr_cnf(cursor);
5773 break;
5774 case HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_ENET_PHY_REQ:
5775 dissect_homeplug_av_get_enet_phy_req(cursor);
5776 break;
5777 case HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_ENET_PHY_CNF:
5778 dissect_homeplug_av_get_enet_phy_cnf(cursor);
5779 break;
5780 case HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_RX_REQ:
5781 dissect_homeplug_av_tone_map_rx_req(cursor, homeplug_av_mmver);
5782 break;
5783 case HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_RX_CNF:
5784 dissect_homeplug_av_tone_map_rx_cnf(cursor, homeplug_av_mmver);
5785 break;
5786 case HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_TX_REQ:
5787 dissect_homeplug_av_tone_map_tx_req(cursor, homeplug_av_mmver);
5788 break;
5789 case HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_TX_CNF:
5790 dissect_homeplug_av_tone_map_tx_cnf(cursor, homeplug_av_mmver);
5791 break;
5792 default:
5793 break;
5797 static void
5798 dissect_homeplug_av_mme_st_iotecha(ptvcursor_t *cursor,
5799 uint8_t homeplug_av_mmver,
5800 uint16_t homeplug_av_mmtype,
5801 packet_info *pinfo) {
5802 (void)homeplug_av_mmver;
5803 /* Parse head of the message */
5804 dissect_homeplug_av_st_iotecha_header(cursor);
5805 /* Parse the rest */
5806 switch ((homeplug_av_mmetypes_st_iotecha_type)homeplug_av_mmtype) {
5807 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_AUTH_SET_NMK_REQ:
5808 dissect_homeplug_av_st_iotecha_stp_auth_set_nmk_req(cursor);
5809 break;
5810 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_RX_REQ:
5811 dissect_homeplug_av_st_iotecha_stp_test_chan_atten_start_rx_req(cursor);
5812 break;
5813 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_TX_REQ:
5814 dissect_homeplug_av_st_iotecha_stp_test_chan_atten_start_tx_req(cursor);
5815 break;
5816 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_RX_CNF:
5817 dissect_homeplug_av_st_iotecha_stp_test_chan_atten_start_rx_cnf(cursor);
5818 break;
5819 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_TX_CNF:
5820 dissect_homeplug_av_st_iotecha_stp_test_chan_atten_start_tx_cnf(cursor);
5821 break;
5822 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_DATA_IND:
5823 dissect_homeplug_av_st_iotecha_stp_test_chan_atten_data_ind(cursor);
5824 break;
5825 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_AUTH_SET_NMK_CNF:
5826 /* NOT SURE */
5827 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_FINISH_CNF:
5828 /* General message with status byte */
5829 dissect_homeplug_av_st_iotecha_status_standard(cursor);
5830 break;
5831 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_LINK_STATUS_IND:
5832 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_LINK_STATUS_CNF:
5833 dissect_homeplug_av_st_iotecha_linkstatus(cursor);
5834 break;
5835 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_CNF:
5836 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_LOCAL_CNF:
5837 dissect_homeplug_av_st_iotecha_discover(cursor);
5838 break;
5839 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_SET_MAXGAIN_REQ:
5840 dissect_homeplug_av_st_iotecha_stp_set_maxgain_req(cursor);
5841 break;
5842 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_SET_MAXGAIN_CNF:
5843 dissect_homeplug_av_st_iotecha_stp_set_maxgain_cnf(cursor);
5844 break;
5845 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_LIST_CNF:
5846 dissect_homeplug_av_st_iotecha_stp_get_tei_list_cnf(cursor);
5847 break;
5848 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_SNAPSHOT_REQ:
5849 dissect_homeplug_av_st_iotecha_stp_get_tei_snapshot_req(cursor);
5850 break;
5851 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_SNAPSHOT_CNF:
5852 dissect_homeplug_av_st_iotecha_stp_get_tei_snapshot_cnf(cursor);
5853 break;
5854 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_BSS_LIST_CNF:
5855 dissect_homeplug_av_st_iotecha_stp_get_bss_list_cnf(cursor);
5856 break;
5857 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CHANQUAL_REPORT_REQ:
5858 dissect_homeplug_av_st_iotecha_stp_get_chanqual_report_req(cursor);
5859 break;
5860 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CHANQUAL_REPORT_CNF:
5861 dissect_homeplug_av_st_iotecha_stp_get_chanqual_report_cnf(cursor);
5862 break;
5863 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CHANQUAL_REPORT_IND:
5864 dissect_homeplug_av_st_iotecha_stp_get_chanqual_report_ind(cursor);
5865 break;
5866 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_STAGE_REQ:
5867 dissect_homeplug_av_st_iotecha_stp_mfct_update_stage_req(cursor);
5868 break;
5869 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_STAGE_CNF:
5870 dissect_homeplug_av_st_iotecha_stp_mfct_update_stage_cnf(cursor);
5871 break;
5872 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_FINISH_REQ:
5873 dissect_homeplug_av_st_iotecha_stp_mfct_update_finish_req(cursor);
5874 break;
5875 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_ITEM_REQ:
5876 dissect_homeplug_av_st_iotecha_stp_mfct_get_item_req(cursor);
5877 break;
5878 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_ITEM_CNF:
5879 dissect_homeplug_av_st_iotecha_stp_mfct_get_item_cnf(cursor);
5880 break;
5881 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_KEYLIST_CNF:
5882 dissect_homeplug_av_st_iotecha_stp_mfct_get_keylist_cnf(cursor);
5883 break;
5884 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_FUP_REQ:
5885 dissect_homeplug_av_st_iotecha_stp_fup_req(cursor);
5886 break;
5887 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CPSTATE_IND:
5888 dissect_homeplug_av_st_iotecha_stp_cpstate_ind(cursor, pinfo);
5889 break;
5890 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_USER_MESSAGE_IND:
5891 dissect_homeplug_av_st_iotecha_stp_user_message_ind(cursor, pinfo);
5892 break;
5893 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_BSS_LIST_REQ:
5894 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_LIST_REQ:
5895 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_LINK_STATUS_REQ:
5896 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_LOCAL_REQ:
5897 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_REQ:
5898 case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_KEYLIST_REQ:
5899 /* Requests only with header go here */
5900 break;
5901 default:
5902 break;
5906 static void
5907 dissect_homeplug_av_mme(ptvcursor_t *cursor,
5908 uint8_t homeplug_av_mmver,
5909 uint16_t homeplug_av_mmtype,
5910 uint32_t homeplug_av_oui,
5911 packet_info *pinfo)
5913 if (!homeplug_av_oui) {
5914 dissect_homeplug_av_mme_general(cursor, homeplug_av_mmver, homeplug_av_mmtype, pinfo);
5915 } else {
5916 switch (homeplug_av_oui) {
5917 case HOMEPLUG_AV_OUI_QCA:
5918 dissect_homeplug_av_mme_qualcomm(cursor, homeplug_av_mmver, homeplug_av_mmtype);
5919 break;
5920 case HOMEPLUG_AV_OUI_ST_IOTECHA:
5921 dissect_homeplug_av_mme_st_iotecha(cursor, homeplug_av_mmver, homeplug_av_mmtype, pinfo);
5922 break;
5927 static void
5928 info_column_filler_initial(uint8_t homeplug_av_mmver,
5929 uint16_t homeplug_av_mmtype,
5930 uint32_t homeplug_av_oui,
5931 packet_info *pinfo) {
5932 (void)homeplug_av_mmver;
5934 /* if packet is vendor specific - display vendor OUI */
5935 if (homeplug_av_oui) {
5936 col_append_sep_str(pinfo->cinfo, COL_INFO, ", ",
5937 val_to_str(homeplug_av_oui, homeplug_av_vendors_oui_vals, "OUI:0x%x"));
5940 /* Info depends on type and oui */
5941 switch (homeplug_av_oui)
5943 case HOMEPLUG_AV_OUI_ST_IOTECHA:
5944 col_append_sep_str(pinfo->cinfo, COL_INFO, ", ",
5945 val_to_str_ext(homeplug_av_mmtype,
5946 &homeplug_av_mmtype_st_iotecha_vals_ext,
5947 "Unknown 0x%x"));
5948 break;
5949 case HOMEPLUG_AV_OUI_QCA:
5950 col_append_sep_str(pinfo->cinfo, COL_INFO, ", ",
5951 val_to_str_ext(homeplug_av_mmtype,
5952 &homeplug_av_mmtype_qualcomm_vals_ext,
5953 "Unknown 0x%x"));
5954 break;
5956 case HOMEPLUG_AV_OUI_NONE:
5957 /* if oui is unknown, trying to describe as general MME */
5958 col_append_sep_str(pinfo->cinfo, COL_INFO, ", ",
5959 val_to_str_ext(homeplug_av_mmtype,
5960 &homeplug_av_mmtype_general_vals_ext,
5961 "Unknown 0x%x"));
5962 break;
5964 default:
5965 break;
5969 static int
5970 dissect_homeplug_av(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
5972 proto_item *ti;
5973 proto_tree *homeplug_av_tree;
5974 ptvcursor_t *cursor;
5975 uint8_t homeplug_av_mmver;
5976 uint16_t homeplug_av_mmtype;
5977 uint32_t homeplug_av_oui;
5979 homeplug_av_oui = 0;
5980 ti_vendor = 0;
5982 col_set_str(pinfo->cinfo, COL_PROTOCOL, "HomePlug AV");
5983 col_clear(pinfo->cinfo, COL_INFO);
5985 ti = proto_tree_add_item(tree, proto_homeplug_av, tvb, 0, -1, ENC_NA);
5986 homeplug_av_tree = proto_item_add_subtree(ti, ett_homeplug_av);
5988 cursor = ptvcursor_new(pinfo->pool, homeplug_av_tree, tvb, 0);
5990 /* Check if we have enough data to process the header */
5991 if (check_tvb_length(cursor, HOMEPLUG_AV_MMHDR_LEN) != TVB_LEN_SHORTEST) {
5993 dissect_homeplug_av_mmhdr(cursor, &homeplug_av_mmver, &homeplug_av_mmtype, &homeplug_av_oui);
5995 info_column_filler_initial(homeplug_av_mmver, homeplug_av_mmtype, homeplug_av_oui, pinfo);
5997 dissect_homeplug_av_mme(cursor, homeplug_av_mmver, homeplug_av_mmtype, homeplug_av_oui, pinfo);
6001 ti_vendor = 0;
6002 ptvcursor_free(cursor);
6003 return tvb_captured_length(tvb);
6006 void
6007 proto_register_homeplug_av(void)
6009 static hf_register_info hf[] = {
6010 { &hf_homeplug_av_reserved,
6011 { "Reserved", "homeplug_av.reserved",
6012 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6014 /* MM Header */
6015 { &hf_homeplug_av_mmhdr,
6016 { "MAC Management Header", "homeplug_av.mmhdr",
6017 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6019 { &hf_homeplug_av_mmhdr_mmver,
6020 { "Version", "homeplug_av.mmhdr.mmver",
6021 FT_UINT8, BASE_DEC, VALS(homeplug_av_mmver_vals), HOMEPLUG_AV_MMVER_MASK, NULL, HFILL }
6023 { &hf_homeplug_av_mmhdr_mmtype_general,
6024 { "Type", "homeplug_av.mmhdr.mmtype",
6025 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &homeplug_av_mmtype_general_vals_ext, 0x0, NULL, HFILL }
6027 { &hf_homeplug_av_mmhdr_mmtype_qualcomm,
6028 { "Type", "homeplug_av.mmhdr.mmtype.qualcomm",
6029 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &homeplug_av_mmtype_qualcomm_vals_ext, 0x0, NULL, HFILL }
6031 { &hf_homeplug_av_mmhdr_mmtype_st,
6032 { "Type", "homeplug_av.mmhdr.mmtype.st",
6033 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &homeplug_av_mmtype_st_iotecha_vals_ext, 0x0, NULL, HFILL }
6035 { &hf_homeplug_av_mmhdr_mmtype_lsb,
6036 { "LSB", "homeplug_av.mmhdr.mmtype.lsb",
6037 FT_UINT8, BASE_HEX, VALS(homeplug_av_mmtype_lsb_vals), HOMEPLUG_AV_MMTYPE_LSB_MASK, NULL, HFILL }
6039 { &hf_homeplug_av_mmhdr_mmtype_msb,
6040 { "MSB", "homeplug_av.mmhdr.mmtype.msb",
6041 FT_UINT8, BASE_HEX, VALS(homeplug_av_mmtype_msb_vals), HOMEPLUG_AV_MMTYPE_MSB_MASK, "Reserved", HFILL },
6043 { &hf_homeplug_av_mmhdr_fmi,
6044 { "Fragmentation Info", "homeplug_av.mmhdr.fmi",
6045 FT_UINT16, BASE_HEX, NULL, 0x0, "Reserved", HFILL },
6047 /* Public MME */
6048 { &hf_homeplug_av_public,
6049 { "Public MME", "homeplug_av.public",
6050 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6052 { &hf_homeplug_av_public_frag_count,
6053 { "Fragment count", "homeplug_av.public.frag_count",
6054 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_PUBLIC_FRAG_COUNT_MASK, NULL, HFILL }
6056 { &hf_homeplug_av_public_frag_index,
6057 { "Fragment index", "homeplug_av.public.frag_index",
6058 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_PUBLIC_FRAG_INDEX_MASK, NULL, HFILL }
6060 { &hf_homeplug_av_public_frag_seqnum,
6061 { "Fragment Sequence number", "homeplug_av.public.frag_seqnum",
6062 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6064 /* Frame control fields */
6065 { &hf_homeplug_av_fc,
6066 { "Frame Control", "homeplug_av.fc",
6067 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
6069 { &hf_homeplug_av_fc_del_type,
6070 { "Delimiter type", "homeplug_av.fc.del_type",
6071 FT_UINT8, BASE_HEX, VALS(homeplug_av_fc_del_type_vals), HOMEPLUG_AV_DEL_TYPE_MASK, NULL, HFILL }
6073 { &hf_homeplug_av_fc_access,
6074 { "Access network", "homeplug_av.fc.access",
6075 FT_UINT8, BASE_HEX, VALS(homeplug_nw_info_access_vals), HOMEPLUG_AV_NW_INFO_ACCESS_MASK, NULL, HFILL }
6077 { &hf_homeplug_av_fc_snid,
6078 { "Short network ID", "homeplug_av.fc.snid",
6079 FT_UINT8, BASE_HEX, NULL, HOMEPLUG_AV_SNID_MASK, NULL, HFILL }
6081 { &hf_homeplug_av_fc_fccs_av,
6082 { "Frame control check sequence", "homeplug_av.fc.fccs_av",
6083 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
6085 /* Common MPDU variant fields */
6086 { &hf_homeplug_av_dtei,
6087 { "Destination Terminal Equipment Identifier", "homeplug_av.dtei",
6088 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6090 { &hf_homeplug_av_stei,
6091 { "Source Terminal Equipment Identifier", "homeplug_av.stei",
6092 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6094 { &hf_homeplug_av_lid,
6095 { "Link ID", "homeplug_av.lid",
6096 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6098 { &hf_homeplug_av_cfs,
6099 { "Contention free session", "homeplug_av.cfs",
6100 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_CFS_MASK, NULL, HFILL }
6102 { &hf_homeplug_av_bdf,
6103 { "Beacon detect flag", "homeplug_av.bdf",
6104 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_BDF_MASK, NULL, HFILL }
6106 { &hf_homeplug_av_hp10df,
6107 { "Homeplug AV version 1.0", "homeplug_av.hp10df",
6108 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_HP10DF_MASK, NULL, HFILL }
6110 { &hf_homeplug_av_hp11df,
6111 { "Homeplug AV version 1.1", "homeplug_av.hp11df",
6112 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_HP11DF_MASK, NULL, HFILL }
6114 { &hf_homeplug_av_svn,
6115 { "Sack version number", "homeplug_av.svn",
6116 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_SVN_MASK, NULL, HFILL }
6118 { &hf_homeplug_av_rrtf,
6119 { "Request reverse transmission flag", "homeplug_av.rrtf",
6120 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_RRTF_MASK, NULL, HFILL }
6122 { &hf_homeplug_av_fl_av,
6123 { "Frame length", "homeplug_av.fl_av",
6124 FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_FL_AV_MASK, NULL, HFILL }
6126 { &hf_homeplug_av_ppb,
6127 { "Pending PHY blocks", "homeplug_av.ppb",
6128 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6130 { &hf_homeplug_av_mfs_rsp_data,
6131 { "Data MAC Frame Stream Response", "homeplug_av.sack.mfs_rsp_data",
6132 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_RSP_DATA_MASK << 4, NULL, HFILL }
6134 { &hf_homeplug_av_mfs_rsp_mgmt,
6135 { "Management MAC Frame Stream Response", "homeplug_av.sack.mfs_rsp_mgmt",
6136 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_RSP_MGMT_MASK << 4, NULL, HFILL }
6138 /* Frame Control */
6139 { &hf_homeplug_av_sof,
6140 { "Start of Frame Variant Fields", "homeplug_av.sof",
6141 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6143 { &hf_homeplug_av_sof_peks,
6144 { "Payload Encryption Key Select", "homeplug_av.sof.peks",
6145 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &homeplug_av_peks_vals_ext, HOMEPLUG_AV_SOF_PEKS_MASK, NULL, HFILL }
6147 { &hf_homeplug_av_sof_ble,
6148 { "Bit loading estimate", "homeplug_av.sof.ble",
6149 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6151 { &hf_homeplug_av_sof_pbsz,
6152 { "PHY block size", "homeplug_av.sof.pbsz",
6153 FT_BOOLEAN, 8, TFS(&homeplug_av_phy_block_size_vals), HOMEPLUG_AV_PBSZ_MASK, NULL, HFILL }
6155 { &hf_homeplug_av_sof_num_sym,
6156 { "Number of symbols", "homeplug_av.sof.num_sym",
6157 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_NUM_SYM_MASK, NULL, HFILL }
6159 { &hf_homeplug_av_sof_tmi_av,
6160 { "Tonemap index", "homeplug_av.sof.tmi_av",
6161 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_TMI_AV_MASK, NULL, HFILL }
6163 { &hf_homeplug_av_sof_mpdu_cnt,
6164 { "MPDU count", "homeplug_av.sof.mpdu_cnt",
6165 FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_SOF_MPDU_CNT_MASK, NULL, HFILL }
6167 { &hf_homeplug_av_sof_burst_cnt,
6168 { "Burst count", "homeplug_av.sof.burst_cnt",
6169 FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_BURST_CNT_MASK, NULL, HFILL }
6171 { &hf_homeplug_av_sof_bbf,
6172 { "Bidirectional Burst", "homeplug_av.sof.bbf",
6173 FT_BOOLEAN, 8, TFS(&homeplug_av_bbf_vals), HOMEPLUG_AV_BBF_MASK, NULL, HFILL }
6175 { &hf_homeplug_av_sof_mrtfl,
6176 { "Max Reverse Transmission Frame Length", "homeplug_av.sof.mrtfl",
6177 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_MRTLF_MASK, NULL, HFILL }
6179 { &hf_homeplug_av_sof_dccpcf,
6180 { "Different CP PHY clock", "homeplug_av.sof.dccpcf",
6181 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_DCCPCF_MASK, NULL, HFILL }
6183 { &hf_homeplug_av_sof_mcf,
6184 { "Multicast", "homeplug_av.sof.mcf",
6185 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_MCF_MASK, NULL, HFILL }
6187 { &hf_homeplug_av_sof_mnbf,
6188 { "Multinetwork broadcast", "homeplug_av.sof.mnbf",
6189 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_MNBF_MASK, NULL, HFILL }
6191 { &hf_homeplug_av_sof_rsr,
6192 { "Request SACK retransmission", "homeplug_av.sof.rsr",
6193 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_RSR_MASK, NULL, HFILL }
6195 { &hf_homeplug_av_sof_clst,
6196 { "Convergence layer SAP type", "homeplug_av.sof.clst",
6197 FT_BOOLEAN, 8, TFS(&homeplug_av_clst_vals), HOMEPLUG_AV_CLST_MASK, NULL, HFILL }
6199 { &hf_homeplug_av_sof_mfs_cmd_mgmt,
6200 { "Management MAC Frame Stream Command", "homeplug_av.sof.mfs_cmd_mgmt",
6201 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_MFS_MGMT_MASK, NULL, HFILL }
6203 { &hf_homeplug_av_sof_mfs_cmd_data,
6204 { "Data MAC Frame Stream Command", "homeplug_av.sof.mfs_data_mgmt",
6205 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_MFS_DATA_MASK, NULL, HFILL }
6207 { &hf_homeplug_av_sof_mfs_rsp_mgmt,
6208 { "Management MAC Frame Stream Response", "homeplug_av.sof.mfs_rsp_mgmt",
6209 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_SOF_RSP_MGMT_MASK, NULL, HFILL }
6211 { &hf_homeplug_av_sof_mfs_rsp_data,
6212 { "Data MAC Frame Stream Response", "homeplug_av.sof.mfs_rsp_data",
6213 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_SOF_RSP_DATA_MASK, NULL, HFILL }
6215 { &hf_homeplug_av_sof_bm_sack,
6216 { "Bit Map SACK", "homeplug_av.sof.bm_sack",
6217 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_BM_SACK_MASK, NULL, HFILL }
6219 /* Selective Acknowledgement */
6220 { &hf_homeplug_av_sack,
6221 { "Selective Acknowledgment Variant Fields", "homeplug_av.sack",
6222 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}
6224 /* Request to Send/Clear to Send */
6225 { &hf_homeplug_av_rtscts,
6226 { "Request to Send/Clear to Send Variant Fields", "homeplug_av.rtscts",
6227 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6229 { &hf_homeplug_av_rtscts_rtsf,
6230 { "RTS Flag", "homeplug_av.rtscts.rtsf",
6231 FT_BOOLEAN, 8, TFS(&homeplug_av_rtsf_vals), HOMEPLUG_AV_RTSF_MASK, NULL, HFILL }
6233 { &hf_homeplug_av_rtscts_igf,
6234 { "Immediate Grant Flag", "homeplug_av.rtscts.igf",
6235 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_IGF_MASK, NULL, HFILL }
6237 { &hf_homeplug_av_rtscts_mnbf,
6238 { "Multinetwork Broadcast Flag", "homeplug_av.rtscts.mnbf",
6239 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_RTSCTS_MNBF_MASK, NULL, HFILL }
6241 { &hf_homeplug_av_rtscts_mcf,
6242 { "Multicast Flag", "homeplug_av.rtscts.mcf",
6243 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_RTSCTS_MCF_MASK, NULL, HFILL }
6245 { &hf_homeplug_av_rtscts_dur,
6246 { "Duration", "homeplug_av.rtscts.dur",
6247 FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_DUR_MASK, NULL, HFILL }
6249 /* Sound */
6250 { &hf_homeplug_av_sound,
6251 { "Sound Variant Fields", "homeplug_av.sound",
6252 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6254 { &hf_homeplug_av_sound_pbsz,
6255 { "PHY Block Size", "homeplug_av.sound.pbsz",
6256 FT_BOOLEAN, 8, TFS(&homeplug_av_phy_block_size_vals), HOMEPLUG_AV_SOUND_PBSZ_MASK, NULL, HFILL }
6258 { &hf_homeplug_av_sound_bdf,
6259 { "Beacon Detect Flag", "homeplug_av.sound.bdf",
6260 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_SOUND_BDF_MASK, NULL, HFILL }
6262 { &hf_homeplug_av_sound_saf,
6263 { "Sound ACK Flag", "homeplug_av.sound.saf",
6264 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_SAF_MASK, NULL, HFILL }
6266 { &hf_homeplug_av_sound_scf,
6267 { "Sound Complete Flag", "homeplug_av.sound.scf",
6268 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_SCF_MASK, NULL, HFILL }
6270 { &hf_homeplug_av_sound_req_tm,
6271 { "Max Tone Maps Requested", "homeplug_av.sound.req_tm",
6272 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_REQ_TM_MASK, NULL, HFILL }
6274 { &hf_homeplug_av_sound_mpdu_cnt,
6275 { "MPDU Count", "homeplug_av.sound.mpdu_cnt",
6276 FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_SOUND_MPDU_CNT_MASK, NULL, HFILL }
6278 { &hf_homeplug_av_sound_src,
6279 { "Sound Reason Code", "homeplug_av.sound.src",
6280 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6282 { &hf_homeplug_av_sound_add_req_tm,
6283 { "Additional Tone Maps Requested", "homeplug_av.sound.add_req_tm",
6284 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_ADD_REQ_TM_MASK, NULL, HFILL }
6286 { &hf_homeplug_av_sound_max_pb_sym,
6287 { "Max PBs per Symbol", "homeplug_av.sound.max_pb_sym",
6288 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_MAX_PB_SYM_MASK, NULL, HFILL }
6290 { &hf_homeplug_av_sound_ecsf,
6291 { "Extended Carriers Support Flag", "homeplug_av.sound.ecsf",
6292 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_ECSF_MASK, NULL, HFILL }
6294 { &hf_homeplug_av_sound_ecuf,
6295 { "Extended Carriers Used Flag", "homeplug_av.sound.hf_homeplug_av_sound_ecuf",
6296 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_ECUF_MASK, NULL, HFILL }
6298 { &hf_homeplug_av_sound_ems,
6299 { "Extended Modulation Support", "homeplug_av.sound.ems",
6300 FT_UINT8, BASE_HEX, VALS(homeplug_av_ems_vals), HOMEPLUG_AV_EMS_MASK, NULL, HFILL }
6302 { &hf_homeplug_av_sound_esgisf,
6303 { "Extended Smaller Guard Interval Support Flag", "homeplug_av.sound.esgisf",
6304 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_ESGISF_MASK, NULL, HFILL }
6306 { &hf_homeplug_av_sound_elgisf,
6307 { "Extended Larger Guard Interval Support Flag", "homeplug_av.sound.elgisf",
6308 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_ELGISF_MASK, NULL, HFILL }
6310 { &hf_homeplug_av_sound_efrs,
6311 { "Extended FEC Rate Support", "homeplug_av.sound.efrs",
6312 FT_UINT8, BASE_HEX, VALS(homeplug_av_efrs_vals), HOMEPLUG_AV_EFRS_MASK, NULL, HFILL }
6314 /* Reverse Start of Frame */
6315 { &hf_homeplug_av_rsof,
6316 { "Reverse Start of Frame Variant Fields", "homeplug_av.rsof",
6317 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6319 { &hf_homeplug_av_rsof_fl,
6320 { "Reverse SOF Frame Length", "homeplug_av.rsof.fl",
6321 FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_RSOF_FL_MASK, NULL, HFILL }
6323 { &hf_homeplug_av_rsof_tmi,
6324 { "Tone Map Index", "homeplug_av.rsof.tmi",
6325 FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_RSOF_TMI_MASK, NULL, HFILL }
6327 { &hf_homeplug_av_rsof_pbsz,
6328 { "PHY Block Size", "homeplug_av.rsof.pbsz",
6329 FT_BOOLEAN, 16, TFS(&homeplug_av_phy_block_size_vals), HOMEPLUG_AV_RSOF_PBSZ_MASK, NULL, HFILL }
6331 { &hf_homeplug_av_rsof_num_sym,
6332 { "Number of Symbols", "homeplug_av.rsof.num_sym",
6333 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_RSOF_NUM_SYM_MASK, NULL, HFILL }
6335 { &hf_homeplug_av_rsof_mfs_cmd_mgmt,
6336 { "Management MAC Frame Stream Command", "homeplug_av.rsof.mfs_cmd_mgmt",
6337 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_MFS_MGMT_MASK, NULL, HFILL }
6339 { &hf_homeplug_av_rsof_mfs_cmd_data,
6340 { "Data MAC Frame Stream Command", "homeplug_av.rsof.mfs_cmd_data",
6341 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_MFS_DATA_MASK, NULL, HFILL }
6343 /* Beacon body */
6344 { &hf_homeplug_av_bcn,
6345 { "Beacon Variant Fields", "homeplug_av.bcn",
6346 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6348 { &hf_homeplug_av_bcn_bts,
6349 { "Beacon timestamp", "homeplug_av.bcn.bts",
6350 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
6352 { &hf_homeplug_av_bcn_bto_0,
6353 { "Beacon transmission offset 0", "homeplug_av.bcn.bto_0",
6354 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6356 { &hf_homeplug_av_bcn_bto_1,
6357 { "Beacon transmission offset 1", "homeplug_av.bcn.bto_1",
6358 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6360 { &hf_homeplug_av_bcn_bto_2,
6361 { "Beacon transmission offset 2", "homeplug_av.bcn.bto_2",
6362 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6364 { &hf_homeplug_av_bcn_bto_3,
6365 { "Beacon transmission offset 3", "homeplug_av.bcn.bto_3",
6366 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6368 { &hf_homeplug_av_bcn_payload,
6369 { "Beacon MPDU payload", "homeplug_av.bcn.payload",
6370 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6372 { &hf_homeplug_av_bcn_nid,
6373 { "Network ID", "homeplug_av.bcn.nid",
6374 FT_UINT56, BASE_HEX, NULL, HOMEPLUG_AV_BCN_NID_MASK, NULL, HFILL }
6376 { &hf_homeplug_av_bcn_hm,
6377 { "Hybrid Mode", "homeplug_av.bcn.hm",
6378 FT_UINT56, BASE_HEX | BASE_VAL64_STRING, VALS64(homeplug_av_bcn_hm_vals), HOMEPLUG_AV_HM_MASK, NULL, HFILL }
6380 { &hf_homeplug_av_bcn_stei,
6381 { "Source Terminal Equipment ID", "homeplug_av.bcn.stei",
6382 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
6384 { &hf_homeplug_av_bcn_type,
6385 { "Beacon type", "homeplug_av.bcn.type",
6386 FT_UINT8, BASE_HEX, VALS(homeplug_av_bcn_type_vals), HOMEPLUG_AV_BCN_TYPE_MASK, NULL, HFILL }
6388 { &hf_homeplug_av_bcn_ncnr,
6389 { "Non-coordinating networks reported", "homeplug_av.bcn.ncnr",
6390 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_NCNR_MASK, NULL, HFILL }
6392 { &hf_homeplug_av_bcn_npsm,
6393 { "Network Power Save Mode", "homeplug_av.bcn.npsm",
6394 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_NPSM_MASK, NULL, HFILL }
6396 { &hf_homeplug_av_bcn_num_slots,
6397 { "Number of Beacon Slots", "homeplug_av.bcn.num_slots",
6398 FT_UINT8, BASE_HEX, VALS(homeplug_av_bcn_slot_vals), HOMEPLUG_AV_NUM_SLOTS_MASK, NULL, HFILL }
6400 { &hf_homeplug_av_bcn_slot_use,
6401 { "Beacon Slot Usage (bitmapped)", "homeplug_av.bcn.slot_usage",
6402 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
6404 { &hf_homeplug_av_bcn_slot_id,
6405 { "Beacon Slot ID", "homeplug_av.bcn.slot_id",
6406 FT_UINT8, BASE_HEX, VALS(homeplug_av_bcn_slot_vals), HOMEPLUG_AV_SLOT_ID_MASK, NULL, HFILL }
6408 { &hf_homeplug_av_bcn_aclss,
6409 { "AC Line Synchronization Status", "homeplug_av.bcn.aclss",
6410 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_ACLSS_MASK, NULL, HFILL }
6412 { &hf_homeplug_av_bcn_hoip,
6413 { "Hand-Off in progress", "homeplug_av.bcn.hoip",
6414 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_HOIP_MASK, NULL, HFILL }
6416 { &hf_homeplug_av_bcn_rtsbf,
6417 { "RTS Broadcast Flag", "homeplug_av.bcn.rtsbf",
6418 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_RTSBF_MASK, NULL, HFILL }
6420 { &hf_homeplug_av_bcn_nm,
6421 { "Network Mode", "homeplug_av.bcn.nm",
6422 FT_UINT8, BASE_DEC, VALS(homeplug_av_bcn_nm_vals), HOMEPLUG_AV_NM_MASK, NULL, HFILL }
6424 { &hf_homeplug_av_bcn_cco_cap,
6425 { "CCo Capabilities", "homeplug_av.bcn.cco_cap",
6426 FT_UINT8, BASE_DEC, VALS(homeplug_av_bcn_cco_cap_vals), HOMEPLUG_AV_CCO_CAP_MASK, NULL, HFILL }
6428 { &hf_homeplug_av_bcn_rsf,
6429 { "Reusable SNID?", "homeplug_av.bcn.rsf",
6430 FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_RSF_MASK, NULL, HFILL }
6432 { &hf_homeplug_av_bcn_plevel,
6433 { "Proxy level", "homeplug_av.bcn.plevel",
6434 FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_PLEVEL_MASK, NULL, HFILL }
6436 { &hf_homeplug_av_bcn_bentries,
6437 { "Beacon entries and padding", "homeplug_av.bcn.bentries",
6438 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
6440 { &hf_homeplug_av_bcn_bpcs,
6441 { "Beacon payload check sequence", "homeplug_av.bcn.bpcs",
6442 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
6444 /* Central Coordination Discovery List Confirmation */
6445 { &hf_homeplug_av_cc_disc_list_cnf,
6446 { "Central Coordination Discovery List Confirmation", "homeplug_av.cc_disc_list_cnf",
6447 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6449 /* Station informations */
6450 { &hf_homeplug_av_cc_disc_list_sta_cnt,
6451 { "Station count", "homeplug_av.cc_disc_list_cnf.sta_cnt",
6452 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6454 { &hf_homeplug_av_cc_sta_info,
6455 { "Station information", "homeplug_av.cc_disc_list_cnf.sta_info",
6456 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6458 { &hf_homeplug_av_cc_sta_info_mac,
6459 { "MAC address", "homeplug_av.cc_disc_list_cnf.sta_info.mac",
6460 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
6462 { &hf_homeplug_av_cc_sta_info_tei,
6463 { "Terminal Equipment Identifier", "homeplug_av.cc_disc_list_cnf.sta_info.tei",
6464 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6466 { &hf_homeplug_av_cc_sta_info_same_net,
6467 { "Network type", "homeplug_av.cc_disc_list_cnf.sta_info.same_net",
6468 FT_UINT8, BASE_HEX, VALS(homeplug_av_cc_sta_net_type_vals), HOMEPLUG_AV_CC_STA_NET_MASK, NULL, HFILL }
6470 { &hf_homeplug_av_cc_sta_info_sig_level,
6471 { "Signal level", "homeplug_av.cc_disc_list_cnf.sta_info.sig_level",
6472 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &homeplug_av_sig_level_vals_ext, 0x00, "Reserved", HFILL }
6474 { &hf_homeplug_av_cc_sta_info_avg_ble,
6475 { "Average BLE", "homeplug_av.cc_disc_list_cnf.sta_info.avg_ble",
6476 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6478 /* Network infos */
6479 { &hf_homeplug_av_cc_disc_list_net_cnt,
6480 { "Network count", "homeplug_av.cc_disc_list_cnf.net_cnt",
6481 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6483 { &hf_homeplug_av_cc_net_info,
6484 { "Network information", "homeplug_av.cc_disc_list_cnf.net_info",
6485 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6487 { &hf_homeplug_av_cc_net_info_hyb_mode,
6488 { "Hybrid mode", "homeplug_av.cc_disc_list_cnf.net_info.hyb_mode",
6489 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
6491 { &hf_homeplug_av_cc_net_info_bcn_slots,
6492 { "Beacon slots", "homeplug_av.cc_disc_list_cnf.net_info.bcn_slots",
6493 FT_UINT8, BASE_DEC, NULL, 0x08, "Reserved", HFILL }
6495 { &hf_homeplug_av_cc_net_info_cco_sts,
6496 { "Coordinating status", "homeplug_av.cc_disc_list_cnf.net_info.cco_status",
6497 FT_UINT8, BASE_HEX, VALS(homeplug_av_cco_status_vals), HOMEPLUG_AV_CCO_STATUS_MASK, NULL, HFILL }
6499 { &hf_homeplug_av_cc_net_info_bcn_ofs,
6500 { "Beacon offset", "homeplug_av.cc_disc_list_cnf.net_info.bcn_ofs",
6501 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6503 /* Shared encrypted related fields */
6504 { &hf_homeplug_av_nw_info_peks,
6505 { "Payload Encryption Key Select", "homeplug_av.nw_info.peks",
6506 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &homeplug_av_peks_vals_ext, HOMEPLUG_AV_PEKS_MASK, NULL, HFILL }
6508 { &hf_homeplug_av_nw_info_pid,
6509 { "Protocol ID", "homeplug_av.nw_info.pid",
6510 FT_UINT8, BASE_HEX, VALS(homeplug_av_pid_vals), HOMEPLUG_AV_PID_MASK, "Reserved", HFILL }
6512 { &hf_homeplug_av_nw_info_prn,
6513 { "Protocol run number", "homeplug_av.nw_info.prn",
6514 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6516 { &hf_homeplug_av_nw_info_pmn,
6517 { "Protocol message number", "homeplug_av.nw_info.pmn",
6518 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6520 { &hf_homeplug_av_nw_info_my_nonce,
6521 { "My nonce", "homeplug_av.nw_info.my_nonce",
6522 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
6524 { &hf_homeplug_av_nw_info_your_nonce,
6525 { "Your nonce", "homeplug_av.nw_info.your_nonce",
6526 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
6528 { &hf_homeplug_av_nw_info_cco_cap,
6529 { "CCo capabilities", "homeplug_av.nw_info.cco_cap",
6530 FT_UINT8, BASE_HEX, VALS(homeplug_av_nw_info_role_vals), HOMEPLUG_AV_NW_INFO_ROLE_MASK, NULL, HFILL }
6532 { &hf_homeplug_av_nw_info_key_type,
6533 { "Key type", "homeplug_av.nw_info.key_type",
6534 FT_UINT8, BASE_HEX, VALS(homeplug_av_key_type_vals), HOMEPLUG_AV_KEY_TYPE_MASK, NULL, HFILL }
6536 /* Encrypted Payload Indicate */
6537 { &hf_homeplug_av_cm_enc_pld_ind,
6538 { "Encrypted Payload Indicate", "homeplug_av.cm_enc_pld_ind",
6539 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6541 { &hf_homeplug_av_cm_enc_pld_ind_avlns,
6542 { "AVLN status", "homeplug_av.cm_enc_pld_ind.avlns",
6543 FT_UINT8, BASE_HEX, VALS(homeplug_av_avln_status_vals), HOMEPLUG_AV_AVLN_STATUS_MASK, "Reserved", HFILL }
6545 { &hf_homeplug_av_cm_enc_pld_ind_iv,
6546 { "Initialization vector", "homeplug_av.cm_enc_pld_ind.iv",
6547 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
6549 { &hf_homeplug_av_cm_enc_pld_ind_uuid,
6550 { "UUID", "homeplug_av.cm_enc_pld_ind.uuid",
6551 FT_GUID, BASE_NONE, NULL, 0x0, NULL, HFILL }
6553 { &hf_homeplug_av_cm_enc_pld_ind_len,
6554 { "Length", "homeplug_av.cm_enc_pld_ind.len",
6555 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6557 { &hf_homeplug_av_cm_enc_pld_ind_pld,
6558 { "Encrypted payload", "homeplug_av.cm_enc_pld_ind.pld",
6559 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6561 /* Encrypted Payload Response */
6562 { &hf_homeplug_av_cm_enc_pld_rsp,
6563 { "Encrypted Payload Response", "homeplug_av.cm_enc_pld_rsp",
6564 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6566 { &hf_homeplug_av_cm_enc_pld_rsp_result,
6567 { "Result", "homeplug_av.cm_enc_pld_rsp.result",
6568 FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
6570 /* Set Key Request */
6571 { &hf_homeplug_av_cm_set_key_req,
6572 { "Set Key Request", "homeplug_av.cm_set_key_req",
6573 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6575 { &hf_homeplug_av_cm_set_key_req_nw_key,
6576 { "New Key", "homeplug_av.cm_set_key_req.nw_key",
6577 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
6579 /* Set Key Confirmation */
6580 { &hf_homeplug_av_cm_set_key_cnf,
6581 { "Set Key Confirmation", "homeplug_av.cm_set_key_cnf",
6582 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6584 { &hf_homeplug_av_cm_set_key_cnf_result,
6585 { "Result", "homeplug_av.cm_set_key_cnf.result",
6586 FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
6588 /* Get Key Request */
6589 { &hf_homeplug_av_cm_get_key_req,
6590 { "Get Key request", "homeplug_av.cm_get_key_req",
6591 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6593 { &hf_homeplug_av_cm_get_key_req_type,
6594 { "Request type", "homeplug_av.cm_get_key_req.type",
6595 FT_UINT8, BASE_HEX, VALS(homeplug_av_req_type_vals), HOMEPLUG_AV_REQ_TYPE_MASK, "Reserved", HFILL }
6597 { &hf_homeplug_av_cm_get_key_req_has_key,
6598 { "Hash key", "homeplug_av.cm_get_key_req.hash_key",
6599 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
6601 /* Get Key Confirmation */
6602 { &hf_homeplug_av_cm_get_key_cnf,
6603 { "Get Key Confirmation", "homeplug_av.cm_get_key_cnf",
6604 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6606 { &hf_homeplug_av_cm_get_key_cnf_result,
6607 { "Result", "homeplug_av.cm_get_key_cnf.result",
6608 FT_UINT8, BASE_HEX, VALS(homeplug_av_key_result_vals), HOMEPLUG_AV_KEY_RESULT_MASK, NULL, HFILL }
6610 { &hf_homeplug_av_cm_get_key_cnf_rtype,
6611 { "Requested key type", "homeplug_av.cm_get_key_cnf.rtype",
6612 FT_UINT8, BASE_HEX, VALS(homeplug_av_key_type_vals), HOMEPLUG_AV_KEY_TYPE_MASK, NULL, HFILL }
6614 { &hf_homeplug_av_cm_get_key_cnf_key,
6615 { "Encryption/Hash key", "homeplug_av.cm_get_key_cnf.key",
6616 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
6618 /* Get Bridge Informations Confirmation */
6619 { &hf_homeplug_av_brg_infos_cnf,
6620 { "Get Bridge Informations Confirmation", "homeplug_av.brg_infos_cnf",
6621 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6623 { &hf_homeplug_av_brg_infos_cnf_brd,
6624 { "Bridging", "homeplug_av.brg_infos_cnf.brd",
6625 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }
6627 { &hf_homeplug_av_brg_infos_cnf_btei,
6628 { "Bridge Terminal Equipment Identifier", "homeplug_av.brg_infos_cnf.btei",
6629 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6631 { &hf_homeplug_av_brg_infos_cnf_num_stas,
6632 { "Number of stations", "homeplug_av.brg_infos_cnf.num_stas",
6633 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6635 { &hf_homeplug_av_brg_infos_cnf_mac,
6636 { "Bridged Destination Address", "homeplug_av.brg_infos_cnf.mac",
6637 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
6639 /* Get Network Informations Confirmation */
6640 { &hf_homeplug_av_cm_nw_infos_cnf,
6641 { "Get Network Informations Confirmation", "homeplug_av.nw_infos_cnf",
6642 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6644 /* Get Network Statistics Confirmation */
6645 { &hf_homeplug_av_nw_stats_cnf,
6646 { "Get Network Statistics Confirmation", "homeplug_av.nw_stats_cnf",
6647 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6649 /* Vendor Specific */
6650 { &hf_homeplug_av_vendor,
6651 { "Vendor MME", "homeplug_av.vendor",
6652 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6654 { &hf_homeplug_av_vendor_oui,
6655 { "OUI", "homeplug_av.vendor.oui",
6656 FT_UINT24, BASE_HEX, VALS(homeplug_av_vendors_oui_vals), 0x0, NULL, HFILL }
6658 /* Get Device/SW Version */
6659 { &hf_homeplug_av_get_sw_cnf,
6660 { "Get Device/SW Version", "homeplug_av.get_sw_cnf",
6661 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6663 { &hf_homeplug_av_get_sw_cnf_status,
6664 { "Status", "homeplug_av.get_sw_cnf.status",
6665 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6667 { &hf_homeplug_av_get_sw_cnf_dev_id,
6668 { "Device ID", "homeplug_av.get_sw_cnf.dev_id",
6669 FT_UINT8, BASE_HEX, VALS(homeplug_av_dev_id_vals), HOMEPLUG_AV_DEV_ID_MASK, NULL, HFILL }
6671 { &hf_homeplug_av_get_sw_cnf_ver_len,
6672 { "Version length", "homeplug_av.get_sw_cnf.ver_len",
6673 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6675 { &hf_homeplug_av_get_sw_cnf_ver_str,
6676 { "Version", "homeplug_av.get_sw_cnf.ver_str",
6677 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
6679 { &hf_homeplug_av_get_sw_cnf_upg,
6680 { "Upgradable", "homeplug_av.get_sw_cnf.upg",
6681 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }
6683 /* Write MAC Memory Request */
6684 { &hf_homeplug_av_wr_mem_req,
6685 { "Write MAC Memory Request", "homeplug_av.wr_mem_req",
6686 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6688 { &hf_homeplug_av_mem_addr,
6689 { "Address", "homeplug_av.mem.addr",
6690 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
6692 { &hf_homeplug_av_mem_len_32bits,
6693 { "Length", "homeplug_av.mem.len_32bits",
6694 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
6696 /* Write MAC Memory Confirmation */
6697 { &hf_homeplug_av_wr_mem_cnf,
6698 { "Write MAC Memory Confirmation", "homeplug_av.wr_mem_cnf",
6699 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6701 /* Read MAC Memory Request */
6702 { &hf_homeplug_av_rd_mem_req,
6703 { "Read MAC Memory Request", "homeplug_av.rd_mem_req",
6704 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6706 { &hf_homeplug_av_rd_mem_cnf,
6707 { "Read MAC Memory Confirmation", "homeplug_av.rd_mem_cnf",
6708 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6710 /* Start MAC Request */
6711 { &hf_homeplug_av_st_mac_req,
6712 { "Start MAC Request", "homeplug_av.st_mac_req",
6713 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6715 { &hf_homeplug_av_st_mac_req_img_load,
6716 { "Image Load Starting Address", "homeplug_av.st_mac_req.img_load",
6717 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
6719 { &hf_homeplug_av_st_mac_req_img_len,
6720 { "Image Length", "homeplug_av.st_mac_req.img_len",
6721 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
6723 { &hf_homeplug_av_st_mac_req_img_chksum,
6724 { "Image Checksum", "homeplug_av.st_mac_req.img_chksum",
6725 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
6727 { &hf_homeplug_av_st_mac_req_img_start,
6728 { "Image Starting Address", "homeplug_av.st_mac_req.img_start",
6729 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
6731 /* Start MAC Confirmation */
6732 { &hf_homeplug_av_st_mac_cnf,
6733 { "Start MAC Confirmation", "homeplug_av.st_mac_cnf",
6734 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6736 { &hf_homeplug_av_st_mac_cnf_status,
6737 { "Module ID", "homeplug_av.st_mac_cnf.status",
6738 FT_UINT8, BASE_HEX, VALS(homeplug_av_st_mac_status_vals), 0x0, NULL, HFILL }
6740 /* Get NVM Parameters Confirmation */
6741 { &hf_homeplug_av_get_nvm_cnf,
6742 { "Get NVM Parameters Confirmation", "homeplug_av.get_nvm_cnf",
6743 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6745 { &hf_homeplug_av_get_nvm_cnf_status,
6746 { "Status", "homeplug_av.get_nvm_cnf.status",
6747 FT_UINT8, BASE_HEX, VALS(homeplug_av_get_nvm_status_vals), 0x0, NULL, HFILL }
6749 { &hf_homeplug_av_get_nvm_cnf_nvm_type,
6750 { "NVM Type", "homeplug_av.get_nvm_cnf.nvm_type",
6751 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
6753 { &hf_homeplug_av_get_nvm_cnf_nvm_page,
6754 { "NVM Page Size", "homeplug_av.get_nvm_cnf.nvm_page",
6755 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
6757 { &hf_homeplug_av_get_nvm_cnf_nvm_block,
6758 { "NVM Block Size", "homeplug_av.get_nvm_cnf.nvm_block",
6759 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
6761 { &hf_homeplug_av_get_nvm_cnf_nvm_size,
6762 { "NVM Memory Size", "homeplug_av.get_nvm_cnf.nvm_size",
6763 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
6765 /* Reset Device Confirmation */
6766 { &hf_homeplug_av_rs_dev_cnf,
6767 { "Reset Device Confirmation", "homeplug_av.rs_dev_cnf",
6768 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6770 { &hf_homeplug_av_rs_dev_cnf_status,
6771 { "Status", "homeplug_av.rs_dev_cnf.status",
6772 FT_UINT8, BASE_HEX, VALS(homeplug_av_rs_dev_status_vals), 0x0, NULL, HFILL }
6774 /* Shared memory related fields */
6775 { &hf_homeplug_av_mem_len_16bits,
6776 { "Length", "homeplug_av.mem.len_16bits",
6777 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6779 { &hf_homeplug_av_mem_offset,
6780 { "Offset", "homeplug_av.mem.offset",
6781 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
6783 { &hf_homeplug_av_mem_checksum,
6784 { "Checksum", "homeplug_av.mem.checksum",
6785 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
6787 { &hf_homeplug_av_mem_data,
6788 { "Data", "homeplug_av.mem.data",
6789 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6791 { &hf_homeplug_av_mem_status,
6792 { "Status", "homeplug_av.mem.status",
6793 FT_UINT8, BASE_HEX, VALS(homeplug_av_wr_rd_mem_status_vals), 0x0, NULL, HFILL }
6795 /* Write Module Data Request */
6796 { &hf_homeplug_av_wr_mod_req,
6797 { "Write Module Data Request", "homeplug_av.wr_mod_req",
6798 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6800 /* Write Module Data Confirmation */
6801 { &hf_homeplug_av_wr_mod_cnf,
6802 { "Write Module Data Confirmation", "homeplug_av.wr_mod_cnf",
6803 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6805 { &hf_homeplug_av_wr_mod_cnf_status,
6806 { "Status", "homeplug_av.wr_mod_cnf.status",
6807 FT_UINT8, BASE_HEX, VALS(homeplug_av_wr_rd_mod_cnf_status_vals), 0x0, NULL, HFILL }
6809 /* Write Module Data Indicate */
6810 { &hf_homeplug_av_wr_mod_ind,
6811 { "Write Module Data Indicate", "homeplug_av.wr_mod_ind",
6812 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6814 { &hf_homeplug_av_wr_mod_ind_status,
6815 { "Status", "homeplug_av.wr_mod_ind.status",
6816 FT_UINT8, BASE_HEX, VALS(homeplug_av_wr_mod_ind_status_vals), 0x0, NULL, HFILL }
6818 /* Read Module Data Request */
6819 { &hf_homeplug_av_rd_mod_req,
6820 { "Read Module Data Request", "homeplug_av.rd_mod_req",
6821 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6823 /* Read Module Data Confirmation */
6824 { &hf_homeplug_av_rd_mod_cnf,
6825 { "Read Module Data Confirmation", "homeplug_av.rd_mod_cnf",
6826 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6828 { &hf_homeplug_av_rd_mod_cnf_status,
6829 { "Status", "homeplug_av.rd_mod_cnf.status",
6830 FT_UINT8, BASE_HEX, VALS(homeplug_av_wr_rd_mod_cnf_status_vals), 0x0, NULL, HFILL }
6832 { &hf_homeplug_av_mac_module_id,
6833 { "Module ID", "homeplug_av.module_id",
6834 FT_UINT8, BASE_HEX, VALS(homeplug_av_mac_module_id_vals), 0x0, NULL, HFILL }
6836 /* Write Module Data to NVM Request */
6837 { &hf_homeplug_av_mod_nvm_req,
6838 { "Write Module Data to NVM Request", "homeplug_av.mod_nvm_req",
6839 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6841 /* Write Module Data to NVM Confirmation */
6842 { &hf_homeplug_av_mod_nvm_cnf,
6843 { "Write Module Data to NVM Confirmation", "homeplug_av.mod_nvm_cnf",
6844 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6846 { &hf_homeplug_av_mod_nvm_cnf_status,
6847 { "Status", "homeplug_av.mod_nvm_cnf.status",
6848 FT_UINT8, BASE_HEX, VALS(homeplug_av_mod_nvm_status_vals), 0x0, NULL, HFILL }
6850 /* Get Watchdog Report Request */
6851 { &hf_homeplug_av_wd_rpt_req,
6852 { "Get Watchdog Report Request", "homeplug_av.wd_rpt_req",
6853 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6855 { &hf_homeplug_av_wd_rpt_req_session_id,
6856 { "Session ID", "homeplug_av.wd_rpt_req.session_id",
6857 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6859 { &hf_homeplug_av_wd_rpt_req_clr,
6860 { "Clear flag", "homeplug_av.wd_rpt_req.clr",
6861 FT_UINT8, BASE_HEX, VALS(homeplug_av_rpt_clr_vals), HOMEPLUG_AV_RPT_CLR_MASK, "Unknown", HFILL }
6863 /* Get Watchdog Report Indicate */
6864 { &hf_homeplug_av_wd_rpt_ind,
6865 { "Get Watchdog Report Indicate", "homeplug_av.wd_rpt_ind",
6866 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6868 { &hf_homeplug_av_wd_rpt_ind_status,
6869 { "Status", "homeplug_av.wd_rpt_ind.status",
6870 FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, "Unknown", HFILL }
6872 { &hf_homeplug_av_wd_rpt_ind_session_id,
6873 { "Session ID", "homeplug_av.wd_rpt_ind.session_id",
6874 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6876 { &hf_homeplug_av_wd_rpt_ind_num_parts,
6877 { "Number of parts", "homeplug_av.wd_rpt_ind.num_parts",
6878 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6880 { &hf_homeplug_av_wd_rpt_ind_curr_part,
6881 { "Current Part", "homeplug_av.wd_rpt_ind.curr_part",
6882 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6884 { &hf_homeplug_av_wd_rpt_ind_rdata_len,
6885 { "Report Data Length", "homeplug_av.wd_rpt_ind.rdata_len",
6886 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6888 { &hf_homeplug_av_wd_rpt_ind_rdata_ofs,
6889 { "Report Data Offset", "homeplug_av.wd_rpt_ind.rdata_offset",
6890 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
6892 { &hf_homeplug_av_wd_rpt_ind_rdata,
6893 { "Report Data", "homeplug_av.wd_rpt_ind.rdata",
6894 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6896 /* Link Statistics Request */
6897 { &hf_homeplug_av_lnk_stats_req,
6898 { "Link Statistics Request", "homeplug_av.lnk_stats_req",
6899 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6901 { &hf_homeplug_av_lnk_stats_req_mcontrol,
6902 { "Control", "homeplug_av.lnk_stats_req.mcontrol",
6903 FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_stats_mctrl_vals), HOMEPLUG_AV_LNK_STATS_MCTL_MASK, "Unknown", HFILL }
6905 { &hf_homeplug_av_lnk_stats_req_dir,
6906 { "Direction", "homeplug_av.lnk_stats_req.dir",
6907 FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_stats_dir_vals), HOMEPLUG_AV_LNK_STATS_DIR_MASK, "Unknown", HFILL }
6909 { &hf_homeplug_av_lnk_stats_req_lid,
6910 { "Link ID", "homeplug_av.lnk_stats_req.lid",
6911 FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_stats_lid_vals), 0x0, NULL, HFILL }
6913 { &hf_homeplug_av_lnk_stats_req_macaddr,
6914 { "Peer Node", "homeplug_av.lnk_stats_req.macaddr",
6915 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
6917 /* Link Statistics Confirmation */
6918 { &hf_homeplug_av_lnk_stats_cnf,
6919 { "Link Statistics Confirmation", "homeplug_av.lnk_stats_cnf",
6920 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6922 { &hf_homeplug_av_lnk_stats_cnf_status,
6923 { "Status", "homeplug_av.lnk_stats_cnf.status",
6924 FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_status_vals), 0x0, NULL, HFILL }
6926 { &hf_homeplug_av_lnk_stats_cnf_dir,
6927 { "Direction", "homeplug_av.lnk_stats_cnf.dir",
6928 FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_stats_dir_vals), HOMEPLUG_AV_LNK_STATS_DIR_MASK, "Unknown", HFILL }
6930 { &hf_homeplug_av_lnk_stats_cnf_lid,
6931 { "Link ID", "homeplug_av.lnk_stats_cnf.lid",
6932 FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_stats_lid_vals), 0x0, NULL, HFILL }
6934 { &hf_homeplug_av_lnk_stats_cnf_tei,
6935 { "TEI", "homeplug_av.lnk_stats_cnf.tei",
6936 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
6938 { &hf_homeplug_av_lnk_stats_cnf_lstats,
6939 { "Link statistics", "homeplug_av.lnk_stats_cnf.lstats",
6940 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6942 /* Link statistics members */
6943 { &hf_homeplug_av_lnk_stats_tx,
6944 { "Tx link statistics", "homeplug_av.lnk_stats.tx",
6945 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6947 { &hf_homeplug_av_lnk_stats_tx_mpdu_ack,
6948 { "Number of MPDUs Transmitted and Acknowledged", "homeplug_av.lnk_stats.tx.mpdu_ack",
6949 FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
6951 { &hf_homeplug_av_lnk_stats_tx_mpdu_col,
6952 { "Number of MPDUs Transmitted and Collided", "homeplug_av.lnk_stats.tx.mpdu_col",
6953 FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
6955 { &hf_homeplug_av_lnk_stats_tx_mpdu_fai,
6956 { "Number of MPDUs Transmitted and Failed", "homeplug_av.lnk_stats.tx.mpdu_fail",
6957 FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
6959 { &hf_homeplug_av_lnk_stats_tx_pbs_pass,
6960 { "Number of PB Transmitted Successfully", "homeplug_av.lnk_stats.tx.pbs_pass",
6961 FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
6963 { &hf_homeplug_av_lnk_stats_tx_pbs_fail,
6964 { "Number of PB Transmitted Unsuccessfully", "homeplug_av.lnk_stats.tx.pbs_fail",
6965 FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
6967 { &hf_homeplug_av_lnk_stats_rx,
6968 { "Rx link statistics", "homeplug_av.lnk_stats.rx",
6969 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6971 { &hf_homeplug_av_lnk_stats_rx_mpdu_ack,
6972 { "Number of MPDUs Received and Acknowledged", "homeplug_av.lnk_stats.rx.mdpu_ack",
6973 FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
6975 { &hf_homeplug_av_lnk_stats_rx_mpdu_fai,
6976 { "Number of MPDUs Received and Failed", "homeplug_av.lnk_stats.rx.mdpu_fail",
6977 FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
6979 { &hf_homeplug_av_lnk_stats_rx_pbs_pass,
6980 { "Number of PB Received Successfully", "homeplug_av.lnk_stats.rx.pbs_pass",
6981 FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
6983 { &hf_homeplug_av_lnk_stats_rx_pbs_fail,
6984 { "Number of PB Received Unsuccessfully", "homeplug_av.lnk_stats.rx.pbs_fail",
6985 FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
6987 { &hf_homeplug_av_lnk_stats_rx_tb_pass,
6988 { "Sum of Turbo Bit Error over successfully received PBs", "homeplug_av.lnk_stats.rx.tb_pass",
6989 FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
6991 { &hf_homeplug_av_lnk_stats_rx_tb_fail,
6992 { "Sum of Turbo Bit Error over unsuccessfully received PBs", "homeplug_av.lnk_stats.rx.tb_fail",
6993 FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
6995 { &hf_homeplug_av_lnk_stats_rx_num_int,
6996 { "Number of Tone Map Intervals", "homeplug_av.lnk_stats.rx.num_int",
6997 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6999 { &hf_homeplug_av_rx_inv_stats,
7000 { "Rx Interval Statistics", "homeplug_av.lnk_stats.rx.inv",
7001 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7003 { &hf_homeplug_av_rx_inv_phy_rate,
7004 { "Rx Phy Rate for Tone Map Interval 0", "homeplug_av.lnk_stats.rx.inv.phy_rate",
7005 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7007 { &hf_homeplug_av_rx_inv_pbs_pass,
7008 { "Number of PB Received Successfully", "homeplug_av.lnk_stats.rx.inv.pbs_pass",
7009 FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
7011 { &hf_homeplug_av_rx_inv_pbs_fail,
7012 { "Number of PB Received Unsuccessfully", "homeplug_av.lnk_stats.rx.inv.pbs_fail",
7013 FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
7015 { &hf_homeplug_av_rx_inv_tb_pass,
7016 { "Sum of the Turbo Bit Error over all PBs received successfully", "homeplug_av.lnk_stats.rx.inv.tb_pass",
7017 FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
7019 { &hf_homeplug_av_rx_inv_tb_fail,
7020 { "Sum of the Turbo Bit Error over all PBs received unsuccessfully", "homeplug_av.lnk_stats.rx.inv.tb_fail",
7021 FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
7023 /* Sniffer Request */
7024 { &hf_homeplug_av_sniffer_req,
7025 { "Sniffer Request", "homeplug_av.sniffer_req",
7026 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7028 { &hf_homeplug_av_sniffer_req_ctrl,
7029 { "Sniffer Control", "homeplug_av.sniffer_req.ctrl",
7030 FT_UINT8, BASE_HEX, VALS(homeplug_av_sniffer_ctrl_vals), HOMEPLUG_AV_SNIFFER_CTRL_MASK, NULL, HFILL }
7032 /* Sniffer Confirmation */
7033 { &hf_homeplug_av_sniffer_cnf,
7034 { "Sniffer Confirmation", "homeplug_av.sniffer_cnf",
7035 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7037 { &hf_homeplug_av_sniffer_cnf_status,
7038 { "Status", "homeplug_av.sniffer_cnf.status",
7039 FT_UINT8, BASE_HEX, VALS(homeplug_av_sniffer_status_vals), 0x0, NULL, HFILL }
7041 { &hf_homeplug_av_sniffer_cnf_state,
7042 { "State", "homeplug_av.sniffer_cnf.state",
7043 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }
7045 { &hf_homeplug_av_sniffer_cnf_da,
7046 { "Destination address", "homeplug_av.sniffer_cnf.da",
7047 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
7049 /* Sniffer Indicate */
7050 { &hf_homeplug_av_sniffer_ind,
7051 { "Sniffer Indicate", "homeplug_av.sniffer_ind",
7052 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7054 { &hf_homeplug_av_sniffer_ind_type,
7055 { "Sniffer Type", "homeplug_av.sniffer_ind.type",
7056 FT_UINT8, BASE_HEX, VALS(homeplug_av_sniffer_type_vals), 0x0, NULL, HFILL }
7058 { &hf_homeplug_av_sniffer_ind_data,
7059 { "Sniffer Data", "homeplug_av.sniffer_ind.data",
7060 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7062 { &hf_homeplug_av_sniffer_data_dir,
7063 { "Direction", "homeplug_av.sniffer_ind.data.dir",
7064 FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_stats_dir_vals), HOMEPLUG_AV_LNK_STATS_DIR_MASK, NULL, HFILL }
7066 { &hf_homeplug_av_sniffer_data_systime,
7067 { "System time", "homeplug_av.sniffer_ind.data.systime",
7068 FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
7070 { &hf_homeplug_av_sniffer_data_bc_time,
7071 { "Beacon time", "homeplug_av.sniffer_ind.data.bc_time",
7072 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
7074 /* Network Info Confirmation */
7075 { &hf_homeplug_av_nw_info_cnf,
7076 { "Network Info Confirmation", "homeplug_av.nw_info_cnf",
7077 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7079 { &hf_homeplug_av_nw_info_net_info,
7080 { "Networks informations", "homeplug_av.nw_info_cnf.net_info",
7081 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7083 { &hf_homeplug_av_nw_info_num_avlns,
7084 { "Number of AV Logical Networks", "homeplug_av.nw_info.num_avlns",
7085 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7087 { &hf_homeplug_av_nw_info_nid,
7088 { "Network ID", "homeplug_av.nw_info.nid",
7089 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
7091 { &hf_homeplug_av_nw_info_snid,
7092 { "Short Network ID", "homeplug_av.nw_info.snid",
7093 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
7095 { &hf_homeplug_av_nw_info_tei,
7096 { "Terminal Equipment Identifier", "homeplug_av.nw_info.tei",
7097 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7099 { &hf_homeplug_av_nw_info_sta_role,
7100 { "Station Role", "homeplug_av.nw_info.sta_role",
7101 FT_UINT8, BASE_HEX, VALS(homeplug_av_nw_info_role_vals), HOMEPLUG_AV_NW_INFO_ROLE_MASK, "Reserved", HFILL }
7103 { &hf_homeplug_av_nw_info_cco_mac,
7104 { "CCo MAC Address", "homeplug_av.nw_info_cnf.cco_mac",
7105 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
7107 { &hf_homeplug_av_nw_info_cco_tei,
7108 { "CCo Terminal Equipment Identifier", "homeplug_av.nw_info_cnf.cco_tei",
7109 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7111 { &hf_homeplug_av_nw_info_num_stas,
7112 { "Number of AV Stations", "homeplug_av.nw_info_cnf.num_stas",
7113 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7115 { &hf_homeplug_av_nw_info_access,
7116 { "Access network", "homeplug_av.nw_info_cnf.access",
7117 FT_UINT8, BASE_HEX, VALS(homeplug_nw_info_access_vals), HOMEPLUG_AV_NW_INFO_NID_MASK, "Reserved", HFILL }
7119 { &hf_homeplug_av_nw_info_num_coord,
7120 { "Number of neighbor networks coordinating", "homeplug_av.nw_info_cnf.num_coord",
7121 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7123 /* Network Info per station */
7124 { &hf_homeplug_av_nw_info_sta_info,
7125 { "Stations Informations", "homeplug_av.nw_info_cnf.sta_info",
7126 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7128 { &hf_homeplug_av_nw_info_sta_da,
7129 { "Station MAC Address", "homeplug_av.nw_info_cnf.sta_info.da",
7130 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
7132 { &hf_homeplug_av_nw_info_sta_tei,
7133 { "Station Terminal Equipment Identifier", "homeplug_av.nw_info_cnf.sta_indo.tei",
7134 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7136 { &hf_homeplug_av_nw_info_sta_bda,
7137 { "MAC Address of first Node Bridged by Station", "homeplug_av.nw_info_cnf.sta_indo.bda",
7138 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
7140 { &hf_homeplug_av10_nw_info_sta_phy_dr_tx,
7141 { "Average PHY Tx data Rate (Mbits/sec)", "homeplug_av.nw_info_cnf.sta_indo.phy_dr_tx",
7142 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7144 { &hf_homeplug_av10_nw_info_sta_phy_dr_rx,
7145 { "Average PHY Rx data Rate (Mbits/sec)", "homeplug_av.nw_info_cnf.sta_indo.phy_dr_rx",
7146 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7148 { &hf_homeplug_av11_nw_info_sta_phy_dr_tx,
7149 { "Average PHY Tx data Rate (Mbits/sec)", "homeplug_av.nw_info_cnf.sta_indo.phy_dr_tx",
7150 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
7152 { &hf_homeplug_av11_nw_info_sta_phy_dr_rx,
7153 { "Average PHY Rx data Rate (Mbits/sec)", "homeplug_av.nw_info_cnf.sta_indo.phy_dr_rx",
7154 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
7156 { &hf_homeplug_av11_nw_info_sta_cpling_tx,
7157 { "PHY Tx Coupling", "homeplug_av.nw_info_cnf.sta_info.phy_coupling_tx",
7158 FT_UINT8, BASE_DEC, VALS(homeplug_av_coupling_vals), HOMEPLUG_AV_COUPLING_MASK, "Unknown", HFILL }
7160 { &hf_homeplug_av11_nw_info_sta_cpling_rx,
7161 { "PHY Rx Coupling", "homeplug_av.nw_info_cnf.sta_info.phy_coupling_rx",
7162 FT_UINT8, BASE_DEC, VALS(homeplug_av_coupling_vals), HOMEPLUG_AV_COUPLING_MASK << 4, "Unknown", HFILL }
7164 /* Check Points Request */
7165 { &hf_homeplug_av_cp_rpt_req,
7166 { "Check Points Request", "homeplug_av.cp_rpt_req",
7167 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7169 { &hf_homeplug_av_cp_rpt_req_session_id,
7170 { "Session ID", "homeplug_av.cp_rpt_req.session_id",
7171 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
7173 { &hf_homeplug_av_cp_rpt_req_clr,
7174 { "Clear flag", "homeplug_av.cp_rpt_req.clr",
7175 FT_UINT8, BASE_HEX, VALS(homeplug_av_rpt_clr_vals), HOMEPLUG_AV_RPT_CLR_MASK, "Unknown", HFILL }
7177 /* Check Points Confirmation */
7178 { &hf_homeplug_av_cp_rpt_ind,
7179 { "Check Points Confirmation", "homeplug_av.cp_rpt_ind",
7180 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7182 { &hf_homeplug_av_cp_rpt_ind_status,
7183 { "Status", "homeplug_av.cp_rpt_ind.status",
7184 FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, "Unknown", HFILL }
7186 { &hf_homeplug_av_cp_rpt_ind_major_ver,
7187 { "Major version", "homeplug_av.cp_rpt_ind.major_ver",
7188 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7190 { &hf_homeplug_av_cp_rpt_ind_minor_ver,
7191 { "Minor version", "homeplug_av.cp_rpt_ind.minor_ver",
7192 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7194 { &hf_homeplug_av_cp_rpt_ind_session_id,
7195 { "Session ID", "homeplug_av.cp_rpt_ind.session_id",
7196 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
7198 { &hf_homeplug_av_cp_rpt_ind_total_size,
7199 { "Total size", "homeplug_av.cp_rpt_ind.total_size",
7200 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
7202 { &hf_homeplug_av_cp_rpt_ind_blk_offset,
7203 { "Offset", "homeplug_av.cp_rpt_ind.blk_offset",
7204 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
7206 { &hf_homeplug_av_cp_rpt_ind_byte_index,
7207 { "Byte Index", "homeplug_av.cp_rpt_ind.byte_index",
7208 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
7210 { &hf_homeplug_av_cp_rpt_ind_num_parts,
7211 { "Number of parts", "homeplug_av.cp_rpt_ind.num_parts",
7212 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7214 { &hf_homeplug_av_cp_rpt_ind_curr_part,
7215 { "Current part", "homeplug_av.cp_rpt_ind.curr_part",
7216 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7218 { &hf_homeplug_av_cp_rpt_ind_data_len,
7219 { "Data length", "homeplug_av.cp_rpt_ind.data_len",
7220 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
7222 { &hf_homeplug_av_cp_rpt_ind_data_ofs,
7223 { "Data offset", "homeplug_av.cp_rpt_ind.data_ofs",
7224 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
7226 { &hf_homeplug_av_cp_rpt_ind_data,
7227 { "Report Data", "homeplug_av.cp_rpt_ind.data",
7228 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7230 /* Loopback Request */
7231 { &hf_homeplug_av_fr_lbk_req,
7232 { "Loopback Request", "homeplug_av.fr_lbk.req",
7233 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7235 { &hf_homeplug_av_fr_lbk_duration,
7236 { "Duration", "homeplug_av.lbk.duration",
7237 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7239 { &hf_homeplug_av_fr_lbk_len,
7240 { "Length", "homeplug_av.lbk.len",
7241 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
7243 { &hf_homeplug_av_fr_lbk_req_data,
7244 { "Data", "homeplug_av.fr_lbj_req.data",
7245 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7247 /* Loopback Confirmation */
7248 { &hf_homeplug_av_fr_lbk_cnf,
7249 { "Loopback Confirmation", "homeplug_av.fr_lbk_cnf",
7250 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7252 { &hf_homeplug_av_fr_lbk_cnf_status,
7253 { "Status", "homeplug_av.fr_lbk_cnf.status",
7254 FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, "Unknown", HFILL }
7256 { &hf_homeplug_av_lbk_stat_cnf,
7257 { "Loopback Status Confirmation", "homeplug_av.lnk_stat_cnf",
7258 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7260 { &hf_homeplug_av_lbk_stat_cnf_status,
7261 { "Status", "homeplug_av.lnk_stat_cnf.status",
7262 FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
7264 { &hf_homeplug_av_lbk_stat_cnf_lbk_stat,
7265 { "Loopback Status", "homeplug_av.lnk_stat_cnf.lbk_stat",
7266 FT_UINT8, BASE_HEX, VALS(homeplug_av_lbk_status_vals), HOMEPLUG_AV_LBK_STATUS_MASK, NULL, HFILL }
7268 /* Set Encryption Key Request */
7269 { &hf_homeplug_av_set_key_req,
7270 { "Set Encryption Key Request", "homeplug_av.set_key_req",
7271 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7273 { &hf_homeplug_av_set_key_req_eks,
7274 { "EKS", "homeplug_av.set_key_req.eks",
7275 FT_UINT8, BASE_HEX, VALS(homeplug_av_set_key_peks_vals), 0x0, NULL, HFILL }
7277 { &hf_homeplug_av_set_key_req_nmk,
7278 { "NMK", "homeplug_av.set_key_req.nmk",
7279 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
7281 { &hf_homeplug_av_set_key_req_rda,
7282 { "Destination Address", "homeplug_av.set_key_req.rda",
7283 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
7285 { &hf_homeplug_av_set_key_req_dak,
7286 { "DAK", "homeplug_av.set_key_req.dak",
7287 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
7289 /* Set Encryption Key Confirmation */
7290 { &hf_homeplug_av_set_key_cnf,
7291 { "Set Encryption Key Confirmation", "homeplug_av.set_key_cnf",
7292 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7294 { &hf_homeplug_av_set_key_cnf_status,
7295 { "Status", "homeplug_av.set_key_cnf.status",
7296 FT_UINT8, BASE_HEX, VALS(homeplug_av_set_key_status_vals), 0x0, NULL, HFILL }
7298 /* Get Manufacturer String Confirmation */
7299 { &hf_homeplug_av_mfg_string_cnf,
7300 { "Get Manufacturer String Confirmation", "homeplug_av.mfg_string_cnf",
7301 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7303 { &hf_homeplug_av_mfg_string_cnf_status,
7304 { "Status", "homeplug_av.mfg_string_cnf.status",
7305 FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
7307 { &hf_homeplug_av_mfg_string_cnf_len,
7308 { "Length", "homeplug_av.mfg_string_cnf.len",
7309 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7311 { &hf_homeplug_av_mfg_string_cnf_string,
7312 { "Manufacturing String", "homeplug_av.mfg_string_cnf.string",
7313 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
7315 /* Read Configuration Block Confirmation */
7316 { &hf_homeplug_av_rd_cblock_cnf,
7317 { "Read Configuration Block Confirmation", "homeplug_av.rd_block_cnf",
7318 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7320 { &hf_homeplug_av_rd_cblock_cnf_status,
7321 { "Status", "homeplug_av.rd_block_cnf.status",
7322 FT_UINT8, BASE_HEX, VALS(homeplug_av_cblock_status_vals), 0x0, NULL, HFILL }
7324 { &hf_homeplug_av_rd_cblock_cnf_len,
7325 { "Length", "homeplug_av.rd_block_cnf.len",
7326 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7328 /* Configuration Block Header */
7329 { &hf_homeplug_av_cblock_hdr,
7330 { "Configuration Block Header", "homeplug_av.cblock_hdr",
7331 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7333 { &hf_homeplug_av_cblock_hdr_ver,
7334 { "Header Version Number", "homeplug_av.cblock_hdr.ver",
7335 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
7337 { &hf_homeplug_av_cblock_img_rom_addr,
7338 { "Image address in NVM", "homeplug_av.cblock_hdr.img_rom_addr",
7339 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
7341 { &hf_homeplug_av_cblock_img_addr,
7342 { "Image address in SDRAM", "homeplug_av.cblock_hdr.img_addr",
7343 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
7345 { &hf_homeplug_av_cblock_img_len,
7346 { "Image length", "homeplug_av.cblock_hdr.img_len",
7347 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
7349 { &hf_homeplug_av_cblock_img_chksum,
7350 { "Image Checksum", "homeplug_av.cblock_hdr.img_chksum",
7351 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
7353 { &hf_homeplug_av_cblock_entry_point,
7354 { "Entry Point", "homeplug_av.cblock_hdr.entry_point",
7355 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
7357 { &hf_homeplug_av_cblock_hdr_minor,
7358 { "Header minor version", "homeplug_av.cblock_hdr.minor",
7359 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7361 { &hf_homeplug_av_cblock_hdr_img_type,
7362 { "Header image type", "homeplug_av.cblock_hdr.img_type",
7363 FT_UINT8, BASE_DEC, VALS(homeplug_av_nvm_img_type_vals), HOMEPLUG_AV_NVM_IMG_TYPE_MASK, NULL, HFILL }
7365 { &hf_homeplug_av_cblock_hdr_ignore_mask,
7366 { "Header ignore mask", "homeplug_av.cblock_hdr.ignore_mask",
7367 FT_UINT16, BASE_HEX, VALS(homeplug_av_nvm_ignore_mask_vals), HOMEPLUG_AV_NVM_IGNORE_MASK_MASK, NULL, HFILL }
7369 { &hf_homeplug_av_cblock_hdr_module_id,
7370 { "Header module ID", "homeplug_av.cblock_hdr.module_id",
7371 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
7373 { &hf_homeplug_av_cblock_hdr_module_subid,
7374 { "Header module sub ID", "homeplug_av.cblock_hdr.module_subid",
7375 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
7377 { &hf_homeplug_av_cblock_next_hdr,
7378 { "Address of next header in NVM", "homeplug_av.cblock_hdr.next_hdr",
7379 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
7381 { &hf_homeplug_av_cblock_hdr_chksum,
7382 { "Header checksum", "homeplug_av.cblock_hdr.hdr_chksum",
7383 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
7385 /* Configuration Block */
7386 { &hf_homeplug_av_cblock,
7387 { "Configuration Block", "homeplug_av.cblock",
7388 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7390 { &hf_homeplug_av_cblock_sdram_size,
7391 { "SDRAM size", "homeplug_av.cblock.sdram_size",
7392 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
7394 { &hf_homeplug_av_cblock_sdram_conf,
7395 { "SDRAM Configuration Register", "homeplug_av.cblock.sdram_conf",
7396 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
7398 { &hf_homeplug_av_cblock_sdram_tim0,
7399 { "SDRAM Timing Register 0", "homeplug_av.cblock.sdram_tim0",
7400 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
7402 { &hf_homeplug_av_cblock_sdram_tim1,
7403 { "SDRAM Timing Register 1", "homeplug_av.cblock.sdram_tim1",
7404 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
7406 { &hf_homeplug_av_cblock_sdram_cntrl,
7407 { "SDRAM Control Register", "homeplug_av.cblock.sdram_cntrl",
7408 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
7410 { &hf_homeplug_av_cblock_sdram_refresh,
7411 { "SDRAM Refresh Register", "homeplug_av.cblock.sdram_refresh",
7412 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
7414 { &hf_homeplug_av_cblock_mac_clock,
7415 { "MAC Clock Register", "homeplug_av.cblock.mac_clock",
7416 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
7418 /* Set SDRAM Configuration Request */
7419 { &hf_homeplug_av_set_sdram_req,
7420 { "Set SDRAM Configuration Request", "homeplug_av.set_sdram_req",
7421 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7423 { &hf_homeplug_av_set_sdram_req_chksum,
7424 { "Checksum", "homeplug_av.set_sdram_req.chksum",
7425 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
7427 /* Set SDRAM Configuration Confirmation */
7428 { &hf_homeplug_av_set_sdram_cnf,
7429 { "Set SDRAM Configuration Confirmation", "homeplug_av.set_sdram_cnf",
7430 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7432 { &hf_homeplug_av_set_sdram_cnf_status,
7433 { "Status", "homeplug_av.set_sdram_cnf.status",
7434 FT_UINT8, BASE_HEX, VALS(homeplug_av_cblock_status_vals), 0x0, NULL, HFILL }
7436 /* Embedded Host Action Required Indicate */
7437 { &hf_homeplug_av_host_action_ind,
7438 { "Embedded Host Action Required Indicate", "homeplug_av.host_action_ind",
7439 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7441 { &hf_homeplug_av_host_action_ind_act,
7442 { "Action required", "homeplug_av.host_action_ind.action",
7443 FT_UINT8, BASE_HEX, VALS(homeplug_av_host_action_vals), 0x0, NULL, HFILL }
7445 /* Embedded Host Action Required Response */
7446 { &hf_homeplug_av_host_action_rsp,
7447 { "Embedded Host Action Required Response", "homeplug_av.host_action_rsp",
7448 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7450 { &hf_homeplug_av_host_action_rsp_sts,
7451 { "Status", "homeplug_av.host_action_rsp.status",
7452 FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
7454 /* Get Device Attributes Request */
7455 { &hf_homeplug_av_op_attr_req,
7456 { "Get Device Attributes Request", "homeplug_av.op_attr_req",
7457 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7459 { &hf_homeplug_av_op_attr_cookie,
7460 { "Cookie", "homeplug_av.op_attr.cookie",
7461 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
7463 { &hf_homeplug_av_op_attr_rep_type,
7464 { "Report Type", "homeplug_av.op_attr.rep_type",
7465 FT_UINT8, BASE_HEX, VALS(homeplug_av_op_attr_report_vals), 0x0, NULL, HFILL }
7467 /* Get Device Attributes Confirmation */
7468 { &hf_homeplug_av_op_attr_cnf,
7469 { "Get Device Attributes Confirmation", "homeplug_av.op_attr_cnf",
7470 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7472 { &hf_homeplug_av_op_attr_cnf_status,
7473 { "Status", "homeplug_av.op_attr_cnf.status",
7474 FT_UINT16, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
7476 { &hf_homeplug_av_op_attr_cnf_size,
7477 { "Size", "homeplug_av.op_attr_cnf.size",
7478 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
7480 { &hf_homeplug_av_op_attr_cnf_data,
7481 { "Data", "homeplug_av.op_attr_cnf.data",
7482 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7484 /* Device Attributes binary report */
7485 { &hf_homeplug_av_op_attr_data_hw,
7486 { "Hardware platform", "homeplug_av.op_attr_cnf.data.hw",
7487 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
7489 { &hf_homeplug_av_op_attr_data_sw,
7490 { "Software platform", "homeplug_av.op_attr_cnf.data.sw",
7491 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
7493 { &hf_homeplug_av_op_attr_data_sw_major,
7494 { "Major version", "homeplug_av.op_attr_cnf.data.sw_major",
7495 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
7497 { &hf_homeplug_av_op_attr_data_sw_minor,
7498 { "Minor version", "homeplug_av.op_attr_cnf.data.sw_minor",
7499 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
7501 { &hf_homeplug_av_op_attr_data_sw_sub,
7502 { "Software/PIB version", "homeplug_av.op_attr_cnf.data.sw_sub",
7503 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
7505 { &hf_homeplug_av_op_attr_data_sw_num,
7506 { "Software build number", "homeplug_av.op_attr_cnf.data.sw_sub",
7507 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
7509 { &hf_homeplug_av_op_attr_data_sw_date,
7510 { "Build date", "homeplug_av.op_attr_cnf.data.sw_date",
7511 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
7513 { &hf_homeplug_av_op_attr_data_sw_rel,
7514 { "Release type", "homeplug_av.op_attr_cnf.data.sw_rel",
7515 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
7517 { &hf_homeplug_av_op_attr_data_sw_sdram_type,
7518 { "SDRAM type", "homeplug_av.op_attr_cnf.data.sw_sdram_type",
7519 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7521 { &hf_homeplug_av_op_attr_data_sw_linefreq,
7522 { "Line frequency (Hz)", "homeplug_av.op_attr_cnf.data.sw_linefreq",
7523 FT_UINT8, BASE_DEC, VALS(homeplug_av_linefreq_vals), HOMEPLUG_AV_LINEFREQ_MASK, "Unknown", HFILL }
7525 { &hf_homeplug_av_op_attr_data_sw_zerocross,
7526 { "Zero-crossing", "homeplug_av.op_attr_cnf.data.sw_zerocross",
7527 FT_UINT8, BASE_DEC, VALS(homeplug_av_zerocrossing_vals), HOMEPLUG_AV_ZEROCROSS_MASK << 2, "Unknown", HFILL }
7529 { &hf_homeplug_av_op_attr_data_sw_sdram_size,
7530 { "SDRAM size (Mbytes)", "homeplug_av.op_attr_cnf.data.sw_sdram_size",
7531 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
7533 { &hf_homeplug_av_op_attr_data_sw_auth_mode,
7534 { "Authorization mode", "homeplug_av.op_attr_cnf.data.sw_auth_mode",
7535 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7537 /* Get Ethernet PHY Settings Request */
7538 { &hf_homeplug_av_enet_phy_req,
7539 { "Get Ethernet PHY Settings Request", "homeplug_av.enet_phy_req",
7540 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7542 { &hf_homeplug_av_enet_phy_req_mcontrol,
7543 { "Message Control", "homeplug_av.enet_phy_req.mcontrol",
7544 FT_UINT8, BASE_DEC, VALS(homeplug_av_enet_phy_mcontrol_vals), HOMEPLUG_AV_ENET_PHY_MCONTROL_MASK, "Unknown", HFILL }
7546 { &hf_homeplug_av_enet_phy_req_addcaps,
7547 { "Advertisement Capabilities", "homeplug_av.enet_phy_req.addcaps",
7548 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
7550 /* Get Ethernet PHY Settings Confirmation */
7551 { &hf_homeplug_av_enet_phy_cnf,
7552 { "Get Ethernet PHY Settings Confirmation", "homeplug_av.enet_phy_cnf",
7553 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7555 { &hf_homeplug_av_enet_phy_cnf_status,
7556 { "Status", "homeplug_av.enet_phy_cnf.status",
7557 FT_UINT8, BASE_DEC, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
7559 { &hf_homeplug_av_enet_phy_cnf_speed,
7560 { "Speed", "homeplug_av.enet_phy.speed",
7561 FT_UINT8, BASE_DEC, VALS(homeplug_av_enet_phy_speed_vals), HOMEPLUG_AV_ENET_PHY_SPEED_MASK, NULL, HFILL },
7563 { &hf_homeplug_av_enet_phy_cnf_duplex,
7564 { "Duplex", "homeplug_av.enet_phy.duplex",
7565 FT_UINT8, BASE_DEC, VALS(homeplug_av_enet_phy_duplex_vals), HOMEPLUG_AV_ENET_PHY_DUPLEX_MASK, NULL, HFILL },
7567 /* Tone Map Tx Characteristics Request */
7568 { &hf_homeplug_av_tone_map_tx_req,
7569 { "Tone Map Tx Characteristics Request", "homeplug_av.tone_map_tx_req",
7570 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7572 { &hf_homeplug_av_tone_map_tx_req_mac,
7573 { "Peer address", "homeplug_av.tone_map_tx_req.mac",
7574 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
7576 { &hf_homeplug_av_tone_map_tx_req_slot,
7577 { "Tone Map slot", "homeplug_av.tone_map_tx_req.slot",
7578 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7580 { &hf_homeplug_av_tone_map_tx_req_coupling,
7581 { "Coupling", "homeplug_av.tone_map_tx_req.coupling",
7582 FT_UINT8, BASE_DEC, VALS(homeplug_av_coupling_vals), HOMEPLUG_AV_COUPLING_MASK, NULL, HFILL }
7584 /* Tone Map Rx Characteristics Request */
7585 { &hf_homeplug_av_tone_map_rx_req,
7586 { "Tone Map Rx Characteristics Request", "homeplug_av.tone_map_rx_req",
7587 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7589 { &hf_homeplug_av_tone_map_rx_req_mac,
7590 { "Peer address", "homeplug_av.tone_map_rx_req.mac",
7591 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
7593 { &hf_homeplug_av_tone_map_rx_req_slot,
7594 { "Tone Map slot", "homeplug_av.tone_map_rx_req.slot",
7595 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7597 { &hf_homeplug_av_tone_map_rx_req_coupling,
7598 { "Coupling", "homeplug_av.tone_map_rx_req.coupling",
7599 FT_UINT8, BASE_DEC, VALS(homeplug_av_coupling_vals), HOMEPLUG_AV_COUPLING_MASK, NULL, HFILL }
7601 /* Tone Map Tx Characteristics Confirmation */
7602 { &hf_homeplug_av_tone_map_tx_cnf,
7603 { "Tone Map Tx Characteristics Confirmation", "homeplug_av.tone_map_tx_cnf",
7604 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7606 { &hf_homeplug_av_tone_map_tx_cnf_status,
7607 { "Status", "homeplug_av.tone_map_tx_cnf.status",
7608 FT_UINT16, BASE_HEX, VALS(homeplug_av_tone_map_status_vals), 0x0, NULL, HFILL }
7610 { &hf_homeplug_av_tone_map_tx_cnf_len,
7611 { "Length", "homeplug_av.tone_map_tx_cnf.len",
7612 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
7614 { &hf_homeplug_av_tone_map_tx_cnf_mac,
7615 { "Peer address", "homeplug_av.tone_map_tx_cnf.mac",
7616 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
7618 { &hf_homeplug_av_tone_map_tx_cnf_slot,
7619 { "Slot", "homeplug_av.tone_map_tx_cnf.slot",
7620 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
7622 { &hf_homeplug_av_tone_map_tx_cnf_num_tms,
7623 { "Number of Tone Maps in use", "homeplug_av.tone_map_tx_cnf.num_tms",
7624 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
7626 { &hf_homeplug_av_tone_map_tx_cnf_num_act,
7627 { "Tone map number of active carriers", "homeplug_av.tone_map_tx_cnf.num_act",
7628 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
7630 /* Tone Map Rx Characteristics Confirmation */
7631 { &hf_homeplug_av_tone_map_rx_cnf,
7632 { "Tone Map Rx Characteristics Confirmation", "homeplug_av.tone_map_rx_cnf",
7633 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7635 { &hf_homeplug_av_tone_map_rx_cnf_status,
7636 { "Status", "homeplug_av.tone_map_rx_cnf.status",
7637 FT_UINT8, BASE_HEX, VALS(homeplug_av_tone_map_status_vals), 0x0, NULL, HFILL }
7639 { &hf_homeplug_av_tone_map_rx_cnf_len,
7640 { "Length", "homeplug_av.tone_map_rx_cnf.len",
7641 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
7643 { &hf_homeplug_av_tone_map_rx_cnf_subver,
7644 { "MME Subversion", "homeplug_av.tone_map_rx_cnf.mmesubversion",
7645 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7647 { &hf_homeplug_av_tone_map_rx_cnf_mac,
7648 { "Peer address", "homeplug_av.tone_map_rx_cnf.mac",
7649 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
7651 { &hf_homeplug_av_tone_map_rx_cnf_slot,
7652 { "Slot", "homeplug_av.tone_map_rx_cnf.slot",
7653 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7655 { &hf_homeplug_av_tone_map_rx_cnf_coupling,
7656 { "Coupling", "homeplug_av.tone_map_rx_cnf.coupling",
7657 FT_UINT8, BASE_DEC, VALS(homeplug_av_coupling_vals), HOMEPLUG_AV_COUPLING_MASK, NULL, HFILL }
7659 { &hf_homeplug_av_tone_map_rx_cnf_num_tms,
7660 { "Number of Tone Maps in use", "homeplug_av.tone_map_rx_cnf.num_tms",
7661 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7663 { &hf_homeplug_av_tone_map_rx_cnf_num_act,
7664 { "Tone map number of active carriers", "homeplug_av.tone_map_rx_cnf.num_act",
7665 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
7667 { &hf_homeplug_av_tone_map_rx_cnf_agc,
7668 { "Automatic Gain Control (AGC)", "homeplug_av.tone_map_rx_cnf.agc",
7669 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7671 { &hf_homeplug_av_tone_map_rx_cnf_gil,
7672 { "Guard Interval Length (GIL)", "homeplug_av.tone_map_rx_cnf.gil",
7673 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7675 /* Tone Map Carrier informations */
7676 { &hf_homeplug_av_tone_map_carriers,
7677 { "Tone Map carriers", "homeplug_av.tone_map_cnf.carriers",
7678 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7680 { &hf_homeplug_av_tone_map_carrier,
7681 { "Modulation per carrier", "homeplug_av.tone_map_cnf.carrier",
7682 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7684 { &hf_homeplug_av_tone_map_carrier_lo,
7685 { "Modulation (Low carrier)", "homeplug_av.tone_map_cnf.carrier.lo",
7686 FT_UINT8, BASE_HEX, VALS(homeplug_av_tone_map_vals), HOMEPLUG_AV_TONE_MAP_MASK, NULL, HFILL }
7688 { &hf_homeplug_av_tone_map_carrier_hi,
7689 { "Modulation (High carrier)", "homeplug_av.tone_map_cnf.carrier.hi",
7690 FT_UINT8, BASE_HEX, VALS(homeplug_av_tone_map_vals), HOMEPLUG_AV_TONE_MAP_MASK << 4, NULL, HFILL }
7692 /* CC_ASSOC.* */
7693 { &hf_homeplug_av_cc_assoc_reqtype,
7694 { "Request Type", "homeplug_av.cc_assoc.reqtype",
7695 FT_UINT8, BASE_HEX, VALS(homeplug_av_cc_assoc_reqtype_vals), 0x0, NULL, HFILL }
7697 { &hf_homeplug_av_cc_assoc_nid,
7698 { "Network ID", "homeplug_av.cc_assoc.nid",
7699 FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
7701 { &hf_homeplug_av_cc_assoc_cco_cap,
7702 { "CCo Capability", "homeplug_av.cc_assoc.cco_cap",
7703 FT_UINT8, BASE_HEX, VALS(homeplug_av_avln_status_vals), HOMEPLUG_AV_AVLN_STATUS_MASK, NULL, HFILL }
7705 { &hf_homeplug_av_cc_assoc_proxy_net_cap,
7706 { "Proxy Network Capability", "homeplug_av.cc_assoc.proxy_cap",
7707 FT_UINT8, BASE_HEX, VALS(homeplug_av_cc_assoc_proxy_net_cap_vals), 0x0, NULL, HFILL }
7709 { &hf_homeplug_av_cc_assoc_result,
7710 { "Result", "homeplug_av.cc_assoc.result",
7711 FT_UINT8, BASE_HEX, VALS(homeplug_av_cc_assoc_result_vals), 0x0, NULL, HFILL }
7713 { &hf_homeplug_av_cc_assoc_snid,
7714 { "Short Network ID", "homeplug_av.cc_assoc.snid",
7715 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
7717 { &hf_homeplug_av_cc_assoc_tei,
7718 { "TEI", "homeplug_av.cc_assoc.tei",
7719 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
7721 { &hf_homeplug_av_cc_assoc_lease_time ,
7722 { "Lease time (min)", "homeplug_av.cc_assoc.lease_time",
7723 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
7725 /* CM_UNASSOCIATED_STA_IND */
7726 { &hf_homeplug_av_cm_unassoc_sta_nid,
7727 { "Network ID", "homeplug_av.cm_unassoc_sta.nid",
7728 FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
7730 { &hf_homeplug_av_cm_unassoc_sta_cco_cap,
7731 { "CCo Capability", "homeplug_av.cm_unassoc_sta.cco_cap",
7732 FT_UINT8, BASE_HEX, VALS(homeplug_av_avln_status_vals), HOMEPLUG_AV_AVLN_STATUS_MASK, NULL, HFILL }
7734 /* CC_SET_TEI_MAP_IND */
7735 { &hf_homeplug_av_cc_set_tei_map_ind_mode,
7736 { "Mode", "homeplug_av.cc_set_tei_map_ind.mode",
7737 FT_UINT8, BASE_HEX, VALS(homeplug_av_cc_set_tei_map_ind_mode_vals), 0x0, NULL, HFILL }
7739 { &hf_homeplug_av_cc_set_tei_map_ind_num,
7740 { "Number of entries", "homeplug_av.cc_set_tei_map_ind.num",
7741 FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }
7743 { &hf_homeplug_av_cc_set_tei_map_ind_tei,
7744 { "TEI", "homeplug_av.cc_set_tei_map_ind.tei",
7745 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
7747 { &hf_homeplug_av_cc_set_tei_map_ind_mac,
7748 { "MAC Address", "homeplug_av.cc_set_tei_map_ind.mac",
7749 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
7751 { &hf_homeplug_av_cc_set_tei_map_ind_status,
7752 { "Status", "homeplug_av.cc_set_tei_map_ind.status",
7753 FT_UINT8, BASE_HEX, VALS(homeplug_av_cc_set_tei_map_ind_status_vals), 0x0, NULL, HFILL }
7755 /* HPGP */
7756 /* CM_SLAC_PARM.* */
7757 { &hf_homeplug_av_gp_cm_slac_parm_apptype,
7758 { "Application type", "homeplug_av.gp.cm_slac_parm.apptype",
7759 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
7761 { &hf_homeplug_av_gp_cm_slac_parm_sectype,
7762 { "Security in M-Sound Message", "homeplug_av.gp.cm_slac_parm.sectype",
7763 FT_UINT8, BASE_HEX, VALS(homeplug_av_gp_cm_slac_parm_sectype_vals), 0x0, NULL, HFILL }
7765 { &hf_homeplug_av_gp_cm_slac_parm_runid,
7766 { "Run ID", "homeplug_av.gp.cm_slac_parm.runid",
7767 FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
7769 { &hf_homeplug_av_gp_cm_slac_parm_cipher_size,
7770 { "Cipher Suite Set Size", "homeplug_av.gp.cm_slac_parm.cipher_size",
7771 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
7773 { &hf_homeplug_av_gp_cm_slac_parm_cipher,
7774 { "Cipher Suite", "homeplug_av.gp.cm_slac_parm.cipher",
7775 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
7777 { &hf_homeplug_av_gp_cm_slac_parm_sound_target,
7778 { "M-Sound Target", "homeplug_av.gp.cm_slac_parm.sound_target",
7779 FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
7781 { &hf_homeplug_av_gp_cm_slac_parm_sound_count,
7782 { "M-Sound Count", "homeplug_av.gp.cm_slac_parm.sound_count",
7783 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
7785 { &hf_homeplug_av_gp_cm_slac_parm_time_out,
7786 { "M-Sound MPDU Time Out (N*100 msec)", "homeplug_av.gp.cm_slac_parm.time_out",
7787 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7789 { &hf_homeplug_av_gp_cm_slac_parm_resptype,
7790 { "Response type", "homeplug_av.gp.cm_slac_parm.resptype",
7791 FT_UINT8, BASE_HEX, VALS(homeplug_av_gp_cm_slac_parm_resptype_vals), 0x0, NULL, HFILL }
7793 { &hf_homeplug_av_gp_cm_slac_parm_forwarding_sta,
7794 { "Forwarded to MAC", "homeplug_av.gp.cm_slac_parm.forwarding_sta",
7795 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
7797 /* CM_ATTEN_PROFILE_IND */
7798 { &hf_homeplug_av_gp_cm_atten_profile_ind_pev_mac,
7799 { "PEV MAC Address", "homeplug_av.gp.cm_atten_profile_ind.pev_mac",
7800 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
7802 { &hf_homeplug_av_gp_cm_atten_profile_ind_num_groups,
7803 { "Number of Groups", "homeplug_av.gp.cm_atten_profile_ind.groups_count",
7804 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
7806 { &hf_homeplug_av_gp_cm_atten_profile_ind_aag,
7807 { "Average Attenuation of group (dB)", "homeplug_av.gp.cm_atten_profile_ind.aag",
7808 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7810 /* CM_ATTEN_CHAR */
7811 { &hf_homeplug_av_gp_cm_atten_char_result,
7812 { "Result", "homeplug_av.gp.cm_atten_char.result",
7813 FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), 0x0, NULL, HFILL }
7815 { &hf_homeplug_av_gp_cm_atten_char_apptype,
7816 { "Application type", "homeplug_av.gp.cm_atten_char.apptype",
7817 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
7819 { &hf_homeplug_av_gp_cm_atten_char_sectype,
7820 { "Security", "homeplug_av.gp.cm_atten_char.sectype",
7821 FT_UINT8, BASE_HEX, VALS(homeplug_av_gp_cm_slac_parm_sectype_vals), 0x0, NULL, HFILL }
7823 { &hf_homeplug_av_gp_cm_atten_char_source_mac,
7824 { "Source MAC", "homeplug_av.gp.cm_atten_char.source_mac",
7825 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
7827 { &hf_homeplug_av_gp_cm_atten_char_runid,
7828 { "Run ID", "homeplug_av.gp.cm_atten_char.runid",
7829 FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
7831 { &hf_homeplug_av_gp_cm_atten_char_source_id,
7832 { "Source ID", "homeplug_av.gp.cm_atten_char.source_id",
7833 FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
7835 { &hf_homeplug_av_gp_cm_atten_char_resp_id,
7836 { "Response ID", "homeplug_av.gp.cm_atten_char.resp_id",
7837 FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
7839 { &hf_homeplug_av_gp_cm_atten_char_numgroups,
7840 { "Number of Groups", "homeplug_av.gp.cm_atten_char.groups_count",
7841 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7843 { &hf_homeplug_av_gp_cm_atten_char_numsounds,
7844 { "Number of Sounds", "homeplug_av.gp.cm_atten_char.sounds_count",
7845 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7847 { &hf_homeplug_av_gp_cm_atten_char_aag,
7848 { "Average Attenuation of group (dB)", "homeplug_av.gp.cm_atten_char.aag",
7849 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7851 { &hf_homeplug_av_gp_cm_atten_char_profile,
7852 { "Signal level attenuation profile", "homeplug_av.gp.cm_atten_char.profile",
7853 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7855 { &hf_homeplug_av_gp_cm_atten_char_cms_data,
7856 { "CMS Data", "homeplug_av.gp.cm_atten_char.cms_data",
7857 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7859 /* CM_START_ATTEN_CHAR */
7860 { &hf_homeplug_av_gp_cm_start_atten_char_time_out,
7861 { "M-Sound MPDU Time Out (N*100 msec)", "homeplug_av.gp.cm_start_atten_char.time_out",
7862 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7864 { &hf_homeplug_av_gp_cm_start_atten_char_resptype,
7865 { "Response type", "homeplug_av.gp.cm_start_atten_char.resptype",
7866 FT_UINT8, BASE_HEX, VALS(homeplug_av_gp_cm_slac_parm_resptype_vals), 0x0, NULL, HFILL }
7868 { &hf_homeplug_av_gp_cm_start_atten_char_forwarding_sta,
7869 { "Forwarded to MAC", "homeplug_av.gp.cm_start_atten_char.sound_forwarding_sta",
7870 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
7872 { &hf_homeplug_av_gp_cm_start_atten_char_runid,
7873 { "Run ID", "homeplug_av.gp.cm_start_atten_char.runid",
7874 FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
7876 { &hf_homeplug_av_gp_cm_start_atten_char_numsounds,
7877 { "Number of Sounds", "homeplug_av.gp.cm_start_atten_char.sounds_count",
7878 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
7880 /* CM_MNBC_SOUND */
7881 { &hf_homeplug_av_gp_cm_mnbc_sound_apptype,
7882 { "Application type", "homeplug_av.gp.cm_mnbc_sound.apptype",
7883 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
7885 { &hf_homeplug_av_gp_cm_mnbc_sound_sectype,
7886 { "Security", "homeplug_av.gp.cm_mnbc_sound.sectype",
7887 FT_UINT8, BASE_HEX, VALS(homeplug_av_gp_cm_slac_parm_sectype_vals), 0x0, NULL, HFILL }
7889 { &hf_homeplug_av_gp_cm_mnbc_sound_sender_id,
7890 { "Sender ID", "homeplug_av.gp.cm_mnbc_sound.sender_id",
7891 FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
7893 { &hf_homeplug_av_gp_cm_mnbc_sound_countdown,
7894 { "Remaining Number of Sounds", "homeplug_av.gp.cm_mnbc_sound.countdown",
7895 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7897 { &hf_homeplug_av_gp_cm_mnbc_sound_runid,
7898 { "Run ID", "homeplug_av.gp.cm_mnbc_sound.runid",
7899 FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
7901 { &hf_homeplug_av_gp_cm_mnbc_sound_rsvd,
7902 { "Reserved", "homeplug_av.gp.cm_mnbc_sound.reserved",
7903 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7905 { &hf_homeplug_av_gp_cm_mnbc_sound_rnd,
7906 { "Random number", "homeplug_av.gp.cm_mnbc_sound.rnd",
7907 FT_BYTES, SEP_SPACE, NULL, 0x0, NULL, HFILL }
7909 /* CM_VALIDATE */
7910 { &hf_homeplug_av_gp_cm_validate_signaltype,
7911 { "Signal type", "homeplug_av.gp.cm_validate.signaltype",
7912 FT_UINT8, BASE_HEX, VALS(homeplug_av_gp_cm_validate_signaltype_vals), 0x0, NULL, HFILL }
7914 { &hf_homeplug_av_gp_cm_validate_timer,
7915 { "Timer (N*100 ms)", "homeplug_av.gp.cm_validate.timer",
7916 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7918 { &hf_homeplug_av_gp_cm_validate_result,
7919 { "Result", "homeplug_av.gp.cm_validate.result",
7920 FT_UINT8, BASE_HEX, VALS(homeplug_av_gp_cm_validate_result_vals), 0x0, NULL, HFILL }
7922 { &hf_homeplug_av_gp_cm_validate_togglenum,
7923 { "Number of detected toggles", "homeplug_av.gp.cm_validate.togglenum",
7924 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
7926 /* CM_SLAC_MATCH */
7927 { &hf_homeplug_av_gp_cm_slac_match_apptype,
7928 { "Application type", "homeplug_av.gp.cm_slac_match.apptype",
7929 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
7931 { &hf_homeplug_av_gp_cm_slac_match_sectype,
7932 { "Security", "homeplug_av.gp.cm_slac_match.sectype",
7933 FT_UINT8, BASE_HEX, VALS(homeplug_av_gp_cm_slac_parm_sectype_vals), 0x0, NULL, HFILL }
7935 { &hf_homeplug_av_gp_cm_slac_match_length,
7936 { "Length", "homeplug_av.gp.cm_slac_match.length",
7937 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
7939 { &hf_homeplug_av_gp_cm_slac_match_pev_id,
7940 { "PEV ID", "homeplug_av.gp.cm_slac_match.pev_id",
7941 FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
7943 { &hf_homeplug_av_gp_cm_slac_match_pev_mac,
7944 { "PEV MAC", "homeplug_av.gp.cm_slac_match.pev_mac",
7945 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
7947 { &hf_homeplug_av_gp_cm_slac_match_evse_id,
7948 { "EVSE ID", "homeplug_av.gp.cm_slac_match.evse_id",
7949 FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
7951 { &hf_homeplug_av_gp_cm_slac_match_evse_mac,
7952 { "EVSE MAC", "homeplug_av.gp.cm_slac_match.evse_mac",
7953 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
7955 { &hf_homeplug_av_gp_cm_slac_match_runid,
7956 { "Run ID", "homeplug_av.gp.cm_slac_match.runid",
7957 FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
7959 { &hf_homeplug_av_gp_cm_slac_match_rsvd,
7960 { "Reserved", "homeplug_av.gp.cm_slac_match.rsvd",
7961 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
7963 { &hf_homeplug_av_gp_cm_slac_match_nid,
7964 { "Network ID", "homeplug_av.gp.cm_slac_match.nid",
7965 FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
7967 { &hf_homeplug_av_gp_cm_slac_match_nmk,
7968 { "Network Membership Key (NMK)", "homeplug_av.gp.cm_slac_match.nmk",
7969 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
7971 /* CM_SLAC_USER_DATA */
7972 { &hf_homeplug_av_gp_cm_slac_user_data_broadcast_tlv_type,
7973 { "Broadcast TLV", "homeplug_av.gp.cm_slac_user_data.broadcast",
7974 FT_UINT24, BASE_HEX, VALS(homeplug_av_gp_cm_slac_user_data_broadcast_vals), HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_BROADCAST_MASK, NULL, HFILL }
7976 { &hf_homeplug_av_gp_cm_slac_user_data_tlv,
7977 { "TLV", "homeplug_av.gp.cm_slac_user_data.tlv",
7978 FT_UINT16, BASE_HEX, NULL, HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_TYPE_MASK, NULL, HFILL }
7980 { &hf_homeplug_av_gp_cm_slac_user_data_tlv_type,
7981 { "Type", "homeplug_av.gp.cm_slac_user_data.tlv.type",
7982 FT_UINT16, BASE_HEX, VALS(homeplug_av_gp_cm_slac_user_data_tlv_types_vals), HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_TYPE_MASK, NULL, HFILL }
7984 { &hf_homeplug_av_gp_cm_slac_user_data_tlv_length,
7985 { "Length", "homeplug_av.gp.cm_slac_user_data.tlv.length",
7986 FT_UINT16, BASE_HEX, NULL, HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_LENGTH_MASK, NULL, HFILL }
7988 { &hf_homeplug_av_gp_cm_slac_user_data_tlv_str_bytes,
7989 { "Data", "homeplug_av.gp.cm_slac_user_data.tlv.str",
7990 FT_BYTES, SEP_SPACE, NULL, 0x0, NULL, HFILL }
7992 { &hf_homeplug_av_gp_cm_slac_user_data_tlv_oui,
7993 { "OUI", "homeplug_av.gp.cm_slac_user_data.tlv.oui",
7994 FT_UINT24, BASE_HEX, VALS(homeplug_av_vendors_oui_vals), 0x0, NULL, HFILL }
7996 { &hf_homeplug_av_gp_cm_slac_user_data_tlv_subtype,
7997 { "Subtype", "homeplug_av.gp.cm_slac_user_data.tlv.subtype",
7998 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
8000 { &hf_homeplug_av_gp_cm_slac_user_data_tlv_info_str,
8001 { "Data", "homeplug_av.gp.cm_slac_user_data.tlv.info_str",
8002 FT_BYTES, SEP_SPACE, NULL, 0x0, NULL, HFILL }
8004 /* ST/IoTecha specific fields */
8005 { &hf_homeplug_av_st_iotecha_header_rsvd,
8006 { "Reserved", "homeplug_av.st_iotecha.rsvd",
8007 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
8009 { &hf_homeplug_av_st_iotecha_header_mmever,
8010 { "MME version", "homeplug_av.st_iotecha.mmever",
8011 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
8013 { &hf_homeplug_av_st_iotecha_header_mver,
8014 { "Message version", "homeplug_av.st_iotecha.mver",
8015 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
8017 { &hf_homeplug_av_st_iotecha_auth_nmk,
8018 { "NMK", "homeplug_av.st_iotecha.auth.nmk",
8019 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
8021 { &hf_homeplug_av_st_iotecha_status_byte,
8022 { "Status", "homeplug_av.st_iotecha.auth.status",
8023 FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), 0x0, NULL, HFILL }
8025 { &hf_homeplug_av_st_iotecha_linkstatus_status,
8026 { "Link status", "homeplug_av.st_iotecha.linkstatus.status",
8027 FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_linkstatus_status_vals), 0x0, NULL, HFILL }
8029 { &hf_homeplug_av_st_iotecha_linkstatus_devmode,
8030 { "DevMode", "homeplug_av.st_iotecha.linkstatus.devmode",
8031 FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_linkstatus_devmode_vals), 0x0, NULL, HFILL }
8033 { &hf_homeplug_av_st_iotecha_stp_discover_tlv,
8034 { "ST/IoTecha TLV", "homeplug_av.st_iotecha.stp_discover.tlv",
8035 FT_UINT16, BASE_HEX, VALS(homeplug_av_st_iotecha_stp_discover_tlv_type_vals), HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_MASK, NULL, HFILL }
8037 { &hf_homeplug_av_st_iotecha_stp_discover_tlv_type,
8038 { "Type", "homeplug_av.st_iotecha.stp_discover.tlv.type",
8039 FT_UINT16, BASE_HEX, VALS(homeplug_av_st_iotecha_stp_discover_tlv_type_vals), HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_MASK, NULL, HFILL }
8041 { &hf_homeplug_av_st_iotecha_stp_discover_tlv_length,
8042 { "Length", "homeplug_av.st_iotecha.stp_discover.tlv.length",
8043 FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_LENGTH_MASK, NULL, HFILL }
8045 { &hf_homeplug_av_st_iotecha_stp_discover_tlv_value_bytes,
8046 { "Value", "homeplug_av.st_iotecha.stp_discover.tlv.value",
8047 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
8049 { &hf_homeplug_av_st_iotecha_stp_discover_tlv_value_string,
8050 { "Value", "homeplug_av.st_iotecha.stp_discover.tlv.value_string",
8051 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
8053 { &hf_homeplug_av_st_iotecha_gain_ask,
8054 { "Requested Max Gain", "homeplug_av.st_iotecha.gainmax.ask",
8055 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
8057 { &hf_homeplug_av_st_iotecha_gain_new,
8058 { "New (Current) Max Gain", "homeplug_av.st_iotecha.gainmax.new",
8059 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
8061 { &hf_homeplug_av_st_iotecha_gain_prev,
8062 { "Previous Max Gain", "homeplug_av.st_iotecha.gainmax.prev",
8063 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
8065 { &hf_homeplug_av_st_iotecha_tei_count,
8066 { "Count of TEI", "homeplug_av.st_iotecha.tei.count",
8067 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
8069 { &hf_homeplug_av_st_iotecha_tei,
8070 { "TEI", "homeplug_av.st_iotecha.tei",
8071 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
8073 { &hf_homeplug_av_st_iotecha_tei_snap_addr_count,
8074 { "Number of remote address entities", "homeplug_av.st_iotecha.tei.snapshot.count",
8075 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
8077 { &hf_homeplug_av_st_iotecha_tei_snap_tei,
8078 { "Associated TEI", "homeplug_av.st_iotecha.tei.snapshot.tei",
8079 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
8081 { &hf_homeplug_av_st_iotecha_mac_address,
8082 { "MAC Address", "homeplug_av.st_iotecha.macaddress",
8083 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
8085 { &hf_homeplug_av_st_iotecha_tei_snap_mac_address_flag,
8086 { "Flags", "homeplug_av.st_iotecha.tei.snapshot.flags",
8087 FT_UINT16, BASE_HEX, VALS(homeplug_av_st_iotecha_mac_address_flag_vals), 0x0F, NULL, HFILL }
8089 { &hf_homeplug_av_st_iotecha_bss_list_count,
8090 { "BSS Entries Count", "homeplug_av.st_iotecha.bss.count",
8091 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
8093 { &hf_homeplug_av_st_iotecha_bss_entry,
8094 { "BSS Entry", "homeplug_av.st_iotecha.bss.entry",
8095 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
8097 { &hf_homeplug_av_st_iotecha_bss_type,
8098 { "Type", "homeplug_av.st_iotecha.bss.entry.type",
8099 FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_stp_get_bss_tlv_type_vals), 0x0, NULL, HFILL }
8101 { &hf_homeplug_av_st_iotecha_bss_value_bytes,
8102 { "Value", "homeplug_av.st_iotecha.bss.entry.value",
8103 FT_BYTES, SEP_COLON | BASE_ALLOW_ZERO, NULL, 0x0, NULL, HFILL }
8105 { &hf_homeplug_av_st_iotecha_chanqual_req_type,
8106 { "Request Type", "homeplug_av.st_iotecha.chanqual.reqtype",
8107 FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_chanqual_reqtype_vals), 0x0, NULL, HFILL }
8109 { &hf_homeplug_av_st_iotecha_chanqual_substatus,
8110 { "Subscription Status", "homeplug_av.st_iotecha.chanqual.substatus",
8111 FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_chanqual_substatus_vals), 0x0, NULL, HFILL }
8113 { &hf_homeplug_av_st_iotecha_chanqual_mac_local,
8114 { "MAC of local node", "homeplug_av.st_iotecha.chanqual.mac.local",
8115 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
8117 { &hf_homeplug_av_st_iotecha_chanqual_mac_remote,
8118 { "MAC of remote node", "homeplug_av.st_iotecha.chanqual.mac.remote",
8119 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
8121 { &hf_homeplug_av_st_iotecha_chanqual_source,
8122 { "Source of this report", "homeplug_av.st_iotecha.chanqual.source",
8123 FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_chanqual_tei_source_vals), 0x0, NULL, HFILL }
8125 { &hf_homeplug_av_st_iotecha_chanqual_response_type,
8126 { "Response Type", "homeplug_av.st_iotecha.chanqual.responsetype",
8127 FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_chanqual_responsetype_vals), 0x0, NULL, HFILL }
8129 { &hf_homeplug_av_st_iotecha_chanqual_tmi_count,
8130 { "Size of TMI List", "homeplug_av.st_iotecha.chanqual.tmi.count",
8131 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
8133 { &hf_homeplug_av_st_iotecha_chanqual_tmi,
8134 { "TMI List", "homeplug_av.st_iotecha.chanqual.chanqual.tmi",
8135 FT_BYTES, SEP_SPACE, NULL, 0x0, NULL, HFILL }
8137 { &hf_homeplug_av_st_iotecha_chanqual_int,
8138 { "Intervals List", "homeplug_av.st_iotecha.int",
8139 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
8141 { &hf_homeplug_av_st_iotecha_chanqual_int_count,
8142 { "Size of Interval List", "homeplug_av.st_iotecha.chanqual.int.count",
8143 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
8145 { &hf_homeplug_av_st_iotecha_chanqual_int_et,
8146 { "End Time of interval", "homeplug_av.st_iotecha.chanqual.int.et",
8147 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
8149 { &hf_homeplug_av_st_iotecha_chanqual_int_tmi,
8150 { "Interval", "homeplug_av.st_iotecha.chanqual.int.tmi",
8151 FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_chanqual_tmi_vals), 0x0, NULL, HFILL }
8153 { &hf_homeplug_av_st_iotecha_chanqual_tmi_attached,
8154 { "TMI of the attached Tone Map", "homeplug_av.st_iotecha.chanqual.tmi_attached",
8155 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
8157 { &hf_homeplug_av_st_iotecha_chanqual_fec_type,
8158 { "FEC Type/Code Rate", "homeplug_av.st_iotecha.chanqual.fec",
8159 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
8161 { &hf_homeplug_av_st_iotecha_chanqual_cbld,
8162 { "Carrier Bid Loading Data Nibbles", "homeplug_av.st_iotecha.chanqual.cbld",
8163 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
8165 { &hf_homeplug_av_st_iotecha_chanqual_cbld_data_low,
8166 { "CBLD Low", "homeplug_av.st_iotecha.chanqual.cbld.data.low",
8167 FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_chanqual_cbld_data_vals), HOMEPLUG_AV_ST_IOTECHA_CHANQUAL_CBLD_DATA_MASK_LOW, NULL, HFILL }
8169 { &hf_homeplug_av_st_iotecha_chanqual_cbld_data_high,
8170 { "CBLD High", "homeplug_av.st_iotecha.chanqual.cbld.data.high",
8171 FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_chanqual_cbld_data_vals), HOMEPLUG_AV_ST_IOTECHA_CHANQUAL_CBLD_DATA_MASK_HIGH, NULL, HFILL }
8173 { &hf_homeplug_av_st_iotecha_mfct_crc,
8174 { "CRC plus last CRC", "homeplug_av.st_iotecha.mfct.crc",
8175 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
8177 { &hf_homeplug_av_st_iotecha_mfct_total_length,
8178 { "Total length", "homeplug_av.st_iotecha.mfct.total_length",
8179 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
8181 { &hf_homeplug_av_st_iotecha_mfct_offset,
8182 { "Offset", "homeplug_av.st_iotecha.mfct.offset",
8183 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
8185 { &hf_homeplug_av_st_iotecha_mfct_length,
8186 { "Length", "homeplug_av.st_iotecha.mfct.length",
8187 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
8189 { &hf_homeplug_av_st_iotecha_mfct_data,
8190 { "Update Data", "homeplug_av.st_iotecha.mfct.data",
8191 FT_BYTES, SEP_SPACE, NULL, 0x0, NULL, HFILL }
8193 { &hf_homeplug_av_st_iotecha_mfct_timeout,
8194 { "Time duration before abort", "homeplug_av.st_iotecha.mfct.timeout",
8195 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
8197 { &hf_homeplug_av_st_iotecha_mfct_request_type,
8198 { "Request Type", "homeplug_av.st_iotecha.mfct.request_type",
8199 FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_mfct_request_type_vals), 0x0, NULL, HFILL }
8201 { &hf_homeplug_av_st_iotecha_mfct_result,
8202 { "Result", "homeplug_av.st_iotecha.mfct.result",
8203 FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_mfct_result_vals), 0x0, NULL, HFILL }
8205 { &hf_homeplug_av_st_iotecha_mfct_reboot,
8206 { "Reboot when complete", "homeplug_av.st_iotecha.mfct.reboot",
8207 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
8209 { &hf_homeplug_av_st_iotecha_mfct_name,
8210 { "Parameter name", "homeplug_av.st_iotecha.mfct.name",
8211 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
8213 { &hf_homeplug_av_st_iotecha_mfct_value,
8214 { "Value", "homeplug_av.st_iotecha.mfct.value",
8215 FT_BYTES, SEP_SPACE, NULL, 0x0, NULL, HFILL }
8217 { &hf_homeplug_av_st_iotecha_mfct_item_offset,
8218 { "Offset", "homeplug_av.st_iotecha.mfct.item.offset",
8219 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
8221 { &hf_homeplug_av_st_iotecha_mfct_item_total_length,
8222 { "Total length", "homeplug_av.st_iotecha.mfct.item.total_length",
8223 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
8225 { &hf_homeplug_av_st_iotecha_stp_fup_mac_da,
8226 { "MAC DA", "homeplug_av.st_iotecha.stp_fup.mac_da",
8227 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
8229 { &hf_homeplug_av_st_iotecha_stp_fup_mac_sa,
8230 { "MAC SA", "homeplug_av.st_iotecha.stp_fup.mac_sa",
8231 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
8233 { &hf_homeplug_av_st_iotecha_stp_fup_mtype,
8234 { "Message Type", "homeplug_av.st_iotecha.stp_fup.mtype",
8235 FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_stp_fwup_mtype_vals), 0x0, NULL, HFILL }
8237 { &hf_homeplug_av_st_iotecha_cpstate_state,
8238 { "CP State", "homeplug_av.st_iotecha.cpstate.state",
8239 FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_stp_cpstate_state_vals), 0x0, NULL, HFILL }
8241 { &hf_homeplug_av_st_iotecha_cpstate_pwm_duty,
8242 { "PWM Duty Cycle", "homeplug_av.st_iotecha.cpstate.pwm_duty",
8243 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
8245 { &hf_homeplug_av_st_iotecha_cpstate_pwm_freq,
8246 { "PWM Frequency", "homeplug_av.st_iotecha.cpstate.pwm_freq",
8247 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
8249 { &hf_homeplug_av_st_iotecha_cpstate_voltage,
8250 { "CP Voltage", "homeplug_av.st_iotecha.cpstate.cp_voltage",
8251 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
8253 { &hf_homeplug_av_st_iotecha_cpstate_adc_bitmask,
8254 { "ADC Channels", "homeplug_av.st_iotecha.cpstate.adc_bitmask",
8255 FT_UINT8, BASE_CUSTOM, CF_FUNC(adc_bitmask_base), 0x0, NULL, HFILL }
8257 { &hf_homeplug_av_st_iotecha_cpstate_adc_voltage_1,
8258 { "ADC Channel 1 (mV)", "homeplug_av.st_iotecha.cpstate.adc_channel_1",
8259 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
8261 { &hf_homeplug_av_st_iotecha_cpstate_adc_voltage_2,
8262 { "ADC Channel 2 (mV)", "homeplug_av.st_iotecha.cpstate.adc_channel_2",
8263 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
8265 { &hf_homeplug_av_st_iotecha_cpstate_adc_voltage_3,
8266 { "ADC Channel 3 (mV)", "homeplug_av.st_iotecha.cpstate.adc_channel_3",
8267 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
8269 { &hf_homeplug_av_st_iotecha_user_message_info,
8270 { "Message", "homeplug_av.st_iotecha.user_message",
8271 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
8273 { &hf_homeplug_av_st_iotecha_user_message_details,
8274 { "Details", "homeplug_av.st_iotecha.user_message_details",
8275 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
8277 { &hf_homeplug_av_st_iotecha_test_type,
8278 { "Test Type", "homeplug_av.st_iotecha.test_type",
8279 FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_test_type_vals), 0x0, NULL, HFILL }
8281 { &hf_homeplug_av_st_iotecha_num_sound,
8282 { "Number of soundings", "homeplug_av.st_iotecha.num_sound",
8283 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
8285 { &hf_homeplug_av_st_iotecha_data_ind_addr,
8286 { "MAC addr", "homeplug_av.st_iotecha.data_ind_addr",
8287 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
8289 { &hf_homeplug_av_st_iotecha_agc_lock,
8290 { "AgcLock", "homeplug_av.st_iotecha.agc_lock",
8291 FT_UINT8, BASE_DEC, VALS(homeplug_av_st_iotecha_agc_lock_vals), 0x0, NULL, HFILL }
8293 { &hf_homeplug_av_st_iotecha_db_agc_val,
8294 { "DbAgcVal", "homeplug_av.st_iotecha.db_agc_val",
8295 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
8297 { &hf_homeplug_av_st_iotecha_test_status,
8298 { "Status", "homeplug_av.st_iotecha.test_status",
8299 FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_test_status_vals), 0x0, NULL, HFILL }
8301 { &hf_homeplug_av_st_iotecha_suppress_data,
8302 { "Suppress data", "homeplug_av.st_iotecha.suppress_data",
8303 FT_UINT8, BASE_DEC, VALS(homeplug_av_st_iotecha_suppress_data_vals), 0x0, NULL, HFILL }
8305 { &hf_homeplug_av_st_iotecha_sound_remain,
8306 { "Counter of sound remain", "homeplug_av.st_iotecha.sound_remain",
8307 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
8309 { &hf_homeplug_av_st_iotecha_ntb_time,
8310 { "NTB time", "homeplug_av.st_iotecha.ntb_time",
8311 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
8313 { &hf_homeplug_av_st_iotecha_rsvd1,
8314 { "Reserved", "homeplug_av.st_iotecha.rsvd1",
8315 FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL }
8317 { &hf_homeplug_av_st_iotecha_rsvd2,
8318 { "Reserved", "homeplug_av.st_iotecha.rsvd2",
8319 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
8321 { &hf_homeplug_av_st_iotecha_num_segments,
8322 { "Number of msg segments", "homeplug_av.st_iotecha.num_segments",
8323 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
8325 { &hf_homeplug_av_st_iotecha_segment,
8326 { "Index of curr segment", "homeplug_av.st_iotecha.segment",
8327 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
8329 { &hf_homeplug_av_st_iotecha_num_chan,
8330 { "Number of channels", "homeplug_av.st_iotecha.num_chan",
8331 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
8333 { &hf_homeplug_av_st_iotecha_chan_start,
8334 { "Carrier map index of ChanData", "homeplug_av.st_iotecha.chan_start",
8335 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
8337 /* End of ST/IoTecha specific fields */
8340 static int *ett[] = {
8341 &ett_homeplug_av,
8342 &ett_homeplug_av_mmhdr,
8343 &ett_homeplug_av_mmtype,
8344 &ett_homeplug_av_fmi,
8345 &ett_homeplug_av_vendor,
8346 &ett_homeplug_av_public,
8348 &ett_homeplug_av_fc,
8349 &ett_homeplug_av_sof,
8350 &ett_homeplug_av_rtscts,
8351 &ett_homeplug_av_sack,
8352 &ett_homeplug_av_sound,
8353 &ett_homeplug_av_rsof,
8354 &ett_homeplug_av_bcn,
8355 &ett_homeplug_av_bcn_payload,
8356 &ett_homeplug_av_cc_disc_list_cnf,
8357 &ett_homeplug_av_cc_sta_info,
8358 &ett_homeplug_av_cc_net_info,
8359 &ett_homeplug_av_cm_enc_pld_ind,
8360 &ett_homeplug_av_cm_enc_pld_rsp,
8361 &ett_homeplug_av_cm_set_key_req,
8362 &ett_homeplug_av_cm_set_key_cnf,
8363 &ett_homeplug_av_cm_get_key_req,
8364 &ett_homeplug_av_cm_get_key_cnf,
8365 &ett_homeplug_av_brg_infos_cnf,
8366 &ett_homeplug_av_cm_nw_infos_cnf,
8367 &ett_homeplug_av_nw_stats_cnf,
8369 &ett_homeplug_av_get_sw_cnf,
8370 &ett_homeplug_av_wr_mem_req,
8371 &ett_homeplug_av_wr_mem_cnf,
8372 &ett_homeplug_av_rd_mem_req,
8373 &ett_homeplug_av_st_mac_req,
8374 &ett_homeplug_av_st_mac_cnf,
8375 &ett_homeplug_av_rd_mem_cnf,
8376 &ett_homeplug_av_get_nvm_cnf,
8377 &ett_homeplug_av_rs_dev_cnf,
8378 &ett_homeplug_av_wr_mod_req,
8379 &ett_homeplug_av_wr_mod_cnf,
8380 &ett_homeplug_av_wr_mod_ind,
8381 &ett_homeplug_av_rd_mod_req,
8382 &ett_homeplug_av_rd_mod_cnf,
8383 &ett_homeplug_av_mod_nvm_req,
8384 &ett_homeplug_av_mod_nvm_cnf,
8385 &ett_homeplug_av_wd_rpt_req,
8386 &ett_homeplug_av_wd_rpt_ind,
8387 &ett_homeplug_av_lnk_stats_req,
8388 &ett_homeplug_av_lnk_stats_cnf,
8389 &ett_homeplug_av_lnk_stats_tx,
8390 &ett_homeplug_av_lnk_stats_rx,
8391 &ett_homeplug_av_lnk_stats_rx_inv,
8392 &ett_homeplug_av_sniffer_req,
8393 &ett_homeplug_av_sniffer_cnf,
8394 &ett_homeplug_av_sniffer_ind,
8395 &ett_homeplug_av_sniffer_ind_data,
8396 &ett_homeplug_av_nw_info_cnf,
8397 &ett_homeplug_av_nw_info_sta_info,
8398 &ett_homeplug_av_nw_info_net_info,
8399 &ett_homeplug_av_cp_rpt_req,
8400 &ett_homeplug_av_cp_rpt_ind,
8401 &ett_homeplug_av_fr_lbk_req,
8402 &ett_homeplug_av_fr_lbk_cnf,
8403 &ett_homeplug_av_lbk_stat_cnf,
8404 &ett_homeplug_av_set_key_req,
8405 &ett_homeplug_av_set_key_cnf,
8406 &ett_homeplug_av_mfg_string_cnf,
8407 &ett_homeplug_av_rd_cblock_cnf,
8408 &ett_homeplug_av_cblock_hdr,
8409 &ett_homeplug_av_cblock,
8410 &ett_homeplug_av_set_sdram_req,
8411 &ett_homeplug_av_set_sdram_cnf,
8412 &ett_homeplug_av_host_action_ind,
8413 &ett_homeplug_av_host_action_rsp,
8414 &ett_homeplug_av_op_attr_req,
8415 &ett_homeplug_av_op_attr_cnf,
8416 &ett_homeplug_av_op_attr_data,
8417 &ett_homeplug_av_enet_phy_req,
8418 &ett_homeplug_av_enet_phy_cnf,
8419 &ett_homeplug_av_tone_map_tx_req,
8420 &ett_homeplug_av_tone_map_rx_req,
8421 &ett_homeplug_av_tone_map_tx_cnf,
8422 &ett_homeplug_av_tone_map_rx_cnf,
8423 &ett_homeplug_av_tone_map_carriers,
8424 &ett_homeplug_av_tone_map_carrier,
8425 /* HPGP*/
8426 &ett_homeplug_av_gp_cm_atten_char_profile,
8427 &ett_homeplug_av_gp_cm_slac_user_data_tlv,
8428 /* ST/IoTecha subtrees */
8429 &ett_homeplug_av_st_iotecha_header,
8430 &ett_homeplug_av_st_iotecha_type_length_value,
8431 &ett_homeplug_av_st_iotecha_chanqual_int,
8432 &ett_homeplug_av_st_iotecha_chanqual_cbld,
8433 &ett_homeplug_av_st_iotecha_bss_entry
8437 proto_homeplug_av = proto_register_protocol("HomePlug AV protocol", "HomePlug AV", "homeplug-av");
8439 proto_register_field_array(proto_homeplug_av, hf, array_length(hf));
8441 proto_register_subtree_array(ett, array_length(ett));
8443 homeplug_av_handle = register_dissector("homeplug-av", dissect_homeplug_av, proto_homeplug_av);
8446 void
8447 proto_reg_handoff_homeplug_av(void)
8449 dissector_add_uint("ethertype", ETHERTYPE_HOMEPLUG_AV, homeplug_av_handle);
8453 * Editor modelines
8455 * Local Variables:
8456 * c-file-style: "bsd"
8457 * c-basic-offset: 4
8458 * tab-width: 8
8459 * indent-tabs-mode: nil
8460 * End:
8462 * ex: set shiftwidth=4 tabstop=8 expandtab:
8463 * :indentSize=4:tabSize=8:noTabs=true: