summaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-homeplug-av.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
commite4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch)
tree68cb5ef9081156392f1dd62a00c6ccc1451b93df /epan/dissectors/packet-homeplug-av.c
parentInitial commit. (diff)
downloadwireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz
wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'epan/dissectors/packet-homeplug-av.c')
-rw-r--r--epan/dissectors/packet-homeplug-av.c8463
1 files changed, 8463 insertions, 0 deletions
diff --git a/epan/dissectors/packet-homeplug-av.c b/epan/dissectors/packet-homeplug-av.c
new file mode 100644
index 00000000..1271f7c9
--- /dev/null
+++ b/epan/dissectors/packet-homeplug-av.c
@@ -0,0 +1,8463 @@
+/* packet-homeplug-av.c
+ * Routines for HomePlug AV dissection
+ *
+ * Copyright 2011, Florian Fainelli <florian[AT]openwrt.org>
+ * Copyright 2016, Nora Sandler <nsandler[AT]securityinnovation.com>
+ * Copyright 2018, Sergey Rak <sergrak[AT]iotecha.com>
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald[AT]wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "config.h"
+
+#include <epan/packet.h>
+#include <epan/etypes.h>
+#include <epan/ptvcursor.h>
+
+void proto_register_homeplug_av(void);
+void proto_reg_handoff_homeplug_av(void);
+
+static dissector_handle_t homeplug_av_handle;
+
+static int proto_homeplug_av = -1;
+
+static int hf_homeplug_av_mmhdr = -1;
+static int hf_homeplug_av_mmhdr_mmver = -1;
+static int hf_homeplug_av_mmhdr_mmtype_general = -1;
+static int hf_homeplug_av_mmhdr_mmtype_qualcomm = -1;
+static int hf_homeplug_av_mmhdr_mmtype_st = -1;
+static int hf_homeplug_av_mmhdr_mmtype_lsb = -1;
+static int hf_homeplug_av_mmhdr_mmtype_msb = -1;
+static int hf_homeplug_av_mmhdr_fmi = -1;
+static int hf_homeplug_av_vendor = -1;
+static int hf_homeplug_av_vendor_oui = -1;
+static int hf_homeplug_av_reserved = -1;
+
+/* Frame Control fields (for sniffer data) */
+static int hf_homeplug_av_fc = -1;
+static int hf_homeplug_av_fc_del_type = -1;
+static int hf_homeplug_av_fc_access = -1;
+static int hf_homeplug_av_fc_snid = -1;
+static int hf_homeplug_av_fc_fccs_av = -1;
+
+/* Variant fields used by multiple MPDU types */
+static int hf_homeplug_av_dtei = -1;
+static int hf_homeplug_av_stei = -1;
+static int hf_homeplug_av_lid = -1;
+static int hf_homeplug_av_cfs = -1;
+static int hf_homeplug_av_bdf = -1;
+static int hf_homeplug_av_hp10df = -1;
+static int hf_homeplug_av_hp11df = -1;
+static int hf_homeplug_av_svn = -1;
+static int hf_homeplug_av_rrtf = -1;
+static int hf_homeplug_av_fl_av = -1;
+static int hf_homeplug_av_ppb = -1;
+static int hf_homeplug_av_mfs_rsp_data = -1;
+static int hf_homeplug_av_mfs_rsp_mgmt = -1;
+
+/* Beacon */
+static int hf_homeplug_av_bcn = -1;
+static int hf_homeplug_av_bcn_bts = -1;
+static int hf_homeplug_av_bcn_bto_0 = -1;
+static int hf_homeplug_av_bcn_bto_1 = -1;
+static int hf_homeplug_av_bcn_bto_2 = -1;
+static int hf_homeplug_av_bcn_bto_3 = -1;
+
+/* Beacon MPDU Payload */
+static int hf_homeplug_av_bcn_payload = -1;
+static int hf_homeplug_av_bcn_type = -1;
+static int hf_homeplug_av_bcn_nid = -1;
+static int hf_homeplug_av_bcn_stei = -1;
+static int hf_homeplug_av_bcn_ncnr = -1;
+static int hf_homeplug_av_bcn_num_slots = -1;
+static int hf_homeplug_av_bcn_slot_use = -1;
+static int hf_homeplug_av_bcn_slot_id = -1;
+static int hf_homeplug_av_bcn_aclss = -1;
+static int hf_homeplug_av_bcn_hm = -1;
+static int hf_homeplug_av_bcn_nm = -1;
+static int hf_homeplug_av_bcn_npsm = -1;
+static int hf_homeplug_av_bcn_cco_cap = -1;
+static int hf_homeplug_av_bcn_rtsbf = -1;
+static int hf_homeplug_av_bcn_hoip = -1;
+static int hf_homeplug_av_bcn_rsf = -1;
+static int hf_homeplug_av_bcn_plevel = -1;
+static int hf_homeplug_av_bcn_bentries = -1;
+static int hf_homeplug_av_bcn_bpcs = -1;
+
+/* Start of Frame */
+static int hf_homeplug_av_sof = -1;
+static int hf_homeplug_av_sof_peks = -1;
+static int hf_homeplug_av_sof_ble = -1;
+static int hf_homeplug_av_sof_pbsz = -1;
+static int hf_homeplug_av_sof_num_sym = -1;
+static int hf_homeplug_av_sof_tmi_av = -1;
+static int hf_homeplug_av_sof_mpdu_cnt = -1;
+static int hf_homeplug_av_sof_burst_cnt = -1;
+static int hf_homeplug_av_sof_bbf = -1;
+static int hf_homeplug_av_sof_mrtfl = -1;
+static int hf_homeplug_av_sof_clst = -1;
+static int hf_homeplug_av_sof_mfs_cmd_mgmt = -1;
+static int hf_homeplug_av_sof_mfs_cmd_data = -1;
+static int hf_homeplug_av_sof_rsr = -1;
+static int hf_homeplug_av_sof_mcf = -1;
+static int hf_homeplug_av_sof_dccpcf = -1;
+static int hf_homeplug_av_sof_mnbf = -1;
+static int hf_homeplug_av_sof_mfs_rsp_mgmt = -1;
+static int hf_homeplug_av_sof_mfs_rsp_data = -1;
+static int hf_homeplug_av_sof_bm_sack = -1;
+
+/* Selective Acknowledgement */
+static int hf_homeplug_av_sack = -1;
+
+/* Request to Send/Clear to Send */
+static int hf_homeplug_av_rtscts = -1;
+static int hf_homeplug_av_rtscts_rtsf = -1;
+static int hf_homeplug_av_rtscts_igf = -1;
+static int hf_homeplug_av_rtscts_mnbf = -1;
+static int hf_homeplug_av_rtscts_mcf = -1;
+static int hf_homeplug_av_rtscts_dur = -1;
+
+/* Sound */
+static int hf_homeplug_av_sound = -1;
+static int hf_homeplug_av_sound_pbsz = -1;
+static int hf_homeplug_av_sound_bdf = -1;
+static int hf_homeplug_av_sound_saf = -1;
+static int hf_homeplug_av_sound_scf = -1;
+static int hf_homeplug_av_sound_req_tm = -1;
+static int hf_homeplug_av_sound_mpdu_cnt = -1;
+static int hf_homeplug_av_sound_src = -1;
+static int hf_homeplug_av_sound_add_req_tm = -1;
+static int hf_homeplug_av_sound_max_pb_sym = -1;
+static int hf_homeplug_av_sound_ecsf = -1;
+static int hf_homeplug_av_sound_ecuf = -1;
+static int hf_homeplug_av_sound_ems = -1;
+static int hf_homeplug_av_sound_esgisf = -1;
+static int hf_homeplug_av_sound_elgisf = -1;
+static int hf_homeplug_av_sound_efrs = -1;
+
+/* Reverse Start of Frame */
+static int hf_homeplug_av_rsof = -1;
+static int hf_homeplug_av_rsof_fl = -1;
+static int hf_homeplug_av_rsof_tmi = -1;
+static int hf_homeplug_av_rsof_pbsz = -1;
+static int hf_homeplug_av_rsof_num_sym = -1;
+static int hf_homeplug_av_rsof_mfs_cmd_mgmt = -1;
+static int hf_homeplug_av_rsof_mfs_cmd_data = -1;
+
+/* Public MMEs */
+static int hf_homeplug_av_public = -1;
+static int hf_homeplug_av_public_frag_count = -1;
+static int hf_homeplug_av_public_frag_index = -1;
+static int hf_homeplug_av_public_frag_seqnum = -1;
+
+static int hf_homeplug_av_cc_disc_list_cnf = -1;
+
+static int hf_homeplug_av_cc_disc_list_sta_cnt = -1;
+static int hf_homeplug_av_cc_sta_info = -1;
+static int hf_homeplug_av_cc_sta_info_mac = -1;
+static int hf_homeplug_av_cc_sta_info_tei = -1;
+static int hf_homeplug_av_cc_sta_info_same_net = -1;
+static int hf_homeplug_av_cc_sta_info_sig_level = -1;
+static int hf_homeplug_av_cc_sta_info_avg_ble = -1;
+
+static int hf_homeplug_av_cc_disc_list_net_cnt = -1;
+static int hf_homeplug_av_cc_net_info = -1;
+static int hf_homeplug_av_cc_net_info_hyb_mode = -1;
+static int hf_homeplug_av_cc_net_info_bcn_slots = -1;
+static int hf_homeplug_av_cc_net_info_cco_sts = -1;
+static int hf_homeplug_av_cc_net_info_bcn_ofs = -1;
+
+static int hf_homeplug_av_brg_infos_cnf = -1;
+static int hf_homeplug_av_brg_infos_cnf_brd = -1;
+static int hf_homeplug_av_brg_infos_cnf_btei = -1;
+static int hf_homeplug_av_brg_infos_cnf_num_stas = -1;
+static int hf_homeplug_av_brg_infos_cnf_mac = -1;
+
+static int hf_homeplug_av_cm_nw_infos_cnf = -1;
+
+static int hf_homeplug_av_nw_stats_cnf = -1;
+
+/* Shared network informations fields */
+static int hf_homeplug_av_nw_info_peks = -1;
+static int hf_homeplug_av_nw_info_pid = -1;
+static int hf_homeplug_av_nw_info_prn = -1;
+static int hf_homeplug_av_nw_info_pmn = -1;
+static int hf_homeplug_av_nw_info_my_nonce = -1;
+static int hf_homeplug_av_nw_info_your_nonce = -1;
+static int hf_homeplug_av_nw_info_key_type = -1;
+static int hf_homeplug_av_nw_info_cco_cap = -1;
+static int hf_homeplug_av_nw_info_num_avlns = -1;
+static int hf_homeplug_av_nw_info_nid = -1;
+static int hf_homeplug_av_nw_info_snid = -1;
+static int hf_homeplug_av_nw_info_tei = -1;
+static int hf_homeplug_av_nw_info_sta_role = -1;
+static int hf_homeplug_av_nw_info_cco_mac = -1;
+static int hf_homeplug_av_nw_info_cco_tei = -1;
+static int hf_homeplug_av_nw_info_num_stas = -1;
+static int hf_homeplug_av_nw_info_access = -1;
+static int hf_homeplug_av_nw_info_num_coord = -1;
+
+
+static int hf_homeplug_av_cm_enc_pld_ind = -1;
+static int hf_homeplug_av_cm_enc_pld_ind_avlns = -1;
+static int hf_homeplug_av_cm_enc_pld_ind_iv = -1;
+static int hf_homeplug_av_cm_enc_pld_ind_uuid = -1;
+static int hf_homeplug_av_cm_enc_pld_ind_len = -1;
+static int hf_homeplug_av_cm_enc_pld_ind_pld = -1;
+
+static int hf_homeplug_av_cm_enc_pld_rsp = -1;
+static int hf_homeplug_av_cm_enc_pld_rsp_result = -1;
+
+static int hf_homeplug_av_cm_set_key_req = -1;
+static int hf_homeplug_av_cm_set_key_req_nw_key = -1;
+
+static int hf_homeplug_av_cm_set_key_cnf = -1;
+static int hf_homeplug_av_cm_set_key_cnf_result = -1;
+
+static int hf_homeplug_av_cm_get_key_req = -1;
+static int hf_homeplug_av_cm_get_key_req_type = -1;
+static int hf_homeplug_av_cm_get_key_req_has_key = -1;
+
+static int hf_homeplug_av_cm_get_key_cnf = -1;
+static int hf_homeplug_av_cm_get_key_cnf_result = -1;
+static int hf_homeplug_av_cm_get_key_cnf_rtype = -1;
+static int hf_homeplug_av_cm_get_key_cnf_key = -1;
+
+
+/* Intellon specific vendor MMEs */
+static int hf_homeplug_av_get_sw_cnf = -1;
+static int hf_homeplug_av_get_sw_cnf_status = -1;
+static int hf_homeplug_av_get_sw_cnf_dev_id = -1;
+static int hf_homeplug_av_get_sw_cnf_ver_len = -1;
+static int hf_homeplug_av_get_sw_cnf_ver_str = -1;
+static int hf_homeplug_av_get_sw_cnf_upg = -1;
+
+/* Shared memory related fields */
+static int hf_homeplug_av_mem_len_16bits = -1;
+static int hf_homeplug_av_mem_len_32bits = -1;
+static int hf_homeplug_av_mem_offset = -1;
+static int hf_homeplug_av_mem_checksum = -1;
+static int hf_homeplug_av_mem_data = -1;
+static int hf_homeplug_av_mem_addr = -1;
+static int hf_homeplug_av_mem_status = -1;
+
+static int hf_homeplug_av_wr_mem_req = -1;
+static int hf_homeplug_av_wr_mem_cnf = -1;
+
+static int hf_homeplug_av_rd_mem_req = -1;
+static int hf_homeplug_av_rd_mem_cnf = -1;
+
+static int hf_homeplug_av_mac_module_id = -1;
+
+static int hf_homeplug_av_st_mac_req = -1;
+static int hf_homeplug_av_st_mac_req_img_load = -1;
+static int hf_homeplug_av_st_mac_req_img_len = -1;
+static int hf_homeplug_av_st_mac_req_img_chksum = -1;
+static int hf_homeplug_av_st_mac_req_img_start = -1;
+
+static int hf_homeplug_av_st_mac_cnf = -1;
+static int hf_homeplug_av_st_mac_cnf_status = -1;
+
+static int hf_homeplug_av_get_nvm_cnf = -1;
+static int hf_homeplug_av_get_nvm_cnf_status = -1;
+static int hf_homeplug_av_get_nvm_cnf_nvm_type = -1;
+static int hf_homeplug_av_get_nvm_cnf_nvm_page = -1;
+static int hf_homeplug_av_get_nvm_cnf_nvm_block = -1;
+static int hf_homeplug_av_get_nvm_cnf_nvm_size = -1;
+
+static int hf_homeplug_av_rs_dev_cnf = -1;
+static int hf_homeplug_av_rs_dev_cnf_status = -1;
+
+static int hf_homeplug_av_wr_mod_req = -1;
+
+static int hf_homeplug_av_wr_mod_cnf = -1;
+static int hf_homeplug_av_wr_mod_cnf_status = -1;
+
+static int hf_homeplug_av_wr_mod_ind = -1;
+static int hf_homeplug_av_wr_mod_ind_status = -1;
+
+static int hf_homeplug_av_rd_mod_req = -1;
+
+static int hf_homeplug_av_rd_mod_cnf = -1;
+static int hf_homeplug_av_rd_mod_cnf_status = -1;
+
+static int hf_homeplug_av_mod_nvm_req = -1;
+
+static int hf_homeplug_av_mod_nvm_cnf = -1;
+static int hf_homeplug_av_mod_nvm_cnf_status = -1;
+
+static int hf_homeplug_av_wd_rpt_req = -1;
+static int hf_homeplug_av_wd_rpt_req_session_id = -1;
+static int hf_homeplug_av_wd_rpt_req_clr = -1;
+
+static int hf_homeplug_av_wd_rpt_ind = -1;
+static int hf_homeplug_av_wd_rpt_ind_status = -1;
+static int hf_homeplug_av_wd_rpt_ind_session_id = -1;
+static int hf_homeplug_av_wd_rpt_ind_num_parts = -1;
+static int hf_homeplug_av_wd_rpt_ind_curr_part = -1;
+static int hf_homeplug_av_wd_rpt_ind_rdata_len = -1;
+static int hf_homeplug_av_wd_rpt_ind_rdata_ofs = -1;
+static int hf_homeplug_av_wd_rpt_ind_rdata = -1;
+
+static int hf_homeplug_av_lnk_stats_req = -1;
+static int hf_homeplug_av_lnk_stats_req_mcontrol = -1;
+static int hf_homeplug_av_lnk_stats_req_dir = -1;
+static int hf_homeplug_av_lnk_stats_req_lid = -1;
+static int hf_homeplug_av_lnk_stats_req_macaddr = -1;
+
+static int hf_homeplug_av_lnk_stats_cnf = -1;
+static int hf_homeplug_av_lnk_stats_cnf_status = -1;
+static int hf_homeplug_av_lnk_stats_cnf_dir = -1;
+static int hf_homeplug_av_lnk_stats_cnf_lid = -1;
+static int hf_homeplug_av_lnk_stats_cnf_tei = -1;
+static int hf_homeplug_av_lnk_stats_cnf_lstats = -1;
+
+static int hf_homeplug_av_lnk_stats_tx = -1;
+static int hf_homeplug_av_lnk_stats_tx_mpdu_ack = -1;
+static int hf_homeplug_av_lnk_stats_tx_mpdu_col = -1;
+static int hf_homeplug_av_lnk_stats_tx_mpdu_fai = -1;
+static int hf_homeplug_av_lnk_stats_tx_pbs_pass = -1;
+static int hf_homeplug_av_lnk_stats_tx_pbs_fail = -1;
+
+static int hf_homeplug_av_lnk_stats_rx = -1;
+static int hf_homeplug_av_lnk_stats_rx_mpdu_ack = -1;
+static int hf_homeplug_av_lnk_stats_rx_mpdu_fai = -1;
+static int hf_homeplug_av_lnk_stats_rx_pbs_pass = -1;
+static int hf_homeplug_av_lnk_stats_rx_pbs_fail = -1;
+static int hf_homeplug_av_lnk_stats_rx_tb_pass = -1;
+static int hf_homeplug_av_lnk_stats_rx_tb_fail = -1;
+static int hf_homeplug_av_lnk_stats_rx_num_int = -1;
+
+static int hf_homeplug_av_rx_inv_stats = -1;
+static int hf_homeplug_av_rx_inv_phy_rate = -1;
+static int hf_homeplug_av_rx_inv_pbs_pass = -1;
+static int hf_homeplug_av_rx_inv_pbs_fail = -1;
+static int hf_homeplug_av_rx_inv_tb_pass = -1;
+static int hf_homeplug_av_rx_inv_tb_fail = -1;
+
+static int hf_homeplug_av_sniffer_req = -1;
+static int hf_homeplug_av_sniffer_req_ctrl = -1;
+
+static int hf_homeplug_av_sniffer_cnf = -1;
+static int hf_homeplug_av_sniffer_cnf_status = -1;
+static int hf_homeplug_av_sniffer_cnf_state = -1;
+static int hf_homeplug_av_sniffer_cnf_da = -1;
+
+static int hf_homeplug_av_sniffer_ind = -1;
+static int hf_homeplug_av_sniffer_ind_type = -1;
+static int hf_homeplug_av_sniffer_ind_data = -1;
+static int hf_homeplug_av_sniffer_data_dir = -1;
+static int hf_homeplug_av_sniffer_data_systime = -1;
+static int hf_homeplug_av_sniffer_data_bc_time = -1;
+
+static int hf_homeplug_av_nw_info_cnf = -1;
+
+static int hf_homeplug_av_nw_info_sta_info = -1;
+static int hf_homeplug_av_nw_info_net_info = -1;
+
+static int hf_homeplug_av_nw_info_sta_da = -1;
+static int hf_homeplug_av_nw_info_sta_tei = -1;
+static int hf_homeplug_av_nw_info_sta_bda = -1;
+static int hf_homeplug_av10_nw_info_sta_phy_dr_tx= -1;
+static int hf_homeplug_av10_nw_info_sta_phy_dr_rx= -1;
+static int hf_homeplug_av11_nw_info_sta_phy_dr_tx= -1;
+static int hf_homeplug_av11_nw_info_sta_cpling_tx = -1;
+static int hf_homeplug_av11_nw_info_sta_phy_dr_rx= -1;
+static int hf_homeplug_av11_nw_info_sta_cpling_rx = -1;
+
+static int hf_homeplug_av_cp_rpt_req = -1;
+static int hf_homeplug_av_cp_rpt_req_session_id = -1;
+static int hf_homeplug_av_cp_rpt_req_clr = -1;
+
+static int hf_homeplug_av_cp_rpt_ind = -1;
+static int hf_homeplug_av_cp_rpt_ind_status = -1;
+static int hf_homeplug_av_cp_rpt_ind_major_ver = -1;
+static int hf_homeplug_av_cp_rpt_ind_minor_ver = -1;
+static int hf_homeplug_av_cp_rpt_ind_session_id = -1;
+static int hf_homeplug_av_cp_rpt_ind_total_size = -1;
+static int hf_homeplug_av_cp_rpt_ind_blk_offset = -1;
+static int hf_homeplug_av_cp_rpt_ind_byte_index = -1;
+static int hf_homeplug_av_cp_rpt_ind_num_parts = -1;
+static int hf_homeplug_av_cp_rpt_ind_curr_part = -1;
+static int hf_homeplug_av_cp_rpt_ind_data_len = -1;
+static int hf_homeplug_av_cp_rpt_ind_data_ofs = -1;
+static int hf_homeplug_av_cp_rpt_ind_data = -1;
+
+static int hf_homeplug_av_fr_lbk_duration = -1;
+static int hf_homeplug_av_fr_lbk_len = -1;
+
+static int hf_homeplug_av_fr_lbk_req = -1;
+static int hf_homeplug_av_fr_lbk_req_data = -1;
+
+static int hf_homeplug_av_fr_lbk_cnf = -1;
+static int hf_homeplug_av_fr_lbk_cnf_status = -1;
+
+static int hf_homeplug_av_lbk_stat_cnf = -1;
+static int hf_homeplug_av_lbk_stat_cnf_status = -1;
+static int hf_homeplug_av_lbk_stat_cnf_lbk_stat = -1;
+
+static int hf_homeplug_av_set_key_req = -1;
+static int hf_homeplug_av_set_key_req_eks = -1;
+static int hf_homeplug_av_set_key_req_nmk = -1;
+static int hf_homeplug_av_set_key_req_rda = -1;
+static int hf_homeplug_av_set_key_req_dak = -1;
+
+static int hf_homeplug_av_set_key_cnf = -1;
+static int hf_homeplug_av_set_key_cnf_status = -1;
+
+static int hf_homeplug_av_mfg_string_cnf = -1;
+static int hf_homeplug_av_mfg_string_cnf_status = -1;
+static int hf_homeplug_av_mfg_string_cnf_len = -1;
+static int hf_homeplug_av_mfg_string_cnf_string = -1;
+
+static int hf_homeplug_av_rd_cblock_cnf = -1;
+static int hf_homeplug_av_rd_cblock_cnf_status = -1;
+static int hf_homeplug_av_rd_cblock_cnf_len = -1;
+
+static int hf_homeplug_av_cblock_hdr = -1;
+static int hf_homeplug_av_cblock_hdr_ver = -1;
+static int hf_homeplug_av_cblock_img_rom_addr = -1;
+static int hf_homeplug_av_cblock_img_addr = -1;
+static int hf_homeplug_av_cblock_img_len = -1;
+static int hf_homeplug_av_cblock_img_chksum = -1;
+static int hf_homeplug_av_cblock_entry_point = -1;
+static int hf_homeplug_av_cblock_hdr_minor = -1;
+static int hf_homeplug_av_cblock_hdr_img_type = -1;
+static int hf_homeplug_av_cblock_hdr_ignore_mask = -1;
+static int hf_homeplug_av_cblock_hdr_module_id = -1;
+static int hf_homeplug_av_cblock_hdr_module_subid= -1;
+static int hf_homeplug_av_cblock_next_hdr = -1;
+static int hf_homeplug_av_cblock_hdr_chksum = -1;
+
+static int hf_homeplug_av_cblock = -1;
+static int hf_homeplug_av_cblock_sdram_size = -1;
+static int hf_homeplug_av_cblock_sdram_conf = -1;
+static int hf_homeplug_av_cblock_sdram_tim0 = -1;
+static int hf_homeplug_av_cblock_sdram_tim1 = -1;
+static int hf_homeplug_av_cblock_sdram_cntrl = -1;
+static int hf_homeplug_av_cblock_sdram_refresh = -1;
+static int hf_homeplug_av_cblock_mac_clock = -1;
+
+static int hf_homeplug_av_set_sdram_req = -1;
+static int hf_homeplug_av_set_sdram_req_chksum = -1;
+
+static int hf_homeplug_av_set_sdram_cnf = -1;
+static int hf_homeplug_av_set_sdram_cnf_status = -1;
+
+static int hf_homeplug_av_host_action_ind = -1;
+static int hf_homeplug_av_host_action_ind_act = -1;
+
+static int hf_homeplug_av_host_action_rsp = -1;
+static int hf_homeplug_av_host_action_rsp_sts = -1;
+
+static int hf_homeplug_av_op_attr_cookie = -1;
+static int hf_homeplug_av_op_attr_rep_type = -1;
+
+static int hf_homeplug_av_op_attr_req = -1;
+
+static int hf_homeplug_av_op_attr_cnf = -1;
+static int hf_homeplug_av_op_attr_cnf_status = -1;
+static int hf_homeplug_av_op_attr_cnf_size = -1;
+static int hf_homeplug_av_op_attr_cnf_data = -1;
+
+static int hf_homeplug_av_op_attr_data_hw = -1;
+static int hf_homeplug_av_op_attr_data_sw = -1;
+static int hf_homeplug_av_op_attr_data_sw_major = -1;
+static int hf_homeplug_av_op_attr_data_sw_minor = -1;
+static int hf_homeplug_av_op_attr_data_sw_sub = -1;
+static int hf_homeplug_av_op_attr_data_sw_num = -1;
+static int hf_homeplug_av_op_attr_data_sw_date = -1;
+static int hf_homeplug_av_op_attr_data_sw_rel = -1;
+static int hf_homeplug_av_op_attr_data_sw_sdram_type = -1;
+static int hf_homeplug_av_op_attr_data_sw_linefreq = -1;
+static int hf_homeplug_av_op_attr_data_sw_zerocross = -1;
+static int hf_homeplug_av_op_attr_data_sw_sdram_size = -1;
+static int hf_homeplug_av_op_attr_data_sw_auth_mode = -1;
+
+static int hf_homeplug_av_enet_phy_req = -1;
+static int hf_homeplug_av_enet_phy_req_mcontrol = -1;
+static int hf_homeplug_av_enet_phy_req_addcaps = -1;
+
+static int hf_homeplug_av_enet_phy_cnf = -1;
+static int hf_homeplug_av_enet_phy_cnf_status = -1;
+static int hf_homeplug_av_enet_phy_cnf_speed = -1;
+static int hf_homeplug_av_enet_phy_cnf_duplex = -1;
+
+static int hf_homeplug_av_tone_map_tx_req = -1;
+static int hf_homeplug_av_tone_map_tx_req_mac = -1;
+static int hf_homeplug_av_tone_map_tx_req_slot = -1;
+static int hf_homeplug_av_tone_map_tx_req_coupling = -1;
+
+static int hf_homeplug_av_tone_map_rx_req = -1;
+static int hf_homeplug_av_tone_map_rx_req_mac = -1;
+static int hf_homeplug_av_tone_map_rx_req_slot = -1;
+static int hf_homeplug_av_tone_map_rx_req_coupling = -1;
+
+static int hf_homeplug_av_tone_map_tx_cnf = -1;
+static int hf_homeplug_av_tone_map_tx_cnf_status = -1;
+static int hf_homeplug_av_tone_map_tx_cnf_len = -1;
+static int hf_homeplug_av_tone_map_tx_cnf_mac = -1;
+static int hf_homeplug_av_tone_map_tx_cnf_slot = -1;
+static int hf_homeplug_av_tone_map_tx_cnf_num_tms = -1;
+static int hf_homeplug_av_tone_map_tx_cnf_num_act = -1;
+
+static int hf_homeplug_av_tone_map_rx_cnf = -1;
+static int hf_homeplug_av_tone_map_rx_cnf_status = -1;
+static int hf_homeplug_av_tone_map_rx_cnf_len = -1;
+static int hf_homeplug_av_tone_map_rx_cnf_subver = -1;
+static int hf_homeplug_av_tone_map_rx_cnf_coupling = -1;
+static int hf_homeplug_av_tone_map_rx_cnf_mac = -1;
+static int hf_homeplug_av_tone_map_rx_cnf_slot = -1;
+static int hf_homeplug_av_tone_map_rx_cnf_num_tms = -1;
+static int hf_homeplug_av_tone_map_rx_cnf_num_act = -1;
+static int hf_homeplug_av_tone_map_rx_cnf_agc = -1;
+static int hf_homeplug_av_tone_map_rx_cnf_gil = -1;
+
+static int hf_homeplug_av_tone_map_carriers = -1;
+static int hf_homeplug_av_tone_map_carrier = -1;
+static int hf_homeplug_av_tone_map_carrier_lo = -1;
+static int hf_homeplug_av_tone_map_carrier_hi = -1;
+
+static int hf_homeplug_av_cc_assoc_reqtype = -1;
+static int hf_homeplug_av_cc_assoc_cco_cap = -1;
+static int hf_homeplug_av_cc_assoc_proxy_net_cap = -1;
+static int hf_homeplug_av_cc_assoc_result = -1;
+static int hf_homeplug_av_cc_assoc_nid = -1;
+static int hf_homeplug_av_cc_assoc_snid = -1;
+static int hf_homeplug_av_cc_assoc_tei = -1;
+static int hf_homeplug_av_cc_assoc_lease_time = -1;
+
+static int hf_homeplug_av_cc_set_tei_map_ind_mode = -1;
+static int hf_homeplug_av_cc_set_tei_map_ind_num = -1;
+static int hf_homeplug_av_cc_set_tei_map_ind_tei = -1;
+static int hf_homeplug_av_cc_set_tei_map_ind_mac = -1;
+static int hf_homeplug_av_cc_set_tei_map_ind_status = -1;
+
+static int hf_homeplug_av_cm_unassoc_sta_nid = -1;
+static int hf_homeplug_av_cm_unassoc_sta_cco_cap = -1;
+
+/* HPAV/GP fields*/
+static int hf_homeplug_av_gp_cm_slac_parm_apptype = -1;
+static int hf_homeplug_av_gp_cm_slac_parm_sectype = -1;
+static int hf_homeplug_av_gp_cm_slac_parm_runid = -1;
+static int hf_homeplug_av_gp_cm_slac_parm_cipher_size = -1;
+static int hf_homeplug_av_gp_cm_slac_parm_cipher = -1;
+static int hf_homeplug_av_gp_cm_slac_parm_sound_target = -1;
+static int hf_homeplug_av_gp_cm_slac_parm_sound_count = -1;
+static int hf_homeplug_av_gp_cm_slac_parm_time_out = -1;
+static int hf_homeplug_av_gp_cm_slac_parm_resptype = -1;
+static int hf_homeplug_av_gp_cm_slac_parm_forwarding_sta= -1;
+
+static int hf_homeplug_av_gp_cm_atten_profile_ind_pev_mac = -1;
+static int hf_homeplug_av_gp_cm_atten_profile_ind_num_groups = -1;
+static int hf_homeplug_av_gp_cm_atten_profile_ind_aag = -1;
+
+static int hf_homeplug_av_gp_cm_atten_char_apptype = -1;
+static int hf_homeplug_av_gp_cm_atten_char_sectype = -1;
+static int hf_homeplug_av_gp_cm_atten_char_source_mac = -1;
+static int hf_homeplug_av_gp_cm_atten_char_runid = -1;
+static int hf_homeplug_av_gp_cm_atten_char_source_id = -1;
+static int hf_homeplug_av_gp_cm_atten_char_resp_id = -1;
+static int hf_homeplug_av_gp_cm_atten_char_numsounds = -1;
+static int hf_homeplug_av_gp_cm_atten_char_numgroups = -1;
+static int hf_homeplug_av_gp_cm_atten_char_aag = -1;
+static int hf_homeplug_av_gp_cm_atten_char_profile = -1;
+static int hf_homeplug_av_gp_cm_atten_char_cms_data = -1;
+static int hf_homeplug_av_gp_cm_atten_char_result = -1;
+
+static int hf_homeplug_av_gp_cm_start_atten_char_time_out = -1;
+static int hf_homeplug_av_gp_cm_start_atten_char_resptype = -1;
+static int hf_homeplug_av_gp_cm_start_atten_char_forwarding_sta= -1;
+static int hf_homeplug_av_gp_cm_start_atten_char_runid = -1;
+static int hf_homeplug_av_gp_cm_start_atten_char_numsounds = -1;
+
+static int hf_homeplug_av_gp_cm_mnbc_sound_apptype = -1;
+static int hf_homeplug_av_gp_cm_mnbc_sound_sectype = -1;
+static int hf_homeplug_av_gp_cm_mnbc_sound_sender_id = -1;
+static int hf_homeplug_av_gp_cm_mnbc_sound_countdown = -1;
+static int hf_homeplug_av_gp_cm_mnbc_sound_runid = -1;
+static int hf_homeplug_av_gp_cm_mnbc_sound_rsvd = -1;
+static int hf_homeplug_av_gp_cm_mnbc_sound_rnd = -1;
+
+static int hf_homeplug_av_gp_cm_validate_signaltype = -1;
+static int hf_homeplug_av_gp_cm_validate_timer = -1;
+static int hf_homeplug_av_gp_cm_validate_result = -1;
+static int hf_homeplug_av_gp_cm_validate_togglenum = -1;
+
+static int hf_homeplug_av_gp_cm_slac_match_apptype = -1;
+static int hf_homeplug_av_gp_cm_slac_match_sectype = -1;
+static int hf_homeplug_av_gp_cm_slac_match_length = -1;
+static int hf_homeplug_av_gp_cm_slac_match_pev_id = -1;
+static int hf_homeplug_av_gp_cm_slac_match_pev_mac = -1;
+static int hf_homeplug_av_gp_cm_slac_match_evse_id = -1;
+static int hf_homeplug_av_gp_cm_slac_match_evse_mac = -1;
+static int hf_homeplug_av_gp_cm_slac_match_runid = -1;
+static int hf_homeplug_av_gp_cm_slac_match_rsvd = -1;
+static int hf_homeplug_av_gp_cm_slac_match_nid = -1;
+static int hf_homeplug_av_gp_cm_slac_match_nmk = -1;
+
+static int hf_homeplug_av_gp_cm_slac_user_data_broadcast_tlv_type = -1;
+static int hf_homeplug_av_gp_cm_slac_user_data_tlv = -1;
+static int hf_homeplug_av_gp_cm_slac_user_data_tlv_type = -1;
+static int hf_homeplug_av_gp_cm_slac_user_data_tlv_length = -1;
+static int hf_homeplug_av_gp_cm_slac_user_data_tlv_str_bytes = -1;
+static int hf_homeplug_av_gp_cm_slac_user_data_tlv_oui = -1;
+static int hf_homeplug_av_gp_cm_slac_user_data_tlv_subtype = -1;
+static int hf_homeplug_av_gp_cm_slac_user_data_tlv_info_str = -1;
+/* End of HPAV/GP fields*/
+
+/* ST/IoTecha fields */
+static int hf_homeplug_av_st_iotecha_header_rsvd = -1;
+static int hf_homeplug_av_st_iotecha_header_mmever = -1;
+static int hf_homeplug_av_st_iotecha_header_mver = -1;
+
+static int hf_homeplug_av_st_iotecha_auth_nmk = -1;
+static int hf_homeplug_av_st_iotecha_status_byte = -1;
+
+static int hf_homeplug_av_st_iotecha_linkstatus_status = -1;
+static int hf_homeplug_av_st_iotecha_linkstatus_devmode = -1;
+
+static int hf_homeplug_av_st_iotecha_stp_discover_tlv = -1;
+static int hf_homeplug_av_st_iotecha_stp_discover_tlv_type = -1;
+static int hf_homeplug_av_st_iotecha_stp_discover_tlv_length = -1;
+static int hf_homeplug_av_st_iotecha_stp_discover_tlv_value_bytes = -1;
+static int hf_homeplug_av_st_iotecha_stp_discover_tlv_value_string = -1;
+
+static int hf_homeplug_av_st_iotecha_gain_ask = -1;
+static int hf_homeplug_av_st_iotecha_gain_new = -1;
+static int hf_homeplug_av_st_iotecha_gain_prev = -1;
+
+static int hf_homeplug_av_st_iotecha_mac_address = -1;
+
+static int hf_homeplug_av_st_iotecha_tei_count = -1;
+static int hf_homeplug_av_st_iotecha_tei = -1;
+
+static int hf_homeplug_av_st_iotecha_tei_snap_tei = -1;
+static int hf_homeplug_av_st_iotecha_tei_snap_addr_count = -1;
+static int hf_homeplug_av_st_iotecha_tei_snap_mac_address_flag = -1;
+
+static int hf_homeplug_av_st_iotecha_bss_list_count = -1;
+static int hf_homeplug_av_st_iotecha_bss_entry = -1;
+static int hf_homeplug_av_st_iotecha_bss_type = -1;
+static int hf_homeplug_av_st_iotecha_bss_value_bytes = -1;
+
+static int hf_homeplug_av_st_iotecha_chanqual_req_type = -1;
+static int hf_homeplug_av_st_iotecha_chanqual_substatus = -1;
+static int hf_homeplug_av_st_iotecha_chanqual_mac_local = -1;
+static int hf_homeplug_av_st_iotecha_chanqual_mac_remote = -1;
+static int hf_homeplug_av_st_iotecha_chanqual_source = -1;
+static int hf_homeplug_av_st_iotecha_chanqual_response_type = -1;
+static int hf_homeplug_av_st_iotecha_chanqual_tmi_count = -1;
+static int hf_homeplug_av_st_iotecha_chanqual_tmi = -1;
+static int hf_homeplug_av_st_iotecha_chanqual_int = -1;
+static int hf_homeplug_av_st_iotecha_chanqual_int_count = -1;
+static int hf_homeplug_av_st_iotecha_chanqual_int_et = -1;
+static int hf_homeplug_av_st_iotecha_chanqual_int_tmi = -1;
+static int hf_homeplug_av_st_iotecha_chanqual_tmi_attached = -1;
+static int hf_homeplug_av_st_iotecha_chanqual_fec_type = -1;
+static int hf_homeplug_av_st_iotecha_chanqual_cbld = -1;
+static int hf_homeplug_av_st_iotecha_chanqual_cbld_data_low = -1;
+static int hf_homeplug_av_st_iotecha_chanqual_cbld_data_high = -1;
+
+static int hf_homeplug_av_st_iotecha_mfct_crc = -1;
+static int hf_homeplug_av_st_iotecha_mfct_total_length = -1;
+static int hf_homeplug_av_st_iotecha_mfct_offset = -1;
+static int hf_homeplug_av_st_iotecha_mfct_length = -1;
+static int hf_homeplug_av_st_iotecha_mfct_data = -1;
+static int hf_homeplug_av_st_iotecha_mfct_timeout = -1;
+static int hf_homeplug_av_st_iotecha_mfct_request_type = -1;
+static int hf_homeplug_av_st_iotecha_mfct_reboot = -1;
+static int hf_homeplug_av_st_iotecha_mfct_item_offset = -1;
+static int hf_homeplug_av_st_iotecha_mfct_item_total_length = -1;
+static int hf_homeplug_av_st_iotecha_mfct_name = -1;
+static int hf_homeplug_av_st_iotecha_mfct_value = -1;
+static int hf_homeplug_av_st_iotecha_mfct_result = -1;
+
+static int hf_homeplug_av_st_iotecha_stp_fup_mac_da = -1;
+static int hf_homeplug_av_st_iotecha_stp_fup_mac_sa = -1;
+static int hf_homeplug_av_st_iotecha_stp_fup_mtype = -1;
+
+static int hf_homeplug_av_st_iotecha_cpstate_state = -1;
+static int hf_homeplug_av_st_iotecha_cpstate_pwm_duty = -1;
+static int hf_homeplug_av_st_iotecha_cpstate_pwm_freq = -1;
+static int hf_homeplug_av_st_iotecha_cpstate_volatge = -1;
+static int hf_homeplug_av_st_iotecha_cpstate_adc_bitmask = -1;
+static int hf_homeplug_av_st_iotecha_cpstate_adc_voltage_1 = -1;
+static int hf_homeplug_av_st_iotecha_cpstate_adc_voltage_2 = -1;
+static int hf_homeplug_av_st_iotecha_cpstate_adc_voltage_3 = -1;
+
+static int hf_homeplug_av_st_iotecha_user_message_info = -1;
+static int hf_homeplug_av_st_iotecha_user_message_details = -1;
+
+static int hf_homeplug_av_st_iotecha_test_type = -1;
+static int hf_homeplug_av_st_iotecha_num_sound = -1;
+static int hf_homeplug_av_st_iotecha_data_ind_addr = -1;
+static int hf_homeplug_av_st_iotecha_agc_lock = -1;
+static int hf_homeplug_av_st_iotecha_db_agc_val = -1;
+
+static int hf_homeplug_av_st_iotecha_test_status = -1;
+static int hf_homeplug_av_st_iotecha_suppress_data = -1;
+
+// STP_TEST_CHAN_ATTEN_DATA
+static int hf_homeplug_av_st_iotecha_sound_remain = -1;
+static int hf_homeplug_av_st_iotecha_ntb_time = -1;
+static int hf_homeplug_av_st_iotecha_rsvd1 = -1;
+static int hf_homeplug_av_st_iotecha_rsvd2 = -1;
+static int hf_homeplug_av_st_iotecha_num_segments = -1;
+static int hf_homeplug_av_st_iotecha_segment = -1;
+static int hf_homeplug_av_st_iotecha_num_chan = -1;
+static int hf_homeplug_av_st_iotecha_chan_start = -1;
+
+/* End of ST/IoTecha fields */
+
+/* Subtrees ett */
+static gint ett_homeplug_av = -1;
+static gint ett_homeplug_av_mmhdr = -1;
+static gint ett_homeplug_av_mmtype = -1;
+static gint ett_homeplug_av_fmi = -1;
+static gint ett_homeplug_av_vendor = -1;
+static gint ett_homeplug_av_public = -1;
+
+static gint ett_homeplug_av_fc = -1;
+static gint ett_homeplug_av_sof = -1;
+static gint ett_homeplug_av_sack = -1;
+static gint ett_homeplug_av_rtscts = -1;
+static gint ett_homeplug_av_sound = -1;
+static gint ett_homeplug_av_rsof = -1;
+static gint ett_homeplug_av_bcn = -1;
+static gint ett_homeplug_av_bcn_payload = -1;
+static gint ett_homeplug_av_cc_disc_list_cnf = -1;
+static gint ett_homeplug_av_cc_sta_info = -1;
+static gint ett_homeplug_av_cc_net_info = -1;
+static gint ett_homeplug_av_cm_enc_pld_ind = -1;
+static gint ett_homeplug_av_cm_enc_pld_rsp = -1;
+static gint ett_homeplug_av_cm_set_key_req = -1;
+static gint ett_homeplug_av_cm_set_key_cnf = -1;
+static gint ett_homeplug_av_cm_get_key_req = -1;
+static gint ett_homeplug_av_cm_get_key_cnf = -1;
+static gint ett_homeplug_av_brg_infos_cnf = -1;
+static gint ett_homeplug_av_cm_nw_infos_cnf = -1;
+static gint ett_homeplug_av_nw_stats_cnf = -1;
+
+static gint ett_homeplug_av_get_sw_cnf = -1;
+static gint ett_homeplug_av_wr_mem_req = -1;
+static gint ett_homeplug_av_wr_mem_cnf = -1;
+static gint ett_homeplug_av_rd_mem_req = -1;
+static gint ett_homeplug_av_st_mac_req = -1;
+static gint ett_homeplug_av_st_mac_cnf = -1;
+static gint ett_homeplug_av_rd_mem_cnf = -1;
+static gint ett_homeplug_av_get_nvm_cnf = -1;
+static gint ett_homeplug_av_rs_dev_cnf = -1;
+static gint ett_homeplug_av_wr_mod_req = -1;
+static gint ett_homeplug_av_wr_mod_cnf = -1;
+static gint ett_homeplug_av_wr_mod_ind = -1;
+static gint ett_homeplug_av_rd_mod_req = -1;
+static gint ett_homeplug_av_rd_mod_cnf = -1;
+static gint ett_homeplug_av_mod_nvm_req = -1;
+static gint ett_homeplug_av_mod_nvm_cnf = -1;
+static gint ett_homeplug_av_wd_rpt_req = -1;
+static gint ett_homeplug_av_wd_rpt_ind = -1;
+static gint ett_homeplug_av_lnk_stats_req = -1;
+static gint ett_homeplug_av_lnk_stats_cnf = -1;
+static gint ett_homeplug_av_lnk_stats_tx = -1;
+static gint ett_homeplug_av_lnk_stats_rx = -1;
+static gint ett_homeplug_av_lnk_stats_rx_inv = -1;
+static gint ett_homeplug_av_sniffer_req = -1;
+static gint ett_homeplug_av_sniffer_cnf = -1;
+static gint ett_homeplug_av_sniffer_ind = -1;
+static gint ett_homeplug_av_sniffer_ind_data = -1;
+static gint ett_homeplug_av_nw_info_cnf = -1;
+static gint ett_homeplug_av_nw_info_sta_info = -1;
+static gint ett_homeplug_av_nw_info_net_info = -1;
+static gint ett_homeplug_av_cp_rpt_req = -1;
+static gint ett_homeplug_av_cp_rpt_ind = -1;
+static gint ett_homeplug_av_fr_lbk_req = -1;
+static gint ett_homeplug_av_fr_lbk_cnf = -1;
+static gint ett_homeplug_av_lbk_stat_cnf = -1;
+static gint ett_homeplug_av_set_key_req = -1;
+static gint ett_homeplug_av_set_key_cnf = -1;
+static gint ett_homeplug_av_mfg_string_cnf = -1;
+static gint ett_homeplug_av_rd_cblock_cnf = -1;
+static gint ett_homeplug_av_cblock_hdr = -1;
+static gint ett_homeplug_av_cblock = -1;
+static gint ett_homeplug_av_set_sdram_req = -1;
+static gint ett_homeplug_av_set_sdram_cnf = -1;
+static gint ett_homeplug_av_host_action_ind = -1;
+static gint ett_homeplug_av_host_action_rsp = -1;
+static gint ett_homeplug_av_op_attr_req = -1;
+static gint ett_homeplug_av_op_attr_cnf = -1;
+static gint ett_homeplug_av_op_attr_data = -1;
+static gint ett_homeplug_av_enet_phy_req = -1;
+static gint ett_homeplug_av_enet_phy_cnf = -1;
+static gint ett_homeplug_av_tone_map_tx_req = -1;
+static gint ett_homeplug_av_tone_map_rx_req = -1;
+static gint ett_homeplug_av_tone_map_tx_cnf = -1;
+static gint ett_homeplug_av_tone_map_rx_cnf = -1;
+static gint ett_homeplug_av_tone_map_carriers = -1;
+static gint ett_homeplug_av_tone_map_carrier = -1;
+/* HPGP */
+static gint ett_homeplug_av_gp_cm_atten_char_profile = -1;
+static gint ett_homeplug_av_gp_cm_slac_user_data_tlv = -1;
+
+/* ST/IoTecha specific subtrees */
+static gint ett_homeplug_av_st_iotecha_header = -1;
+static gint ett_homeplug_av_st_iotecha_type_length_value = -1;
+static gint ett_homeplug_av_st_iotecha_chanqual_int = -1;
+static gint ett_homeplug_av_st_iotecha_chanqual_cbld = -1;
+static gint ett_homeplug_av_st_iotecha_bss_entry = -1;
+/* End of ST/IoTecha specific subtrees */
+
+/* Saving vendor specific subtree */
+static proto_tree *ti_vendor = 0;
+
+#define HOMEPLUG_AV_MMHDR_LEN 3 /* MM version (1) + MM type (2) */
+
+#define HOMEPLUG_AV_PUBLIC_FRAG_COUNT_MASK 0xF0
+#define HOMEPLUG_AV_PUBLIC_FRAG_INDEX_MASK 0x0F
+
+/* MME Values */
+/* General MME Types */
+typedef enum {
+ /* Station - Central Coordinator*/
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_BACKUP_APPOINT_REQ = 0x0004,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_BACKUP_APPOINT_CNF = 0x0005,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_INFO_REQ = 0x0008,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_INFO_CNF = 0x0009,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_INFO_IND = 0x000A,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_INFO_RSP = 0x000B,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_HANDOVER_REQ = 0x000C,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_HANDOVER_CNF = 0x000D,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_HANDOVER_INFO_IND = 0x0012,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_HANDOVER_INFO_RSP = 0x0013,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_DISCOVER_LIST_REQ = 0x0014,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_DISCOVER_LIST_CNF = 0x0015,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_DISCOVER_LIST_IND = 0x0016,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_NEW_REQ = 0x0018,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_NEW_CNF = 0x0019,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_MOD_REQ = 0x001C,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_MOD_CNF = 0x001D,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_SQZ_REQ = 0x0020,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_SQZ_CNF = 0x0021,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_REL_REQ = 0x0024,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_REL_IND = 0x0026,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_DETECTC_REPORT_REQ = 0x0028,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_DETECTC_REPORT_CNF = 0x0029,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_WHO_RU_REQ = 0x002C,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_WHO_RU_CNF = 0x002D,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_ASSOC_REQ = 0x0030,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_ASSOC_CNF = 0x0031,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_LEAVE_REQ = 0x0034,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_LEAVE_CNF = 0x0035,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_LEAVE_IND = 0x0036,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_LEAVE_RSP = 0x0037,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_SET_TEI_MAP_REQ = 0x0038,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_SET_TEI_MAP_IND = 0x003A,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_RELAY_REQ = 0x003C,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_RELAY_IND = 0x003E,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_BEACON_RELIABILITY_REQ = 0x0040,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_BEACON_RELIABILITY_CNF = 0x0041,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_ALLOC_MOVE_REQ = 0x0044,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_ALLOC_MOVE_CNF = 0x0045,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_NEW_REQ = 0x0048,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_NEW_CNF = 0x0049,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_NEW_IND = 0x004A,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_NEW_RSP = 0x004B,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_REL_REQ = 0x004C,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_REL_CNF = 0x004D,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_REL_IND = 0x004E,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_REL_RSP = 0x004F,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_DCPPC_IND = 0x0052,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_DCPPC_RSP = 0x0053,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_HP1_DET_REQ = 0x0054,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_HP1_DET_CNF = 0x0055,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CC_BLE_UPDATE_IND = 0x005A,
+ /* HPGP Specific*/
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_BCAST_REPEAT_IND = 0x005E,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_BCAST_REPEAT_RSP = 0x005F,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_MH_LINK_NEW_REQ = 0x0060,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_MH_LINK_NEW_CNF = 0x0061,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_DETECTION_REPORT_IND = 0x0066,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_START_RESYNC_REQ = 0x0068,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_FINISH_RESYNC_REQ = 0x006C,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_DETECTED_RESYNC_IND = 0x0072,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_TRANSMIT_RESYNC_REQ = 0x0074,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_REQ = 0x0078,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_CNF = 0x0079,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_EXIT_REQ = 0x007C,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_EXIT_CNF = 0x007D,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_LIST_REQ = 0x0080,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_LIST_CNF = 0x0081,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_STOP_REQ = 0x0084,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_STOP_CNF = 0x0085,
+ /* Proxy Coordinator */
+ HOMEPLUG_AV_MMTYPE_GENERAL_CP_PROXY_APPOINT_REQ = 0x2000,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CP_PROXY_APPOINT_CNF = 0x2001,
+ HOMEPLUG_AV_MMTYPE_GENERAL_PH_PROXY_APPOINT_IND = 0x2006,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CP_PROXY_WAKE_REQ = 0x2008,
+ /* CCo - CCo */
+ HOMEPLUG_AV_MMTYPE_GENERAL_NN_INL_REQ = 0x4000,
+ HOMEPLUG_AV_MMTYPE_GENERAL_NN_INL_CNF = 0x4001,
+ HOMEPLUG_AV_MMTYPE_GENERAL_NN_NEW_NET_REQ = 0x4004,
+ HOMEPLUG_AV_MMTYPE_GENERAL_NN_NEW_NET_CNF = 0x4005,
+ HOMEPLUG_AV_MMTYPE_GENERAL_NN_NEW_NET_IND = 0x4006,
+ HOMEPLUG_AV_MMTYPE_GENERAL_NN_ADD_ALLOC_REQ = 0x4008,
+ HOMEPLUG_AV_MMTYPE_GENERAL_NN_ADD_ALLOC_CNF = 0x4009,
+ HOMEPLUG_AV_MMTYPE_GENERAL_NN_ADD_ALLOC_IND = 0x400A,
+ HOMEPLUG_AV_MMTYPE_GENERAL_NN_REL_ALLOC_REQ = 0x400C,
+ HOMEPLUG_AV_MMTYPE_GENERAL_NN_REL_ALLOC_CNF = 0x400D,
+ HOMEPLUG_AV_MMTYPE_GENERAL_NN_REL_NET_IND = 0x4012,
+ /* Station - Station */
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_UNASSOCIATED_STA_IND = 0x6002,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_ENCRYPTED_PAYLOAD_IND = 0x6006,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_ENCRYPTED_PAYLOAD_RSP = 0x6007,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_SET_KEY_REQ = 0x6008,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_SET_KEY_CNF = 0x6009,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_KEY_REQ = 0x600C,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_KEY_CNF = 0x600D,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_SC_JOIN_REQ = 0x6010,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_SC_JOIN_CNF = 0x6011,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_SC_CHAN_EST_IND = 0x6016,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_TM_UPDATE_IND = 0x601A,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_AMP_MAP_REQ = 0x601C,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_AMP_MAP_CNF = 0x601D,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_BRG_INFO_REQ = 0x6020,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_BRG_INFO_CNF = 0x6021,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_NEW_REQ = 0x6024,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_NEW_CNF = 0x6025,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_REL_IND = 0x602A,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_REL_RSP = 0x602B,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_MOD_REQ = 0x602C,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_MOD_CNF = 0x602D,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_INFO_REQ = 0x6030,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_INFO_CNF = 0x6031,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_STA_CAP_REQ = 0x6034,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_STA_CAP_CNF = 0x6035,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_INFO_REQ = 0x6038,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_INFO_CNF = 0x6039,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_BEACON_REQ = 0x603C,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_BEACON_CNF = 0x603D,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_HFID_REQ = 0x6040,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_HFID_CNF = 0x6041,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_MME_ERROR_IND = 0x6046,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_STATS_REQ = 0x6048,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_STATS_CNF = 0x6049,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_LINK_STATS_REQ = 0x604C,
+ HOMEPLUG_AV_MMTYPE_GENERAL_CM_LINK_STATS_CNF = 0x604D,
+ /* HPGP Specific*/
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ROUTE_INFO_REQ = 0x6050,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ROUTE_INFO_CNF = 0x6051,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ROUTE_INFO_IND = 0x6052,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_UNREACHABLE_IND = 0x6056,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_MH_CONN_NEW_REQ = 0x6058,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_MH_CONN_NEW_CNF = 0x6059,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_EXTENDED_TONEMASK_REQ = 0x605C,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_EXTENDED_TONEMASK_CNF = 0x605D,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_STA_INDENTIFY_REQ = 0x6060,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_STA_INDENTIFY_CNF = 0x6061,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_STA_INDENTIFY_IND = 0x6062,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_STA_INDENTIFY_RSP = 0x6063,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_PARM_REQ = 0x6064,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_PARM_CNF = 0x6065,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_START_ATTEN_CHAR_IND = 0x606A,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ATTEN_CHAR_IND = 0x606E,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ATTEN_CHAR_RSP = 0x606F,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_PKCS_CERT_REQ = 0x6070,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_PKCS_CERT_CNF = 0x6071,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_PKCS_CERT_IND = 0x6072,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_PKCS_CERT_RSP = 0x6073,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_MNBC_SOUND_IND = 0x6076,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_VALIDATE_REQ = 0x6078,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_VALIDATE_CNF = 0x6079,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_MATCH_REQ = 0x607C,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_MATCH_CNF = 0x607D,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_USER_DATA_REQ = 0x6080,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_USER_DATA_CNF = 0x6081,
+ HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ATTEN_PROFILE_IND = 0x6086,
+} homeplug_av_mmetypes_general_type;
+
+/* QCA MME Types */
+typedef enum {
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_SW_REQ = 0xA000,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_SW_CNF = 0xA001,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MEM_REQ = 0xA004,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MEM_CNF = 0xA005,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MEM_REQ = 0xA008,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MEM_CNF = 0xA009,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_ST_MAC_REQ = 0xA00C,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_ST_MAC_CNF = 0xA00D,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_NVM_REQ = 0xA010,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_NVM_CNF = 0xA011,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_RS_DEV_REQ = 0xA01C,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_RS_DEV_CNF = 0xA01D,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MOD_REQ = 0xA020,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MOD_CNF = 0xA021,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MOD_IND = 0xA022,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MOD_REQ = 0xA024,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MOD_CNF = 0xA025,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_NVM_MOD_REQ = 0xA028,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_NVM_MOD_CNF = 0xA029,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_WD_RPT_REQ = 0xA02C,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_WD_RPT_IND = 0xA02E,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_LNK_STATS_REQ = 0xA030,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_LNK_STATS_CNF = 0xA031,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_SNIFFER_REQ = 0xA034,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_SNIFFER_CNF = 0xA035,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_SNIFFER_IND = 0xA036,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_NW_INFO_REQ = 0xA038,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_NW_INFO_CNF = 0xA039,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_CP_RPT_REQ = 0xA040,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_CP_RPT_IND = 0xA042,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_FR_LBK_REQ = 0xA048,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_FR_LBK_CNF = 0xA049,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_LBK_STAT_REQ = 0xA04C,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_LBK_STAT_CNF = 0xA04D,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_KEY_REQ = 0xA050,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_KEY_CNF = 0xA051,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_MFG_STRING_REQ = 0xA054,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_MFG_STRING_CNF = 0xA055,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_CBLOCK_REQ = 0xA058,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_CBLOCK_CNF = 0xA059,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_SDRAM_REQ = 0xA05C,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_SDRAM_CNF = 0xA05D,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_HOST_ACTION_IND = 0xA062,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_HOST_ACTION_RSP = 0xA063,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_OP_ATTR_REQ = 0xA068,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_OP_ATTR_CNF = 0xA069,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_ENET_PHY_REQ = 0xA06C,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_ENET_PHY_CNF = 0xA06D,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_TX_REQ = 0xA070,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_TX_CNF = 0xA071,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_RX_REQ = 0xA090,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_RX_CNF = 0xA091,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_LINK_STATUS_REQ = 0xA0B8,
+ HOMEPLUG_AV_MMTYPE_QUALCOMM_LINK_STATUS_CNF = 0xA0B9,
+} homeplug_av_mmetypes_qualcomm_type;
+
+/* ST/IoTecha MME Types */
+typedef enum {
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_AUTH_SET_NMK_REQ = 0x8000,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_AUTH_SET_NMK_CNF = 0x8001,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_LINK_STATUS_REQ = 0x8004,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_LINK_STATUS_CNF = 0x8005,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_LINK_STATUS_IND = 0x8006,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_LOCAL_REQ = 0x8008,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_LOCAL_CNF = 0x8009,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_SET_MAXGAIN_REQ = 0x800C,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_SET_MAXGAIN_CNF = 0x800D,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_REQ = 0xA000,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_CNF = 0xA001,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_LIST_REQ = 0xA00C,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_LIST_CNF = 0xA00D,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_SNAPSHOT_REQ = 0xA010,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_SNAPSHOT_CNF = 0xA011,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_BSS_LIST_REQ = 0xA014,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_BSS_LIST_CNF = 0xA015,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CHANQUAL_REPORT_REQ = 0xA018,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CHANQUAL_REPORT_CNF = 0xA019,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CHANQUAL_REPORT_IND = 0xA01A,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_RX_REQ = 0xA100,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_RX_CNF = 0xA101,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_DATA_IND = 0xA106,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_TX_REQ = 0xA108,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_TX_CNF = 0xA109,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_SOUND_QUIET_IND = 0xA10E,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_STAGE_REQ = 0xA200,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_STAGE_CNF = 0xA201,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_FINISH_REQ = 0xA204,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_FINISH_CNF = 0xA205,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_ITEM_REQ = 0xA208,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_ITEM_CNF = 0xA209,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_KEYLIST_REQ = 0xA20C,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_KEYLIST_CNF = 0xA20D,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_FUP_REQ = 0xA210,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_RESERVED_REQ = 0xA214,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CPSTATE_IND = 0xA22E,
+ HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_USER_MESSAGE_IND = 0xA232,
+} homeplug_av_mmetypes_st_iotecha_type;
+
+/* Vendors OUI */
+#define HOMEPLUG_AV_OUI_NONE 0
+#define HOMEPLUG_AV_OUI_QCA 0x00B052
+#define HOMEPLUG_AV_OUI_ST_IOTECHA 0x0080E1
+
+static const value_string homeplug_av_vendors_oui_vals[] = {
+ { HOMEPLUG_AV_OUI_QCA, "Qualcomm Atheros" },
+ { HOMEPLUG_AV_OUI_ST_IOTECHA, "ST/IoTecha" },
+ { 0, NULL }
+};
+
+/* Packet names */
+/* Public MMEs */
+static const value_string homeplug_av_mmtype_general_vals[] = {
+ /* Station - Central Coordinator*/
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_BACKUP_APPOINT_REQ , "CC_BACKUP_APPOINT.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_BACKUP_APPOINT_CNF , "CC_BACKUP_APPOINT.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_INFO_REQ , "CC_LINK_INFO.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_INFO_CNF , "CC_LINK_INFO.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_INFO_IND , "CC_LINK_INFO.IND" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_INFO_RSP , "CC_LINK_INFO.RSP" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_HANDOVER_REQ , "CC_HANDOVER.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_HANDOVER_CNF , "CC_HANDOVER.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_HANDOVER_INFO_IND , "CC_HANDOVER_INFO.IND" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_HANDOVER_INFO_RSP , "CC_HANDOVER_INFO.RSP" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_DISCOVER_LIST_REQ , "CC_DISCOVER_LIST.REQ (Central Coordination Discovery List Request)" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_DISCOVER_LIST_CNF , "CC_DISCOVER_LIST.CNF (Central Coordination Discovery List Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_DISCOVER_LIST_IND , "CC_DISCOVER_LIST.IND" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_NEW_REQ , "CC_LINK_NEW.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_NEW_CNF , "CC_LINK_NEW.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_MOD_REQ , "CC_LINK_MOD.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_MOD_CNF , "CC_LINK_MOD.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_SQZ_REQ , "CC_LINK_SQZ.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_SQZ_CNF , "CC_LINK_SQZ.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_REL_REQ , "CC_LINK_REL.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LINK_REL_IND , "CC_LINK_REL.IND" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_DETECTC_REPORT_REQ , "CC_DETECTC_REPORT.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_DETECTC_REPORT_CNF , "CC_DETECTC_REPORT.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_WHO_RU_REQ , "CC_WHO_RU.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_WHO_RU_CNF , "CC_WHO_RU.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ASSOC_REQ , "CC_ASSOC.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ASSOC_CNF , "CC_ASSOC.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LEAVE_REQ , "CC_LEAVE.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LEAVE_CNF , "CC_LEAVE.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LEAVE_IND , "CC_LEAVE.IND" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_LEAVE_RSP , "CC_LEAVE.RSP" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_SET_TEI_MAP_REQ , "CC_SET_TEI_MAP.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_SET_TEI_MAP_IND , "CC_SET_TEI_MAP.IND" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_RELAY_REQ , "CC_RELAY.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_RELAY_IND , "CC_RELAY.IND" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_BEACON_RELIABILITY_REQ , "CC_BEACON_RELIABILITY.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_BEACON_RELIABILITY_CNF , "CC_BEACON_RELIABILITY.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ALLOC_MOVE_REQ , "CC_ALLOC_MOVE.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ALLOC_MOVE_CNF , "CC_ALLOC_MOVE.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_NEW_REQ , "CC_ACCESS_NEW.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_NEW_CNF , "CC_ACCESS_NEW.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_NEW_IND , "CC_ACCESS_NEW.IND" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_NEW_RSP , "CC_ACCESS_NEW.RSP" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_REL_REQ , "CC_ACCESS_REL.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_REL_CNF , "CC_ACCESS_REL.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_REL_IND , "CC_ACCESS_REL.IND" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_ACCESS_REL_RSP , "CC_ACCESS_REL.RSP" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_DCPPC_IND , "CC_DCPPC.IND" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_DCPPC_RSP , "CC_DCPPC.RSP" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_HP1_DET_REQ , "CC_HP1_DET.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_HP1_DET_CNF , "CC_HP1_DET.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CC_BLE_UPDATE_IND , "CC_BLE_UPDATE.IND" },
+ /* HPGP Specific*/
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_BCAST_REPEAT_IND , "CC_BCAST_REPEAT.IND" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_BCAST_REPEAT_RSP , "CC_BCAST_REPEAT.RSP" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_MH_LINK_NEW_REQ , "CC_MH_LINK_NEW.REQ" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_MH_LINK_NEW_CNF , "CC_MH_LINK_NEW.CNF" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_DETECTION_REPORT_IND , "CC_ISP_DETECTION_REPORT.IND" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_START_RESYNC_REQ , "CC_ISP_START_RESYNC.REQ" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_FINISH_RESYNC_REQ , "CC_ISP_FINISH_RESYNC.REQ" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_DETECTED_RESYNC_IND , "CC_ISP_DETECTED_RESYNC.IND" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_ISP_TRANSMIT_RESYNC_REQ , "CC_ISP_TRANSMIT_RESYNC.REQ" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_REQ , "CC_POWERSAVE.REQ" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_CNF , "CC_POWERSAVE.CNF" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_EXIT_REQ , "CC_POWERSAVE_EXIT.REQ" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_EXIT_CNF , "CC_POWERSAVE_EXIT.CNF" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_LIST_REQ , "CC_POWERSAVE_LIST.REQ" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_LIST_CNF , "CC_POWERSAVE_LIST.CNF" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_STOP_REQ , "CC_POWERSAVE_STOP.REQ" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CC_POWERSAVE_STOP_CNF , "CC_POWERSAVE_STOP.CNF" },
+ /* Proxy Coordinator */
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CP_PROXY_APPOINT_REQ , "CP_PROXY_APPOINT.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CP_PROXY_APPOINT_CNF , "CP_PROXY_APPOINT.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_PH_PROXY_APPOINT_IND , "PH_PROXY_APPOINT.IND" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CP_PROXY_WAKE_REQ , "CP_PROXY_WAKE.REQ" },
+ /* CCo - CCo */
+ { HOMEPLUG_AV_MMTYPE_GENERAL_NN_INL_REQ , "NN_INL.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_NN_INL_CNF , "NN_INL.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_NN_NEW_NET_REQ , "NN_NEW_NET.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_NN_NEW_NET_CNF , "NN_NEW_NET.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_NN_NEW_NET_IND , "NN_NEW_NET.IND" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_NN_ADD_ALLOC_REQ , "NN_ADD_ALLOC.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_NN_ADD_ALLOC_CNF , "NN_ADD_ALLOC.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_NN_ADD_ALLOC_IND , "NN_ADD_ALLOC.IND" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_NN_REL_ALLOC_REQ , "NN_REL_ALLOC.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_NN_REL_ALLOC_CNF , "NN_REL_ALLOC.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_NN_REL_NET_IND , "NN_REL_NET.IND" },
+ /* Station - Station */
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_UNASSOCIATED_STA_IND , "CM_UNASSOCIATED_STA.IND" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_ENCRYPTED_PAYLOAD_IND , "CM_ENCRYPTED_PAYLOAD.IND (Encrypted Payload Indicate)" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_ENCRYPTED_PAYLOAD_RSP , "CM_ENCRYPTED_PAYLOAD.RSP (Encrypted Payload Response)" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_SET_KEY_REQ , "CM_SET_KEY.REQ (Set Key Request)" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_SET_KEY_CNF , "CM_SET_KEY.CNF (Set Key Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_KEY_REQ , "CM_GET_KEY.REQ (Get Key Request)" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_KEY_CNF , "CM_GET_KEY.CNF (Get Key Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_SC_JOIN_REQ , "CM_SC_JOIN.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_SC_JOIN_CNF , "CM_SC_JOIN.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_SC_CHAN_EST_IND , "CM_SC_CHAN_EST.IND" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_TM_UPDATE_IND , "CM_TM_UPDATE.IND" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_AMP_MAP_REQ , "CM_AMP_MAP.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_AMP_MAP_CNF , "CM_AMP_MAP.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_BRG_INFO_REQ , "CM_BRG_INFO.REQ (Get Bridge Informations Request)" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_BRG_INFO_CNF , "CM_BRG_INFO.CNF (Get Bridge Informations Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_NEW_REQ , "CM_CONN_NEW.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_NEW_CNF , "CM_CONN_NEW.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_REL_IND , "CM_CONN_REL.IND" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_REL_RSP , "CM_CONN_REL.RSP" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_MOD_REQ , "CM_CONN_MOD.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_MOD_CNF , "CM_CONN_MOD.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_INFO_REQ , "CM_CONN_INFO.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_CONN_INFO_CNF , "CM_CONN_INFO.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_STA_CAP_REQ , "CM_STA_CAP.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_STA_CAP_CNF , "CM_STA_CAP.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_INFO_REQ , "CM_NW_INFO.REQ (Get Network Informations Request)" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_INFO_CNF , "CM_NW_INFO.CNF (Get Network Informations Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_BEACON_REQ , "CM_GET_BEACON.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_BEACON_CNF , "CM_GET_BEACON.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_HFID_REQ , "CM_HFID.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_HFID_CNF , "CM_HFID.CNF" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_MME_ERROR_IND , "CM_MME_ERROR.IND" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_STATS_REQ , "CM_NW_STATS.REQ (Get Network Statistics Request)" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_STATS_CNF , "CM_NW_STATS.CNF (Get Network Statistics Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_LINK_STATS_REQ , "CM_LINK_STATS.REQ" },
+ { HOMEPLUG_AV_MMTYPE_GENERAL_CM_LINK_STATS_CNF , "CM_LINK_STATS.CNF" },
+ /* HPGP Specific*/
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ROUTE_INFO_REQ , "CM_ROUTE_INFO.REQ" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ROUTE_INFO_CNF , "CM_ROUTE_INFO.CNF" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ROUTE_INFO_IND , "CM_ROUTE_INFO.IND" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_UNREACHABLE_IND , "CM_UNREACHABLE.IND" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_MH_CONN_NEW_REQ , "CM_MH_CONN_NEW.REQ" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_MH_CONN_NEW_CNF , "CM_MH_CONN_NEW.CNF" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_EXTENDED_TONEMASK_REQ , "CM_EXTENDED_TONEMASK.REQ" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_EXTENDED_TONEMASK_CNF , "CM_EXTENDED_TONEMASK.CNF" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_STA_INDENTIFY_REQ , "CM_STA_INDENTIFY.REQ" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_STA_INDENTIFY_CNF , "CM_STA_INDENTIFY_CNF" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_STA_INDENTIFY_IND , "CM_STA_INDENTIFY.IND" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_STA_INDENTIFY_RSP , "CM_STA_INDENTIFY.RSP" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_PARM_REQ , "CM_SLAC_PARM.REQ" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_PARM_CNF , "CM_SLAC_PARM.CNF" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_START_ATTEN_CHAR_IND , "CM_START_ATTEN_CHAR.IND" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ATTEN_CHAR_IND , "CM_ATTEN_CHAR.IND" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ATTEN_CHAR_RSP , "CM_ATTEN_CHAR.RSP" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_PKCS_CERT_REQ , "CM_PKCS_CERT.REQ" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_PKCS_CERT_CNF , "CM_PKCS_CERT.CNF" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_PKCS_CERT_IND , "CM_PKCS_CERT.IND" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_PKCS_CERT_RSP , "CM_PKCS_CERT.RSP" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_MNBC_SOUND_IND , "CM_MNBC_SOUND.IND" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_VALIDATE_REQ , "CM_VALIDATE.REQ" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_VALIDATE_CNF , "CM_VALIDATE.CNF" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_MATCH_REQ , "CM_SLAC_MATCH.REQ" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_MATCH_CNF , "CM_SLAC_MATCH.CNF" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_USER_DATA_REQ , "CM_SLAC_USER_DATA.REQ" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_USER_DATA_CNF , "CM_SLAC_USER_DATA.CNF" },
+ { HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ATTEN_PROFILE_IND , "CM_ATTEN_PROFILE.IND" },
+ { 0, NULL }
+};
+
+/* QCA vendor-specific MMEs */
+static const value_string homeplug_av_mmtype_qualcomm_vals[] = {
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_SW_REQ, "GET_SW.REQ (Get Device/SW Version Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_SW_CNF, "GET_SW.CNF (Get Device/SW Version Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MEM_REQ, "WR_MEM.REQ (Write MAC Memory Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MEM_CNF, "WR_MEM.CNF (Write MAC Memory Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MEM_REQ, "RD_MEM.REQ (Read MAC Memory Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MEM_CNF, "RD_MEM.CNF (Read MAC Memory Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_ST_MAC_REQ, "ST_MAC.REQ (Start MAC Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_ST_MAC_CNF, "ST_MAC.CNF (Start MAC Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_NVM_REQ, "GET_NVM.REQ (Get NVM Parameters Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_NVM_CNF, "GET_NVM.CNF (Get NVM Parameters Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_RS_DEV_REQ, "RS_DEV.REQ (Reset Device Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_RS_DEV_CNF, "RS_DEV.CNF (Reset Device Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MOD_REQ, "WR_MOD.REQ (Write Module Data Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MOD_CNF, "WR_MOD.CNF (Write Module Data Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MOD_IND, "WR_MOD.IND (Write Module Data Indicate)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MOD_REQ, "RD_MOD.REQ (Read Module Data Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MOD_CNF, "RD_MOD.CNF (Read Module Data Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_NVM_MOD_REQ, "NVM_MOD.REQ (Write Module Data to NVM Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_NVM_MOD_CNF, "NVM_MOD.CNF (Write Module Data to NVM Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_WD_RPT_REQ, "WD_RPT.REQ (Get Watchdog Report Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_WD_RPT_IND, "WD_RPT.IND (Get Watchdog Report Indicate)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_LNK_STATS_REQ, "LNK_STATS.REQ (Link Statistics Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_LNK_STATS_CNF, "LNK_STATS.CNF (Link Statistics Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_SNIFFER_REQ, "SNIFFER.REQ (Sniffer Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_SNIFFER_CNF, "SNIFFER.CNF (Sniffer Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_SNIFFER_IND, "SNIFFER.IND (Sniffer Indicate)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_NW_INFO_REQ, "NW_INFO.REQ (Network Info Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_NW_INFO_CNF, "NW_INFO.CNF (Network Info Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_CP_RPT_REQ, "CP_RPT.REQ (Check Points Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_CP_RPT_IND, "CP_RPT.IND (Check Points Indicate)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_FR_LBK_REQ, "FR_LBK.REQ (Loopback Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_FR_LBK_CNF, "FR_LBK.CNF (Loopback Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_LBK_STAT_REQ, "LBK_STAT.REQ (Loopback Status Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_LBK_STAT_CNF, "LBK_STAT.CNF (Loopback Status Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_KEY_REQ, "SET_KEY.REQ (Set Encryption Key Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_KEY_CNF, "SET_KEY.CNF (Set Encryption Key Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_MFG_STRING_REQ, "MFG_STRING.REQ (Get Manufacturer String Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_MFG_STRING_CNF, "MFG_STRING.CNF (Get Manufacturer String Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_CBLOCK_REQ, "RD_CBLOCK.REQ (Read Configuration Block Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_CBLOCK_CNF, "RD_CBLOCK.CNF (Read Configuration Block Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_SDRAM_REQ, "SET_SDRAM.REQ (Set SDRAM Configuration Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_SDRAM_CNF, "SET_SDRAM.CNF (Set SDRAM Configuration Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_HOST_ACTION_IND, "HOST_ACTION.IND (Embedded Host Action Required Indication)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_HOST_ACTION_RSP, "HOST_ACTION.RSP (Embedded Host Action Required Response)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_OP_ATTR_REQ, "OP_ATTR.REQ (Get Device Attributes Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_OP_ATTR_CNF, "OP_ATTR.CNF (Get Device Attributes Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_ENET_PHY_REQ, "GET_ENET_PHY.REQ (Get Ethernet PHY Settings Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_ENET_PHY_CNF, "GET_ENET_PHY.CNF (Get Ethernet PHY Settings Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_TX_REQ, "TONE_MAP_TX.REQ (Tone Map Tx Characteristics Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_TX_CNF, "TONE_MAP_TX.CNF (Tone Map Tx Characteristics Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_RX_REQ, "TONE_MAP_RX.REQ (Tone Map Rx Characteristics Request)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_RX_CNF, "TONE_MAP_RX.CNF (Tone Map Rx Characteristics Confirmation)" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_LINK_STATUS_REQ, "LINK_STATUS.REQ" },
+ { HOMEPLUG_AV_MMTYPE_QUALCOMM_LINK_STATUS_CNF, "LINK_STATUS.CNF" },
+ { 0, NULL }
+};
+
+/* ST/IoTecha vendor-specific MMEs */
+static const value_string homeplug_av_mmtype_st_iotecha_vals[] = {
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_AUTH_SET_NMK_REQ , "STP_AUTH_SET_NMK.REQ" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_AUTH_SET_NMK_CNF , "STP_AUTH_SET_NMK.CNF" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_LINK_STATUS_REQ , "STP_LINK_STATUS.REQ" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_LINK_STATUS_CNF , "STP_LINK_STATUS.CNF" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_LINK_STATUS_IND , "STP_LINK_STATUS.IND" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_LOCAL_REQ , "STP_DISCOVER_LOCAL.REQ" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_LOCAL_CNF , "STP_DISCOVER_LOCAL.CNF" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_SET_MAXGAIN_REQ , "STP_SET_MAXGAIN.REQ" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_SET_MAXGAIN_CNF , "STP_SET_MAXGAIN.CNF" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_REQ , "STP_DISCOVER.REQ" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_CNF , "STP_DISCOVER.CNF" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_LIST_REQ , "STP_GET_TEI_LIST.REQ" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_LIST_CNF , "STP_GET_TEI_LIST.CNF" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_SNAPSHOT_REQ , "STP_GET_TEI_SNAPSHOT.REQ" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_SNAPSHOT_CNF , "STP_GET_TEI_SNAPSHOT.CNF" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_BSS_LIST_REQ , "STP_GET_BSS_LIST.REQ" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_BSS_LIST_CNF , "STP_GET_BSS_LIST.CNF" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CHANQUAL_REPORT_REQ , "STP_CHANQUAL_REPORT.REQ" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CHANQUAL_REPORT_CNF , "STP_CHANQUAL_REPORT.CNF" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CHANQUAL_REPORT_IND , "STP_CHANQUAL_REPORT.IND" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_RX_REQ , "STP_TEST_CHAN_ATTEN_START_RX.REQ" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_RX_CNF , "STP_TEST_CHAN_ATTEN_START_RX.CNF" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_DATA_IND , "STP_TEST_CHAN_ATTEN_DATA.IND" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_TX_REQ , "STP_TEST_CHAN_ATTEN_START_TX.REQ" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_TX_CNF , "STP_TEST_CHAN_ATTEN_START_TX.CNF" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_SOUND_QUIET_IND , "STP_TEST_SOUND_QUIET.IND" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_STAGE_REQ , "STP_MFCT_UPDATE_STAGE.REQ" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_STAGE_CNF , "STP_MFCT_UPDATE_STAGE.CNF" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_FINISH_REQ , "STP_MFCT_UPDATE_FINISH.REQ" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_FINISH_CNF , "STP_MFCT_UPDATE_FINISH.CNF" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_ITEM_REQ , "STP_MFCT_GET_ITEM.REQ" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_ITEM_CNF , "STP_MFCT_GET_ITEM.CNF" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_KEYLIST_REQ , "STP_MFCT_GET_KEYLIST.REQ" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_KEYLIST_CNF , "STP_MFCT_GET_KEYLIST.CNF" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_FUP_REQ , "STP_FUP.REQ" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_RESERVED_REQ , "STP_RESERVED.REQ (IoTecha HPGP Analyzer Raw Data)" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CPSTATE_IND , "STP_CPSTATE.IND" },
+ { HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_USER_MESSAGE_IND , "STP_USER_MESSAGE.IND" },
+ { 0, NULL }
+};
+
+/* ext MMType vals */
+static value_string_ext homeplug_av_mmtype_general_vals_ext = VALUE_STRING_EXT_INIT(homeplug_av_mmtype_general_vals);
+static value_string_ext homeplug_av_mmtype_qualcomm_vals_ext = VALUE_STRING_EXT_INIT(homeplug_av_mmtype_qualcomm_vals);
+static value_string_ext homeplug_av_mmtype_st_iotecha_vals_ext = VALUE_STRING_EXT_INIT(homeplug_av_mmtype_st_iotecha_vals);
+
+/* Versions */
+#define HOMEPLUG_AV_MMVER_MASK 0x01
+#define HOMEPLUG_AV_MMVER_1_0 0x00
+#define HOMEPLUG_AV_MMVER_1_1 0x01
+
+static const value_string homeplug_av_mmver_vals[] = {
+ { HOMEPLUG_AV_MMVER_1_0, "1.0" },
+ { HOMEPLUG_AV_MMVER_1_1, "1.1" },
+ { 0, NULL }
+};
+
+/* MMTYPE LSB Values */
+#define HOMEPLUG_AV_MMTYPE_LSB_MASK 0x03
+
+static const value_string homeplug_av_mmtype_lsb_vals[] = {
+ { 0x00, "Request" },
+ { 0x01, "Confirm" },
+ { 0x02, "Indication" },
+ { 0x03, "Response" },
+ { 0, NULL }
+};
+
+/* MMTYPE MSB Values */
+#define HOMEPLUG_AV_MMTYPE_MSB_STA_CCO 0x00
+#define HOMEPLUG_AV_MMTYPE_MSB_PROXY 0x01
+#define HOMEPLUG_AV_MMTYPE_MSB_CCO_CCO 0x02
+#define HOMEPLUG_AV_MMTYPE_MSB_STA_STA 0x03
+#define HOMEPLUG_AV_MMTYPE_MSB_MANUF 0x04
+#define HOMEPLUG_AV_MMTYPE_MSB_VENDOR 0x05
+#define HOMEPLUG_AV_MMTYPE_MSB_RSV 0x06
+#define HOMEPLUG_AV_MMTYPE_MSB_MASK 0xe0
+#define HOMEPLUG_AV_MMTYPE_MSB_SHIFT (5)
+
+static const value_string homeplug_av_mmtype_msb_vals[] = {
+ { HOMEPLUG_AV_MMTYPE_MSB_STA_CCO, "STA - Central Coordinator" },
+ { HOMEPLUG_AV_MMTYPE_MSB_PROXY, "Proxy Coordinator" },
+ { HOMEPLUG_AV_MMTYPE_MSB_CCO_CCO, "Central Coordinator - Central Coordinator" },
+ { HOMEPLUG_AV_MMTYPE_MSB_STA_STA, "STA - STA" },
+ { HOMEPLUG_AV_MMTYPE_MSB_MANUF, "Manufacturer Specific" },
+ { HOMEPLUG_AV_MMTYPE_MSB_VENDOR, "Vendor Specific" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_CC_STA_NET_MASK 0x01
+
+static const value_string homeplug_av_cc_sta_net_type_vals[] = {
+ { 0x00, "Different network" },
+ { 0x01, "Same network" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_sig_level_vals[] = {
+ { 0x00, "N/A" },
+ { 0x01, "> - 10 dB, but <= 0 dB" },
+ { 0x02, "> - 15 dB, but <= -10 dB" },
+ { 0x03, "> - 20 dB, but <= -15 dB" },
+ { 0x04, "> - 25 dB, but <= -20 dB" },
+ { 0x05, "> - 30 dB, but <= -25 dB" },
+ { 0x06, "> - 35 dB, but <= -30 dB" },
+ { 0x07, "> - 40 dB, but <= -35 dB" },
+ { 0x08, "> - 45 dB, but <= -40 dB" },
+ { 0x09, "> - 50 dB, but <= -45 dB" },
+ { 0x0A, "> - 55 dB, but <= -50 dB" },
+ { 0x0B, "> - 60 dB, but <= -55 dB" },
+ { 0x0C, "> - 65 dB, but <= -60 dB" },
+ { 0x0D, "> - 70 dB, but <= -65 dB" },
+ { 0x0E, "> - 75 dB, but <= -70 dB" },
+ { 0x0F, "<= -75 dB" },
+ { 0, NULL }
+};
+static value_string_ext homeplug_av_sig_level_vals_ext = VALUE_STRING_EXT_INIT(homeplug_av_sig_level_vals);
+
+#define HOMEPLUG_AV_CCO_STATUS_MASK 0x07
+
+static const value_string homeplug_av_cco_status_vals[] = {
+ { 0x00, "Unknown" },
+ { 0x01, "Non-coordinating Network" },
+ { 0x02, "Coordinating, group status unknown" },
+ { 0x03, "Coordinating network in the same group" },
+ { 0x04, "Coordinating network not in the same group" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_NW_INFO_ROLE_MASK 0x03
+
+static const value_string homeplug_av_nw_info_role_vals[] = {
+ { 0x00, "Station" },
+ { 0x01, "Proxy coordinator" },
+ { 0x02, "Central coordinator" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_NW_INFO_NID_MASK 0x01
+#define HOMEPLUG_AV_NW_INFO_ACCESS_MASK 0x08
+
+static const value_string homeplug_nw_info_access_vals[] = {
+ { 0x00, "In-home" },
+ { 0x01, "Access" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_PEKS_MASK 0x0F
+#define HOMEPLUG_AV_SOF_PEKS_MASK 0xF0
+
+static const value_string homeplug_av_peks_vals[] = {
+ { 0x00, "Destination STA's DAK" },
+ { 0x01, "NMK known to STA" },
+ { 0x02, "TEK Index 0" },
+ { 0x03, "TEK Index 1" },
+ { 0x04, "TEK Index 2" },
+ { 0x05, "TEK Index 3" },
+ { 0x06, "TEK Index 4" },
+ { 0x07, "TEK Index 5" },
+ { 0x08, "TEK Index 6" },
+ { 0x09, "TEK Index 7" },
+ { 0x0A, "TEK Index 8" },
+ { 0x0B, "TEK Index 9" },
+ { 0x0C, "TEK Index 10" },
+ { 0x0D, "TEK Index 11" },
+ { 0x0E, "TEK Index 12" },
+ { 0x0F, "No key" },
+ { 0, NULL }
+};
+static value_string_ext homeplug_av_peks_vals_ext = VALUE_STRING_EXT_INIT(homeplug_av_peks_vals);
+
+#define HOMEPLUG_AV_CCO_CAP_MASK 0x0C
+
+static const value_string homeplug_av_bcn_cco_cap_vals[] = {
+ { 0x0, "CSMA-only (no QoS/TDMA)" },
+ { 0x1, "Uncoordinated mode QoS/TDMA" },
+ { 0x2, "Coordinated mode QoS/TDMA" },
+ { 0x3, "Reserved" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_AVLN_STATUS_MASK 0x0F
+#define HOMEPLUG_AV_RSF_MASK 0x10
+#define HOMEPLUG_AV_PLEVEL_MASK 0xE0
+
+static const value_string homeplug_av_avln_status_vals[] = {
+ { 0x00, "Unassociated and Level-0 CCo capable" },
+ { 0x01, "Unassociated and Level-1 CCo capable" },
+ { 0x02, "Unassociated and Level-2 CCo capable" },
+ { 0x03, "Unassociated and Level-3 CCo capable" },
+ { 0x04, "Associated but not PCo capable" },
+ { 0x05, "Associated but and PCo capable" },
+ { 0x06, "Reserved" },
+ { 0x07, "Reserved" },
+ { 0x08, "CCo of an AV Logical Network" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_PID_AUTH_STA 0x00
+#define HOMEPLUG_AV_PID_PROV_AUTH_NEK 0x01
+#define HOMEPLUG_AV_PID_PROV_AUTH_DAK 0x02
+#define HOMEPLUG_AV_PID_PROV_AUTH_UKE 0x03
+#define HOMEPLUG_AV_PID_HLE 0x04
+#define HOMEPLUG_AV_PID_MASK 0x07
+
+static const value_string homeplug_av_pid_vals[] = {
+ { HOMEPLUG_AV_PID_AUTH_STA, "Authentication request by new STA" },
+ { HOMEPLUG_AV_PID_PROV_AUTH_NEK, "Provision authenticated STA with new NEK by CCo" },
+ { HOMEPLUG_AV_PID_PROV_AUTH_DAK, "Provision STA with NMK using DAK" },
+ { HOMEPLUG_AV_PID_PROV_AUTH_UKE, "Provision STA with NMK using UKE" },
+ { HOMEPLUG_AV_PID_HLE, "HLE" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_KEY_TYPE_DAK 0x00
+#define HOMEPLUG_AV_KEY_TYPE_NMK 0x01
+#define HOMEPLUG_AV_KEY_TYPE_NEK 0x02
+#define HOMEPLUG_AV_KEY_TYPE_TEK 0x03
+#define HOMEPLUG_AV_KEY_TYPE_HASH 0x04
+#define HOMEPLUG_AV_KEY_TYPE_NONE 0x05
+#define HOMEPLUG_AV_KEY_TYPE_MASK 0x07
+
+static const value_string homeplug_av_key_type_vals[] = {
+ { HOMEPLUG_AV_KEY_TYPE_DAK, "DAK" },
+ { HOMEPLUG_AV_KEY_TYPE_NMK, "NMK" },
+ { HOMEPLUG_AV_KEY_TYPE_NEK, "NEK" },
+ { HOMEPLUG_AV_KEY_TYPE_TEK, "TEK" },
+ { HOMEPLUG_AV_KEY_TYPE_HASH, "Hash Key" },
+ { HOMEPLUG_AV_KEY_TYPE_NONE, "Nonce only (no key)" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_DEV_ID_MASK 0x0
+
+static const value_string homeplug_av_dev_id_vals[] = {
+ { 0x00, "Unknown" },
+ { 0x01, "INT6000" },
+ { 0x02, "INT6300" },
+ { 0x03, "INT6400" },
+ { 0x04, "AR7400" },
+ { 0x05, "AR6405" },
+ { 0x20, "QCA7450/QCA7420" },
+ { 0x21, "QCA6410/QCA6411" },
+ { 0x22, "QCA7000" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_REQ_TYPE_MASK 0x01
+
+static const value_string homeplug_av_req_type_vals[] = {
+ { 0x00, "Direct" },
+ { 0x01, "Relayed" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_KEY_RESULT_MASK 0x03
+
+static const value_string homeplug_av_key_result_vals[] = {
+ { 0x00, "Key granted" },
+ { 0x01, "Request refused" },
+ { 0x02, "Unsupported method/key type" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_LINEFREQ_MASK 0x03
+
+static const value_string homeplug_av_linefreq_vals[] = {
+ { 0x00, "Unknown frequency" },
+ { 0x01, "50Hz" },
+ { 0x02, "60Hz" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_ZEROCROSS_MASK 0x03
+
+static const value_string homeplug_av_zerocrossing_vals[] = {
+ { 0x00, "Not yet detected" },
+ { 0x01, "Detected" },
+ { 0x02, "Missing" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_ENET_PHY_SPEED_MASK 0x03
+
+static const value_string homeplug_av_enet_phy_speed_vals[] = {
+ { 0x00, "10 Mbits/sec" },
+ { 0x01, "100 Mbits/sec" },
+ { 0x02, "1 Gbits/sec" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_ENET_PHY_DUPLEX_MASK 0x01
+
+static const value_string homeplug_av_enet_phy_duplex_vals[] = {
+ { 0x00, "Half" },
+ { 0x01, "Full" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_ENET_PHY_MCONTROL_MASK 0x01
+
+static const value_string homeplug_av_enet_phy_mcontrol_vals[] = {
+ { 0x00, "Read" },
+ { 0x01, "Write" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_wr_rd_mem_status_vals[] = {
+ { 0x00, "Success" },
+ { 0x10, "Invalid Address" },
+ { 0x14, "Invalid Length" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_mac_module_id_vals[] = {
+ { 0x00, "MAC Soft-Loader Image" },
+ { 0x01, "MAC Software Image" },
+ { 0x02, "PIB" },
+ { 0x10, "Write Alternate Flash Location" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_st_mac_status_vals[] = {
+ { 0x00, "Success" },
+ { 0x10, "Invalid Module ID" },
+ { 0x14, "Invalid Command" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_get_nvm_status_vals[] = {
+ { 0x00, "Success" },
+ { 0x10, "NVM Not Present" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_rs_dev_status_vals[] = {
+ { 0x00, "Success" },
+ { 0x01, "NVM Not Present" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_wr_rd_mod_cnf_status_vals[] = {
+ { 0x00, "Success" },
+ { 0x10, "Invalid Module ID" },
+ { 0x12, "Invalid Length" },
+ { 0x14, "Invalid Checksum" },
+ { 0x18, "Bad Header Checksum" },
+ { 0x1C, "Invalid Length" },
+ { 0x20, "Unexpected Offset" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_wr_mod_ind_status_vals[] = {
+ { 0x00, "Successful module update" },
+ { 0x10, "Update occurred but not successful" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_mod_nvm_status_vals[] = {
+ { 0x00, "Success" },
+ { 0x10, "Invalid Module ID" },
+ { 0x14, "NVM Module Not Present" },
+ { 0x18, "NVM Too Small" },
+ { 0x1C, "Invalid Header Checksum" },
+ { 0x20, "Invalid Section Mismatch" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_RPT_CLR_MASK 0x01
+
+static const value_string homeplug_av_rpt_clr_vals[] = {
+ { 0x00, "Get Report" },
+ { 0x01, "Get Report and Clear" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_GEN_STATUS_MASK 0x03
+
+static const value_string homeplug_av_generic_status_vals[] = {
+ { 0x00, "Success" },
+ { 0x01, "Failure" },
+ { 0x02, "Not supported" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_LNK_STATS_MCTL_MASK 0x01
+
+static const value_string homeplug_av_lnk_stats_mctrl_vals[] = {
+ { 0x00, "Read" },
+ { 0x01, "Clear" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_LNK_STATS_DIR_TX 0x00
+#define HOMEPLUG_AV_LNK_STATS_DIR_RX 0x01
+#define HOMEPLUG_AV_LNK_STATS_DIR_TX_RX 0x02
+#define HOMEPLUG_AV_LNK_STATS_DIR_MASK 0x03
+
+static const value_string homeplug_av_lnk_stats_dir_vals[] = {
+ { HOMEPLUG_AV_LNK_STATS_DIR_TX, "Tx" },
+ { HOMEPLUG_AV_LNK_STATS_DIR_RX, "Rx" },
+ { HOMEPLUG_AV_LNK_STATS_DIR_TX_RX, "Tx/Rx" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_lnk_stats_lid_vals[] = {
+ { 0x00, "CSMA Channel Access Priority 0" },
+ { 0x01, "CSMA Channel Access Priority 1" },
+ { 0x02, "CSMA Channel Access Priority 2" },
+ { 0x03, "CSMA Channel Access Priority 3" },
+ { 0xF8, "Sum of all CSMA stats for Peer Node" },
+ { 0xFB, "Reserved" },
+ { 0xFC, "Sum of all CSMA stats" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_LNK_STATS_STATUS_SUCCESS 0x00
+#define HOMEPLUG_AV_LNK_STATS_STATUS_INV_CTRL 0x01
+#define HOMEPLUG_AV_LNK_STATS_STATUS_INV_DIR 0x02
+#define HOMEPLUG_AV_LNK_STATS_STATUS_INV_LID 0x10
+#define HOMEPLUG_AV_LNK_STATS_STATUS_INV_MAC 0x20
+
+static const value_string homeplug_av_lnk_status_vals[] = {
+ { HOMEPLUG_AV_LNK_STATS_STATUS_SUCCESS, "Success" },
+ { HOMEPLUG_AV_LNK_STATS_STATUS_INV_CTRL, "Invalid Control" },
+ { HOMEPLUG_AV_LNK_STATS_STATUS_INV_DIR, "Invalid Direction" },
+ { HOMEPLUG_AV_LNK_STATS_STATUS_INV_LID, "Invalid Link ID" },
+ { HOMEPLUG_AV_LNK_STATS_STATUS_INV_MAC, "Invalid MAC Address" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_SNIFFER_CTRL_MASK 0x03
+
+static const value_string homeplug_av_sniffer_ctrl_vals[] = {
+ { 0x00, "Disable" },
+ { 0x01, "Enable" },
+ { 0x02, "No change" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_sniffer_status_vals[] = {
+ { 0x00, "Success" },
+ { 0x10, "Invalid Control" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_sniffer_type_vals[] = {
+ { 0x00, "Regular" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_DEL_TYPE_BCN 0x00
+#define HOMEPLUG_AV_DEL_TYPE_SOF 0x01
+#define HOMEPLUG_AV_DEL_TYPE_SACK 0x02
+#define HOMEPLUG_AV_DEL_TYPE_RTS 0x03
+#define HOMEPLUG_AV_DEL_TYPE_SOUND 0x04
+#define HOMEPLUG_AV_DEL_TYPE_RSOF 0x05
+
+#define HOMEPLUG_AV_DEL_TYPE_MASK 0x07
+
+static const value_string homeplug_av_fc_del_type_vals[] = {
+ { HOMEPLUG_AV_DEL_TYPE_BCN, "Beacon" },
+ { HOMEPLUG_AV_DEL_TYPE_SOF, "Start-of-Frame" },
+ { HOMEPLUG_AV_DEL_TYPE_SACK, "Selective Acknowledgement" },
+ { HOMEPLUG_AV_DEL_TYPE_RTS, "Request-to-Send/Clear-to-Send" },
+ { HOMEPLUG_AV_DEL_TYPE_SOUND, "Sound" },
+ { HOMEPLUG_AV_DEL_TYPE_RSOF, "Reverse Start-of-Frame" },
+ { 0x06, "Unknown" },
+ { 0x07, "Unknown" },
+ { 0, NULL }
+};
+
+/* MPDU Values */
+
+#define HOMEPLUG_AV_SNID_MASK 0xf0
+#define HOMEPLUG_AV_CFS_MASK 0x01
+#define HOMEPLUG_AV_BDF_MASK 0x02
+#define HOMEPLUG_AV_HP10DF_MASK 0x04
+#define HOMEPLUG_AV_HP11DF_MASK 0x08
+#define HOMEPLUG_AV_SVN_MASK 0x04
+#define HOMEPLUG_AV_RRTF_MASK 0x08
+#define HOMEPLUG_AV_FL_AV_MASK 0x0FFF
+#define HOMEPLUG_AV_RSP_DATA_MASK 0x03
+#define HOMEPLUG_AV_RSP_MGMT_MASK 0x0C
+
+static int * const rsof_sack_fields[] = {
+ &hf_homeplug_av_cfs,
+ &hf_homeplug_av_bdf,
+ &hf_homeplug_av_svn,
+ &hf_homeplug_av_rrtf,
+ &hf_homeplug_av_mfs_rsp_data,
+ &hf_homeplug_av_mfs_rsp_mgmt,
+ NULL
+};
+
+#define HOMEPLUG_AV_PBSZ_MASK 0x01
+
+static const true_false_string homeplug_av_phy_block_size_vals = {
+ "136 octets",
+ "520 octets"
+};
+
+#define HOMEPLUG_AV_NUM_SYM_MASK 0x06
+#define HOMEPLUG_AV_TMI_AV_MASK 0xF8
+#define HOMEPLUG_AV_SOF_MPDU_CNT_MASK 0x3000
+#define HOMEPLUG_AV_BURST_CNT_MASK 0xC000
+#define HOMEPLUG_AV_BBF_MASK 0x01
+
+static const true_false_string homeplug_av_bbf_vals = {
+ "May continue",
+ "Must not continue"
+};
+
+#define HOMEPLUG_AV_MRTLF_MASK 0x1E
+#define HOMEPLUG_AV_DCCPCF_MASK 0x20
+#define HOMEPLUG_AV_MCF_MASK 0x40
+#define HOMEPLUG_AV_MNBF_MASK 0x80
+#define HOMEPLUG_AV_RSR_MASK 0x01
+#define HOMEPLUG_AV_CLST_MASK 0x02
+
+static const true_false_string homeplug_av_clst_vals = {
+ "Reserved",
+ "Ethernet II"
+};
+
+#define HOMEPLUG_AV_MFS_MGMT_MASK 0x1C
+#define HOMEPLUG_AV_MFS_DATA_MASK 0xE0
+#define HOMEPLUG_AV_SOF_RSP_MGMT_MASK 0x03
+#define HOMEPLUG_AV_SOF_RSP_DATA_MASK 0x0C
+#define HOMEPLUG_AV_BM_SACK_MASK 0xF0
+
+#define HOMEPLUG_AV_RTSF_MASK 0x10
+
+static const true_false_string homeplug_av_rtsf_vals = {
+ "RTS MPDU",
+ "CTS MPDU"
+};
+
+#define HOMEPLUG_AV_IGF_MASK 0x20
+#define HOMEPLUG_AV_RTSCTS_MNBF_MASK 0x40
+#define HOMEPLUG_AV_RTSCTS_MCF_MASK 0x80
+#define HOMEPLUG_AV_DUR_MASK 0x3FFF
+
+#define HOMEPLUG_AV_SOUND_PBSZ_MASK 0x02
+#define HOMEPLUG_AV_SOUND_BDF_MASK 0x04
+#define HOMEPLUG_AV_SAF_MASK 0x08
+#define HOMEPLUG_AV_SCF_MASK 0x10
+#define HOMEPLUG_AV_REQ_TM_MASK 0xE0
+#define HOMEPLUG_AV_SOUND_MPDU_CNT_MASK 0x3000
+#define HOMEPLUG_AV_ADD_REQ_TM_MASK 0x07
+#define HOMEPLUG_AV_MAX_PB_SYM_MASK 0x38
+#define HOMEPLUG_AV_ECSF_MASK 0x40
+#define HOMEPLUG_AV_ECUF_MASK 0x80
+#define HOMEPLUG_AV_EMS_MASK 0x03
+
+static const value_string homeplug_av_ems_vals[] = {
+ { 0x00, "Extended QAM Modulations not supported" },
+ { 0x01, "4096 QAM Modulation support" },
+ { 0x02, "Reserved" },
+ { 0x03, "Reserved" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_ESGISF_MASK 0x04
+#define HOMEPLUG_AV_ELGISF_MASK 0x08
+#define HOMEPLUG_AV_EFRS_MASK 0x30
+
+static const value_string homeplug_av_efrs_vals[] = {
+ { 0x00, "Extended FEC Rates Not Supported" },
+ { 0x01, "16/18 FED Rate Supported" },
+ { 0x02, "Reserved" },
+ { 0x03, "Reserved" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_RSOF_FL_MASK 0x03FF
+#define HOMEPLUG_AV_RSOF_TMI_MASK 0x7C00
+#define HOMEPLUG_AV_RSOF_PBSZ_MASK 0x8000
+#define HOMEPLUG_AV_RSOF_NUM_SYM_MASK 0x03
+
+/* MPDU Beacon payloads */
+
+#define HOMEPLUG_AV_BCN_NID_MASK 0xFFFFFFFFFFFF3F
+#define HOMEPLUG_AV_HM_MASK 0xC0
+
+static const val64_string homeplug_av_bcn_hm_vals[] = {
+ { 0x00, "AV-only mode" },
+ { 0x01, "Shared CSMA Hybrid Mode" },
+ { 0x02, "Fully hybrid mode" },
+ { 0x03, "Fully hybrid mode with unrestricted frame lengths" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_BCN_TYPE_MASK 0x07
+
+static const value_string homeplug_av_bcn_type_vals[] = {
+ { 0x0, "Central" },
+ { 0x1, "Discover" },
+ { 0x2, "Proxy" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_NCNR_MASK 0x08
+#define HOMEPLUG_AV_NPSM_MASK 0x10
+#define HOMEPLUG_AV_NUM_SLOTS_MASK 0xE0
+#define HOMEPLUG_AV_SLOT_ID_MASK 0x03
+
+/* There must be a better way to do this. */
+static const value_string homeplug_av_bcn_slot_vals[] = {
+ { 0x0, "1" },
+ { 0x1, "2" },
+ { 0x2, "3" },
+ { 0x3, "4" },
+ { 0x4, "5" },
+ { 0x5, "6" },
+ { 0x6, "7" },
+ { 0x7, "8" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_ACLSS_MASK 0x38
+#define HOMEPLUG_AV_HOIP_MASK 0x40
+#define HOMEPLUG_AV_RTSBF_MASK 0x80
+#define HOMEPLUG_AV_NM_MASK 0x03
+
+static const value_string homeplug_av_bcn_nm_vals[] = {
+ { 0x1, "Uncoordinated Mode" },
+ { 0x2, "Coordinated Mode" },
+ { 0x3, "CSMA-only Mode" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_LBK_STATUS_MASK 0x01
+
+static const value_string homeplug_av_lbk_status_vals[] = {
+ { 0x00, "Done" },
+ { 0x01, "Looping frame" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_set_key_peks_vals[] = {
+ { 0x00, "Remote" },
+ { 0x0F, "Local" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_set_key_status_vals[] = {
+ { 0x00, "Success" },
+ { 0x10, "Invalid EKS" },
+ { 0x11, "Invalid PKS" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_cblock_status_vals[] = {
+ { 0x00, "Success" },
+ { 0x01, "Failure" },
+ { 0x10, "No Flash" },
+ { 0x30, "Invalid Checksum" },
+ { 0x34, "BIST Failed" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_NVM_IMG_TYPE_MASK 0x1F
+
+static const value_string homeplug_av_nvm_img_type_vals[] = {
+ { 0x00, "Generic Image" },
+ { 0x01, "Synopsis configuration" },
+ { 0x02, "Denali configuration" },
+ { 0x03, "Denali applet" },
+ { 0x04, "Runtime firmware" },
+ { 0x05, "OAS client" },
+ { 0x06, "Custom image" },
+ { 0x07, "Memory control applet" },
+ { 0x08, "Power management applet" },
+ { 0x09, "OAS client IP stack" },
+ { 0x0A, "OAS client TR069" },
+ { 0x0B, "SoftLoader" },
+ { 0x0C, "Flash layout" },
+ { 0x0D, "Unknown" },
+ { 0x0E, "Chain manifest" },
+ { 0x0F, "Runtime parameters" },
+ { 0x10, "Custom module in scratch" },
+ { 0x11, "Custom module update applet" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_NVM_IGNORE_MASK_MASK 0x01FF
+
+static const value_string homeplug_av_nvm_ignore_mask_vals[] = {
+ { 0x00, "INT6000" },
+ { 0x01, "INT6300" },
+ { 0x04, "INT6400" },
+ { 0x10, "AR7400" },
+ { 0x100, "AR7420" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_HOST_ACTION_SOFT_LDR 0x00
+#define HOMEPLUG_AV_HOST_ACTION_FW_UPG_RDY 0x01
+#define HOMEPLUG_AV_HOST_ACTION_PIB_UP_RDY 0x02
+#define HOMEPLUG_AV_HOST_ACTION_FW_PIB_UP_RDY 0x03
+#define HOMEPLUG_AV_HOST_ACTION_BOOT_LDR 0x04
+
+static const value_string homeplug_av_host_action_vals[] = {
+ { HOMEPLUG_AV_HOST_ACTION_SOFT_LDR, "Loader (Soft/Bootloader)" },
+ { HOMEPLUG_AV_HOST_ACTION_FW_UPG_RDY, "Firmware Upgrade Ready" },
+ { HOMEPLUG_AV_HOST_ACTION_PIB_UP_RDY, "PIB Update Ready" },
+ { HOMEPLUG_AV_HOST_ACTION_FW_PIB_UP_RDY, "Firmware Upgrade and PIB Update Ready" },
+ { HOMEPLUG_AV_HOST_ACTION_BOOT_LDR, "Loader (Bootloader)" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_op_attr_report_vals[] = {
+ { 0x00, "Binary" },
+ { 0x01, "XML" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_TONE_MAP_MAX_NUM_CARRIERS_A 1155
+#define HOMEPLUG_AV_TONE_MAP_MAX_NUM_CARRIERS_B 2880
+
+#define HOMEPLUG_AV_TONE_MAP_MASK 0x0f
+
+static const value_string homeplug_av_tone_map_vals[] = {
+ { 0x00, "No modulation" },
+ { 0x01, "BPSK" },
+ { 0x02, "QPSK" },
+ { 0x03, "8-QAM" },
+ { 0x04, "16-QAM" },
+ { 0x05, "64-QAM" },
+ { 0x06, "256-QAM" },
+ { 0x07, "1024-QAM" },
+ { 0x08, "4096-QAM" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_tone_map_status_vals[] = {
+ { 0x00, "Success" },
+ { 0x01, "Unknown MAC address" },
+ { 0x02, "Unknown Tone Map slot" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_COUPLING_MASK 0x0F
+
+static const value_string homeplug_av_coupling_vals[] = {
+ { 0x00, "Primary" },
+ { 0x01, "Alternate" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_cc_assoc_result_vals[] = {
+ { 0x00, "Success" },
+ { 0x01, "Failure due to temporary resource exhaustion, try again later" },
+ { 0x02, "Failure due to permanent resource exhaustion" },
+ { 0x03, "Failure" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_cc_assoc_reqtype_vals[] = {
+ { 0x00, "New request" },
+ { 0x01, "Renewal request" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_cc_assoc_proxy_net_cap_vals[] = {
+ { 0x00, "Doesn't support Proxy Networking" },
+ { 0x01, "Supports Proxy Networking" },
+ { 0, NULL }
+};
+
+/* HPGP Values */
+
+#define HOMEPLUG_AV_GP_APPTYPE_PEV_EVSE_ASSOC 0x00
+
+#define HOMEPLUG_AV_GP_SECURITY_TYPE_NONE 0x00
+#define HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY 0x01
+
+static const value_string homeplug_av_gp_cm_slac_parm_sectype_vals[] = {
+ { HOMEPLUG_AV_GP_SECURITY_TYPE_NONE, "No Security" },
+ { HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY, "Public Key Signature" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_gp_cm_slac_parm_resptype_vals[] = {
+ { 0x00, "Not Transmitted to other GP STA's HLE" },
+ { 0x01, "Transmitted to another GP STA's HLE" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_GP_SIGNAL_TYPE_PEV_S2_TOGGLES 0x00
+
+static const value_string homeplug_av_gp_cm_validate_signaltype_vals[] = {
+ { HOMEPLUG_AV_GP_SIGNAL_TYPE_PEV_S2_TOGGLES, "PEV S2 toggles on CPLT line" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_gp_cm_validate_result_vals[] = {
+ { 0x00, "Not Ready" },
+ { 0x01, "Ready" },
+ { 0x02, "Success" },
+ { 0x03, "Failure" },
+ { 0x04, "Not required" },
+ { 0, NULL }
+};
+
+/* We need third octet */
+#define HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_BROADCAST_MASK (((guint32)0xFF) << 16)
+
+static const value_string homeplug_av_gp_cm_slac_user_data_broadcast_vals[] = {
+ { 0x00, "Unicast" },
+ { 0x01, "AVLN Broadcast" },
+ { 0x02, "Multi-network broadcast" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_HEADER_SIZE 2
+#define HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_TYPE_MASK (((1<<7)-1)<<9)
+#define HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_LENGTH_MASK ((1<<9)-1)
+
+#define HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_TYPE_VENDOR_RESERVED 0x1F
+
+static const value_string homeplug_av_gp_cm_slac_user_data_tlv_types_vals[] = {
+ { HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_TYPE_VENDOR_RESERVED, "Vendor Reserved" },
+ { 0, NULL }
+};
+
+typedef enum {
+ HOMEPLUG_AV_CC_SET_TEI_MAP_IND_MODE_FULL_ENTRIES_UPATE = 0x00,
+ HOMEPLUG_AV_CC_SET_TEI_MAP_IND_MODE_ADD_NEW_ENTRIES = 0x01,
+ HOMEPLUG_AV_CC_SET_TEI_MAP_IND_MODE_REMOVE_ENTRIES = 0x02
+} homeplug_av_cc_set_tei_map_ind_mode_types;
+
+static const value_string homeplug_av_cc_set_tei_map_ind_mode_vals[] = {
+ { HOMEPLUG_AV_CC_SET_TEI_MAP_IND_MODE_FULL_ENTRIES_UPATE, "Update Entire STA" },
+ { HOMEPLUG_AV_CC_SET_TEI_MAP_IND_MODE_ADD_NEW_ENTRIES, "Add new STA entries" },
+ { HOMEPLUG_AV_CC_SET_TEI_MAP_IND_MODE_REMOVE_ENTRIES, "Remove existing STA entries" },
+ { 0, NULL }
+};
+
+typedef enum {
+ HOMEPLUG_AV_CC_SET_TEI_MAP_IND_STATUS_NOT_AUTHENTICATED = 0x00,
+ HOMEPLUG_AV_CC_SET_TEI_MAP_IND_STATUS_AUTHENTICATED = 0x01,
+} homeplug_av_cc_set_tei_map_ind_status_types;
+
+static const value_string homeplug_av_cc_set_tei_map_ind_status_vals[] = {
+ { HOMEPLUG_AV_CC_SET_TEI_MAP_IND_STATUS_NOT_AUTHENTICATED, "Not Authenticated" },
+ { HOMEPLUG_AV_CC_SET_TEI_MAP_IND_STATUS_AUTHENTICATED, "Authenticated" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_GP_CM_ATTEN_CHAR_AAG_FORMAT "Avg. Attenuation of group #%d (dB): %d"
+
+/* ST/IoTecha specific values */
+
+static const value_string homeplug_av_st_iotecha_linkstatus_status_vals[] = {
+ { 0x00, "No Link" },
+ { 0x01, "Link with atleast 1 device" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_st_iotecha_linkstatus_devmode_vals[] = {
+ { 0x00, "Unavailable" },
+ { 0x01, "UNAS STA" },
+ { 0x02, "ASSC STA" },
+ { 0x03, "AUTH STA" },
+ { 0x04, "UNAS BM" },
+ { 0x05, "ASSC BM" },
+ { 0x06, "AUTH BM" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_HEADER_SIZE 2
+#define HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_MASK (((1<<6)-1)<<10)
+#define HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_LENGTH_MASK ((1<<10)-1)
+
+typedef enum {
+ HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_NULL = 0x00,
+ HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_DEVICE_NAME = 0x01,
+ HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_DEVICE_TYPE = 0x02,
+ HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_BUILD_ID = 0x03,
+ HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_RESERVED = 0x04,
+ HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_DEVICE_UID = 0x05,
+ HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_MAC_ADDRESS = 0x06,
+ HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_HARDWARE_NAME = 0x07,
+ HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_HARDWARE_VERSION = 0x08,
+ HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_LINUX_KERNEL_VERSION = 0x09,
+ HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_LINUX_USER_VERSION = 0x0A,
+} homeplug_av_st_iotecha_stp_discover_tlv_types;
+
+static const value_string homeplug_av_st_iotecha_stp_discover_tlv_type_vals[] = {
+ { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_NULL, "NULL" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_DEVICE_NAME, "Device name" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_DEVICE_TYPE, "Device type" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_BUILD_ID, "Build ID" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_RESERVED, "Reserved" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_DEVICE_UID, "Device UID" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_MAC_ADDRESS, "MAC Address" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_HARDWARE_NAME, "Hardware name" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_HARDWARE_VERSION, "Hardware version" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_LINUX_KERNEL_VERSION, "Linux Kernel version" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_LINUX_USER_VERSION, "Linux User version" },
+ { 0, NULL }
+};
+
+typedef enum {
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_NULL = 0x00,
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_BEGIN_BSS = 0x01,
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_LOCAL_BSS = 0x02,
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_RESERVED = 0x03,
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_REMOTE_BSS = 0x04,
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SNID = 0x05,
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_NID = 0x06,
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_NET_MODE = 0x07,
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_BEACON_AGE = 0x08,
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_BEACON_FC_RELIABILITY = 0x09,
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_BEACON_PLD_RELIABILITY = 0x0A,
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL = 0x0B,
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_TOS = 0x0C,
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_MIN = 0x0D,
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_TOS_MIN = 0x0E,
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_MAX = 0x0F,
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_TOS_MAX = 0x10,
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_NET_HYB_MODE = 0x11,
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_TEI = 0x12,
+ HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_END_BSS = 0xFF,
+} homeplug_av_st_iotecha_stp_get_bss_tlv_types;
+
+static const value_string homeplug_av_st_iotecha_stp_get_bss_tlv_type_vals[] = {
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_NULL, "NULL" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_BEGIN_BSS, "Start of BSS descriptor" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_LOCAL_BSS, "Local BSS Manager" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_RESERVED, "Reserved Data" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_REMOTE_BSS, "Remote BSS" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SNID, "Short Network ID" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_NID, "Network ID" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_NET_MODE, "Network Mode" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_BEACON_AGE, "Beacon Age" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_BEACON_FC_RELIABILITY, "Beacon Frame Control reliability" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_BEACON_PLD_RELIABILITY,"Beacon Payload reliability" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL, "Signal Level" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_TOS, "Signal Level Time of Sample" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_MIN, "Min Signal Level" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_TOS_MIN, "Min Signal Level Time of Sample" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_MAX, "Max Signal Level" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_SIGNAL_LEVEL_TOS_MAX, "Max Signal Level Time of Sample" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_NET_HYB_MODE, "Network Hybrid Mode" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_TEI, "TEI of BM" },
+ { HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_END_BSS, "End of BSS descriptor" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_st_iotecha_mac_address_flag_vals[] = {
+ { 0x00, "Unknown" },
+ { 0x01, "Local MAC" },
+ { 0x02, "Local Bridged MAC" },
+ { 0x04, "Remote MAC" },
+ { 0x08, "Remote Bridged MAC" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_st_iotecha_chanqual_tei_source_vals[] = {
+ { 0x01, "Local Tei" },
+ { 0x02, "Remote Tei" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_st_iotecha_chanqual_substatus_vals[] = {
+ { 0x01, "Subscribed" },
+ { 0x02, "Unsubscribed" },
+ { 0x03, "Invalid Request Type" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_st_iotecha_chanqual_responsetype_vals[] = {
+ { 0x00, "Default Tone map transmitted in ICE" },
+ { 0x01, "Others" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_st_iotecha_chanqual_tmi_vals[] = {
+ { 0xFE, "Not Available For Particular Interval" },
+ { 0xFF, "Unusable Interval" },
+ { 0, NULL }
+};
+
+#define HOMEPLUG_AV_ST_IOTECHA_CHANQUAL_CBLD_DATA_MASK_LOW 0x0F
+#define HOMEPLUG_AV_ST_IOTECHA_CHANQUAL_CBLD_DATA_MASK_HIGH 0xF0
+/* (1154/2) */
+#define HOMEPLUG_AV_ST_IOTECHA_CHANQUAL_CBLD_DATA_COUNT 577
+static const value_string homeplug_av_st_iotecha_chanqual_cbld_data_vals[] = {
+ { 0x00, "Empty" },
+ { 0x01, "Bitload of 1" },
+ { 0x02, "Bitload of 2" },
+ { 0x03, "Bitload of 3" },
+ { 0x04, "Bitload of 4" },
+ { 0x05, "Bitload of 5" },
+ { 0x06, "Bitload of 6" },
+ { 0x07, "Bitload of 7" },
+ { 0x08, "Bitload of 8" },
+ { 0x09, "Bitload of 9" },
+ { 0x0A, "Bitload of 10" },
+ { 0x0F, "Unusable" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_st_iotecha_chanqual_reqtype_vals[] = {
+ { 0x01, "Subscribe" },
+ { 0x02, "Unsubscribe" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_st_iotecha_mfct_request_type_vals[] = {
+ { 0x00, "Commit" },
+ { 0x02, "Abort" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_st_iotecha_mfct_result_vals[] = {
+ { 0x00, "Success" },
+ { 0x03, "Parameter Not Found" },
+ { 0x04, "Permission Error" },
+ { 0x05, "Insufficient space in parameter region" },
+ { 0x06, "Internal Error" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_st_iotecha_stp_fwup_mtype_vals[] = {
+ { 0x00, "Start Request" },
+ { 0x01, "Start Confirmation" },
+ { 0x02, "Data Index" },
+ { 0x03, "Data Response" },
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_st_iotecha_stp_cpstate_state_vals[] = {
+ { 0x00, "Invalid"},
+ { 0x01, "A"},
+ { 0x02, "Ambiguous (A-B)"},
+ { 0x03, "B"},
+ { 0x04, "Ambiguous (B-C)"},
+ { 0x05, "C"},
+ { 0x06, "Ambiguous (C-D)"},
+ { 0x07, "D"},
+ { 0x08, "Ambiguous (D-E)"},
+ { 0x09, "E"},
+ { 0x0A, "F"},
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_st_iotecha_test_type_vals[] = {
+ { 0x00, "Power"},
+ { 0x01, "Error"},
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_st_iotecha_agc_lock_vals[] = {
+ { 0x00, "Disabled"},
+ { 0x01, "Enabled"},
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_st_iotecha_test_status_vals[] = {
+ { 0x00, "Test running"},
+ { 0x01, "Failed to start test"},
+ { 0x02, "Test reset"},
+ { 0, NULL }
+};
+
+static const value_string homeplug_av_st_iotecha_suppress_data_vals[] = {
+ { 0x00, "Disabled"},
+ { 0x01, "Enabled"},
+ { 0, NULL }
+};
+
+static void
+adc_bitmask_base(gchar *buf, guint8 value) {
+ snprintf(buf, ITEM_LABEL_LENGTH, "%s, %s, %s (%d)",
+ (value & 0x01) ? "true" : "false",
+ (value & 0x02) ? "true" : "false",
+ (value & 0x04) ? "true" : "false",
+ value);
+}
+
+/* End of ST/IoTecha specific values */
+
+#define TVB_LEN_GREATEST 1
+#define TVB_LEN_UNDEF 0
+#define TVB_LEN_SHORTEST -1
+static int check_tvb_length(ptvcursor_t *cursor, const gint length)
+{
+ if (!cursor)
+ return TVB_LEN_UNDEF;
+
+ if (tvb_reported_length_remaining(ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor)) < length)
+ return TVB_LEN_SHORTEST;
+
+ return TVB_LEN_GREATEST;
+}
+
+static inline unsigned int homeplug_av_mmtype_msb_is_vendor(guint8 msb)
+{
+ return ((msb & (HOMEPLUG_AV_MMTYPE_MSB_VENDOR << HOMEPLUG_AV_MMTYPE_MSB_SHIFT)) ==
+ (HOMEPLUG_AV_MMTYPE_MSB_VENDOR << HOMEPLUG_AV_MMTYPE_MSB_SHIFT));
+}
+
+static inline unsigned int homeplug_av_mmtype_msb_is_manufacturer(guint8 msb)
+{
+ return ((msb & (HOMEPLUG_AV_MMTYPE_MSB_MANUF << HOMEPLUG_AV_MMTYPE_MSB_SHIFT)) ==
+ (HOMEPLUG_AV_MMTYPE_MSB_MANUF << HOMEPLUG_AV_MMTYPE_MSB_SHIFT));
+}
+
+static inline guint8 homeplug_av_get_mmhdr_size(guint8 mmv) {
+ /* Header in HomePlug AV 1.1 is 2 bytes larger (Fragmentation information) */
+ return (mmv ? 5 : 3);
+}
+
+/* Dissection of MMHDR */
+static void
+dissect_homeplug_av_mmhdr(ptvcursor_t *cursor, guint8 *homeplug_av_mmver, guint16 *homeplug_av_mmtype, guint32 *homeplug_av_oui)
+{
+ proto_item *ti;
+ proto_tree *ti_mmtype;
+ /* Save in static variable */
+ /* proto_tree *ti_vendor; */
+ proto_tree *ti_public;
+ guint8 lsb, msb, mmv;
+ guint32 offset;
+
+ offset = 0;
+
+ mmv = tvb_get_guint8(ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor));
+ lsb = tvb_get_guint8(ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor) + 1);
+ msb = tvb_get_guint8(ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor) + 2);
+
+ *homeplug_av_mmver = mmv;
+ *homeplug_av_mmtype = (msb << 8) | lsb;
+
+ if (homeplug_av_mmtype_msb_is_vendor(msb)
+ || homeplug_av_mmtype_msb_is_manufacturer(msb))
+ {
+ /* read three bytes of OUI */
+ *homeplug_av_oui = tvb_get_guint24(ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor)+homeplug_av_get_mmhdr_size(mmv),
+ ENC_NA);
+ }
+
+ if (!ptvcursor_tree(cursor)) {
+ /* advance even there is no tree to be able to extract data in packet specific dissectors */
+ offset += homeplug_av_get_mmhdr_size(mmv);
+ if (homeplug_av_mmtype_msb_is_vendor(msb)
+ || homeplug_av_mmtype_msb_is_manufacturer(msb)) {
+ offset += 3;
+ }
+ ptvcursor_advance(cursor, offset);
+ return;
+ }
+
+ /* Header in HomePlug AV 1.1 is 2 bytes larger (Fragmentation information) */
+ ti = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mmhdr, homeplug_av_get_mmhdr_size(*homeplug_av_mmver), ENC_NA);
+
+ ptvcursor_push_subtree(cursor, ti, ett_homeplug_av_mmhdr);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_mmhdr_mmver, 1, ENC_BIG_ENDIAN);
+
+ switch (*homeplug_av_oui) {
+ case HOMEPLUG_AV_OUI_QCA:
+ ti_mmtype = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mmhdr_mmtype_qualcomm, 2, ENC_LITTLE_ENDIAN);
+ break;
+ case HOMEPLUG_AV_OUI_ST_IOTECHA:
+ ti_mmtype = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mmhdr_mmtype_st, 2, ENC_LITTLE_ENDIAN);
+ break;
+ default:
+ ti_mmtype = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mmhdr_mmtype_general, 2, ENC_LITTLE_ENDIAN);
+ break;
+ }
+
+ ptvcursor_push_subtree(cursor, ti_mmtype, ett_homeplug_av_mmtype);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_mmhdr_mmtype_lsb, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_mmhdr_mmtype_msb, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+
+ /* Fragmentation information is part of the header in HomePlug AV 1.1 */
+ if (mmv)
+ {
+ ti_public = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mmhdr_fmi, 2, ENC_LITTLE_ENDIAN);
+
+ ptvcursor_push_subtree(cursor, ti_public, ett_homeplug_av_fmi);
+ {
+ ptvcursor_add_no_advance(cursor, hf_homeplug_av_public_frag_count, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_public_frag_index, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_public_frag_seqnum, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+
+ /* Vendor management frame */
+ if (homeplug_av_mmtype_msb_is_vendor(msb) || homeplug_av_mmtype_msb_is_manufacturer(msb))
+ {
+ ti_vendor = ptvcursor_add_no_advance(cursor, hf_homeplug_av_vendor, 3, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, ti_vendor, ett_homeplug_av_vendor);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_vendor_oui, 3, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+ /* Public management frame in HomePlug AV 1.0 */
+ else if (!mmv)
+ {
+ ti_public = ptvcursor_add_no_advance(cursor, hf_homeplug_av_public, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, ti_public, ett_homeplug_av_public);
+ {
+ ptvcursor_add_no_advance(cursor, hf_homeplug_av_public_frag_count, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_public_frag_index, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_public_frag_seqnum, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+}
+
+/* Beacon body */
+
+static void
+dissect_homeplug_av_beacon_payload(ptvcursor_t *cursor)
+{
+
+ proto_item *it;
+ proto_tree *tree;
+ tvbuff_t *tvb;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_bcn_payload, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_bcn_payload);
+ {
+ tree = ptvcursor_tree(cursor);
+ tvb = ptvcursor_tvbuff(cursor);
+
+ static int * const bcn1_fields[] = {
+ &hf_homeplug_av_bcn_nid,
+ &hf_homeplug_av_bcn_hm,
+ NULL
+ };
+
+ proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 7, bcn1_fields, ENC_BIG_ENDIAN);
+ ptvcursor_advance(cursor, 7);
+
+ ptvcursor_add(cursor, hf_homeplug_av_bcn_stei, 1, ENC_BIG_ENDIAN);
+
+ static int * const bcn2_fields[] = {
+ &hf_homeplug_av_bcn_type,
+ &hf_homeplug_av_bcn_ncnr,
+ &hf_homeplug_av_bcn_npsm,
+ &hf_homeplug_av_bcn_num_slots,
+ NULL
+ };
+
+ proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, bcn2_fields, ENC_BIG_ENDIAN);
+ ptvcursor_advance(cursor, 1);
+
+ ptvcursor_add(cursor, hf_homeplug_av_bcn_slot_use, 1, ENC_BIG_ENDIAN);
+
+ static int * const bcn3_fields[] = {
+ &hf_homeplug_av_bcn_slot_id,
+ &hf_homeplug_av_bcn_aclss,
+ &hf_homeplug_av_bcn_hoip,
+ &hf_homeplug_av_bcn_rtsbf,
+ NULL
+ };
+
+ proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, bcn3_fields, ENC_BIG_ENDIAN);
+ ptvcursor_advance(cursor, 1);
+
+ static int * const bcn4_fields[] = {
+ &hf_homeplug_av_bcn_nm,
+ &hf_homeplug_av_bcn_cco_cap,
+ &hf_homeplug_av_bcn_rsf,
+ &hf_homeplug_av_bcn_plevel,
+ NULL
+ };
+
+ proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, bcn4_fields, ENC_BIG_ENDIAN);
+ ptvcursor_advance(cursor, 1);
+
+ /* TODO: decode individual beacon entries */
+ ptvcursor_add(cursor, hf_homeplug_av_bcn_bentries, 120, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_bcn_bpcs, 4, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_beacon(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_bcn, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_bcn);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_bcn_bts, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_bcn_bto_0, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_bcn_bto_1, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_bcn_bto_2, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_bcn_bto_3, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_fc_fccs_av, 3, ENC_NA);
+ dissect_homeplug_av_beacon_payload(cursor);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+/* Start of Frame */
+static void
+dissect_homeplug_av_start_of_frame(ptvcursor_t *cursor)
+{
+ proto_item *it;
+ proto_tree *tree;
+ tvbuff_t *tvb;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sof, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_sof);
+ {
+ tree = ptvcursor_tree(cursor);
+ tvb = ptvcursor_tvbuff(cursor);
+
+ ptvcursor_add(cursor, hf_homeplug_av_stei, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_dtei, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_lid, 1, ENC_BIG_ENDIAN);
+
+ static int * const sof1_fields[] = {
+ &hf_homeplug_av_cfs,
+ &hf_homeplug_av_bdf,
+ &hf_homeplug_av_hp10df,
+ &hf_homeplug_av_hp11df,
+ &hf_homeplug_av_sof_peks,
+ NULL
+ };
+
+ proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sof1_fields, ENC_BIG_ENDIAN);
+ ptvcursor_advance(cursor, 1);
+
+ ptvcursor_add(cursor, hf_homeplug_av_ppb, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_sof_ble, 1, ENC_BIG_ENDIAN);
+
+ static int * const sof2_fields[] = {
+ &hf_homeplug_av_sof_pbsz,
+ &hf_homeplug_av_sof_num_sym,
+ &hf_homeplug_av_sof_tmi_av,
+ NULL
+ };
+
+ proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sof2_fields, ENC_BIG_ENDIAN);
+ ptvcursor_advance(cursor, 1);
+
+ static int * const sof3_fields[] = {
+ &hf_homeplug_av_fl_av,
+ &hf_homeplug_av_sof_mpdu_cnt,
+ &hf_homeplug_av_sof_burst_cnt,
+ NULL
+ };
+
+ proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 2, sof3_fields, ENC_LITTLE_ENDIAN);
+ ptvcursor_advance(cursor, 2);
+
+ static int * const sof4_fields[] = {
+ &hf_homeplug_av_sof_bbf,
+ &hf_homeplug_av_sof_mrtfl,
+ &hf_homeplug_av_sof_dccpcf,
+ &hf_homeplug_av_sof_mcf,
+ &hf_homeplug_av_sof_mnbf,
+ NULL
+ };
+
+ proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sof4_fields, ENC_BIG_ENDIAN);
+ ptvcursor_advance(cursor, 1);
+
+ static int * const sof5_fields[] = {
+ &hf_homeplug_av_sof_rsr,
+ &hf_homeplug_av_sof_clst,
+ &hf_homeplug_av_sof_mfs_cmd_mgmt,
+ &hf_homeplug_av_sof_mfs_cmd_data,
+ NULL
+ };
+
+ proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sof5_fields, ENC_BIG_ENDIAN);
+ ptvcursor_advance(cursor, 1);
+
+ static int * const sof6_fields[] = {
+ &hf_homeplug_av_sof_mfs_rsp_mgmt,
+ &hf_homeplug_av_sof_mfs_rsp_data,
+ &hf_homeplug_av_sof_bm_sack,
+ NULL
+ };
+
+ proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sof6_fields, ENC_BIG_ENDIAN);
+ ptvcursor_advance(cursor, 1);
+
+ ptvcursor_add(cursor, hf_homeplug_av_fc_fccs_av, 3, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+/* Selective acknowledgment */
+static void
+dissect_homeplug_av_sack(ptvcursor_t *cursor)
+{
+ proto_item *it;
+ proto_tree *tree;
+ tvbuff_t *tvb;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sack, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_sack);
+ {
+ tree = ptvcursor_tree(cursor);
+ tvb = ptvcursor_tvbuff(cursor);
+
+ ptvcursor_add(cursor, hf_homeplug_av_dtei, 1, ENC_BIG_ENDIAN);
+
+ proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, rsof_sack_fields, ENC_BIG_ENDIAN);
+ ptvcursor_advance(cursor, 1);
+
+ /* TODO: add variable fields here */
+ ptvcursor_advance(cursor, 10);
+ ptvcursor_add(cursor, hf_homeplug_av_fc_fccs_av, 3, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+/* Request to send/clear to send */
+static void
+dissect_homeplug_av_rtscts(ptvcursor_t *cursor)
+{
+ proto_item *it;
+ proto_tree *tree;
+ tvbuff_t *tvb;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rtscts, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rtscts);
+ {
+ tree = ptvcursor_tree(cursor);
+ tvb = ptvcursor_tvbuff(cursor);
+
+ ptvcursor_add(cursor, hf_homeplug_av_stei, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_dtei, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_lid, 1, ENC_BIG_ENDIAN);
+
+ static int * const rtscts_fields[] = {
+ &hf_homeplug_av_cfs,
+ &hf_homeplug_av_bdf,
+ &hf_homeplug_av_hp10df,
+ &hf_homeplug_av_hp11df,
+ &hf_homeplug_av_rtscts_rtsf,
+ &hf_homeplug_av_rtscts_igf,
+ &hf_homeplug_av_rtscts_mnbf,
+ &hf_homeplug_av_rtscts_mcf,
+ NULL
+ };
+
+ proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, rtscts_fields, ENC_BIG_ENDIAN);
+ ptvcursor_advance(cursor, 1);
+
+ ptvcursor_add(cursor, hf_homeplug_av_rtscts_dur, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_fc_fccs_av, 3, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+/* Sound */
+static void
+dissect_homeplug_av_sound(ptvcursor_t *cursor)
+{
+ proto_item *it;
+ proto_tree *tree;
+ tvbuff_t *tvb;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sound, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_sound);
+ {
+ tree = ptvcursor_tree(cursor);
+ tvb = ptvcursor_tvbuff(cursor);
+
+ ptvcursor_add(cursor, hf_homeplug_av_stei, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_dtei, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_lid, 1, ENC_BIG_ENDIAN);
+
+ static int * const sound1_fields[] = {
+ &hf_homeplug_av_cfs,
+ &hf_homeplug_av_sound_pbsz,
+ &hf_homeplug_av_sound_bdf,
+ &hf_homeplug_av_sound_saf,
+ &hf_homeplug_av_sound_scf,
+ &hf_homeplug_av_sound_req_tm,
+ NULL
+ };
+
+ proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sound1_fields, ENC_BIG_ENDIAN);
+ ptvcursor_advance(cursor, 1);
+
+ static int * const sound2_fields[] = {
+ &hf_homeplug_av_fl_av,
+ &hf_homeplug_av_sound_mpdu_cnt,
+ NULL
+ };
+
+ proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 2, sound2_fields, ENC_LITTLE_ENDIAN);
+ ptvcursor_advance(cursor, 2);
+
+ ptvcursor_add(cursor, hf_homeplug_av_ppb, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_sound_src, 1, ENC_BIG_ENDIAN);
+
+ static int * const sound3_fields[] = {
+ &hf_homeplug_av_sound_add_req_tm,
+ &hf_homeplug_av_sound_max_pb_sym,
+ &hf_homeplug_av_sound_ecsf,
+ &hf_homeplug_av_sound_ecuf,
+ NULL
+ };
+
+ proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sound3_fields, ENC_BIG_ENDIAN);
+ ptvcursor_advance(cursor, 1);
+
+ static int * const sound4_fields[] = {
+ &hf_homeplug_av_sound_ems,
+ &hf_homeplug_av_sound_esgisf,
+ &hf_homeplug_av_sound_elgisf,
+ &hf_homeplug_av_sound_efrs,
+ NULL
+ };
+
+ proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sound4_fields, ENC_BIG_ENDIAN);
+ ptvcursor_advance(cursor, 3); /* one byte for bitmask plus two reserved bytes we ignore */
+
+ ptvcursor_add(cursor, hf_homeplug_av_fc_fccs_av, 3, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+/* Reverse Start of Frame */
+static void
+dissect_homeplug_av_rsof(ptvcursor_t *cursor)
+{
+ proto_item *it;
+ proto_tree *tree;
+ tvbuff_t *tvb;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rsof, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rsof);
+ {
+ tree = ptvcursor_tree(cursor);
+ tvb = ptvcursor_tvbuff(cursor);
+
+ ptvcursor_add(cursor, hf_homeplug_av_dtei, 1, ENC_BIG_ENDIAN);
+
+ proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, rsof_sack_fields, ENC_BIG_ENDIAN);
+ ptvcursor_advance(cursor, 8); /* 1 byte for bitmask field, plus 7 bytes of variable data */
+ /* TODO: fill in variable fields */
+
+ static int * const rsof2_fields[] = {
+ &hf_homeplug_av_rsof_fl,
+ &hf_homeplug_av_rsof_tmi,
+ &hf_homeplug_av_rsof_pbsz,
+ NULL
+ };
+
+ proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 2, rsof2_fields, ENC_LITTLE_ENDIAN);
+ ptvcursor_advance(cursor, 2);
+
+ static int * const rsof3_fields[] = {
+ &hf_homeplug_av_rsof_num_sym,
+ &hf_homeplug_av_rsof_mfs_cmd_mgmt,
+ &hf_homeplug_av_rsof_mfs_cmd_data,
+ NULL
+ };
+
+ proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, rsof3_fields, ENC_BIG_ENDIAN);
+ ptvcursor_advance(cursor, 1);
+
+ ptvcursor_add(cursor, hf_homeplug_av_fc_fccs_av, 3, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_nw_info_sta(ptvcursor_t *cursor, gboolean vendor, guint homeplug_av_mmver)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_info_sta_info, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_nw_info_sta_info);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_sta_da, 6, ENC_NA);
+ if (vendor) {
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_sta_tei, 1, ENC_BIG_ENDIAN);
+
+ if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 3, ENC_NA);
+
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_sta_bda, 6, ENC_NA);
+ }
+ if (!homeplug_av_mmver)
+ {
+ ptvcursor_add(cursor, hf_homeplug_av10_nw_info_sta_phy_dr_tx, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av10_nw_info_sta_phy_dr_rx, 1, ENC_BIG_ENDIAN);
+ }
+ else if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
+ {
+ ptvcursor_add(cursor, hf_homeplug_av11_nw_info_sta_phy_dr_tx, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_homeplug_av11_nw_info_sta_cpling_tx, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av11_nw_info_sta_cpling_rx, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av11_nw_info_sta_phy_dr_rx, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 2, ENC_NA);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_nw_info_net(ptvcursor_t *cursor, gboolean vendor, guint8 homeplug_av_mmver)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_info_net_info, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_nw_info_net_info);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_nid, 7, ENC_NA);
+
+ if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 2, ENC_NA);
+
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_snid, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_tei, 1, ENC_BIG_ENDIAN);
+
+ if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
+
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_sta_role, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_cco_mac, 6, ENC_NA);
+ if (vendor) {
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_cco_tei, 1, ENC_BIG_ENDIAN);
+
+ if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 3, ENC_NA);
+ }
+ else
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_access, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_num_coord, 1, ENC_BIG_ENDIAN);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+/* Public MMEs */
+static void
+dissect_homeplug_av_cc_sta_info(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cc_sta_info, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cc_sta_info);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_mac, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_tei, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_same_net, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_snid, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_cco_cap, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_sig_level, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_avg_ble, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_cc_net_info(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cc_net_info, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cc_net_info);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_nid, 7, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_snid, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cc_net_info_hyb_mode, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cc_net_info_bcn_slots, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cc_net_info_cco_sts, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cc_net_info_bcn_ofs, 2, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_cc_disc_list_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+ guint8 num_stas;
+ guint8 sta;
+ guint8 num_nets;
+ guint8 net;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cc_disc_list_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cc_disc_list_cnf);
+ {
+ num_stas = tvb_get_guint8(ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_cc_disc_list_sta_cnt, 1, ENC_BIG_ENDIAN);
+
+ for (sta = 0; sta < num_stas; sta++) {
+ dissect_homeplug_av_cc_sta_info(cursor);
+ }
+
+ num_nets = tvb_get_guint8(ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_cc_disc_list_net_cnt, 1, ENC_BIG_ENDIAN);
+
+ for (net = 0; net < num_nets; net++) {
+ dissect_homeplug_av_cc_net_info(cursor);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_cm_enc_pld_ind(ptvcursor_t *cursor)
+{
+ proto_item *it;
+ guint8 pid;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_enc_pld_ind, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_enc_pld_ind);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_peks, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_avlns, 1, ENC_BIG_ENDIAN);
+ pid = tvb_get_guint8(ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_pmn, 1, ENC_BIG_ENDIAN);
+ if (pid == HOMEPLUG_AV_PID_HLE) {
+ ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_iv, 16, ENC_NA);
+ } else {
+ ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_uuid, 16, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_len, 2, ENC_LITTLE_ENDIAN);
+
+ /* Encrypted payload follows */
+ if (pid != HOMEPLUG_AV_PID_HLE) {
+ ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_pld, -1, ENC_NA);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_cm_enc_pld_rsp(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_enc_pld_rsp, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_enc_pld_rsp);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_rsp_result, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_cm_set_key_req(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_set_key_req, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_set_key_req);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_key_type, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_my_nonce, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_your_nonce, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_pmn, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_cco_cap, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_nid, 7, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_peks, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cm_set_key_req_nw_key, 16, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_cm_set_key_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_set_key_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_set_key_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_cm_set_key_cnf_result, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_my_nonce, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_your_nonce, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_pmn, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_cco_cap, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_cm_get_key_req(ptvcursor_t *cursor)
+{
+ proto_item *it;
+ guint8 key_type;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_get_key_req, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_get_key_req);
+ {
+
+ ptvcursor_add(cursor, hf_homeplug_av_cm_get_key_req_type, 1, ENC_BIG_ENDIAN);
+ key_type = tvb_get_guint8(ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_key_type, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_nid, 7, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_my_nonce, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_pmn, 1, ENC_BIG_ENDIAN);
+ if (key_type == HOMEPLUG_AV_KEY_TYPE_HASH) {
+ ptvcursor_add(cursor, hf_homeplug_av_cm_get_key_req_has_key, -1, ENC_NA);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_cm_get_key_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_get_key_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_get_key_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_cm_get_key_cnf_result, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cm_get_key_cnf_rtype, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_my_nonce, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_your_nonce, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_nid, 7, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_peks, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_pmn, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cm_get_key_cnf_key, -1, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_get_brg_infos_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+ guint8 bridging;
+ guint8 num_stas;
+ guint8 sta;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_brg_infos_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_brg_infos_cnf);
+ {
+ bridging = tvb_get_guint8(ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_brg_infos_cnf_brd, 1, ENC_BIG_ENDIAN);
+
+ if (bridging) {
+ ptvcursor_add(cursor, hf_homeplug_av_brg_infos_cnf_btei, 1, ENC_BIG_ENDIAN);
+
+ num_stas = tvb_get_guint8(ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_brg_infos_cnf_num_stas, 1, ENC_BIG_ENDIAN);
+
+ for (sta = 0; sta < num_stas; sta++) {
+ ptvcursor_add(cursor, hf_homeplug_av_brg_infos_cnf_mac, 6, ENC_NA);
+ }
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_nw_infos_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+ guint8 num_avlns;
+ guint8 net;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_nw_infos_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_nw_infos_cnf);
+ {
+ num_avlns = tvb_get_guint8(ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_num_avlns, 1, ENC_BIG_ENDIAN);
+
+ for (net = 0; net < num_avlns; net++) {
+ /* Force HomePlug AV 1.0 layout here */
+ dissect_homeplug_av_nw_info_net(cursor, FALSE, 0);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_nw_stats_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+ guint8 num_stas;
+ guint8 sta;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_stats_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_nw_stats_cnf);
+ {
+ num_stas = tvb_get_guint8(ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_num_stas, 1, ENC_BIG_ENDIAN);
+
+ for (sta = 0; sta < num_stas; sta++) {
+ /* Force HomePlug AV 1.0 layout here */
+ dissect_homeplug_av_nw_info_sta(cursor, FALSE, 0);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+/* Intellon - Qualcomm specific MME Types */
+static void
+dissect_homeplug_av_get_sw_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_get_sw_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_get_sw_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_get_sw_cnf_status, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_get_sw_cnf_dev_id, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_get_sw_cnf_ver_len, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_get_sw_cnf_ver_str, 64, ENC_ASCII);
+ ptvcursor_add(cursor, hf_homeplug_av_get_sw_cnf_upg, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_wr_mem_req(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wr_mem_req, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wr_mem_req);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_mem_addr, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_mem_len_32bits, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_homeplug_av_mem_data, -1, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_wr_mem_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wr_mem_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wr_mem_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_mem_status, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_mem_addr, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_mem_len_32bits, 4, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_rd_mem_req(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rd_mem_req, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rd_mem_req);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_mem_addr, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_mem_len_32bits, 4, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_rd_mem_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rd_mem_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rd_mem_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_mem_status, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_mem_addr, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_mem_len_32bits, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_homeplug_av_mem_data, -1, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_st_mac_req(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_st_mac_req, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_st_mac_req);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 3, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_mac_req_img_load, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_st_mac_req_img_len, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_st_mac_req_img_chksum, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_st_mac_req_img_start, 4, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+
+static void
+dissect_homeplug_av_st_mac_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_st_mac_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_st_mac_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_st_mac_cnf_status, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_get_nvm_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_get_nvm_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_get_nvm_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_get_nvm_cnf_status, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_get_nvm_cnf_nvm_type, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_get_nvm_cnf_nvm_page, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_get_nvm_cnf_nvm_block, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_get_nvm_cnf_nvm_size, 4, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_rs_dev_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rs_dev_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rs_dev_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_rs_dev_cnf_status, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void dissect_homeplug_av_wr_mod_req(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wr_mod_req, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wr_mod_req);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_mem_len_16bits, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_mem_offset, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_mem_checksum, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_homeplug_av_mem_data, -1, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void dissect_homeplug_av_wr_mod_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wr_mod_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wr_mod_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_wr_mod_cnf_status, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_mem_len_16bits, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_mem_offset, 4, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void dissect_homeplug_av_wr_mod_ind(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wr_mod_ind, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wr_mod_ind);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_wr_mod_ind_status, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_rd_mod_req(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rd_mod_req, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rd_mod_req);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_mem_len_16bits, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_mem_offset, 4, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_rd_mod_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rd_mod_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rd_mod_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_rd_mod_cnf_status, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 3, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_mem_len_16bits, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_mem_offset, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_mem_checksum, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_homeplug_av_mem_data, -1, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_mod_nvm_req(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mod_nvm_req, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_mod_nvm_req);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_mod_nvm_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mod_nvm_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_mod_nvm_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_mod_nvm_cnf_status, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_mac_module_id, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_wd_rpt_req(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wd_rpt_req, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wd_rpt_req);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_req_session_id, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_req_clr, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_wd_rpt_ind(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_wd_rpt_ind, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_wd_rpt_ind);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_status, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_session_id, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_num_parts, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_curr_part, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_rdata_len, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_rdata_ofs, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_wd_rpt_ind_rdata, -1, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_lnk_stats_req(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_lnk_stats_req, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_lnk_stats_req);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_req_mcontrol, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_req_dir, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_req_lid, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_req_macaddr, 6, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_lnk_stats_tx(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_lnk_stats_tx, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_lnk_stats_tx);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_tx_mpdu_ack, 8, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_tx_mpdu_col, 8, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_tx_mpdu_fai, 8, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_tx_pbs_pass, 8, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_tx_pbs_fail, 8, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_lnk_stats_rx_interval(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rx_inv_stats, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_lnk_stats_rx_inv);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_rx_inv_phy_rate, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_rx_inv_pbs_pass, 8, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_rx_inv_pbs_fail, 8, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_rx_inv_tb_pass, 8, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_rx_inv_tb_fail, 8, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_lnk_stats_rx(ptvcursor_t *cursor)
+{
+ proto_item *it;
+ guint8 num_rx_interval;
+ guint8 interval;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_lnk_stats_rx, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_lnk_stats_rx);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_mpdu_ack, 8, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_mpdu_fai, 8, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_pbs_pass, 8, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_pbs_fail, 8, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_tb_pass, 8, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_tb_fail, 8, ENC_LITTLE_ENDIAN);
+ num_rx_interval = tvb_get_guint8(ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_rx_num_int, 1, ENC_BIG_ENDIAN);
+
+ for (interval = 0; interval < num_rx_interval; interval++) {
+ dissect_homeplug_av_lnk_stats_rx_interval(cursor);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_lnk_stats_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+ guint8 status;
+ guint8 direction;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_lnk_stats_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_lnk_stats_cnf);
+ {
+ status = tvb_get_guint8(ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_cnf_status, 1, ENC_BIG_ENDIAN);
+
+ direction = tvb_get_guint8(ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_cnf_dir, 1, ENC_BIG_ENDIAN);
+
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_cnf_lid, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_lnk_stats_cnf_tei, 1, ENC_BIG_ENDIAN);
+
+ ptvcursor_add_no_advance(cursor, hf_homeplug_av_lnk_stats_cnf_lstats, -1, ENC_NA);
+
+ if (status == HOMEPLUG_AV_LNK_STATS_STATUS_SUCCESS)
+ {
+ switch (direction) {
+ case HOMEPLUG_AV_LNK_STATS_DIR_TX:
+ dissect_homeplug_av_lnk_stats_tx(cursor);
+ break;
+ case HOMEPLUG_AV_LNK_STATS_DIR_RX:
+ dissect_homeplug_av_lnk_stats_rx(cursor);
+ break;
+ case HOMEPLUG_AV_LNK_STATS_DIR_TX_RX:
+ dissect_homeplug_av_lnk_stats_tx(cursor);
+ dissect_homeplug_av_lnk_stats_rx(cursor);
+ break;
+ }
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_sniffer_req(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sniffer_req, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_sniffer_req);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_sniffer_req_ctrl, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_sniffer_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sniffer_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_sniffer_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_sniffer_cnf_status, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_sniffer_cnf_state, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_sniffer_cnf_da, 6, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_sniffer_ind(ptvcursor_t *cursor)
+{
+ proto_item *it;
+ proto_item *it_data;
+ tvbuff_t *tvb;
+ guint offset;
+
+ guint8 del_type;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sniffer_ind, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_sniffer_ind);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_sniffer_ind_type, 1, ENC_BIG_ENDIAN);
+
+ it_data = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sniffer_ind_data, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it_data, ett_homeplug_av_sniffer_ind_data);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_sniffer_data_dir, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_sniffer_data_systime, 8, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_sniffer_data_bc_time, 4, ENC_LITTLE_ENDIAN);
+
+ offset = ptvcursor_current_offset(cursor);
+ tvb = ptvcursor_tvbuff(cursor);
+
+ del_type = tvb_get_guint8(tvb, offset);
+
+ /* bitmask - we only want 3 bits of del_type */
+ guint8 bitmask = 0x07;
+
+ del_type &= bitmask;
+
+ static int * const frame_control_fields[] = {
+ &hf_homeplug_av_fc_del_type,
+ &hf_homeplug_av_fc_access,
+ &hf_homeplug_av_fc_snid,
+ NULL
+ };
+
+ proto_tree_add_bitmask(ptvcursor_tree(cursor), tvb, offset, hf_homeplug_av_fc,
+ ett_homeplug_av_fc, frame_control_fields, ENC_BIG_ENDIAN);
+ ptvcursor_advance(cursor, 1);
+
+ switch (del_type)
+ {
+ case HOMEPLUG_AV_DEL_TYPE_BCN:
+ dissect_homeplug_av_beacon(cursor);
+ break;
+ case HOMEPLUG_AV_DEL_TYPE_SOF:
+ dissect_homeplug_av_start_of_frame(cursor);
+ break;
+ case HOMEPLUG_AV_DEL_TYPE_SACK:
+ dissect_homeplug_av_sack(cursor);
+ break;
+ case HOMEPLUG_AV_DEL_TYPE_RTS:
+ dissect_homeplug_av_rtscts(cursor);
+ break;
+ case HOMEPLUG_AV_DEL_TYPE_SOUND:
+ dissect_homeplug_av_sound(cursor);
+ break;
+ case HOMEPLUG_AV_DEL_TYPE_RSOF:
+ dissect_homeplug_av_rsof(cursor);
+ break;
+ default:
+ break;
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_nw_info_cnf(ptvcursor_t *cursor, guint8 homeplug_av_mmver)
+{
+ proto_item *it;
+ guint8 num_avlns;
+ guint8 num_stas;
+ guint8 sta;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_info_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_nw_info_cnf);
+ {
+ if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 5, ENC_NA);
+
+ num_avlns = tvb_get_guint8(ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_num_avlns, 1, ENC_BIG_ENDIAN);
+
+ if (num_avlns) {
+ dissect_homeplug_av_nw_info_net(cursor, TRUE, homeplug_av_mmver);
+ num_stas = tvb_get_guint8(ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_num_stas, 1, ENC_BIG_ENDIAN);
+
+ if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 5, ENC_NA);
+
+ for (sta = 0; sta < num_stas; sta++) {
+ dissect_homeplug_av_nw_info_sta(cursor, TRUE, homeplug_av_mmver);
+ }
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_cp_rpt_req(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cp_rpt_req, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cp_rpt_req);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_req_session_id, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_req_clr, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_cp_rpt_ind(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cp_rpt_ind, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cp_rpt_ind);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_status, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_major_ver, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_minor_ver, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 14, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_session_id, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_total_size, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_blk_offset, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_byte_index, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_num_parts, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_curr_part, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_data_len, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_data_ofs, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_homeplug_av_cp_rpt_ind_data, -1, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_fr_lbk_req(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_fr_lbk_req, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_fr_lbk_req);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_duration, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_len, 2, ENC_BIG_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_homeplug_av_fr_lbk_req_data, -1, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_fr_lbk_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_fr_lbk_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_fr_lbk_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_cnf_status, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_duration, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_len, 2, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_lbk_stat_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_lbk_stat_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_lbk_stat_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_lbk_stat_cnf_status, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_lbk_stat_cnf_lbk_stat, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_set_key_req(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_set_key_req, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_set_key_req);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_set_key_req_eks, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_set_key_req_nmk, 16, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_nw_info_peks, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_set_key_req_rda, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_set_key_req_dak, 16, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_set_key_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_set_key_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_set_key_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_set_key_cnf_status, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_mfg_string_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mfg_string_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_mfg_string_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_mfg_string_cnf_status, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_mfg_string_cnf_len, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_mfg_string_cnf_string, 64, ENC_ASCII);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_cblock_hdr(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cblock_hdr, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cblock_hdr);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_ver, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_img_rom_addr, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_img_addr, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_img_len, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_img_chksum, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_entry_point, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_minor, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_img_type, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_ignore_mask, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_module_id, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_module_subid, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_next_hdr, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_hdr_chksum, 4, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_cblock(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cblock, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cblock);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_sdram_size, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_sdram_conf, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_sdram_tim0, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_sdram_tim1, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_sdram_cntrl, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_sdram_refresh, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_cblock_mac_clock, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_rd_cblock_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rd_cblock_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rd_cblock_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_rd_cblock_cnf_status, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_rd_cblock_cnf_len, 1, ENC_BIG_ENDIAN);
+ dissect_homeplug_av_cblock_hdr(cursor);
+ dissect_homeplug_av_cblock(cursor);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_set_sdram_req(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_set_sdram_req, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_set_sdram_req);
+ {
+ dissect_homeplug_av_cblock(cursor);
+ ptvcursor_add(cursor, hf_homeplug_av_set_sdram_req_chksum, 4, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_set_sdram_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_set_sdram_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_set_sdram_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_set_sdram_cnf_status, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_host_action_ind(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_host_action_ind, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_host_action_ind);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_host_action_ind_act, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_host_action_rsp(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_host_action_rsp, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_host_action_rsp);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_host_action_rsp_sts, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_op_attr_req(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_op_attr_req, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_op_attr_req);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_op_attr_cookie, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_op_attr_rep_type, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_op_attr_bin_report(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_op_attr_cnf_data, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_op_attr_data);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_hw, 16, ENC_ASCII);
+ ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw, 16, ENC_ASCII);
+ ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_major, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_minor, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_sub, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_num, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_date, 8, ENC_ASCII);
+ ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_rel, 12, ENC_ASCII);
+ ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_sdram_type, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
+ ptvcursor_add_no_advance(cursor, hf_homeplug_av_op_attr_data_sw_linefreq, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_zerocross, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_sdram_size, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_auth_mode, 1, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_op_attr_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_op_attr_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_op_attr_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_op_attr_cnf_status, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_op_attr_cookie, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_op_attr_rep_type, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_op_attr_cnf_size, 2, ENC_LITTLE_ENDIAN);
+ dissect_homeplug_av_op_attr_bin_report(cursor);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_get_enet_phy_req(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_enet_phy_req, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_enet_phy_req);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_enet_phy_req_mcontrol, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_enet_phy_req_addcaps, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 3, ENC_NA);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_get_enet_phy_cnf(ptvcursor_t *cursor)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_enet_phy_cnf, -1, ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_enet_phy_cnf);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_enet_phy_cnf_status, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_enet_phy_cnf_speed, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_enet_phy_cnf_duplex, 1, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_tone_map_tx_req(ptvcursor_t *cursor, guint8 homeplug_av_mmver)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_tx_req, -1, ENC_NA);
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_tone_map_tx_req);
+ {
+ if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_req_mac, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_req_slot, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_req_coupling, 1, ENC_LITTLE_ENDIAN);
+ }
+ else
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_req_mac, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_req_slot, 1, ENC_BIG_ENDIAN);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_tone_map_rx_req(ptvcursor_t *cursor, guint8 homeplug_av_mmver)
+{
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_rx_req, -1, ENC_NA);
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_tone_map_rx_req);
+ {
+ if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_req_mac, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_req_slot, 1, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_req_coupling, 1, ENC_LITTLE_ENDIAN);
+ }
+ else
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_req_mac, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_req_slot, 1, ENC_BIG_ENDIAN);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_tone_map_carrier(ptvcursor_t *cursor, guint16 num_carriers)
+{
+ proto_item *it, *ittm;
+ guint8 hilo, hi_bits, lo_bits, hi_snr, lo_snr;
+ guint16 num_carrier_bytes, cb, cid;
+ guint16 num_act_carriers=0, total_bits=0, total_snr=0;
+
+ static const guint8 map_carrier2modbits[] = { 0, 1, 2, 3, 4, 6, 8, 10, 12, 0, 0, 0, 0, 0, 0, 0 }; /* Carrier-Nibble to #Modulated-Bits Mapping */
+ static const guint8 map_carrier2modbitsSnr[] = { 0, 2, 4, 7, 10, 16, 22, 28, 36, 0, 0, 0, 0, 0, 0, 0 }; /* Carrier-Nibble to #Modulated-Bits-SNR Mapping */
+
+ if (!ptvcursor_tree(cursor))
+ return;
+ num_carrier_bytes = num_carriers / 2;
+
+ /* check if number of carriers is odd */
+ if (num_carriers & 1)
+ num_carrier_bytes += 1;
+
+ ittm = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_carriers, num_carrier_bytes, ENC_NA);
+ ptvcursor_push_subtree(cursor, ittm, ett_homeplug_av_tone_map_carriers);
+
+ for (cb = 0; cb < num_carrier_bytes; cb++)
+ {
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_carrier, 1, ENC_NA);
+ cid = cb*2;
+ proto_item_append_text(it, " (Carrier #%d/#%d)", cid, cid+1 );
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_tone_map_carrier);
+ {
+ hilo = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ lo_bits = map_carrier2modbits[ (hilo & 0x0f) ];
+ hi_bits = map_carrier2modbits[ (hilo & 0xf0) >> 4 ];
+ if(lo_bits) num_act_carriers++;
+ if(hi_bits) num_act_carriers++;
+ lo_snr = map_carrier2modbitsSnr[ (hilo & 0x0f) ];
+ hi_snr = map_carrier2modbitsSnr[ (hilo & 0xf0) >> 4 ];
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_carrier_lo, 1, ENC_BIG_ENDIAN);
+ proto_item_prepend_text(it, "Carrier #%d -> %u bits@SNR %udB: ", cid , lo_bits, lo_snr);
+ it = ptvcursor_add(cursor, hf_homeplug_av_tone_map_carrier_hi, 1, ENC_BIG_ENDIAN);
+ proto_item_prepend_text(it, "Carrier #%d -> %u bits@SNR %udB: ", cid+1, hi_bits, hi_snr );
+ }
+ ptvcursor_pop_subtree(cursor);
+ total_bits += (hi_bits+lo_bits);
+ total_snr += (hi_snr+lo_snr);
+ }
+
+ if (num_act_carriers)
+ {
+ /* Append to TM-Subtree: total modulated bits, number of active carriers, Average #Bits/Carrier, Average SNR/Carrier */
+ proto_item_append_text(ittm, " (Total #ModulatedBits=%d bit, Active #Carriers=%d, Average #Bits/Carrier=%.2f bit), Average SNR/Carrier=%.2f dB)",
+ total_bits, num_act_carriers, (float) total_bits/num_act_carriers, (float) total_snr/num_act_carriers );
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_tone_map_tx_cnf(ptvcursor_t *cursor, guint8 homeplug_av_mmver)
+{
+ proto_item *it;
+ guint16 num_act_carriers;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_tx_cnf, -1, ENC_NA);
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_tone_map_tx_cnf);
+ {
+ if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_status, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_len, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 2, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_mac, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_slot, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_num_tms, 2, ENC_LITTLE_ENDIAN);
+
+ num_act_carriers = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_num_act, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
+
+ if (num_act_carriers)
+ {
+ dissect_homeplug_av_tone_map_carrier(cursor, num_act_carriers);
+ }
+ }
+ else
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_status, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_slot, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_num_tms, 1, ENC_LITTLE_ENDIAN);
+
+ num_act_carriers = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_tx_cnf_num_act, 2, ENC_LITTLE_ENDIAN);
+
+ if (num_act_carriers)
+ {
+ dissect_homeplug_av_tone_map_carrier(cursor, num_act_carriers);
+ }
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+static void
+dissect_homeplug_av_tone_map_rx_cnf(ptvcursor_t *cursor, guint8 homeplug_av_mmver)
+{
+ proto_item *it;
+ guint16 num_act_carriers;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_tone_map_rx_cnf, -1, ENC_NA);
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_tone_map_rx_cnf);
+ {
+ if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1)
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_status, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_len, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_subver, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_mac, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_slot, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_coupling, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_num_tms, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
+
+ num_act_carriers = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_num_act, 2, ENC_LITTLE_ENDIAN);
+
+ if (num_act_carriers)
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_gil, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_agc, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
+
+ dissect_homeplug_av_tone_map_carrier(cursor, num_act_carriers);
+ }
+ }
+ else
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_status, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_slot, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_num_tms, 1, ENC_LITTLE_ENDIAN);
+
+ num_act_carriers = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_num_act, 2, ENC_LITTLE_ENDIAN);
+
+ if (num_act_carriers)
+ {
+ dissect_homeplug_av_tone_map_carrier(cursor, num_act_carriers);
+
+ if (num_act_carriers > HOMEPLUG_AV_TONE_MAP_MAX_NUM_CARRIERS_A)
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, (HOMEPLUG_AV_TONE_MAP_MAX_NUM_CARRIERS_B-num_act_carriers) >>1 , ENC_NA);
+ else
+ ptvcursor_add(cursor, hf_homeplug_av_reserved, (HOMEPLUG_AV_TONE_MAP_MAX_NUM_CARRIERS_A-num_act_carriers) >>1 , ENC_NA);
+
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_gil, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_tone_map_rx_cnf_agc, 1, ENC_LITTLE_ENDIAN);
+ }
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+}
+
+
+static void
+dissect_homeplug_av_cc_assoc_req(ptvcursor_t *cursor) {
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_cc_assoc_reqtype, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_cc_assoc_nid, 7, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_cc_assoc_cco_cap, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_cc_assoc_proxy_net_cap, 1, ENC_NA);
+}
+
+static void
+dissect_homeplug_av_cc_assoc_cnf(ptvcursor_t *cursor) {
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_cc_assoc_result, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_cc_assoc_nid, 7, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_cc_assoc_snid, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_cc_assoc_tei, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_cc_assoc_lease_time, 2, ENC_LITTLE_ENDIAN);
+}
+
+static void
+dissect_homeplug_av_cc_set_tei_map_ind(ptvcursor_t *cursor) {
+ guint8 numberOfSTA = 0;
+ guint iter = 0;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_cc_set_tei_map_ind_mode, 1, ENC_NA);
+
+ numberOfSTA = tvb_get_guint8( ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_cc_set_tei_map_ind_num, 1, ENC_NA);
+
+ for ( iter = 0; iter < numberOfSTA; ++iter ) {
+ ptvcursor_add(cursor, hf_homeplug_av_cc_set_tei_map_ind_tei, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_cc_set_tei_map_ind_mac, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_cc_set_tei_map_ind_status, 1, ENC_NA);
+ }
+}
+
+static void
+dissect_homeplug_av_cm_unassociated_sta_ind(ptvcursor_t *cursor) {
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_cm_unassoc_sta_nid, 7, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_cm_unassoc_sta_cco_cap, 1, ENC_NA);
+}
+
+/* HPAV/GP dissect functions */
+static void
+dissect_homeplug_av_gp_cm_slac_parm_req(ptvcursor_t *cursor) {
+
+ guint8 sectype,cipher_size;
+ guint16 Counter;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_apptype, 1, ENC_NA);
+ sectype = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_sectype, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_runid, 8, ENC_NA);
+ if (sectype == HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY) {
+ cipher_size = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_cipher_size, 1, ENC_NA);
+ for (Counter = 0; Counter < cipher_size; ++Counter) {
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_cipher, 2, ENC_LITTLE_ENDIAN);
+ }
+ }
+}
+
+static void
+dissect_homeplug_av_gp_cm_slac_parm_cnf(ptvcursor_t *cursor) {
+
+ guint8 sectype;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_sound_target, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_sound_count, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_time_out, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_resptype, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_forwarding_sta, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_apptype, 1, ENC_NA);
+ sectype = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_sectype, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_runid, 8, ENC_NA);
+ if (sectype == HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY) {
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_parm_cipher, 2, ENC_LITTLE_ENDIAN);
+ }
+}
+
+static void
+dissect_homeplug_av_gp_cm_atten_profile_ind(ptvcursor_t *cursor) {
+
+ guint8 group_size;
+ guint16 Counter;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_profile_ind_pev_mac, 6, ENC_NA);
+ group_size = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_profile_ind_num_groups, 1, ENC_NA);
+ /* Skip reserved */
+ ptvcursor_advance(cursor, 1);
+ for (Counter = 0; Counter < group_size; ++Counter) {
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_profile_ind_aag, 1, ENC_NA);
+ }
+}
+
+static void
+dissect_homeplug_av_gp_cm_atten_char_ind(ptvcursor_t *cursor, packet_info *pinfo) {
+
+ guint8 sectype, numgroups, val;
+ guint16 Counter_groups;
+ proto_item *it;
+ gfloat avg;
+
+ avg = 0.0f;
+
+ if (!ptvcursor_tree(cursor)) {
+ ptvcursor_advance(cursor, 1);
+ sectype = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_advance(cursor, 1);
+ if (sectype != HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY) {
+ ptvcursor_advance(cursor, 6+8+17+17+1);
+ numgroups = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_advance(cursor, 1);
+ for (Counter_groups = 0; Counter_groups < numgroups; ++Counter_groups) {
+ val = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ avg += val;
+ ptvcursor_advance(cursor,1);
+ }
+ avg /= numgroups;
+ col_append_fstr(pinfo->cinfo, COL_INFO, " (Groups = %d, Avg. Attenuation = %.2f dB)", numgroups, avg);
+ }
+ return;
+ }
+
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_apptype, 1, ENC_NA);
+ sectype = tvb_get_guint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
+
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_sectype, 1, ENC_NA);
+
+ if (sectype == HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY) {
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_cms_data, -1, ENC_NA);
+ } else {
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_source_mac, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_runid, 8, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_source_id, 17, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_resp_id, 17, ENC_NA);
+
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_numsounds, 1, ENC_NA);
+
+ numgroups = tvb_get_guint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_gp_cm_atten_char_profile, numgroups+1 , ENC_NA);
+
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_gp_cm_atten_char_profile);
+ {
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_numgroups, 1, ENC_NA);
+ for (Counter_groups = 0; Counter_groups < numgroups; ++Counter_groups) {
+ val = tvb_get_guint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
+ proto_tree_add_uint_format( ptvcursor_tree(cursor),
+ hf_homeplug_av_gp_cm_atten_char_aag,
+ ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor), 1, val,
+ HOMEPLUG_AV_GP_CM_ATTEN_CHAR_AAG_FORMAT, Counter_groups + 1, val );
+ ptvcursor_advance(cursor, 1);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+
+}
+
+static void
+dissect_homeplug_av_gp_cm_atten_char_rsp(ptvcursor_t *cursor) {
+
+ guint8 sectype;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_apptype, 1, ENC_NA);
+ sectype = tvb_get_guint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
+
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_sectype, 1, ENC_NA);
+
+ if (sectype == HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY) {
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_cms_data, -1, ENC_NA);
+ } else {
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_source_mac, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_runid, 8, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_source_id, 17, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_resp_id, 17, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_result, 1, ENC_NA);
+ }
+}
+
+static void
+dissect_homeplug_av_gp_cm_start_atten_char_ind(ptvcursor_t *cursor) {
+
+ guint8 sectype;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_apptype, 1, ENC_NA);
+ sectype = tvb_get_guint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
+
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_sectype, 1, ENC_NA);
+
+ if (sectype == HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY) {
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_cms_data, -1, ENC_NA);
+ } else {
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_start_atten_char_numsounds, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_start_atten_char_time_out, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_start_atten_char_resptype, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_start_atten_char_forwarding_sta, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_start_atten_char_runid, 8, ENC_NA);
+ }
+}
+
+static void
+dissect_homeplug_av_gp_cm_mnbc_sound_ind(ptvcursor_t *cursor) {
+
+ guint8 apptype,sectype;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ apptype = tvb_get_guint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_mnbc_sound_apptype, 1, ENC_NA);
+
+ sectype = tvb_get_guint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_mnbc_sound_sectype, 1, ENC_NA);
+
+ if (sectype == HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY) {
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_cms_data, -1, ENC_NA);
+ } else {
+ switch (apptype) {
+ case HOMEPLUG_AV_GP_APPTYPE_PEV_EVSE_ASSOC:
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_mnbc_sound_sender_id, 17, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_mnbc_sound_countdown, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_mnbc_sound_runid, 8, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_mnbc_sound_rsvd, 8, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_mnbc_sound_rnd, 16, ENC_NA);
+ break;
+ }
+ }
+}
+
+static void
+dissect_homeplug_av_gp_cm_validate_req(ptvcursor_t *cursor) {
+
+ guint8 signaltype;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ signaltype = tvb_get_guint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_validate_signaltype, 1, ENC_NA);
+ switch (signaltype) {
+ case HOMEPLUG_AV_GP_SIGNAL_TYPE_PEV_S2_TOGGLES:
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_validate_timer, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_validate_result, 1, ENC_NA);
+ break;
+ }
+}
+
+static void
+dissect_homeplug_av_gp_cm_validate_cnf(ptvcursor_t *cursor) {
+
+ guint8 signaltype;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ signaltype = tvb_get_guint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_validate_signaltype, 1, ENC_NA);
+ switch (signaltype) {
+ case HOMEPLUG_AV_GP_SIGNAL_TYPE_PEV_S2_TOGGLES:
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_validate_togglenum, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_validate_result, 1, ENC_NA);
+ break;
+ }
+}
+
+static void
+dissect_homeplug_av_gp_cm_slac_match_req(ptvcursor_t *cursor) {
+
+ /* guint8 apptype;
+ guint16 length; */
+ guint8 sectype;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ /* apptype = tvb_get_guint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor)); */
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_apptype, 1, ENC_NA);
+
+ sectype = tvb_get_guint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_sectype, 1, ENC_NA);
+
+ /* length = tvb_get_guint16(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor), ENC_LITTLE_ENDIAN); */
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_length, 2, ENC_LITTLE_ENDIAN);
+
+ if (sectype == HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY) {
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_cms_data, -1, ENC_NA);
+ } else {
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_pev_id, 17, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_pev_mac, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_evse_id, 17, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_evse_mac, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_runid, 8, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_rsvd, 8, ENC_NA);
+ }
+}
+
+static void
+dissect_homeplug_av_gp_cm_slac_match_cnf(ptvcursor_t *cursor) {
+
+ /* guint8 apptype;
+ guint16 length; */
+ guint8 sectype;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ //apptype = tvb_get_guint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_apptype, 1, ENC_NA);
+
+ sectype = tvb_get_guint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_sectype, 1, ENC_NA);
+
+ //length = tvb_get_guint16(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor), ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_length, 2, ENC_LITTLE_ENDIAN);
+
+ if (sectype == HOMEPLUG_AV_GP_SECURITY_TYPE_PUBLIC_KEY) {
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_atten_char_cms_data, -1, ENC_NA);
+ } else {
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_pev_id, 17, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_pev_mac, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_evse_id, 17, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_evse_mac, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_runid, 8, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_rsvd, 8, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_nid, 7, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_rsvd,1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_match_nmk,16, ENC_NA);
+ }
+}
+static void
+dissect_homeplug_av_gp_cm_slac_user_data(ptvcursor_t *cursor) {
+
+ guint16 Type, Length,TypeLen;
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_user_data_broadcast_tlv_type, 3, ENC_LITTLE_ENDIAN);
+
+ for (;;) {
+ /* Get Length and Type from TLV Header */
+ TypeLen = tvb_get_guint16(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor),ENC_LITTLE_ENDIAN);
+ Length = TypeLen & HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_LENGTH_MASK;
+ Type = TypeLen & HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_TYPE_MASK;
+ /* If type and length is null_type - don't add anything and exit */
+ if (TypeLen == 0)
+ break;
+ 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);
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_gp_cm_slac_user_data_tlv);
+ {
+ 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);
+ 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);
+ if (Type == HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_TYPE_VENDOR_RESERVED) {
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_user_data_tlv_oui, 3, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_user_data_tlv_subtype, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_user_data_tlv_info_str, Length - 3 - 1, ENC_NA);
+ } else {
+ ptvcursor_add(cursor, hf_homeplug_av_gp_cm_slac_user_data_tlv_str_bytes, Length, ENC_NA);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+
+}
+
+/* End of HPAV/GP dissect functions */
+
+/* ST/IoTecha dissect functions */
+
+/* General parts */
+static void
+dissect_homeplug_av_st_iotecha_header(ptvcursor_t *cursor) {
+
+ proto_tree *tree;
+
+ if (!ptvcursor_tree(cursor)) {
+ ptvcursor_advance(cursor, 5);
+ return;
+ }
+ /* if we saved vendor subtree */
+ if (ti_vendor) {
+ /* Save current position */
+ tree = ptvcursor_tree(cursor);
+ /* Go back to vendor subtree */
+ ptvcursor_set_subtree(cursor, ti_vendor, ett_homeplug_av_public);
+ /* Add info */
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_header_mmever, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_header_rsvd, 3, ENC_NA);
+ /* Extending length of tree item */
+ proto_tree_set_appendix(ti_vendor, ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor) - 4, 4);
+ /* Now back to current position */
+ ptvcursor_set_tree(cursor,tree);
+ } else {
+ /* else - just add fields as is */
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_header_mmever, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_header_rsvd, 3, ENC_NA);
+ }
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_header_mver, 1, ENC_NA);
+}
+
+static void
+dissect_homeplug_av_st_iotecha_status_standard(ptvcursor_t *cursor) {
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_status_byte, 1, ENC_NA);
+}
+
+/* Specific messages */
+
+static void
+dissect_homeplug_av_st_iotecha_stp_discover_tlv(ptvcursor_t *cursor) {
+
+ guint16 Type, Length,TypeLen;
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ for (;;) {
+ /* Get Length and Type from TLV Header */
+ TypeLen = tvb_get_guint16(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor),ENC_LITTLE_ENDIAN);
+ Length = TypeLen & HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_LENGTH_MASK;
+ Type = TypeLen & HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_MASK;
+ /* If type is null_type - don't add anything and exit */
+ if (Type == HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_NULL)
+ break;
+ 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);
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_st_iotecha_type_length_value);
+ {
+ 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);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_stp_discover_tlv_length, HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_HEADER_SIZE, ENC_LITTLE_ENDIAN);
+ if (Type == HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_TYPE_DEVICE_TYPE) {
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_stp_discover_tlv_value_bytes, Length, ENC_NA);
+ } else {
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_stp_discover_tlv_value_string, Length, ENC_ASCII);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_get_bss_tlv(ptvcursor_t *cursor, guint8 count) {
+
+ guint8 Type;
+ guint16 Counter, Length;
+ proto_item *it;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ for (Counter = 0; Counter < count; ++Counter) {
+ Type = tvb_get_guint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
+ if (Type == HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_BEGIN_BSS) {
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_st_iotecha_bss_entry, 0, ENC_NA);
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_st_iotecha_bss_entry);
+ {
+ while (Type != HOMEPLUG_AV_ST_IOTECHA_STP_GET_BSS_TYPE_END_BSS) {
+ Type = tvb_get_guint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
+ it = ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_bss_type, 1, ENC_NA);
+ Length = tvb_get_guint16(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor), ENC_LITTLE_ENDIAN);
+ /* If no data - skip fields */
+ if (Length) {
+ proto_item_append_text(it," Length: %d",Length);
+ ptvcursor_advance(cursor, 2);
+ switch (Type) {
+ default:
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_bss_value_bytes, Length, ENC_NA);
+ break;
+ }
+
+ } else {
+ ptvcursor_advance(cursor, 2);
+ }
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+ }
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_auth_set_nmk_req(ptvcursor_t *cursor) {
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_auth_nmk, 16, ENC_NA);
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_set_maxgain_req(ptvcursor_t *cursor) {
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_gain_ask, 1, ENC_NA);
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_set_maxgain_cnf(ptvcursor_t *cursor) {
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ dissect_homeplug_av_st_iotecha_status_standard(cursor);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_gain_new, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_gain_prev, 1, ENC_NA);
+}
+
+static void
+dissect_homeplug_av_st_iotecha_linkstatus(ptvcursor_t *cursor) {
+
+ if (!ptvcursor_tree(cursor))
+ return;
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_linkstatus_status, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_linkstatus_devmode, 1, ENC_NA);
+
+}
+
+static void
+dissect_homeplug_av_st_iotecha_discover(ptvcursor_t *cursor) {
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ dissect_homeplug_av_st_iotecha_stp_discover_tlv(cursor);
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_get_tei_list_cnf(ptvcursor_t *cursor) {
+
+ guint8 TeiCount;
+ guint8 Counter;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ TeiCount = tvb_get_guint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_tei_count, 1, ENC_NA);
+ for (Counter = 0; Counter < TeiCount; ++Counter) {
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_tei, 1, ENC_NA);
+ }
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_get_tei_snapshot_req(ptvcursor_t *cursor) {
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_tei, 1, ENC_NA);
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_get_tei_snapshot_cnf(ptvcursor_t *cursor) {
+
+ guint8 AddrCount;
+ guint8 Counter;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ AddrCount = tvb_get_guint8(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_tei_snap_addr_count, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_tei_snap_tei, 1, ENC_NA);
+ for (Counter = 0; Counter < AddrCount; ++Counter) {
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mac_address, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_tei_snap_mac_address_flag, 2, ENC_LITTLE_ENDIAN);
+ }
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_get_bss_list_cnf(ptvcursor_t *cursor) {
+
+ guint8 Count;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ Count = tvb_get_guint8( ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_bss_list_count, 1, ENC_NA);
+ dissect_homeplug_av_st_iotecha_stp_get_bss_tlv(cursor, Count);
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_get_chanqual_report_req(ptvcursor_t *cursor) {
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_req_type, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mac_address, 6, ENC_NA);
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_get_chanqual_report_cnf(ptvcursor_t *cursor) {
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_substatus, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mac_address, 6, ENC_NA);
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_get_chanqual_report_ind(ptvcursor_t *cursor) {
+
+ proto_item *it;
+ guint8 tmi_count, int_count;
+ guint16 Counter;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mac_address, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_mac_local, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_mac_remote, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_source, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_response_type, 1, ENC_NA);
+ /* TMI */
+ tmi_count = tvb_get_guint8( ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_tmi_count, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_tmi, tmi_count, ENC_NA);
+ /* Intervals */
+ int_count = tvb_get_guint8( ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_int_count, 1, ENC_NA);
+
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_st_iotecha_chanqual_int,
+ int_count*3, ENC_NA);
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_st_iotecha_chanqual_int);
+ {
+ for (Counter = 0; Counter < int_count; ++Counter) {
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_int_et, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_int_tmi, 1, ENC_NA);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* TMI Attached */
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_tmi_attached, 1, ENC_NA);
+ /* Reserved 1 */
+ ptvcursor_advance(cursor,1);
+ /* FEC */
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chanqual_fec_type, 1, ENC_NA);
+ /* Reserved 2 */
+ ptvcursor_advance(cursor,1);
+ /* CBLD */
+ it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_st_iotecha_chanqual_cbld, -1, ENC_NA);
+ ptvcursor_push_subtree(cursor, it, ett_homeplug_av_st_iotecha_chanqual_cbld);
+ {
+ for (Counter = 0; Counter < HOMEPLUG_AV_ST_IOTECHA_CHANQUAL_CBLD_DATA_COUNT; ++Counter) {
+ ptvcursor_add_no_advance(cursor, hf_homeplug_av_st_iotecha_chanqual_cbld_data_low, 1, ENC_NA);
+ ptvcursor_add_no_advance(cursor, hf_homeplug_av_st_iotecha_chanqual_cbld_data_high, 1, ENC_NA);
+ ptvcursor_advance(cursor, 1);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_mfct_update_stage_req(ptvcursor_t *cursor) {
+
+ guint16 Length;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_crc, 2, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_total_length, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_offset, 2, ENC_LITTLE_ENDIAN);
+
+ Length = tvb_get_guint16(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor),ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_length, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_data, Length, ENC_NA);
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_mfct_update_stage_cnf(ptvcursor_t *cursor) {
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_crc, 2, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_timeout, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_offset, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_result, 1, ENC_NA);
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_mfct_update_finish_req(ptvcursor_t *cursor) {
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_request_type, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_reboot, 1, ENC_NA);
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_mfct_get_item_req(ptvcursor_t *cursor) {
+
+ gint name_size;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_item_offset, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_item_total_length, 4, ENC_LITTLE_ENDIAN);
+ name_size = tvb_strsize(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_name, name_size-1, ENC_ASCII);
+ /* Skip terminator */
+ ptvcursor_advance(cursor, 1);
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_mfct_get_item_cnf(ptvcursor_t *cursor) {
+
+ gint name_size;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_item_offset, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_item_total_length, 4, ENC_LITTLE_ENDIAN);
+ name_size = tvb_strsize(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_name, name_size - 1, ENC_ASCII);
+ /* Skip terminator */
+ ptvcursor_advance(cursor,1);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_value, -1, ENC_NA);
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_mfct_get_keylist_cnf(ptvcursor_t *cursor) {
+
+ gint name_size;
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ while (tvb_reported_length_remaining(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)) > 1 )
+ {
+ if ((tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)) == '\0')
+ && (tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor) + 1) == '\0'))
+ break;
+ name_size = tvb_strsize(ptvcursor_tvbuff(cursor),ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_mfct_name, name_size - 1, ENC_ASCII);
+ /* Skip terminator */
+ ptvcursor_advance(cursor,1);
+ }
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_fup_req(ptvcursor_t *cursor) {
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_stp_fup_mac_da, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_stp_fup_mac_sa, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_stp_fup_mtype, 1, ENC_NA);
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_cpstate_ind(ptvcursor_t *cursor, packet_info *pinfo) {
+
+ guint8 bitmask;
+ guint8 cp_state;
+ guint8 pwm_duty;
+
+ cp_state = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ pwm_duty = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)+1);
+ 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);
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_cpstate_state, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_cpstate_pwm_duty, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_cpstate_pwm_freq, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_cpstate_volatge, 2, ENC_LITTLE_ENDIAN);
+ bitmask = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ if (bitmask)
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_cpstate_adc_bitmask, 1, ENC_NA);
+ else
+ ptvcursor_advance(cursor, 1);
+
+
+ if (bitmask & 0x01)
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_cpstate_adc_voltage_1, 2, ENC_LITTLE_ENDIAN);
+ else
+ ptvcursor_advance(cursor, 2);
+
+ if (bitmask & 0x02)
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_cpstate_adc_voltage_2, 2, ENC_LITTLE_ENDIAN);
+ else
+ ptvcursor_advance(cursor, 2);
+
+ if (bitmask & 0x04)
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_cpstate_adc_voltage_3, 2, ENC_LITTLE_ENDIAN);
+ else
+ ptvcursor_advance(cursor, 2);
+
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_user_message_ind(ptvcursor_t *cursor, packet_info *pinfo) {
+
+ gint null_offset;
+
+
+ ptvcursor_advance(cursor, 4); // not used fields
+ ptvcursor_advance(cursor, 4); // not used fields
+
+ null_offset = tvb_find_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor) + 1, -1, 0);
+
+ if (null_offset > -1) {
+ col_append_fstr(pinfo->cinfo, COL_INFO, ": %s",
+ tvb_get_stringz_enc(wmem_packet_scope(), ptvcursor_tvbuff(cursor),
+ ptvcursor_current_offset(cursor),
+ NULL, ENC_ASCII));
+ }
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ if (null_offset > -1) {
+ ptvcursor_add(cursor,
+ hf_homeplug_av_st_iotecha_user_message_info,
+ null_offset - ptvcursor_current_offset(cursor),
+ ENC_ASCII);
+ }
+
+ null_offset = tvb_find_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor) + 1, -1, 0);
+
+ if (null_offset > -1) {
+ ptvcursor_add(cursor,
+ hf_homeplug_av_st_iotecha_user_message_details,
+ null_offset - ptvcursor_current_offset(cursor),
+ ENC_ASCII);
+ }
+
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_test_chan_atten_start_rx_req(ptvcursor_t *cursor) {
+
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_test_type, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_num_sound, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_data_ind_addr, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_agc_lock, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_db_agc_val, 1, ENC_NA);
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_test_chan_atten_start_rx_cnf(ptvcursor_t *cursor) {
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_test_status, 1, ENC_NA);
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_test_chan_atten_start_tx_req(ptvcursor_t *cursor) {
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_test_type, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_num_sound, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_data_ind_addr, 6, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_suppress_data, 1, ENC_NA);
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_test_chan_atten_start_tx_cnf(ptvcursor_t *cursor) {
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_test_status, 1, ENC_NA);
+}
+
+static void
+dissect_homeplug_av_st_iotecha_stp_test_chan_atten_data_ind(ptvcursor_t *cursor) {
+ if (!ptvcursor_tree(cursor))
+ return;
+
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_sound_remain, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_ntb_time, 4, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_db_agc_val, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_rsvd1, 3, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_rsvd2, 4, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_num_segments, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_segment, 1, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_num_chan, 2, ENC_NA);
+ ptvcursor_add(cursor, hf_homeplug_av_st_iotecha_chan_start, 2, ENC_NA);
+}
+/* End of ST/IoTecha dissect functions */
+
+
+static void
+dissect_homeplug_av_mme_general(ptvcursor_t *cursor,
+ guint8 homeplug_av_mmver,
+ guint16 homeplug_av_mmtype,
+ packet_info *pinfo) {
+ (void)homeplug_av_mmver;
+ /* Public MMEs */
+ switch ((homeplug_av_mmetypes_general_type)homeplug_av_mmtype)
+ {
+ case HOMEPLUG_AV_MMTYPE_GENERAL_CC_DISCOVER_LIST_CNF:
+ dissect_homeplug_av_cc_disc_list_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_GENERAL_CM_ENCRYPTED_PAYLOAD_IND:
+ dissect_homeplug_av_cm_enc_pld_ind(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_GENERAL_CM_ENCRYPTED_PAYLOAD_RSP:
+ dissect_homeplug_av_cm_enc_pld_rsp(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_GENERAL_CM_SET_KEY_REQ:
+ dissect_homeplug_av_cm_set_key_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_GENERAL_CM_SET_KEY_CNF:
+ dissect_homeplug_av_cm_set_key_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_KEY_REQ:
+ dissect_homeplug_av_cm_get_key_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_GENERAL_CM_GET_KEY_CNF:
+ dissect_homeplug_av_cm_get_key_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_GENERAL_CM_BRG_INFO_CNF:
+ dissect_homeplug_av_get_brg_infos_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_INFO_CNF:
+ dissect_homeplug_av_nw_infos_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_GENERAL_CM_NW_STATS_CNF:
+ dissect_homeplug_av_nw_stats_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_GENERAL_CC_ASSOC_REQ:
+ dissect_homeplug_av_cc_assoc_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_GENERAL_CC_ASSOC_CNF:
+ dissect_homeplug_av_cc_assoc_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_GENERAL_CM_UNASSOCIATED_STA_IND:
+ dissect_homeplug_av_cm_unassociated_sta_ind(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_GENERAL_CC_SET_TEI_MAP_IND:
+ dissect_homeplug_av_cc_set_tei_map_ind(cursor);
+ break;
+ /* HPGP */
+ case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_PARM_REQ:
+ dissect_homeplug_av_gp_cm_slac_parm_req(cursor);
+ break;
+ case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_PARM_CNF:
+ dissect_homeplug_av_gp_cm_slac_parm_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ATTEN_PROFILE_IND:
+ dissect_homeplug_av_gp_cm_atten_profile_ind(cursor);
+ break;
+ case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ATTEN_CHAR_IND:
+ dissect_homeplug_av_gp_cm_atten_char_ind(cursor, pinfo);
+ break;
+ case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_ATTEN_CHAR_RSP:
+ dissect_homeplug_av_gp_cm_atten_char_rsp(cursor);
+ break;
+ case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_START_ATTEN_CHAR_IND:
+ dissect_homeplug_av_gp_cm_start_atten_char_ind(cursor);
+ break;
+ case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_MNBC_SOUND_IND:
+ dissect_homeplug_av_gp_cm_mnbc_sound_ind(cursor);
+ break;
+ case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_VALIDATE_REQ:
+ dissect_homeplug_av_gp_cm_validate_req(cursor);
+ break;
+ case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_VALIDATE_CNF:
+ dissect_homeplug_av_gp_cm_validate_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_MATCH_REQ:
+ dissect_homeplug_av_gp_cm_slac_match_req(cursor);
+ break;
+ case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_MATCH_CNF:
+ dissect_homeplug_av_gp_cm_slac_match_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_USER_DATA_REQ:
+ case HOMEPLUG_AV_GP_MMTYPE_GENERAL_CM_SLAC_USER_DATA_CNF:
+ dissect_homeplug_av_gp_cm_slac_user_data(cursor);
+ break;
+ default:
+ break;
+ };
+}
+
+static void
+dissect_homeplug_av_mme_qualcomm(ptvcursor_t *cursor, guint8 homeplug_av_mmver, guint16 homeplug_av_mmtype) {
+ switch ((homeplug_av_mmetypes_qualcomm_type)homeplug_av_mmtype) {
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_SW_CNF:
+ dissect_homeplug_av_get_sw_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MEM_REQ:
+ dissect_homeplug_av_wr_mem_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MEM_CNF:
+ dissect_homeplug_av_wr_mem_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MEM_REQ:
+ dissect_homeplug_av_rd_mem_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MEM_CNF:
+ dissect_homeplug_av_rd_mem_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_ST_MAC_REQ:
+ dissect_homeplug_av_st_mac_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_ST_MAC_CNF:
+ dissect_homeplug_av_st_mac_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_NVM_CNF:
+ dissect_homeplug_av_get_nvm_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_RS_DEV_CNF:
+ dissect_homeplug_av_rs_dev_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MOD_REQ:
+ dissect_homeplug_av_wr_mod_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MOD_CNF:
+ dissect_homeplug_av_wr_mod_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_WR_MOD_IND:
+ dissect_homeplug_av_wr_mod_ind(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MOD_REQ:
+ dissect_homeplug_av_rd_mod_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_MOD_CNF:
+ dissect_homeplug_av_rd_mod_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_NVM_MOD_REQ:
+ dissect_homeplug_av_mod_nvm_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_NVM_MOD_CNF:
+ dissect_homeplug_av_mod_nvm_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_WD_RPT_REQ:
+ dissect_homeplug_av_wd_rpt_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_WD_RPT_IND:
+ dissect_homeplug_av_wd_rpt_ind(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_LNK_STATS_REQ:
+ dissect_homeplug_av_lnk_stats_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_LNK_STATS_CNF:
+ dissect_homeplug_av_lnk_stats_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_SNIFFER_REQ:
+ dissect_homeplug_av_sniffer_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_SNIFFER_CNF:
+ dissect_homeplug_av_sniffer_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_SNIFFER_IND:
+ dissect_homeplug_av_sniffer_ind(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_NW_INFO_CNF:
+ dissect_homeplug_av_nw_info_cnf(cursor, homeplug_av_mmver);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_CP_RPT_REQ:
+ dissect_homeplug_av_cp_rpt_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_CP_RPT_IND:
+ dissect_homeplug_av_cp_rpt_ind(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_FR_LBK_REQ:
+ dissect_homeplug_av_fr_lbk_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_FR_LBK_CNF:
+ dissect_homeplug_av_fr_lbk_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_LBK_STAT_CNF:
+ dissect_homeplug_av_lbk_stat_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_KEY_REQ:
+ dissect_homeplug_av_set_key_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_KEY_CNF:
+ dissect_homeplug_av_set_key_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_MFG_STRING_CNF:
+ dissect_homeplug_av_mfg_string_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_RD_CBLOCK_CNF:
+ dissect_homeplug_av_rd_cblock_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_SDRAM_REQ:
+ dissect_homeplug_av_set_sdram_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_SET_SDRAM_CNF:
+ dissect_homeplug_av_set_sdram_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_HOST_ACTION_IND:
+ dissect_homeplug_av_host_action_ind(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_HOST_ACTION_RSP:
+ dissect_homeplug_av_host_action_rsp(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_OP_ATTR_REQ:
+ dissect_homeplug_av_op_attr_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_OP_ATTR_CNF:
+ dissect_homeplug_av_op_attr_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_ENET_PHY_REQ:
+ dissect_homeplug_av_get_enet_phy_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_GET_ENET_PHY_CNF:
+ dissect_homeplug_av_get_enet_phy_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_RX_REQ:
+ dissect_homeplug_av_tone_map_rx_req(cursor, homeplug_av_mmver);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_RX_CNF:
+ dissect_homeplug_av_tone_map_rx_cnf(cursor, homeplug_av_mmver);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_TX_REQ:
+ dissect_homeplug_av_tone_map_tx_req(cursor, homeplug_av_mmver);
+ break;
+ case HOMEPLUG_AV_MMTYPE_QUALCOMM_TONE_MAP_TX_CNF:
+ dissect_homeplug_av_tone_map_tx_cnf(cursor, homeplug_av_mmver);
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+dissect_homeplug_av_mme_st_iotecha(ptvcursor_t *cursor,
+ guint8 homeplug_av_mmver,
+ guint16 homeplug_av_mmtype,
+ packet_info *pinfo) {
+ (void)homeplug_av_mmver;
+ /* Parse head of the message */
+ dissect_homeplug_av_st_iotecha_header(cursor);
+ /* Parse the rest */
+ switch ((homeplug_av_mmetypes_st_iotecha_type)homeplug_av_mmtype) {
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_AUTH_SET_NMK_REQ:
+ dissect_homeplug_av_st_iotecha_stp_auth_set_nmk_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_RX_REQ:
+ dissect_homeplug_av_st_iotecha_stp_test_chan_atten_start_rx_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_TX_REQ:
+ dissect_homeplug_av_st_iotecha_stp_test_chan_atten_start_tx_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_RX_CNF:
+ dissect_homeplug_av_st_iotecha_stp_test_chan_atten_start_rx_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_START_TX_CNF:
+ dissect_homeplug_av_st_iotecha_stp_test_chan_atten_start_tx_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_TEST_CHAN_ATTEN_DATA_IND:
+ dissect_homeplug_av_st_iotecha_stp_test_chan_atten_data_ind(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_AUTH_SET_NMK_CNF:
+ /* NOT SURE */
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_FINISH_CNF:
+ /* General message with status byte */
+ dissect_homeplug_av_st_iotecha_status_standard(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_LINK_STATUS_IND:
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_LINK_STATUS_CNF:
+ dissect_homeplug_av_st_iotecha_linkstatus(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_CNF:
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_LOCAL_CNF:
+ dissect_homeplug_av_st_iotecha_discover(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_SET_MAXGAIN_REQ:
+ dissect_homeplug_av_st_iotecha_stp_set_maxgain_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_SET_MAXGAIN_CNF:
+ dissect_homeplug_av_st_iotecha_stp_set_maxgain_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_LIST_CNF:
+ dissect_homeplug_av_st_iotecha_stp_get_tei_list_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_SNAPSHOT_REQ:
+ dissect_homeplug_av_st_iotecha_stp_get_tei_snapshot_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_SNAPSHOT_CNF:
+ dissect_homeplug_av_st_iotecha_stp_get_tei_snapshot_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_BSS_LIST_CNF:
+ dissect_homeplug_av_st_iotecha_stp_get_bss_list_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CHANQUAL_REPORT_REQ:
+ dissect_homeplug_av_st_iotecha_stp_get_chanqual_report_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CHANQUAL_REPORT_CNF:
+ dissect_homeplug_av_st_iotecha_stp_get_chanqual_report_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CHANQUAL_REPORT_IND:
+ dissect_homeplug_av_st_iotecha_stp_get_chanqual_report_ind(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_STAGE_REQ:
+ dissect_homeplug_av_st_iotecha_stp_mfct_update_stage_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_STAGE_CNF:
+ dissect_homeplug_av_st_iotecha_stp_mfct_update_stage_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_UPDATE_FINISH_REQ:
+ dissect_homeplug_av_st_iotecha_stp_mfct_update_finish_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_ITEM_REQ:
+ dissect_homeplug_av_st_iotecha_stp_mfct_get_item_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_ITEM_CNF:
+ dissect_homeplug_av_st_iotecha_stp_mfct_get_item_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_KEYLIST_CNF:
+ dissect_homeplug_av_st_iotecha_stp_mfct_get_keylist_cnf(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_FUP_REQ:
+ dissect_homeplug_av_st_iotecha_stp_fup_req(cursor);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_CPSTATE_IND:
+ dissect_homeplug_av_st_iotecha_stp_cpstate_ind(cursor, pinfo);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_USER_MESSAGE_IND:
+ dissect_homeplug_av_st_iotecha_stp_user_message_ind(cursor, pinfo);
+ break;
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_BSS_LIST_REQ:
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_GET_TEI_LIST_REQ:
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_LINK_STATUS_REQ:
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_LOCAL_REQ:
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_DISCOVER_REQ:
+ case HOMEPLUG_AV_MMTYPE_ST_IOTECHA_STP_MFCT_GET_KEYLIST_REQ:
+ /* Requests only with header go here */
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+dissect_homeplug_av_mme(ptvcursor_t *cursor,
+ guint8 homeplug_av_mmver,
+ guint16 homeplug_av_mmtype,
+ guint32 homeplug_av_oui,
+ packet_info *pinfo)
+{
+ if (!homeplug_av_oui) {
+ dissect_homeplug_av_mme_general(cursor, homeplug_av_mmver, homeplug_av_mmtype, pinfo);
+ } else {
+ switch (homeplug_av_oui) {
+ case HOMEPLUG_AV_OUI_QCA:
+ dissect_homeplug_av_mme_qualcomm(cursor, homeplug_av_mmver, homeplug_av_mmtype);
+ break;
+ case HOMEPLUG_AV_OUI_ST_IOTECHA:
+ dissect_homeplug_av_mme_st_iotecha(cursor, homeplug_av_mmver, homeplug_av_mmtype, pinfo);
+ break;
+ }
+ }
+}
+
+static void
+info_column_filler_initial(guint8 homeplug_av_mmver,
+ guint16 homeplug_av_mmtype,
+ guint32 homeplug_av_oui,
+ packet_info *pinfo) {
+ (void)homeplug_av_mmver;
+
+ /* if packet is vendor specific - display vendor OUI */
+ if (homeplug_av_oui) {
+ col_append_sep_str(pinfo->cinfo, COL_INFO, ", ",
+ val_to_str(homeplug_av_oui, homeplug_av_vendors_oui_vals, "OUI:0x%x"));
+ }
+
+ /* Info depends on type and oui */
+ switch (homeplug_av_oui)
+ {
+ case HOMEPLUG_AV_OUI_ST_IOTECHA:
+ col_append_sep_str(pinfo->cinfo, COL_INFO, ", ",
+ val_to_str_ext(homeplug_av_mmtype,
+ &homeplug_av_mmtype_st_iotecha_vals_ext,
+ "Unknown 0x%x"));
+ break;
+ case HOMEPLUG_AV_OUI_QCA:
+ col_append_sep_str(pinfo->cinfo, COL_INFO, ", ",
+ val_to_str_ext(homeplug_av_mmtype,
+ &homeplug_av_mmtype_qualcomm_vals_ext,
+ "Unknown 0x%x"));
+ break;
+
+ case HOMEPLUG_AV_OUI_NONE:
+ /* if oui is unknown, trying to describe as general MME */
+ col_append_sep_str(pinfo->cinfo, COL_INFO, ", ",
+ val_to_str_ext(homeplug_av_mmtype,
+ &homeplug_av_mmtype_general_vals_ext,
+ "Unknown 0x%x"));
+ break;
+
+ default:
+ break;
+ }
+}
+
+static int
+dissect_homeplug_av(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
+{
+ proto_item *ti;
+ proto_tree *homeplug_av_tree;
+ ptvcursor_t *cursor;
+ guint8 homeplug_av_mmver;
+ guint16 homeplug_av_mmtype;
+ guint32 homeplug_av_oui;
+
+ homeplug_av_oui = 0;
+ ti_vendor = 0;
+
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "HomePlug AV");
+ col_clear(pinfo->cinfo, COL_INFO);
+
+ ti = proto_tree_add_item(tree, proto_homeplug_av, tvb, 0, -1, ENC_NA);
+ homeplug_av_tree = proto_item_add_subtree(ti, ett_homeplug_av);
+
+ cursor = ptvcursor_new(pinfo->pool, homeplug_av_tree, tvb, 0);
+
+ /* Check if we have enough data to process the header */
+ if (check_tvb_length(cursor, HOMEPLUG_AV_MMHDR_LEN) != TVB_LEN_SHORTEST) {
+
+ dissect_homeplug_av_mmhdr(cursor, &homeplug_av_mmver, &homeplug_av_mmtype, &homeplug_av_oui);
+
+ info_column_filler_initial(homeplug_av_mmver, homeplug_av_mmtype, homeplug_av_oui, pinfo);
+
+ dissect_homeplug_av_mme(cursor, homeplug_av_mmver, homeplug_av_mmtype, homeplug_av_oui, pinfo);
+
+ }
+
+ ti_vendor = 0;
+ ptvcursor_free(cursor);
+ return tvb_captured_length(tvb);
+}
+
+void
+proto_register_homeplug_av(void)
+{
+ static hf_register_info hf[] = {
+ { &hf_homeplug_av_reserved,
+ { "Reserved", "homeplug_av.reserved",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* MM Header */
+ { &hf_homeplug_av_mmhdr,
+ { "MAC Management Header", "homeplug_av.mmhdr",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_mmhdr_mmver,
+ { "Version", "homeplug_av.mmhdr.mmver",
+ FT_UINT8, BASE_DEC, VALS(homeplug_av_mmver_vals), HOMEPLUG_AV_MMVER_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_mmhdr_mmtype_general,
+ { "Type", "homeplug_av.mmhdr.mmtype",
+ FT_UINT16, BASE_HEX | BASE_EXT_STRING, &homeplug_av_mmtype_general_vals_ext, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_mmhdr_mmtype_qualcomm,
+ { "Type", "homeplug_av.mmhdr.mmtype.qualcomm",
+ FT_UINT16, BASE_HEX | BASE_EXT_STRING, &homeplug_av_mmtype_qualcomm_vals_ext, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_mmhdr_mmtype_st,
+ { "Type", "homeplug_av.mmhdr.mmtype.st",
+ FT_UINT16, BASE_HEX | BASE_EXT_STRING, &homeplug_av_mmtype_st_iotecha_vals_ext, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_mmhdr_mmtype_lsb,
+ { "LSB", "homeplug_av.mmhdr.mmtype.lsb",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_mmtype_lsb_vals), HOMEPLUG_AV_MMTYPE_LSB_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_mmhdr_mmtype_msb,
+ { "MSB", "homeplug_av.mmhdr.mmtype.msb",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_mmtype_msb_vals), HOMEPLUG_AV_MMTYPE_MSB_MASK, "Reserved", HFILL },
+ },
+ { &hf_homeplug_av_mmhdr_fmi,
+ { "Fragmentation Info", "homeplug_av.mmhdr.fmi",
+ FT_UINT16, BASE_HEX, NULL, 0x0, "Reserved", HFILL },
+ },
+ /* Public MME */
+ { &hf_homeplug_av_public,
+ { "Public MME", "homeplug_av.public",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_public_frag_count,
+ { "Fragment count", "homeplug_av.public.frag_count",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_PUBLIC_FRAG_COUNT_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_public_frag_index,
+ { "Fragment index", "homeplug_av.public.frag_index",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_PUBLIC_FRAG_INDEX_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_public_frag_seqnum,
+ { "Fragment Sequence number", "homeplug_av.public.frag_seqnum",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ /* Frame control fields */
+ { &hf_homeplug_av_fc,
+ { "Frame Control", "homeplug_av.fc",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_fc_del_type,
+ { "Delimiter type", "homeplug_av.fc.del_type",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_fc_del_type_vals), HOMEPLUG_AV_DEL_TYPE_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_fc_access,
+ { "Access network", "homeplug_av.fc.access",
+ FT_UINT8, BASE_HEX, VALS(homeplug_nw_info_access_vals), HOMEPLUG_AV_NW_INFO_ACCESS_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_fc_snid,
+ { "Short network ID", "homeplug_av.fc.snid",
+ FT_UINT8, BASE_HEX, NULL, HOMEPLUG_AV_SNID_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_fc_fccs_av,
+ { "Frame control check sequence", "homeplug_av.fc.fccs_av",
+ FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Common MPDU variant fields */
+ { &hf_homeplug_av_dtei,
+ { "Destination Terminal Equipment Identifier", "homeplug_av.dtei",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_stei,
+ { "Source Terminal Equipment Identifier", "homeplug_av.stei",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lid,
+ { "Link ID", "homeplug_av.lid",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cfs,
+ { "Contention free session", "homeplug_av.cfs",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_CFS_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bdf,
+ { "Beacon detect flag", "homeplug_av.bdf",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_BDF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_hp10df,
+ { "Homeplug AV version 1.0", "homeplug_av.hp10df",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_HP10DF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_hp11df,
+ { "Homeplug AV version 1.1", "homeplug_av.hp11df",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_HP11DF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_svn,
+ { "Sack version number", "homeplug_av.svn",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_SVN_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rrtf,
+ { "Request reverse transmission flag", "homeplug_av.rrtf",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_RRTF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_fl_av,
+ { "Frame length", "homeplug_av.fl_av",
+ FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_FL_AV_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_ppb,
+ { "Pending PHY blocks", "homeplug_av.ppb",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_mfs_rsp_data,
+ { "Data MAC Frame Stream Response", "homeplug_av.sack.mfs_rsp_data",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_RSP_DATA_MASK << 4, NULL, HFILL }
+ },
+ { &hf_homeplug_av_mfs_rsp_mgmt,
+ { "Management MAC Frame Stream Response", "homeplug_av.sack.mfs_rsp_mgmt",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_RSP_MGMT_MASK << 4, NULL, HFILL }
+ },
+ /* Frame Control */
+ { &hf_homeplug_av_sof,
+ { "Start of Frame Variant Fields", "homeplug_av.sof",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sof_peks,
+ { "Payload Encryption Key Select", "homeplug_av.sof.peks",
+ FT_UINT8, BASE_HEX | BASE_EXT_STRING, &homeplug_av_peks_vals_ext, HOMEPLUG_AV_SOF_PEKS_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sof_ble,
+ { "Bit loading estimate", "homeplug_av.sof.ble",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sof_pbsz,
+ { "PHY block size", "homeplug_av.sof.pbsz",
+ FT_BOOLEAN, 8, TFS(&homeplug_av_phy_block_size_vals), HOMEPLUG_AV_PBSZ_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sof_num_sym,
+ { "Number of symbols", "homeplug_av.sof.num_sym",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_NUM_SYM_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sof_tmi_av,
+ { "Tonemap index", "homeplug_av.sof.tmi_av",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_TMI_AV_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sof_mpdu_cnt,
+ { "MPDU count", "homeplug_av.sof.mpdu_cnt",
+ FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_SOF_MPDU_CNT_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sof_burst_cnt,
+ { "Burst count", "homeplug_av.sof.burst_cnt",
+ FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_BURST_CNT_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sof_bbf,
+ { "Bidirectional Burst", "homeplug_av.sof.bbf",
+ FT_BOOLEAN, 8, TFS(&homeplug_av_bbf_vals), HOMEPLUG_AV_BBF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sof_mrtfl,
+ { "Max Reverse Transmission Frame Length", "homeplug_av.sof.mrtfl",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_MRTLF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sof_dccpcf,
+ { "Different CP PHY clock", "homeplug_av.sof.dccpcf",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_DCCPCF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sof_mcf,
+ { "Multicast", "homeplug_av.sof.mcf",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_MCF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sof_mnbf,
+ { "Multinetwork broadcast", "homeplug_av.sof.mnbf",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_MNBF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sof_rsr,
+ { "Request SACK retransmission", "homeplug_av.sof.rsr",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_RSR_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sof_clst,
+ { "Convergence layer SAP type", "homeplug_av.sof.clst",
+ FT_BOOLEAN, 8, TFS(&homeplug_av_clst_vals), HOMEPLUG_AV_CLST_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sof_mfs_cmd_mgmt,
+ { "Management MAC Frame Stream Command", "homeplug_av.sof.mfs_cmd_mgmt",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_MFS_MGMT_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sof_mfs_cmd_data,
+ { "Data MAC Frame Stream Command", "homeplug_av.sof.mfs_data_mgmt",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_MFS_DATA_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sof_mfs_rsp_mgmt,
+ { "Management MAC Frame Stream Response", "homeplug_av.sof.mfs_rsp_mgmt",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_SOF_RSP_MGMT_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sof_mfs_rsp_data,
+ { "Data MAC Frame Stream Response", "homeplug_av.sof.mfs_rsp_data",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_SOF_RSP_DATA_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sof_bm_sack,
+ { "Bit Map SACK", "homeplug_av.sof.bm_sack",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_BM_SACK_MASK, NULL, HFILL }
+ },
+ /* Selective Acknowledgement */
+ { &hf_homeplug_av_sack,
+ { "Selective Acknowledgment Variant Fields", "homeplug_av.sack",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}
+ },
+ /* Request to Send/Clear to Send */
+ { &hf_homeplug_av_rtscts,
+ { "Request to Send/Clear to Send Variant Fields", "homeplug_av.rtscts",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rtscts_rtsf,
+ { "RTS Flag", "homeplug_av.rtscts.rtsf",
+ FT_BOOLEAN, 8, TFS(&homeplug_av_rtsf_vals), HOMEPLUG_AV_RTSF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rtscts_igf,
+ { "Immediate Grant Flag", "homeplug_av.rtscts.igf",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_IGF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rtscts_mnbf,
+ { "Multinetwork Broadcast Flag", "homeplug_av.rtscts.mnbf",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_RTSCTS_MNBF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rtscts_mcf,
+ { "Multicast Flag", "homeplug_av.rtscts.mcf",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_RTSCTS_MCF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rtscts_dur,
+ { "Duration", "homeplug_av.rtscts.dur",
+ FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_DUR_MASK, NULL, HFILL }
+ },
+ /* Sound */
+ { &hf_homeplug_av_sound,
+ { "Sound Variant Fields", "homeplug_av.sound",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sound_pbsz,
+ { "PHY Block Size", "homeplug_av.sound.pbsz",
+ FT_BOOLEAN, 8, TFS(&homeplug_av_phy_block_size_vals), HOMEPLUG_AV_SOUND_PBSZ_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sound_bdf,
+ { "Beacon Detect Flag", "homeplug_av.sound.bdf",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_SOUND_BDF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sound_saf,
+ { "Sound ACK Flag", "homeplug_av.sound.saf",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_SAF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sound_scf,
+ { "Sound Complete Flag", "homeplug_av.sound.scf",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_SCF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sound_req_tm,
+ { "Max Tone Maps Requested", "homeplug_av.sound.req_tm",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_REQ_TM_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sound_mpdu_cnt,
+ { "MPDU Count", "homeplug_av.sound.mpdu_cnt",
+ FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_SOUND_MPDU_CNT_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sound_src,
+ { "Sound Reason Code", "homeplug_av.sound.src",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sound_add_req_tm,
+ { "Additional Tone Maps Requested", "homeplug_av.sound.add_req_tm",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_ADD_REQ_TM_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sound_max_pb_sym,
+ { "Max PBs per Symbol", "homeplug_av.sound.max_pb_sym",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_MAX_PB_SYM_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sound_ecsf,
+ { "Extended Carriers Support Flag", "homeplug_av.sound.ecsf",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_ECSF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sound_ecuf,
+ { "Extended Carriers Used Flag", "homeplug_av.sound.hf_homeplug_av_sound_ecuf",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_ECUF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sound_ems,
+ { "Extended Modulation Support", "homeplug_av.sound.ems",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_ems_vals), HOMEPLUG_AV_EMS_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sound_esgisf,
+ { "Extended Smaller Guard Interval Support Flag", "homeplug_av.sound.esgisf",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_ESGISF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sound_elgisf,
+ { "Extended Larger Guard Interval Support Flag", "homeplug_av.sound.elgisf",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_ELGISF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sound_efrs,
+ { "Extended FEC Rate Support", "homeplug_av.sound.efrs",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_efrs_vals), HOMEPLUG_AV_EFRS_MASK, NULL, HFILL }
+ },
+ /* Reverse Start of Frame */
+ { &hf_homeplug_av_rsof,
+ { "Reverse Start of Frame Variant Fields", "homeplug_av.rsof",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rsof_fl,
+ { "Reverse SOF Frame Length", "homeplug_av.rsof.fl",
+ FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_RSOF_FL_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rsof_tmi,
+ { "Tone Map Index", "homeplug_av.rsof.tmi",
+ FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_RSOF_TMI_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rsof_pbsz,
+ { "PHY Block Size", "homeplug_av.rsof.pbsz",
+ FT_BOOLEAN, 16, TFS(&homeplug_av_phy_block_size_vals), HOMEPLUG_AV_RSOF_PBSZ_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rsof_num_sym,
+ { "Number of Symbols", "homeplug_av.rsof.num_sym",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_RSOF_NUM_SYM_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rsof_mfs_cmd_mgmt,
+ { "Management MAC Frame Stream Command", "homeplug_av.rsof.mfs_cmd_mgmt",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_MFS_MGMT_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rsof_mfs_cmd_data,
+ { "Data MAC Frame Stream Command", "homeplug_av.rsof.mfs_cmd_data",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_MFS_DATA_MASK, NULL, HFILL }
+ },
+ /* Beacon body */
+ { &hf_homeplug_av_bcn,
+ { "Beacon Variant Fields", "homeplug_av.bcn",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_bts,
+ { "Beacon timestamp", "homeplug_av.bcn.bts",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_bto_0,
+ { "Beacon transmission offset 0", "homeplug_av.bcn.bto_0",
+ FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_bto_1,
+ { "Beacon transmission offset 1", "homeplug_av.bcn.bto_1",
+ FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_bto_2,
+ { "Beacon transmission offset 2", "homeplug_av.bcn.bto_2",
+ FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_bto_3,
+ { "Beacon transmission offset 3", "homeplug_av.bcn.bto_3",
+ FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_payload,
+ { "Beacon MPDU payload", "homeplug_av.bcn.payload",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_nid,
+ { "Network ID", "homeplug_av.bcn.nid",
+ FT_UINT56, BASE_HEX, NULL, HOMEPLUG_AV_BCN_NID_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_hm,
+ { "Hybrid Mode", "homeplug_av.bcn.hm",
+ FT_UINT56, BASE_HEX | BASE_VAL64_STRING, VALS64(homeplug_av_bcn_hm_vals), HOMEPLUG_AV_HM_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_stei,
+ { "Source Terminal Equipment ID", "homeplug_av.bcn.stei",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_type,
+ { "Beacon type", "homeplug_av.bcn.type",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_bcn_type_vals), HOMEPLUG_AV_BCN_TYPE_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_ncnr,
+ { "Non-coordinating networks reported", "homeplug_av.bcn.ncnr",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_NCNR_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_npsm,
+ { "Network Power Save Mode", "homeplug_av.bcn.npsm",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_NPSM_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_num_slots,
+ { "Number of Beacon Slots", "homeplug_av.bcn.num_slots",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_bcn_slot_vals), HOMEPLUG_AV_NUM_SLOTS_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_slot_use,
+ { "Beacon Slot Usage (bitmapped)", "homeplug_av.bcn.slot_usage",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_slot_id,
+ { "Beacon Slot ID", "homeplug_av.bcn.slot_id",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_bcn_slot_vals), HOMEPLUG_AV_SLOT_ID_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_aclss,
+ { "AC Line Synchronization Status", "homeplug_av.bcn.aclss",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_ACLSS_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_hoip,
+ { "Hand-Off in progress", "homeplug_av.bcn.hoip",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_HOIP_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_rtsbf,
+ { "RTS Broadcast Flag", "homeplug_av.bcn.rtsbf",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_RTSBF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_nm,
+ { "Network Mode", "homeplug_av.bcn.nm",
+ FT_UINT8, BASE_DEC, VALS(homeplug_av_bcn_nm_vals), HOMEPLUG_AV_NM_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_cco_cap,
+ { "CCo Capabilities", "homeplug_av.bcn.cco_cap",
+ FT_UINT8, BASE_DEC, VALS(homeplug_av_bcn_cco_cap_vals), HOMEPLUG_AV_CCO_CAP_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_rsf,
+ { "Reusable SNID?", "homeplug_av.bcn.rsf",
+ FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_RSF_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_plevel,
+ { "Proxy level", "homeplug_av.bcn.plevel",
+ FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_PLEVEL_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_bentries,
+ { "Beacon entries and padding", "homeplug_av.bcn.bentries",
+ FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_bcn_bpcs,
+ { "Beacon payload check sequence", "homeplug_av.bcn.bpcs",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ /* Central Coordination Discovery List Confirmation */
+ { &hf_homeplug_av_cc_disc_list_cnf,
+ { "Central Coordination Discovery List Confirmation", "homeplug_av.cc_disc_list_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Station informations */
+ { &hf_homeplug_av_cc_disc_list_sta_cnt,
+ { "Station count", "homeplug_av.cc_disc_list_cnf.sta_cnt",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_sta_info,
+ { "Station information", "homeplug_av.cc_disc_list_cnf.sta_info",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_sta_info_mac,
+ { "MAC address", "homeplug_av.cc_disc_list_cnf.sta_info.mac",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_sta_info_tei,
+ { "Terminal Equipment Identifier", "homeplug_av.cc_disc_list_cnf.sta_info.tei",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_sta_info_same_net,
+ { "Network type", "homeplug_av.cc_disc_list_cnf.sta_info.same_net",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_cc_sta_net_type_vals), HOMEPLUG_AV_CC_STA_NET_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_sta_info_sig_level,
+ { "Signal level", "homeplug_av.cc_disc_list_cnf.sta_info.sig_level",
+ FT_UINT8, BASE_HEX | BASE_EXT_STRING, &homeplug_av_sig_level_vals_ext, 0x00, "Reserved", HFILL }
+ },
+ { &hf_homeplug_av_cc_sta_info_avg_ble,
+ { "Average BLE", "homeplug_av.cc_disc_list_cnf.sta_info.avg_ble",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ /* Network infos */
+ { &hf_homeplug_av_cc_disc_list_net_cnt,
+ { "Network count", "homeplug_av.cc_disc_list_cnf.net_cnt",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_net_info,
+ { "Network information", "homeplug_av.cc_disc_list_cnf.net_info",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_net_info_hyb_mode,
+ { "Hybrid mode", "homeplug_av.cc_disc_list_cnf.net_info.hyb_mode",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_net_info_bcn_slots,
+ { "Beacon slots", "homeplug_av.cc_disc_list_cnf.net_info.bcn_slots",
+ FT_UINT8, BASE_DEC, NULL, 0x08, "Reserved", HFILL }
+ },
+ { &hf_homeplug_av_cc_net_info_cco_sts,
+ { "Coordinating status", "homeplug_av.cc_disc_list_cnf.net_info.cco_status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_cco_status_vals), HOMEPLUG_AV_CCO_STATUS_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_net_info_bcn_ofs,
+ { "Beacon offset", "homeplug_av.cc_disc_list_cnf.net_info.bcn_ofs",
+ FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ /* Shared encrypted related fields */
+ { &hf_homeplug_av_nw_info_peks,
+ { "Payload Encryption Key Select", "homeplug_av.nw_info.peks",
+ FT_UINT8, BASE_HEX | BASE_EXT_STRING, &homeplug_av_peks_vals_ext, HOMEPLUG_AV_PEKS_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_nw_info_pid,
+ { "Protocol ID", "homeplug_av.nw_info.pid",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_pid_vals), HOMEPLUG_AV_PID_MASK, "Reserved", HFILL }
+ },
+ { &hf_homeplug_av_nw_info_prn,
+ { "Protocol run number", "homeplug_av.nw_info.prn",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_nw_info_pmn,
+ { "Protocol message number", "homeplug_av.nw_info.pmn",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_nw_info_my_nonce,
+ { "My nonce", "homeplug_av.nw_info.my_nonce",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_nw_info_your_nonce,
+ { "Your nonce", "homeplug_av.nw_info.your_nonce",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_nw_info_cco_cap,
+ { "CCo capabilities", "homeplug_av.nw_info.cco_cap",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_nw_info_role_vals), HOMEPLUG_AV_NW_INFO_ROLE_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_nw_info_key_type,
+ { "Key type", "homeplug_av.nw_info.key_type",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_key_type_vals), HOMEPLUG_AV_KEY_TYPE_MASK, NULL, HFILL }
+ },
+ /* Encrypted Payload Indicate */
+ { &hf_homeplug_av_cm_enc_pld_ind,
+ { "Encrypted Payload Indicate", "homeplug_av.cm_enc_pld_ind",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cm_enc_pld_ind_avlns,
+ { "AVLN status", "homeplug_av.cm_enc_pld_ind.avlns",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_avln_status_vals), HOMEPLUG_AV_AVLN_STATUS_MASK, "Reserved", HFILL }
+ },
+ { &hf_homeplug_av_cm_enc_pld_ind_iv,
+ { "Initialization vector", "homeplug_av.cm_enc_pld_ind.iv",
+ FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cm_enc_pld_ind_uuid,
+ { "UUID", "homeplug_av.cm_enc_pld_ind.uuid",
+ FT_GUID, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cm_enc_pld_ind_len,
+ { "Length", "homeplug_av.cm_enc_pld_ind.len",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cm_enc_pld_ind_pld,
+ { "Encrypted payload", "homeplug_av.cm_enc_pld_ind.pld",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Encrypted Payload Response */
+ { &hf_homeplug_av_cm_enc_pld_rsp,
+ { "Encrypted Payload Response", "homeplug_av.cm_enc_pld_rsp",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cm_enc_pld_rsp_result,
+ { "Result", "homeplug_av.cm_enc_pld_rsp.result",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
+ },
+ /* Set Key Request */
+ { &hf_homeplug_av_cm_set_key_req,
+ { "Set Key Request", "homeplug_av.cm_set_key_req",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cm_set_key_req_nw_key,
+ { "New Key", "homeplug_av.cm_set_key_req.nw_key",
+ FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Set Key Confirmation */
+ { &hf_homeplug_av_cm_set_key_cnf,
+ { "Set Key Confirmation", "homeplug_av.cm_set_key_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cm_set_key_cnf_result,
+ { "Result", "homeplug_av.cm_set_key_cnf.result",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
+ },
+ /* Get Key Request */
+ { &hf_homeplug_av_cm_get_key_req,
+ { "Get Key request", "homeplug_av.cm_get_key_req",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cm_get_key_req_type,
+ { "Request type", "homeplug_av.cm_get_key_req.type",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_req_type_vals), HOMEPLUG_AV_REQ_TYPE_MASK, "Reserved", HFILL }
+ },
+ { &hf_homeplug_av_cm_get_key_req_has_key,
+ { "Hash key", "homeplug_av.cm_get_key_req.hash_key",
+ FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Get Key Confirmation */
+ { &hf_homeplug_av_cm_get_key_cnf,
+ { "Get Key Confirmation", "homeplug_av.cm_get_key_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cm_get_key_cnf_result,
+ { "Result", "homeplug_av.cm_get_key_cnf.result",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_key_result_vals), HOMEPLUG_AV_KEY_RESULT_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cm_get_key_cnf_rtype,
+ { "Requested key type", "homeplug_av.cm_get_key_cnf.rtype",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_key_type_vals), HOMEPLUG_AV_KEY_TYPE_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cm_get_key_cnf_key,
+ { "Encryption/Hash key", "homeplug_av.cm_get_key_cnf.key",
+ FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Get Bridge Informations Confirmation */
+ { &hf_homeplug_av_brg_infos_cnf,
+ { "Get Bridge Informations Confirmation", "homeplug_av.brg_infos_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_brg_infos_cnf_brd,
+ { "Bridging", "homeplug_av.brg_infos_cnf.brd",
+ FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_brg_infos_cnf_btei,
+ { "Bridge Terminal Equipment Identifier", "homeplug_av.brg_infos_cnf.btei",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_brg_infos_cnf_num_stas,
+ { "Number of stations", "homeplug_av.brg_infos_cnf.num_stas",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_brg_infos_cnf_mac,
+ { "Bridged Destination Address", "homeplug_av.brg_infos_cnf.mac",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Get Network Informations Confirmation */
+ { &hf_homeplug_av_cm_nw_infos_cnf,
+ { "Get Network Informations Confirmation", "homeplug_av.nw_infos_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Get Network Statistics Confirmation */
+ { &hf_homeplug_av_nw_stats_cnf,
+ { "Get Network Statistics Confirmation", "homeplug_av.nw_stats_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Vendor Specific */
+ { &hf_homeplug_av_vendor,
+ { "Vendor MME", "homeplug_av.vendor",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_vendor_oui,
+ { "OUI", "homeplug_av.vendor.oui",
+ FT_UINT24, BASE_HEX, VALS(homeplug_av_vendors_oui_vals), 0x0, NULL, HFILL }
+ },
+ /* Get Device/SW Version */
+ { &hf_homeplug_av_get_sw_cnf,
+ { "Get Device/SW Version", "homeplug_av.get_sw_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_get_sw_cnf_status,
+ { "Status", "homeplug_av.get_sw_cnf.status",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_get_sw_cnf_dev_id,
+ { "Device ID", "homeplug_av.get_sw_cnf.dev_id",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_dev_id_vals), HOMEPLUG_AV_DEV_ID_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_get_sw_cnf_ver_len,
+ { "Version length", "homeplug_av.get_sw_cnf.ver_len",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_get_sw_cnf_ver_str,
+ { "Version", "homeplug_av.get_sw_cnf.ver_str",
+ FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_get_sw_cnf_upg,
+ { "Upgradable", "homeplug_av.get_sw_cnf.upg",
+ FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Write MAC Memory Request */
+ { &hf_homeplug_av_wr_mem_req,
+ { "Write MAC Memory Request", "homeplug_av.wr_mem_req",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_mem_addr,
+ { "Address", "homeplug_av.mem.addr",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_mem_len_32bits,
+ { "Length", "homeplug_av.mem.len_32bits",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ /* Write MAC Memory Confirmation */
+ { &hf_homeplug_av_wr_mem_cnf,
+ { "Write MAC Memory Confirmation", "homeplug_av.wr_mem_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Read MAC Memory Request */
+ { &hf_homeplug_av_rd_mem_req,
+ { "Read MAC Memory Request", "homeplug_av.rd_mem_req",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rd_mem_cnf,
+ { "Read MAC Memory Confirmation", "homeplug_av.rd_mem_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Start MAC Request */
+ { &hf_homeplug_av_st_mac_req,
+ { "Start MAC Request", "homeplug_av.st_mac_req",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_mac_req_img_load,
+ { "Image Load Starting Address", "homeplug_av.st_mac_req.img_load",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_mac_req_img_len,
+ { "Image Length", "homeplug_av.st_mac_req.img_len",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_mac_req_img_chksum,
+ { "Image Checksum", "homeplug_av.st_mac_req.img_chksum",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_mac_req_img_start,
+ { "Image Starting Address", "homeplug_av.st_mac_req.img_start",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ /* Start MAC Confirmation */
+ { &hf_homeplug_av_st_mac_cnf,
+ { "Start MAC Confirmation", "homeplug_av.st_mac_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_mac_cnf_status,
+ { "Module ID", "homeplug_av.st_mac_cnf.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_st_mac_status_vals), 0x0, NULL, HFILL }
+ },
+ /* Get NVM Parameters Confirmation */
+ { &hf_homeplug_av_get_nvm_cnf,
+ { "Get NVM Parameters Confirmation", "homeplug_av.get_nvm_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_get_nvm_cnf_status,
+ { "Status", "homeplug_av.get_nvm_cnf.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_get_nvm_status_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_get_nvm_cnf_nvm_type,
+ { "NVM Type", "homeplug_av.get_nvm_cnf.nvm_type",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_get_nvm_cnf_nvm_page,
+ { "NVM Page Size", "homeplug_av.get_nvm_cnf.nvm_page",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_get_nvm_cnf_nvm_block,
+ { "NVM Block Size", "homeplug_av.get_nvm_cnf.nvm_block",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_get_nvm_cnf_nvm_size,
+ { "NVM Memory Size", "homeplug_av.get_nvm_cnf.nvm_size",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ /* Reset Device Confirmation */
+ { &hf_homeplug_av_rs_dev_cnf,
+ { "Reset Device Confirmation", "homeplug_av.rs_dev_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rs_dev_cnf_status,
+ { "Status", "homeplug_av.rs_dev_cnf.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_rs_dev_status_vals), 0x0, NULL, HFILL }
+ },
+ /* Shared memory related fields */
+ { &hf_homeplug_av_mem_len_16bits,
+ { "Length", "homeplug_av.mem.len_16bits",
+ FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_mem_offset,
+ { "Offset", "homeplug_av.mem.offset",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_mem_checksum,
+ { "Checksum", "homeplug_av.mem.checksum",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_mem_data,
+ { "Data", "homeplug_av.mem.data",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_mem_status,
+ { "Status", "homeplug_av.mem.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_wr_rd_mem_status_vals), 0x0, NULL, HFILL }
+ },
+ /* Write Module Data Request */
+ { &hf_homeplug_av_wr_mod_req,
+ { "Write Module Data Request", "homeplug_av.wr_mod_req",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Write Module Data Confirmation */
+ { &hf_homeplug_av_wr_mod_cnf,
+ { "Write Module Data Confirmation", "homeplug_av.wr_mod_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_wr_mod_cnf_status,
+ { "Status", "homeplug_av.wr_mod_cnf.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_wr_rd_mod_cnf_status_vals), 0x0, NULL, HFILL }
+ },
+ /* Write Module Data Indicate */
+ { &hf_homeplug_av_wr_mod_ind,
+ { "Write Module Data Indicate", "homeplug_av.wr_mod_ind",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_wr_mod_ind_status,
+ { "Status", "homeplug_av.wr_mod_ind.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_wr_mod_ind_status_vals), 0x0, NULL, HFILL }
+ },
+ /* Read Module Data Request */
+ { &hf_homeplug_av_rd_mod_req,
+ { "Read Module Data Request", "homeplug_av.rd_mod_req",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Read Module Data Confirmation */
+ { &hf_homeplug_av_rd_mod_cnf,
+ { "Read Module Data Confirmation", "homeplug_av.rd_mod_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rd_mod_cnf_status,
+ { "Status", "homeplug_av.rd_mod_cnf.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_wr_rd_mod_cnf_status_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_mac_module_id,
+ { "Module ID", "homeplug_av.module_id",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_mac_module_id_vals), 0x0, NULL, HFILL }
+ },
+ /* Write Module Data to NVM Request */
+ { &hf_homeplug_av_mod_nvm_req,
+ { "Write Module Data to NVM Request", "homeplug_av.mod_nvm_req",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Write Module Data to NVM Confirmation */
+ { &hf_homeplug_av_mod_nvm_cnf,
+ { "Write Module Data to NVM Confirmation", "homeplug_av.mod_nvm_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_mod_nvm_cnf_status,
+ { "Status", "homeplug_av.mod_nvm_cnf.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_mod_nvm_status_vals), 0x0, NULL, HFILL }
+ },
+ /* Get Watchdog Report Request */
+ { &hf_homeplug_av_wd_rpt_req,
+ { "Get Watchdog Report Request", "homeplug_av.wd_rpt_req",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_wd_rpt_req_session_id,
+ { "Session ID", "homeplug_av.wd_rpt_req.session_id",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_wd_rpt_req_clr,
+ { "Clear flag", "homeplug_av.wd_rpt_req.clr",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_rpt_clr_vals), HOMEPLUG_AV_RPT_CLR_MASK, "Unknown", HFILL }
+ },
+ /* Get Watchdog Report Indicate */
+ { &hf_homeplug_av_wd_rpt_ind,
+ { "Get Watchdog Report Indicate", "homeplug_av.wd_rpt_ind",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_wd_rpt_ind_status,
+ { "Status", "homeplug_av.wd_rpt_ind.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, "Unknown", HFILL }
+ },
+ { &hf_homeplug_av_wd_rpt_ind_session_id,
+ { "Session ID", "homeplug_av.wd_rpt_ind.session_id",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_wd_rpt_ind_num_parts,
+ { "Number of parts", "homeplug_av.wd_rpt_ind.num_parts",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_wd_rpt_ind_curr_part,
+ { "Current Part", "homeplug_av.wd_rpt_ind.curr_part",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_wd_rpt_ind_rdata_len,
+ { "Report Data Length", "homeplug_av.wd_rpt_ind.rdata_len",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_wd_rpt_ind_rdata_ofs,
+ { "Report Data Offset", "homeplug_av.wd_rpt_ind.rdata_offset",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_wd_rpt_ind_rdata,
+ { "Report Data", "homeplug_av.wd_rpt_ind.rdata",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Link Statistics Request */
+ { &hf_homeplug_av_lnk_stats_req,
+ { "Link Statistics Request", "homeplug_av.lnk_stats_req",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_req_mcontrol,
+ { "Control", "homeplug_av.lnk_stats_req.mcontrol",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_stats_mctrl_vals), HOMEPLUG_AV_LNK_STATS_MCTL_MASK, "Unknown", HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_req_dir,
+ { "Direction", "homeplug_av.lnk_stats_req.dir",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_stats_dir_vals), HOMEPLUG_AV_LNK_STATS_DIR_MASK, "Unknown", HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_req_lid,
+ { "Link ID", "homeplug_av.lnk_stats_req.lid",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_stats_lid_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_req_macaddr,
+ { "Peer Node", "homeplug_av.lnk_stats_req.macaddr",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Link Statistics Confirmation */
+ { &hf_homeplug_av_lnk_stats_cnf,
+ { "Link Statistics Confirmation", "homeplug_av.lnk_stats_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_cnf_status,
+ { "Status", "homeplug_av.lnk_stats_cnf.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_status_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_cnf_dir,
+ { "Direction", "homeplug_av.lnk_stats_cnf.dir",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_stats_dir_vals), HOMEPLUG_AV_LNK_STATS_DIR_MASK, "Unknown", HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_cnf_lid,
+ { "Link ID", "homeplug_av.lnk_stats_cnf.lid",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_stats_lid_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_cnf_tei,
+ { "TEI", "homeplug_av.lnk_stats_cnf.tei",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_cnf_lstats,
+ { "Link statistics", "homeplug_av.lnk_stats_cnf.lstats",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Link statistics members */
+ { &hf_homeplug_av_lnk_stats_tx,
+ { "Tx link statistics", "homeplug_av.lnk_stats.tx",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_tx_mpdu_ack,
+ { "Number of MPDUs Transmitted and Acknowledged", "homeplug_av.lnk_stats.tx.mpdu_ack",
+ FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_tx_mpdu_col,
+ { "Number of MPDUs Transmitted and Collided", "homeplug_av.lnk_stats.tx.mpdu_col",
+ FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_tx_mpdu_fai,
+ { "Number of MPDUs Transmitted and Failed", "homeplug_av.lnk_stats.tx.mpdu_fail",
+ FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_tx_pbs_pass,
+ { "Number of PB Transmitted Successfully", "homeplug_av.lnk_stats.tx.pbs_pass",
+ FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_tx_pbs_fail,
+ { "Number of PB Transmitted Unsuccessfully", "homeplug_av.lnk_stats.tx.pbs_fail",
+ FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_rx,
+ { "Rx link statistics", "homeplug_av.lnk_stats.rx",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_rx_mpdu_ack,
+ { "Number of MPDUs Received and Acknowledged", "homeplug_av.lnk_stats.rx.mdpu_ack",
+ FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_rx_mpdu_fai,
+ { "Number of MPDUs Received and Failed", "homeplug_av.lnk_stats.rx.mdpu_fail",
+ FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_rx_pbs_pass,
+ { "Number of PB Received Successfully", "homeplug_av.lnk_stats.rx.pbs_pass",
+ FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_rx_pbs_fail,
+ { "Number of PB Received Unsuccessfully", "homeplug_av.lnk_stats.rx.pbs_fail",
+ FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_rx_tb_pass,
+ { "Sum of Turbo Bit Error over successfully received PBs", "homeplug_av.lnk_stats.rx.tb_pass",
+ FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_rx_tb_fail,
+ { "Sum of Turbo Bit Error over unsuccessfully received PBs", "homeplug_av.lnk_stats.rx.tb_fail",
+ FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lnk_stats_rx_num_int,
+ { "Number of Tone Map Intervals", "homeplug_av.lnk_stats.rx.num_int",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rx_inv_stats,
+ { "Rx Interval Statistics", "homeplug_av.lnk_stats.rx.inv",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rx_inv_phy_rate,
+ { "Rx Phy Rate for Tone Map Interval 0", "homeplug_av.lnk_stats.rx.inv.phy_rate",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rx_inv_pbs_pass,
+ { "Number of PB Received Successfully", "homeplug_av.lnk_stats.rx.inv.pbs_pass",
+ FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rx_inv_pbs_fail,
+ { "Number of PB Received Unsuccessfully", "homeplug_av.lnk_stats.rx.inv.pbs_fail",
+ FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rx_inv_tb_pass,
+ { "Sum of the Turbo Bit Error over all PBs received successfully", "homeplug_av.lnk_stats.rx.inv.tb_pass",
+ FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rx_inv_tb_fail,
+ { "Sum of the Turbo Bit Error over all PBs received unsuccessfully", "homeplug_av.lnk_stats.rx.inv.tb_fail",
+ FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ /* Sniffer Request */
+ { &hf_homeplug_av_sniffer_req,
+ { "Sniffer Request", "homeplug_av.sniffer_req",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sniffer_req_ctrl,
+ { "Sniffer Control", "homeplug_av.sniffer_req.ctrl",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_sniffer_ctrl_vals), HOMEPLUG_AV_SNIFFER_CTRL_MASK, NULL, HFILL }
+ },
+ /* Sniffer Confirmation */
+ { &hf_homeplug_av_sniffer_cnf,
+ { "Sniffer Confirmation", "homeplug_av.sniffer_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sniffer_cnf_status,
+ { "Status", "homeplug_av.sniffer_cnf.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_sniffer_status_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sniffer_cnf_state,
+ { "State", "homeplug_av.sniffer_cnf.state",
+ FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sniffer_cnf_da,
+ { "Destination address", "homeplug_av.sniffer_cnf.da",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Sniffer Indicate */
+ { &hf_homeplug_av_sniffer_ind,
+ { "Sniffer Indicate", "homeplug_av.sniffer_ind",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sniffer_ind_type,
+ { "Sniffer Type", "homeplug_av.sniffer_ind.type",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_sniffer_type_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sniffer_ind_data,
+ { "Sniffer Data", "homeplug_av.sniffer_ind.data",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sniffer_data_dir,
+ { "Direction", "homeplug_av.sniffer_ind.data.dir",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_lnk_stats_dir_vals), HOMEPLUG_AV_LNK_STATS_DIR_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sniffer_data_systime,
+ { "System time", "homeplug_av.sniffer_ind.data.systime",
+ FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_sniffer_data_bc_time,
+ { "Beacon time", "homeplug_av.sniffer_ind.data.bc_time",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ /* Network Info Confirmation */
+ { &hf_homeplug_av_nw_info_cnf,
+ { "Network Info Confirmation", "homeplug_av.nw_info_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_nw_info_net_info,
+ { "Networks informations", "homeplug_av.nw_info_cnf.net_info",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_nw_info_num_avlns,
+ { "Number of AV Logical Networks", "homeplug_av.nw_info.num_avlns",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_nw_info_nid,
+ { "Network ID", "homeplug_av.nw_info.nid",
+ FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_nw_info_snid,
+ { "Short Network ID", "homeplug_av.nw_info.snid",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_nw_info_tei,
+ { "Terminal Equipment Identifier", "homeplug_av.nw_info.tei",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_nw_info_sta_role,
+ { "Station Role", "homeplug_av.nw_info.sta_role",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_nw_info_role_vals), HOMEPLUG_AV_NW_INFO_ROLE_MASK, "Reserved", HFILL }
+ },
+ { &hf_homeplug_av_nw_info_cco_mac,
+ { "CCo MAC Address", "homeplug_av.nw_info_cnf.cco_mac",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_nw_info_cco_tei,
+ { "CCo Terminal Equipment Identifier", "homeplug_av.nw_info_cnf.cco_tei",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_nw_info_num_stas,
+ { "Number of AV Stations", "homeplug_av.nw_info_cnf.num_stas",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_nw_info_access,
+ { "Access network", "homeplug_av.nw_info_cnf.access",
+ FT_UINT8, BASE_HEX, VALS(homeplug_nw_info_access_vals), HOMEPLUG_AV_NW_INFO_NID_MASK, "Reserved", HFILL }
+ },
+ { &hf_homeplug_av_nw_info_num_coord,
+ { "Number of neighbor networks coordinating", "homeplug_av.nw_info_cnf.num_coord",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ /* Network Info per station */
+ { &hf_homeplug_av_nw_info_sta_info,
+ { "Stations Informations", "homeplug_av.nw_info_cnf.sta_info",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_nw_info_sta_da,
+ { "Station MAC Address", "homeplug_av.nw_info_cnf.sta_info.da",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_nw_info_sta_tei,
+ { "Station Terminal Equipment Identifier", "homeplug_av.nw_info_cnf.sta_indo.tei",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_nw_info_sta_bda,
+ { "MAC Address of first Node Bridged by Station", "homeplug_av.nw_info_cnf.sta_indo.bda",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av10_nw_info_sta_phy_dr_tx,
+ { "Average PHY Tx data Rate (Mbits/sec)", "homeplug_av.nw_info_cnf.sta_indo.phy_dr_tx",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av10_nw_info_sta_phy_dr_rx,
+ { "Average PHY Rx data Rate (Mbits/sec)", "homeplug_av.nw_info_cnf.sta_indo.phy_dr_rx",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av11_nw_info_sta_phy_dr_tx,
+ { "Average PHY Tx data Rate (Mbits/sec)", "homeplug_av.nw_info_cnf.sta_indo.phy_dr_tx",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av11_nw_info_sta_phy_dr_rx,
+ { "Average PHY Rx data Rate (Mbits/sec)", "homeplug_av.nw_info_cnf.sta_indo.phy_dr_rx",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av11_nw_info_sta_cpling_tx,
+ { "PHY Tx Coupling", "homeplug_av.nw_info_cnf.sta_info.phy_coupling_tx",
+ FT_UINT8, BASE_DEC, VALS(homeplug_av_coupling_vals), HOMEPLUG_AV_COUPLING_MASK, "Unknown", HFILL }
+ },
+ { &hf_homeplug_av11_nw_info_sta_cpling_rx,
+ { "PHY Rx Coupling", "homeplug_av.nw_info_cnf.sta_info.phy_coupling_rx",
+ FT_UINT8, BASE_DEC, VALS(homeplug_av_coupling_vals), HOMEPLUG_AV_COUPLING_MASK << 4, "Unknown", HFILL }
+ },
+ /* Check Points Request */
+ { &hf_homeplug_av_cp_rpt_req,
+ { "Check Points Request", "homeplug_av.cp_rpt_req",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cp_rpt_req_session_id,
+ { "Session ID", "homeplug_av.cp_rpt_req.session_id",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cp_rpt_req_clr,
+ { "Clear flag", "homeplug_av.cp_rpt_req.clr",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_rpt_clr_vals), HOMEPLUG_AV_RPT_CLR_MASK, "Unknown", HFILL }
+ },
+ /* Check Points Confirmation */
+ { &hf_homeplug_av_cp_rpt_ind,
+ { "Check Points Confirmation", "homeplug_av.cp_rpt_ind",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cp_rpt_ind_status,
+ { "Status", "homeplug_av.cp_rpt_ind.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, "Unknown", HFILL }
+ },
+ { &hf_homeplug_av_cp_rpt_ind_major_ver,
+ { "Major version", "homeplug_av.cp_rpt_ind.major_ver",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cp_rpt_ind_minor_ver,
+ { "Minor version", "homeplug_av.cp_rpt_ind.minor_ver",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cp_rpt_ind_session_id,
+ { "Session ID", "homeplug_av.cp_rpt_ind.session_id",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cp_rpt_ind_total_size,
+ { "Total size", "homeplug_av.cp_rpt_ind.total_size",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cp_rpt_ind_blk_offset,
+ { "Offset", "homeplug_av.cp_rpt_ind.blk_offset",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cp_rpt_ind_byte_index,
+ { "Byte Index", "homeplug_av.cp_rpt_ind.byte_index",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cp_rpt_ind_num_parts,
+ { "Number of parts", "homeplug_av.cp_rpt_ind.num_parts",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cp_rpt_ind_curr_part,
+ { "Current part", "homeplug_av.cp_rpt_ind.curr_part",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cp_rpt_ind_data_len,
+ { "Data length", "homeplug_av.cp_rpt_ind.data_len",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cp_rpt_ind_data_ofs,
+ { "Data offset", "homeplug_av.cp_rpt_ind.data_ofs",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cp_rpt_ind_data,
+ { "Report Data", "homeplug_av.cp_rpt_ind.data",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Loopback Request */
+ { &hf_homeplug_av_fr_lbk_req,
+ { "Loopback Request", "homeplug_av.fr_lbk.req",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_fr_lbk_duration,
+ { "Duration", "homeplug_av.lbk.duration",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_fr_lbk_len,
+ { "Length", "homeplug_av.lbk.len",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_fr_lbk_req_data,
+ { "Data", "homeplug_av.fr_lbj_req.data",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Loopback Confirmation */
+ { &hf_homeplug_av_fr_lbk_cnf,
+ { "Loopback Confirmation", "homeplug_av.fr_lbk_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_fr_lbk_cnf_status,
+ { "Status", "homeplug_av.fr_lbk_cnf.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, "Unknown", HFILL }
+ },
+ { &hf_homeplug_av_lbk_stat_cnf,
+ { "Loopback Status Confirmation", "homeplug_av.lnk_stat_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lbk_stat_cnf_status,
+ { "Status", "homeplug_av.lnk_stat_cnf.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_lbk_stat_cnf_lbk_stat,
+ { "Loopback Status", "homeplug_av.lnk_stat_cnf.lbk_stat",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_lbk_status_vals), HOMEPLUG_AV_LBK_STATUS_MASK, NULL, HFILL }
+ },
+ /* Set Encryption Key Request */
+ { &hf_homeplug_av_set_key_req,
+ { "Set Encryption Key Request", "homeplug_av.set_key_req",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_set_key_req_eks,
+ { "EKS", "homeplug_av.set_key_req.eks",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_set_key_peks_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_set_key_req_nmk,
+ { "NMK", "homeplug_av.set_key_req.nmk",
+ FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_set_key_req_rda,
+ { "Destination Address", "homeplug_av.set_key_req.rda",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_set_key_req_dak,
+ { "DAK", "homeplug_av.set_key_req.dak",
+ FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Set Encryption Key Confirmation */
+ { &hf_homeplug_av_set_key_cnf,
+ { "Set Encryption Key Confirmation", "homeplug_av.set_key_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_set_key_cnf_status,
+ { "Status", "homeplug_av.set_key_cnf.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_set_key_status_vals), 0x0, NULL, HFILL }
+ },
+ /* Get Manufacturer String Confirmation */
+ { &hf_homeplug_av_mfg_string_cnf,
+ { "Get Manufacturer String Confirmation", "homeplug_av.mfg_string_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_mfg_string_cnf_status,
+ { "Status", "homeplug_av.mfg_string_cnf.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_mfg_string_cnf_len,
+ { "Length", "homeplug_av.mfg_string_cnf.len",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_mfg_string_cnf_string,
+ { "Manufacturing String", "homeplug_av.mfg_string_cnf.string",
+ FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Read Configuration Block Confirmation */
+ { &hf_homeplug_av_rd_cblock_cnf,
+ { "Read Configuration Block Confirmation", "homeplug_av.rd_block_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rd_cblock_cnf_status,
+ { "Status", "homeplug_av.rd_block_cnf.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_cblock_status_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_rd_cblock_cnf_len,
+ { "Length", "homeplug_av.rd_block_cnf.len",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ /* Configuration Block Header */
+ { &hf_homeplug_av_cblock_hdr,
+ { "Configuration Block Header", "homeplug_av.cblock_hdr",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_hdr_ver,
+ { "Header Version Number", "homeplug_av.cblock_hdr.ver",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_img_rom_addr,
+ { "Image address in NVM", "homeplug_av.cblock_hdr.img_rom_addr",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_img_addr,
+ { "Image address in SDRAM", "homeplug_av.cblock_hdr.img_addr",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_img_len,
+ { "Image length", "homeplug_av.cblock_hdr.img_len",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_img_chksum,
+ { "Image Checksum", "homeplug_av.cblock_hdr.img_chksum",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_entry_point,
+ { "Entry Point", "homeplug_av.cblock_hdr.entry_point",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_hdr_minor,
+ { "Header minor version", "homeplug_av.cblock_hdr.minor",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_hdr_img_type,
+ { "Header image type", "homeplug_av.cblock_hdr.img_type",
+ FT_UINT8, BASE_DEC, VALS(homeplug_av_nvm_img_type_vals), HOMEPLUG_AV_NVM_IMG_TYPE_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_hdr_ignore_mask,
+ { "Header ignore mask", "homeplug_av.cblock_hdr.ignore_mask",
+ FT_UINT16, BASE_HEX, VALS(homeplug_av_nvm_ignore_mask_vals), HOMEPLUG_AV_NVM_IGNORE_MASK_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_hdr_module_id,
+ { "Header module ID", "homeplug_av.cblock_hdr.module_id",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_hdr_module_subid,
+ { "Header module sub ID", "homeplug_av.cblock_hdr.module_subid",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_next_hdr,
+ { "Address of next header in NVM", "homeplug_av.cblock_hdr.next_hdr",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_hdr_chksum,
+ { "Header checksum", "homeplug_av.cblock_hdr.hdr_chksum",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ /* Configuration Block */
+ { &hf_homeplug_av_cblock,
+ { "Configuration Block", "homeplug_av.cblock",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_sdram_size,
+ { "SDRAM size", "homeplug_av.cblock.sdram_size",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_sdram_conf,
+ { "SDRAM Configuration Register", "homeplug_av.cblock.sdram_conf",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_sdram_tim0,
+ { "SDRAM Timing Register 0", "homeplug_av.cblock.sdram_tim0",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_sdram_tim1,
+ { "SDRAM Timing Register 1", "homeplug_av.cblock.sdram_tim1",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_sdram_cntrl,
+ { "SDRAM Control Register", "homeplug_av.cblock.sdram_cntrl",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_sdram_refresh,
+ { "SDRAM Refresh Register", "homeplug_av.cblock.sdram_refresh",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cblock_mac_clock,
+ { "MAC Clock Register", "homeplug_av.cblock.mac_clock",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ /* Set SDRAM Configuration Request */
+ { &hf_homeplug_av_set_sdram_req,
+ { "Set SDRAM Configuration Request", "homeplug_av.set_sdram_req",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_set_sdram_req_chksum,
+ { "Checksum", "homeplug_av.set_sdram_req.chksum",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ /* Set SDRAM Configuration Confirmation */
+ { &hf_homeplug_av_set_sdram_cnf,
+ { "Set SDRAM Configuration Confirmation", "homeplug_av.set_sdram_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_set_sdram_cnf_status,
+ { "Status", "homeplug_av.set_sdram_cnf.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_cblock_status_vals), 0x0, NULL, HFILL }
+ },
+ /* Embedded Host Action Required Indicate */
+ { &hf_homeplug_av_host_action_ind,
+ { "Embedded Host Action Required Indicate", "homeplug_av.host_action_ind",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_host_action_ind_act,
+ { "Action required", "homeplug_av.host_action_ind.action",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_host_action_vals), 0x0, NULL, HFILL }
+ },
+ /* Embedded Host Action Required Response */
+ { &hf_homeplug_av_host_action_rsp,
+ { "Embedded Host Action Required Response", "homeplug_av.host_action_rsp",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_host_action_rsp_sts,
+ { "Status", "homeplug_av.host_action_rsp.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
+ },
+ /* Get Device Attributes Request */
+ { &hf_homeplug_av_op_attr_req,
+ { "Get Device Attributes Request", "homeplug_av.op_attr_req",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_op_attr_cookie,
+ { "Cookie", "homeplug_av.op_attr.cookie",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_op_attr_rep_type,
+ { "Report Type", "homeplug_av.op_attr.rep_type",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_op_attr_report_vals), 0x0, NULL, HFILL }
+ },
+ /* Get Device Attributes Confirmation */
+ { &hf_homeplug_av_op_attr_cnf,
+ { "Get Device Attributes Confirmation", "homeplug_av.op_attr_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_op_attr_cnf_status,
+ { "Status", "homeplug_av.op_attr_cnf.status",
+ FT_UINT16, BASE_HEX, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_op_attr_cnf_size,
+ { "Size", "homeplug_av.op_attr_cnf.size",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_op_attr_cnf_data,
+ { "Data", "homeplug_av.op_attr_cnf.data",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* Device Attributes binary report */
+ { &hf_homeplug_av_op_attr_data_hw,
+ { "Hardware platform", "homeplug_av.op_attr_cnf.data.hw",
+ FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_op_attr_data_sw,
+ { "Software platform", "homeplug_av.op_attr_cnf.data.sw",
+ FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_op_attr_data_sw_major,
+ { "Major version", "homeplug_av.op_attr_cnf.data.sw_major",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_op_attr_data_sw_minor,
+ { "Minor version", "homeplug_av.op_attr_cnf.data.sw_minor",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_op_attr_data_sw_sub,
+ { "Software/PIB version", "homeplug_av.op_attr_cnf.data.sw_sub",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_op_attr_data_sw_num,
+ { "Software build number", "homeplug_av.op_attr_cnf.data.sw_sub",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_op_attr_data_sw_date,
+ { "Build date", "homeplug_av.op_attr_cnf.data.sw_date",
+ FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_op_attr_data_sw_rel,
+ { "Release type", "homeplug_av.op_attr_cnf.data.sw_rel",
+ FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_op_attr_data_sw_sdram_type,
+ { "SDRAM type", "homeplug_av.op_attr_cnf.data.sw_sdram_type",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_op_attr_data_sw_linefreq,
+ { "Line frequency (Hz)", "homeplug_av.op_attr_cnf.data.sw_linefreq",
+ FT_UINT8, BASE_DEC, VALS(homeplug_av_linefreq_vals), HOMEPLUG_AV_LINEFREQ_MASK, "Unknown", HFILL }
+ },
+ { &hf_homeplug_av_op_attr_data_sw_zerocross,
+ { "Zero-crossing", "homeplug_av.op_attr_cnf.data.sw_zerocross",
+ FT_UINT8, BASE_DEC, VALS(homeplug_av_zerocrossing_vals), HOMEPLUG_AV_ZEROCROSS_MASK << 2, "Unknown", HFILL }
+ },
+ { &hf_homeplug_av_op_attr_data_sw_sdram_size,
+ { "SDRAM size (Mbytes)", "homeplug_av.op_attr_cnf.data.sw_sdram_size",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_op_attr_data_sw_auth_mode,
+ { "Authorization mode", "homeplug_av.op_attr_cnf.data.sw_auth_mode",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ /* Get Ethernet PHY Settings Request */
+ { &hf_homeplug_av_enet_phy_req,
+ { "Get Ethernet PHY Settings Request", "homeplug_av.enet_phy_req",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_enet_phy_req_mcontrol,
+ { "Message Control", "homeplug_av.enet_phy_req.mcontrol",
+ FT_UINT8, BASE_DEC, VALS(homeplug_av_enet_phy_mcontrol_vals), HOMEPLUG_AV_ENET_PHY_MCONTROL_MASK, "Unknown", HFILL }
+ },
+ { &hf_homeplug_av_enet_phy_req_addcaps,
+ { "Advertisement Capabilities", "homeplug_av.enet_phy_req.addcaps",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ /* Get Ethernet PHY Settings Confirmation */
+ { &hf_homeplug_av_enet_phy_cnf,
+ { "Get Ethernet PHY Settings Confirmation", "homeplug_av.enet_phy_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_enet_phy_cnf_status,
+ { "Status", "homeplug_av.enet_phy_cnf.status",
+ FT_UINT8, BASE_DEC, VALS(homeplug_av_generic_status_vals), HOMEPLUG_AV_GEN_STATUS_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_enet_phy_cnf_speed,
+ { "Speed", "homeplug_av.enet_phy.speed",
+ FT_UINT8, BASE_DEC, VALS(homeplug_av_enet_phy_speed_vals), HOMEPLUG_AV_ENET_PHY_SPEED_MASK, NULL, HFILL },
+ },
+ { &hf_homeplug_av_enet_phy_cnf_duplex,
+ { "Duplex", "homeplug_av.enet_phy.duplex",
+ FT_UINT8, BASE_DEC, VALS(homeplug_av_enet_phy_duplex_vals), HOMEPLUG_AV_ENET_PHY_DUPLEX_MASK, NULL, HFILL },
+ },
+ /* Tone Map Tx Characteristics Request */
+ { &hf_homeplug_av_tone_map_tx_req,
+ { "Tone Map Tx Characteristics Request", "homeplug_av.tone_map_tx_req",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_tx_req_mac,
+ { "Peer address", "homeplug_av.tone_map_tx_req.mac",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_tx_req_slot,
+ { "Tone Map slot", "homeplug_av.tone_map_tx_req.slot",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_tx_req_coupling,
+ { "Coupling", "homeplug_av.tone_map_tx_req.coupling",
+ FT_UINT8, BASE_DEC, VALS(homeplug_av_coupling_vals), HOMEPLUG_AV_COUPLING_MASK, NULL, HFILL }
+ },
+ /* Tone Map Rx Characteristics Request */
+ { &hf_homeplug_av_tone_map_rx_req,
+ { "Tone Map Rx Characteristics Request", "homeplug_av.tone_map_rx_req",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_rx_req_mac,
+ { "Peer address", "homeplug_av.tone_map_rx_req.mac",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_rx_req_slot,
+ { "Tone Map slot", "homeplug_av.tone_map_rx_req.slot",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_rx_req_coupling,
+ { "Coupling", "homeplug_av.tone_map_rx_req.coupling",
+ FT_UINT8, BASE_DEC, VALS(homeplug_av_coupling_vals), HOMEPLUG_AV_COUPLING_MASK, NULL, HFILL }
+ },
+ /* Tone Map Tx Characteristics Confirmation */
+ { &hf_homeplug_av_tone_map_tx_cnf,
+ { "Tone Map Tx Characteristics Confirmation", "homeplug_av.tone_map_tx_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_tx_cnf_status,
+ { "Status", "homeplug_av.tone_map_tx_cnf.status",
+ FT_UINT16, BASE_HEX, VALS(homeplug_av_tone_map_status_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_tx_cnf_len,
+ { "Length", "homeplug_av.tone_map_tx_cnf.len",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_tx_cnf_mac,
+ { "Peer address", "homeplug_av.tone_map_tx_cnf.mac",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_tx_cnf_slot,
+ { "Slot", "homeplug_av.tone_map_tx_cnf.slot",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_tx_cnf_num_tms,
+ { "Number of Tone Maps in use", "homeplug_av.tone_map_tx_cnf.num_tms",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_tx_cnf_num_act,
+ { "Tone map number of active carriers", "homeplug_av.tone_map_tx_cnf.num_act",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ /* Tone Map Rx Characteristics Confirmation */
+ { &hf_homeplug_av_tone_map_rx_cnf,
+ { "Tone Map Rx Characteristics Confirmation", "homeplug_av.tone_map_rx_cnf",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_rx_cnf_status,
+ { "Status", "homeplug_av.tone_map_rx_cnf.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_tone_map_status_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_rx_cnf_len,
+ { "Length", "homeplug_av.tone_map_rx_cnf.len",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_rx_cnf_subver,
+ { "MME Subversion", "homeplug_av.tone_map_rx_cnf.mmesubversion",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_rx_cnf_mac,
+ { "Peer address", "homeplug_av.tone_map_rx_cnf.mac",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_rx_cnf_slot,
+ { "Slot", "homeplug_av.tone_map_rx_cnf.slot",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_rx_cnf_coupling,
+ { "Coupling", "homeplug_av.tone_map_rx_cnf.coupling",
+ FT_UINT8, BASE_DEC, VALS(homeplug_av_coupling_vals), HOMEPLUG_AV_COUPLING_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_rx_cnf_num_tms,
+ { "Number of Tone Maps in use", "homeplug_av.tone_map_rx_cnf.num_tms",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_rx_cnf_num_act,
+ { "Tone map number of active carriers", "homeplug_av.tone_map_rx_cnf.num_act",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_rx_cnf_agc,
+ { "Automatic Gain Control (AGC)", "homeplug_av.tone_map_rx_cnf.agc",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_rx_cnf_gil,
+ { "Guard Interval Length (GIL)", "homeplug_av.tone_map_rx_cnf.gil",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ /* Tone Map Carrier informations */
+ { &hf_homeplug_av_tone_map_carriers,
+ { "Tone Map carriers", "homeplug_av.tone_map_cnf.carriers",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_carrier,
+ { "Modulation per carrier", "homeplug_av.tone_map_cnf.carrier",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_carrier_lo,
+ { "Modulation (Low carrier)", "homeplug_av.tone_map_cnf.carrier.lo",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_tone_map_vals), HOMEPLUG_AV_TONE_MAP_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_tone_map_carrier_hi,
+ { "Modulation (High carrier)", "homeplug_av.tone_map_cnf.carrier.hi",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_tone_map_vals), HOMEPLUG_AV_TONE_MAP_MASK << 4, NULL, HFILL }
+ },
+ /* CC_ASSOC.* */
+ { &hf_homeplug_av_cc_assoc_reqtype,
+ { "Request Type", "homeplug_av.cc_assoc.reqtype",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_cc_assoc_reqtype_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_assoc_nid,
+ { "Network ID", "homeplug_av.cc_assoc.nid",
+ FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_assoc_cco_cap,
+ { "CCo Capability", "homeplug_av.cc_assoc.cco_cap",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_avln_status_vals), HOMEPLUG_AV_AVLN_STATUS_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_assoc_proxy_net_cap,
+ { "Proxy Network Capability", "homeplug_av.cc_assoc.proxy_cap",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_cc_assoc_proxy_net_cap_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_assoc_result,
+ { "Result", "homeplug_av.cc_assoc.result",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_cc_assoc_result_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_assoc_snid,
+ { "Short Network ID", "homeplug_av.cc_assoc.snid",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_assoc_tei,
+ { "TEI", "homeplug_av.cc_assoc.tei",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_assoc_lease_time ,
+ { "Lease time (min)", "homeplug_av.cc_assoc.lease_time",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ /* CM_UNASSOCIATED_STA_IND */
+ { &hf_homeplug_av_cm_unassoc_sta_nid,
+ { "Network ID", "homeplug_av.cm_unassoc_sta.nid",
+ FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cm_unassoc_sta_cco_cap,
+ { "CCo Capability", "homeplug_av.cm_unassoc_sta.cco_cap",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_avln_status_vals), HOMEPLUG_AV_AVLN_STATUS_MASK, NULL, HFILL }
+ },
+ /* CC_SET_TEI_MAP_IND */
+ { &hf_homeplug_av_cc_set_tei_map_ind_mode,
+ { "Mode", "homeplug_av.cc_set_tei_map_ind.mode",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_cc_set_tei_map_ind_mode_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_set_tei_map_ind_num,
+ { "Number of entries", "homeplug_av.cc_set_tei_map_ind.num",
+ FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_set_tei_map_ind_tei,
+ { "TEI", "homeplug_av.cc_set_tei_map_ind.tei",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_set_tei_map_ind_mac,
+ { "MAC Address", "homeplug_av.cc_set_tei_map_ind.mac",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_cc_set_tei_map_ind_status,
+ { "Status", "homeplug_av.cc_set_tei_map_ind.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_cc_set_tei_map_ind_status_vals), 0x0, NULL, HFILL }
+ },
+ /* HPGP */
+ /* CM_SLAC_PARM.* */
+ { &hf_homeplug_av_gp_cm_slac_parm_apptype,
+ { "Application type", "homeplug_av.gp.cm_slac_parm.apptype",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_parm_sectype,
+ { "Security in M-Sound Message", "homeplug_av.gp.cm_slac_parm.sectype",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_gp_cm_slac_parm_sectype_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_parm_runid,
+ { "Run ID", "homeplug_av.gp.cm_slac_parm.runid",
+ FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_parm_cipher_size,
+ { "Cipher Suite Set Size", "homeplug_av.gp.cm_slac_parm.cipher_size",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_parm_cipher,
+ { "Cipher Suite", "homeplug_av.gp.cm_slac_parm.cipher",
+ FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_parm_sound_target,
+ { "M-Sound Target", "homeplug_av.gp.cm_slac_parm.sound_target",
+ FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_parm_sound_count,
+ { "M-Sound Count", "homeplug_av.gp.cm_slac_parm.sound_count",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_parm_time_out,
+ { "M-Sound MPDU Time Out (N*100 msec)", "homeplug_av.gp.cm_slac_parm.time_out",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_parm_resptype,
+ { "Response type", "homeplug_av.gp.cm_slac_parm.resptype",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_gp_cm_slac_parm_resptype_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_parm_forwarding_sta,
+ { "Forwarded to MAC", "homeplug_av.gp.cm_slac_parm.forwarding_sta",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* CM_ATTEN_PROFILE_IND */
+ { &hf_homeplug_av_gp_cm_atten_profile_ind_pev_mac,
+ { "PEV MAC Address", "homeplug_av.gp.cm_atten_profile_ind.pev_mac",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_atten_profile_ind_num_groups,
+ { "Number of Groups", "homeplug_av.gp.cm_atten_profile_ind.groups_count",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_atten_profile_ind_aag,
+ { "Average Attenuation of group (dB)", "homeplug_av.gp.cm_atten_profile_ind.aag",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ /* CM_ATTEN_CHAR */
+ { &hf_homeplug_av_gp_cm_atten_char_result,
+ { "Result", "homeplug_av.gp.cm_atten_char.result",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_atten_char_apptype,
+ { "Application type", "homeplug_av.gp.cm_atten_char.apptype",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_atten_char_sectype,
+ { "Security", "homeplug_av.gp.cm_atten_char.sectype",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_gp_cm_slac_parm_sectype_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_atten_char_source_mac,
+ { "Source MAC", "homeplug_av.gp.cm_atten_char.source_mac",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_atten_char_runid,
+ { "Run ID", "homeplug_av.gp.cm_atten_char.runid",
+ FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_atten_char_source_id,
+ { "Source ID", "homeplug_av.gp.cm_atten_char.source_id",
+ FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_atten_char_resp_id,
+ { "Response ID", "homeplug_av.gp.cm_atten_char.resp_id",
+ FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_atten_char_numgroups,
+ { "Number of Groups", "homeplug_av.gp.cm_atten_char.groups_count",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_atten_char_numsounds,
+ { "Number of Sounds", "homeplug_av.gp.cm_atten_char.sounds_count",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_atten_char_aag,
+ { "Average Attenuation of group (dB)", "homeplug_av.gp.cm_atten_char.aag",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_atten_char_profile,
+ { "Signal level attenuation profile", "homeplug_av.gp.cm_atten_char.profile",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_atten_char_cms_data,
+ { "CMS Data", "homeplug_av.gp.cm_atten_char.cms_data",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* CM_START_ATTEN_CHAR */
+ { &hf_homeplug_av_gp_cm_start_atten_char_time_out,
+ { "M-Sound MPDU Time Out (N*100 msec)", "homeplug_av.gp.cm_start_atten_char.time_out",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_start_atten_char_resptype,
+ { "Response type", "homeplug_av.gp.cm_start_atten_char.resptype",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_gp_cm_slac_parm_resptype_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_start_atten_char_forwarding_sta,
+ { "Forwarded to MAC", "homeplug_av.gp.cm_start_atten_char.sound_forwarding_sta",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_start_atten_char_runid,
+ { "Run ID", "homeplug_av.gp.cm_start_atten_char.runid",
+ FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_start_atten_char_numsounds,
+ { "Number of Sounds", "homeplug_av.gp.cm_start_atten_char.sounds_count",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ /* CM_MNBC_SOUND */
+ { &hf_homeplug_av_gp_cm_mnbc_sound_apptype,
+ { "Application type", "homeplug_av.gp.cm_mnbc_sound.apptype",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_mnbc_sound_sectype,
+ { "Security", "homeplug_av.gp.cm_mnbc_sound.sectype",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_gp_cm_slac_parm_sectype_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_mnbc_sound_sender_id,
+ { "Sender ID", "homeplug_av.gp.cm_mnbc_sound.sender_id",
+ FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_mnbc_sound_countdown,
+ { "Remaining Number of Sounds", "homeplug_av.gp.cm_mnbc_sound.countdown",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_mnbc_sound_runid,
+ { "Run ID", "homeplug_av.gp.cm_mnbc_sound.runid",
+ FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_mnbc_sound_rsvd,
+ { "Reserved", "homeplug_av.gp.cm_mnbc_sound.reserved",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_mnbc_sound_rnd,
+ { "Random number", "homeplug_av.gp.cm_mnbc_sound.rnd",
+ FT_BYTES, SEP_SPACE, NULL, 0x0, NULL, HFILL }
+ },
+ /* CM_VALIDATE */
+ { &hf_homeplug_av_gp_cm_validate_signaltype,
+ { "Signal type", "homeplug_av.gp.cm_validate.signaltype",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_gp_cm_validate_signaltype_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_validate_timer,
+ { "Timer (N*100 ms)", "homeplug_av.gp.cm_validate.timer",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_validate_result,
+ { "Result", "homeplug_av.gp.cm_validate.result",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_gp_cm_validate_result_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_validate_togglenum,
+ { "Number of detected toggles", "homeplug_av.gp.cm_validate.togglenum",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ /* CM_SLAC_MATCH */
+ { &hf_homeplug_av_gp_cm_slac_match_apptype,
+ { "Application type", "homeplug_av.gp.cm_slac_match.apptype",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_match_sectype,
+ { "Security", "homeplug_av.gp.cm_slac_match.sectype",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_gp_cm_slac_parm_sectype_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_match_length,
+ { "Length", "homeplug_av.gp.cm_slac_match.length",
+ FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_match_pev_id,
+ { "PEV ID", "homeplug_av.gp.cm_slac_match.pev_id",
+ FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_match_pev_mac,
+ { "PEV MAC", "homeplug_av.gp.cm_slac_match.pev_mac",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_match_evse_id,
+ { "EVSE ID", "homeplug_av.gp.cm_slac_match.evse_id",
+ FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_match_evse_mac,
+ { "EVSE MAC", "homeplug_av.gp.cm_slac_match.evse_mac",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_match_runid,
+ { "Run ID", "homeplug_av.gp.cm_slac_match.runid",
+ FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_match_rsvd,
+ { "Reserved", "homeplug_av.gp.cm_slac_match.rsvd",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_match_nid,
+ { "Network ID", "homeplug_av.gp.cm_slac_match.nid",
+ FT_BYTES, SEP_COLON, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_match_nmk,
+ { "Network Membership Key (NMK)", "homeplug_av.gp.cm_slac_match.nmk",
+ FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ /* CM_SLAC_USER_DATA */
+ { &hf_homeplug_av_gp_cm_slac_user_data_broadcast_tlv_type,
+ { "Broadcast TLV", "homeplug_av.gp.cm_slac_user_data.broadcast",
+ 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 }
+ },
+ { &hf_homeplug_av_gp_cm_slac_user_data_tlv,
+ { "TLV", "homeplug_av.gp.cm_slac_user_data.tlv",
+ FT_UINT16, BASE_HEX, NULL, HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_TYPE_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_user_data_tlv_type,
+ { "Type", "homeplug_av.gp.cm_slac_user_data.tlv.type",
+ 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 }
+ },
+ { &hf_homeplug_av_gp_cm_slac_user_data_tlv_length,
+ { "Length", "homeplug_av.gp.cm_slac_user_data.tlv.length",
+ FT_UINT16, BASE_HEX, NULL, HOMEPLUG_AV_GP_CM_SLAC_USER_DATA_TLV_LENGTH_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_user_data_tlv_str_bytes,
+ { "Data", "homeplug_av.gp.cm_slac_user_data.tlv.str",
+ FT_BYTES, SEP_SPACE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_user_data_tlv_oui,
+ { "OUI", "homeplug_av.gp.cm_slac_user_data.tlv.oui",
+ FT_UINT24, BASE_HEX, VALS(homeplug_av_vendors_oui_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_user_data_tlv_subtype,
+ { "Subtype", "homeplug_av.gp.cm_slac_user_data.tlv.subtype",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_gp_cm_slac_user_data_tlv_info_str,
+ { "Data", "homeplug_av.gp.cm_slac_user_data.tlv.info_str",
+ FT_BYTES, SEP_SPACE, NULL, 0x0, NULL, HFILL }
+ },
+ /* ST/IoTecha specific fields */
+ { &hf_homeplug_av_st_iotecha_header_rsvd,
+ { "Reserved", "homeplug_av.st_iotecha.rsvd",
+ FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_header_mmever,
+ { "MME version", "homeplug_av.st_iotecha.mmever",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_header_mver,
+ { "Message version", "homeplug_av.st_iotecha.mver",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_auth_nmk,
+ { "NMK", "homeplug_av.st_iotecha.auth.nmk",
+ FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_status_byte,
+ { "Status", "homeplug_av.st_iotecha.auth.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_generic_status_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_linkstatus_status,
+ { "Link status", "homeplug_av.st_iotecha.linkstatus.status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_linkstatus_status_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_linkstatus_devmode,
+ { "DevMode", "homeplug_av.st_iotecha.linkstatus.devmode",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_linkstatus_devmode_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_stp_discover_tlv,
+ { "ST/IoTecha TLV", "homeplug_av.st_iotecha.stp_discover.tlv",
+ 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 }
+ },
+ { &hf_homeplug_av_st_iotecha_stp_discover_tlv_type,
+ { "Type", "homeplug_av.st_iotecha.stp_discover.tlv.type",
+ 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 }
+ },
+ { &hf_homeplug_av_st_iotecha_stp_discover_tlv_length,
+ { "Length", "homeplug_av.st_iotecha.stp_discover.tlv.length",
+ FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_ST_IOTECHA_STP_DISCOVER_TLV_LENGTH_MASK, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_stp_discover_tlv_value_bytes,
+ { "Value", "homeplug_av.st_iotecha.stp_discover.tlv.value",
+ FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_stp_discover_tlv_value_string,
+ { "Value", "homeplug_av.st_iotecha.stp_discover.tlv.value_string",
+ FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_gain_ask,
+ { "Requested Max Gain", "homeplug_av.st_iotecha.gainmax.ask",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_gain_new,
+ { "New (Current) Max Gain", "homeplug_av.st_iotecha.gainmax.new",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_gain_prev,
+ { "Previous Max Gain", "homeplug_av.st_iotecha.gainmax.prev",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_tei_count,
+ { "Count of TEI", "homeplug_av.st_iotecha.tei.count",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_tei,
+ { "TEI", "homeplug_av.st_iotecha.tei",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_tei_snap_addr_count,
+ { "Number of remote address entities", "homeplug_av.st_iotecha.tei.snapshot.count",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_tei_snap_tei,
+ { "Associated TEI", "homeplug_av.st_iotecha.tei.snapshot.tei",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_mac_address,
+ { "MAC Address", "homeplug_av.st_iotecha.macaddress",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_tei_snap_mac_address_flag,
+ { "Flags", "homeplug_av.st_iotecha.tei.snapshot.flags",
+ FT_UINT16, BASE_HEX, VALS(homeplug_av_st_iotecha_mac_address_flag_vals), 0x0F, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_bss_list_count,
+ { "BSS Entries Count", "homeplug_av.st_iotecha.bss.count",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_bss_entry,
+ { "BSS Entry", "homeplug_av.st_iotecha.bss.entry",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_bss_type,
+ { "Type", "homeplug_av.st_iotecha.bss.entry.type",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_stp_get_bss_tlv_type_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_bss_value_bytes,
+ { "Value", "homeplug_av.st_iotecha.bss.entry.value",
+ FT_BYTES, SEP_COLON | BASE_ALLOW_ZERO, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_chanqual_req_type,
+ { "Request Type", "homeplug_av.st_iotecha.chanqual.reqtype",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_chanqual_reqtype_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_chanqual_substatus,
+ { "Subscription Status", "homeplug_av.st_iotecha.chanqual.substatus",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_chanqual_substatus_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_chanqual_mac_local,
+ { "MAC of local node", "homeplug_av.st_iotecha.chanqual.mac.local",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_chanqual_mac_remote,
+ { "MAC of remote node", "homeplug_av.st_iotecha.chanqual.mac.remote",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_chanqual_source,
+ { "Source of this report", "homeplug_av.st_iotecha.chanqual.source",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_chanqual_tei_source_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_chanqual_response_type,
+ { "Response Type", "homeplug_av.st_iotecha.chanqual.responsetype",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_chanqual_responsetype_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_chanqual_tmi_count,
+ { "Size of TMI List", "homeplug_av.st_iotecha.chanqual.tmi.count",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_chanqual_tmi,
+ { "TMI List", "homeplug_av.st_iotecha.chanqual.chanqual.tmi",
+ FT_BYTES, SEP_SPACE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_chanqual_int,
+ { "Intervals List", "homeplug_av.st_iotecha.int",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_chanqual_int_count,
+ { "Size of Interval List", "homeplug_av.st_iotecha.chanqual.int.count",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_chanqual_int_et,
+ { "End Time of interval", "homeplug_av.st_iotecha.chanqual.int.et",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_chanqual_int_tmi,
+ { "Interval", "homeplug_av.st_iotecha.chanqual.int.tmi",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_chanqual_tmi_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_chanqual_tmi_attached,
+ { "TMI of the attached Tone Map", "homeplug_av.st_iotecha.chanqual.tmi_atteched",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_chanqual_fec_type,
+ { "FEC Type/Code Rate", "homeplug_av.st_iotecha.chanqual.fec",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_chanqual_cbld,
+ { "Carrier Bid Loading Data Nibbles", "homeplug_av.st_iotecha.chanqual.cbld",
+ FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_chanqual_cbld_data_low,
+ { "CBLD Low", "homeplug_av.st_iotecha.chanqual.cbld.data.low",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_chanqual_cbld_data_vals), HOMEPLUG_AV_ST_IOTECHA_CHANQUAL_CBLD_DATA_MASK_LOW, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_chanqual_cbld_data_high,
+ { "CBLD High", "homeplug_av.st_iotecha.chanqual.cbld.data.high",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_chanqual_cbld_data_vals), HOMEPLUG_AV_ST_IOTECHA_CHANQUAL_CBLD_DATA_MASK_HIGH, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_mfct_crc,
+ { "CRC plus last CRC", "homeplug_av.st_iotecha.mfct.crc",
+ FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_mfct_total_length,
+ { "Total length", "homeplug_av.st_iotecha.mfct.total_length",
+ FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_mfct_offset,
+ { "Offset", "homeplug_av.st_iotecha.mfct.offset",
+ FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_mfct_length,
+ { "Length", "homeplug_av.st_iotecha.mfct.length",
+ FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_mfct_data,
+ { "Update Data", "homeplug_av.st_iotecha.mfct.data",
+ FT_BYTES, SEP_SPACE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_mfct_timeout,
+ { "Time duration before abort", "homeplug_av.st_iotecha.mfct.timeout",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_mfct_request_type,
+ { "Request Type", "homeplug_av.st_iotecha.mfct.request_type",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_mfct_request_type_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_mfct_result,
+ { "Result", "homeplug_av.st_iotecha.mfct.result",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_mfct_result_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_mfct_reboot,
+ { "Reboot when complete", "homeplug_av.st_iotecha.mfct.reboot",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_mfct_name,
+ { "Parameter name", "homeplug_av.st_iotecha.mfct.name",
+ FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_mfct_value,
+ { "Value", "homeplug_av.st_iotecha.mfct.value",
+ FT_BYTES, SEP_SPACE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_mfct_item_offset,
+ { "Offset", "homeplug_av.st_iotecha.mfct.item.offset",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_mfct_item_total_length,
+ { "Total length", "homeplug_av.st_iotecha.mfct.item.total_length",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_stp_fup_mac_da,
+ { "MAC DA", "homeplug_av.st_iotecha.stp_fup.mac_da",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_stp_fup_mac_sa,
+ { "MAC SA", "homeplug_av.st_iotecha.stp_fup.mac_sa",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_stp_fup_mtype,
+ { "Message Type", "homeplug_av.st_iotecha.stp_fup.mtype",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_stp_fwup_mtype_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_cpstate_state,
+ { "CP State", "homeplug_av.st_iotecha.cpstate.state",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_stp_cpstate_state_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_cpstate_pwm_duty,
+ { "PWM Duty Cycle", "homeplug_av.st_iotecha.cpstate.pwm_duty",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_cpstate_pwm_freq,
+ { "PWM Frequency", "homeplug_av.st_iotecha.cpstate.pwm_freq",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_cpstate_volatge,
+ { "CP Voltage", "homeplug_av.st_iotecha.cpstate.cp_volatge",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_cpstate_adc_bitmask,
+ { "ADC Channels", "homeplug_av.st_iotecha.cpstate.adc_bitmask",
+ FT_UINT8, BASE_CUSTOM, CF_FUNC(adc_bitmask_base), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_cpstate_adc_voltage_1,
+ { "ADC Channel 1 (mV)", "homeplug_av.st_iotecha.cpstate.adc_channel_1",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_cpstate_adc_voltage_2,
+ { "ADC Channel 2 (mV)", "homeplug_av.st_iotecha.cpstate.adc_channel_2",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_cpstate_adc_voltage_3,
+ { "ADC Channel 3 (mV)", "homeplug_av.st_iotecha.cpstate.adc_channel_3",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_user_message_info,
+ { "Message", "homeplug_av.st_iotecha.user_message",
+ FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_user_message_details,
+ { "Details", "homeplug_av.st_iotecha.user_message_details",
+ FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_test_type,
+ { "Test Type", "homeplug_av.st_iotecha.test_type",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_test_type_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_num_sound,
+ { "Number of soundings", "homeplug_av.st_iotecha.num_sound",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_data_ind_addr,
+ { "MAC addr", "homeplug_av.st_iotecha.data_ind_addr",
+ FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_agc_lock,
+ { "AgcLock", "homeplug_av.st_iotecha.agc_lock",
+ FT_UINT8, BASE_DEC, VALS(homeplug_av_st_iotecha_agc_lock_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_db_agc_val,
+ { "DbAgcVal", "homeplug_av.st_iotecha.db_agc_val",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_test_status,
+ { "Status", "homeplug_av.st_iotecha.test_status",
+ FT_UINT8, BASE_HEX, VALS(homeplug_av_st_iotecha_test_status_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_suppress_data,
+ { "Suppress data", "homeplug_av.st_iotecha.suppress_data",
+ FT_UINT8, BASE_DEC, VALS(homeplug_av_st_iotecha_suppress_data_vals), 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_sound_remain,
+ { "Counter of sound remain", "homeplug_av.st_iotecha.sound_remain",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_ntb_time,
+ { "NTB time", "homeplug_av.st_iotecha.ntb_time",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_rsvd1,
+ { "Reserved", "homeplug_av.st_iotecha.rsvd1",
+ FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_rsvd2,
+ { "Reserved", "homeplug_av.st_iotecha.rsvd2",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_num_segments,
+ { "Number of msg segments", "homeplug_av.st_iotecha.num_segments",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_segment,
+ { "Index of curr segment", "homeplug_av.st_iotecha.segment",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_num_chan,
+ { "Number of channels", "homeplug_av.st_iotecha.num_chan",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ },
+ { &hf_homeplug_av_st_iotecha_chan_start,
+ { "Carrier map index of ChanData", "homeplug_av.st_iotecha.chan_start",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
+ }
+ /* End of ST/IoTecha specific fields */
+ };
+
+ static gint *ett[] = {
+ &ett_homeplug_av,
+ &ett_homeplug_av_mmhdr,
+ &ett_homeplug_av_mmtype,
+ &ett_homeplug_av_fmi,
+ &ett_homeplug_av_vendor,
+ &ett_homeplug_av_public,
+
+ &ett_homeplug_av_fc,
+ &ett_homeplug_av_sof,
+ &ett_homeplug_av_rtscts,
+ &ett_homeplug_av_sack,
+ &ett_homeplug_av_sound,
+ &ett_homeplug_av_rsof,
+ &ett_homeplug_av_bcn,
+ &ett_homeplug_av_bcn_payload,
+ &ett_homeplug_av_cc_disc_list_cnf,
+ &ett_homeplug_av_cc_sta_info,
+ &ett_homeplug_av_cc_net_info,
+ &ett_homeplug_av_cm_enc_pld_ind,
+ &ett_homeplug_av_cm_enc_pld_rsp,
+ &ett_homeplug_av_cm_set_key_req,
+ &ett_homeplug_av_cm_set_key_cnf,
+ &ett_homeplug_av_cm_get_key_req,
+ &ett_homeplug_av_cm_get_key_cnf,
+ &ett_homeplug_av_brg_infos_cnf,
+ &ett_homeplug_av_cm_nw_infos_cnf,
+ &ett_homeplug_av_nw_stats_cnf,
+
+ &ett_homeplug_av_get_sw_cnf,
+ &ett_homeplug_av_wr_mem_req,
+ &ett_homeplug_av_wr_mem_cnf,
+ &ett_homeplug_av_rd_mem_req,
+ &ett_homeplug_av_st_mac_req,
+ &ett_homeplug_av_st_mac_cnf,
+ &ett_homeplug_av_rd_mem_cnf,
+ &ett_homeplug_av_get_nvm_cnf,
+ &ett_homeplug_av_rs_dev_cnf,
+ &ett_homeplug_av_wr_mod_req,
+ &ett_homeplug_av_wr_mod_cnf,
+ &ett_homeplug_av_wr_mod_ind,
+ &ett_homeplug_av_rd_mod_req,
+ &ett_homeplug_av_rd_mod_cnf,
+ &ett_homeplug_av_mod_nvm_req,
+ &ett_homeplug_av_mod_nvm_cnf,
+ &ett_homeplug_av_wd_rpt_req,
+ &ett_homeplug_av_wd_rpt_ind,
+ &ett_homeplug_av_lnk_stats_req,
+ &ett_homeplug_av_lnk_stats_cnf,
+ &ett_homeplug_av_lnk_stats_tx,
+ &ett_homeplug_av_lnk_stats_rx,
+ &ett_homeplug_av_lnk_stats_rx_inv,
+ &ett_homeplug_av_sniffer_req,
+ &ett_homeplug_av_sniffer_cnf,
+ &ett_homeplug_av_sniffer_ind,
+ &ett_homeplug_av_sniffer_ind_data,
+ &ett_homeplug_av_nw_info_cnf,
+ &ett_homeplug_av_nw_info_sta_info,
+ &ett_homeplug_av_nw_info_net_info,
+ &ett_homeplug_av_cp_rpt_req,
+ &ett_homeplug_av_cp_rpt_ind,
+ &ett_homeplug_av_fr_lbk_req,
+ &ett_homeplug_av_fr_lbk_cnf,
+ &ett_homeplug_av_lbk_stat_cnf,
+ &ett_homeplug_av_set_key_req,
+ &ett_homeplug_av_set_key_cnf,
+ &ett_homeplug_av_mfg_string_cnf,
+ &ett_homeplug_av_rd_cblock_cnf,
+ &ett_homeplug_av_cblock_hdr,
+ &ett_homeplug_av_cblock,
+ &ett_homeplug_av_set_sdram_req,
+ &ett_homeplug_av_set_sdram_cnf,
+ &ett_homeplug_av_host_action_ind,
+ &ett_homeplug_av_host_action_rsp,
+ &ett_homeplug_av_op_attr_req,
+ &ett_homeplug_av_op_attr_cnf,
+ &ett_homeplug_av_op_attr_data,
+ &ett_homeplug_av_enet_phy_req,
+ &ett_homeplug_av_enet_phy_cnf,
+ &ett_homeplug_av_tone_map_tx_req,
+ &ett_homeplug_av_tone_map_rx_req,
+ &ett_homeplug_av_tone_map_tx_cnf,
+ &ett_homeplug_av_tone_map_rx_cnf,
+ &ett_homeplug_av_tone_map_carriers,
+ &ett_homeplug_av_tone_map_carrier,
+ /* HPGP*/
+ &ett_homeplug_av_gp_cm_atten_char_profile,
+ &ett_homeplug_av_gp_cm_slac_user_data_tlv,
+ /* ST/IoTecha subtrees */
+ &ett_homeplug_av_st_iotecha_header,
+ &ett_homeplug_av_st_iotecha_type_length_value,
+ &ett_homeplug_av_st_iotecha_chanqual_int,
+ &ett_homeplug_av_st_iotecha_chanqual_cbld,
+ &ett_homeplug_av_st_iotecha_bss_entry
+ };
+
+
+ proto_homeplug_av = proto_register_protocol("HomePlug AV protocol", "HomePlug AV", "homeplug-av");
+
+ proto_register_field_array(proto_homeplug_av, hf, array_length(hf));
+
+ proto_register_subtree_array(ett, array_length(ett));
+
+ homeplug_av_handle = register_dissector("homeplug-av", dissect_homeplug_av, proto_homeplug_av);
+}
+
+void
+proto_reg_handoff_homeplug_av(void)
+{
+ dissector_add_uint("ethertype", ETHERTYPE_HOMEPLUG_AV, homeplug_av_handle);
+}
+
+/*
+ * Editor modelines
+ *
+ * Local Variables:
+ * c-file-style: "bsd"
+ * c-basic-offset: 4
+ * tab-width: 8
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * ex: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
+ */