diff options
Diffstat (limited to 'epan/dissectors/packet-rsl.c')
-rw-r--r-- | epan/dissectors/packet-rsl.c | 557 |
1 files changed, 302 insertions, 255 deletions
diff --git a/epan/dissectors/packet-rsl.c b/epan/dissectors/packet-rsl.c index a10df56b1d..04c530be29 100644 --- a/epan/dissectors/packet-rsl.c +++ b/epan/dissectors/packet-rsl.c @@ -15,6 +15,8 @@ * REF: 3GPP TS 48.058 version 6.1.0 Release 6 * http://www.3gpp.org/ftp/Specs/html-info/48058.htm * + * Huawei paging encapsulation in RSL from: + * https://patents.google.com/patent/EP2192796B1/en */ #include "config.h" @@ -33,236 +35,243 @@ void proto_register_rsl(void); void proto_reg_handoff_rsl(void); +guint16 parse_reduced_frame_number(tvbuff_t *tvb, const gint offset); + /* Initialize the protocol and registered fields */ -static int proto_rsl = -1; - -static int hf_rsl_msg_type = -1; -static int hf_rsl_T_bit = -1; -static int hf_rsl_msg_dsc = -1; -static int hf_rsl_ie_id = -1; -static int hf_rsl_ie_length = -1; -static int hf_rsl_ch_no_Cbits = -1; -static int hf_rsl_ch_no_TN = -1; -static int hf_rsl_acc_delay = -1; -static int hf_rsl_rach_slot_cnt = -1; -static int hf_rsl_rach_busy_cnt = -1; -static int hf_rsl_rach_acc_cnt = -1; -static int hf_rsl_req_ref_ra = -1; -static int hf_rsl_req_ref_ra_est_cause = -1; -static int hf_rsl_req_ref_T1prim = -1; -static int hf_rsl_req_ref_T3 = -1; -static int hf_rsl_req_ref_T2 = -1; -static int hf_rsl_timing_adv = -1; -static int hf_rsl_ho_ref = -1; -static int hf_rsl_l1inf_power_lev = -1; -static int hf_rsl_l1inf_fpc = -1; -static int hf_rsl_l1inf_srr = -1; -static int hf_rsl_ms_power_lev = -1; -static int hf_rsl_ms_fpc = -1; -static int hf_rsl_act_timing_adv = -1; -static int hf_rsl_phy_ctx = -1; -static int hf_rsl_na = -1; -static int hf_rsl_ch_type = -1; -static int hf_rsl_prio = -1; -static int hf_rsl_sapi = -1; -static int hf_rsl_rbit = -1; -static int hf_rsl_a3a2 = -1; -static int hf_rsl_a1_0 = -1; -static int hf_rsl_a1_1 = -1; -static int hf_rsl_a1_2 = -1; -static int hf_rsl_epc_mode = -1; -static int hf_rsl_bs_fpc_epc_mode = -1; -static int hf_rsl_bs_power = -1; -static int hf_rsl_cm_dtxd = -1; -static int hf_rsl_cm_dtxu = -1; -static int hf_rsl_speech_or_data = -1; -static int hf_rsl_ch_rate_and_type = -1; -static int hf_rsl_speech_coding_alg = -1; -static int hf_rsl_t_nt_bit = -1; -static int hf_rsl_ra_if_data_rte = -1; -static int hf_rsl_data_rte = -1; -static int hf_rsl_alg_id = -1; -static int hf_rsl_key = -1; -static int hf_rsl_cause = -1; -static int hf_rsl_rel_mode = -1; -static int hf_rsl_interf_band = -1; -static int hf_rsl_interf_band_reserved = -1; -static int hf_rsl_meas_res_no = -1; -static int hf_rsl_extension_bit = -1; -static int hf_rsl_dtxd = -1; -static int hf_rsl_rxlev_full_up = -1; -static int hf_rsl_rxlev_sub_up = -1; -static int hf_rsl_rxqual_full_up = -1; -static int hf_rsl_rxqual_sub_up = -1; -static int hf_rsl_class = -1; -static int hf_rsl_cause_value = -1; -static int hf_rsl_paging_grp = -1; -static int hf_rsl_paging_load = -1; -static int hf_rsl_sys_info_type = -1; -static int hf_rsl_timing_offset = -1; -static int hf_rsl_ch_needed = -1; -static int hf_rsl_cbch_load_type = -1; -static int hf_rsl_msg_slt_cnt = -1; -static int hf_rsl_ch_ind = -1; -static int hf_rsl_command = -1; -static int hf_rsl_emlpp_prio = -1; -static int hf_rsl_rtd = -1; -static int hf_rsl_delay_ind = -1; -static int hf_rsl_tfo = -1; -static int hf_rsl_speech_mode_s = -1; -static int hf_rsl_speech_mode_m = -1; -static int hf_rsl_conn_id = -1; -static int hf_rsl_rtp_payload = -1; -static int hf_rsl_rtp_csd_fmt_d = -1; -static int hf_rsl_rtp_csd_fmt_ir = -1; -static int hf_rsl_local_port = -1; -static int hf_rsl_remote_port = -1; -static int hf_rsl_local_ip = -1; -static int hf_rsl_remote_ip = -1; -static int hf_rsl_cstat_tx_pkts = -1; -static int hf_rsl_cstat_tx_octs = -1; -static int hf_rsl_cstat_rx_pkts = -1; -static int hf_rsl_cstat_rx_octs = -1; -static int hf_rsl_cstat_lost_pkts = -1; -static int hf_rsl_cstat_ia_jitter = -1; -static int hf_rsl_cstat_avg_tx_dly = -1; +static int proto_rsl; + +static int hf_rsl_msg_type; +static int hf_rsl_T_bit; +static int hf_rsl_msg_dsc; +static int hf_rsl_ie_id; +static int hf_rsl_ie_length; +static int hf_rsl_ch_no_Cbits; +static int hf_rsl_ch_no_TN; +static int hf_rsl_acc_delay; +static int hf_rsl_rach_slot_cnt; +static int hf_rsl_rach_busy_cnt; +static int hf_rsl_rach_acc_cnt; +static int hf_rsl_req_ref_ra; +static int hf_rsl_req_ref_ra_est_cause; +static int hf_rsl_req_ref_T1prim; +static int hf_rsl_req_ref_T3; +static int hf_rsl_req_ref_T2; +static int hf_rsl_req_ref_rfn; +static int hf_rsl_timing_adv; +static int hf_rsl_ho_ref; +static int hf_rsl_l1inf_power_lev; +static int hf_rsl_l1inf_fpc; +static int hf_rsl_l1inf_srr; +static int hf_rsl_ms_power_lev; +static int hf_rsl_ms_fpc; +static int hf_rsl_act_timing_adv; +static int hf_rsl_phy_ctx; +static int hf_rsl_na; +static int hf_rsl_ch_type; +static int hf_rsl_prio; +static int hf_rsl_sapi; +static int hf_rsl_rbit; +static int hf_rsl_a3a2; +static int hf_rsl_a1_0; +static int hf_rsl_a1_1; +static int hf_rsl_a1_2; +static int hf_rsl_epc_mode; +static int hf_rsl_bs_fpc_epc_mode; +static int hf_rsl_bs_power; +static int hf_rsl_cm_dtxd; +static int hf_rsl_cm_dtxu; +static int hf_rsl_speech_or_data; +static int hf_rsl_ch_rate_and_type; +static int hf_rsl_speech_coding_alg; +static int hf_rsl_t_nt_bit; +static int hf_rsl_ra_if_data_rte; +static int hf_rsl_data_rte; +static int hf_rsl_alg_id; +static int hf_rsl_key; +static int hf_rsl_cause; +static int hf_rsl_rel_mode; +static int hf_rsl_interf_band; +static int hf_rsl_interf_band_reserved; +static int hf_rsl_meas_res_no; +static int hf_rsl_extension_bit; +static int hf_rsl_dtxd; +static int hf_rsl_rxlev_full_up; +static int hf_rsl_rxlev_sub_up; +static int hf_rsl_rxqual_full_up; +static int hf_rsl_rxqual_sub_up; +static int hf_rsl_class; +static int hf_rsl_cause_value; +static int hf_rsl_paging_grp; +static int hf_rsl_paging_load; +static int hf_rsl_sys_info_type; +static int hf_rsl_timing_offset; +static int hf_rsl_ch_needed; +static int hf_rsl_cbch_load_type; +static int hf_rsl_msg_slt_cnt; +static int hf_rsl_ch_ind; +static int hf_rsl_command; +static int hf_rsl_emlpp_prio; +static int hf_rsl_rtd; +static int hf_rsl_delay_ind; +static int hf_rsl_tfo; +static int hf_rsl_speech_mode_s; +static int hf_rsl_speech_mode_m; +static int hf_rsl_conn_id; +static int hf_rsl_rtp_payload; +static int hf_rsl_rtp_csd_fmt_d; +static int hf_rsl_rtp_csd_fmt_ir; +static int hf_rsl_local_port; +static int hf_rsl_remote_port; +static int hf_rsl_local_ip; +static int hf_rsl_remote_ip; +static int hf_rsl_cstat_tx_pkts; +static int hf_rsl_cstat_tx_octs; +static int hf_rsl_cstat_rx_pkts; +static int hf_rsl_cstat_rx_octs; +static int hf_rsl_cstat_lost_pkts; +static int hf_rsl_cstat_ia_jitter; +static int hf_rsl_cstat_avg_tx_dly; /* Generated from convert_proto_tree_add_text.pl */ -static int hf_rsl_channel_description_tag = -1; -static int hf_rsl_mobile_allocation_tag = -1; -static int hf_rsl_mobile_allocation_len = -1; -static int hf_rsl_no_resources_required = -1; -static int hf_rsl_llsdu_ccch = -1; -static int hf_rsl_llsdu_sacch = -1; -static int hf_rsl_llsdu = -1; -static int hf_rsl_rach_supplementary_information = -1; -static int hf_rsl_full_immediate_assign_info_field = -1; -static int hf_rsl_layer_3_message = -1; -static int hf_rsl_descriptive_group_or_broadcast_call_reference = -1; -static int hf_rsl_group_channel_description = -1; -static int hf_rsl_uic = -1; -static int hf_rsl_codec_list = -1; -static int hf_rsl_cb_cmd_type = -1; -static int hf_rsl_cb_def_bcast = -1; -static int hf_rsl_cb_last_block = -1; -static int hf_rsl_etws_pn = -1; +static int hf_rsl_channel_description_tag; +static int hf_rsl_mobile_allocation_tag; +static int hf_rsl_mobile_allocation_len; +static int hf_rsl_no_resources_required; +static int hf_rsl_llsdu_ccch; +static int hf_rsl_llsdu_sacch; +static int hf_rsl_llsdu; +static int hf_rsl_rach_supplementary_information; +static int hf_rsl_full_immediate_assign_info_field; +static int hf_rsl_layer_3_message; +static int hf_rsl_descriptive_group_or_broadcast_call_reference; +static int hf_rsl_group_channel_description; +static int hf_rsl_uic; +static int hf_rsl_codec_list; +static int hf_rsl_cb_cmd_type; +static int hf_rsl_cb_def_bcast; +static int hf_rsl_cb_last_block; +static int hf_rsl_etws_pn; /* Encapsulating paging messages into a packet REF: EP2192796 - proprietor Huawei */ -static int hf_rsl_paging_spare = -1; -static int hf_rsl_paging_msg_no = -1; -static int hf_rsl_paging_package_ch_no = -1; -static int hf_rsl_paging_package_ch_needed = -1; -static int hf_rsl_paging_emlpp_prio = -1; -static int hf_rsl_paging_type = -1; -static int hf_rsl_paging_group_cs = -1; -static int hf_rsl_paging_group_empty_package = -1; -static int hf_rsl_paging_group_ps_spare = -1; +static int hf_rsl_paging_spare; +static int hf_rsl_paging_msg_no; +static int hf_rsl_paging_package_ch_no; +static int hf_rsl_paging_package_ch_needed; +static int hf_rsl_paging_emlpp_prio; +static int hf_rsl_paging_type; +static int hf_rsl_paging_group_cs; +static int hf_rsl_paging_group_empty_package; +static int hf_rsl_paging_group_ps_spare; /* Physical Context dissection */ -static int hf_rsl_phy_ctx_ie_id = -1; -static int hf_rsl_phy_ctx_ext_rand_access = -1; -static int hf_rsl_phy_ctx_ab_rx_lvl = -1; -static int hf_rsl_phy_ctx_ab_err_bits = -1; -static int hf_rsl_phy_ctx_rx_lvl_ext = -1; +static int hf_rsl_phy_ctx_ie_id; +static int hf_rsl_phy_ctx_ext_rand_access; +static int hf_rsl_phy_ctx_ab_rx_lvl; +static int hf_rsl_phy_ctx_ab_err_bits; +static int hf_rsl_phy_ctx_rx_lvl_ext; /* Osmocom specific IEs */ -static int hf_rsl_osmo_rep_acch_rxqual = -1; -static int hf_rsl_osmo_rep_acch_ul_sacch = -1; -static int hf_rsl_osmo_rep_acch_dl_sacch = -1; -static int hf_rsl_osmo_rep_acch_dl_facch_all = -1; -static int hf_rsl_osmo_rep_acch_dl_facch_cmd = -1; -static int hf_rsl_osmo_top_acch_val = -1; -static int hf_rsl_osmo_tsc_set = -1; -static int hf_rsl_osmo_tsc_val = -1; +static int hf_rsl_osmo_rep_acch_rxqual; +static int hf_rsl_osmo_rep_acch_ul_sacch; +static int hf_rsl_osmo_rep_acch_dl_sacch; +static int hf_rsl_osmo_rep_acch_dl_facch_all; +static int hf_rsl_osmo_rep_acch_dl_facch_cmd; +static int hf_rsl_osmo_top_acch_val; +static int hf_rsl_osmo_top_acch_sacch; +static int hf_rsl_osmo_top_acch_facch; +static int hf_rsl_osmo_top_acch_rxqual; +static int hf_rsl_osmo_tsc_set; +static int hf_rsl_osmo_tsc_val; +static int hf_rsl_osmo_osmux_cid; /* Initialize the subtree pointers */ -static int ett_rsl = -1; -static int ett_ie_link_id = -1; -static int ett_ie_act_type = -1; -static int ett_ie_bs_power = -1; -static int ett_ie_bs_power_params = -1; -static int ett_ie_ch_id = -1; -static int ett_ie_ch_mode = -1; -static int ett_ie_enc_inf = -1; -static int ett_ie_ch_no = -1; -static int ett_ie_frame_no = -1; -static int ett_ie_ho_ref = -1; -static int ett_ie_l1_inf = -1; -static int ett_ie_L3_inf = -1; -static int ett_ie_ms_id = -1; -static int ett_ie_ms_pow = -1; -static int ett_ie_ms_pow_params = -1; -static int ett_ie_phy_ctx = -1; -static int ett_ie_paging_grp = -1; -static int ett_ie_paging_load = -1; -static int ett_ie_access_delay = -1; -static int ett_ie_rach_load = -1; -static int ett_ie_req_ref = -1; -static int ett_ie_req_ref_ra = -1; -static int ett_ie_rel_mode = -1; -static int ett_ie_resource_inf = -1; -static int ett_ie_rlm_cause = -1; -static int ett_ie_staring_time = -1; -static int ett_ie_timing_adv = -1; -static int ett_ie_uplink_meas = -1; -static int ett_ie_full_imm_ass_inf = -1; -static int ett_ie_smscb_inf = -1; -static int ett_ie_ms_timing_offset = -1; -static int ett_ie_err_msg = -1; -static int ett_ie_full_bcch_inf = -1; -static int ett_ie_ch_needed = -1; -static int ett_ie_cb_cmd_type = -1; -static int ett_ie_smscb_mess = -1; -static int ett_ie_cbch_load_inf = -1; -static int ett_ie_smscb_ch_ind = -1; -static int ett_ie_grp_call_ref = -1; -static int ett_ie_ch_desc = -1; -static int ett_ie_nch_drx = -1; -static int ett_ie_cmd_ind = -1; -static int ett_ie_emlpp_prio = -1; -static int ett_ie_uic = -1; -static int ett_ie_main_ch_ref = -1; -static int ett_ie_multirate_conf = -1; -static int ett_ie_multirate_cntrl = -1; -static int ett_ie_sup_codec_types = -1; -static int ett_ie_codec_conf = -1; -static int ett_ie_rtd = -1; -static int ett_ie_tfo_status = -1; -static int ett_ie_llp_apdu = -1; -static int ett_ie_tfo_transp_cont = -1; -static int ett_ie_cause = -1; -static int ett_ie_meas_res_no = -1; -static int ett_ie_message_id = -1; -static int ett_ie_sys_info_type = -1; -static int ett_ie_speech_mode = -1; -static int ett_ie_conn_id = -1; -static int ett_ie_remote_ip = -1; -static int ett_ie_remote_port = -1; -static int ett_ie_local_port = -1; -static int ett_ie_local_ip = -1; -static int ett_ie_rtp_payload = -1; -static int ett_ie_etws_pn = -1; -static int ett_ie_osmo_rep_acch_cap = -1; -static int ett_ie_osmo_top_acch_cap = -1; -static int ett_ie_osmo_training_seq = -1; +static int ett_rsl; +static int ett_ie_link_id; +static int ett_ie_act_type; +static int ett_ie_bs_power; +static int ett_ie_bs_power_params; +static int ett_ie_ch_id; +static int ett_ie_ch_mode; +static int ett_ie_enc_inf; +static int ett_ie_ch_no; +static int ett_ie_frame_no; +static int ett_ie_ho_ref; +static int ett_ie_l1_inf; +static int ett_ie_L3_inf; +static int ett_ie_ms_id; +static int ett_ie_ms_pow; +static int ett_ie_ms_pow_params; +static int ett_ie_phy_ctx; +static int ett_ie_paging_grp; +static int ett_ie_paging_load; +static int ett_ie_access_delay; +static int ett_ie_rach_load; +static int ett_ie_req_ref; +static int ett_ie_req_ref_ra; +static int ett_ie_rel_mode; +static int ett_ie_resource_inf; +static int ett_ie_rlm_cause; +static int ett_ie_staring_time; +static int ett_ie_timing_adv; +static int ett_ie_uplink_meas; +static int ett_ie_full_imm_ass_inf; +static int ett_ie_smscb_inf; +static int ett_ie_ms_timing_offset; +static int ett_ie_err_msg; +static int ett_ie_full_bcch_inf; +static int ett_ie_ch_needed; +static int ett_ie_cb_cmd_type; +static int ett_ie_smscb_mess; +static int ett_ie_cbch_load_inf; +static int ett_ie_smscb_ch_ind; +static int ett_ie_grp_call_ref; +static int ett_ie_ch_desc; +static int ett_ie_nch_drx; +static int ett_ie_cmd_ind; +static int ett_ie_emlpp_prio; +static int ett_ie_uic; +static int ett_ie_main_ch_ref; +static int ett_ie_multirate_conf; +static int ett_ie_multirate_cntrl; +static int ett_ie_sup_codec_types; +static int ett_ie_codec_conf; +static int ett_ie_rtd; +static int ett_ie_tfo_status; +static int ett_ie_llp_apdu; +static int ett_ie_tfo_transp_cont; +static int ett_ie_cause; +static int ett_ie_meas_res_no; +static int ett_ie_message_id; +static int ett_ie_sys_info_type; +static int ett_ie_speech_mode; +static int ett_ie_conn_id; +static int ett_ie_remote_ip; +static int ett_ie_remote_port; +static int ett_ie_local_port; +static int ett_ie_local_ip; +static int ett_ie_rtp_payload; +static int ett_ie_etws_pn; +static int ett_ie_osmo_rep_acch_cap; +static int ett_ie_osmo_top_acch_cap; +static int ett_ie_osmo_training_seq; /* Encapsulating paging messages into a packet REF: EP2192796 - proprietor Huawei */ -static int ett_ie_paging_package = -1; -static int ett_ie_paging_package_number = -1; -static int ett_ie_paging_package_info = -1; -static int ett_ie_paging_package_ch_a_emlpp = -1; -static int ett_ie_paging_group_paras = -1; +static int ett_ie_paging_package; +static int ett_ie_paging_package_number; +static int ett_ie_paging_package_info; +static int ett_ie_paging_package_ch_a_emlpp; +static int ett_ie_paging_group_paras; /* Physical Context dissection */ -static int ett_phy_ctx_ie = -1; -static int ett_phy_ctx_ie_ext_rand_access = -1; -static int ett_phy_ctx_ab_rx_lvl_err_bits = -1; -static int ett_phy_ctx_rxlvl_ext = -1; +static int ett_phy_ctx_ie; +static int ett_phy_ctx_ie_ext_rand_access; +static int ett_phy_ctx_ab_rx_lvl_err_bits; +static int ett_phy_ctx_rxlvl_ext; /* Generated from convert_proto_tree_add_text.pl */ -static expert_field ei_rsl_speech_or_data_indicator = EI_INIT; -static expert_field ei_rsl_facility_information_element_3gpp_ts_44071 = EI_INIT; -static expert_field ei_rsl_embedded_message_tfo_configuration = EI_INIT; -static expert_field ei_rsl_mobile_allocation_deprecated = EI_INIT; +static expert_field ei_rsl_speech_or_data_indicator; +static expert_field ei_rsl_facility_information_element_3gpp_ts_44071; +static expert_field ei_rsl_embedded_message_tfo_configuration; +static expert_field ei_rsl_mobile_allocation_deprecated; static proto_tree *top_tree; static dissector_handle_t rsl_handle; @@ -436,6 +445,7 @@ static const value_string rsl_msg_disc_vals[] = { #define RSL_IE_OSMO_REP_ACCH_CAP 0x60 #define RSL_IE_OSMO_TRAINING_SEQUENCE 0x61 #define RSL_IE_OSMO_TOP_ACCH_CAP 0x62 +#define RSL_IE_OSMO_OSMUX_CID 0x63 static const value_string rsl_msg_type_vals[] = { /* 0 0 0 0 - - - - Radio Link Layer Management messages: */ @@ -678,6 +688,7 @@ static const value_string rsl_ie_type_vals[] = { /* 0x60 */ { RSL_IE_OSMO_REP_ACCH_CAP, "Repeated ACCH Capabilities" }, /* 0x61 */ { RSL_IE_OSMO_TRAINING_SEQUENCE, "Training Sequence Code/Set" }, /* 0x62 */ { RSL_IE_OSMO_TOP_ACCH_CAP, "Temporary ACCH Overpower Capabilities" }, +/* 0x63 */ { RSL_IE_OSMO_OSMUX_CID, "Osmux CID" }, /* 0xe0 */ { RSL_IE_IPAC_SRTP_CONFIG,"SRTP Configuration" }, /* 0xe1 */ { RSL_IE_IPAC_PROXY_UDP, "BSC Proxy UDP Port" }, /* 0xe2 */ { RSL_IE_IPAC_BSCMPL_TOUT,"BSC Multiplex Timeout" }, @@ -1146,10 +1157,9 @@ static const value_string rsl_ra_if_data_rte_vals[] = { { 0, NULL } }; -#if 0 static const value_string rsl_data_rte_vals[] = { { 0x38, "32 kbit/s" }, - { 0x22, "39 kbit/s" }, + { 0x39, "29 kbit/s" }, { 0x18, "14.4 kbit/s" }, { 0x10, "9.6 kbit/s" }, { 0x11, "4.8 kbit/s" }, @@ -1159,7 +1169,6 @@ static const value_string rsl_data_rte_vals[] = { { 0x15, "1 200/75 bit/s (1 200 network-to-MS, 75 MS-to-network)" }, { 0, NULL } }; -#endif static int dissect_rsl_ie_ch_mode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory) @@ -1300,7 +1309,9 @@ static int dissect_rsl_ie_frame_no(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory) { proto_tree *ie_tree; + proto_item *ti; guint8 ie_id; + guint16 rfn; if (is_mandatory == FALSE) { ie_id = tvb_get_guint8(tvb, offset); @@ -1314,11 +1325,14 @@ dissect_rsl_ie_frame_no(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN); offset++; + rfn = parse_reduced_frame_number(tvb, offset); proto_tree_add_item(ie_tree, hf_rsl_req_ref_T1prim, tvb, offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(ie_tree, hf_rsl_req_ref_T3, tvb, offset, 2, ENC_BIG_ENDIAN); offset++; proto_tree_add_item(ie_tree, hf_rsl_req_ref_T2, tvb, offset, 1, ENC_BIG_ENDIAN); offset++; + ti = proto_tree_add_uint(ie_tree, hf_rsl_req_ref_rfn, tvb, offset - 2, 2, rfn); + proto_item_set_generated(ti); return offset; } @@ -1842,6 +1856,7 @@ dissect_rsl_ie_req_ref(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, { proto_tree *ie_tree, *ra_tree; guint8 ie_id; + guint16 rfn; proto_item *ti; if (is_mandatory == FALSE) { @@ -1859,11 +1874,14 @@ dissect_rsl_ie_req_ref(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, ra_tree = proto_item_add_subtree(ti, ett_ie_req_ref_ra); proto_tree_add_item(ra_tree, hf_rsl_req_ref_ra_est_cause, tvb, offset, 1, ENC_BIG_ENDIAN); offset++; + rfn = parse_reduced_frame_number(tvb, offset); proto_tree_add_item(ie_tree, hf_rsl_req_ref_T1prim, tvb, offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(ie_tree, hf_rsl_req_ref_T3, tvb, offset, 2, ENC_BIG_ENDIAN); offset++; proto_tree_add_item(ie_tree, hf_rsl_req_ref_T2, tvb, offset, 1, ENC_BIG_ENDIAN); offset++; + ti = proto_tree_add_uint(ie_tree, hf_rsl_req_ref_rfn, tvb, offset - 2, 2, rfn); + proto_item_set_generated(ti); return offset; } @@ -2007,6 +2025,9 @@ dissect_rsl_ie_rlm_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN); offset++; + if (length == 0) + return offset; + /* The Cause Value is a one octet field if the extension bit is set to 0. * If the extension bit is set to 1, the Cause Value is a two octet field. */ @@ -3447,7 +3468,7 @@ static const true_false_string rsl_paging_type_vals = { }; static int -dissect_rsl_paging_group_paras(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean increse_offset) +dissect_rsl_paging_group_paras(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset) { proto_tree *ie_tree; guint8 paging_type, i, length; @@ -3458,7 +3479,7 @@ dissect_rsl_paging_group_paras(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree if(paging_type == 0){ length = 2; /* length of Paging Group Paras if it is CS type (2 byte Cs Paging Group Para) */ }else{ - length = 9; /* length of Paging Group Paras if it is PS type (1 byte spare, 4x 2 byte of PS Paging Group Para */ + length = 5; /* length of Paging Group Paras if it is PS type (1 byte spare, 4x 1 byte of PS Paging Group Para */ } ie_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ie_paging_group_paras, NULL, "Paging Group Paras"); @@ -3477,15 +3498,9 @@ dissect_rsl_paging_group_paras(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree { proto_tree_add_item(ie_tree, hf_rsl_paging_group_ps_spare, tvb, offset, 1, ENC_BIG_ENDIAN); offset++; - for(i = 1; i <= 5; i++){ + for(i = 1; i <= 4; i++){ proto_tree_add_item(ie_tree, hf_rsl_paging_grp, tvb, offset, 1, ENC_BIG_ENDIAN); offset++; - proto_tree_add_item(ie_tree, hf_rsl_paging_group_empty_package, tvb, offset, 1, ENC_BIG_ENDIAN); - if(!increse_offset){ - return offset; /* it's end of RSL frame */ - }else{ - offset++; /* move over empty (0x00) packet */ - } } } @@ -3542,7 +3557,6 @@ dissect_rsl_paging_package(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tr { proto_tree *ie_tree; guint8 i, length, paging_type; - gboolean increse_offset = TRUE; for(i = 1; i <= package_number; i++){ /* Calculating whole length of Paging Package Info */ @@ -3551,7 +3565,7 @@ dissect_rsl_paging_package(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tr if(paging_type == 0){ length = length + 2; /* length of Paging Group Paras if it is CS type (2 byte Cs Paging Group Para) */ }else{ - length = length + 9; /* length of Paging Group Paras if it is PS type (1 byte spare, 4x 2 byte of PS Paging Group Para */ + length = length + 5; /* length of Paging Group Paras if it is PS type (1 byte spare, 4x 1 byte of PS Paging Group Para */ } ie_tree = proto_tree_add_subtree_format(tree, tvb, offset, length, ett_ie_paging_package, NULL, "Paging Package Info %u", i); @@ -3559,13 +3573,7 @@ dissect_rsl_paging_package(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tr offset = dissect_rsl_paging_package_channel_and_emlpp(tvb, pinfo, ie_tree, offset); offset = dissect_rsl_ie_ms_id(tvb, pinfo, ie_tree, offset, TRUE); - /* if its last dissected packet, incresing offset causes pointing out of RSL frame range - [Malformed Packet] appears */ - if( i == package_number){ - increse_offset = FALSE; - }else{ - increse_offset = TRUE; - } - offset = dissect_rsl_paging_group_paras(tvb, pinfo, ie_tree, offset, increse_offset); + offset = dissect_rsl_paging_group_paras(tvb, pinfo, ie_tree, offset); } return offset; @@ -3650,6 +3658,9 @@ dissect_rsl_ie_osmo_top_acch_cap(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree_add_item_ret_uint(ie_tree, hf_rsl_ie_length, tvb, offset++, 1, ENC_NA, &length); proto_item_set_len(ti, length + 2); + proto_tree_add_item(ie_tree, hf_rsl_osmo_top_acch_sacch, tvb, offset, 1, ENC_NA); + proto_tree_add_item(ie_tree, hf_rsl_osmo_top_acch_facch, tvb, offset, 1, ENC_NA); + proto_tree_add_item(ie_tree, hf_rsl_osmo_top_acch_rxqual, tvb, offset, 1, ENC_NA); proto_tree_add_item(ie_tree, hf_rsl_osmo_top_acch_val, tvb, offset, 1, ENC_NA); offset++; @@ -3711,6 +3722,7 @@ dissct_rsl_ipaccess_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int rtp_dyn_payload_t *dyn_pl = NULL; struct dyn_pl_info_t *dyn_pl_info; conversation_t *conv; + gboolean use_osmux = FALSE; msg_type = tvb_get_guint8(tvb, offset) & 0x7f; offset++; @@ -3857,29 +3869,38 @@ dissct_rsl_ipaccess_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int proto_tree_add_item(ie_tree, hf_rsl_cstat_avg_tx_dly, tvb, offset+24, 4, ENC_BIG_ENDIAN); break; + case RSL_IE_OSMO_OSMUX_CID: + if (global_rsl_use_osmo_bts) { + proto_tree_add_item(ie_tree, hf_rsl_osmo_osmux_cid, tvb, + offset, len, ENC_BIG_ENDIAN); + use_osmux = TRUE; + } + break; } offset += len; } switch (msg_type) { case RSL_MSG_TYPE_IPAC_CRCX_ACK: - /* Notify the RTP and RTCP dissectors about a new RTP stream */ - src_addr.type = AT_IPv4; - src_addr.len = 4; - src_addr.data = (guint8 *)&local_addr; - - conv = find_or_create_conversation(pinfo); - dyn_pl_info = (struct dyn_pl_info_t *)conversation_get_proto_data(conv, proto_rsl); - if (dyn_pl_info && (dyn_pl_info->rtp_codec == 2 || dyn_pl_info->rtp_codec == 5)) { - dyn_pl = rtp_dyn_payload_new(); - rtp_dyn_payload_insert(dyn_pl, dyn_pl_info->rtp_pt, "AMR", 8000); + if (!use_osmux) { + /* Notify the RTP and RTCP dissectors about a new RTP stream */ + src_addr.type = AT_IPv4; + src_addr.len = 4; + src_addr.data = (guint8 *)&local_addr; + + conv = find_or_create_conversation(pinfo); + dyn_pl_info = (struct dyn_pl_info_t *)conversation_get_proto_data(conv, proto_rsl); + if (dyn_pl_info && (dyn_pl_info->rtp_codec == 2 || dyn_pl_info->rtp_codec == 5)) { + dyn_pl = rtp_dyn_payload_new(); + rtp_dyn_payload_insert(dyn_pl, dyn_pl_info->rtp_pt, "AMR", 8000, 1); + } + conversation_delete_proto_data(conv, proto_rsl); + wmem_free(wmem_file_scope(), dyn_pl_info); + rtp_add_address(pinfo, PT_UDP, &src_addr, local_port, 0, + "GSM A-bis/IP", pinfo->num, 0, dyn_pl); + rtcp_add_address(pinfo, &src_addr, local_port+1, 0, + "GSM A-bis/IP", pinfo->num); } - conversation_delete_proto_data(conv, proto_rsl); - wmem_free(wmem_file_scope(), dyn_pl_info); - rtp_add_address(pinfo, PT_UDP, &src_addr, local_port, 0, - "GSM A-bis/IP", pinfo->num, 0, dyn_pl); - rtcp_add_address(pinfo, &src_addr, local_port+1, 0, - "GSM A-bis/IP", pinfo->num); break; } return offset; @@ -4654,11 +4675,11 @@ req_ref_ra_est_cause_convert(gchar *result, guint32 ra) goto found; } - g_snprintf(result, ITEM_LABEL_LENGTH, "unknown ra %u", ra); + snprintf(result, ITEM_LABEL_LENGTH, "unknown ra %u", ra); return; found: - g_snprintf(result, ITEM_LABEL_LENGTH, "%s", str); + snprintf(result, ITEM_LABEL_LENGTH, "%s", str); } static int @@ -4779,6 +4800,11 @@ void proto_register_rsl(void) FT_UINT8, BASE_DEC, NULL, 0x1f, NULL, HFILL } }, + { &hf_rsl_req_ref_rfn, + { "RFN", "gsm_abis_rsl.req_ref_rfn", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Reduced Frame Number", HFILL } + }, { &hf_rsl_timing_adv, { "Timing Advance", "gsm_abis_rsl.timing_adv", FT_UINT8, BASE_DEC, NULL, 0x0, @@ -4966,7 +4992,7 @@ void proto_register_rsl(void) }, { &hf_rsl_data_rte, { "Data rate", "gsm_abis_rsl.data_rte", - FT_UINT8, BASE_DEC, VALS(rsl_ra_if_data_rte_vals), 0x3f, + FT_UINT8, BASE_DEC, VALS(rsl_data_rte_vals), 0x3f, NULL, HFILL } }, { &hf_rsl_alg_id, @@ -5264,6 +5290,21 @@ void proto_register_rsl(void) FT_UINT8, BASE_DEC | BASE_UNIT_STRING, &units_decibels, 0x07, NULL, HFILL } }, + { &hf_rsl_osmo_top_acch_rxqual, + { "Uplink RxQual threshold", "gsm_abis_rsl.osmo_top_acch.rxqual", + FT_UINT8, BASE_DEC, VALS(gsm_a_rr_rxqual_vals), 0x38, + NULL, HFILL } + }, + { &hf_rsl_osmo_top_acch_facch, + { "FACCH Overpower", "gsm_abis_rsl.osmo_top_acch.facch", + FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x40, + NULL, HFILL } + }, + { &hf_rsl_osmo_top_acch_sacch, + { "SACCH Overpower", "gsm_abis_rsl.osmo_top_acch.sacch", + FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80, + NULL, HFILL } + }, { &hf_rsl_osmo_tsc_set, { "Training Sequence Set", "gsm_abis_rsl.osmo_tsc_set", FT_UINT8, BASE_DEC, VALS(rsl_osmo_tsc_set_vals), 0, @@ -5274,6 +5315,11 @@ void proto_register_rsl(void) FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } }, + { &hf_rsl_osmo_osmux_cid, + { "Osmux CID", "gsm_abis_rsl.osmo_osmux_cid", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL } + }, /* Generated from convert_proto_tree_add_text.pl */ { &hf_rsl_channel_description_tag, { "Channel Description Tag", "gsm_abis_rsl.channel_description_tag", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_rsl_mobile_allocation_tag, { "Mobile Allocation Tag", "gsm_abis_rsl.mobile_allocation_tag", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }}, @@ -5462,6 +5508,7 @@ void proto_register_rsl(void) RSL_ATT_TLVDEF(RSL_IE_IPAC_RTP_PAYLOAD, TLV_TYPE_TV, 0); RSL_ATT_TLVDEF(RSL_IE_IPAC_RTP_CSD_FMT, TLV_TYPE_TV, 0); RSL_ATT_TLVDEF(RSL_IE_OSMO_TRAINING_SEQUENCE, TLV_TYPE_TLV, 0); + RSL_ATT_TLVDEF(RSL_IE_OSMO_OSMUX_CID, TLV_TYPE_TLV, 0); /* Register the protocol name and description */ proto_rsl = proto_register_protocol("Radio Signalling Link (RSL)", "RSL", "gsm_abis_rsl"); @@ -5473,7 +5520,7 @@ void proto_register_rsl(void) rsl_handle = register_dissector("gsm_abis_rsl", dissect_rsl, proto_rsl); - rsl_module = prefs_register_protocol(proto_rsl, proto_reg_handoff_rsl); + rsl_module = prefs_register_protocol(proto_rsl, NULL); prefs_register_bool_preference(rsl_module, "use_ipaccess_rsl", "Use nanoBTS definitions", "Use ipaccess nanoBTS specific definitions for RSL", |