diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
commit | e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch) | |
tree | 68cb5ef9081156392f1dd62a00c6ccc1451b93df /epan/dissectors/packet-homeplug-av.c | |
parent | Initial commit. (diff) | |
download | wireshark-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.c | 8463 |
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: + */ |