wireshark/epan/dissectors/packet-homeplug-av.c

4764 lines
185 KiB
C

/* packet-homeplug-av.c
* Routines for HomePlug AV dissection
*
* Copyright 2011, Florian Fainelli <florian[AT]openwrt.org>
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald[AT]wireshark.org>
* Copyright 1998 Gerald Combs
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#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 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 = -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;
/* 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;
/* Frame Control */
static int hf_homeplug_av_fc = -1;
static int hf_homeplug_av_fc_stei = -1;
static int hf_homeplug_av_fc_dtei = -1;
static int hf_homeplug_av_fc_lid = -1;
static int hf_homeplug_av_fc_cfs = -1;
static int hf_homeplug_av_fc_bdf = -1;
static int hf_homeplug_av_fc_hp10df = -1;
static int hf_homeplug_av_fc_hp11df = -1;
static int hf_homeplug_av_fc_ppb = -1;
static int hf_homeplug_av_fc_ble = -1;
static int hf_homeplug_av_fc_pbsz = -1;
static int hf_homeplug_av_fc_num_sym = -1;
static int hf_homeplug_av_fc_tmi_av = -1;
static int hf_homeplug_av_fc_fl_av = -1;
static int hf_homeplug_av_fc_mpdu_cnt = -1;
static int hf_homeplug_av_fc_burst_cnt = -1;
static int hf_homeplug_av_fc_clst = -1;
static int hf_homeplug_av_fc_rg_len = -1;
static int hf_homeplug_av_fc_mfs_cmd_mgmt = -1;
static int hf_homeplug_av_fc_mfs_cmd_data = -1;
static int hf_homeplug_av_fc_rsr = -1;
static int hf_homeplug_av_fc_mcf = -1;
static int hf_homeplug_av_fc_dccpcf = -1;
static int hf_homeplug_av_fc_mnbf = -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_del_type = -1;
static int hf_homeplug_av_nw_info_fccs_av = -1;
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 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_bcn = -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;
#define HOMEPLUG_AV_MMHDR_LEN 3 /* MM version (1) + MM type (2) */
#define HOMEPLUG_AV_PUBLIC_FRAG_COUNT_MASK 0x0F
#define HOMEPLUG_AV_PUBLIC_FRAG_INDEX_MASK 0xF0
#define HOMEPLUG_AV_MMTYPE_CC_DISC_LIST_REQ 0x0014
#define HOMEPLUG_AV_MMTYPE_CC_DISC_LIST_CNF 0x0015
#define HOMEPLUG_AV_MMTYPE_CM_ENC_PLD_IND 0x6004
#define HOMEPLUG_AV_MMTYPE_CM_ENC_PLD_RSP 0x6005
#define HOMEPLUG_AV_MMTYPE_CM_SET_KEY_REQ 0x6008
#define HOMEPLUG_AV_MMTYPE_CM_SET_KEY_CNF 0x6009
#define HOMEPLUG_AV_MMTYPE_CM_GET_KEY_REQ 0x600C
#define HOMEPLUG_AV_MMTYPE_CM_GET_KEY_CNF 0x600D
#define HOMEPLUG_AV_MMTYPE_CM_BRG_INFO_REQ 0x6020
#define HOMEPLUG_AV_MMTYPE_CM_BRG_INFO_CNF 0x6021
#define HOMEPLUG_AV_MMTYPE_CM_NW_INFO_REQ 0x6038
#define HOMEPLUG_AV_MMTYPE_CM_NW_INFO_CNF 0x6039
#define HOMEPLUG_AV_MMTYPE_CM_NW_STATS_REQ 0x6048
#define HOMEPLUG_AV_MMTYPE_CM_NW_STATS_CNF 0x6049
#define HOMEPLUG_AV_MMTYPE_GET_SW_REQ 0xA000
#define HOMEPLUG_AV_MMTYPE_GET_SW_CNF 0xA001
#define HOMEPLUG_AV_MMTYPE_WR_MEM_REQ 0xA004
#define HOMEPLUG_AV_MMTYPE_WR_MEM_CNF 0xA005
#define HOMEPLUG_AV_MMTYPE_RD_MEM_REQ 0xA008
#define HOMEPLUG_AV_MMTYPE_RD_MEM_CNF 0xA009
#define HOMEPLUG_AV_MMTYPE_ST_MAC_REQ 0xA00C
#define HOMEPLUG_AV_MMTYPE_ST_MAC_CNF 0xA00D
#define HOMEPLUG_AV_MMTYPE_GET_NVM_REQ 0xA010
#define HOMEPLUG_AV_MMTYPE_GET_NVM_CNF 0xA011
#define HOMEPLUG_AV_MMTYPE_RS_DEV_REQ 0xA01C
#define HOMEPLUG_AV_MMTYPE_RS_DEV_CNF 0xA01D
#define HOMEPLUG_AV_MMTYPE_WR_MOD_REQ 0xA020
#define HOMEPLUG_AV_MMTYPE_WR_MOD_CNF 0xA021
#define HOMEPLUG_AV_MMTYPE_WR_MOD_IND 0xA022
#define HOMEPLUG_AV_MMTYPE_RD_MOD_REQ 0xA024
#define HOMEPLUG_AV_MMTYPE_RD_MOD_CNF 0xA025
#define HOMEPLUG_AV_MMTYPE_NVM_MOD_REQ 0xA028
#define HOMEPLUG_AV_MMTYPE_NVM_MOD_CNF 0xA029
#define HOMEPLUG_AV_MMTYPE_WD_RPT_REQ 0xA02C
#define HOMEPLUG_AV_MMTYPE_WD_RPT_IND 0xA02E
#define HOMEPLUG_AV_MMTYPE_LNK_STATS_REQ 0xA030
#define HOMEPLUG_AV_MMTYPE_LNK_STATS_CNF 0xA031
#define HOMEPLUG_AV_MMTYPE_SNIFFER_REQ 0xA034
#define HOMEPLUG_AV_MMTYPE_SNIFFER_CNF 0xA035
#define HOMEPLUG_AV_MMTYPE_SNIFFER_IND 0xA036
#define HOMEPLUG_AV_MMTYPE_NW_INFO_REQ 0xA038
#define HOMEPLUG_AV_MMTYPE_NW_INFO_CNF 0xA039
#define HOMEPLUG_AV_MMTYPE_CP_RPT_REQ 0xA040
#define HOMEPLUG_AV_MMTYPE_CP_RPT_IND 0xA042
#define HOMEPLUG_AV_MMTYPE_FR_LBK_REQ 0xA048
#define HOMEPLUG_AV_MMTYPE_FR_LBK_CNF 0xA049
#define HOMEPLUG_AV_MMTYPE_LBK_STAT_REQ 0xA04C
#define HOMEPLUG_AV_MMTYPE_LBK_STAT_CNF 0xA04D
#define HOMEPLUG_AV_MMTYPE_SET_KEY_REQ 0xA050
#define HOMEPLUG_AV_MMTYPE_SET_KEY_CNF 0xA051
#define HOMEPLUG_AV_MMTYPE_MFG_STRING_REQ 0xA054
#define HOMEPLUG_AV_MMTYPE_MFG_STRING_CNF 0xA055
#define HOMEPLUG_AV_MMTYPE_RD_CBLOCK_REQ 0xA058
#define HOMEPLUG_AV_MMTYPE_RD_CBLOCK_CNF 0xA059
#define HOMEPLUG_AV_MMTYPE_SET_SDRAM_REQ 0xA05C
#define HOMEPLUG_AV_MMTYPE_SET_SDRAM_CNF 0xA05D
#define HOMEPLUG_AV_MMTYPE_HOST_ACTION_IND 0xA062
#define HOMEPLUG_AV_MMTYPE_HOST_ACTION_RSP 0xA063
#define HOMEPLUG_AV_MMTYPE_OP_ATTR_REQ 0xA068
#define HOMEPLUG_AV_MMTYPE_OP_ATTR_CNF 0xA069
#define HOMEPLUG_AV_MMTYPE_GET_ENET_PHY_REQ 0xA06C
#define HOMEPLUG_AV_MMTYPE_GET_ENET_PHY_CNF 0xA06D
#define HOMEPLUG_AV_MMTYPE_TONE_MAP_TX_REQ 0xA070
#define HOMEPLUG_AV_MMTYPE_TONE_MAP_TX_CNF 0xA071
#define HOMEPLUG_AV_MMTYPE_TONE_MAP_RX_REQ 0xA090
#define HOMEPLUG_AV_MMTYPE_TONE_MAP_RX_CNF 0xA091
static const value_string homeplug_av_mmtype_vals[] = {
/* Public MMEs */
{ HOMEPLUG_AV_MMTYPE_CC_DISC_LIST_REQ, "Central Coordination Discovery List Request" },
{ HOMEPLUG_AV_MMTYPE_CC_DISC_LIST_CNF, "Central Coordination Discovery List Confirmation" },
{ HOMEPLUG_AV_MMTYPE_CM_ENC_PLD_IND, "Encrypted Payload Indicate" },
{ HOMEPLUG_AV_MMTYPE_CM_ENC_PLD_RSP, "Encrypted Payload Respons" },
{ HOMEPLUG_AV_MMTYPE_CM_SET_KEY_REQ, "Set Key Request" },
{ HOMEPLUG_AV_MMTYPE_CM_SET_KEY_CNF, "Set Key Confirmation" },
{ HOMEPLUG_AV_MMTYPE_CM_GET_KEY_REQ, "Get Key Request" },
{ HOMEPLUG_AV_MMTYPE_CM_GET_KEY_CNF, "Get Key Confirmation" },
{ HOMEPLUG_AV_MMTYPE_CM_BRG_INFO_REQ, "Get Bridge Informations Request" },
{ HOMEPLUG_AV_MMTYPE_CM_BRG_INFO_CNF, "Get Bridge Informations Confirmation" },
{ HOMEPLUG_AV_MMTYPE_CM_NW_INFO_REQ, "Get Network Informations Request" },
{ HOMEPLUG_AV_MMTYPE_CM_NW_INFO_CNF, "Get Network Informations Confirmation" },
{ HOMEPLUG_AV_MMTYPE_CM_NW_STATS_REQ, "Get Network Statistics Request" },
{ HOMEPLUG_AV_MMTYPE_CM_NW_STATS_CNF, "Get Network Statistics Confirmation" },
/* Intellon vendor-specific MMEs */
{ HOMEPLUG_AV_MMTYPE_GET_SW_REQ, "Get Device/SW Version Request" },
{ HOMEPLUG_AV_MMTYPE_GET_SW_CNF, "Get Device/SW Version Confirmation" },
{ HOMEPLUG_AV_MMTYPE_WR_MEM_REQ, "Write MAC Memory Request" },
{ HOMEPLUG_AV_MMTYPE_WR_MEM_CNF, "Write MAC Memory Confirmation" },
{ HOMEPLUG_AV_MMTYPE_RD_MEM_REQ, "Read MAC Memory Request" },
{ HOMEPLUG_AV_MMTYPE_RD_MEM_CNF, "Read MAC Memory Confirmation" },
{ HOMEPLUG_AV_MMTYPE_ST_MAC_REQ, "Start MAC Request" },
{ HOMEPLUG_AV_MMTYPE_ST_MAC_CNF, "Start MAC Confirmation" },
{ HOMEPLUG_AV_MMTYPE_GET_NVM_REQ, "Get NVM Parameters Request" },
{ HOMEPLUG_AV_MMTYPE_GET_NVM_CNF, "Get NVM Parameters Confirmation" },
{ HOMEPLUG_AV_MMTYPE_RS_DEV_REQ, "Reset Device Request" },
{ HOMEPLUG_AV_MMTYPE_RS_DEV_CNF, "Reset Device Confirmation" },
{ HOMEPLUG_AV_MMTYPE_WR_MOD_REQ, "Write Module Data Request" },
{ HOMEPLUG_AV_MMTYPE_WR_MOD_CNF, "Write Module Data Confirmation" },
{ HOMEPLUG_AV_MMTYPE_WR_MOD_IND, "Write Module Data Indicate" },
{ HOMEPLUG_AV_MMTYPE_RD_MOD_REQ, "Read Module Data Request" },
{ HOMEPLUG_AV_MMTYPE_RD_MOD_CNF, "Read Module Data Confirmation" },
{ HOMEPLUG_AV_MMTYPE_NVM_MOD_REQ, "Write Module Data to NVM Request" },
{ HOMEPLUG_AV_MMTYPE_NVM_MOD_CNF, "Write Module Data to NVM Confirmation" },
{ HOMEPLUG_AV_MMTYPE_WD_RPT_REQ, "Get Watchdog Report Request" },
{ HOMEPLUG_AV_MMTYPE_WD_RPT_IND, "Get Watchdog Report Indicate" },
{ HOMEPLUG_AV_MMTYPE_LNK_STATS_REQ, "Link Statistics Request" },
{ HOMEPLUG_AV_MMTYPE_LNK_STATS_CNF, "Link Statistics Confirmation" },
{ HOMEPLUG_AV_MMTYPE_SNIFFER_REQ, "Sniffer Request" },
{ HOMEPLUG_AV_MMTYPE_SNIFFER_CNF, "Sniffer Confirmation" },
{ HOMEPLUG_AV_MMTYPE_SNIFFER_IND, "Sniffer Indicate" },
{ HOMEPLUG_AV_MMTYPE_NW_INFO_REQ, "Network Info Request" },
{ HOMEPLUG_AV_MMTYPE_NW_INFO_CNF, "Network Info Confirmation" },
{ HOMEPLUG_AV_MMTYPE_CP_RPT_REQ, "Check Points Request" },
{ HOMEPLUG_AV_MMTYPE_CP_RPT_IND, "Check Points Indicate" },
{ HOMEPLUG_AV_MMTYPE_FR_LBK_REQ, "Loopback Request" },
{ HOMEPLUG_AV_MMTYPE_FR_LBK_CNF, "Loopback Confirmation" },
{ HOMEPLUG_AV_MMTYPE_LBK_STAT_REQ, "Loopback Status Request" },
{ HOMEPLUG_AV_MMTYPE_LBK_STAT_CNF, "Loopback Status Confirmation" },
{ HOMEPLUG_AV_MMTYPE_SET_KEY_REQ, "Set Encryption Key Request" },
{ HOMEPLUG_AV_MMTYPE_SET_KEY_CNF, "Set Encryption Key Confirmation" },
{ HOMEPLUG_AV_MMTYPE_MFG_STRING_REQ, "Get Manufacturer String Request" },
{ HOMEPLUG_AV_MMTYPE_MFG_STRING_CNF, "Get Manufacturer String Confirmation" },
{ HOMEPLUG_AV_MMTYPE_RD_CBLOCK_REQ, "Read Configuration Block Request" },
{ HOMEPLUG_AV_MMTYPE_RD_CBLOCK_CNF, "Read Configuration Block Confirmation" },
{ HOMEPLUG_AV_MMTYPE_SET_SDRAM_REQ, "Set SDRAM Configuration Request" },
{ HOMEPLUG_AV_MMTYPE_SET_SDRAM_CNF, "Set SDRAM Configuration Confirmation" },
{ HOMEPLUG_AV_MMTYPE_HOST_ACTION_IND, "Embedded Host Action Required Indication" },
{ HOMEPLUG_AV_MMTYPE_HOST_ACTION_RSP, "Embedded Host Action Required Respons" },
{ HOMEPLUG_AV_MMTYPE_OP_ATTR_REQ, "Get Device Attributes Request" },
{ HOMEPLUG_AV_MMTYPE_OP_ATTR_CNF, "Get Device Attributes Confirmation" },
{ HOMEPLUG_AV_MMTYPE_GET_ENET_PHY_REQ, "Get Ethernet PHY Settings Request" },
{ HOMEPLUG_AV_MMTYPE_GET_ENET_PHY_CNF, "Get Ethernet PHY Settings Confirmation" },
{ HOMEPLUG_AV_MMTYPE_TONE_MAP_TX_REQ, "Tone Map Tx Characteristics Request" },
{ HOMEPLUG_AV_MMTYPE_TONE_MAP_TX_CNF, "Tone Map Tx Characteristics Confirmation" },
{ HOMEPLUG_AV_MMTYPE_TONE_MAP_RX_REQ, "Tone Map Rx Characteristics Request" },
{ HOMEPLUG_AV_MMTYPE_TONE_MAP_RX_CNF, "Tone Map Rx Characteristics Confirmation" },
{ 0, NULL }
};
static value_string_ext homeplug_av_mmtype_vals_ext = VALUE_STRING_EXT_INIT(homeplug_av_mmtype_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 0x06
#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
static const value_string homeplug_nw_info_access_vals[] = {
{ 0x00, "In-home" },
{ 0x01, "Access" },
{ 0, NULL }
};
#define HOMEPLUG_AV_PEKS_MASK 0x0F
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_AVLN_STATUS_MASK 0x0F
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 0xff
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_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 0x1FF
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 }
};
#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));
}
/* Dissection of MMHDR */
static void
dissect_homeplug_av_mmhdr(ptvcursor_t *cursor, guint8 *homeplug_av_mmver, guint16 *homeplug_av_mmtype)
{
proto_item *ti;
proto_tree *ti_mmtype;
proto_tree *ti_vendor;
proto_tree *ti_public;
guint8 lsb, msb, mmv;
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;
/* Header in HomePlug AV 1.1 is 2 bytes larger (Fragmentation information) */
if (mmv)
{
ti = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mmhdr, 5, ENC_NA);
}
else
{
ti = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mmhdr, 3, ENC_NA);
}
if (!ptvcursor_tree(cursor))
return;
ptvcursor_push_subtree(cursor, ti, ett_homeplug_av_mmhdr);
{
ptvcursor_add(cursor, hf_homeplug_av_mmhdr_mmver, 1, ENC_BIG_ENDIAN);
ti_mmtype = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mmhdr_mmtype, 2, ENC_LITTLE_ENDIAN);
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))
{
ti_vendor = ptvcursor_add_no_advance(cursor, hf_homeplug_av_vendor, -1, 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(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_no_advance(cursor, hf_homeplug_av_nw_info_del_type, 1, ENC_BIG_ENDIAN);
ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_info_access, 1, ENC_BIG_ENDIAN);
ptvcursor_add(cursor, hf_homeplug_av_nw_info_snid, 1, ENC_BIG_ENDIAN);
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_nw_info_fccs_av, 3, ENC_NA);
}
ptvcursor_pop_subtree(cursor);
}
/* Frame control */
static void
dissect_homeplug_av_frame_control(ptvcursor_t *cursor)
{
proto_item *it;
if (!ptvcursor_tree(cursor))
return;
it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc, -1, ENC_NA);
ptvcursor_push_subtree(cursor, it, ett_homeplug_av_fc);
{
ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_info_del_type, 1, ENC_BIG_ENDIAN);
ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_info_access, 1, ENC_BIG_ENDIAN);
ptvcursor_add(cursor, hf_homeplug_av_nw_info_snid, 1, ENC_BIG_ENDIAN);
ptvcursor_add(cursor, hf_homeplug_av_fc_stei, 1, ENC_BIG_ENDIAN);
ptvcursor_add(cursor, hf_homeplug_av_fc_dtei, 1, ENC_BIG_ENDIAN);
ptvcursor_add(cursor, hf_homeplug_av_fc_lid, 1, ENC_BIG_ENDIAN);
ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_cfs, 1, ENC_BIG_ENDIAN);
ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_bdf, 1, ENC_BIG_ENDIAN);
ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_hp10df, 1, ENC_BIG_ENDIAN);
ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_hp11df, 1, ENC_BIG_ENDIAN);
ptvcursor_add(cursor, hf_homeplug_av_nw_info_peks, 1, ENC_BIG_ENDIAN);
ptvcursor_add(cursor, hf_homeplug_av_fc_ppb, 1, ENC_BIG_ENDIAN);
ptvcursor_add(cursor, hf_homeplug_av_fc_ble, 1, ENC_BIG_ENDIAN);
ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_pbsz, 1, ENC_BIG_ENDIAN);
ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_num_sym, 1, ENC_BIG_ENDIAN);
ptvcursor_add(cursor, hf_homeplug_av_fc_tmi_av, 1, ENC_BIG_ENDIAN);
ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_mpdu_cnt, 2, ENC_BIG_ENDIAN);
ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_burst_cnt, 2, ENC_BIG_ENDIAN);
ptvcursor_add(cursor, hf_homeplug_av_fc_fl_av, 2, ENC_LITTLE_ENDIAN);
ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_clst, 1, ENC_BIG_ENDIAN);
ptvcursor_add(cursor, hf_homeplug_av_fc_rg_len, 1, ENC_BIG_ENDIAN);
ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_mfs_cmd_mgmt, 1, ENC_BIG_ENDIAN);
ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_mfs_cmd_data, 1, ENC_BIG_ENDIAN);
ptvcursor_add(cursor, hf_homeplug_av_fc_rsr, 1, ENC_BIG_ENDIAN);
ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_mcf, 1, ENC_BIG_ENDIAN);
ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_dccpcf, 1, ENC_BIG_ENDIAN);
ptvcursor_add_no_advance(cursor, hf_homeplug_av_fc_mnbf, 1, ENC_BIG_ENDIAN);
ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA);
ptvcursor_add(cursor, hf_homeplug_av_nw_info_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, -1, 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 specific vendor MMEs */
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|ENC_NA);
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;
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);
dissect_homeplug_av_frame_control(cursor);
dissect_homeplug_av_beacon(cursor);
}
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|ENC_NA);
}
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|ENC_NA);
ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw, 16, ENC_ASCII|ENC_NA);
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|ENC_NA);
ptvcursor_add(cursor, hf_homeplug_av_op_attr_data_sw_rel, 12, ENC_ASCII|ENC_NA);
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_mme(ptvcursor_t *cursor, guint8 homeplug_av_mmver, guint16 homeplug_av_mmtype)
{
switch (homeplug_av_mmtype) {
/* Public MMEs */
case HOMEPLUG_AV_MMTYPE_CC_DISC_LIST_CNF:
dissect_homeplug_av_cc_disc_list_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_CM_ENC_PLD_IND:
dissect_homeplug_av_cm_enc_pld_ind(cursor);
break;
case HOMEPLUG_AV_MMTYPE_CM_ENC_PLD_RSP:
dissect_homeplug_av_cm_enc_pld_rsp(cursor);
break;
case HOMEPLUG_AV_MMTYPE_CM_SET_KEY_REQ:
dissect_homeplug_av_cm_set_key_req(cursor);
break;
case HOMEPLUG_AV_MMTYPE_CM_SET_KEY_CNF:
dissect_homeplug_av_cm_set_key_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_CM_GET_KEY_REQ:
dissect_homeplug_av_cm_get_key_req(cursor);
break;
case HOMEPLUG_AV_MMTYPE_CM_GET_KEY_CNF:
dissect_homeplug_av_cm_get_key_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_CM_BRG_INFO_CNF:
dissect_homeplug_av_get_brg_infos_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_CM_NW_INFO_CNF:
dissect_homeplug_av_nw_infos_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_CM_NW_STATS_CNF:
dissect_homeplug_av_nw_stats_cnf(cursor);
break;
/* Intellon Vendor-specific MMEs */
case HOMEPLUG_AV_MMTYPE_GET_SW_CNF:
dissect_homeplug_av_get_sw_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_WR_MEM_REQ:
dissect_homeplug_av_wr_mem_req(cursor);
break;
case HOMEPLUG_AV_MMTYPE_WR_MEM_CNF:
dissect_homeplug_av_wr_mem_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_RD_MEM_REQ:
dissect_homeplug_av_rd_mem_req(cursor);
break;
case HOMEPLUG_AV_MMTYPE_RD_MEM_CNF:
dissect_homeplug_av_rd_mem_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_ST_MAC_REQ:
dissect_homeplug_av_st_mac_req(cursor);
break;
case HOMEPLUG_AV_MMTYPE_ST_MAC_CNF:
dissect_homeplug_av_st_mac_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_GET_NVM_CNF:
dissect_homeplug_av_get_nvm_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_RS_DEV_CNF:
dissect_homeplug_av_rs_dev_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_WR_MOD_REQ:
dissect_homeplug_av_wr_mod_req(cursor);
break;
case HOMEPLUG_AV_MMTYPE_WR_MOD_CNF:
dissect_homeplug_av_wr_mod_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_WR_MOD_IND:
dissect_homeplug_av_wr_mod_ind(cursor);
break;
case HOMEPLUG_AV_MMTYPE_RD_MOD_REQ:
dissect_homeplug_av_rd_mod_req(cursor);
break;
case HOMEPLUG_AV_MMTYPE_RD_MOD_CNF:
dissect_homeplug_av_rd_mod_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_NVM_MOD_REQ:
dissect_homeplug_av_mod_nvm_req(cursor);
break;
case HOMEPLUG_AV_MMTYPE_NVM_MOD_CNF:
dissect_homeplug_av_mod_nvm_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_WD_RPT_REQ:
dissect_homeplug_av_wd_rpt_req(cursor);
break;
case HOMEPLUG_AV_MMTYPE_WD_RPT_IND:
dissect_homeplug_av_wd_rpt_ind(cursor);
break;
case HOMEPLUG_AV_MMTYPE_LNK_STATS_REQ:
dissect_homeplug_av_lnk_stats_req(cursor);
break;
case HOMEPLUG_AV_MMTYPE_LNK_STATS_CNF:
dissect_homeplug_av_lnk_stats_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_SNIFFER_REQ:
dissect_homeplug_av_sniffer_req(cursor);
break;
case HOMEPLUG_AV_MMTYPE_SNIFFER_CNF:
dissect_homeplug_av_sniffer_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_SNIFFER_IND:
dissect_homeplug_av_sniffer_ind(cursor);
break;
case HOMEPLUG_AV_MMTYPE_NW_INFO_CNF:
dissect_homeplug_av_nw_info_cnf(cursor, homeplug_av_mmver);
break;
case HOMEPLUG_AV_MMTYPE_CP_RPT_REQ:
dissect_homeplug_av_cp_rpt_req(cursor);
break;
case HOMEPLUG_AV_MMTYPE_CP_RPT_IND:
dissect_homeplug_av_cp_rpt_ind(cursor);
break;
case HOMEPLUG_AV_MMTYPE_FR_LBK_REQ:
dissect_homeplug_av_fr_lbk_req(cursor);
break;
case HOMEPLUG_AV_MMTYPE_FR_LBK_CNF:
dissect_homeplug_av_fr_lbk_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_LBK_STAT_CNF:
dissect_homeplug_av_lbk_stat_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_SET_KEY_REQ:
dissect_homeplug_av_set_key_req(cursor);
break;
case HOMEPLUG_AV_MMTYPE_SET_KEY_CNF:
dissect_homeplug_av_set_key_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_MFG_STRING_CNF:
dissect_homeplug_av_mfg_string_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_RD_CBLOCK_CNF:
dissect_homeplug_av_rd_cblock_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_SET_SDRAM_REQ:
dissect_homeplug_av_set_sdram_req(cursor);
break;
case HOMEPLUG_AV_MMTYPE_SET_SDRAM_CNF:
dissect_homeplug_av_set_sdram_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_HOST_ACTION_IND:
dissect_homeplug_av_host_action_ind(cursor);
break;
case HOMEPLUG_AV_MMTYPE_HOST_ACTION_RSP:
dissect_homeplug_av_host_action_rsp(cursor);
break;
case HOMEPLUG_AV_MMTYPE_OP_ATTR_REQ:
dissect_homeplug_av_op_attr_req(cursor);
break;
case HOMEPLUG_AV_MMTYPE_OP_ATTR_CNF:
dissect_homeplug_av_op_attr_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_GET_ENET_PHY_REQ:
dissect_homeplug_av_get_enet_phy_req(cursor);
break;
case HOMEPLUG_AV_MMTYPE_GET_ENET_PHY_CNF:
dissect_homeplug_av_get_enet_phy_cnf(cursor);
break;
case HOMEPLUG_AV_MMTYPE_TONE_MAP_RX_REQ:
dissect_homeplug_av_tone_map_rx_req(cursor, homeplug_av_mmver);
break;
case HOMEPLUG_AV_MMTYPE_TONE_MAP_RX_CNF:
dissect_homeplug_av_tone_map_rx_cnf(cursor, homeplug_av_mmver);
break;
case HOMEPLUG_AV_MMTYPE_TONE_MAP_TX_REQ:
dissect_homeplug_av_tone_map_tx_req(cursor, homeplug_av_mmver);
break;
case HOMEPLUG_AV_MMTYPE_TONE_MAP_TX_CNF:
dissect_homeplug_av_tone_map_tx_cnf(cursor, homeplug_av_mmver);
break;
default:
break;
}
return;
}
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;
col_set_str(pinfo->cinfo, COL_PROTOCOL, "HomePlug AV");
col_set_str(pinfo->cinfo, COL_INFO, "MAC Management");
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(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);
col_append_sep_str(pinfo->cinfo, COL_INFO, ", ",
val_to_str_ext(homeplug_av_mmtype, &homeplug_av_mmtype_vals_ext, "Unknown 0x%x"));
dissect_homeplug_av_mme(cursor, homeplug_av_mmver, homeplug_av_mmtype);
}
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, 0x00, NULL, HFILL }
},
/* MM Header */
{ &hf_homeplug_av_mmhdr,
{ "MAC Management Header", "homeplug_av.mmhdr",
FT_NONE, BASE_NONE, NULL, 0x00, 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,
{ "Type", "homeplug_av.mmhdr.mmtype",
FT_UINT16, BASE_HEX | BASE_EXT_STRING, &homeplug_av_mmtype_vals_ext, 0x0000, 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, 0x0000, "Reserved", HFILL },
},
/* Public MME */
{ &hf_homeplug_av_public,
{ "Public MME", "homeplug_av.public",
FT_NONE, BASE_NONE, NULL, 0x00, 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, 0x00, NULL, HFILL }
},
/* Frame Control */
{ &hf_homeplug_av_fc,
{ "Frame control", "homeplug_av.fc",
FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_fc_stei,
{ "Source Terminal Equipment Identifier", "homeplug_av.fc.snei",
FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_fc_dtei,
{ "Destination Terminal Equipment Identifier", "homeplug_av.fc.dtei",
FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_fc_lid,
{ "Link ID", "homeplug_av.fc.lid",
FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_fc_cfs,
{ "Contention free session", "homeplug_av.fc.cfs",
FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }
},
{ &hf_homeplug_av_fc_bdf,
{ "Beacon detect flag", "homeplug_av.fc.bdf",
FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }
},
{ &hf_homeplug_av_fc_hp10df,
{ "Homeplug AV version 1.0", "homeplug_av.fc.hp10df",
FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }
},
{ &hf_homeplug_av_fc_hp11df,
{ "Homeplug AV version 1.1", "homeplug_av.fc.hp11df",
FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }
},
{ &hf_homeplug_av_fc_ppb,
{ "Pending PHY blocks", "homeplug_av.fc.ppb",
FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_fc_ble,
{ "Bit loading estimate", "homeplug_av.fc.ble",
FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_fc_pbsz,
{ "PHY block size", "homeplug_av.fc.pbsz",
FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }
},
{ &hf_homeplug_av_fc_num_sym,
{ "Number of symbols", "homeplug_av.fc.num_sym",
FT_UINT8, BASE_DEC, NULL, 0x06, NULL, HFILL }
},
{ &hf_homeplug_av_fc_tmi_av,
{ "Tonemap index", "homeplug_av.fc.tmi_av",
FT_UINT8, BASE_DEC, NULL, 0xF8, NULL, HFILL }
},
{ &hf_homeplug_av_fc_fl_av,
{ "Frame length", "homeplug_av.fc.fl_av",
FT_UINT16, BASE_DEC, NULL, 0x0FFF, NULL, HFILL }
},
{ &hf_homeplug_av_fc_mpdu_cnt,
{ "MPDU count", "homeplug_av.fc.mpdu_cnt",
FT_UINT8, BASE_DEC, NULL, 0x3000, NULL, HFILL }
},
{ &hf_homeplug_av_fc_burst_cnt,
{ "Burst count", "homeplug_av.fc.burst_cnt",
FT_UINT8, BASE_DEC, NULL, 0xC000, NULL, HFILL }
},
{ &hf_homeplug_av_fc_clst,
{ "Convergence layer SAP type", "homeplug_av.fc.clst",
FT_UINT8, BASE_HEX, NULL, 0x07, NULL, HFILL }
},
{ &hf_homeplug_av_fc_rg_len,
{ "Reverse grant length", "homeplug_av.fc.rg_len",
FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }
},
{ &hf_homeplug_av_fc_mfs_cmd_mgmt,
{ "Management MAC frame stream command", "homeplug_av.fc.mfs_cmd_mgmt",
FT_UINT8, BASE_DEC, NULL, 0x0E, NULL, HFILL }
},
{ &hf_homeplug_av_fc_mfs_cmd_data,
{ "Data MAC frame stream command", "homeplug_av.fc.mfs_data_mgmt",
FT_UINT8, BASE_DEC, NULL, 0x70, NULL, HFILL }
},
{ &hf_homeplug_av_fc_rsr,
{ "Request SACK transmission", "homeplug_av.fc.rsr",
FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }
},
{ &hf_homeplug_av_fc_mcf,
{ "Multicast", "homeplug_av.fc.mcf",
FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }
},
{ &hf_homeplug_av_fc_dccpcf,
{ "Different CP PHY clock", "homeplug_av.fc.dccpcf",
FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }
},
{ &hf_homeplug_av_fc_mnbf,
{ "Multinetwork broadcast", "homeplug_av.fc.mnbf",
FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }
},
/* Beacon body */
{ &hf_homeplug_av_bcn,
{ "Beacon", "homeplug_av.bcn",
FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_bcn_bts,
{ "Beacon timestamp", "homeplug_av.bcn.bts",
FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_bcn_bto_0,
{ "Beacon transmission offset 0", "homeplug_av.bcn.bto_0",
FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_bcn_bto_1,
{ "Beacon transmission offset 1", "homeplug_av.bcn.bto_1",
FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_bcn_bto_2,
{ "Beacon transmission offset 2", "homeplug_av.bcn.bto_2",
FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_bcn_bto_3,
{ "Beacon transmission offset 3", "homeplug_av.bcn.bto_3",
FT_UINT16, BASE_HEX, NULL, 0x00, 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, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cc_sta_info,
{ "Station information", "homeplug_av.cc_disc_list_cnf.sta_info",
FT_NONE, BASE_NONE, NULL, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cc_net_info,
{ "Network information", "homeplug_av.cc_disc_list_cnf.net_info",
FT_NONE, BASE_NONE, NULL, 0x00, 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, 0x00, 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, "Unknown", 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, 0x00, NULL, HFILL }
},
/* Shared encrypted related fields */
{ &hf_homeplug_av_nw_info_del_type,
{ "Delimiter type", "homeplug_av.nw_info.del_type",
FT_UINT8, BASE_HEX, NULL, 0x07, NULL, HFILL }
},
{ &hf_homeplug_av_nw_info_fccs_av,
{ "Frame control check sequence", "homeplug_av.nw_info.fccs_av",
FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
{ &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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_nw_info_pmn,
{ "Protocol message number", "homeplug_av.nw_info.pmn",
FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_nw_info_my_nonce,
{ "My nonce", "homeplug_av.nw_info.my_nonce",
FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_nw_info_your_nonce,
{ "Your nonce", "homeplug_av.nw_info.your_nonce",
FT_UINT32, BASE_HEX, NULL, 0x00, 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, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cm_enc_pld_ind_uuid,
{ "UUID", "homeplug_av.cm_enc_pld_ind.uuid",
FT_GUID, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cm_enc_pld_ind_len,
{ "Length", "homeplug_av.cm_enc_pld_ind.len",
FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cm_enc_pld_ind_pld,
{ "Encrypted payload", "homeplug_av.cm_enc_pld_ind.pld",
FT_NONE, BASE_NONE, NULL, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_brg_infos_cnf_brd,
{ "Bridging", "homeplug_av.brg_infos_cnf.brd",
FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_brg_infos_cnf_btei,
{ "Bridge Terminal Equipement Identifier", "homeplug_av.brg_infos_cnf.btei",
FT_UINT8, BASE_DEC, NULL, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_brg_infos_cnf_mac,
{ "Bridged Destination Address", "homeplug_av.brg_infos_cnf.mac",
FT_ETHER, BASE_NONE, NULL, 0x00, 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, 0x00, 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, 0x00, NULL, HFILL }
},
/* Vendor Specific */
{ &hf_homeplug_av_vendor,
{ "Vendor MME", "homeplug_av.vendor",
FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_vendor_oui,
{ "OUI", "homeplug_av.vendor.oui",
FT_BYTES, BASE_NONE, NULL, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_get_sw_cnf_status,
{ "Status", "homeplug_av.get_sw_cnf.status",
FT_UINT8, BASE_DEC, NULL, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_get_sw_cnf_ver_str,
{ "Version", "homeplug_av.get_sw_cnf.ver_str",
FT_STRING, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_get_sw_cnf_upg,
{ "Upgradable", "homeplug_av.get_sw_cnf.upg",
FT_BOOLEAN, BASE_NONE, NULL, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_mem_addr,
{ "Address", "homeplug_av.mem.addr",
FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_mem_len_32bits,
{ "Length", "homeplug_av.mem.len_32bits",
FT_UINT32, BASE_HEX, NULL, 0x00, 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, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_rd_mem_cnf,
{ "Read MAC Memory Confirmation", "homeplug_av.rd_mem_cnf",
FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
/* Start MAC Request */
{ &hf_homeplug_av_st_mac_req,
{ "Start MAC Request", "homeplug_av.st_mac_req",
FT_NONE, BASE_NONE, NULL, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_st_mac_req_img_len,
{ "Image Length", "homeplug_av.st_mac_req.img_len",
FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_st_mac_req_img_chksum,
{ "Image Checksum", "homeplug_av.st_mac_req.img_chksum",
FT_UINT32, BASE_HEX, NULL, 0x00, 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, 0x00, NULL, HFILL }
},
/* Start MAC Confirmation */
{ &hf_homeplug_av_st_mac_cnf,
{ "Start MAC Confirmation", "homeplug_av.st_mac_cnf",
FT_NONE, BASE_NONE, NULL, 0x00, 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), 0x00, "Unknown", 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, 0x00, 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), 0x00, "Unknown", HFILL }
},
{ &hf_homeplug_av_get_nvm_cnf_nvm_type,
{ "NVM Type", "homeplug_av.get_nvm_cnf.nvm_type",
FT_UINT32, BASE_HEX, NULL, 0x00, "Unknown", HFILL }
},
{ &hf_homeplug_av_get_nvm_cnf_nvm_page,
{ "NVM Page Size", "homeplug_av.get_nvm_cnf.nvm_page",
FT_UINT32, BASE_HEX, NULL, 0x00, "Unknown", HFILL }
},
{ &hf_homeplug_av_get_nvm_cnf_nvm_block,
{ "NVM Block Size", "homeplug_av.get_nvm_cnf.nvm_block",
FT_UINT32, BASE_HEX, NULL, 0x00, "Unknown", HFILL }
},
{ &hf_homeplug_av_get_nvm_cnf_nvm_size,
{ "NVM Memory Size", "homeplug_av.get_nvm_cnf.nvm_size",
FT_UINT32, BASE_HEX, NULL, 0x00, "Unknown", HFILL }
},
/* Reset Device Confirmation */
{ &hf_homeplug_av_rs_dev_cnf,
{ "Reset Device Confirmation", "homeplug_av.rs_dev_cnf",
FT_NONE, BASE_NONE, NULL, 0x00, 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), 0x00, "Unknown", HFILL }
},
/* Shared memory related fields */
{ &hf_homeplug_av_mem_len_16bits,
{ "Length", "homeplug_av.mem.len_16bits",
FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_mem_offset,
{ "Offset", "homeplug_av.mem.offset",
FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_mem_checksum,
{ "Checksum", "homeplug_av.mem.checksum",
FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_mem_data,
{ "Data", "homeplug_av.mem.data",
FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_mem_status,
{ "Status", "homeplug_av.mem.status",
FT_UINT8, BASE_HEX, VALS(homeplug_av_wr_rd_mem_status_vals), 0x00, "Unknown", 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, 0x00, 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, 0x00, 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), 0x00, "Unknown", 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, 0x00, 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), 0x00, "Unknown", 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, 0x00, 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, 0x00, 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), 0x00, "Unknown", HFILL }
},
{ &hf_homeplug_av_mac_module_id,
{ "Module ID", "homeplug_av.module_id",
FT_UINT8, BASE_HEX, VALS(homeplug_av_mac_module_id_vals), 0x00, "Unknown", 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, 0x00, 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, 0x00, 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), 0x00, "Unknown", 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_wd_rpt_req_session_id,
{ "Session ID", "homeplug_av.wd_rpt_req.session_id",
FT_UINT16, BASE_DEC, NULL, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_wd_rpt_ind_curr_part,
{ "Current Part", "homeplug_av.wd_rpt_ind.curr_part",
FT_UINT8, BASE_DEC, NULL, 0x00, 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, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_wd_rpt_ind_rdata,
{ "Report Data", "homeplug_av.wd_rpt_ind.rdata",
FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
/* Link Statistics Request */
{ &hf_homeplug_av_lnk_stats_req,
{ "Link Statistics Request", "homeplug_av.lnk_stats_req",
FT_NONE, BASE_NONE, NULL, 0x00, 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), 0x00, "Unknown", HFILL }
},
{ &hf_homeplug_av_lnk_stats_req_macaddr,
{ "Peer Node", "homeplug_av.lnk_stats_req.macaddr",
FT_ETHER, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
/* Link Statistics Confirmation */
{ &hf_homeplug_av_lnk_stats_cnf,
{ "Link Statistics Confirmation", "homeplug_av.lnk_stats_cnf",
FT_NONE, BASE_NONE, NULL, 0x00, 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), 0x00, "Unknown", 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), 0x00, "Unknown", HFILL }
},
{ &hf_homeplug_av_lnk_stats_cnf_tei,
{ "TEI", "homeplug_av.lnk_stats_cnf.tei",
FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_lnk_stats_cnf_lstats,
{ "Link statistics", "homeplug_av.lnk_stats_cnf.lstats",
FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
/* Link statistics members */
{ &hf_homeplug_av_lnk_stats_tx,
{ "Tx link statistics", "homeplug_av.lnk_stats.tx",
FT_NONE, BASE_NONE, NULL, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_lnk_stats_rx,
{ "Rx link statistics", "homeplug_av.lnk_stats.rx",
FT_NONE, BASE_NONE, NULL, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_lnk_stats_rx_tb_pass,
{ "Sum of Turbo Bit Error over successfully recevied PBs", "homeplug_av.lnk_stats.rx.tb_pass",
FT_UINT64, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_lnk_stats_rx_tb_fail,
{ "Sum of Turbo Bit Error over unsuccessfully recevied PBs", "homeplug_av.lnk_stats.rx.tb_fail",
FT_UINT64, BASE_DEC, NULL, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_rx_inv_stats,
{ "Rx Interval Statistics", "homeplug_av.lnk_stats.rx.inv",
FT_NONE, BASE_NONE, NULL, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, NULL, HFILL }
},
/* Sniffer Request */
{ &hf_homeplug_av_sniffer_req,
{ "Sniffer Request", "homeplug_av.sniffer_req",
FT_NONE, BASE_NONE, NULL, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_sniffer_cnf_status,
{ "Status", "homeplug_av.sniffer_cnf.status",
FT_UINT8, BASE_HEX, VALS(homeplug_av_sniffer_status_vals), 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_sniffer_cnf_state,
{ "State", "homeplug_av.sniffer_cnf.state",
FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_sniffer_cnf_da,
{ "Destination address", "homeplug_av.sniffer_cnf.da",
FT_ETHER, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
/* Sniffer Indicate */
{ &hf_homeplug_av_sniffer_ind,
{ "Sniffer Indicate", "homeplug_av.sniffer_ind",
FT_NONE, BASE_NONE, NULL, 0x00, 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), 0x00, "Unknown", HFILL }
},
{ &hf_homeplug_av_sniffer_ind_data,
{ "Sniffer Data", "homeplug_av.sniffer_ind.data",
FT_NONE, BASE_NONE, NULL, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_sniffer_data_bc_time,
{ "Beacon time", "homeplug_av.sniffer_ind.data.bc_time",
FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
/* Network Info Confirmation */
{ &hf_homeplug_av_nw_info_cnf,
{ "Network Info Confirmation", "homeplug_av.nw_info_cnf",
FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_nw_info_net_info,
{ "Networks informations", "homeplug_av.nw_info_cnf.net_info",
FT_NONE, BASE_NONE, NULL, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_nw_info_nid,
{ "Network ID", "homeplug_av.nw_info.nid",
FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_nw_info_snid,
{ "Short Network ID", "homeplug_av.nw_info.snid",
FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_nw_info_tei,
{ "Terminal Equipement Identifer", "homeplug_av.nw_info.tei",
FT_UINT8, BASE_DEC, NULL, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_nw_info_cco_tei,
{ "CCo Terminal Equipement Identifier", "homeplug_av.nw_info_cnf.cco_tei",
FT_UINT8, BASE_DEC, NULL, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_nw_info_sta_tei,
{ "Station Terminal Equipement Identifier", "homeplug_av.nw_info_cnf.sta_indo.tei",
FT_UINT8, BASE_DEC, NULL, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cp_rpt_req_session_id,
{ "Session ID", "homeplug_av.cp_rpt_req.session_id",
FT_UINT16, BASE_DEC, NULL, 0x00, 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, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cp_rpt_ind_minor_ver,
{ "Minor version", "homeplug_av.cp_rpt_ind.minor_ver",
FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cp_rpt_ind_session_id,
{ "Session ID", "homeplug_av.cp_rpt_ind.session_id",
FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cp_rpt_ind_total_size,
{ "Total size", "homeplug_av.cp_rpt_ind.total_size",
FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cp_rpt_ind_blk_offset,
{ "Offset", "homeplug_av.cp_rpt_ind.blk_offset",
FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cp_rpt_ind_byte_index,
{ "Byte Index", "homeplug_av.cp_rpt_ind.byte_index",
FT_UINT32, BASE_DEC, NULL, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cp_rpt_ind_curr_part,
{ "Current part", "homeplug_av.cp_rpt_ind.curr_part",
FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cp_rpt_ind_data_len,
{ "Data length", "homeplug_av.cp_rpt_ind.data_len",
FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cp_rpt_ind_data_ofs,
{ "Data offset", "homeplug_av.cp_rpt_ind.data_ofs",
FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cp_rpt_ind_data,
{ "Report Data", "homeplug_av.cp_rpt_ind.data",
FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
/* Loopback Request */
{ &hf_homeplug_av_fr_lbk_req,
{ "Loopback Request", "homeplug_av.fr_lbk.req",
FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_fr_lbk_duration,
{ "Duration", "homeplug_av.lbk.duration",
FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_fr_lbk_len,
{ "Length", "homeplug_av.lbk.len",
FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_fr_lbk_req_data,
{ "Data", "homeplug_av.fr_lbj_req.data",
FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
/* Loopback Confirmation */
{ &hf_homeplug_av_fr_lbk_cnf,
{ "Loopback Confirmation", "homeplug_av.fr_lbk_cnf",
FT_NONE, BASE_NONE, NULL, 0x00, 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, 0x00, 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, 0x00, 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), 0x00, "Unknown", HFILL }
},
{ &hf_homeplug_av_set_key_req_nmk,
{ "NMK", "homeplug_av.set_key_req.nmk",
FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_set_key_req_rda,
{ "Destination Address", "homeplug_av.set_key_req.rda",
FT_ETHER, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_set_key_req_dak,
{ "DAK", "homeplug_av.set_key_req.dak",
FT_BYTES, BASE_NONE, NULL, 0x00, 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, 0x00, 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), 0x00, 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, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_mfg_string_cnf_string,
{ "Manufacturing String", "homeplug_av.mfg_string_cnf.string",
FT_STRING, BASE_NONE, NULL, 0x00, 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, 0x00, 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), 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_rd_cblock_cnf_len,
{ "Length", "homeplug_av.rd_block_cnf.len",
FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
/* Configuration Block Header */
{ &hf_homeplug_av_cblock_hdr,
{ "Configuration Block Header", "homeplug_av.cblock_hdr",
FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cblock_hdr_ver,
{ "Header Version Number", "homeplug_av.cblock_hdr.ver",
FT_UINT32, BASE_HEX, NULL, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cblock_img_addr,
{ "Image address in SDRAM", "homeplug_av.cblock_hdr.img_addr",
FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cblock_img_len,
{ "Image length", "homeplug_av.cblock_hdr.img_len",
FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cblock_img_chksum,
{ "Image Checksum", "homeplug_av.cblock_hdr.img_chksum",
FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cblock_entry_point,
{ "Entry Point", "homeplug_av.cblock_hdr.entry_point",
FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cblock_hdr_minor,
{ "Header minor version", "homeplug_av.cblock_hdr.minor",
FT_UINT8, BASE_DEC, NULL, 0x00, 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, "Unknown", 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, "Unknown", HFILL }
},
{ &hf_homeplug_av_cblock_hdr_module_id,
{ "Header module ID", "homeplug_av.cblock_hdr.module_id",
FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cblock_hdr_module_subid,
{ "Header module sub ID", "homeplug_av.cblock_hdr.module_subid",
FT_UINT32, BASE_HEX, NULL, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cblock_hdr_chksum,
{ "Header checksum", "homeplug_av.cblock_hdr.hdr_chksum",
FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
/* Configuration Block */
{ &hf_homeplug_av_cblock,
{ "Configuration Block", "homeplug_av.cblock",
FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cblock_sdram_size,
{ "SDRAM size", "homeplug_av.cblock.sdram_size",
FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cblock_sdram_conf,
{ "SDRAM Configuration Register", "homeplug_av.cblock.sdram_conf",
FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cblock_sdram_tim0,
{ "SDRAM Timing Register 0", "homeplug_av.cblock.sdram_tim0",
FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cblock_sdram_tim1,
{ "SDRAM Timing Register 1", "homeplug_av.cblock.sdram_tim1",
FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cblock_sdram_cntrl,
{ "SDRAM Control Register", "homeplug_av.cblock.sdram_cntrl",
FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cblock_sdram_refresh,
{ "SDRAM Refresh Register", "homeplug_av.cblock.sdram_refresh",
FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_cblock_mac_clock,
{ "MAC Clock Register", "homeplug_av.cblock.mac_clock",
FT_UINT32, BASE_HEX, NULL, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_set_sdram_req_chksum,
{ "Checksum", "homeplug_av.set_sdram_req.chksum",
FT_UINT32, BASE_HEX, NULL, 0x00, 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, 0x00, 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), 0x00, "Unknown", 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, 0x00, 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), 0x00, NULL, HFILL }
},
/* Embedded Host Action Required Reponse */
{ &hf_homeplug_av_host_action_rsp,
{ "Embedded Host Action Required Response", "homeplug_av.host_action_rsp",
FT_NONE, BASE_NONE, NULL, 0x00, 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, "Unknown", 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_op_attr_cookie,
{ "Cookie", "homeplug_av.op_attr.cookie",
FT_UINT32, BASE_DEC, NULL, 0x00, 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), 0x00, 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, 0x00, 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_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_op_attr_cnf_data,
{ "Data", "homeplug_av.op_attr_cnf.data",
FT_NONE, BASE_NONE, NULL, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_op_attr_data_sw,
{ "Software platform", "homeplug_av.op_attr_cnf.data.sw",
FT_STRING, BASE_NONE, NULL, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, "Unknown", 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, "Unknown", 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_tone_map_tx_req_mac,
{ "Peer address", "homeplug_av.tone_map_tx_req.mac",
FT_ETHER, BASE_NONE, NULL, 0x00, 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, 0x00, 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, "Unknown", 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_tone_map_rx_req_mac,
{ "Peer address", "homeplug_av.tone_map_rx_req.mac",
FT_ETHER, BASE_NONE, NULL, 0x00, 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, 0x00, 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, "Unknown", 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_tone_map_tx_cnf_status,
{ "Status", "homeplug_av.tone_map_tx_cnf.status",
FT_UINT8, BASE_HEX, VALS(homeplug_av_tone_map_status_vals), 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_tone_map_tx_cnf_len,
{ "Length", "homeplug_av.tone_map_tx_cnf.len",
FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_tone_map_tx_cnf_mac,
{ "Peer address", "homeplug_av.tone_map_tx_cnf.mac",
FT_ETHER, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_tone_map_tx_cnf_slot,
{ "Slot", "homeplug_av.tone_map_tx_cnf.slot",
FT_UINT8, BASE_DEC, NULL, 0x00, 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_UINT8, BASE_DEC, NULL, 0x00, 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, 0x00, 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, 0x00, 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), 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_tone_map_rx_cnf_len,
{ "Length", "homeplug_av.tone_map_rx_cnf.len",
FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_tone_map_rx_cnf_subver,
{ "MME Subversion", "homeplug_av.tone_map_rx_cnf.mmesubversion",
FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_tone_map_rx_cnf_mac,
{ "Peer address", "homeplug_av.tone_map_rx_cnf.mac",
FT_ETHER, BASE_NONE, NULL, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_tone_map_rx_cnf_slot,
{ "Slot", "homeplug_av.tone_map_rx_cnf.slot",
FT_UINT8, BASE_DEC, NULL, 0x00, 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, "Unknown", 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, 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, 0x00, NULL, HFILL }
},
{ &hf_homeplug_av_tone_map_carrier,
{ "Modulation per carrier", "homeplug_av.tone_map_cnf.carrier",
FT_NONE, BASE_NONE, NULL, 0x00, 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 }
}
};
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_bcn,
&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
};
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));
}
void
proto_reg_handoff_homeplug_av(void)
{
dissector_handle_t homeplug_av_handle;
homeplug_av_handle = create_dissector_handle(dissect_homeplug_av, proto_homeplug_av);
dissector_add_uint("ethertype", ETHERTYPE_HOMEPLUG_AV, homeplug_av_handle);
}
/*
* Editor modelines
*
* Local Variables:
* c-basic-offset: 3
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* ex: set shiftwidth=3 tabstop=8 expandtab:
* :indentSize=3:tabSize=8:noTabs=true:
*/