/* packet-homeplug-av.c * Routines for HomePlug AV dissection * * Copyright 2011, Florian Fainelli * Copyright 2016, Nora Sandler * * Wireshark - Network traffic analyzer * By Gerald Combs * Copyright 1998 Gerald Combs * * SPDX-License-Identifier: GPL-2.0-or-later */ #include "config.h" #include #include #include 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; /* Frame Control fields (for sniffer data) */ static int hf_homeplug_av_fc = -1; static int hf_homeplug_av_fc_del_type = -1; static int hf_homeplug_av_fc_access = -1; static int hf_homeplug_av_fc_snid = -1; static int hf_homeplug_av_fc_fccs_av = -1; /* Variant fields used by multiple MPDU types */ static int hf_homeplug_av_dtei = -1; static int hf_homeplug_av_stei = -1; static int hf_homeplug_av_lid = -1; static int hf_homeplug_av_cfs = -1; static int hf_homeplug_av_bdf = -1; static int hf_homeplug_av_hp10df = -1; static int hf_homeplug_av_hp11df = -1; static int hf_homeplug_av_svn = -1; static int hf_homeplug_av_rrtf = -1; static int hf_homeplug_av_fl_av = -1; static int hf_homeplug_av_ppb = -1; static int hf_homeplug_av_mfs_rsp_data = -1; static int hf_homeplug_av_mfs_rsp_mgmt = -1; /* Beacon */ static int hf_homeplug_av_bcn = -1; static int hf_homeplug_av_bcn_bts = -1; static int hf_homeplug_av_bcn_bto_0 = -1; static int hf_homeplug_av_bcn_bto_1 = -1; static int hf_homeplug_av_bcn_bto_2 = -1; static int hf_homeplug_av_bcn_bto_3 = -1; /* Beacon MPDU Payload */ static int hf_homeplug_av_bcn_payload = -1; static int hf_homeplug_av_bcn_type = -1; static int hf_homeplug_av_bcn_nid = -1; static int hf_homeplug_av_bcn_stei = -1; static int hf_homeplug_av_bcn_ncnr = -1; static int hf_homeplug_av_bcn_num_slots = -1; static int hf_homeplug_av_bcn_slot_use = -1; static int hf_homeplug_av_bcn_slot_id = -1; static int hf_homeplug_av_bcn_aclss = -1; static int hf_homeplug_av_bcn_hm = -1; static int hf_homeplug_av_bcn_nm = -1; static int hf_homeplug_av_bcn_npsm = -1; static int hf_homeplug_av_bcn_cco_cap = -1; static int hf_homeplug_av_bcn_rtsbf = -1; static int hf_homeplug_av_bcn_hoip = -1; static int hf_homeplug_av_bcn_rsf = -1; static int hf_homeplug_av_bcn_plevel = -1; static int hf_homeplug_av_bcn_bentries = -1; static int hf_homeplug_av_bcn_bpcs = -1; /* Start of Frame */ static int hf_homeplug_av_sof = -1; static int hf_homeplug_av_sof_peks = -1; static int hf_homeplug_av_sof_ble = -1; static int hf_homeplug_av_sof_pbsz = -1; static int hf_homeplug_av_sof_num_sym = -1; static int hf_homeplug_av_sof_tmi_av = -1; static int hf_homeplug_av_sof_mpdu_cnt = -1; static int hf_homeplug_av_sof_burst_cnt = -1; static int hf_homeplug_av_sof_bbf = -1; static int hf_homeplug_av_sof_mrtfl = -1; static int hf_homeplug_av_sof_clst = -1; static int hf_homeplug_av_sof_mfs_cmd_mgmt = -1; static int hf_homeplug_av_sof_mfs_cmd_data = -1; static int hf_homeplug_av_sof_rsr = -1; static int hf_homeplug_av_sof_mcf = -1; static int hf_homeplug_av_sof_dccpcf = -1; static int hf_homeplug_av_sof_mnbf = -1; static int hf_homeplug_av_sof_mfs_rsp_mgmt = -1; static int hf_homeplug_av_sof_mfs_rsp_data = -1; static int hf_homeplug_av_sof_bm_sack = -1; /* Selective Acknowledgement */ static int hf_homeplug_av_sack = -1; /* Request to Send/Clear to Send */ static int hf_homeplug_av_rtscts = -1; static int hf_homeplug_av_rtscts_rtsf = -1; static int hf_homeplug_av_rtscts_igf = -1; static int hf_homeplug_av_rtscts_mnbf = -1; static int hf_homeplug_av_rtscts_mcf = -1; static int hf_homeplug_av_rtscts_dur = -1; /* Sound */ static int hf_homeplug_av_sound = -1; static int hf_homeplug_av_sound_pbsz = -1; static int hf_homeplug_av_sound_bdf = -1; static int hf_homeplug_av_sound_saf = -1; static int hf_homeplug_av_sound_scf = -1; static int hf_homeplug_av_sound_req_tm = -1; static int hf_homeplug_av_sound_mpdu_cnt = -1; static int hf_homeplug_av_sound_src = -1; static int hf_homeplug_av_sound_add_req_tm = -1; static int hf_homeplug_av_sound_max_pb_sym = -1; static int hf_homeplug_av_sound_ecsf = -1; static int hf_homeplug_av_sound_ecuf = -1; static int hf_homeplug_av_sound_ems = -1; static int hf_homeplug_av_sound_esgisf = -1; static int hf_homeplug_av_sound_elgisf = -1; static int hf_homeplug_av_sound_efrs = -1; /* Reverse Start of Frame */ static int hf_homeplug_av_rsof = -1; static int hf_homeplug_av_rsof_fl = -1; static int hf_homeplug_av_rsof_tmi = -1; static int hf_homeplug_av_rsof_pbsz = -1; static int hf_homeplug_av_rsof_num_sym = -1; static int hf_homeplug_av_rsof_mfs_cmd_mgmt = -1; static int hf_homeplug_av_rsof_mfs_cmd_data = -1; /* Public MMEs */ static int hf_homeplug_av_public = -1; static int hf_homeplug_av_public_frag_count = -1; static int hf_homeplug_av_public_frag_index = -1; static int hf_homeplug_av_public_frag_seqnum = -1; static int hf_homeplug_av_cc_disc_list_cnf = -1; static int hf_homeplug_av_cc_disc_list_sta_cnt = -1; static int hf_homeplug_av_cc_sta_info = -1; static int hf_homeplug_av_cc_sta_info_mac = -1; static int hf_homeplug_av_cc_sta_info_tei = -1; static int hf_homeplug_av_cc_sta_info_same_net = -1; static int hf_homeplug_av_cc_sta_info_sig_level = -1; static int hf_homeplug_av_cc_sta_info_avg_ble = -1; static int hf_homeplug_av_cc_disc_list_net_cnt = -1; static int hf_homeplug_av_cc_net_info = -1; static int hf_homeplug_av_cc_net_info_hyb_mode = -1; static int hf_homeplug_av_cc_net_info_bcn_slots = -1; static int hf_homeplug_av_cc_net_info_cco_sts = -1; static int hf_homeplug_av_cc_net_info_bcn_ofs = -1; static int hf_homeplug_av_brg_infos_cnf = -1; static int hf_homeplug_av_brg_infos_cnf_brd = -1; static int hf_homeplug_av_brg_infos_cnf_btei = -1; static int hf_homeplug_av_brg_infos_cnf_num_stas = -1; static int hf_homeplug_av_brg_infos_cnf_mac = -1; static int hf_homeplug_av_cm_nw_infos_cnf = -1; static int hf_homeplug_av_nw_stats_cnf = -1; /* Shared network informations fields */ static int hf_homeplug_av_nw_info_peks = -1; static int hf_homeplug_av_nw_info_pid = -1; static int hf_homeplug_av_nw_info_prn = -1; static int hf_homeplug_av_nw_info_pmn = -1; static int hf_homeplug_av_nw_info_my_nonce = -1; static int hf_homeplug_av_nw_info_your_nonce = -1; static int hf_homeplug_av_nw_info_key_type = -1; static int hf_homeplug_av_nw_info_cco_cap = -1; static int hf_homeplug_av_nw_info_num_avlns = -1; static int hf_homeplug_av_nw_info_nid = -1; static int hf_homeplug_av_nw_info_snid = -1; static int hf_homeplug_av_nw_info_tei = -1; static int hf_homeplug_av_nw_info_sta_role = -1; static int hf_homeplug_av_nw_info_cco_mac = -1; static int hf_homeplug_av_nw_info_cco_tei = -1; static int hf_homeplug_av_nw_info_num_stas = -1; static int hf_homeplug_av_nw_info_access = -1; static int hf_homeplug_av_nw_info_num_coord = -1; static int hf_homeplug_av_cm_enc_pld_ind = -1; static int hf_homeplug_av_cm_enc_pld_ind_avlns = -1; static int hf_homeplug_av_cm_enc_pld_ind_iv = -1; static int hf_homeplug_av_cm_enc_pld_ind_uuid = -1; static int hf_homeplug_av_cm_enc_pld_ind_len = -1; static int hf_homeplug_av_cm_enc_pld_ind_pld = -1; static int hf_homeplug_av_cm_enc_pld_rsp = -1; static int hf_homeplug_av_cm_enc_pld_rsp_result = -1; static int hf_homeplug_av_cm_set_key_req = -1; static int hf_homeplug_av_cm_set_key_req_nw_key = -1; static int hf_homeplug_av_cm_set_key_cnf = -1; static int hf_homeplug_av_cm_set_key_cnf_result = -1; static int hf_homeplug_av_cm_get_key_req = -1; static int hf_homeplug_av_cm_get_key_req_type = -1; static int hf_homeplug_av_cm_get_key_req_has_key = -1; static int hf_homeplug_av_cm_get_key_cnf = -1; static int hf_homeplug_av_cm_get_key_cnf_result = -1; static int hf_homeplug_av_cm_get_key_cnf_rtype = -1; static int hf_homeplug_av_cm_get_key_cnf_key = -1; /* Intellon specific vendor MMEs */ static int hf_homeplug_av_get_sw_cnf = -1; static int hf_homeplug_av_get_sw_cnf_status = -1; static int hf_homeplug_av_get_sw_cnf_dev_id = -1; static int hf_homeplug_av_get_sw_cnf_ver_len = -1; static int hf_homeplug_av_get_sw_cnf_ver_str = -1; static int hf_homeplug_av_get_sw_cnf_upg = -1; /* Shared memory related fields */ static int hf_homeplug_av_mem_len_16bits = -1; static int hf_homeplug_av_mem_len_32bits = -1; static int hf_homeplug_av_mem_offset = -1; static int hf_homeplug_av_mem_checksum = -1; static int hf_homeplug_av_mem_data = -1; static int hf_homeplug_av_mem_addr = -1; static int hf_homeplug_av_mem_status = -1; static int hf_homeplug_av_wr_mem_req = -1; static int hf_homeplug_av_wr_mem_cnf = -1; static int hf_homeplug_av_rd_mem_req = -1; static int hf_homeplug_av_rd_mem_cnf = -1; static int hf_homeplug_av_mac_module_id = -1; static int hf_homeplug_av_st_mac_req = -1; static int hf_homeplug_av_st_mac_req_img_load = -1; static int hf_homeplug_av_st_mac_req_img_len = -1; static int hf_homeplug_av_st_mac_req_img_chksum = -1; static int hf_homeplug_av_st_mac_req_img_start = -1; static int hf_homeplug_av_st_mac_cnf = -1; static int hf_homeplug_av_st_mac_cnf_status = -1; static int hf_homeplug_av_get_nvm_cnf = -1; static int hf_homeplug_av_get_nvm_cnf_status = -1; static int hf_homeplug_av_get_nvm_cnf_nvm_type = -1; static int hf_homeplug_av_get_nvm_cnf_nvm_page = -1; static int hf_homeplug_av_get_nvm_cnf_nvm_block = -1; static int hf_homeplug_av_get_nvm_cnf_nvm_size = -1; static int hf_homeplug_av_rs_dev_cnf = -1; static int hf_homeplug_av_rs_dev_cnf_status = -1; static int hf_homeplug_av_wr_mod_req = -1; static int hf_homeplug_av_wr_mod_cnf = -1; static int hf_homeplug_av_wr_mod_cnf_status = -1; static int hf_homeplug_av_wr_mod_ind = -1; static int hf_homeplug_av_wr_mod_ind_status = -1; static int hf_homeplug_av_rd_mod_req = -1; static int hf_homeplug_av_rd_mod_cnf = -1; static int hf_homeplug_av_rd_mod_cnf_status = -1; static int hf_homeplug_av_mod_nvm_req = -1; static int hf_homeplug_av_mod_nvm_cnf = -1; static int hf_homeplug_av_mod_nvm_cnf_status = -1; static int hf_homeplug_av_wd_rpt_req = -1; static int hf_homeplug_av_wd_rpt_req_session_id = -1; static int hf_homeplug_av_wd_rpt_req_clr = -1; static int hf_homeplug_av_wd_rpt_ind = -1; static int hf_homeplug_av_wd_rpt_ind_status = -1; static int hf_homeplug_av_wd_rpt_ind_session_id = -1; static int hf_homeplug_av_wd_rpt_ind_num_parts = -1; static int hf_homeplug_av_wd_rpt_ind_curr_part = -1; static int hf_homeplug_av_wd_rpt_ind_rdata_len = -1; static int hf_homeplug_av_wd_rpt_ind_rdata_ofs = -1; static int hf_homeplug_av_wd_rpt_ind_rdata = -1; static int hf_homeplug_av_lnk_stats_req = -1; static int hf_homeplug_av_lnk_stats_req_mcontrol = -1; static int hf_homeplug_av_lnk_stats_req_dir = -1; static int hf_homeplug_av_lnk_stats_req_lid = -1; static int hf_homeplug_av_lnk_stats_req_macaddr = -1; static int hf_homeplug_av_lnk_stats_cnf = -1; static int hf_homeplug_av_lnk_stats_cnf_status = -1; static int hf_homeplug_av_lnk_stats_cnf_dir = -1; static int hf_homeplug_av_lnk_stats_cnf_lid = -1; static int hf_homeplug_av_lnk_stats_cnf_tei = -1; static int hf_homeplug_av_lnk_stats_cnf_lstats = -1; static int hf_homeplug_av_lnk_stats_tx = -1; static int hf_homeplug_av_lnk_stats_tx_mpdu_ack = -1; static int hf_homeplug_av_lnk_stats_tx_mpdu_col = -1; static int hf_homeplug_av_lnk_stats_tx_mpdu_fai = -1; static int hf_homeplug_av_lnk_stats_tx_pbs_pass = -1; static int hf_homeplug_av_lnk_stats_tx_pbs_fail = -1; static int hf_homeplug_av_lnk_stats_rx = -1; static int hf_homeplug_av_lnk_stats_rx_mpdu_ack = -1; static int hf_homeplug_av_lnk_stats_rx_mpdu_fai = -1; static int hf_homeplug_av_lnk_stats_rx_pbs_pass = -1; static int hf_homeplug_av_lnk_stats_rx_pbs_fail = -1; static int hf_homeplug_av_lnk_stats_rx_tb_pass = -1; static int hf_homeplug_av_lnk_stats_rx_tb_fail = -1; static int hf_homeplug_av_lnk_stats_rx_num_int = -1; static int hf_homeplug_av_rx_inv_stats = -1; static int hf_homeplug_av_rx_inv_phy_rate = -1; static int hf_homeplug_av_rx_inv_pbs_pass = -1; static int hf_homeplug_av_rx_inv_pbs_fail = -1; static int hf_homeplug_av_rx_inv_tb_pass = -1; static int hf_homeplug_av_rx_inv_tb_fail = -1; static int hf_homeplug_av_sniffer_req = -1; static int hf_homeplug_av_sniffer_req_ctrl = -1; static int hf_homeplug_av_sniffer_cnf = -1; static int hf_homeplug_av_sniffer_cnf_status = -1; static int hf_homeplug_av_sniffer_cnf_state = -1; static int hf_homeplug_av_sniffer_cnf_da = -1; static int hf_homeplug_av_sniffer_ind = -1; static int hf_homeplug_av_sniffer_ind_type = -1; static int hf_homeplug_av_sniffer_ind_data = -1; static int hf_homeplug_av_sniffer_data_dir = -1; static int hf_homeplug_av_sniffer_data_systime = -1; static int hf_homeplug_av_sniffer_data_bc_time = -1; static int hf_homeplug_av_nw_info_cnf = -1; static int hf_homeplug_av_nw_info_sta_info = -1; static int hf_homeplug_av_nw_info_net_info = -1; static int hf_homeplug_av_nw_info_sta_da = -1; static int hf_homeplug_av_nw_info_sta_tei = -1; static int hf_homeplug_av_nw_info_sta_bda = -1; static int hf_homeplug_av10_nw_info_sta_phy_dr_tx= -1; static int hf_homeplug_av10_nw_info_sta_phy_dr_rx= -1; static int hf_homeplug_av11_nw_info_sta_phy_dr_tx= -1; static int hf_homeplug_av11_nw_info_sta_cpling_tx = -1; static int hf_homeplug_av11_nw_info_sta_phy_dr_rx= -1; static int hf_homeplug_av11_nw_info_sta_cpling_rx = -1; static int hf_homeplug_av_cp_rpt_req = -1; static int hf_homeplug_av_cp_rpt_req_session_id = -1; static int hf_homeplug_av_cp_rpt_req_clr = -1; static int hf_homeplug_av_cp_rpt_ind = -1; static int hf_homeplug_av_cp_rpt_ind_status = -1; static int hf_homeplug_av_cp_rpt_ind_major_ver = -1; static int hf_homeplug_av_cp_rpt_ind_minor_ver = -1; static int hf_homeplug_av_cp_rpt_ind_session_id = -1; static int hf_homeplug_av_cp_rpt_ind_total_size = -1; static int hf_homeplug_av_cp_rpt_ind_blk_offset = -1; static int hf_homeplug_av_cp_rpt_ind_byte_index = -1; static int hf_homeplug_av_cp_rpt_ind_num_parts = -1; static int hf_homeplug_av_cp_rpt_ind_curr_part = -1; static int hf_homeplug_av_cp_rpt_ind_data_len = -1; static int hf_homeplug_av_cp_rpt_ind_data_ofs = -1; static int hf_homeplug_av_cp_rpt_ind_data = -1; static int hf_homeplug_av_fr_lbk_duration = -1; static int hf_homeplug_av_fr_lbk_len = -1; static int hf_homeplug_av_fr_lbk_req = -1; static int hf_homeplug_av_fr_lbk_req_data = -1; static int hf_homeplug_av_fr_lbk_cnf = -1; static int hf_homeplug_av_fr_lbk_cnf_status = -1; static int hf_homeplug_av_lbk_stat_cnf = -1; static int hf_homeplug_av_lbk_stat_cnf_status = -1; static int hf_homeplug_av_lbk_stat_cnf_lbk_stat = -1; static int hf_homeplug_av_set_key_req = -1; static int hf_homeplug_av_set_key_req_eks = -1; static int hf_homeplug_av_set_key_req_nmk = -1; static int hf_homeplug_av_set_key_req_rda = -1; static int hf_homeplug_av_set_key_req_dak = -1; static int hf_homeplug_av_set_key_cnf = -1; static int hf_homeplug_av_set_key_cnf_status = -1; static int hf_homeplug_av_mfg_string_cnf = -1; static int hf_homeplug_av_mfg_string_cnf_status = -1; static int hf_homeplug_av_mfg_string_cnf_len = -1; static int hf_homeplug_av_mfg_string_cnf_string = -1; static int hf_homeplug_av_rd_cblock_cnf = -1; static int hf_homeplug_av_rd_cblock_cnf_status = -1; static int hf_homeplug_av_rd_cblock_cnf_len = -1; static int hf_homeplug_av_cblock_hdr = -1; static int hf_homeplug_av_cblock_hdr_ver = -1; static int hf_homeplug_av_cblock_img_rom_addr = -1; static int hf_homeplug_av_cblock_img_addr = -1; static int hf_homeplug_av_cblock_img_len = -1; static int hf_homeplug_av_cblock_img_chksum = -1; static int hf_homeplug_av_cblock_entry_point = -1; static int hf_homeplug_av_cblock_hdr_minor = -1; static int hf_homeplug_av_cblock_hdr_img_type = -1; static int hf_homeplug_av_cblock_hdr_ignore_mask = -1; static int hf_homeplug_av_cblock_hdr_module_id = -1; static int hf_homeplug_av_cblock_hdr_module_subid= -1; static int hf_homeplug_av_cblock_next_hdr = -1; static int hf_homeplug_av_cblock_hdr_chksum = -1; static int hf_homeplug_av_cblock = -1; static int hf_homeplug_av_cblock_sdram_size = -1; static int hf_homeplug_av_cblock_sdram_conf = -1; static int hf_homeplug_av_cblock_sdram_tim0 = -1; static int hf_homeplug_av_cblock_sdram_tim1 = -1; static int hf_homeplug_av_cblock_sdram_cntrl = -1; static int hf_homeplug_av_cblock_sdram_refresh = -1; static int hf_homeplug_av_cblock_mac_clock = -1; static int hf_homeplug_av_set_sdram_req = -1; static int hf_homeplug_av_set_sdram_req_chksum = -1; static int hf_homeplug_av_set_sdram_cnf = -1; static int hf_homeplug_av_set_sdram_cnf_status = -1; static int hf_homeplug_av_host_action_ind = -1; static int hf_homeplug_av_host_action_ind_act = -1; static int hf_homeplug_av_host_action_rsp = -1; static int hf_homeplug_av_host_action_rsp_sts = -1; static int hf_homeplug_av_op_attr_cookie = -1; static int hf_homeplug_av_op_attr_rep_type = -1; static int hf_homeplug_av_op_attr_req = -1; static int hf_homeplug_av_op_attr_cnf = -1; static int hf_homeplug_av_op_attr_cnf_status = -1; static int hf_homeplug_av_op_attr_cnf_size = -1; static int hf_homeplug_av_op_attr_cnf_data = -1; static int hf_homeplug_av_op_attr_data_hw = -1; static int hf_homeplug_av_op_attr_data_sw = -1; static int hf_homeplug_av_op_attr_data_sw_major = -1; static int hf_homeplug_av_op_attr_data_sw_minor = -1; static int hf_homeplug_av_op_attr_data_sw_sub = -1; static int hf_homeplug_av_op_attr_data_sw_num = -1; static int hf_homeplug_av_op_attr_data_sw_date = -1; static int hf_homeplug_av_op_attr_data_sw_rel = -1; static int hf_homeplug_av_op_attr_data_sw_sdram_type = -1; static int hf_homeplug_av_op_attr_data_sw_linefreq = -1; static int hf_homeplug_av_op_attr_data_sw_zerocross = -1; static int hf_homeplug_av_op_attr_data_sw_sdram_size = -1; static int hf_homeplug_av_op_attr_data_sw_auth_mode = -1; static int hf_homeplug_av_enet_phy_req = -1; static int hf_homeplug_av_enet_phy_req_mcontrol = -1; static int hf_homeplug_av_enet_phy_req_addcaps = -1; static int hf_homeplug_av_enet_phy_cnf = -1; static int hf_homeplug_av_enet_phy_cnf_status = -1; static int hf_homeplug_av_enet_phy_cnf_speed = -1; static int hf_homeplug_av_enet_phy_cnf_duplex = -1; static int hf_homeplug_av_tone_map_tx_req = -1; static int hf_homeplug_av_tone_map_tx_req_mac = -1; static int hf_homeplug_av_tone_map_tx_req_slot = -1; static int hf_homeplug_av_tone_map_tx_req_coupling = -1; static int hf_homeplug_av_tone_map_rx_req = -1; static int hf_homeplug_av_tone_map_rx_req_mac = -1; static int hf_homeplug_av_tone_map_rx_req_slot = -1; static int hf_homeplug_av_tone_map_rx_req_coupling = -1; static int hf_homeplug_av_tone_map_tx_cnf = -1; static int hf_homeplug_av_tone_map_tx_cnf_status = -1; static int hf_homeplug_av_tone_map_tx_cnf_len = -1; static int hf_homeplug_av_tone_map_tx_cnf_mac = -1; static int hf_homeplug_av_tone_map_tx_cnf_slot = -1; static int hf_homeplug_av_tone_map_tx_cnf_num_tms = -1; static int hf_homeplug_av_tone_map_tx_cnf_num_act = -1; static int hf_homeplug_av_tone_map_rx_cnf = -1; static int hf_homeplug_av_tone_map_rx_cnf_status = -1; static int hf_homeplug_av_tone_map_rx_cnf_len = -1; static int hf_homeplug_av_tone_map_rx_cnf_subver = -1; static int hf_homeplug_av_tone_map_rx_cnf_coupling = -1; static int hf_homeplug_av_tone_map_rx_cnf_mac = -1; static int hf_homeplug_av_tone_map_rx_cnf_slot = -1; static int hf_homeplug_av_tone_map_rx_cnf_num_tms = -1; static int hf_homeplug_av_tone_map_rx_cnf_num_act = -1; static int hf_homeplug_av_tone_map_rx_cnf_agc = -1; static int hf_homeplug_av_tone_map_rx_cnf_gil = -1; static int hf_homeplug_av_tone_map_carriers = -1; static int hf_homeplug_av_tone_map_carrier = -1; static int hf_homeplug_av_tone_map_carrier_lo = -1; static int hf_homeplug_av_tone_map_carrier_hi = -1; static gint ett_homeplug_av = -1; static gint ett_homeplug_av_mmhdr = -1; static gint ett_homeplug_av_mmtype = -1; static gint ett_homeplug_av_fmi = -1; static gint ett_homeplug_av_vendor = -1; static gint ett_homeplug_av_public = -1; static gint ett_homeplug_av_fc = -1; static gint ett_homeplug_av_sof = -1; static gint ett_homeplug_av_sack = -1; static gint ett_homeplug_av_rtscts = -1; static gint ett_homeplug_av_sound = -1; static gint ett_homeplug_av_rsof = -1; static gint ett_homeplug_av_bcn = -1; static gint ett_homeplug_av_bcn_payload = -1; static gint ett_homeplug_av_cc_disc_list_cnf = -1; static gint ett_homeplug_av_cc_sta_info = -1; static gint ett_homeplug_av_cc_net_info = -1; static gint ett_homeplug_av_cm_enc_pld_ind = -1; static gint ett_homeplug_av_cm_enc_pld_rsp = -1; static gint ett_homeplug_av_cm_set_key_req = -1; static gint ett_homeplug_av_cm_set_key_cnf = -1; static gint ett_homeplug_av_cm_get_key_req = -1; static gint ett_homeplug_av_cm_get_key_cnf = -1; static gint ett_homeplug_av_brg_infos_cnf = -1; static gint ett_homeplug_av_cm_nw_infos_cnf = -1; static gint ett_homeplug_av_nw_stats_cnf = -1; static gint ett_homeplug_av_get_sw_cnf = -1; static gint ett_homeplug_av_wr_mem_req = -1; static gint ett_homeplug_av_wr_mem_cnf = -1; static gint ett_homeplug_av_rd_mem_req = -1; static gint ett_homeplug_av_st_mac_req = -1; static gint ett_homeplug_av_st_mac_cnf = -1; static gint ett_homeplug_av_rd_mem_cnf = -1; static gint ett_homeplug_av_get_nvm_cnf = -1; static gint ett_homeplug_av_rs_dev_cnf = -1; static gint ett_homeplug_av_wr_mod_req = -1; static gint ett_homeplug_av_wr_mod_cnf = -1; static gint ett_homeplug_av_wr_mod_ind = -1; static gint ett_homeplug_av_rd_mod_req = -1; static gint ett_homeplug_av_rd_mod_cnf = -1; static gint ett_homeplug_av_mod_nvm_req = -1; static gint ett_homeplug_av_mod_nvm_cnf = -1; static gint ett_homeplug_av_wd_rpt_req = -1; static gint ett_homeplug_av_wd_rpt_ind = -1; static gint ett_homeplug_av_lnk_stats_req = -1; static gint ett_homeplug_av_lnk_stats_cnf = -1; static gint ett_homeplug_av_lnk_stats_tx = -1; static gint ett_homeplug_av_lnk_stats_rx = -1; static gint ett_homeplug_av_lnk_stats_rx_inv = -1; static gint ett_homeplug_av_sniffer_req = -1; static gint ett_homeplug_av_sniffer_cnf = -1; static gint ett_homeplug_av_sniffer_ind = -1; static gint ett_homeplug_av_sniffer_ind_data = -1; static gint ett_homeplug_av_nw_info_cnf = -1; static gint ett_homeplug_av_nw_info_sta_info = -1; static gint ett_homeplug_av_nw_info_net_info = -1; static gint ett_homeplug_av_cp_rpt_req = -1; static gint ett_homeplug_av_cp_rpt_ind = -1; static gint ett_homeplug_av_fr_lbk_req = -1; static gint ett_homeplug_av_fr_lbk_cnf = -1; static gint ett_homeplug_av_lbk_stat_cnf = -1; static gint ett_homeplug_av_set_key_req = -1; static gint ett_homeplug_av_set_key_cnf = -1; static gint ett_homeplug_av_mfg_string_cnf = -1; static gint ett_homeplug_av_rd_cblock_cnf = -1; static gint ett_homeplug_av_cblock_hdr = -1; static gint ett_homeplug_av_cblock = -1; static gint ett_homeplug_av_set_sdram_req = -1; static gint ett_homeplug_av_set_sdram_cnf = -1; static gint ett_homeplug_av_host_action_ind = -1; static gint ett_homeplug_av_host_action_rsp = -1; static gint ett_homeplug_av_op_attr_req = -1; static gint ett_homeplug_av_op_attr_cnf = -1; static gint ett_homeplug_av_op_attr_data = -1; static gint ett_homeplug_av_enet_phy_req = -1; static gint ett_homeplug_av_enet_phy_cnf = -1; static gint ett_homeplug_av_tone_map_tx_req = -1; static gint ett_homeplug_av_tone_map_rx_req = -1; static gint ett_homeplug_av_tone_map_tx_cnf = -1; static gint ett_homeplug_av_tone_map_rx_cnf = -1; static gint ett_homeplug_av_tone_map_carriers = -1; static gint ett_homeplug_av_tone_map_carrier = -1; #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 #define HOMEPLUG_AV_NW_INFO_ACCESS_MASK 0x08 static const value_string homeplug_nw_info_access_vals[] = { { 0x00, "In-home" }, { 0x01, "Access" }, { 0, NULL } }; #define HOMEPLUG_AV_PEKS_MASK 0x0F #define HOMEPLUG_AV_SOF_PEKS_MASK 0xF0 static const value_string homeplug_av_peks_vals[] = { { 0x00, "Destination STA's DAK" }, { 0x01, "NMK known to STA" }, { 0x02, "TEK Index 0" }, { 0x03, "TEK Index 1" }, { 0x04, "TEK Index 2" }, { 0x05, "TEK Index 3" }, { 0x06, "TEK Index 4" }, { 0x07, "TEK Index 5" }, { 0x08, "TEK Index 6" }, { 0x09, "TEK Index 7" }, { 0x0A, "TEK Index 8" }, { 0x0B, "TEK Index 9" }, { 0x0C, "TEK Index 10" }, { 0x0D, "TEK Index 11" }, { 0x0E, "TEK Index 12" }, { 0x0F, "No key" }, { 0, NULL } }; static value_string_ext homeplug_av_peks_vals_ext = VALUE_STRING_EXT_INIT(homeplug_av_peks_vals); #define HOMEPLUG_AV_CCO_CAP_MASK 0x0C static const value_string homeplug_av_bcn_cco_cap_vals[] = { { 0x0, "CSMA-only (no QoS/TDMA)" }, { 0x1, "Uncoordinated mode QoS/TDMA" }, { 0x2, "Coordianted mode QoS/TDMA" }, { 0x3, "Reserved" }, { 0, NULL } }; #define HOMEPLUG_AV_AVLN_STATUS_MASK 0x0F #define HOMEPLUG_AV_RSF_MASK 0x10 #define HOMEPLUG_AV_PLEVEL_MASK 0xE0 static const value_string homeplug_av_avln_status_vals[] = { { 0x00, "Unassociated and Level-0 CCo capable" }, { 0x01, "Unassociated and Level-1 CCo capable" }, { 0x02, "Unassociated and Level-2 CCo capable" }, { 0x03, "Unassociated and Level-3 CCo capable" }, { 0x04, "Associated but not PCo capable" }, { 0x05, "Associated but and PCo capable" }, { 0x06, "Reserved" }, { 0x07, "Reserved" }, { 0x08, "CCo of an AV Logical Network" }, { 0, NULL } }; #define HOMEPLUG_AV_PID_AUTH_STA 0x00 #define HOMEPLUG_AV_PID_PROV_AUTH_NEK 0x01 #define HOMEPLUG_AV_PID_PROV_AUTH_DAK 0x02 #define HOMEPLUG_AV_PID_PROV_AUTH_UKE 0x03 #define HOMEPLUG_AV_PID_HLE 0x04 #define HOMEPLUG_AV_PID_MASK 0x07 static const value_string homeplug_av_pid_vals[] = { { HOMEPLUG_AV_PID_AUTH_STA, "Authentication request by new STA" }, { HOMEPLUG_AV_PID_PROV_AUTH_NEK, "Provision authenticated STA with new NEK by CCo" }, { HOMEPLUG_AV_PID_PROV_AUTH_DAK, "Provision STA with NMK using DAK" }, { HOMEPLUG_AV_PID_PROV_AUTH_UKE, "Provision STA with NMK using UKE" }, { HOMEPLUG_AV_PID_HLE, "HLE" }, { 0, NULL } }; #define HOMEPLUG_AV_KEY_TYPE_DAK 0x00 #define HOMEPLUG_AV_KEY_TYPE_NMK 0x01 #define HOMEPLUG_AV_KEY_TYPE_NEK 0x02 #define HOMEPLUG_AV_KEY_TYPE_TEK 0x03 #define HOMEPLUG_AV_KEY_TYPE_HASH 0x04 #define HOMEPLUG_AV_KEY_TYPE_NONE 0x05 #define HOMEPLUG_AV_KEY_TYPE_MASK 0x07 static const value_string homeplug_av_key_type_vals[] = { { HOMEPLUG_AV_KEY_TYPE_DAK, "DAK" }, { HOMEPLUG_AV_KEY_TYPE_NMK, "NMK" }, { HOMEPLUG_AV_KEY_TYPE_NEK, "NEK" }, { HOMEPLUG_AV_KEY_TYPE_TEK, "TEK" }, { HOMEPLUG_AV_KEY_TYPE_HASH, "Hash Key" }, { HOMEPLUG_AV_KEY_TYPE_NONE, "Nonce only (no key)" }, { 0, NULL } }; #define HOMEPLUG_AV_DEV_ID_MASK 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_DEL_TYPE_BCN 0x00 #define HOMEPLUG_AV_DEL_TYPE_SOF 0x01 #define HOMEPLUG_AV_DEL_TYPE_SACK 0x02 #define HOMEPLUG_AV_DEL_TYPE_RTS 0x03 #define HOMEPLUG_AV_DEL_TYPE_SOUND 0x04 #define HOMEPLUG_AV_DEL_TYPE_RSOF 0x05 #define HOMEPLUG_AV_DEL_TYPE_MASK 0x07 static const value_string homeplug_av_fc_del_type_vals[] = { { HOMEPLUG_AV_DEL_TYPE_BCN, "Beacon" }, { HOMEPLUG_AV_DEL_TYPE_SOF, "Start-of-Frame" }, { HOMEPLUG_AV_DEL_TYPE_SACK, "Selective Acknowledgement" }, { HOMEPLUG_AV_DEL_TYPE_RTS, "Request-to-Send/Clear-to-Send" }, { HOMEPLUG_AV_DEL_TYPE_SOUND, "Sound" }, { HOMEPLUG_AV_DEL_TYPE_RSOF, "Reverse Start-of-Frame" }, { 0x06, "Unknown" }, { 0x07, "Unknown" }, { 0, NULL } }; /* MPDU Values */ #define HOMEPLUG_AV_SNID_MASK 0xf0 #define HOMEPLUG_AV_CFS_MASK 0x01 #define HOMEPLUG_AV_BDF_MASK 0x02 #define HOMEPLUG_AV_HP10DF_MASK 0x04 #define HOMEPLUG_AV_HP11DF_MASK 0x08 #define HOMEPLUG_AV_SVN_MASK 0x04 #define HOMEPLUG_AV_RRTF_MASK 0x08 #define HOMEPLUG_AV_FL_AV_MASK 0x0FFF #define HOMEPLUG_AV_RSP_DATA_MASK 0x03 #define HOMEPLUG_AV_RSP_MGMT_MASK 0x0C static const int *rsof_sack_fields[] = { &hf_homeplug_av_cfs, &hf_homeplug_av_bdf, &hf_homeplug_av_svn, &hf_homeplug_av_rrtf, &hf_homeplug_av_mfs_rsp_data, &hf_homeplug_av_mfs_rsp_mgmt, NULL }; #define HOMEPLUG_AV_PBSZ_MASK 0x01 static const true_false_string homeplug_av_phy_block_size_vals = { "136 octets", "520 octets" }; #define HOMEPLUG_AV_NUM_SYM_MASK 0x06 #define HOMEPLUG_AV_TMI_AV_MASK 0xF8 #define HOMEPLUG_AV_SOF_MPDU_CNT_MASK 0x3000 #define HOMEPLUG_AV_BURST_CNT_MASK 0xC000 #define HOMEPLUG_AV_BBF_MASK 0x01 static const true_false_string homeplug_av_bbf_vals = { "May continue", "Must not continue" }; #define HOMEPLUG_AV_MRTLF_MASK 0x1E #define HOMEPLUG_AV_DCCPCF_MASK 0x20 #define HOMEPLUG_AV_MCF_MASK 0x40 #define HOMEPLUG_AV_MNBF_MASK 0x80 #define HOMEPLUG_AV_RSR_MASK 0x01 #define HOMEPLUG_AV_CLST_MASK 0x02 static const true_false_string homeplug_av_clst_vals = { "Reserved", "Ethernet II" }; #define HOMEPLUG_AV_MFS_MGMT_MASK 0x1C #define HOMEPLUG_AV_MFS_DATA_MASK 0xE0 #define HOMEPLUG_AV_SOF_RSP_MGMT_MASK 0x03 #define HOMEPLUG_AV_SOF_RSP_DATA_MASK 0x0C #define HOMEPLUG_AV_BM_SACK_MASK 0xF0 #define HOMEPLUG_AV_RTSF_MASK 0x10 static const true_false_string homeplug_av_rtsf_vals = { "RTS MPDU", "CTS MPDU" }; #define HOMEPLUG_AV_IGF_MASK 0x20 #define HOMEPLUG_AV_RTSCTS_MNBF_MASK 0x40 #define HOMEPLUG_AV_RTSCTS_MCF_MASK 0x80 #define HOMEPLUG_AV_DUR_MASK 0x3FFF #define HOMEPLUG_AV_SOUND_PBSZ_MASK 0x02 #define HOMEPLUG_AV_SOUND_BDF_MASK 0x04 #define HOMEPLUG_AV_SAF_MASK 0x08 #define HOMEPLUG_AV_SCF_MASK 0x10 #define HOMEPLUG_AV_REQ_TM_MASK 0xE0 #define HOMEPLUG_AV_SOUND_MPDU_CNT_MASK 0x3000 #define HOMEPLUG_AV_ADD_REQ_TM_MASK 0x07 #define HOMEPLUG_AV_MAX_PB_SYM_MASK 0x38 #define HOMEPLUG_AV_ECSF_MASK 0x40 #define HOMEPLUG_AV_ECUF_MASK 0x80 #define HOMEPLUG_AV_EMS_MASK 0x03 static const value_string homeplug_av_ems_vals[] = { { 0x00, "Extended QAM Modulations not supported" }, { 0x01, "4096 QAM Modulation support" }, { 0x02, "Reserved" }, { 0x03, "Reserved" }, { 0, NULL } }; #define HOMEPLUG_AV_ESGISF_MASK 0x04 #define HOMEPLUG_AV_ELGISF_MASK 0x08 #define HOMEPLUG_AV_EFRS_MASK 0x30 static const value_string homeplug_av_efrs_vals[] = { { 0x00, "Extended FEC Rates Not Supported" }, { 0x01, "16/18 FED Rate Supported" }, { 0x02, "Reserved" }, { 0x03, "Reserved" }, { 0, NULL } }; #define HOMEPLUG_AV_RSOF_FL_MASK 0x03FF #define HOMEPLUG_AV_RSOF_TMI_MASK 0x7C00 #define HOMEPLUG_AV_RSOF_PBSZ_MASK 0x8000 #define HOMEPLUG_AV_RSOF_NUM_SYM_MASK 0x03 /* MPDU Beacon payloads */ #define HOMEPLUG_AV_BCN_NID_MASK 0xFFFFFFFFFFFF3F #define HOMEPLUG_AV_HM_MASK 0xC0 static const val64_string homeplug_av_bcn_hm_vals[] = { { 0x00, "AV-only mode" }, { 0x01, "Shared CSMA Hybrid Mode" }, { 0x02, "Fully hybrid mode" }, { 0x03, "Fully hybrid mode with unrestricted frame lengths" }, { 0, NULL } }; #define HOMEPLUG_AV_BCN_TYPE_MASK 0x07 static const value_string homeplug_av_bcn_type_vals[] = { { 0x0, "Central" }, { 0x1, "Discover" }, { 0x2, "Proxy" }, { 0, NULL } }; #define HOMEPLUG_AV_NCNR_MASK 0x08 #define HOMEPLUG_AV_NPSM_MASK 0x10 #define HOMEPLUG_AV_NUM_SLOTS_MASK 0xE0 #define HOMEPLUG_AV_SLOT_ID_MASK 0x03 /* There must be a better way to do this. */ static const value_string homeplug_av_bcn_slot_vals[] = { { 0x0, "1" }, { 0x1, "2" }, { 0x2, "3" }, { 0x3, "4" }, { 0x4, "5" }, { 0x5, "6" }, { 0x6, "7" }, { 0x7, "8" }, { 0, NULL } }; #define HOMEPLUG_AV_ACLSS_MASK 0x38 #define HOMEPLUG_AV_HOIP_MASK 0x40 #define HOMEPLUG_AV_RTSBF_MASK 0x80 #define HOMEPLUG_AV_NM_MASK 0x03 static const value_string homeplug_av_bcn_nm_vals[] = { { 0x1, "Uncoordinated Mode" }, { 0x2, "Coordinated Mode" }, { 0x3, "CSMA-only Mode" }, { 0, NULL } }; #define HOMEPLUG_AV_LBK_STATUS_MASK 0x01 static const value_string homeplug_av_lbk_status_vals[] = { { 0x00, "Done" }, { 0x01, "Looping frame" }, { 0, NULL } }; static const value_string homeplug_av_set_key_peks_vals[] = { { 0x00, "Remote" }, { 0x0F, "Local" }, { 0, NULL } }; static const value_string homeplug_av_set_key_status_vals[] = { { 0x00, "Success" }, { 0x10, "Invalid EKS" }, { 0x11, "Invalid PKS" }, { 0, NULL } }; static const value_string homeplug_av_cblock_status_vals[] = { { 0x00, "Success" }, { 0x01, "Failure" }, { 0x10, "No Flash" }, { 0x30, "Invalid Checksum" }, { 0x34, "BIST Failed" }, { 0, NULL } }; #define HOMEPLUG_AV_NVM_IMG_TYPE_MASK 0x1F static const value_string homeplug_av_nvm_img_type_vals[] = { { 0x00, "Generic Image" }, { 0x01, "Synopsis configuration" }, { 0x02, "Denali configuration" }, { 0x03, "Denali applet" }, { 0x04, "Runtime firmware" }, { 0x05, "OAS client" }, { 0x06, "Custom image" }, { 0x07, "Memory control applet" }, { 0x08, "Power management applet" }, { 0x09, "OAS client IP stack" }, { 0x0A, "OAS client TR069" }, { 0x0B, "SoftLoader" }, { 0x0C, "Flash layout" }, { 0x0D, "Unknown" }, { 0x0E, "Chain manifest" }, { 0x0F, "Runtime parameters" }, { 0x10, "Custom module in scratch" }, { 0x11, "Custom module update applet" }, { 0, NULL } }; #define HOMEPLUG_AV_NVM_IGNORE_MASK_MASK 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_payload(ptvcursor_t *cursor) { proto_item *it; proto_tree *tree; tvbuff_t *tvb; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_bcn_payload, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_bcn_payload); { tree = ptvcursor_tree(cursor); tvb = ptvcursor_tvbuff(cursor); static const int *bcn1_fields[] = { &hf_homeplug_av_bcn_nid, &hf_homeplug_av_bcn_hm, NULL }; proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 7, bcn1_fields, ENC_BIG_ENDIAN); ptvcursor_advance(cursor, 7); ptvcursor_add(cursor, hf_homeplug_av_bcn_stei, 1, ENC_BIG_ENDIAN); static const int *bcn2_fields[] = { &hf_homeplug_av_bcn_type, &hf_homeplug_av_bcn_ncnr, &hf_homeplug_av_bcn_npsm, &hf_homeplug_av_bcn_num_slots, NULL }; proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, bcn2_fields, ENC_BIG_ENDIAN); ptvcursor_advance(cursor, 1); ptvcursor_add(cursor, hf_homeplug_av_bcn_slot_use, 1, ENC_BIG_ENDIAN); static const int *bcn3_fields[] = { &hf_homeplug_av_bcn_slot_id, &hf_homeplug_av_bcn_aclss, &hf_homeplug_av_bcn_hoip, &hf_homeplug_av_bcn_rtsbf, NULL }; proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, bcn3_fields, ENC_BIG_ENDIAN); ptvcursor_advance(cursor, 1); static const int *bcn4_fields[] = { &hf_homeplug_av_bcn_nm, &hf_homeplug_av_bcn_cco_cap, &hf_homeplug_av_bcn_rsf, &hf_homeplug_av_bcn_plevel, NULL }; proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, bcn4_fields, ENC_BIG_ENDIAN); ptvcursor_advance(cursor, 1); /* TODO: decode individual beacon entries */ ptvcursor_add(cursor, hf_homeplug_av_bcn_bentries, 120, ENC_NA); ptvcursor_add(cursor, hf_homeplug_av_bcn_bpcs, 4, ENC_LITTLE_ENDIAN); } ptvcursor_pop_subtree(cursor); } static void dissect_homeplug_av_beacon(ptvcursor_t *cursor) { proto_item *it; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_bcn, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_bcn); { ptvcursor_add(cursor, hf_homeplug_av_bcn_bts, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_bcn_bto_0, 2, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_bcn_bto_1, 2, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_bcn_bto_2, 2, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_bcn_bto_3, 2, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_fc_fccs_av, 3, ENC_NA); dissect_homeplug_av_beacon_payload(cursor); } ptvcursor_pop_subtree(cursor); } /* Start of Frame */ static void dissect_homeplug_av_start_of_frame(ptvcursor_t *cursor) { proto_item *it; proto_tree *tree; tvbuff_t *tvb; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sof, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_sof); { tree = ptvcursor_tree(cursor); tvb = ptvcursor_tvbuff(cursor); ptvcursor_add(cursor, hf_homeplug_av_stei, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_dtei, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_lid, 1, ENC_BIG_ENDIAN); static const int *sof1_fields[] = { &hf_homeplug_av_cfs, &hf_homeplug_av_bdf, &hf_homeplug_av_hp10df, &hf_homeplug_av_hp11df, &hf_homeplug_av_sof_peks, NULL }; proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sof1_fields, ENC_BIG_ENDIAN); ptvcursor_advance(cursor, 1); ptvcursor_add(cursor, hf_homeplug_av_ppb, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_sof_ble, 1, ENC_BIG_ENDIAN); static const int *sof2_fields[] = { &hf_homeplug_av_sof_pbsz, &hf_homeplug_av_sof_num_sym, &hf_homeplug_av_sof_tmi_av, NULL }; proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sof2_fields, ENC_BIG_ENDIAN); ptvcursor_advance(cursor, 1); static const int *sof3_fields[] = { &hf_homeplug_av_fl_av, &hf_homeplug_av_sof_mpdu_cnt, &hf_homeplug_av_sof_burst_cnt, NULL }; proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 2, sof3_fields, ENC_LITTLE_ENDIAN); ptvcursor_advance(cursor, 2); static const int *sof4_fields[] = { &hf_homeplug_av_sof_bbf, &hf_homeplug_av_sof_mrtfl, &hf_homeplug_av_sof_dccpcf, &hf_homeplug_av_sof_mcf, &hf_homeplug_av_sof_mnbf, NULL }; proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sof4_fields, ENC_BIG_ENDIAN); ptvcursor_advance(cursor, 1); static const int *sof5_fields[] = { &hf_homeplug_av_sof_rsr, &hf_homeplug_av_sof_clst, &hf_homeplug_av_sof_mfs_cmd_mgmt, &hf_homeplug_av_sof_mfs_cmd_data, NULL }; proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sof5_fields, ENC_BIG_ENDIAN); ptvcursor_advance(cursor, 1); static const int *sof6_fields[] = { &hf_homeplug_av_sof_mfs_rsp_mgmt, &hf_homeplug_av_sof_mfs_rsp_data, &hf_homeplug_av_sof_bm_sack, NULL }; proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sof6_fields, ENC_BIG_ENDIAN); ptvcursor_advance(cursor, 1); ptvcursor_add(cursor, hf_homeplug_av_fc_fccs_av, 3, ENC_NA); } ptvcursor_pop_subtree(cursor); } /* Selective acknowledgment */ static void dissect_homeplug_av_sack(ptvcursor_t *cursor) { proto_item *it; proto_tree *tree; tvbuff_t *tvb; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sack, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_sack); { tree = ptvcursor_tree(cursor); tvb = ptvcursor_tvbuff(cursor); ptvcursor_add(cursor, hf_homeplug_av_dtei, 1, ENC_BIG_ENDIAN); proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, rsof_sack_fields, ENC_BIG_ENDIAN); ptvcursor_advance(cursor, 1); /* TODO: add variable fields here */ ptvcursor_advance(cursor, 10); ptvcursor_add(cursor, hf_homeplug_av_fc_fccs_av, 3, ENC_NA); } ptvcursor_pop_subtree(cursor); } /* Request to send/clear to send */ static void dissect_homeplug_av_rtscts(ptvcursor_t *cursor) { proto_item *it; proto_tree *tree; tvbuff_t *tvb; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rtscts, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rtscts); { tree = ptvcursor_tree(cursor); tvb = ptvcursor_tvbuff(cursor); ptvcursor_add(cursor, hf_homeplug_av_stei, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_dtei, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_lid, 1, ENC_BIG_ENDIAN); static const int *rtscts_fields[] = { &hf_homeplug_av_cfs, &hf_homeplug_av_bdf, &hf_homeplug_av_hp10df, &hf_homeplug_av_hp11df, &hf_homeplug_av_rtscts_rtsf, &hf_homeplug_av_rtscts_igf, &hf_homeplug_av_rtscts_mnbf, &hf_homeplug_av_rtscts_mcf, NULL }; proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, rtscts_fields, ENC_BIG_ENDIAN); ptvcursor_advance(cursor, 1); ptvcursor_add(cursor, hf_homeplug_av_rtscts_dur, 2, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_reserved, 6, ENC_NA); ptvcursor_add(cursor, hf_homeplug_av_fc_fccs_av, 3, ENC_NA); } ptvcursor_pop_subtree(cursor); } /* Sound */ static void dissect_homeplug_av_sound(ptvcursor_t *cursor) { proto_item *it; proto_tree *tree; tvbuff_t *tvb; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sound, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_sound); { tree = ptvcursor_tree(cursor); tvb = ptvcursor_tvbuff(cursor); ptvcursor_add(cursor, hf_homeplug_av_stei, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_dtei, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_lid, 1, ENC_BIG_ENDIAN); static const int *sound1_fields[] = { &hf_homeplug_av_cfs, &hf_homeplug_av_sound_pbsz, &hf_homeplug_av_sound_bdf, &hf_homeplug_av_sound_saf, &hf_homeplug_av_sound_scf, &hf_homeplug_av_sound_req_tm, NULL }; proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sound1_fields, ENC_BIG_ENDIAN); ptvcursor_advance(cursor, 1); static const int *sound2_fields[] = { &hf_homeplug_av_fl_av, &hf_homeplug_av_sound_mpdu_cnt, NULL }; proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 2, sound2_fields, ENC_LITTLE_ENDIAN); ptvcursor_advance(cursor, 2); ptvcursor_add(cursor, hf_homeplug_av_ppb, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_sound_src, 1, ENC_BIG_ENDIAN); static const int *sound3_fields[] = { &hf_homeplug_av_sound_add_req_tm, &hf_homeplug_av_sound_max_pb_sym, &hf_homeplug_av_sound_ecsf, &hf_homeplug_av_sound_ecuf, NULL }; proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sound3_fields, ENC_BIG_ENDIAN); ptvcursor_advance(cursor, 1); static const int *sound4_fields[] = { &hf_homeplug_av_sound_ems, &hf_homeplug_av_sound_esgisf, &hf_homeplug_av_sound_elgisf, &hf_homeplug_av_sound_efrs, NULL }; proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, sound4_fields, ENC_BIG_ENDIAN); ptvcursor_advance(cursor, 3); /* one byte for bitmask plus two reserved bytes we ignore */ ptvcursor_add(cursor, hf_homeplug_av_fc_fccs_av, 3, ENC_NA); } ptvcursor_pop_subtree(cursor); } /* Reverse Start of Frame */ static void dissect_homeplug_av_rsof(ptvcursor_t *cursor) { proto_item *it; proto_tree *tree; tvbuff_t *tvb; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_rsof, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_rsof); { tree = ptvcursor_tree(cursor); tvb = ptvcursor_tvbuff(cursor); ptvcursor_add(cursor, hf_homeplug_av_dtei, 1, ENC_BIG_ENDIAN); proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, rsof_sack_fields, ENC_BIG_ENDIAN); ptvcursor_advance(cursor, 8); /* 1 byte for bitmask field, plus 7 bytes of variable data */ /* TODO: fill in variable fields */ static const int *rsof2_fields[] = { &hf_homeplug_av_rsof_fl, &hf_homeplug_av_rsof_tmi, &hf_homeplug_av_rsof_pbsz, NULL }; proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 2, rsof2_fields, ENC_LITTLE_ENDIAN); ptvcursor_advance(cursor, 2); static const int *rsof3_fields[] = { &hf_homeplug_av_rsof_num_sym, &hf_homeplug_av_rsof_mfs_cmd_mgmt, &hf_homeplug_av_rsof_mfs_cmd_data, NULL }; proto_tree_add_bitmask_list(tree, tvb, ptvcursor_current_offset(cursor), 1, rsof3_fields, ENC_BIG_ENDIAN); ptvcursor_advance(cursor, 1); ptvcursor_add(cursor, hf_homeplug_av_fc_fccs_av, 3, ENC_NA); } ptvcursor_pop_subtree(cursor); } static void dissect_homeplug_av_nw_info_sta(ptvcursor_t *cursor, gboolean vendor, guint homeplug_av_mmver) { proto_item *it; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_info_sta_info, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_nw_info_sta_info); { ptvcursor_add(cursor, hf_homeplug_av_nw_info_sta_da, 6, ENC_NA); if (vendor) { ptvcursor_add(cursor, hf_homeplug_av_nw_info_sta_tei, 1, ENC_BIG_ENDIAN); if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1) ptvcursor_add(cursor, hf_homeplug_av_reserved, 3, ENC_NA); ptvcursor_add(cursor, hf_homeplug_av_nw_info_sta_bda, 6, ENC_NA); } if (!homeplug_av_mmver) { ptvcursor_add(cursor, hf_homeplug_av10_nw_info_sta_phy_dr_tx, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av10_nw_info_sta_phy_dr_rx, 1, ENC_BIG_ENDIAN); } else if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1) { ptvcursor_add(cursor, hf_homeplug_av11_nw_info_sta_phy_dr_tx, 2, ENC_LITTLE_ENDIAN); ptvcursor_add_no_advance(cursor, hf_homeplug_av11_nw_info_sta_cpling_tx, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av11_nw_info_sta_cpling_rx, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA); ptvcursor_add(cursor, hf_homeplug_av11_nw_info_sta_phy_dr_rx, 2, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_reserved, 2, ENC_NA); } } ptvcursor_pop_subtree(cursor); } static void dissect_homeplug_av_nw_info_net(ptvcursor_t *cursor, gboolean vendor, guint8 homeplug_av_mmver) { proto_item *it; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_info_net_info, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_nw_info_net_info); { ptvcursor_add(cursor, hf_homeplug_av_nw_info_nid, 7, ENC_NA); if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1) ptvcursor_add(cursor, hf_homeplug_av_reserved, 2, ENC_NA); ptvcursor_add(cursor, hf_homeplug_av_nw_info_snid, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_nw_info_tei, 1, ENC_BIG_ENDIAN); if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1) ptvcursor_add(cursor, hf_homeplug_av_reserved, 4, ENC_NA); ptvcursor_add(cursor, hf_homeplug_av_nw_info_sta_role, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_nw_info_cco_mac, 6, ENC_NA); if (vendor) { ptvcursor_add(cursor, hf_homeplug_av_nw_info_cco_tei, 1, ENC_BIG_ENDIAN); if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1) ptvcursor_add(cursor, hf_homeplug_av_reserved, 3, ENC_NA); } else { ptvcursor_add(cursor, hf_homeplug_av_nw_info_access, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_nw_info_num_coord, 1, ENC_BIG_ENDIAN); } } ptvcursor_pop_subtree(cursor); } /* Public MMEs */ static void dissect_homeplug_av_cc_sta_info(ptvcursor_t *cursor) { proto_item *it; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cc_sta_info, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cc_sta_info); { ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_mac, 6, ENC_NA); ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_tei, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_same_net, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_nw_info_snid, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_nw_info_cco_cap, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_sig_level, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_cc_sta_info_avg_ble, 1, ENC_BIG_ENDIAN); } ptvcursor_pop_subtree(cursor); } static void dissect_homeplug_av_cc_net_info(ptvcursor_t *cursor) { proto_item *it; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cc_net_info, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cc_net_info); { ptvcursor_add(cursor, hf_homeplug_av_nw_info_nid, 7, ENC_NA); ptvcursor_add(cursor, hf_homeplug_av_nw_info_snid, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_cc_net_info_hyb_mode, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_cc_net_info_bcn_slots, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_cc_net_info_cco_sts, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_cc_net_info_bcn_ofs, 2, ENC_BIG_ENDIAN); } ptvcursor_pop_subtree(cursor); } static void dissect_homeplug_av_cc_disc_list_cnf(ptvcursor_t *cursor) { proto_item *it; guint8 num_stas; guint8 sta; guint8 num_nets; guint8 net; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cc_disc_list_cnf, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cc_disc_list_cnf); { num_stas = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_homeplug_av_cc_disc_list_sta_cnt, 1, ENC_BIG_ENDIAN); for (sta = 0; sta < num_stas; sta++) { dissect_homeplug_av_cc_sta_info(cursor); } num_nets = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_homeplug_av_cc_disc_list_net_cnt, 1, ENC_BIG_ENDIAN); for (net = 0; net < num_nets; net++) { dissect_homeplug_av_cc_net_info(cursor); } } ptvcursor_pop_subtree(cursor); } static void dissect_homeplug_av_cm_enc_pld_ind(ptvcursor_t *cursor) { proto_item *it; guint8 pid; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_enc_pld_ind, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_enc_pld_ind); { ptvcursor_add(cursor, hf_homeplug_av_nw_info_peks, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_avlns, 1, ENC_BIG_ENDIAN); pid = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_nw_info_pmn, 1, ENC_BIG_ENDIAN); if (pid == HOMEPLUG_AV_PID_HLE) { ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_iv, 16, ENC_NA); } else { ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_uuid, 16, ENC_LITTLE_ENDIAN); } ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_len, 2, ENC_LITTLE_ENDIAN); /* Encrypted payload follows */ if (pid != HOMEPLUG_AV_PID_HLE) { ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_ind_pld, -1, ENC_NA); } } ptvcursor_pop_subtree(cursor); } static void dissect_homeplug_av_cm_enc_pld_rsp(ptvcursor_t *cursor) { proto_item *it; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_enc_pld_rsp, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_enc_pld_rsp); { ptvcursor_add(cursor, hf_homeplug_av_cm_enc_pld_rsp_result, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN); } ptvcursor_pop_subtree(cursor); } static void dissect_homeplug_av_cm_set_key_req(ptvcursor_t *cursor) { proto_item *it; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cm_set_key_req, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cm_set_key_req); { ptvcursor_add(cursor, hf_homeplug_av_nw_info_key_type, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_nw_info_my_nonce, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_nw_info_your_nonce, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_nw_info_pid, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_nw_info_prn, 2, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_nw_info_pmn, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_nw_info_cco_cap, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_nw_info_nid, 7, ENC_NA); ptvcursor_add(cursor, hf_homeplug_av_nw_info_peks, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_cm_set_key_req_nw_key, -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; tvbuff_t *tvb; guint offset; guint8 del_type; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sniffer_ind, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_sniffer_ind); { ptvcursor_add(cursor, hf_homeplug_av_sniffer_ind_type, 1, ENC_BIG_ENDIAN); it_data = ptvcursor_add_no_advance(cursor, hf_homeplug_av_sniffer_ind_data, -1, ENC_NA); ptvcursor_push_subtree(cursor, it_data, ett_homeplug_av_sniffer_ind_data); { ptvcursor_add(cursor, hf_homeplug_av_sniffer_data_dir, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_sniffer_data_systime, 8, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_sniffer_data_bc_time, 4, ENC_LITTLE_ENDIAN); offset = ptvcursor_current_offset(cursor); tvb = ptvcursor_tvbuff(cursor); del_type = tvb_get_guint8(tvb, offset); /* bitmask - we only want 3 bits of del_type */ guint8 bitmask = 0x07; del_type &= bitmask; static const int *frame_control_fields[] = { &hf_homeplug_av_fc_del_type, &hf_homeplug_av_fc_access, &hf_homeplug_av_fc_snid, NULL }; proto_tree_add_bitmask(ptvcursor_tree(cursor), tvb, offset, hf_homeplug_av_fc, ett_homeplug_av_fc, frame_control_fields, ENC_BIG_ENDIAN); ptvcursor_advance(cursor, 1); switch (del_type) { case HOMEPLUG_AV_DEL_TYPE_BCN: dissect_homeplug_av_beacon(cursor); break; case HOMEPLUG_AV_DEL_TYPE_SOF: dissect_homeplug_av_start_of_frame(cursor); break; case HOMEPLUG_AV_DEL_TYPE_SACK: dissect_homeplug_av_sack(cursor); break; case HOMEPLUG_AV_DEL_TYPE_RTS: dissect_homeplug_av_rtscts(cursor); break; case HOMEPLUG_AV_DEL_TYPE_SOUND: dissect_homeplug_av_sound(cursor); break; case HOMEPLUG_AV_DEL_TYPE_RSOF: dissect_homeplug_av_rsof(cursor); break; default: break; } } ptvcursor_pop_subtree(cursor); } ptvcursor_pop_subtree(cursor); } static void dissect_homeplug_av_nw_info_cnf(ptvcursor_t *cursor, guint8 homeplug_av_mmver) { proto_item *it; guint8 num_avlns; guint8 num_stas; guint8 sta; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_nw_info_cnf, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_nw_info_cnf); { if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1) ptvcursor_add(cursor, hf_homeplug_av_reserved, 5, ENC_NA); num_avlns = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_homeplug_av_nw_info_num_avlns, 1, ENC_BIG_ENDIAN); if (num_avlns) { dissect_homeplug_av_nw_info_net(cursor, TRUE, homeplug_av_mmver); num_stas = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_homeplug_av_nw_info_num_stas, 1, ENC_BIG_ENDIAN); if (homeplug_av_mmver == HOMEPLUG_AV_MMVER_1_1) ptvcursor_add(cursor, hf_homeplug_av_reserved, 5, ENC_NA); for (sta = 0; sta < num_stas; sta++) { dissect_homeplug_av_nw_info_sta(cursor, TRUE, homeplug_av_mmver); } } } ptvcursor_pop_subtree(cursor); } static void dissect_homeplug_av_cp_rpt_req(ptvcursor_t *cursor) { proto_item *it; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cp_rpt_req, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cp_rpt_req); { ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_req_session_id, 2, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_req_clr, 1, ENC_BIG_ENDIAN); } ptvcursor_pop_subtree(cursor); } static void dissect_homeplug_av_cp_rpt_ind(ptvcursor_t *cursor) { proto_item *it; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_cp_rpt_ind, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_cp_rpt_ind); { ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_status, 1, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_major_ver, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_minor_ver, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_reserved, 14, ENC_NA); ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_session_id, 2, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_total_size, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_blk_offset, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_byte_index, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_num_parts, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_curr_part, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_data_len, 2, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_cp_rpt_ind_data_ofs, 1, ENC_LITTLE_ENDIAN); ptvcursor_add_no_advance(cursor, hf_homeplug_av_cp_rpt_ind_data, -1, ENC_NA); } ptvcursor_pop_subtree(cursor); } static void dissect_homeplug_av_fr_lbk_req(ptvcursor_t *cursor) { proto_item *it; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_fr_lbk_req, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_fr_lbk_req); { ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_duration, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_reserved, 1, ENC_NA); ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_len, 2, ENC_BIG_ENDIAN); ptvcursor_add_no_advance(cursor, hf_homeplug_av_fr_lbk_req_data, -1, ENC_NA); } ptvcursor_pop_subtree(cursor); } static void dissect_homeplug_av_fr_lbk_cnf(ptvcursor_t *cursor) { proto_item *it; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_fr_lbk_cnf, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_fr_lbk_cnf); { ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_cnf_status, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_duration, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_fr_lbk_len, 2, ENC_BIG_ENDIAN); } ptvcursor_pop_subtree(cursor); } static void dissect_homeplug_av_lbk_stat_cnf(ptvcursor_t *cursor) { proto_item *it; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_lbk_stat_cnf, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_lbk_stat_cnf); { ptvcursor_add(cursor, hf_homeplug_av_lbk_stat_cnf_status, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_lbk_stat_cnf_lbk_stat, 1, ENC_BIG_ENDIAN); } ptvcursor_pop_subtree(cursor); } static void dissect_homeplug_av_set_key_req(ptvcursor_t *cursor) { proto_item *it; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_set_key_req, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_set_key_req); { ptvcursor_add(cursor, hf_homeplug_av_set_key_req_eks, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_set_key_req_nmk, 16, ENC_NA); ptvcursor_add(cursor, hf_homeplug_av_nw_info_peks, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_set_key_req_rda, 6, ENC_NA); ptvcursor_add(cursor, hf_homeplug_av_set_key_req_dak, 16, ENC_NA); } ptvcursor_pop_subtree(cursor); } static void dissect_homeplug_av_set_key_cnf(ptvcursor_t *cursor) { proto_item *it; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_set_key_cnf, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_set_key_cnf); { ptvcursor_add(cursor, hf_homeplug_av_set_key_cnf_status, 1, ENC_BIG_ENDIAN); } ptvcursor_pop_subtree(cursor); } static void dissect_homeplug_av_mfg_string_cnf(ptvcursor_t *cursor) { proto_item *it; if (!ptvcursor_tree(cursor)) return; it = ptvcursor_add_no_advance(cursor, hf_homeplug_av_mfg_string_cnf, -1, ENC_NA); ptvcursor_push_subtree(cursor, it, ett_homeplug_av_mfg_string_cnf); { ptvcursor_add(cursor, hf_homeplug_av_mfg_string_cnf_status, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_mfg_string_cnf_len, 1, ENC_BIG_ENDIAN); ptvcursor_add(cursor, hf_homeplug_av_mfg_string_cnf_string, 64, ENC_ASCII|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 fields */ { &hf_homeplug_av_fc, { "Frame Control", "homeplug_av.fc", FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL } }, { &hf_homeplug_av_fc_del_type, { "Delimiter type", "homeplug_av.fc.del_type", FT_UINT8, BASE_HEX, VALS(homeplug_av_fc_del_type_vals), HOMEPLUG_AV_DEL_TYPE_MASK, NULL, HFILL } }, { &hf_homeplug_av_fc_access, { "Access network", "homeplug_av.fc.access", FT_UINT8, BASE_HEX, VALS(homeplug_nw_info_access_vals), HOMEPLUG_AV_NW_INFO_ACCESS_MASK, NULL, HFILL } }, { &hf_homeplug_av_fc_snid, { "Short network ID", "homeplug_av.fc.snid", FT_UINT8, BASE_HEX, NULL, HOMEPLUG_AV_SNID_MASK, NULL, HFILL } }, { &hf_homeplug_av_fc_fccs_av, { "Frame control check sequence", "homeplug_av.fc.fccs_av", FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL } }, /* Common MPDU variant fields */ { &hf_homeplug_av_dtei, { "Destination Terminal Equipment Identifier", "homeplug_av.dtei", FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL } }, { &hf_homeplug_av_stei, { "Source Terminal Equipment Identifier", "homeplug_av.stei", FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL } }, { &hf_homeplug_av_lid, { "Link ID", "homeplug_av.lid", FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL } }, { &hf_homeplug_av_cfs, { "Contention free session", "homeplug_av.cfs", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_CFS_MASK, NULL, HFILL } }, { &hf_homeplug_av_bdf, { "Beacon detect flag", "homeplug_av.bdf", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_BDF_MASK, NULL, HFILL } }, { &hf_homeplug_av_hp10df, { "Homeplug AV version 1.0", "homeplug_av.hp10df", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_HP10DF_MASK, NULL, HFILL } }, { &hf_homeplug_av_hp11df, { "Homeplug AV version 1.1", "homeplug_av.hp11df", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_HP11DF_MASK, NULL, HFILL } }, { &hf_homeplug_av_svn, { "Sack version number", "homeplug_av.svn", FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_SVN_MASK, NULL, HFILL } }, { &hf_homeplug_av_rrtf, { "Request reverse transmission flag", "homeplug_av.rrtf", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_RRTF_MASK, NULL, HFILL } }, { &hf_homeplug_av_fl_av, { "Frame length", "homeplug_av.fl_av", FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_FL_AV_MASK, NULL, HFILL } }, { &hf_homeplug_av_ppb, { "Pending PHY blocks", "homeplug_av.ppb", FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL } }, { &hf_homeplug_av_mfs_rsp_data, { "Data MAC Frame Stream Response", "homeplug_av.sack.mfs_rsp_data", FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_RSP_DATA_MASK << 4, NULL, HFILL } }, { &hf_homeplug_av_mfs_rsp_mgmt, { "Management MAC Frame Stream Response", "homeplug_av.sack.mfs_rsp_mgmt", FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_RSP_MGMT_MASK << 4, NULL, HFILL } }, /* Frame Control */ { &hf_homeplug_av_sof, { "Start of Frame Variant Fields", "homeplug_av.sof", FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL } }, { &hf_homeplug_av_sof_peks, { "Payload Encryption Key Select", "homeplug_av.sof.peks", FT_UINT8, BASE_HEX | BASE_EXT_STRING, &homeplug_av_peks_vals_ext, HOMEPLUG_AV_SOF_PEKS_MASK, NULL, HFILL } }, { &hf_homeplug_av_sof_ble, { "Bit loading estimate", "homeplug_av.sof.ble", FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL } }, { &hf_homeplug_av_sof_pbsz, { "PHY block size", "homeplug_av.sof.pbsz", FT_BOOLEAN, 8, TFS(&homeplug_av_phy_block_size_vals), HOMEPLUG_AV_PBSZ_MASK, NULL, HFILL } }, { &hf_homeplug_av_sof_num_sym, { "Number of symbols", "homeplug_av.sof.num_sym", FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_NUM_SYM_MASK, NULL, HFILL } }, { &hf_homeplug_av_sof_tmi_av, { "Tonemap index", "homeplug_av.sof.tmi_av", FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_TMI_AV_MASK, NULL, HFILL } }, { &hf_homeplug_av_sof_mpdu_cnt, { "MPDU count", "homeplug_av.sof.mpdu_cnt", FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_SOF_MPDU_CNT_MASK, NULL, HFILL } }, { &hf_homeplug_av_sof_burst_cnt, { "Burst count", "homeplug_av.sof.burst_cnt", FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_BURST_CNT_MASK, NULL, HFILL } }, { &hf_homeplug_av_sof_bbf, { "Bidirectional Burst", "homeplug_av.sof.bbf", FT_BOOLEAN, 8, TFS(&homeplug_av_bbf_vals), HOMEPLUG_AV_BBF_MASK, NULL, HFILL } }, { &hf_homeplug_av_sof_mrtfl, { "Max Reverse Transmission Frame Length", "homeplug_av.sof.mrtfl", FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_MRTLF_MASK, NULL, HFILL } }, { &hf_homeplug_av_sof_dccpcf, { "Different CP PHY clock", "homeplug_av.sof.dccpcf", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_DCCPCF_MASK, NULL, HFILL } }, { &hf_homeplug_av_sof_mcf, { "Multicast", "homeplug_av.sof.mcf", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_MCF_MASK, NULL, HFILL } }, { &hf_homeplug_av_sof_mnbf, { "Multinetwork broadcast", "homeplug_av.sof.mnbf", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_MNBF_MASK, NULL, HFILL } }, { &hf_homeplug_av_sof_rsr, { "Request SACK retransmission", "homeplug_av.sof.rsr", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_RSR_MASK, NULL, HFILL } }, { &hf_homeplug_av_sof_clst, { "Convergence layer SAP type", "homeplug_av.sof.clst", FT_BOOLEAN, 8, TFS(&homeplug_av_clst_vals), HOMEPLUG_AV_CLST_MASK, NULL, HFILL } }, { &hf_homeplug_av_sof_mfs_cmd_mgmt, { "Management MAC Frame Stream Command", "homeplug_av.sof.mfs_cmd_mgmt", FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_MFS_MGMT_MASK, NULL, HFILL } }, { &hf_homeplug_av_sof_mfs_cmd_data, { "Data MAC Frame Stream Command", "homeplug_av.sof.mfs_data_mgmt", FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_MFS_DATA_MASK, NULL, HFILL } }, { &hf_homeplug_av_sof_mfs_rsp_mgmt, { "Management MAC Frame Stream Response", "homeplug_av.sof.mfs_rsp_mgmt", FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_SOF_RSP_MGMT_MASK, NULL, HFILL } }, { &hf_homeplug_av_sof_mfs_rsp_data, { "Data MAC Frame Stream Response", "homeplug_av.sof.mfs_rsp_data", FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_SOF_RSP_DATA_MASK, NULL, HFILL } }, { &hf_homeplug_av_sof_bm_sack, { "Bit Map SACK", "homeplug_av.sof.bm_sack", FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_BM_SACK_MASK, NULL, HFILL } }, /* Selective Acknowledgement */ { &hf_homeplug_av_sack, { "Selective Acknowledgment Variant Fields", "homeplug_av.sack", FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL} }, /* Request to Send/Clear to Send */ { &hf_homeplug_av_rtscts, { "Request to Send/Clear to Send Variant Fields", "homeplug_av.rtscts", FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL } }, { &hf_homeplug_av_rtscts_rtsf, { "RTS Flag", "homeplug_av.rtscts.rtsf", FT_BOOLEAN, 8, TFS(&homeplug_av_rtsf_vals), HOMEPLUG_AV_RTSF_MASK, NULL, HFILL } }, { &hf_homeplug_av_rtscts_igf, { "Immediate Grant Flag", "homeplug_av.rtscts.igf", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_IGF_MASK, NULL, HFILL } }, { &hf_homeplug_av_rtscts_mnbf, { "Multinetwork Broadcast Flag", "homeplug_av.rtscts.mnbf", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_RTSCTS_MNBF_MASK, NULL, HFILL } }, { &hf_homeplug_av_rtscts_mcf, { "Multicast Flag", "homeplug_av.rtscts.mcf", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_RTSCTS_MCF_MASK, NULL, HFILL } }, { &hf_homeplug_av_rtscts_dur, { "Duration", "homeplug_av.rtscts.dur", FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_DUR_MASK, NULL, HFILL } }, /* Sound */ { &hf_homeplug_av_sound, { "Sound Variant Fields", "homeplug_av.sound", FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL } }, { &hf_homeplug_av_sound_pbsz, { "PHY Block Size", "homeplug_av.sound.pbsz", FT_BOOLEAN, 8, TFS(&homeplug_av_phy_block_size_vals), HOMEPLUG_AV_SOUND_PBSZ_MASK, NULL, HFILL } }, { &hf_homeplug_av_sound_bdf, { "Beacon Detect Flag", "homeplug_av.sound.bdf", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_SOUND_BDF_MASK, NULL, HFILL } }, { &hf_homeplug_av_sound_saf, { "Sound ACK Flag", "homeplug_av.sound.saf", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_SAF_MASK, NULL, HFILL } }, { &hf_homeplug_av_sound_scf, { "Sound Complete Flag", "homeplug_av.sound.scf", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_SCF_MASK, NULL, HFILL } }, { &hf_homeplug_av_sound_req_tm, { "Max Tone Maps Requested", "homeplug_av.sound.req_tm", FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_REQ_TM_MASK, NULL, HFILL } }, { &hf_homeplug_av_sound_mpdu_cnt, { "MPDU Count", "homeplug_av.sound.mpdu_cnt", FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_SOUND_MPDU_CNT_MASK, NULL, HFILL } }, { &hf_homeplug_av_sound_src, { "Sound Reason Code", "homeplug_av.sound.src", FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL } }, { &hf_homeplug_av_sound_add_req_tm, { "Additional Tone Maps Requested", "homeplug_av.sound.add_req_tm", FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_ADD_REQ_TM_MASK, NULL, HFILL } }, { &hf_homeplug_av_sound_max_pb_sym, { "Max PBs per Symbol", "homeplug_av.sound.max_pb_sym", FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_MAX_PB_SYM_MASK, NULL, HFILL } }, { &hf_homeplug_av_sound_ecsf, { "Extended Carriers Support Flag", "homeplug_av.sound.ecsf", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_ECSF_MASK, NULL, HFILL } }, { &hf_homeplug_av_sound_ecuf, { "Extended Carriers Used Flag", "homeplug_av.sound.hf_homeplug_av_sound_ecuf", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_ECUF_MASK, NULL, HFILL } }, { &hf_homeplug_av_sound_ems, { "Extended Modulation Support", "homeplug_av.sound.ems", FT_UINT8, BASE_HEX, VALS(homeplug_av_ems_vals), HOMEPLUG_AV_EMS_MASK, NULL, HFILL } }, { &hf_homeplug_av_sound_esgisf, { "Extended Smaller Guard Interval Support Flag", "homeplug_av.sound.esgisf", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_ESGISF_MASK, NULL, HFILL } }, { &hf_homeplug_av_sound_elgisf, { "Extended Larger Guard Interval Support Flag", "homeplug_av.sound.elgisf", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_ELGISF_MASK, NULL, HFILL } }, { &hf_homeplug_av_sound_efrs, { "Extended FEC Rate Support", "homeplug_av.sound.efrs", FT_UINT8, BASE_HEX, VALS(homeplug_av_efrs_vals), HOMEPLUG_AV_EFRS_MASK, NULL, HFILL } }, /* Reverse Start of Frame */ { &hf_homeplug_av_rsof, { "Reverse Start of Frame Variant Fields", "homeplug_av.rsof", FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL } }, { &hf_homeplug_av_rsof_fl, { "Reverse SOF Frame Length", "homeplug_av.rsof.fl", FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_RSOF_FL_MASK, NULL, HFILL } }, { &hf_homeplug_av_rsof_tmi, { "Tone Map Index", "homeplug_av.rsof.tmi", FT_UINT16, BASE_DEC, NULL, HOMEPLUG_AV_RSOF_TMI_MASK, NULL, HFILL } }, { &hf_homeplug_av_rsof_pbsz, { "PHY Block Size", "homeplug_av.rsof.pbsz", FT_BOOLEAN, 16, TFS(&homeplug_av_phy_block_size_vals), HOMEPLUG_AV_RSOF_PBSZ_MASK, NULL, HFILL } }, { &hf_homeplug_av_rsof_num_sym, { "Number of Symbols", "homeplug_av.rsof.num_sym", FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_RSOF_NUM_SYM_MASK, NULL, HFILL } }, { &hf_homeplug_av_rsof_mfs_cmd_mgmt, { "Management MAC Frame Stream Command", "homeplug_av.rsof.mfs_cmd_mgmt", FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_MFS_MGMT_MASK, NULL, HFILL } }, { &hf_homeplug_av_rsof_mfs_cmd_data, { "Data MAC Frame Stream Command", "homeplug_av.rsof.mfs_cmd_data", FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_MFS_DATA_MASK, NULL, HFILL } }, /* Beacon body */ { &hf_homeplug_av_bcn, { "Beacon Variant Fields", "homeplug_av.bcn", FT_NONE, BASE_NONE, NULL, 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 } }, { &hf_homeplug_av_bcn_payload, { "Beacon MPDU payload", "homeplug_av.bcn.payload", FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL } }, { &hf_homeplug_av_bcn_nid, { "Network ID", "homeplug_av.bcn.nid", FT_UINT56, BASE_HEX, NULL, HOMEPLUG_AV_BCN_NID_MASK, NULL, HFILL } }, { &hf_homeplug_av_bcn_hm, { "Hybrid Mode", "homeplug_av.bcn.hm", FT_UINT56, BASE_HEX | BASE_VAL64_STRING, VALS64(homeplug_av_bcn_hm_vals), HOMEPLUG_AV_HM_MASK, NULL, HFILL } }, { &hf_homeplug_av_bcn_stei, { "Source Terminal Equipment ID", "homeplug_av.bcn.stei", FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL } }, { &hf_homeplug_av_bcn_type, { "Beacon type", "homeplug_av.bcn.type", FT_UINT8, BASE_HEX, VALS(homeplug_av_bcn_type_vals), HOMEPLUG_AV_BCN_TYPE_MASK, NULL, HFILL } }, { &hf_homeplug_av_bcn_ncnr, { "Non-coordinating networks reported", "homeplug_av.bcn.ncnr", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_NCNR_MASK, NULL, HFILL } }, { &hf_homeplug_av_bcn_npsm, { "Network Power Save Mode", "homeplug_av.bcn.npsm", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_NPSM_MASK, NULL, HFILL } }, { &hf_homeplug_av_bcn_num_slots, { "Number of Beacon Slots", "homeplug_av.bcn.num_slots", FT_UINT8, BASE_HEX, VALS(homeplug_av_bcn_slot_vals), HOMEPLUG_AV_NUM_SLOTS_MASK, NULL, HFILL } }, { &hf_homeplug_av_bcn_slot_use, { "Beacon Slot Usage (bitmapped)", "homeplug_av.bcn.slot_usage", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_homeplug_av_bcn_slot_id, { "Beacon Slot ID", "homeplug_av.bcn.slot_id", FT_UINT8, BASE_HEX, VALS(homeplug_av_bcn_slot_vals), HOMEPLUG_AV_SLOT_ID_MASK, NULL, HFILL } }, { &hf_homeplug_av_bcn_aclss, { "AC Line Synchronization Status", "homeplug_av.bcn.aclss", FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_ACLSS_MASK, NULL, HFILL } }, { &hf_homeplug_av_bcn_hoip, { "Hand-Off in progress", "homeplug_av.bcn.hoip", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_HOIP_MASK, NULL, HFILL } }, { &hf_homeplug_av_bcn_rtsbf, { "RTS Broadcast Flag", "homeplug_av.bcn.rtsbf", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_RTSBF_MASK, NULL, HFILL } }, { &hf_homeplug_av_bcn_nm, { "Network Mode", "homeplug_av.bcn.nm", FT_UINT8, BASE_DEC, VALS(homeplug_av_bcn_nm_vals), HOMEPLUG_AV_NM_MASK, NULL, HFILL } }, { &hf_homeplug_av_bcn_cco_cap, { "CCo Capabilities", "homeplug_av.bcn.cco_cap", FT_UINT8, BASE_DEC, VALS(homeplug_av_bcn_cco_cap_vals), HOMEPLUG_AV_CCO_CAP_MASK, NULL, HFILL } }, { &hf_homeplug_av_bcn_rsf, { "Resuable SNID?", "homeplug_av.bcn.rsf", FT_BOOLEAN, 8, NULL, HOMEPLUG_AV_RSF_MASK, NULL, HFILL } }, { &hf_homeplug_av_bcn_plevel, { "Proxy level", "homeplug_av.bcn.plevel", FT_UINT8, BASE_DEC, NULL, HOMEPLUG_AV_PLEVEL_MASK, NULL, HFILL } }, { &hf_homeplug_av_bcn_bentries, { "Beacon entries and padding", "homeplug_av.bcn.bentries", FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL } }, { &hf_homeplug_av_bcn_bpcs, { "Beacon payload check sequence", "homeplug_av.bcn.bpcs", FT_UINT32, 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_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 Identifier", "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 Response */ { &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_sof, &ett_homeplug_av_rtscts, &ett_homeplug_av_sack, &ett_homeplug_av_sound, &ett_homeplug_av_rsof, &ett_homeplug_av_bcn, &ett_homeplug_av_bcn_payload, &ett_homeplug_av_cc_disc_list_cnf, &ett_homeplug_av_cc_sta_info, &ett_homeplug_av_cc_net_info, &ett_homeplug_av_cm_enc_pld_ind, &ett_homeplug_av_cm_enc_pld_rsp, &ett_homeplug_av_cm_set_key_req, &ett_homeplug_av_cm_set_key_cnf, &ett_homeplug_av_cm_get_key_req, &ett_homeplug_av_cm_get_key_cnf, &ett_homeplug_av_brg_infos_cnf, &ett_homeplug_av_cm_nw_infos_cnf, &ett_homeplug_av_nw_stats_cnf, &ett_homeplug_av_get_sw_cnf, &ett_homeplug_av_wr_mem_req, &ett_homeplug_av_wr_mem_cnf, &ett_homeplug_av_rd_mem_req, &ett_homeplug_av_st_mac_req, &ett_homeplug_av_st_mac_cnf, &ett_homeplug_av_rd_mem_cnf, &ett_homeplug_av_get_nvm_cnf, &ett_homeplug_av_rs_dev_cnf, &ett_homeplug_av_wr_mod_req, &ett_homeplug_av_wr_mod_cnf, &ett_homeplug_av_wr_mod_ind, &ett_homeplug_av_rd_mod_req, &ett_homeplug_av_rd_mod_cnf, &ett_homeplug_av_mod_nvm_req, &ett_homeplug_av_mod_nvm_cnf, &ett_homeplug_av_wd_rpt_req, &ett_homeplug_av_wd_rpt_ind, &ett_homeplug_av_lnk_stats_req, &ett_homeplug_av_lnk_stats_cnf, &ett_homeplug_av_lnk_stats_tx, &ett_homeplug_av_lnk_stats_rx, &ett_homeplug_av_lnk_stats_rx_inv, &ett_homeplug_av_sniffer_req, &ett_homeplug_av_sniffer_cnf, &ett_homeplug_av_sniffer_ind, &ett_homeplug_av_sniffer_ind_data, &ett_homeplug_av_nw_info_cnf, &ett_homeplug_av_nw_info_sta_info, &ett_homeplug_av_nw_info_net_info, &ett_homeplug_av_cp_rpt_req, &ett_homeplug_av_cp_rpt_ind, &ett_homeplug_av_fr_lbk_req, &ett_homeplug_av_fr_lbk_cnf, &ett_homeplug_av_lbk_stat_cnf, &ett_homeplug_av_set_key_req, &ett_homeplug_av_set_key_cnf, &ett_homeplug_av_mfg_string_cnf, &ett_homeplug_av_rd_cblock_cnf, &ett_homeplug_av_cblock_hdr, &ett_homeplug_av_cblock, &ett_homeplug_av_set_sdram_req, &ett_homeplug_av_set_sdram_cnf, &ett_homeplug_av_host_action_ind, &ett_homeplug_av_host_action_rsp, &ett_homeplug_av_op_attr_req, &ett_homeplug_av_op_attr_cnf, &ett_homeplug_av_op_attr_data, &ett_homeplug_av_enet_phy_req, &ett_homeplug_av_enet_phy_cnf, &ett_homeplug_av_tone_map_tx_req, &ett_homeplug_av_tone_map_rx_req, &ett_homeplug_av_tone_map_tx_cnf, &ett_homeplug_av_tone_map_rx_cnf, &ett_homeplug_av_tone_map_carriers, &ett_homeplug_av_tone_map_carrier }; 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: */