diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-09-19 04:14:53 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-09-19 04:14:53 +0000 |
commit | a86c5f7cae7ec9a3398300555a0b644689d946a1 (patch) | |
tree | 39fe4b107c71174fd1e8a8ceb9a4d2aa14116248 /epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.c | |
parent | Releasing progress-linux version 4.2.6-1~progress7.99u1. (diff) | |
download | wireshark-a86c5f7cae7ec9a3398300555a0b644689d946a1.tar.xz wireshark-a86c5f7cae7ec9a3398300555a0b644689d946a1.zip |
Merging upstream version 4.4.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.c')
-rw-r--r-- | epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.c | 855 |
1 files changed, 484 insertions, 371 deletions
diff --git a/epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.c b/epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.c index 72d8992e..a391b9cf 100644 --- a/epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.c +++ b/epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.c @@ -1,9 +1,9 @@ /* packet-lte-rrc-template.c * Routines for Evolved Universal Terrestrial Radio Access (E-UTRA); * Radio Resource Control (RRC) protocol specification - * (3GPP TS 36.331 V17.5.0 Release 17) packet dissection + * (3GPP TS 36.331 V18.2.0 Release 18) packet dissection * Copyright 2008, Vincent Helfre - * Copyright 2009-2023, Pascal Quantin + * Copyright 2009-2024, Pascal Quantin * * Wireshark - Network traffic analyzer * By Gerald Combs <gerald@wireshark.org> @@ -25,9 +25,12 @@ #include <epan/exceptions.h> #include <epan/show_exception.h> #include <epan/proto_data.h> +#include <epan/tfs.h> +#include <epan/unit_strings.h> #include <wsutil/str_util.h> #include <wsutil/epochs.h> +#include <wsutil/array.h> #include "packet-per.h" #include "packet-rrc.h" @@ -48,24 +51,28 @@ void proto_register_lte_rrc(void); void proto_reg_handoff_lte_rrc(void); -static dissector_handle_t nas_eps_handle = NULL; -static dissector_handle_t nas_5gs_handle = NULL; -static dissector_handle_t rrc_irat_ho_to_utran_cmd_handle = NULL; -static dissector_handle_t rrc_sys_info_cont_handle = NULL; -static dissector_handle_t gsm_a_dtap_handle = NULL; -static dissector_handle_t gsm_rlcmac_dl_handle = NULL; -static dissector_handle_t nr_rrc_reconf_handle = NULL; +static dissector_handle_t nas_eps_handle; +static dissector_handle_t nas_5gs_handle; +static dissector_handle_t rrc_irat_ho_to_utran_cmd_handle; +static dissector_handle_t rrc_sys_info_cont_handle; +static dissector_handle_t gsm_a_dtap_handle; +static dissector_handle_t gsm_rlcmac_dl_handle; +static dissector_handle_t nr_rrc_reconf_handle; static dissector_handle_t lte_rrc_conn_reconf_handle; static dissector_handle_t lte_rrc_dl_ccch_handle; -static wmem_map_t *lte_rrc_etws_cmas_dcs_hash = NULL; +static wmem_map_t *lte_rrc_etws_cmas_dcs_hash; /* Keep track of where/how the System Info value has changed */ -static wmem_map_t *lte_rrc_system_info_value_changed_hash = NULL; -static guint8 system_info_value_current; -static gboolean system_info_value_current_set; +static wmem_map_t *lte_rrc_system_info_value_changed_hash; +static uint8_t system_info_value_current; +static bool system_info_value_current_set; -static gboolean lte_rrc_nas_in_root_tree; +static wmem_map_t *lte_rrc_dcch_segment_ueid_count_hash; +static wmem_tree_t *lte_rrc_dcch_segment_id_tree; + +static bool lte_rrc_nas_in_root_tree; +static bool lte_rrc_reassemble_dcch_segments; extern int proto_mac_lte; extern int proto_rlc_lte; @@ -76,275 +83,289 @@ extern int proto_pdcp_lte; #include "packet-lte-rrc-val.h" /* Initialize the protocol and registered fields */ -static int proto_lte_rrc = -1; +static int proto_lte_rrc; #include "packet-lte-rrc-hf.c" -static int hf_lte_rrc_eutra_cap_feat_group_ind_1 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_2 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_3 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_4 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_5 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_6 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_7 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_8 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_9 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_10 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_11 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_12 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_13 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_14 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_15 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_16 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_17 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_18 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_19 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_20 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_21 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_22 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_23 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_24 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_25 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_26 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_27 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_28 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_29 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_30 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_31 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_32 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_33 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_34 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_35 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_36 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_37 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_38 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_39 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_40 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_41 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_42 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_43 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_44 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_45 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_46 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_47 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_48 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_49 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_50 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_51 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_52 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_53 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_54 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_55 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_56 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_57 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_58 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_59 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_60 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_61 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_62 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_63 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_64 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_101 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_102 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_103 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_104 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_105 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_106 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_107 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_108 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_109 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_110 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_111 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_112 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_113 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_114 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_115 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_116 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_117 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_118 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_119 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_120 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_121 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_122 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_123 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_124 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_125 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_126 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_127 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_128 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_129 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_130 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_131 = -1; -static int hf_lte_rrc_eutra_cap_feat_group_ind_132 = -1; -static int hf_lte_rrc_serialNumber_gs = -1; -static int hf_lte_rrc_serialNumber_msg_code = -1; -static int hf_lte_rrc_serialNumber_upd_nb = -1; -static int hf_lte_rrc_warningType_value = -1; -static int hf_lte_rrc_warningType_emergency_user_alert = -1; -static int hf_lte_rrc_warningType_popup = -1; -static int hf_lte_rrc_warningMessageSegment_nb_pages = -1; -static int hf_lte_rrc_warningMessageSegment_decoded_page = -1; -static int hf_lte_rrc_interBandTDD_CA_WithDifferentConfig_bit1 = -1; -static int hf_lte_rrc_interBandTDD_CA_WithDifferentConfig_bit2 = -1; -static int hf_lte_rrc_tdd_FDD_CA_PCellDuplex_r12_bit1 = -1; -static int hf_lte_rrc_tdd_FDD_CA_PCellDuplex_r12_bit2 = -1; -static int hf_lte_rrc_aperiodicCSI_Reporting_r13_bit1 = -1; -static int hf_lte_rrc_aperiodicCSI_Reporting_r13_bit2 = -1; -static int hf_lte_rrc_codebook_HARQ_ACK_r13_bit1 = -1; -static int hf_lte_rrc_codebook_HARQ_ACK_r13_bit2 = -1; -static int hf_lte_rrc_sr_config_periodicity = -1; -static int hf_lte_rrc_sr_config_subframe_offset = -1; -static int hf_lte_rrc_cdma_time = -1; -static int hf_lte_rrc_utc_time = -1; -static int hf_lte_rrc_local_time = -1; -static int hf_lte_rrc_absolute_time = -1; -static int hf_lte_rrc_transmissionModeList_r12_tm1 = -1; -static int hf_lte_rrc_transmissionModeList_r12_tm2 = -1; -static int hf_lte_rrc_transmissionModeList_r12_tm3 = -1; -static int hf_lte_rrc_transmissionModeList_r12_tm4 = -1; -static int hf_lte_rrc_transmissionModeList_r12_tm6 = -1; -static int hf_lte_rrc_transmissionModeList_r12_tm8 = -1; -static int hf_lte_rrc_transmissionModeList_r12_tm9 = -1; -static int hf_lte_rrc_transmissionModeList_r12_tm10 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_0 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_1 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_2 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_3 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_4 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_5 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_6 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_7 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_8 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_9 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_10 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_11 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_12 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_13 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_14 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_15 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_16 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_17 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_18 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_19 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_20 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_21 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_22 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_23 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_24 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_25 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_26 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_27 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_28 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_29 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_30 = -1; -static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_31 = -1; -static int hf_lte_rrc_sib11_fragments = -1; -static int hf_lte_rrc_sib11_fragment = -1; -static int hf_lte_rrc_sib11_fragment_overlap = -1; -static int hf_lte_rrc_sib11_fragment_overlap_conflict = -1; -static int hf_lte_rrc_sib11_fragment_multiple_tails = -1; -static int hf_lte_rrc_sib11_fragment_too_long_fragment = -1; -static int hf_lte_rrc_sib11_fragment_error = -1; -static int hf_lte_rrc_sib11_fragment_count = -1; -static int hf_lte_rrc_sib11_reassembled_in = -1; -static int hf_lte_rrc_sib11_reassembled_length = -1; -static int hf_lte_rrc_sib11_reassembled_data = -1; -static int hf_lte_rrc_sib12_fragments = -1; -static int hf_lte_rrc_sib12_fragment = -1; -static int hf_lte_rrc_sib12_fragment_overlap = -1; -static int hf_lte_rrc_sib12_fragment_overlap_conflict = -1; -static int hf_lte_rrc_sib12_fragment_multiple_tails = -1; -static int hf_lte_rrc_sib12_fragment_too_long_fragment = -1; -static int hf_lte_rrc_sib12_fragment_error = -1; -static int hf_lte_rrc_sib12_fragment_count = -1; -static int hf_lte_rrc_sib12_reassembled_in = -1; -static int hf_lte_rrc_sib12_reassembled_length = -1; -static int hf_lte_rrc_sib12_reassembled_data = -1; -static int hf_lte_rrc_measGapPatterns_r15_bit1 = -1; -static int hf_lte_rrc_measGapPatterns_r15_bit2 = -1; -static int hf_lte_rrc_measGapPatterns_r15_bit3 = -1; -static int hf_lte_rrc_measGapPatterns_r15_bit4 = -1; -static int hf_lte_rrc_measGapPatterns_r15_bit5 = -1; -static int hf_lte_rrc_measGapPatterns_r15_bit6 = -1; -static int hf_lte_rrc_measGapPatterns_r15_bit7 = -1; -static int hf_lte_rrc_measGapPatterns_r15_bit8 = -1; +static int hf_lte_rrc_eutra_cap_feat_group_ind_1; +static int hf_lte_rrc_eutra_cap_feat_group_ind_2; +static int hf_lte_rrc_eutra_cap_feat_group_ind_3; +static int hf_lte_rrc_eutra_cap_feat_group_ind_4; +static int hf_lte_rrc_eutra_cap_feat_group_ind_5; +static int hf_lte_rrc_eutra_cap_feat_group_ind_6; +static int hf_lte_rrc_eutra_cap_feat_group_ind_7; +static int hf_lte_rrc_eutra_cap_feat_group_ind_8; +static int hf_lte_rrc_eutra_cap_feat_group_ind_9; +static int hf_lte_rrc_eutra_cap_feat_group_ind_10; +static int hf_lte_rrc_eutra_cap_feat_group_ind_11; +static int hf_lte_rrc_eutra_cap_feat_group_ind_12; +static int hf_lte_rrc_eutra_cap_feat_group_ind_13; +static int hf_lte_rrc_eutra_cap_feat_group_ind_14; +static int hf_lte_rrc_eutra_cap_feat_group_ind_15; +static int hf_lte_rrc_eutra_cap_feat_group_ind_16; +static int hf_lte_rrc_eutra_cap_feat_group_ind_17; +static int hf_lte_rrc_eutra_cap_feat_group_ind_18; +static int hf_lte_rrc_eutra_cap_feat_group_ind_19; +static int hf_lte_rrc_eutra_cap_feat_group_ind_20; +static int hf_lte_rrc_eutra_cap_feat_group_ind_21; +static int hf_lte_rrc_eutra_cap_feat_group_ind_22; +static int hf_lte_rrc_eutra_cap_feat_group_ind_23; +static int hf_lte_rrc_eutra_cap_feat_group_ind_24; +static int hf_lte_rrc_eutra_cap_feat_group_ind_25; +static int hf_lte_rrc_eutra_cap_feat_group_ind_26; +static int hf_lte_rrc_eutra_cap_feat_group_ind_27; +static int hf_lte_rrc_eutra_cap_feat_group_ind_28; +static int hf_lte_rrc_eutra_cap_feat_group_ind_29; +static int hf_lte_rrc_eutra_cap_feat_group_ind_30; +static int hf_lte_rrc_eutra_cap_feat_group_ind_31; +static int hf_lte_rrc_eutra_cap_feat_group_ind_32; +static int hf_lte_rrc_eutra_cap_feat_group_ind_33; +static int hf_lte_rrc_eutra_cap_feat_group_ind_34; +static int hf_lte_rrc_eutra_cap_feat_group_ind_35; +static int hf_lte_rrc_eutra_cap_feat_group_ind_36; +static int hf_lte_rrc_eutra_cap_feat_group_ind_37; +static int hf_lte_rrc_eutra_cap_feat_group_ind_38; +static int hf_lte_rrc_eutra_cap_feat_group_ind_39; +static int hf_lte_rrc_eutra_cap_feat_group_ind_40; +static int hf_lte_rrc_eutra_cap_feat_group_ind_41; +static int hf_lte_rrc_eutra_cap_feat_group_ind_42; +static int hf_lte_rrc_eutra_cap_feat_group_ind_43; +static int hf_lte_rrc_eutra_cap_feat_group_ind_44; +static int hf_lte_rrc_eutra_cap_feat_group_ind_45; +static int hf_lte_rrc_eutra_cap_feat_group_ind_46; +static int hf_lte_rrc_eutra_cap_feat_group_ind_47; +static int hf_lte_rrc_eutra_cap_feat_group_ind_48; +static int hf_lte_rrc_eutra_cap_feat_group_ind_49; +static int hf_lte_rrc_eutra_cap_feat_group_ind_50; +static int hf_lte_rrc_eutra_cap_feat_group_ind_51; +static int hf_lte_rrc_eutra_cap_feat_group_ind_52; +static int hf_lte_rrc_eutra_cap_feat_group_ind_53; +static int hf_lte_rrc_eutra_cap_feat_group_ind_54; +static int hf_lte_rrc_eutra_cap_feat_group_ind_55; +static int hf_lte_rrc_eutra_cap_feat_group_ind_56; +static int hf_lte_rrc_eutra_cap_feat_group_ind_57; +static int hf_lte_rrc_eutra_cap_feat_group_ind_58; +static int hf_lte_rrc_eutra_cap_feat_group_ind_59; +static int hf_lte_rrc_eutra_cap_feat_group_ind_60; +static int hf_lte_rrc_eutra_cap_feat_group_ind_61; +static int hf_lte_rrc_eutra_cap_feat_group_ind_62; +static int hf_lte_rrc_eutra_cap_feat_group_ind_63; +static int hf_lte_rrc_eutra_cap_feat_group_ind_64; +static int hf_lte_rrc_eutra_cap_feat_group_ind_101; +static int hf_lte_rrc_eutra_cap_feat_group_ind_102; +static int hf_lte_rrc_eutra_cap_feat_group_ind_103; +static int hf_lte_rrc_eutra_cap_feat_group_ind_104; +static int hf_lte_rrc_eutra_cap_feat_group_ind_105; +static int hf_lte_rrc_eutra_cap_feat_group_ind_106; +static int hf_lte_rrc_eutra_cap_feat_group_ind_107; +static int hf_lte_rrc_eutra_cap_feat_group_ind_108; +static int hf_lte_rrc_eutra_cap_feat_group_ind_109; +static int hf_lte_rrc_eutra_cap_feat_group_ind_110; +static int hf_lte_rrc_eutra_cap_feat_group_ind_111; +static int hf_lte_rrc_eutra_cap_feat_group_ind_112; +static int hf_lte_rrc_eutra_cap_feat_group_ind_113; +static int hf_lte_rrc_eutra_cap_feat_group_ind_114; +static int hf_lte_rrc_eutra_cap_feat_group_ind_115; +static int hf_lte_rrc_eutra_cap_feat_group_ind_116; +static int hf_lte_rrc_eutra_cap_feat_group_ind_117; +static int hf_lte_rrc_eutra_cap_feat_group_ind_118; +static int hf_lte_rrc_eutra_cap_feat_group_ind_119; +static int hf_lte_rrc_eutra_cap_feat_group_ind_120; +static int hf_lte_rrc_eutra_cap_feat_group_ind_121; +static int hf_lte_rrc_eutra_cap_feat_group_ind_122; +static int hf_lte_rrc_eutra_cap_feat_group_ind_123; +static int hf_lte_rrc_eutra_cap_feat_group_ind_124; +static int hf_lte_rrc_eutra_cap_feat_group_ind_125; +static int hf_lte_rrc_eutra_cap_feat_group_ind_126; +static int hf_lte_rrc_eutra_cap_feat_group_ind_127; +static int hf_lte_rrc_eutra_cap_feat_group_ind_128; +static int hf_lte_rrc_eutra_cap_feat_group_ind_129; +static int hf_lte_rrc_eutra_cap_feat_group_ind_130; +static int hf_lte_rrc_eutra_cap_feat_group_ind_131; +static int hf_lte_rrc_eutra_cap_feat_group_ind_132; +static int hf_lte_rrc_serialNumber_gs; +static int hf_lte_rrc_serialNumber_msg_code; +static int hf_lte_rrc_serialNumber_upd_nb; +static int hf_lte_rrc_warningType_value; +static int hf_lte_rrc_warningType_emergency_user_alert; +static int hf_lte_rrc_warningType_popup; +static int hf_lte_rrc_warningMessageSegment_nb_pages; +static int hf_lte_rrc_warningMessageSegment_decoded_page; +static int hf_lte_rrc_interBandTDD_CA_WithDifferentConfig_bit1; +static int hf_lte_rrc_interBandTDD_CA_WithDifferentConfig_bit2; +static int hf_lte_rrc_tdd_FDD_CA_PCellDuplex_r12_bit1; +static int hf_lte_rrc_tdd_FDD_CA_PCellDuplex_r12_bit2; +static int hf_lte_rrc_aperiodicCSI_Reporting_r13_bit1; +static int hf_lte_rrc_aperiodicCSI_Reporting_r13_bit2; +static int hf_lte_rrc_codebook_HARQ_ACK_r13_bit1; +static int hf_lte_rrc_codebook_HARQ_ACK_r13_bit2; +static int hf_lte_rrc_sr_config_periodicity; +static int hf_lte_rrc_sr_config_subframe_offset; +static int hf_lte_rrc_cdma_time; +static int hf_lte_rrc_utc_time; +static int hf_lte_rrc_local_time; +static int hf_lte_rrc_absolute_time; +static int hf_lte_rrc_transmissionModeList_r12_tm1; +static int hf_lte_rrc_transmissionModeList_r12_tm2; +static int hf_lte_rrc_transmissionModeList_r12_tm3; +static int hf_lte_rrc_transmissionModeList_r12_tm4; +static int hf_lte_rrc_transmissionModeList_r12_tm6; +static int hf_lte_rrc_transmissionModeList_r12_tm8; +static int hf_lte_rrc_transmissionModeList_r12_tm9; +static int hf_lte_rrc_transmissionModeList_r12_tm10; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_0; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_1; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_2; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_3; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_4; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_5; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_6; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_7; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_8; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_9; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_10; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_11; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_12; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_13; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_14; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_15; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_16; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_17; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_18; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_19; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_20; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_21; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_22; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_23; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_24; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_25; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_26; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_27; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_28; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_29; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_30; +static int hf_lte_rrc_modifiedMPR_Behavior_r10_mpr_ampr_31; +static int hf_lte_rrc_sib11_fragments; +static int hf_lte_rrc_sib11_fragment; +static int hf_lte_rrc_sib11_fragment_overlap; +static int hf_lte_rrc_sib11_fragment_overlap_conflict; +static int hf_lte_rrc_sib11_fragment_multiple_tails; +static int hf_lte_rrc_sib11_fragment_too_long_fragment; +static int hf_lte_rrc_sib11_fragment_error; +static int hf_lte_rrc_sib11_fragment_count; +static int hf_lte_rrc_sib11_reassembled_in; +static int hf_lte_rrc_sib11_reassembled_length; +static int hf_lte_rrc_sib11_reassembled_data; +static int hf_lte_rrc_sib12_fragments; +static int hf_lte_rrc_sib12_fragment; +static int hf_lte_rrc_sib12_fragment_overlap; +static int hf_lte_rrc_sib12_fragment_overlap_conflict; +static int hf_lte_rrc_sib12_fragment_multiple_tails; +static int hf_lte_rrc_sib12_fragment_too_long_fragment; +static int hf_lte_rrc_sib12_fragment_error; +static int hf_lte_rrc_sib12_fragment_count; +static int hf_lte_rrc_sib12_reassembled_in; +static int hf_lte_rrc_sib12_reassembled_length; +static int hf_lte_rrc_sib12_reassembled_data; +static int hf_lte_rrc_dcch_segment_fragments; +static int hf_lte_rrc_dcch_segment_fragment; +static int hf_lte_rrc_dcch_segment_fragment_overlap; +static int hf_lte_rrc_dcch_segment_fragment_overlap_conflict; +static int hf_lte_rrc_dcch_segment_fragment_multiple_tails; +static int hf_lte_rrc_dcch_segment_fragment_too_long_fragment; +static int hf_lte_rrc_dcch_segment_fragment_error; +static int hf_lte_rrc_dcch_segment_fragment_count; +static int hf_lte_rrc_dcch_segment_reassembled_in; +static int hf_lte_rrc_dcch_segment_reassembled_length; +static int hf_lte_rrc_dcch_segment_reassembled_data; +static int hf_lte_rrc_measGapPatterns_r15_bit1; +static int hf_lte_rrc_measGapPatterns_r15_bit2; +static int hf_lte_rrc_measGapPatterns_r15_bit3; +static int hf_lte_rrc_measGapPatterns_r15_bit4; +static int hf_lte_rrc_measGapPatterns_r15_bit5; +static int hf_lte_rrc_measGapPatterns_r15_bit6; +static int hf_lte_rrc_measGapPatterns_r15_bit7; +static int hf_lte_rrc_measGapPatterns_r15_bit8; /* Initialize the subtree pointers */ -static int ett_lte_rrc = -1; +static int ett_lte_rrc; #include "packet-lte-rrc-ett.c" -static gint ett_lte_rrc_featureGroupIndicators = -1; -static gint ett_lte_rrc_featureGroupIndRel9Add = -1; -static gint ett_lte_rrc_featureGroupIndRel10 = -1; -static gint ett_lte_rrc_absTimeInfo = -1; -static gint ett_lte_rrc_nas_SecurityParam = -1; -static gint ett_lte_rrc_targetRAT_MessageContainer = -1; -static gint ett_lte_rrc_siPsiSibContainer = -1; -static gint ett_lte_rrc_dedicatedInfoNAS = -1; -static gint ett_lte_rrc_timeInfo = -1; -static gint ett_lte_rrc_serialNumber = -1; -static gint ett_lte_rrc_warningType = -1; -static gint ett_lte_rrc_dataCodingScheme = -1; -static gint ett_lte_rrc_warningMessageSegment = -1; -static gint ett_lte_rrc_interBandTDD_CA_WithDifferentConfig = -1; -static gint ett_lte_rrc_tdd_FDD_CA_PCellDuplex_r12 = -1; -static gint ett_lte_rrc_aperiodicCSI_Reporting_r13 = -1; -static gint ett_lte_rrc_codebook_HARQ_ACK_r13 = -1; -static gint ett_lte_rrc_sr_ConfigIndex = -1; -static gint ett_lte_rrc_transmissionModeList_r12 = -1; -static gint ett_lte_rrc_modifiedMPR_Behavior_r10 = -1; -static gint ett_lte_rrc_sib11_fragment = -1; -static gint ett_lte_rrc_sib11_fragments = -1; -static gint ett_lte_rrc_sib12_fragment = -1; -static gint ett_lte_rrc_sib12_fragments = -1; -static gint ett_lte_rrc_nr_SecondaryCellGroupConfig_r15 = -1; -static gint ett_lte_rrc_nr_RadioBearerConfig_r15 = -1; -static gint ett_lte_rrc_nr_RadioBearerConfigS_r15 = -1; -static gint ett_lte_rrc_sl_ConfigDedicatedForNR_r16 = -1; -static gint ett_lte_rrc_nr_SecondaryCellGroupConfig = -1; -static gint ett_lte_rrc_scg_ConfigResponseNR_r15 = -1; -static gint ett_lte_rrc_scg_ConfigResponseNR_r16 = -1; -static gint ett_lte_rrc_measResultSCG_r15 = -1; -static gint ett_lte_rrc_measResultSCG_r16 = -1; -static gint ett_lte_rrc_ul_DCCH_MessageNR_r15 = -1; -static gint ett_lte_rrc_ul_DCCH_MessageNR_r16 = -1; -static gint ett_lte_rrc_sourceRB_ConfigNR_r15 = -1; -static gint ett_lte_rrc_sourceRB_ConfigSN_NR_r15 = -1; -static gint ett_lte_rrc_sourceOtherConfigSN_NR_r15 = -1; -static gint ett_lte_rrc_sourceContextEN_DC_r15 = -1; -static gint ett_lte_rrc_requestedFreqBandsNR_MRDC_r15 = -1; -static gint ett_lte_rrc_measGapPatterns_r15 = -1; -static gint ett_lte_rrc_nas_Container_r15 = -1; -static gint ett_lte_rrc_sourceRB_ConfigIntra5GC_r15 = -1; -static gint ett_lte_rrc_selectedbandCombinationInfoEN_DC_v1540 = -1; -static gint ett_lte_rrc_requestedCapabilityCommon_r15 = -1; -static gint ett_lte_rrc_sidelinkUEInformationNR_r16 = -1; -static gint ett_lte_rrc_ueAssistanceInformationNR_r16 = -1; -static gint ett_lte_rrc_sl_ParameterNR_r16 = -1; -static gint ett_lte_rrc_v2x_BandParametersNR_r16 = -1; -static gint ett_lte_rrc_ueAssistanceInformationNR_SCG_r16 = -1; -static gint ett_lte_rrc_assistanceDataSIB_Element_r15 = -1; -static gint ett_lte_rrc_overheatingAssistanceForSCG_r16 = -1; -static gint ett_lte_rrc_overheatingAssistanceForSCG_FR2_2_r17 = -1; -static gint ett_lte_rrc_triggerConditionSN_r17 = -1; - -static expert_field ei_lte_rrc_number_pages_le15 = EI_INIT; -static expert_field ei_lte_rrc_si_info_value_changed = EI_INIT; -static expert_field ei_lte_rrc_sibs_changing = EI_INIT; -static expert_field ei_lte_rrc_sibs_changing_edrx = EI_INIT; -static expert_field ei_lte_rrc_earthquake_warning_sys = EI_INIT; -static expert_field ei_lte_rrc_commercial_mobile_alert_sys = EI_INIT; -static expert_field ei_lte_rrc_unexpected_type_value = EI_INIT; -static expert_field ei_lte_rrc_unexpected_length_value = EI_INIT; -static expert_field ei_lte_rrc_too_many_group_a_rapids = EI_INIT; -static expert_field ei_lte_rrc_invalid_drx_config = EI_INIT; +static int ett_lte_rrc_featureGroupIndicators; +static int ett_lte_rrc_featureGroupIndRel9Add; +static int ett_lte_rrc_featureGroupIndRel10; +static int ett_lte_rrc_absTimeInfo; +static int ett_lte_rrc_nas_SecurityParam; +static int ett_lte_rrc_targetRAT_MessageContainer; +static int ett_lte_rrc_siPsiSibContainer; +static int ett_lte_rrc_dedicatedInfoNAS; +static int ett_lte_rrc_timeInfo; +static int ett_lte_rrc_serialNumber; +static int ett_lte_rrc_warningType; +static int ett_lte_rrc_dataCodingScheme; +static int ett_lte_rrc_warningMessageSegment; +static int ett_lte_rrc_interBandTDD_CA_WithDifferentConfig; +static int ett_lte_rrc_tdd_FDD_CA_PCellDuplex_r12; +static int ett_lte_rrc_aperiodicCSI_Reporting_r13; +static int ett_lte_rrc_codebook_HARQ_ACK_r13; +static int ett_lte_rrc_sr_ConfigIndex; +static int ett_lte_rrc_transmissionModeList_r12; +static int ett_lte_rrc_modifiedMPR_Behavior_r10; +static int ett_lte_rrc_sib11_fragment; +static int ett_lte_rrc_sib11_fragments; +static int ett_lte_rrc_sib12_fragment; +static int ett_lte_rrc_sib12_fragments; +static int ett_lte_rrc_dcch_segment_fragment; +static int ett_lte_rrc_dcch_segment_fragments; +static int ett_lte_rrc_nr_SecondaryCellGroupConfig_r15; +static int ett_lte_rrc_nr_RadioBearerConfig_r15; +static int ett_lte_rrc_nr_RadioBearerConfigS_r15; +static int ett_lte_rrc_sl_ConfigDedicatedForNR_r16; +static int ett_lte_rrc_nr_SecondaryCellGroupConfig; +static int ett_lte_rrc_scg_ConfigResponseNR_r15; +static int ett_lte_rrc_scg_ConfigResponseNR_r16; +static int ett_lte_rrc_measResultSCG_r15; +static int ett_lte_rrc_measResultSCG_r16; +static int ett_lte_rrc_ul_DCCH_MessageNR_r15; +static int ett_lte_rrc_ul_DCCH_MessageNR_r16; +static int ett_lte_rrc_sourceRB_ConfigNR_r15; +static int ett_lte_rrc_sourceRB_ConfigSN_NR_r15; +static int ett_lte_rrc_sourceOtherConfigSN_NR_r15; +static int ett_lte_rrc_sourceContextEN_DC_r15; +static int ett_lte_rrc_requestedFreqBandsNR_MRDC_r15; +static int ett_lte_rrc_measGapPatterns_r15; +static int ett_lte_rrc_nas_Container_r15; +static int ett_lte_rrc_sourceRB_ConfigIntra5GC_r15; +static int ett_lte_rrc_selectedbandCombinationInfoEN_DC_v1540; +static int ett_lte_rrc_requestedCapabilityCommon_r15; +static int ett_lte_rrc_sidelinkUEInformationNR_r16; +static int ett_lte_rrc_ueAssistanceInformationNR_r16; +static int ett_lte_rrc_sl_ParameterNR_r16; +static int ett_lte_rrc_v2x_BandParametersNR_r16; +static int ett_lte_rrc_ueAssistanceInformationNR_SCG_r16; +static int ett_lte_rrc_assistanceDataSIB_Element_r15; +static int ett_lte_rrc_overheatingAssistanceForSCG_r16; +static int ett_lte_rrc_overheatingAssistanceForSCG_FR2_2_r17; +static int ett_lte_rrc_triggerConditionSN_r17; + +static expert_field ei_lte_rrc_number_pages_le15; +static expert_field ei_lte_rrc_si_info_value_changed; +static expert_field ei_lte_rrc_sibs_changing; +static expert_field ei_lte_rrc_sibs_changing_edrx; +static expert_field ei_lte_rrc_earthquake_warning_sys; +static expert_field ei_lte_rrc_commercial_mobile_alert_sys; +static expert_field ei_lte_rrc_unexpected_type_value; +static expert_field ei_lte_rrc_unexpected_length_value; +static expert_field ei_lte_rrc_too_many_group_a_rapids; +static expert_field ei_lte_rrc_invalid_drx_config; static const unit_name_string units_sr_periods = { " SR period", " SR periods" }; static const unit_name_string units_short_drx_cycles = { " shortDRX-Cycle", " shortDRX-Cycles" }; static reassembly_table lte_rrc_sib11_reassembly_table; static reassembly_table lte_rrc_sib12_reassembly_table; +static reassembly_table lte_rrc_dcch_segment_reassembly_table; static const fragment_items lte_rrc_sib11_frag_items = { &ett_lte_rrc_sib11_fragment, @@ -380,6 +401,23 @@ static const fragment_items lte_rrc_sib12_frag_items = { "SIB12 warning message segments" }; +static const fragment_items lte_rrc_dcch_segment_frag_items = { + &ett_lte_rrc_dcch_segment_fragment, + &ett_lte_rrc_dcch_segment_fragments, + &hf_lte_rrc_dcch_segment_fragments, + &hf_lte_rrc_dcch_segment_fragment, + &hf_lte_rrc_dcch_segment_fragment_overlap, + &hf_lte_rrc_dcch_segment_fragment_overlap_conflict, + &hf_lte_rrc_dcch_segment_fragment_multiple_tails, + &hf_lte_rrc_dcch_segment_fragment_too_long_fragment, + &hf_lte_rrc_dcch_segment_fragment_error, + &hf_lte_rrc_dcch_segment_fragment_count, + &hf_lte_rrc_dcch_segment_reassembled_in, + &hf_lte_rrc_dcch_segment_reassembled_length, + &hf_lte_rrc_dcch_segment_reassembled_data, + "DCCH message segments" +}; + /* Forward declarations */ static int dissect_UECapabilityInformation_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); static int dissect_RRCConnectionReconfiguration_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); @@ -942,7 +980,7 @@ static const value_string lte_rrc_messageSize_r14_vals[] = static value_string_ext lte_rrc_messageSize_r14_vals_ext = VALUE_STRING_EXT_INIT(lte_rrc_messageSize_r14_vals); static void -lte_rrc_timeConnFailure_r10_fmt(gchar *s, guint32 v) +lte_rrc_timeConnFailure_r10_fmt(char *s, uint32_t v) { snprintf(s, ITEM_LABEL_LENGTH, "%ums (%u)", 100*v, v); } @@ -960,7 +998,7 @@ static const value_string lte_rrc_n_r12_vals[] = { }; static void -lte_rrc_m_r12_fmt(gchar *s, guint32 v) +lte_rrc_m_r12_fmt(char *s, uint32_t v) { if (v == 255) { snprintf(s, ITEM_LABEL_LENGTH, "255 <= f(Nr) (255)"); @@ -2168,7 +2206,7 @@ static const value_string lte_rrc_RSRP_RangeSL4_vals[] = { static value_string_ext lte_rrc_RSRP_RangeSL4_vals_ext = VALUE_STRING_EXT_INIT(lte_rrc_RSRP_RangeSL4_vals); static void -lte_rrc_RSRP_RangeNR_r15_fmt(gchar *s, guint32 v) +lte_rrc_RSRP_RangeNR_r15_fmt(char *s, uint32_t v) { if (v == 0) { snprintf(s, ITEM_LABEL_LENGTH, "SS-RSRP < -156dBm (0)"); @@ -2268,7 +2306,7 @@ static const value_string lte_rrc_RSRQ_Range_vals[] = { static value_string_ext lte_rrc_RSRQ_Range_vals_ext = VALUE_STRING_EXT_INIT(lte_rrc_RSRQ_Range_vals); static void -lte_rrc_RSRQ_RangeNR_r15_fmt(gchar *s, guint32 v) +lte_rrc_RSRQ_RangeNR_r15_fmt(char *s, uint32_t v) { if (v == 0) { snprintf(s, ITEM_LABEL_LENGTH, "SS-RSRQ < -43dB (0)"); @@ -2317,13 +2355,13 @@ static const value_string lte_rrc_MBSFN_RSRQ_Range_vals[] = { static value_string_ext lte_rrc_MBSFN_RSRQ_Range_vals_ext = VALUE_STRING_EXT_INIT(lte_rrc_MBSFN_RSRQ_Range_vals); static void -lte_rrc_availableAdmissionCapacityWLAN_fmt(gchar *s, guint32 v) +lte_rrc_availableAdmissionCapacityWLAN_fmt(char *s, uint32_t v) { snprintf(s, ITEM_LABEL_LENGTH, "%uus/s (%u)", 32*v, v); } static void -lte_rrc_ue_RxTxTimeDiffResult_fmt(gchar *s, guint32 v) +lte_rrc_ue_RxTxTimeDiffResult_fmt(char *s, uint32_t v) { if (v == 0) { snprintf(s, ITEM_LABEL_LENGTH, "T < 2Ts (0)"); @@ -2535,13 +2573,13 @@ static const value_string lte_rrc_excessDelay_r13_vals[] = { static value_string_ext lte_rrc_excessDelay_r13_vals_ext = VALUE_STRING_EXT_INIT(lte_rrc_excessDelay_r13_vals); static void -lte_rrc_averageDelay_r16_fmt(gchar *s, guint32 v) +lte_rrc_averageDelay_r16_fmt(char *s, uint32_t v) { snprintf(s, ITEM_LABEL_LENGTH, "%.1fms (%u)", (float)v/10, v); } static void -lte_rrc_subframeBoundaryOffsetResult_r13_fmt(gchar *s, guint32 v) +lte_rrc_subframeBoundaryOffsetResult_r13_fmt(char *s, uint32_t v) { if (v == 0) { snprintf(s, ITEM_LABEL_LENGTH, "abs(deltaZ) < 700Ts (0)"); @@ -2553,7 +2591,7 @@ lte_rrc_subframeBoundaryOffsetResult_r13_fmt(gchar *s, guint32 v) } static void -lte_rrc_RS_SINR_Range_r13_fmt(gchar *s, guint32 v) +lte_rrc_RS_SINR_Range_r13_fmt(char *s, uint32_t v) { if (v == 0) { snprintf(s, ITEM_LABEL_LENGTH, "RS-SINR < -23dB (0)"); @@ -2565,7 +2603,7 @@ lte_rrc_RS_SINR_Range_r13_fmt(gchar *s, guint32 v) } static void -lte_rrc_RS_SINR_RangeNR_r15_fmt(gchar *s, guint32 v) +lte_rrc_RS_SINR_RangeNR_r15_fmt(char *s, uint32_t v) { if (v == 0) { snprintf(s, ITEM_LABEL_LENGTH, "SS-SINR < -23dB (0)"); @@ -2577,7 +2615,7 @@ lte_rrc_RS_SINR_RangeNR_r15_fmt(gchar *s, guint32 v) } static void -lte_rrc_RSSI_Range_r13_fmt(gchar *s, guint32 v) +lte_rrc_RSSI_Range_r13_fmt(char *s, uint32_t v) { if (v == 0) { snprintf(s, ITEM_LABEL_LENGTH, "RSSI < -100dBm (0)"); @@ -2589,13 +2627,13 @@ lte_rrc_RSSI_Range_r13_fmt(gchar *s, guint32 v) } static void -lte_rrc_scptm_FreqOffset_r14_fmt(gchar *s, guint32 v) +lte_rrc_scptm_FreqOffset_r14_fmt(char *s, uint32_t v) { snprintf(s, ITEM_LABEL_LENGTH, "%udB (%u)", 2*v, v); } static void -lte_rrc_offsetDFN_r14_fmt(gchar *s, guint32 v) +lte_rrc_offsetDFN_r14_fmt(char *s, uint32_t v) { if (v == 0) { snprintf(s, ITEM_LABEL_LENGTH, "0ms (0)"); @@ -2607,13 +2645,13 @@ lte_rrc_offsetDFN_r14_fmt(gchar *s, guint32 v) } static void -lte_rrc_thresholdWLAN_RSSI_fmt(gchar *s, guint32 v) +lte_rrc_thresholdWLAN_RSSI_fmt(char *s, uint32_t v) { snprintf(s, ITEM_LABEL_LENGTH, "%ddBm (%u)", -128+v, v); } static void -lte_rrc_cr_Limit_r14_fmt(gchar *s, guint32 v) +lte_rrc_cr_Limit_r14_fmt(char *s, uint32_t v) { if (v == 0) { snprintf(s, ITEM_LABEL_LENGTH, "0 (0)"); @@ -2625,7 +2663,7 @@ lte_rrc_cr_Limit_r14_fmt(gchar *s, guint32 v) } static void -lte_rrc_SL_CBR_r14_fmt(gchar *s, guint32 v) +lte_rrc_SL_CBR_r14_fmt(char *s, uint32_t v) { if (v == 0) { snprintf(s, ITEM_LABEL_LENGTH, "0 (0)"); @@ -2637,7 +2675,7 @@ lte_rrc_SL_CBR_r14_fmt(gchar *s, guint32 v) } static void -lte_rrc_threshS_RSSI_CBR_r14_fmt(gchar *s, guint32 v) +lte_rrc_threshS_RSSI_CBR_r14_fmt(char *s, uint32_t v) { snprintf(s, ITEM_LABEL_LENGTH, "%ddBm (%u)", -112+(2*v), v); } @@ -2660,7 +2698,7 @@ static const value_string lte_rrc_schedulingInfoSIB1_NB_r13_vals[] = { static value_string_ext lte_rrc_schedulingInfoSIB1_NB_r13_vals_ext = VALUE_STRING_EXT_INIT(lte_rrc_schedulingInfoSIB1_NB_r13_vals); static void -lte_rrc_NRSRP_Range_NB_r14_fmt(gchar *s, guint32 v) +lte_rrc_NRSRP_Range_NB_r14_fmt(char *s, uint32_t v) { if (v == 0) { snprintf(s, ITEM_LABEL_LENGTH, "NRSRP < -156dBm (0)"); @@ -2672,9 +2710,9 @@ lte_rrc_NRSRP_Range_NB_r14_fmt(gchar *s, guint32 v) } static void -lte_rrc_NRSRQ_Range_NB_r14_fmt(gchar *s, guint32 v) +lte_rrc_NRSRQ_Range_NB_r14_fmt(char *s, uint32_t v) { - gint32 rsrq = (guint32)v; + int32_t rsrq = (uint32_t)v; if (rsrq == -30) { snprintf(s, ITEM_LABEL_LENGTH, "NRSRQ < -34dB (-30)"); } else if (rsrq < 0) { @@ -2693,13 +2731,13 @@ lte_rrc_NRSRQ_Range_NB_r14_fmt(gchar *s, guint32 v) } static void -lte_rrc_mbms_MaxBW_r14_fmt(gchar *s, guint32 v) +lte_rrc_mbms_MaxBW_r14_fmt(char *s, uint32_t v) { snprintf(s, ITEM_LABEL_LENGTH, "%u MHz (%u)", 40*v, v); } static void -lte_rrc_dl_1024QAM_TotalWeightedLayers_r15_fmt(gchar *s, guint32 v) +lte_rrc_dl_1024QAM_TotalWeightedLayers_r15_fmt(char *s, uint32_t v) { snprintf(s, ITEM_LABEL_LENGTH, "%u (%u)", 10+(2*v), v); } @@ -2723,10 +2761,10 @@ lte_rrc_call_dissector(dissector_handle_t handle, tvbuff_t *tvb, packet_info *pi /*****************************************************************************/ typedef struct meas_capabilities_item_band_mappings_t { - guint16 number_of_bands_set; - guint16 number_of_interfreq_serving_read; - guint16 number_of_interfreq_target_read; - guint16 band_by_item[256]; + uint16_t number_of_bands_set; + uint16_t number_of_interfreq_serving_read; + uint16_t number_of_interfreq_target_read; + uint16_t band_by_item[256]; } meas_capabilities_item_band_mappings_t; @@ -2734,20 +2772,23 @@ typedef struct meas_capabilities_item_band_mappings_t { /* Struct to store all current uses of packet private data */ typedef struct lte_rrc_private_data_t { - guint8 rat_type; - guint8 target_rat_type; - guint8 si_or_psi_geran; - guint8 ra_preambles; - guint16 message_identifier; - guint8 warning_message_segment_type; - guint8 warning_message_segment_number; + uint8_t rat_type; + uint8_t target_rat_type; + uint8_t si_or_psi_geran; + uint8_t ra_preambles; + uint16_t message_identifier; + uint8_t warning_message_segment_type; + uint8_t warning_message_segment_number; drb_mapping_t drb_mapping; drx_config_t drx_config; pdcp_lte_security_info_t pdcp_security; meas_capabilities_item_band_mappings_t meas_capabilities_item_band_mappings; simult_pucch_pusch_cell_type cell_type; - gboolean bcch_dl_sch_msg; + bool bcch_dl_sch_msg; lpp_pos_sib_type_t pos_sib_type; + uint8_t dcch_segment_number; + tvbuff_t *dcch_segment; + bool dcch_segment_last; } lte_rrc_private_data_t; /* Helper function to get or create a struct that will be actx->private_data */ @@ -2781,13 +2822,13 @@ static drb_mapping_t* private_data_get_drb_mapping(asn1_ctx_t *actx) /* RAT type */ -static guint8 private_data_get_rat_type(asn1_ctx_t *actx) +static uint8_t private_data_get_rat_type(asn1_ctx_t *actx) { lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); return private_data->rat_type; } -static void private_data_set_rat_type(asn1_ctx_t *actx, guint8 rat_type) +static void private_data_set_rat_type(asn1_ctx_t *actx, uint8_t rat_type) { lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); private_data->rat_type = rat_type; @@ -2795,13 +2836,13 @@ static void private_data_set_rat_type(asn1_ctx_t *actx, guint8 rat_type) /* Target RAT type */ -static guint8 private_data_get_rat_target_type(asn1_ctx_t *actx) +static uint8_t private_data_get_rat_target_type(asn1_ctx_t *actx) { lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); return private_data->target_rat_type; } -static void private_data_set_rat_target_type(asn1_ctx_t *actx, guint8 target_rat_type) +static void private_data_set_rat_target_type(asn1_ctx_t *actx, uint8_t target_rat_type) { lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); private_data->target_rat_type = target_rat_type; @@ -2809,13 +2850,13 @@ static void private_data_set_rat_target_type(asn1_ctx_t *actx, guint8 target_rat /* si_or_psi_geran */ -static guint8 private_data_get_si_or_psi_geran(asn1_ctx_t *actx) +static uint8_t private_data_get_si_or_psi_geran(asn1_ctx_t *actx) { lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); return private_data->si_or_psi_geran; } -static void private_data_set_si_or_psi_geran(asn1_ctx_t *actx, guint8 si_or_psi_geran) +static void private_data_set_si_or_psi_geran(asn1_ctx_t *actx, uint8_t si_or_psi_geran) { lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); private_data->si_or_psi_geran = si_or_psi_geran; @@ -2823,13 +2864,13 @@ static void private_data_set_si_or_psi_geran(asn1_ctx_t *actx, guint8 si_or_psi_ /* Message identifier */ -static guint16 private_data_get_message_identifier(asn1_ctx_t *actx) +static uint16_t private_data_get_message_identifier(asn1_ctx_t *actx) { lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); return private_data->message_identifier; } -static void private_data_set_message_identifier(asn1_ctx_t *actx, guint16 message_identifier) +static void private_data_set_message_identifier(asn1_ctx_t *actx, uint16_t message_identifier) { lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); private_data->message_identifier = message_identifier; @@ -2837,13 +2878,13 @@ static void private_data_set_message_identifier(asn1_ctx_t *actx, guint16 messag /* Warning message segment type */ -static guint16 private_data_get_warning_message_segment_type(asn1_ctx_t *actx) +static uint16_t private_data_get_warning_message_segment_type(asn1_ctx_t *actx) { lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); return private_data->warning_message_segment_type; } -static void private_data_set_warning_message_segment_type(asn1_ctx_t *actx, guint8 segment_type) +static void private_data_set_warning_message_segment_type(asn1_ctx_t *actx, uint8_t segment_type) { lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); private_data->warning_message_segment_type = segment_type; @@ -2851,13 +2892,13 @@ static void private_data_set_warning_message_segment_type(asn1_ctx_t *actx, guin /* Warning message segment number */ -static guint16 private_data_get_warning_message_segment_number(asn1_ctx_t *actx) +static uint16_t private_data_get_warning_message_segment_number(asn1_ctx_t *actx) { lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); return private_data->warning_message_segment_number; } -static void private_data_set_warning_message_segment_number(asn1_ctx_t *actx, guint8 segment_number) +static void private_data_set_warning_message_segment_number(asn1_ctx_t *actx, uint8_t segment_number) { lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); private_data->warning_message_segment_number = segment_number; @@ -2865,13 +2906,13 @@ static void private_data_set_warning_message_segment_number(asn1_ctx_t *actx, gu /* Number of RA-preambles */ -static guint8 private_data_get_ra_preambles(asn1_ctx_t *actx) +static uint8_t private_data_get_ra_preambles(asn1_ctx_t *actx) { lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); return private_data->ra_preambles; } -static void private_data_set_ra_preambles(asn1_ctx_t *actx, guint8 ra_preambles) +static void private_data_set_ra_preambles(asn1_ctx_t *actx, uint8_t ra_preambles) { lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); private_data->ra_preambles = ra_preambles; @@ -2893,12 +2934,12 @@ static meas_capabilities_item_band_mappings_t* private_data_meas_capabilities_it return &private_data->meas_capabilities_item_band_mappings; } -static void set_freq_band_indicator(guint32 value, asn1_ctx_t *actx) +static void set_freq_band_indicator(uint32_t value, asn1_ctx_t *actx) { /* Store band mapping for this item in the next position */ meas_capabilities_item_band_mappings_t *mappings = private_data_meas_capabilities_item_band_mappings(actx); if (mappings->number_of_bands_set < 256) { - mappings->band_by_item[mappings->number_of_bands_set++] = (guint16)value; + mappings->band_by_item[mappings->number_of_bands_set++] = (uint16_t)value; } } @@ -2924,13 +2965,13 @@ static void private_data_set_simult_pucch_pusch_cell_type(asn1_ctx_t *actx, simu } /* Is top message a BCCH DL-SCH BR/MBMS */ -static gboolean private_data_get_bcch_dl_sch_msg(asn1_ctx_t *actx) +static bool private_data_get_bcch_dl_sch_msg(asn1_ctx_t *actx) { lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); return private_data->bcch_dl_sch_msg; } -static void private_data_set_bcch_dl_sch_msg(asn1_ctx_t *actx, gboolean is_bcch_dl_sch) +static void private_data_set_bcch_dl_sch_msg(asn1_ctx_t *actx, bool is_bcch_dl_sch) { lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); private_data->bcch_dl_sch_msg = is_bcch_dl_sch; @@ -2948,13 +2989,49 @@ static void private_data_set_pos_sib_type(asn1_ctx_t *actx, lpp_pos_sib_type_t p private_data->pos_sib_type = pos_sib_type; } +static uint8_t private_data_get_dcch_segment_number(asn1_ctx_t *actx) +{ + lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); + return private_data->dcch_segment_number; +} + +static void private_data_set_dcch_segment_number(asn1_ctx_t *actx, uint8_t dcch_segment_number) +{ + lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); + private_data->dcch_segment_number = dcch_segment_number; +} + +static tvbuff_t *private_data_get_dcch_segment(asn1_ctx_t *actx) +{ + lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); + return private_data->dcch_segment; +} + +static void private_data_set_dcch_segment(asn1_ctx_t *actx, tvbuff_t *dcch_segment) +{ + lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); + private_data->dcch_segment = dcch_segment; +} + +static bool private_data_get_dcch_segment_last(asn1_ctx_t *actx) +{ + lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); + return private_data->dcch_segment_last; +} + +static void private_data_set_dcch_segment_last(asn1_ctx_t *actx, bool dcch_segment_last) +{ + lte_rrc_private_data_t *private_data = (lte_rrc_private_data_t*)lte_rrc_get_private_data(actx); + private_data->dcch_segment_last = dcch_segment_last; +} + /*****************************************************************************/ static void -lte_rrc_localTimeOffset_fmt(gchar *s, guint32 v) +lte_rrc_localTimeOffset_fmt(char *s, uint32_t v) { - gint32 time_offset = (gint32) v; + int32_t time_offset = (int32_t) v; snprintf(s, ITEM_LABEL_LENGTH, "UTC time %c %dhr %dmin (%d)", (time_offset < 0) ? '-':'+', abs(time_offset) >> 2, @@ -2962,15 +3039,15 @@ lte_rrc_localTimeOffset_fmt(gchar *s, guint32 v) } static void -dissect_lte_rrc_warningMessageSegment(tvbuff_t *warning_msg_seg_tvb, proto_tree *tree, packet_info *pinfo, guint8 dataCodingScheme) +dissect_lte_rrc_warningMessageSegment(tvbuff_t *warning_msg_seg_tvb, proto_tree *tree, packet_info *pinfo, uint8_t dataCodingScheme) { - guint32 offset; - guint8 nb_of_pages, length, *str; + uint32_t offset; + uint8_t nb_of_pages, length, *str; proto_item *ti; tvbuff_t *cb_data_page_tvb, *cb_data_tvb; int i; - nb_of_pages = tvb_get_guint8(warning_msg_seg_tvb, 0); + nb_of_pages = tvb_get_uint8(warning_msg_seg_tvb, 0); ti = proto_tree_add_uint(tree, hf_lte_rrc_warningMessageSegment_nb_pages, warning_msg_seg_tvb, 0, 1, nb_of_pages); if (nb_of_pages > 15) { expert_add_info_format(pinfo, ti, &ei_lte_rrc_number_pages_le15, @@ -2978,7 +3055,7 @@ dissect_lte_rrc_warningMessageSegment(tvbuff_t *warning_msg_seg_tvb, proto_tree nb_of_pages = 15; } for (i = 0, offset = 1; i < nb_of_pages; i++) { - length = tvb_get_guint8(warning_msg_seg_tvb, offset+82); + length = tvb_get_uint8(warning_msg_seg_tvb, offset+82); cb_data_page_tvb = tvb_new_subset_length(warning_msg_seg_tvb, offset, length); cb_data_tvb = dissect_cbs_data(dataCodingScheme, cb_data_page_tvb, tree, pinfo, 0); if (cb_data_tvb) { @@ -3112,73 +3189,55 @@ dissect_lte_rrc_featureGroupIndRel9Add(tvbuff_t *featureGroupIndRel9Add_tvb, asn /* Functions to get enum values out of indices parsed */ /* If entry not found, return last element of array */ -static guint32 drx_lookup_onDurationTimer(guint32 idx) +static uint32_t drx_lookup_onDurationTimer(uint32_t idx) { - static const guint32 vals[] = {1,2,3,4,5,6,8,10,20,30,40,50,60,80,100,200}; + static const uint32_t vals[] = {1,2,3,4,5,6,8,10,20,30,40,50,60,80,100,200}; - if (idx < (sizeof(vals)/sizeof(guint32))) { - return vals[idx]; - } - return (sizeof(vals)/(sizeof(guint32)) - 1); + return vals[MIN(idx, array_length(vals) - 1)]; } -static guint32 drx_lookup_inactivityTimer(guint32 idx) +static uint32_t drx_lookup_inactivityTimer(uint32_t idx) { - static const guint32 vals[] = { - 1,2,3,4,5,6,8,10,20,30,40,50,60,80,100,200,300, 500,750,1280,1920,2560,0 + static const uint32_t vals[] = { + 1,2,3,4,5,6,8,10,20,30,40,50,60,80,100,200,300,500,750,1280,1920,2560,0 }; - if (idx < (sizeof(vals)/sizeof(guint32))) { - return vals[idx]; - } - return (sizeof(vals)/(sizeof(guint32)) - 1); + return vals[MIN(idx, array_length(vals) - 1)]; } -static guint32 drx_lookup_retransmissionTimer(guint32 idx) +static uint32_t drx_lookup_retransmissionTimer(uint32_t idx) { - static const guint32 vals[] = {1,2,4,6,8,16,24,33}; + static const uint32_t vals[] = {1,2,4,6,8,16,24,33}; - if (idx < (sizeof(vals)/sizeof(guint32))) { - return vals[idx]; - } - return (sizeof(vals)/(sizeof(guint32)) - 1); + return vals[MIN(idx, array_length(vals) - 1)]; } -static guint32 drx_lookup_longCycle(guint32 idx) +static uint32_t drx_lookup_longCycle(uint32_t idx) { - static const guint32 vals[] = { + static const uint32_t vals[] = { 10,20,32,40,64,80,128,160,256,320,512,640,1024,1280,2048,2560 }; - if (idx < (sizeof(vals)/sizeof(guint32))) { - return vals[idx]; - } - return (sizeof(vals)/(sizeof(guint32)) - 1); + return vals[MIN(idx, array_length(vals) - 1)]; } -static guint32 drx_lookup_longCycle_v1130(guint32 idx) +static uint32_t drx_lookup_longCycle_v1130(uint32_t idx) { - static const guint32 vals[] = { + static const uint32_t vals[] = { 60,70 }; - if (idx < (sizeof(vals)/sizeof(guint32))) { - return vals[idx]; - } - return (sizeof(vals)/(sizeof(guint32)) - 1); + return vals[MIN(idx, array_length(vals) - 1)]; } -static guint32 drx_lookup_shortCycle(guint32 idx) +static uint32_t drx_lookup_shortCycle(uint32_t idx) { - static const guint32 vals[] = { + static const uint32_t vals[] = { 2,5,8,10,16,20,32,40,64,80,128,160,256,320,512,640 }; - if (idx < (sizeof(vals)/sizeof(guint32))) { - return vals[idx]; - } - return (sizeof(vals)/(sizeof(guint32)) - 1); + return vals[MIN(idx, array_length(vals) - 1)]; } static void drx_check_config_sane(drx_config_t *config, asn1_ctx_t *actx) @@ -3216,7 +3275,7 @@ static void drx_check_config_sane(drx_config_t *config, asn1_ctx_t *actx) } /* Break sr-configIndex down into periodicity and offset. From 36.231, 10.1 */ -static void sr_lookup_configindex(guint32 config_index, guint16 *periodicity, guint16 *offset) +static void sr_lookup_configindex(uint32_t config_index, uint16_t *periodicity, uint16_t *offset) { if (config_index < 5) { *periodicity = 5; @@ -3396,13 +3455,13 @@ dissect_lte_rrc_Handover_Preparation_Info(tvbuff_t *tvb, packet_info *pinfo, pro /* Don't want elements inside message updating Info column, so set now and freeze during dissection of PDU */ col_set_str(pinfo->cinfo, COL_INFO, "HandoverPreparationInformation"); - col_set_writable(pinfo->cinfo, COL_INFO, FALSE); + col_set_writable(pinfo->cinfo, COL_INFO, false); ti = proto_tree_add_item(tree, proto_lte_rrc, tvb, 0, -1, ENC_NA); lte_rrc_tree = proto_item_add_subtree(ti, ett_lte_rrc); dissect_lte_rrc_HandoverPreparationInformation_PDU(tvb, pinfo, lte_rrc_tree, NULL); - col_set_writable(pinfo->cinfo, COL_INFO, TRUE); + col_set_writable(pinfo->cinfo, COL_INFO, true); return tvb_captured_length(tvb); } @@ -4391,6 +4450,50 @@ void proto_register_lte_rrc(void) { { "Reassembled Data", "lte-rrc.warningMessageSegment_r9.reassembled_data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_lte_rrc_dcch_segment_fragments, + { "Fragments", "lte-rrc.dedicatedMessageSegment_r16.fragments", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_lte_rrc_dcch_segment_fragment, + { "Fragment", "lte-rrc.dedicatedMessageSegment_r16.fragment", + FT_FRAMENUM, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_lte_rrc_dcch_segment_fragment_overlap, + { "Fragment Overlap", "lte-rrc.dedicatedMessageSegment_r16.fragment_overlap", + FT_BOOLEAN, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_lte_rrc_dcch_segment_fragment_overlap_conflict, + { "Fragment Overlap Conflict", "lte-rrc.dedicatedMessageSegment_r16.fragment_overlap_conflict", + FT_BOOLEAN, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_lte_rrc_dcch_segment_fragment_multiple_tails, + { "Fragment Multiple Tails", "lte-rrc.dedicatedMessageSegment_r16.fragment_multiple_tails", + FT_BOOLEAN, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_lte_rrc_dcch_segment_fragment_too_long_fragment, + { "Too Long Fragment", "lte-rrc.dedicatedMessageSegment_r16.fragment_too_long_fragment", + FT_BOOLEAN, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_lte_rrc_dcch_segment_fragment_error, + { "Fragment Error", "lte-rrc.dedicatedMessageSegment_r16.fragment_error", + FT_FRAMENUM, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_lte_rrc_dcch_segment_fragment_count, + { "Fragment Count", "lte-rrc.dedicatedMessageSegment_r16.fragment_count", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_lte_rrc_dcch_segment_reassembled_in, + { "Reassembled In", "lte-rrc.dedicatedMessageSegment_r16.reassembled_in", + FT_FRAMENUM, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_lte_rrc_dcch_segment_reassembled_length, + { "Reassembled Length", "lte-rrc.dedicatedMessageSegment_r16.reassembled_length", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_lte_rrc_dcch_segment_reassembled_data, + { "Reassembled Data", "lte-rrc.dedicatedMessageSegment_r16.reassembled_data", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, { &hf_lte_rrc_measGapPatterns_r15_bit1, { "Gap Pattern 4", "lte-rrc.measGapPatterns_r15.bit1", FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80, @@ -4426,7 +4529,7 @@ void proto_register_lte_rrc(void) { }; /* List of subtrees */ - static gint *ett[] = { + static int *ett[] = { &ett_lte_rrc, #include "packet-lte-rrc-ettarr.c" @@ -4454,6 +4557,8 @@ void proto_register_lte_rrc(void) { &ett_lte_rrc_sib11_fragments, &ett_lte_rrc_sib12_fragment, &ett_lte_rrc_sib12_fragments, + &ett_lte_rrc_dcch_segment_fragment, + &ett_lte_rrc_dcch_segment_fragments, &ett_lte_rrc_nr_SecondaryCellGroupConfig_r15, &ett_lte_rrc_nr_RadioBearerConfig_r15, &ett_lte_rrc_nr_RadioBearerConfigS_r15, @@ -4545,11 +4650,15 @@ void proto_register_lte_rrc(void) { lte_rrc_etws_cmas_dcs_hash = wmem_map_new_autoreset(wmem_epan_scope(), wmem_file_scope(), g_direct_hash, g_direct_equal); lte_rrc_system_info_value_changed_hash = wmem_map_new_autoreset(wmem_epan_scope(), wmem_file_scope(), g_direct_hash, g_direct_equal); + lte_rrc_dcch_segment_ueid_count_hash = wmem_map_new_autoreset(wmem_epan_scope(), wmem_file_scope(), g_direct_hash, g_direct_equal); + lte_rrc_dcch_segment_id_tree = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope()); reassembly_table_register(<e_rrc_sib11_reassembly_table, - &addresses_reassembly_table_functions); + &addresses_reassembly_table_functions); reassembly_table_register(<e_rrc_sib12_reassembly_table, - &addresses_reassembly_table_functions); + &addresses_reassembly_table_functions); + reassembly_table_register(<e_rrc_dcch_segment_reassembly_table, + &addresses_reassembly_table_functions); /* Register configuration preferences */ lte_rrc_module = prefs_register_protocol(proto_lte_rrc, NULL); @@ -4557,6 +4666,10 @@ void proto_register_lte_rrc(void) { "Show NAS PDU in root packet details", "Whether the NAS PDU should be shown in the root packet details tree", <e_rrc_nas_in_root_tree); + prefs_register_bool_preference(lte_rrc_module, "reassemble_dcch_segments", + "Try to reassemble DCCH segmented messages", + "Whether the LTE RRC dissector should attempt to reassemble DCCH segmented messages", + <e_rrc_reassemble_dcch_segments); } |