aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-rsl.c
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/packet-rsl.c')
-rw-r--r--epan/dissectors/packet-rsl.c557
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",