From Mike Morrin:
authorAnders Broman <anders.broman@ericsson.com>
Thu, 29 Apr 2010 20:45:53 +0000 (20:45 -0000)
committerAnders Broman <anders.broman@ericsson.com>
Thu, 29 Apr 2010 20:45:53 +0000 (20:45 -0000)
Dissection of BSSMAP IEs: Old BSS to New BSS Info and New BSS to Old BSS Info
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=4712

svn path=/trunk/; revision=32606

12 files changed:
asn1/ranap/packet-ranap-template.c
asn1/ranap/ranap.cnf
asn1/rrc/rrc.cnf
epan/dissectors/packet-bssgp.c
epan/dissectors/packet-bssgp.h
epan/dissectors/packet-gsm_a_bssmap.c
epan/dissectors/packet-gsm_a_common.c
epan/dissectors/packet-gsm_a_common.h
epan/dissectors/packet-gsm_a_rr.c
epan/dissectors/packet-ranap.c
epan/dissectors/packet-rrc.c
epan/dissectors/packet-rrc.h

index dc3afb6f54c5e8de20b07308eaea21b3b03f273c..372680bf3047c04cf237b813b353618fb341fff4 100644 (file)
@@ -43,6 +43,7 @@
 #include "packet-ranap.h"
 #include "packet-e212.h"
 #include "packet-sccp.h"
+#include "packet-gsm_a_common.h"
 
 #ifdef _MSC_VER
 /* disable: "warning C4146: unary minus operator applied to unsigned type, result still unsigned" */
index 7cfe1f80004c7a475fb8ddf9b8be5815451956b4..2a1d71f36f75c34a963bfecf458032414bb87ce8 100644 (file)
@@ -230,6 +230,29 @@ MAX_VAL = asn1_param_get_integer(%(ACTX)s,"upperBound")
 
 #.END
 
+#.FN_BODY OldBSS-ToNewBSS-Information  VAL_PTR = &bss_info_tvb
+  tvbuff_t *bss_info_tvb=NULL;
+
+%(DEFAULT_BODY)s
+       if (bss_info_tvb)
+            bssmap_old_bss_to_new_bss_info(bss_info_tvb, tree, actx->pinfo);
+#.END
+
+#.FN_BODY NewBSS-To-OldBSS-Information  VAL_PTR = &bss_info_tvb
+  tvbuff_t *bss_info_tvb=NULL;
+
+%(DEFAULT_BODY)s
+       if (bss_info_tvb)
+            bssmap_new_bss_to_old_bss_info(bss_info_tvb, tree, actx->pinfo);
+#.END
+
+#.FN_BODY L3-Information VAL_PTR = &l3_info_tvb
+  tvbuff_t *l3_info_tvb=NULL;
+
+%(DEFAULT_BODY)s
+       if (l3_info_tvb)
+               dissector_try_port(nas_pdu_dissector_table, 0x1, l3_info_tvb, %(ACTX)s->pinfo, proto_tree_get_root(tree));
+#.END
 
 # following construction is not supported by asn2wrs
 # PLMNidentity ::= TBCD-STRING (SIZE (3))
index 8918edff58e887ee86766c3962ac42eeb863ce3a..afd926a4764c3111e3568d8b53c5c718e27c3d97 100644 (file)
@@ -13,6 +13,7 @@ InterRATHandoverInfo
 InterRATHandoverInfo_PDU
 ToTargetRNC-Container_PDU
 TargetRNC-ToSourceRNC-Container_PDU
+HandoverToUTRANCommand_PDU
 #.OMIT_ASSIGNMENT
 UE-RadioAccessCapability-v890ext
 UL-PhysChCapabilityFDD-r6
index bf4350f47de25485980cff344a6012c0c7b390bc..9ab47eeeaf185612a71838eb4dab8f14cec0cd55 100644 (file)
@@ -4882,7 +4882,7 @@ decode_pdu_suspend(build_info_t *bi) {
   decode_pdu_general(ies, 2, bi);
 }
 
-static void
+void
 decode_pdu_suspend_ack(build_info_t *bi) {
   bssgp_ie_t ies[] = {
     { BSSGP_IEI_TLLI, NULL,
index 696b5ea850298065c63ed6ed1f1e043445d277d5..33005b7a1c39fff7d79777cf0c53faf8b92cd182 100644 (file)
@@ -49,5 +49,8 @@ typedef struct {
 
 extern const value_string tab_cause[];
 
+
+void decode_pdu_suspend_ack(build_info_t *bi);
+
 #endif /* __PACKET_BSSGP_H__ */
 
index 18421a55849eb0ec071fb940244afc46ef48dc79..f5dff1a18a595001fdc30c2d89adc8210179440b 100644 (file)
 #include <epan/asn1.h>
 
 #include "packet-bssap.h"
+#include "packet-bssgp.h"
 #include "packet-sccp.h"
 #include "packet-gsm_a_common.h"
 #include "packet-e212.h"
 #include "packet-ranap.h"
+#include "packet-rrc.h"
 
 /* PROTOTYPES/FORWARDS */
 
@@ -263,26 +265,29 @@ const value_string gsm_bssmap_elem_strings[] = {
        { 0, NULL }
 };
 
-#if 0
 /* 3.2.3 Signalling Field Element Coding */
-static const value_string bssap_sig_field_values[] = {
-
-       { 0x1,  "Extra information" },                                          /* 3.2.3.1  */
-       { 0x2,  "Current Channel Type 2" },                                     /* 3.2.2.2  */
-       { 0x3,  "Target cell radio information" },                      /* 3.2.3.3  */
-       { 0x4,  "GPRS Suspend information" },                           /* 3.2.3.4  */
-       { 0x5,  "MultiRate configuration information" },        /* 3.2.3.5  */
-       { 0x6,  "Dual Transfer Mode information" },                     /* 3.2.3.6  */
-       { 0x7,  "Inter RAT Handover Info" },                            /* 3.2.3.7  */
+static const value_string bssmap_field_element_ids[] = {
+
+       { 0x1,  "BSSMAP Field Element: Extra information" },                                            /* 3.2.3.1  */
+       { 0x2,  "BSSMAP Field Element: Current Channel Type 2" },                                       /* 3.2.2.2  */
+       { 0x3,  "BSSMAP Field Element: Target cell radio information" },                        /* 3.2.3.3  */
+       { 0x4,  "BSSMAP Field Element: GPRS Suspend information" },                             /* 3.2.3.4  */
+       { 0x5,  "BSSMAP Field Element: MultiRate configuration information" },  /* 3.2.3.5  */
+       { 0x6,  "BSSMAP Field Element: Dual Transfer Mode information" },                       /* 3.2.3.6  */
+       { 0x7,  "BSSMAP Field Element: Inter RAT Handover Info" },                              /* 3.2.3.7  */
        /*{ 0x7,        "UE Capability information" },*/                                /* 3.2.3.7  */
-       { 0x8,  "cdma2000 Capability Information" },            /* 3.2.3.8  */
-       { 0x9,  "Downlink Cell Load Information" },                     /* 3.2.3.9  */
-       { 0xa,  "Uplink Cell Load Information" },                       /* 3.2.3.10 */
-       { 0xb,  "Cell Load Information Group" },                        /* 3.2.3.11 */
-       { 0xc,  "Cell Load Information" },                                      /* 3.2.3.12 */
+       { 0x8,  "BSSMAP Field Element: cdma2000 Capability Information" },              /* 3.2.3.8  */
+       { 0x9,  "BSSMAP Field Element: Downlink Cell Load Information" },                       /* 3.2.3.9  */
+       { 0xa,  "BSSMAP Field Element: Uplink Cell Load Information" },                 /* 3.2.3.10 */
+       { 0xb,  "BSSMAP Field Element: Cell Load Information Group" },                  /* 3.2.3.11 */
+       { 0xc,  "BSSMAP Field Element: Cell Load Information" },                                        /* 3.2.3.12 */
+       { 0x0d, "BSSMAP Field Element: PS Indication" },                          /* 3.2.3.13 */
+       { 0x0e, "BSSMAP Field Element: DTM Handover Command Indication" },        /* 3.2.3.14 */
+       { 0x6f, "VGCS talker mode" }, /* although technically not a Field Element, 
+                                     this IE can appear in Old BSS to New BSS information */
        { 0, NULL }
 };
-#endif
+
 static const value_string bssap_cc_values[] = {
        { 0x00,         "not further specified" },
        { 0x80,         "FACCH or SDCCH" },
@@ -377,12 +382,40 @@ static const true_false_string bssmap_cause_extension_value = {
        "One Octet"
 };
 
+/* Current Channel Type */
+static const value_string chan_mode_vals[] = {
+    { 0, "signalling only" },
+    { 1, "speech (full rate or half rate)" },
+    { 6, "data, 14.5 kbit/s radio interface rate" },
+    { 3, "data, 12.0 kbit/s radio interface rate" },
+    { 4, "data, 6.0 kbit/s radio interface rate" },
+    { 5, "data, 3.6 kbit/s radio interface rate" },
+    { 0x0f, "reserved" },
+    { 0, NULL}
+};
+
+static const value_string fe_cur_chan_type2_chan_field_vals[] = {
+    { 1, "SDCCH" },
+    { 8, "1 Full rate TCH" },
+    { 9, "1 Half rate TCH" },
+    { 10, "2 Full Rate TCHs" },
+    { 11, "3 Full Rate TCHs" },
+    { 12, "4 Full Rate TCHs" },
+    { 13, "5 Full Rate TCHs" },
+    { 14, "6 Full Rate TCHs" },
+    { 15, "7 Full Rate TCHs" },
+    { 4, "8 Full Rate TCHs" },
+    { 0, "reserved" },
+    { 0, NULL}
+};
+
 /* Initialize the protocol and registered fields */
 static int proto_a_bssmap = -1;
 
 static int hf_gsm_a_bssmap_msg_type = -1;
 int hf_gsm_a_length = -1;
 int hf_gsm_a_bssmap_elem_id = -1;
+static int hf_gsm_a_bssmap_field_elem_id = -1;
 int hf_gsm_a_bssmap_cell_ci = -1;
 static int hf_gsm_a_bssmap_cell_lac = -1;
 static int hf_gsm_a_bssmap_sac = -1;
@@ -400,6 +433,7 @@ static int hf_gsm_a_bssmap_seq_no = -1;
 static int hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc = -1;
 static int hf_gsm_a_bssap_res_ind_method = -1;
 static int hf_gsm_a_bssmap_ch_mode = -1;
+static int hf_gsm_a_bssmap_cur_ch_mode = -1;
 static int hf_gsm_a_bssmap_channel = -1;
 static int hf_gsm_a_bssmap_trace_trigger_id = -1;
 static int hf_gsm_a_bssmap_trace_priority_indication = -1;
@@ -452,20 +486,47 @@ static int hf_gsm_a_bssmap_location_type_location_information = -1;
 static int hf_gsm_a_bssmap_location_type_positioning_method = -1;
 static int hf_gsm_a_bssmap_chan_type_extension = -1;
 static int hf_gsm_a_bssmap_cause_extension = -1;
+static int hf_fe_extra_info_prec = -1;
+static int hf_fe_extra_info_lcs = -1;
+static int hf_fe_extra_info_ue_prob = -1;
+static int hf_fe_extra_info_spare = -1;
+static int hf_fe_cur_chan_type2_chan_mode = -1;
+static int hf_fe_cur_chan_type2_chan_mode_spare = -1;
+static int hf_fe_cur_chan_type2_chan_field = -1;
+static int hf_fe_cur_chan_type2_chan_field_spare = -1;
+static int hf_fe_target_radio_cell_info_rxlev_ncell = -1;
+static int hf_fe_target_radio_cell_info_rxlev_ncell_spare = -1;
+static int hf_fe_dtm_info_dtm_ind = -1;
+static int hf_fe_dtm_info_sto_ind = -1;
+static int hf_fe_dtm_info_egprs_ind = -1;
+static int hf_fe_dtm_info_spare_bits = -1;
+static int hf_fe_cell_load_info_cell_capacity_class = -1;
+static int hf_fe_cell_load_info_load_value = -1;
+static int hf_fe_cell_load_info_rt_load_value = -1;
+static int hf_fe_cell_load_info_nrt_load_information_value = -1;
+static int hf_fe_ps_indication = -1;
+static int hf_fe_dtm_ho_command_ind_spare = -1;
 
 /* Initialize the subtree pointers */
 static gint ett_bssmap_msg = -1;
 static gint ett_cell_list = -1;
 static gint ett_dlci = -1;
 static gint ett_codec_lst = -1;
+static gint ett_bss_to_bss_info = -1;
 
 static char a_bigbuf[1024];
 
 static dissector_handle_t gsm_bsslap_handle = NULL;
 static dissector_handle_t dtap_handle;
+static dissector_handle_t bssgp_handle;
+static dissector_handle_t rrc_handle;
 
 static packet_info *g_pinfo;
 static proto_tree *g_tree;
+static guint8 cell_discriminator = 0x0f;  /* tracks whether handover is to UMTS */
+
+static guint16
+be_field_element_dissect(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_);
 
 /*
 This enum has been moved to packet-gsm_a_common to
@@ -1617,6 +1678,7 @@ be_cell_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar
        proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE);
        proto_tree_add_item(tree, hf_gsm_a_bssmap_be_cell_id_disc, tvb, curr_offset, 1, FALSE);
        disc = oct&0x0f;
+    cell_discriminator = disc; /* may be required later */
        curr_offset++;
 
        NO_MORE_DATA_CHECK(len);
@@ -1781,12 +1843,33 @@ be_l3_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *ad
         */
        l3_tvb = tvb_new_subset(tvb, curr_offset, len, len);
 
-       call_dissector(dtap_handle, l3_tvb, g_pinfo, g_tree);
+    /* This information element carries a radio interface message. 
+       In the case of an Intersystem handover to UMTS, 
+       this information element contains a HANDOVER TO UTRAN COMMAND message 
+       as defined in 3GPP TS 25.331. 
+       In the case of an Inter BSC handover, 
+       it contains an RR HANDOVER COMMAND message as defined in 3GPP TS 44.018. 
+       In the case of an Intersystem handover to cdma2000, 
+       this information element contains the HANDOVER TO CDMA2000 COMMAND message, 
+       as defined in 3GPP TS 44.018. */
+
+    /* note that we can't (from this PDU alone) determine whether a handover is to UMTS or cdma2000
+       for now we will always assume (GSM or) UMTS.
+       Maybe if cdma2000 support is added later, a preference option would select dissection of cdma2000 or UMTS. */
+    if (cell_discriminator < 8) {
+        /* GSM */
+        call_dissector(dtap_handle, l3_tvb, g_pinfo, g_tree);
+    }
+    else if (cell_discriminator < 13) {
+        dissect_rrc_HandoverToUTRANCommand_PDU(l3_tvb, g_pinfo, g_tree);
+    }
 
        curr_offset += len;
 
        EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
 
+    cell_discriminator = 0x0f;
+
        return(curr_offset - offset);
 }
 
@@ -2513,7 +2596,7 @@ be_curr_chan_1(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, g
        oct = tvb_get_guint8(tvb, curr_offset);
 
        /* Channel mode */
-       proto_tree_add_item(tree, hf_gsm_a_bssmap_ch_mode, tvb, curr_offset, 1, FALSE);
+       proto_tree_add_item(tree, hf_gsm_a_bssmap_cur_ch_mode, tvb, curr_offset, 1, FALSE);
        /* Channel */
        proto_tree_add_item(tree, hf_gsm_a_bssmap_channel, tvb, curr_offset, 1, FALSE);
 
@@ -2679,20 +2762,24 @@ be_conf_evo_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_,
 /*
  * 3.2.2.58 Old BSS to New BSS information
  */
-static guint16
-be_old_bss_to_new_bss_inf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+/* This function is only called from other protocols (e.g. RANAP),
+   internally, the Field Element dissector is called directly */
+void
+bssmap_old_bss_to_new_bss_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo)
 {
-       guint32 curr_offset;
-
-       curr_offset = offset;
-
-       if (len == 0)
-               return len;
+    guint16 len;
+    if (!tree) {
+        return;
+    }
 
-       proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet");
+       g_pinfo = pinfo;
+       g_tree = tree;
 
+       len = tvb_length(tvb);
+    be_field_element_dissect(tvb, tree, 0, len, NULL, 0);
 
-       return(len);
+       g_pinfo = NULL;
+       g_tree = NULL;
 }
 /*
  * 3.2.2.59 (void)
@@ -3046,9 +3133,6 @@ be_geran_cls_m(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, g
        curr_offset = offset;
 
        proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet");
-       /* The Source RNC to Target RNC transparent Information value (structure and encoding) 
-        * for cdma2000 is defined in relevant specifications.
-        */
 
        return(len);
 }
@@ -3059,17 +3143,27 @@ be_geran_cls_m(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, g
 /*
  * 3.2.2.80 New BSS to Old BSS Information
  */
-static guint16
-be_new_bss_to_old_bss_inf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+/* This function is only called from other protocols (e.g. RANAP),
+   internally, the Field Element dissector is called directly */
+void
+bssmap_new_bss_to_old_bss_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo)
 {
-       guint32 curr_offset;
+    guint16 len;
+    if (!tree) {
+        return;
+    }
 
-       curr_offset = offset;
+       g_pinfo = pinfo;
+       g_tree = tree;
 
-       proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet");
+       len = tvb_length(tvb);
+    be_field_element_dissect(tvb, tree, 0, len, NULL, 0);
 
-       return(len);
+       g_pinfo = NULL;
+       g_tree = NULL;
 }
+
+
 /*
  * 3.2.2.81 Inter-System Information 
  */
@@ -3696,7 +3790,7 @@ guint16 (*bssmap_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, gu
        de_d_gb_call_ref,       /* Group Call Reference */
        NULL,                           /* eMLPP Priority */
        be_conf_evo_ind,        /* Configuration Evolution Indication */
-       be_old_bss_to_new_bss_inf,      /* Old BSS to New BSS Information */
+       be_field_element_dissect,       /* Old BSS to New BSS Information */
        be_lsa_id,                      /* LSA Identifier */
        be_lsa_id_list,         /* LSA Identifier List */
        be_lsa_info,            /* LSA Information */
@@ -3720,7 +3814,7 @@ guint16 (*bssmap_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, gu
        be_src_rnc_to_tar_rnc_cdma,     /* Source RNC to target RNC transparent information (cdma2000) */
        be_geran_cls_m,         /* GERAN Classmark */
        NULL,                           /* GERAN BSC Container */
-       be_new_bss_to_old_bss_inf,      /* New BSS to Old BSS Information */
+       be_field_element_dissect,       /* New BSS to Old BSS Information */
        be_inter_sys_inf,       /*      Inter-System Information */
        be_sna_acc_inf,         /* SNA Access Information */
        NULL,                           /* VSTK_RAND Information */
@@ -3755,7 +3849,289 @@ guint16 (*bssmap_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, gu
 
        NULL,   /* NONE */
 };
+/* 3.2.3       Signalling Field Element Coding */
+/* 3.2.3.1     Extra information */
+static const value_string fe_extra_info_prec_vals[] = {
+    { 0, "The old BSS recommends that this allocation request should not cause a pre-emption an existing connection" },
+    { 1, "The old BSS recommends that this allocation request is allowed to preempt an existing connection based on the information supplied in the Priority information element, if available" },
+    { 0, NULL}
+};
 
+static const value_string fe_extra_info_lcs_vals[] = {
+    { 0, "No ongoing LCS procedure" },
+    { 1, "An ongoing LCS procedure was interrupted by handover. The new BSS may notify the SMLC when the handover is completed" },
+    { 0, NULL}
+};
+
+static const value_string fe_extra_info_ue_prob_vals[] = {
+    { 0, "This MS supports handover to UMTS" },
+    { 1, "This MS does not support handover to UMTS" },
+    { 0, NULL}
+};
+
+static guint16
+be_fe_extra_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+       guint32 curr_offset;
+
+       curr_offset = offset;
+       proto_tree_add_item(tree, hf_fe_extra_info_prec, tvb, curr_offset, 1, FALSE);
+       proto_tree_add_item(tree, hf_fe_extra_info_lcs, tvb, curr_offset, 1, FALSE);
+       proto_tree_add_item(tree, hf_fe_extra_info_ue_prob, tvb, curr_offset, 1, FALSE);
+       proto_tree_add_item(tree, hf_fe_extra_info_spare, tvb, curr_offset, 1, FALSE);
+       curr_offset++;
+
+       return(curr_offset - offset);
+}
+
+/* 3.2.3.2     Current Channel type 2 */
+static guint16
+be_fe_cur_chan_type2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+       guint32 curr_offset;
+
+       curr_offset = offset;
+       proto_tree_add_item(tree, hf_fe_cur_chan_type2_chan_mode, tvb, curr_offset, 1, FALSE);
+       proto_tree_add_item(tree, hf_fe_cur_chan_type2_chan_mode_spare, tvb, curr_offset, 1, FALSE);
+       curr_offset++;
+       proto_tree_add_item(tree, hf_fe_cur_chan_type2_chan_field, tvb, curr_offset, 1, FALSE);
+       proto_tree_add_item(tree, hf_fe_cur_chan_type2_chan_field_spare, tvb, curr_offset, 1, FALSE);
+       curr_offset++;
+
+       return(curr_offset - offset);
+}
+
+/* 3.2.3.3     Target cell radio information */
+static guint16
+be_fe_target_radio_cell_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+       guint32 curr_offset;
+
+       curr_offset = offset;
+       proto_tree_add_item(tree, hf_fe_target_radio_cell_info_rxlev_ncell, tvb, curr_offset, 1, FALSE);
+       proto_tree_add_item(tree, hf_fe_target_radio_cell_info_rxlev_ncell_spare, tvb, curr_offset, 1, FALSE);
+       curr_offset++;
+
+       return(curr_offset - offset);
+}
+
+/* 3.2.3.4     GPRS Suspend Information */
+static guint16
+be_fe_gprs_suspend_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+       guint32 curr_offset = offset;
+    build_info_t bi;
+
+    /* This Field Element contains the contents of the Gb interface SUSPEND ACK PDU, 
+       Call the BSSGP dissector here, assuming that the encoding is per 48.018 */
+
+    bi.tvb = tvb;
+    bi.offset = offset;
+    bi.pinfo = g_pinfo;
+    bi.bssgp_tree = tree;
+    bi.parent_tree = g_tree;
+    bi.dl_data = TRUE;
+    bi.ul_data = FALSE;
+    bi.pdutype = 0x0c; /* BSSGP_PDU_SUSPEND_ACK */
+
+    decode_pdu_suspend_ack(&bi);
+       curr_offset += len;
+
+       return(curr_offset - offset);
+}
+
+/* 3.2.3.5     MultiRate configuration Information */
+
+/* 3.2.3.6     Dual Transfer Mode information */
+static const value_string gsm_a_bssmap_dtm_info_dtm_ind_vals[] = {
+       { 0,    "The MS has resources allocated exclusively for the CS domain in the old cell" },
+       { 1,    "The MS has resources allocated for both the CS and PS domains in the old cell" },
+       { 0, NULL },
+};
+
+static const value_string gsm_a_bssmap_dtm_info_sto_ind_vals[] = {
+       { 0,    "The MS is in multislot operation in the old cell" },
+       { 1,    "The MS is in single timeslot operation in the old cell" },
+       { 0, NULL },
+};
+
+static const value_string gsm_a_bssmap_dtm_info_egprs_ind_vals[] = {
+       { 0,    "The MS has no TBF using E-GPRS in the old cell" },
+       { 1,    "The MS has a TBF using E-GPRS in the old cell" },
+       { 0, NULL },
+};
+
+static guint16
+be_fe_dual_transfer_mode_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+       guint32 curr_offset;
+
+       curr_offset = offset;
+       proto_tree_add_item(tree, hf_fe_dtm_info_dtm_ind, tvb, curr_offset, 1, FALSE);
+       proto_tree_add_item(tree, hf_fe_dtm_info_sto_ind, tvb, curr_offset, 1, FALSE);
+       proto_tree_add_item(tree, hf_fe_dtm_info_egprs_ind, tvb, curr_offset, 1, FALSE);
+       proto_tree_add_item(tree, hf_fe_dtm_info_spare_bits, tvb, curr_offset, 1, FALSE);
+       curr_offset++;
+
+       return(curr_offset - offset);
+}
+
+/* 3.2.3.7     Inter RAT Handover Info */
+static guint16
+be_fe_inter_rat_handover_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+       tvbuff_t        *container_tvb;
+
+    /* Octets 3-n are encoded as Inter RAT Handover Info as defined in 3GPP TS 25.331 */
+    container_tvb = tvb_new_subset(tvb, offset, len, len);
+    dissect_rrc_InterRATHandoverInfo_PDU(container_tvb, g_pinfo , tree);
+
+    return len;
+}
+
+/* 3.2.3.8     cdma2000 Capability Information */
+
+/* 3.2.3.9     Downlink Cell Load Information */
+
+/* 3.2.3.10    Uplink Cell Load Information */
+
+
+static const value_string gsm_a_bssmap_cell_load_nrt_vals[] = {
+       { 0,    "NRT Load is low" },
+       { 1,    "NRT load is medium" },
+       { 2,    "NRT load is high. (Probability to admit a new user is low.)" },
+       { 3,    "NRT overload. (Probability to admit a new user is low, packets are discarded and the source is recommended to reduce the data flow.)" },
+       { 0, NULL },
+};
+
+/* 3.2.3.11    Cell Load Information Group */
+static guint16
+be_fe_cell_load_info_group(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+       guint32 curr_offset;
+
+       curr_offset = offset;
+    curr_offset += be_cell_id(tvb, tree, curr_offset, len, NULL, 0);
+    curr_offset += be_field_element_dissect(tvb, tree, curr_offset, len + offset - curr_offset, NULL, 0);
+
+       return(curr_offset - offset);
+}
+
+/* 3.2.3.12    Cell Load Information */
+static guint16
+be_fe_cell_load_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+       guint32 curr_offset;
+
+       curr_offset = offset;
+       proto_tree_add_item(tree, hf_fe_cell_load_info_cell_capacity_class, tvb, curr_offset, 1, FALSE);
+       curr_offset++;
+       proto_tree_add_item(tree, hf_fe_cell_load_info_load_value, tvb, curr_offset, 1, FALSE);
+       curr_offset++;
+       proto_tree_add_item(tree, hf_fe_cell_load_info_rt_load_value, tvb, curr_offset, 1, FALSE);
+       curr_offset++;
+       proto_tree_add_item(tree, hf_fe_cell_load_info_nrt_load_information_value, tvb, curr_offset, 1, FALSE);
+       curr_offset++;
+
+       return(curr_offset - offset);
+}
+
+/* 3.2.3.13    PS Indication */
+static guint16
+be_fe_ps_indication(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+       guint32 curr_offset;
+
+       curr_offset = offset;
+       proto_tree_add_item(tree, hf_fe_ps_indication, tvb, curr_offset, 1, FALSE);
+       curr_offset++;
+
+       return(curr_offset - offset);
+}
+
+/* 3.2.3.14    DTM Handover Command Indication */
+static guint16
+be_fe_dtm_ho_command_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+       guint32 curr_offset;
+
+       curr_offset = offset;
+       proto_tree_add_item(tree, hf_fe_dtm_ho_command_ind_spare, tvb, curr_offset, 1, FALSE);
+       curr_offset++;
+
+       return(curr_offset - offset);
+}
+
+static guint16 (*bssmap_bss_to_bss_element_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) = {
+       be_fe_extra_info,              /* { 0x01,               "Extra information" }, */
+       be_fe_cur_chan_type2,          /* { 0x02,               "Current Channel Type 2" }, */
+       be_fe_target_radio_cell_info,  /* { 0x03,               "Target cell radio information" }, */
+       be_fe_gprs_suspend_info,       /* { 0x04,               "GPRS Suspend information" }, */
+       de_rr_multirate_conf,          /* { 0x05,               "MultiRate configuration information" }, */
+       be_fe_dual_transfer_mode_info, /* { 0x06,               "Dual Transfer Mode Information" }, */
+       be_fe_inter_rat_handover_info, /* { 0x07,               "Inter RAT Handover Info" }, */
+       NULL,                          /* { 0x08,               "cdma2000 Capability Information" }, */
+       be_fe_cell_load_info,          /* { 0x09,               "Downlink Cell Load Information" }, */
+       be_fe_cell_load_info,          /* { 0x0a,               "Uplink Cell Load Information" }, */
+       be_fe_cell_load_info_group,    /* { 0x0b,               "Cell Load Information Group" }, */
+       be_fe_cell_load_info,          /* { 0x0c,               "Cell Load Information" }, */
+       be_fe_ps_indication,           /* { 0x0d,               "PS Indication" }, */
+       be_fe_dtm_ho_command_ind,      /* { 0x0e,               "DTM Handover Command Indication" }, */
+       be_vgcs_talker_mode,           /* { 0x6f,               "VGCS talker mode" }, */ /* not really a field element
+                                                     but does appear in old bss to new bss info */
+       NULL,   /* NONE */
+};
+
+static guint16
+be_field_element_dissect(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+       guint32 curr_offset, ie_len, idx, fe_start_offset;
+    const gchar *str;
+    proto_item *item = NULL;
+    proto_tree *  bss_to_bss_tree = NULL;
+
+       curr_offset = offset;
+
+
+    while (curr_offset - offset + 2 < len) {
+        guint8 oct;
+        /*
+         * add name
+         */
+        oct = tvb_get_guint8(tvb, curr_offset++);
+    
+        str = match_strval_idx((guint32) oct, bssmap_field_element_ids, &idx);
+        ie_len = tvb_get_guint8(tvb, curr_offset++);
+    
+        /*
+         * add Field Element name
+         */
+        item = proto_tree_add_uint_format(tree, hf_gsm_a_bssmap_field_elem_id,
+        tvb, curr_offset - 2, ie_len + 2, oct, "%s (%X)", str, oct);
+
+        bss_to_bss_tree = proto_item_add_subtree(item, ett_bss_to_bss_info);
+        fe_start_offset = curr_offset;
+    
+        /*
+         * decode field element
+         */
+        if ((str == NULL) || (bssmap_bss_to_bss_element_fcn[idx] == NULL))
+        {
+            proto_tree_add_text(bss_to_bss_tree,
+                tvb, curr_offset, ie_len,
+                "Field Element not decoded");
+            curr_offset += ie_len;
+        }
+        else
+        {
+            /* dissect the field element */
+            curr_offset += (*bssmap_bss_to_bss_element_fcn[idx])(tvb, bss_to_bss_tree, curr_offset, ie_len, NULL, 0);
+
+            EXTRANEOUS_DATA_CHECK(ie_len, curr_offset - fe_start_offset);
+        }
+    }
+    return len;
+}
 /* MESSAGE FUNCTIONS */
 
 /*
@@ -5914,6 +6290,8 @@ dissect_bssmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
        {
                (*bssmap_msg_fcn[idx])(tvb, bssmap_tree, offset, len - offset);
        }
+       g_pinfo = NULL;
+       g_tree = NULL;
 }
 
 /* Register the protocol with Wireshark */
@@ -5937,6 +6315,11 @@ proto_register_gsm_a_bssmap(void)
                FT_UINT8, BASE_DEC, NULL, 0,
                NULL, HFILL }
        },
+       { &hf_gsm_a_bssmap_field_elem_id,
+               { "Field Element ID",   "gsm_a_bssmap.field_elem_id",
+               FT_UINT8, BASE_HEX, VALS(bssmap_field_element_ids), 0,
+               NULL, HFILL }
+       },
        { &hf_gsm_a_length,
                { "Length",             "gsm_a.len",
                FT_UINT16, BASE_DEC, NULL, 0,
@@ -6027,6 +6410,11 @@ proto_register_gsm_a_bssmap(void)
                FT_UINT8,BASE_DEC,  VALS(gsm_a_bssmap_ch_mode_vals), 0xf0,
                NULL, HFILL }
        },
+    { &hf_gsm_a_bssmap_cur_ch_mode,
+    { "Channel Mode", "fe_cur_chan_type2.chan_mode",
+        FT_UINT8, BASE_HEX, VALS(chan_mode_vals), 0xf0,
+        NULL, HFILL }
+    },
        { &hf_gsm_a_bssmap_channel,
                { "Channel","gsm_a_bssmap.channel",
                FT_UINT8,BASE_DEC,  VALS(gsm_a_bssmap_channel_vals), 0x0f,
@@ -6271,27 +6659,127 @@ proto_register_gsm_a_bssmap(void)
        { &hf_gsm_a_bssmap_location_type_location_information,
         { "Location Information", "gsm_a_bssmap.locationType.locationInformation", 
                FT_UINT8, BASE_HEX, VALS(bssmap_location_information_vals), 0x0, 
-               NULL, HFILL}
+               NULL, HFILL }
        },
        { &hf_gsm_a_bssmap_location_type_positioning_method,
         { "Positioning Method", "gsm_a_bssmap.locationType.positioningMethod", 
                FT_UINT8, BASE_HEX, VALS(bssmap_positioning_method_vals), 0x0, 
-               NULL, HFILL}
+               NULL, HFILL }
        },
        { &hf_gsm_a_bssmap_chan_type_extension,
        { "Extension", "gsm_a_bssmap.chanType.permittedIndicator.extension",
                FT_BOOLEAN, 8, TFS(&bssmap_chan_type_extension_value), 0x80,
-               NULL, HFILL}
+               NULL, HFILL }
        },
        { &hf_gsm_a_bssmap_cause_extension,
        { "Extension", "gsm_a_bssmap.causeType.extension",
                FT_BOOLEAN, 8, TFS(&bssmap_cause_extension_value), 0x80,
-               NULL, HFILL}
+               NULL, HFILL }
        },
+    { &hf_fe_extra_info_prec,
+    { "Pre-emption Recommendation", "fe_extra_info.prec",
+        FT_UINT8, BASE_DEC, VALS(fe_extra_info_prec_vals), 0x01,
+        NULL, HFILL }
+    },
+    { &hf_fe_extra_info_lcs,
+    { "LCS Information", "fe_extra_info.lcs",
+        FT_UINT8, BASE_DEC, VALS(fe_extra_info_lcs_vals), 0x02,
+        NULL, HFILL }
+    },
+    { &hf_fe_extra_info_ue_prob,
+    { "UE support of UMTS", "fe_extra_info.ue_prob",
+        FT_UINT8, BASE_DEC, VALS(fe_extra_info_ue_prob_vals), 0x04,
+        NULL, HFILL }
+    },
+    { &hf_fe_extra_info_spare,
+    { "Extra Information Spare bits", "fe_extra_info.spare",
+        FT_UINT8, BASE_HEX, NULL, 0xf8,
+        NULL, HFILL }
+    },
+    { &hf_fe_cur_chan_type2_chan_mode,
+    { "Channel Mode", "fe_cur_chan_type2.chan_mode",
+         FT_UINT8, BASE_HEX, VALS(chan_mode_vals), 0x0f,
+         NULL, HFILL }
+    },
+    { &hf_fe_cur_chan_type2_chan_mode_spare,
+    { "Channel Mode Spare bits", "fe_cur_chan_type2_chan_mode.spare",
+        FT_UINT8, BASE_HEX, NULL, 0xf0,
+        NULL, HFILL }
+    },
+    { &hf_fe_cur_chan_type2_chan_field,
+    { "Channel Field", "fe_cur_chan_type2.chan_field",
+        FT_UINT8, BASE_HEX, VALS(fe_cur_chan_type2_chan_field_vals),0x0f,
+        NULL, HFILL }
+    },
+    { &hf_fe_cur_chan_type2_chan_field_spare,
+    { "Channel field Spare bits", "fe_cur_chan_type2_chan_field.spare",
+        FT_UINT8, BASE_HEX, NULL, 0xf0,
+        NULL, HFILL }
+    },
+    { &hf_fe_target_radio_cell_info_rxlev_ncell,
+    { "RXLEV-NCELL", "fe_target_radio_cell_info.rxlev_ncell",
+        FT_UINT8, BASE_HEX, VALS(gsm_a_rr_rxlev_vals), 0x3f,
+        NULL, HFILL }
+    },
+    { &hf_fe_target_radio_cell_info_rxlev_ncell_spare,
+    { "RXLEV-NCELL Spare bits", "fe_target_radio_cell_info.rxlev_ncell_spare",
+        FT_UINT8, BASE_HEX, NULL, 0xc0,
+        NULL, HFILL }
+    },
+    { &hf_fe_dtm_info_dtm_ind,
+    { "DTM indicator", "fe_dtm_info.dtm_ind",
+        FT_UINT8, BASE_HEX, VALS(gsm_a_bssmap_dtm_info_dtm_ind_vals), 0x01,
+        NULL, HFILL }
+    },
+    { &hf_fe_dtm_info_sto_ind,
+    { "Time Slot Operation indicator", "fe_dtm_info.sto_ind",
+        FT_UINT8, BASE_HEX, VALS(gsm_a_bssmap_dtm_info_sto_ind_vals), 0x02,
+        NULL, HFILL }
+    },
+    { &hf_fe_dtm_info_egprs_ind,
+    { "EGPRS indicator", "fe_dtm_info.egprs_ind",
+        FT_UINT8, BASE_HEX, VALS(gsm_a_bssmap_dtm_info_egprs_ind_vals), 0x04,
+        NULL, HFILL }
+    },
+    { &hf_fe_dtm_info_spare_bits,
+    { "DTM Info Spare bits", "fe_dtm_info.spare_bits",
+        FT_UINT8, BASE_HEX, NULL, 0xf8,
+        NULL, HFILL }
+    },
+    { &hf_fe_cell_load_info_cell_capacity_class,
+    { "Cell capacity class", "fe_cell_load_info.cell_capacity_class",
+        FT_UINT8, BASE_DEC, NULL, 0,
+        NULL, HFILL }
+    },
+    { &hf_fe_cell_load_info_load_value,
+    { "Load value", "fe_cell_load_info.load_info",
+        FT_UINT8, BASE_DEC, NULL, 0,
+        NULL, HFILL }
+    },
+    { &hf_fe_cell_load_info_rt_load_value,
+    { "Realtime load value", "fe_cell_load_info.rt_load_value",
+        FT_UINT8, BASE_DEC, NULL, 0,
+        NULL, HFILL }
+    },
+    { &hf_fe_cell_load_info_nrt_load_information_value,
+    { "Non-Realtime load information value", "fe_cell_load_info.nrt_load_info_value",
+        FT_UINT8, BASE_HEX, VALS(gsm_a_bssmap_cell_load_nrt_vals), 0,
+        NULL, HFILL }
+    },
+    { &hf_fe_ps_indication,
+    { "PS Indication", "fe_ps_indication.value",
+        FT_UINT8, BASE_HEX, NULL, 0,
+        NULL, HFILL }
+    },
+    { &hf_fe_dtm_ho_command_ind_spare,
+    { "Spare octet", "fe_dtm_ho_command_ind.spare",
+        FT_UINT8, BASE_HEX, NULL, 0,
+        NULL, HFILL }
+    },
        };
 
        /* Setup protocol subtree array */
-#define        NUM_INDIVIDUAL_ELEMS    4
+#define        NUM_INDIVIDUAL_ELEMS    5
        gint *ett[NUM_INDIVIDUAL_ELEMS + NUM_GSM_BSSMAP_MSG +
                  NUM_GSM_BSSMAP_ELEM];
 
@@ -6299,6 +6787,7 @@ proto_register_gsm_a_bssmap(void)
        ett[1] = &ett_cell_list;
        ett[2] = &ett_dlci;
        ett[3] = &ett_codec_lst,
+    ett[4] = &ett_bss_to_bss_info,
 
        last_offset = NUM_INDIVIDUAL_ELEMS;
 
@@ -6337,5 +6826,7 @@ proto_reg_handoff_gsm_a_bssmap(void)
 
        dtap_handle = find_dissector("gsm_a_dtap");
        gsm_bsslap_handle = find_dissector("gsm_bsslap");
+    bssgp_handle = find_dissector ("bssgp");
+    rrc_handle = find_dissector ("rrc");
 }
 
index 290b85a1486f596d67e51ca13def3866ef88596a..40a44e32c01165eba812c24d9032ef549d08612c 100644 (file)
@@ -460,6 +460,74 @@ static const value_string e_utra_meas_and_report_support_vals[] = {
        { 0, NULL}
 };
 
+const value_string gsm_a_rr_rxlev_vals [] = {
+    { 0, "< -110 dBm"},
+    { 1, "-110 <= x < -109 dBm"},
+    { 2, "-109 <= x < -108 dBm"},
+    { 3, "-108 <= x < -107 dBm"},
+    { 4, "-107 <= x < -106 dBm"},
+    { 5, "-106 <= x < -105 dBm"},
+    { 6, "-105 <= x < -104 dBm"},
+    { 7, "-104 <= x < -103 dBm"},
+    { 8, "-103 <= x < -102 dBm"},
+    { 9, "-102 <= x < -101 dBm"},
+    {10, "-101 <= x < -100 dBm"},
+    {11, "-100 <= x < -99 dBm"},
+    {12, "-99 <= x < -98 dBm"},
+    {13, "-98 <= x < -97 dBm"},
+    {14, "-97 <= x < -96 dBm"},
+    {15, "-96 <= x < -95 dBm"},
+    {16, "-95 <= x < -94 dBm"},
+    {17, "-94 <= x < -93 dBm"},
+    {18, "-93 <= x < -92 dBm"},
+    {19, "-92 <= x < -91 dBm"},
+    {20, "-91 <= x < -90 dBm"},
+    {21, "-90 <= x < -89 dBm"},
+    {22, "-89 <= x < -88 dBm"},
+    {23, "-88 <= x < -87 dBm"},
+    {24, "-87 <= x < -86 dBm"},
+    {25, "-86 <= x < -85 dBm"},
+    {26, "-85 <= x < -84 dBm"},
+    {27, "-84 <= x < -83 dBm"},
+    {28, "-83 <= x < -82 dBm"},
+    {29, "-82 <= x < -81 dBm"},
+    {30, "-81 <= x < -80 dBm"},
+    {31, "-80 <= x < -79 dBm"},
+    {32, "-79 <= x < -78 dBm"},
+    {33, "-78 <= x < -77 dBm"},
+    {34, "-77 <= x < -76 dBm"},
+    {35, "-76 <= x < -75 dBm"},
+    {36, "-75 <= x < -74 dBm"},
+    {37, "-74 <= x < -73 dBm"},
+    {38, "-73 <= x < -72 dBm"},
+    {39, "-72 <= x < -71 dBm"},
+    {40, "-71 <= x < -70 dBm"},
+    {41, "-70 <= x < -69 dBm"},
+    {42, "-69 <= x < -68 dBm"},
+    {43, "-68 <= x < -67 dBm"},
+    {44, "-67 <= x < -66 dBm"},
+    {45, "-66 <= x < -65 dBm"},
+    {46, "-65 <= x < -64 dBm"},
+    {47, "-64 <= x < -63 dBm"},
+    {48, "-63 <= x < -62 dBm"},
+    {49, "-62 <= x < -61 dBm"},
+    {50, "-61 <= x < -60 dBm"},
+    {51, "-60 <= x < -59 dBm"},
+    {52, "-59 <= x < -58 dBm"},
+    {53, "-58 <= x < -57 dBm"},
+    {54, "-57 <= x < -56 dBm"},
+    {55, "-56 <= x < -55 dBm"},
+    {56, "-55 <= x < -54 dBm"},
+    {57, "-54 <= x < -53 dBm"},
+    {58, "-53 <= x < -52 dBm"},
+    {59, "-52 <= x < -51 dBm"},
+    {60, "-51 <= x < -50 dBm"},
+    {61, "-50 <= x < -49 dBm"},
+    {62, "-49 <= x < -48 dBm"},
+    {63, ">= -48 dBm"},
+    { 0, NULL}
+};
+
 /* Initialize the protocol and registered fields */
 static int proto_a_common = -1;
 
@@ -593,6 +661,7 @@ static int hf_gsm_a_additional_positioning_caps     = -1;
 static int hf_gsm_a_e_utra_fdd_support                 = -1;
 static int hf_gsm_a_e_utra_tdd_support                 = -1;
 static int hf_gsm_a_e_utra_meas_and_report_support     = -1;
+static int hf_gsm_a_rxlev_ncell                 = -1;
 
 static int hf_gsm_a_geo_loc_type_of_shape = -1;
 static int hf_gsm_a_geo_loc_sign_of_lat        = -1;
index 7ec2564509b4e9cf265ee276184960c1fd631047..88f68b046b28820fc8b56c2c4dacc4a2d24d1ce5 100644 (file)
@@ -566,6 +566,9 @@ void dissect_bssmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
 
 void dissect_bssmap_le(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
 
+void bssmap_old_bss_to_new_bss_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo);
+void bssmap_new_bss_to_old_bss_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo);
+
 void dtap_mm_mm_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len);
 
 guint16 be_cell_id_aux(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len, guint8 disc);
@@ -644,6 +647,7 @@ extern const value_string gsm_a_qos_traff_hdl_pri_vals[];
 extern const value_string gsm_a_type_of_number_values[];
 extern const value_string gsm_a_numbering_plan_id_values[]; 
 extern const value_string gsm_a_sms_vals[];
+extern const value_string gsm_a_rr_rxlev_vals [];
 
 typedef enum
 {
index 24b00aa9364ac33931a4829e29ac27199029474d..92c037a3ca977d284c4cd5191a5fde0772949914 100644 (file)
@@ -2587,73 +2587,6 @@ static const true_false_string gsm_a_rr_dtx_vals  = {
     "DTX was not used"
 };
 
-static const value_string gsm_a_rr_rxlev_vals [] = {
-    { 0, "< -110 dBm"},
-    { 1, "-110 <= x < -109 dBm"},
-    { 2, "-109 <= x < -108 dBm"},
-    { 3, "-108 <= x < -107 dBm"},
-    { 4, "-107 <= x < -106 dBm"},
-    { 5, "-106 <= x < -105 dBm"},
-    { 6, "-105 <= x < -104 dBm"},
-    { 7, "-104 <= x < -103 dBm"},
-    { 8, "-103 <= x < -102 dBm"},
-    { 9, "-102 <= x < -101 dBm"},
-    {10, "-101 <= x < -100 dBm"},
-    {11, "-100 <= x < -99 dBm"},
-    {12, "-99 <= x < -98 dBm"},
-    {13, "-98 <= x < -97 dBm"},
-    {14, "-97 <= x < -96 dBm"},
-    {15, "-96 <= x < -95 dBm"},
-    {16, "-95 <= x < -94 dBm"},
-    {17, "-94 <= x < -93 dBm"},
-    {18, "-93 <= x < -92 dBm"},
-    {19, "-92 <= x < -91 dBm"},
-    {20, "-91 <= x < -90 dBm"},
-    {21, "-90 <= x < -89 dBm"},
-    {22, "-89 <= x < -88 dBm"},
-    {23, "-88 <= x < -87 dBm"},
-    {24, "-87 <= x < -86 dBm"},
-    {25, "-86 <= x < -85 dBm"},
-    {26, "-85 <= x < -84 dBm"},
-    {27, "-84 <= x < -83 dBm"},
-    {28, "-83 <= x < -82 dBm"},
-    {29, "-82 <= x < -81 dBm"},
-    {30, "-81 <= x < -80 dBm"},
-    {31, "-80 <= x < -79 dBm"},
-    {32, "-79 <= x < -78 dBm"},
-    {33, "-78 <= x < -77 dBm"},
-    {34, "-77 <= x < -76 dBm"},
-    {35, "-76 <= x < -75 dBm"},
-    {36, "-75 <= x < -74 dBm"},
-    {37, "-74 <= x < -73 dBm"},
-    {38, "-73 <= x < -72 dBm"},
-    {39, "-72 <= x < -71 dBm"},
-    {40, "-71 <= x < -70 dBm"},
-    {41, "-70 <= x < -69 dBm"},
-    {42, "-69 <= x < -68 dBm"},
-    {43, "-68 <= x < -67 dBm"},
-    {44, "-67 <= x < -66 dBm"},
-    {45, "-66 <= x < -65 dBm"},
-    {46, "-65 <= x < -64 dBm"},
-    {47, "-64 <= x < -63 dBm"},
-    {48, "-63 <= x < -62 dBm"},
-    {49, "-62 <= x < -61 dBm"},
-    {50, "-61 <= x < -60 dBm"},
-    {51, "-60 <= x < -59 dBm"},
-    {52, "-59 <= x < -58 dBm"},
-    {53, "-58 <= x < -57 dBm"},
-    {54, "-57 <= x < -56 dBm"},
-    {55, "-56 <= x < -55 dBm"},
-    {56, "-55 <= x < -54 dBm"},
-    {57, "-54 <= x < -53 dBm"},
-    {58, "-53 <= x < -52 dBm"},
-    {59, "-52 <= x < -51 dBm"},
-    {60, "-51 <= x < -50 dBm"},
-    {61, "-50 <= x < -49 dBm"},
-    {62, "-49 <= x < -48 dBm"},
-    {63, ">= -48 dBm"},
-    { 0, NULL}
-};
 
 static const true_false_string gsm_a_rr_mv_vals  = {
     "The measurement results are not valid",
index cd53ee4a87d254c8210e41c72cc6afc73d433831..164492457eaa5ae6d97879b473a62d0f6ac2e0d8 100644 (file)
@@ -51,6 +51,7 @@
 #include "packet-ranap.h"
 #include "packet-e212.h"
 #include "packet-sccp.h"
+#include "packet-gsm_a_common.h"
 
 #ifdef _MSC_VER
 /* disable: "warning C4146: unary minus operator applied to unsigned type, result still unsigned" */
@@ -382,7 +383,7 @@ typedef enum _ProtocolIE_ID_enum {
 } ProtocolIE_ID_enum;
 
 /*--- End of included file: packet-ranap-val.h ---*/
-#line 62 "packet-ranap-template.c"
+#line 63 "packet-ranap-template.c"
 
 /* Initialize the protocol and registered fields */
 static int proto_ranap = -1;
@@ -1033,7 +1034,7 @@ static int hf_ranap_unsuccessfulOutcome_value = -1;  /* UnsuccessfulOutcome_valu
 static int hf_ranap_value = -1;                   /* T_value */
 
 /*--- End of included file: packet-ranap-hf.c ---*/
-#line 75 "packet-ranap-template.c"
+#line 76 "packet-ranap-template.c"
 
 /* Initialize the subtree pointers */
 static int ett_ranap = -1;
@@ -1338,7 +1339,7 @@ static gint ett_ranap_UnsuccessfulOutcome = -1;
 static gint ett_ranap_Outcome = -1;
 
 /*--- End of included file: packet-ranap-ett.c ---*/
-#line 81 "packet-ranap-template.c"
+#line 82 "packet-ranap-template.c"
 
 /* Global variables */
 static guint32 ProcedureCode;
@@ -2485,7 +2486,7 @@ dissect_ranap_APN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto
 
 static int
 dissect_ranap_PLMNidentity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 239 "ranap.cnf"
+#line 262 "ranap.cnf"
   tvbuff_t *parameter_tvb=NULL;
 
   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@@ -4271,7 +4272,7 @@ dissect_ranap_GlobalRNC_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _
 
 static int
 dissect_ranap_GTP_TEI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 280 "ranap.cnf"
+#line 303 "ranap.cnf"
   tvbuff_t *parameter_tvb=NULL;        
   int saved_hf;
   
@@ -4968,8 +4969,15 @@ dissect_ranap_LocationRelatedDataRequestTypeSpecificToGERANIuMode(tvbuff_t *tvb
 
 static int
 dissect_ranap_L3_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 250 "ranap.cnf"
+  tvbuff_t *l3_info_tvb=NULL;
+
   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
-                                       NO_BOUND, NO_BOUND, FALSE, NULL);
+                                       NO_BOUND, NO_BOUND, FALSE, &l3_info_tvb);
+
+       if (l3_info_tvb)
+               dissector_try_port(nas_pdu_dissector_table, 0x1, l3_info_tvb, actx->pinfo, proto_tree_get_root(tree));
+
 
   return offset;
 }
@@ -5171,8 +5179,15 @@ dissect_ranap_NAS_SynchronisationIndicator(tvbuff_t *tvb _U_, int offset _U_, as
 
 static int
 dissect_ranap_NewBSS_To_OldBSS_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 242 "ranap.cnf"
+  tvbuff_t *bss_info_tvb=NULL;
+
   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
-                                       NO_BOUND, NO_BOUND, FALSE, NULL);
+                                       NO_BOUND, NO_BOUND, FALSE, &bss_info_tvb);
+
+       if (bss_info_tvb)
+            bssmap_new_bss_to_old_bss_info(bss_info_tvb, tree, actx->pinfo);
+
 
   return offset;
 }
@@ -5217,8 +5232,15 @@ dissect_ranap_NumberOfSteps(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx
 
 static int
 dissect_ranap_OldBSS_ToNewBSS_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 234 "ranap.cnf"
+  tvbuff_t *bss_info_tvb=NULL;
+
   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
-                                       NO_BOUND, NO_BOUND, FALSE, NULL);
+                                       NO_BOUND, NO_BOUND, FALSE, &bss_info_tvb);
+
+       if (bss_info_tvb)
+            bssmap_old_bss_to_new_bss_info(bss_info_tvb, tree, actx->pinfo);
+
 
   return offset;
 }
@@ -6301,7 +6323,7 @@ dissect_ranap_Service_Handover(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac
 
 static int
 dissect_ranap_Source_ToTarget_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 306 "ranap.cnf"
+#line 329 "ranap.cnf"
 
 dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer(tvb , offset, actx ,tree , hf_ranap_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU );
 
@@ -6378,7 +6400,7 @@ static const per_sequence_t SourceRNC_ToTargetRNC_TransparentContainer_sequence[
 
 static int
 dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 292 "ranap.cnf"
+#line 315 "ranap.cnf"
 /* If SourceRNC-ToTargetRNC-TransparentContainer is called trough 
    dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU
    ProtocolIE_ID may be unset
@@ -6504,7 +6526,7 @@ dissect_ranap_SRVCC_Operation_Possible(tvbuff_t *tvb _U_, int offset _U_, asn1_c
 
 static int
 dissect_ranap_Target_ToSource_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 316 "ranap.cnf"
+#line 339 "ranap.cnf"
 
 dissect_ranap_TargetRNC_ToSourceRNC_TransparentContainer(tvb , offset, actx ,tree , hf_ranap_TargetRNC_ToSourceRNC_TransparentContainer_PDU );
 
@@ -6689,7 +6711,7 @@ dissect_ranap_UnsuccessfullyTransmittedDataVolume(tvbuff_t *tvb _U_, int offset
 
 static int
 dissect_ranap_TransportLayerAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 258 "ranap.cnf"
+#line 281 "ranap.cnf"
   tvbuff_t *parameter_tvb=NULL;
   proto_tree *subtree;
   gint tvb_len;
@@ -11783,7 +11805,7 @@ static int dissect_RANAP_PDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, prot
 
 
 /*--- End of included file: packet-ranap-fn.c ---*/
-#line 141 "packet-ranap-template.c"
+#line 142 "packet-ranap-template.c"
 
 static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
@@ -14477,7 +14499,7 @@ void proto_register_ranap(void) {
         "ranap.T_value", HFILL }},
 
 /*--- End of included file: packet-ranap-hfarr.c ---*/
-#line 298 "packet-ranap-template.c"
+#line 299 "packet-ranap-template.c"
   };
 
   /* List of subtrees */
@@ -14783,7 +14805,7 @@ void proto_register_ranap(void) {
     &ett_ranap_Outcome,
 
 /*--- End of included file: packet-ranap-ettarr.c ---*/
-#line 305 "packet-ranap-template.c"
+#line 306 "packet-ranap-template.c"
   };
 
 
@@ -15144,7 +15166,7 @@ proto_reg_handoff_ranap(void)
 
 
 /*--- End of included file: packet-ranap-dis-tab.c ---*/
-#line 350 "packet-ranap-template.c"
+#line 351 "packet-ranap-template.c"
        } else {
                dissector_delete("sccp.ssn", local_ranap_sccp_ssn, ranap_handle);
        }
index f616fb595b938b8771beca7658007b2811846b1f..49c7d5335129701444fc77dc1c8996d0c8d44c82 100644 (file)
@@ -246,7 +246,7 @@ static int hf_rrc_BCCH_FACH_Message_PDU = -1;     /* BCCH_FACH_Message */
 static int hf_rrc_BCCH_BCH_Message_PDU = -1;      /* BCCH_BCH_Message */
 static int hf_rrc_MCCH_Message_PDU = -1;          /* MCCH_Message */
 static int hf_rrc_MSCH_Message_PDU = -1;          /* MSCH_Message */
-static int hf_rrc_HandoverToUTRANCommand_PDU = -1;  /* HandoverToUTRANCommand */
+static int hf_rrc_rrc_HandoverToUTRANCommand_PDU = -1;  /* HandoverToUTRANCommand */
 static int hf_rrc_rrc_InterRATHandoverInfo_PDU = -1;  /* InterRATHandoverInfo */
 static int hf_rrc_SystemInformation_BCH_PDU = -1;  /* SystemInformation_BCH */
 static int hf_rrc_UE_RadioAccessCapabilityInfo_PDU = -1;  /* UE_RadioAccessCapabilityInfo */
@@ -23881,7 +23881,7 @@ static const per_choice_t ActiveSetUpdate_choice[] = {
 
 static int
 dissect_rrc_ActiveSetUpdate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 121 "rrc.cnf"
+#line 122 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "ActiveSetUpdate");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_ActiveSetUpdate, ActiveSetUpdate_choice,
@@ -28206,7 +28206,7 @@ static const per_choice_t AssistanceDataDelivery_choice[] = {
 
 static int
 dissect_rrc_AssistanceDataDelivery(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 133 "rrc.cnf"
+#line 134 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "AssistanceDataDelivery");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_AssistanceDataDelivery, AssistanceDataDelivery_choice,
@@ -28604,7 +28604,7 @@ static const per_choice_t CellChangeOrderFromUTRAN_choice[] = {
 
 static int
 dissect_rrc_CellChangeOrderFromUTRAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 137 "rrc.cnf"
+#line 138 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "CellChangeOrderFromUTRAN");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_CellChangeOrderFromUTRAN, CellChangeOrderFromUTRAN_choice,
@@ -47501,7 +47501,7 @@ static const per_choice_t CellUpdateConfirm_choice[] = {
 
 static int
 dissect_rrc_CellUpdateConfirm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 153 "rrc.cnf"
+#line 154 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "CellUpdateConfirm");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_CellUpdateConfirm, CellUpdateConfirm_choice,
@@ -47654,7 +47654,7 @@ static const per_choice_t CounterCheck_choice[] = {
 
 static int
 dissect_rrc_CounterCheck(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 157 "rrc.cnf"
+#line 158 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "CounterCheck");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_CounterCheck, CounterCheck_choice,
@@ -47670,7 +47670,7 @@ dissect_rrc_CounterCheck(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_
 
 static int
 dissect_rrc_NAS_Message(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 103 "rrc.cnf"
+#line 104 "rrc.cnf"
   tvbuff_t *nas_message_tvb=NULL;
 
   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@@ -47787,7 +47787,7 @@ static const per_choice_t DownlinkDirectTransfer_choice[] = {
 
 static int
 dissect_rrc_DownlinkDirectTransfer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 165 "rrc.cnf"
+#line 166 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "DownlinkDirectTransfer");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_DownlinkDirectTransfer, DownlinkDirectTransfer_choice,
@@ -47806,7 +47806,7 @@ static const per_sequence_t T_single_GSM_Message_r3_sequence[] = {
 
 static int
 dissect_rrc_T_single_GSM_Message_r3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 453 "rrc.cnf"
+#line 454 "rrc.cnf"
   tvbuff_t *gsm_message_tvb=NULL;
   guint bits_remaining, whole_octets_remaining;
 
@@ -47831,7 +47831,7 @@ dissect_rrc_T_single_GSM_Message_r3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_
 
 static int
 dissect_rrc_GSM_MessageList_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 445 "rrc.cnf"
+#line 446 "rrc.cnf"
   tvbuff_t *gsm_messagelist_tvb=NULL;
   
   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
@@ -48115,7 +48115,7 @@ static const per_sequence_t T_single_GSM_Message_r6_sequence[] = {
 
 static int
 dissect_rrc_T_single_GSM_Message_r6(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 467 "rrc.cnf"
+#line 468 "rrc.cnf"
   tvbuff_t *gsm_message_tvb=NULL;
   guint bits_remaining, whole_octets_remaining;
 
@@ -48321,7 +48321,7 @@ static const per_choice_t HandoverFromUTRANCommand_GSM_choice[] = {
 
 static int
 dissect_rrc_HandoverFromUTRANCommand_GSM(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 177 "rrc.cnf"
+#line 178 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "HandoverFromUTRANCommand-GSM");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_HandoverFromUTRANCommand_GSM, HandoverFromUTRANCommand_GSM_choice,
@@ -48475,7 +48475,7 @@ static const per_choice_t HandoverFromUTRANCommand_CDMA2000_choice[] = {
 
 static int
 dissect_rrc_HandoverFromUTRANCommand_CDMA2000(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 181 "rrc.cnf"
+#line 182 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "HandoverFromUTRANCommand-CDMA2000");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_HandoverFromUTRANCommand_CDMA2000, HandoverFromUTRANCommand_CDMA2000_choice,
@@ -57221,7 +57221,7 @@ static const per_choice_t MeasurementControl_choice[] = {
 
 static int
 dissect_rrc_MeasurementControl(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 233 "rrc.cnf"
+#line 234 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "MeasurementControl");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_MeasurementControl, MeasurementControl_choice,
@@ -57313,7 +57313,7 @@ static const per_sequence_t PagingType2_sequence[] = {
 
 static int
 dissect_rrc_PagingType2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 249 "rrc.cnf"
+#line 250 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "PagingType2");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_PagingType2, PagingType2_sequence);
@@ -58689,7 +58689,7 @@ static const per_choice_t PhysicalChannelReconfiguration_choice[] = {
 
 static int
 dissect_rrc_PhysicalChannelReconfiguration(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 253 "rrc.cnf"
+#line 254 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "PhysicalChannelReconfiguration");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_PhysicalChannelReconfiguration, PhysicalChannelReconfiguration_choice,
@@ -59993,7 +59993,7 @@ static const per_choice_t PhysicalSharedChannelAllocation_choice[] = {
 
 static int
 dissect_rrc_PhysicalSharedChannelAllocation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 265 "rrc.cnf"
+#line 266 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "PhysicalSharedChannelAllocation");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_PhysicalSharedChannelAllocation, PhysicalSharedChannelAllocation_choice,
@@ -62198,7 +62198,7 @@ static const per_choice_t RadioBearerReconfiguration_choice[] = {
 
 static int
 dissect_rrc_RadioBearerReconfiguration(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 273 "rrc.cnf"
+#line 274 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "RadioBearerReconfiguration");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_RadioBearerReconfiguration, RadioBearerReconfiguration_choice,
@@ -63610,7 +63610,7 @@ static const per_choice_t RadioBearerRelease_choice[] = {
 
 static int
 dissect_rrc_RadioBearerRelease(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 285 "rrc.cnf"
+#line 286 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "RadioBearerRelease");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_RadioBearerRelease, RadioBearerRelease_choice,
@@ -65788,7 +65788,7 @@ static const per_choice_t RadioBearerSetup_choice[] = {
 
 static int
 dissect_rrc_RadioBearerSetup(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 297 "rrc.cnf"
+#line 298 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "RadioBearerSetup");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_RadioBearerSetup, RadioBearerSetup_choice,
@@ -66438,7 +66438,7 @@ static const per_choice_t RRCConnectionRelease_choice[] = {
 
 static int
 dissect_rrc_RRCConnectionRelease(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 313 "rrc.cnf"
+#line 314 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionRelease");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_RRCConnectionRelease, RRCConnectionRelease_choice,
@@ -66717,7 +66717,7 @@ static const per_choice_t SecurityModeCommand_choice[] = {
 
 static int
 dissect_rrc_SecurityModeCommand(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 341 "rrc.cnf"
+#line 342 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "SecurityModeCommand");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_SecurityModeCommand, SecurityModeCommand_choice,
@@ -66830,7 +66830,7 @@ static const per_choice_t SignallingConnectionRelease_choice[] = {
 
 static int
 dissect_rrc_SignallingConnectionRelease(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 353 "rrc.cnf"
+#line 354 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "SignallingConnectionRelease");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_SignallingConnectionRelease, SignallingConnectionRelease_choice,
@@ -68244,7 +68244,7 @@ static const per_choice_t TransportChannelReconfiguration_choice[] = {
 
 static int
 dissect_rrc_TransportChannelReconfiguration(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 373 "rrc.cnf"
+#line 374 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "TransportChannelReconfiguration");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_TransportChannelReconfiguration, TransportChannelReconfiguration_choice,
@@ -68389,7 +68389,7 @@ static const per_sequence_t TransportFormatCombinationControl_sequence[] = {
 
 static int
 dissect_rrc_TransportFormatCombinationControl(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 385 "rrc.cnf"
+#line 386 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "TransportFormatCombinationControl");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_TransportFormatCombinationControl, TransportFormatCombinationControl_sequence);
@@ -68755,7 +68755,7 @@ static const per_choice_t UECapabilityEnquiry_choice[] = {
 
 static int
 dissect_rrc_UECapabilityEnquiry(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 393 "rrc.cnf"
+#line 394 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "UECapabilityEnquiry");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_UECapabilityEnquiry, UECapabilityEnquiry_choice,
@@ -68913,7 +68913,7 @@ static const per_choice_t UECapabilityInformationConfirm_choice[] = {
 
 static int
 dissect_rrc_UECapabilityInformationConfirm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 401 "rrc.cnf"
+#line 402 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "UECapabilityInformationConfirm");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_UECapabilityInformationConfirm, UECapabilityInformationConfirm_choice,
@@ -69677,7 +69677,7 @@ static const per_choice_t UplinkPhysicalChannelControl_choice[] = {
 
 static int
 dissect_rrc_UplinkPhysicalChannelControl(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 409 "rrc.cnf"
+#line 410 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "UplinkPhysicalChannelControl");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_UplinkPhysicalChannelControl, UplinkPhysicalChannelControl_choice,
@@ -70020,7 +70020,7 @@ static const per_choice_t URAUpdateConfirm_choice[] = {
 
 static int
 dissect_rrc_URAUpdateConfirm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 417 "rrc.cnf"
+#line 418 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "URAUpdateConfirm");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_URAUpdateConfirm, URAUpdateConfirm_choice,
@@ -71473,7 +71473,7 @@ static const per_choice_t UTRANMobilityInformation_choice[] = {
 
 static int
 dissect_rrc_UTRANMobilityInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 425 "rrc.cnf"
+#line 426 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "UTRANMobilityInformation");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_UTRANMobilityInformation, UTRANMobilityInformation_choice,
@@ -71660,7 +71660,7 @@ static const per_sequence_t HandoverFromUTRANCommand_GERANIu_sequence[] = {
 
 static int
 dissect_rrc_HandoverFromUTRANCommand_GERANIu(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 173 "rrc.cnf"
+#line 174 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "HandoverFromUTRANCommand-GERANIu");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_HandoverFromUTRANCommand_GERANIu, HandoverFromUTRANCommand_GERANIu_sequence);
@@ -72098,7 +72098,7 @@ static const per_sequence_t MBMSModifiedServicesInformation_sequence[] = {
 
 static int
 dissect_rrc_MBMSModifiedServicesInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 217 "rrc.cnf"
+#line 218 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "MBMSModifiedServicesInformation");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_MBMSModifiedServicesInformation, MBMSModifiedServicesInformation_sequence);
@@ -72480,7 +72480,7 @@ static const per_sequence_t ActiveSetUpdateComplete_sequence[] = {
 
 static int
 dissect_rrc_ActiveSetUpdateComplete(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 125 "rrc.cnf"
+#line 126 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "ActiveSetUpdateComplete");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_ActiveSetUpdateComplete, ActiveSetUpdateComplete_sequence);
@@ -72651,7 +72651,7 @@ static const per_sequence_t ActiveSetUpdateFailure_sequence[] = {
 
 static int
 dissect_rrc_ActiveSetUpdateFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 129 "rrc.cnf"
+#line 130 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "ActiveSetUpdateFailure");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_ActiveSetUpdateFailure, ActiveSetUpdateFailure_sequence);
@@ -72798,7 +72798,7 @@ static const per_choice_t CellChangeOrderFromUTRANFailure_choice[] = {
 
 static int
 dissect_rrc_CellChangeOrderFromUTRANFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 141 "rrc.cnf"
+#line 142 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "CellChangeOrderFromUTRANFailure");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_CellChangeOrderFromUTRANFailure, CellChangeOrderFromUTRANFailure_choice,
@@ -72888,7 +72888,7 @@ static const per_sequence_t CounterCheckResponse_sequence[] = {
 
 static int
 dissect_rrc_CounterCheckResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 161 "rrc.cnf"
+#line 162 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "CounterCheckResponse");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_CounterCheckResponse, CounterCheckResponse_sequence);
@@ -72937,7 +72937,7 @@ static const per_sequence_t HandoverToUTRANComplete_sequence[] = {
 
 static int
 dissect_rrc_HandoverToUTRANComplete(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 169 "rrc.cnf"
+#line 170 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "HandoverToUTRANComplete");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_HandoverToUTRANComplete, HandoverToUTRANComplete_sequence);
@@ -73854,7 +73854,7 @@ static const per_sequence_t InitialDirectTransfer_sequence[] = {
 
 static int
 dissect_rrc_InitialDirectTransfer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 189 "rrc.cnf"
+#line 190 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "InitialDirectTransfer");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_InitialDirectTransfer, InitialDirectTransfer_sequence);
@@ -74062,7 +74062,7 @@ static const per_sequence_t HandoverFromUTRANFailure_sequence[] = {
 
 static int
 dissect_rrc_HandoverFromUTRANFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 185 "rrc.cnf"
+#line 186 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "HandoverFromUTRANFailure");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_HandoverFromUTRANFailure, HandoverFromUTRANFailure_sequence);
@@ -74140,7 +74140,7 @@ static const per_sequence_t MeasurementControlFailure_sequence[] = {
 
 static int
 dissect_rrc_MeasurementControlFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 237 "rrc.cnf"
+#line 238 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "MeasurementControlFailure");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_MeasurementControlFailure, MeasurementControlFailure_sequence);
@@ -78376,7 +78376,7 @@ static const per_sequence_t MeasurementReport_sequence[] = {
 
 static int
 dissect_rrc_MeasurementReport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 241 "rrc.cnf"
+#line 242 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "MeasurementReport");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_MeasurementReport, MeasurementReport_sequence);
@@ -78474,7 +78474,7 @@ static const per_sequence_t PhysicalChannelReconfigurationComplete_sequence[] =
 
 static int
 dissect_rrc_PhysicalChannelReconfigurationComplete(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 257 "rrc.cnf"
+#line 258 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "PhysicalChannelReconfigurationComplete");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_PhysicalChannelReconfigurationComplete, PhysicalChannelReconfigurationComplete_sequence);
@@ -78523,7 +78523,7 @@ static const per_sequence_t PhysicalChannelReconfigurationFailure_sequence[] = {
 
 static int
 dissect_rrc_PhysicalChannelReconfigurationFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 261 "rrc.cnf"
+#line 262 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "PhysicalChannelReconfigurationFailure");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_PhysicalChannelReconfigurationFailure, PhysicalChannelReconfigurationFailure_sequence);
@@ -78621,7 +78621,7 @@ static const per_sequence_t RadioBearerReconfigurationComplete_sequence[] = {
 
 static int
 dissect_rrc_RadioBearerReconfigurationComplete(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 277 "rrc.cnf"
+#line 278 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "RadioBearerReconfigurationComplete");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_RadioBearerReconfigurationComplete, RadioBearerReconfigurationComplete_sequence);
@@ -78685,7 +78685,7 @@ static const per_sequence_t RadioBearerReconfigurationFailure_sequence[] = {
 
 static int
 dissect_rrc_RadioBearerReconfigurationFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 281 "rrc.cnf"
+#line 282 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "RadioBearerReconfigurationFailure");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_RadioBearerReconfigurationFailure, RadioBearerReconfigurationFailure_sequence);
@@ -78783,7 +78783,7 @@ static const per_sequence_t RadioBearerReleaseComplete_sequence[] = {
 
 static int
 dissect_rrc_RadioBearerReleaseComplete(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 289 "rrc.cnf"
+#line 290 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "RadioBearerReleaseComplete");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_RadioBearerReleaseComplete, RadioBearerReleaseComplete_sequence);
@@ -78833,7 +78833,7 @@ static const per_sequence_t RadioBearerReleaseFailure_sequence[] = {
 
 static int
 dissect_rrc_RadioBearerReleaseFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 293 "rrc.cnf"
+#line 294 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "RadioBearerReleaseFailure");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_RadioBearerReleaseFailure, RadioBearerReleaseFailure_sequence);
@@ -78932,7 +78932,7 @@ static const per_sequence_t RadioBearerSetupComplete_sequence[] = {
 
 static int
 dissect_rrc_RadioBearerSetupComplete(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 301 "rrc.cnf"
+#line 302 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "RadioBearerSetupComplete");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_RadioBearerSetupComplete, RadioBearerSetupComplete_sequence);
@@ -78982,7 +78982,7 @@ static const per_sequence_t RadioBearerSetupFailure_sequence[] = {
 
 static int
 dissect_rrc_RadioBearerSetupFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 305 "rrc.cnf"
+#line 306 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "RadioBearerSetupFailure");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_RadioBearerSetupFailure, RadioBearerSetupFailure_sequence);
@@ -79031,7 +79031,7 @@ static const per_sequence_t RRCConnectionReleaseComplete_sequence[] = {
 
 static int
 dissect_rrc_RRCConnectionReleaseComplete(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 321 "rrc.cnf"
+#line 322 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReleaseComplete");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_RRCConnectionReleaseComplete, RRCConnectionReleaseComplete_sequence);
@@ -80046,7 +80046,7 @@ dissect_rrc_UE_RadioAccessCapability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx
 
 static int
 dissect_rrc_GSM_Classmark2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 481 "rrc.cnf"
+#line 482 "rrc.cnf"
 tvbuff_t *parameter_tvb=NULL;
 
   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@@ -80065,7 +80065,7 @@ tvbuff_t *parameter_tvb=NULL;
 
 static int
 dissect_rrc_GSM_Classmark3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 489 "rrc.cnf"
+#line 490 "rrc.cnf"
 tvbuff_t *parameter_tvb=NULL;
 
   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@@ -81474,7 +81474,7 @@ static const per_sequence_t RRCConnectionSetupComplete_sequence[] = {
 
 static int
 dissect_rrc_RRCConnectionSetupComplete(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 333 "rrc.cnf"
+#line 334 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionSetupComplete");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_RRCConnectionSetupComplete, RRCConnectionSetupComplete_sequence);
@@ -81653,7 +81653,7 @@ static const per_sequence_t RRCStatus_sequence[] = {
 
 static int
 dissect_rrc_RRCStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 337 "rrc.cnf"
+#line 338 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCStatus");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_RRCStatus, RRCStatus_sequence);
@@ -81703,7 +81703,7 @@ static const per_sequence_t SecurityModeComplete_sequence[] = {
 
 static int
 dissect_rrc_SecurityModeComplete(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 345 "rrc.cnf"
+#line 346 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "SecurityModeComplete");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_SecurityModeComplete, SecurityModeComplete_sequence);
@@ -81752,7 +81752,7 @@ static const per_sequence_t SecurityModeFailure_sequence[] = {
 
 static int
 dissect_rrc_SecurityModeFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 349 "rrc.cnf"
+#line 350 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "SecurityModeFailure");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_SecurityModeFailure, SecurityModeFailure_sequence);
@@ -81845,7 +81845,7 @@ static const per_sequence_t SignallingConnectionReleaseIndication_sequence[] = {
 
 static int
 dissect_rrc_SignallingConnectionReleaseIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 357 "rrc.cnf"
+#line 358 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "SignallingConnectionReleaseIndication");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_SignallingConnectionReleaseIndication, SignallingConnectionReleaseIndication_sequence);
@@ -81943,7 +81943,7 @@ static const per_sequence_t TransportChannelReconfigurationComplete_sequence[] =
 
 static int
 dissect_rrc_TransportChannelReconfigurationComplete(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 377 "rrc.cnf"
+#line 378 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "TransportChannelReconfigurationComplete");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_TransportChannelReconfigurationComplete, TransportChannelReconfigurationComplete_sequence);
@@ -81992,7 +81992,7 @@ static const per_sequence_t TransportChannelReconfigurationFailure_sequence[] =
 
 static int
 dissect_rrc_TransportChannelReconfigurationFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 381 "rrc.cnf"
+#line 382 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "TransportChannelReconfigurationFailure");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_TransportChannelReconfigurationFailure, TransportChannelReconfigurationFailure_sequence);
@@ -82041,7 +82041,7 @@ static const per_sequence_t TransportFormatCombinationControlFailure_sequence[]
 
 static int
 dissect_rrc_TransportFormatCombinationControlFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 389 "rrc.cnf"
+#line 390 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "TransportFormatCombinationControlFailure");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_TransportFormatCombinationControlFailure, TransportFormatCombinationControlFailure_sequence);
@@ -82317,7 +82317,7 @@ static const per_sequence_t UECapabilityInformation_sequence[] = {
 
 static int
 dissect_rrc_UECapabilityInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 397 "rrc.cnf"
+#line 398 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "UECapabilityInformation");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_UECapabilityInformation, UECapabilityInformation_sequence);
@@ -82396,7 +82396,7 @@ static const per_sequence_t UplinkDirectTransfer_sequence[] = {
 
 static int
 dissect_rrc_UplinkDirectTransfer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 405 "rrc.cnf"
+#line 406 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "UplinkDirectTransfer");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_UplinkDirectTransfer, UplinkDirectTransfer_sequence);
@@ -82492,7 +82492,7 @@ static const per_sequence_t UTRANMobilityInformationConfirm_sequence[] = {
 
 static int
 dissect_rrc_UTRANMobilityInformationConfirm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 429 "rrc.cnf"
+#line 430 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "UTRANMobilityInformationConfirm");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_UTRANMobilityInformationConfirm, UTRANMobilityInformationConfirm_sequence);
@@ -82541,7 +82541,7 @@ static const per_sequence_t UTRANMobilityInformationFailure_sequence[] = {
 
 static int
 dissect_rrc_UTRANMobilityInformationFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 433 "rrc.cnf"
+#line 434 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "UTRANMobilityInformationFailure");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_UTRANMobilityInformationFailure, UTRANMobilityInformationFailure_sequence);
@@ -82698,7 +82698,7 @@ static const per_sequence_t MBMSModificationRequest_sequence[] = {
 
 static int
 dissect_rrc_MBMSModificationRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 213 "rrc.cnf"
+#line 214 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "MBMSModificationRequest");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_MBMSModificationRequest, MBMSModificationRequest_sequence);
@@ -83434,7 +83434,7 @@ static const per_choice_t CellUpdateConfirm_CCCH_choice[] = {
 
 static int
 dissect_rrc_CellUpdateConfirm_CCCH(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 149 "rrc.cnf"
+#line 150 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "CellUpdateConfirm-CCCH");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_CellUpdateConfirm_CCCH, CellUpdateConfirm_CCCH_choice,
@@ -83888,7 +83888,7 @@ static const per_choice_t RRCConnectionReject_choice[] = {
 
 static int
 dissect_rrc_RRCConnectionReject(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 309 "rrc.cnf"
+#line 310 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReject");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_RRCConnectionReject, RRCConnectionReject_choice,
@@ -84384,7 +84384,7 @@ static const per_choice_t RRCConnectionRelease_CCCH_choice[] = {
 
 static int
 dissect_rrc_RRCConnectionRelease_CCCH(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 317 "rrc.cnf"
+#line 318 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionRelease-CCCH");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_RRCConnectionRelease_CCCH, RRCConnectionRelease_CCCH_choice,
@@ -85992,7 +85992,7 @@ static const per_choice_t RRCConnectionSetup_choice[] = {
 
 static int
 dissect_rrc_RRCConnectionSetup(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 329 "rrc.cnf"
+#line 330 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionSetup");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_RRCConnectionSetup, RRCConnectionSetup_choice,
@@ -86136,7 +86136,7 @@ static const per_choice_t URAUpdateConfirm_CCCH_choice[] = {
 
 static int
 dissect_rrc_URAUpdateConfirm_CCCH(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 421 "rrc.cnf"
+#line 422 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "URAUpdateConfirm-CCCH");
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_rrc_URAUpdateConfirm_CCCH, URAUpdateConfirm_CCCH_choice,
@@ -86668,7 +86668,7 @@ static const per_sequence_t CellUpdate_sequence[] = {
 
 static int
 dissect_rrc_CellUpdate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 145 "rrc.cnf"
+#line 146 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "CellUpdate");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_CellUpdate, CellUpdate_sequence);
@@ -87308,7 +87308,7 @@ static const per_sequence_t RRCConnectionRequest_sequence[] = {
 
 static int
 dissect_rrc_RRCConnectionRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 325 "rrc.cnf"
+#line 326 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionRequest");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_RRCConnectionRequest, RRCConnectionRequest_sequence);
@@ -87559,7 +87559,7 @@ static const per_sequence_t URAUpdate_sequence[] = {
 
 static int
 dissect_rrc_URAUpdate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 413 "rrc.cnf"
+#line 414 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "URAUpdate");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_URAUpdate, URAUpdate_sequence);
@@ -87982,7 +87982,7 @@ static const per_sequence_t PagingType1_sequence[] = {
 
 static int
 dissect_rrc_PagingType1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 245 "rrc.cnf"
+#line 246 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "PagingType1");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_PagingType1, PagingType1_sequence);
@@ -88187,7 +88187,7 @@ static const per_sequence_t PUSCHCapacityRequest_sequence[] = {
 
 static int
 dissect_rrc_PUSCHCapacityRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 269 "rrc.cnf"
+#line 270 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "PUSCHCapacityRequest");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_PUSCHCapacityRequest, PUSCHCapacityRequest_sequence);
@@ -88563,7 +88563,7 @@ static const per_sequence_t SystemInformation_FACH_sequence[] = {
 
 static int
 dissect_rrc_SystemInformation_FACH(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 365 "rrc.cnf"
+#line 366 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "SystemInformation-FACH");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_SystemInformation_FACH, SystemInformation_FACH_sequence);
@@ -88640,7 +88640,7 @@ static const per_sequence_t SystemInformationChangeIndication_sequence[] = {
 
 static int
 dissect_rrc_SystemInformationChangeIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 369 "rrc.cnf"
+#line 370 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "SystemInformationChangeIndication");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_SystemInformationChangeIndication, SystemInformationChangeIndication_sequence);
@@ -88821,7 +88821,7 @@ static const per_sequence_t SystemInformation_BCH_sequence[] = {
 
 static int
 dissect_rrc_SystemInformation_BCH(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 361 "rrc.cnf"
+#line 362 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "SystemInformation-BCH");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_SystemInformation_BCH, SystemInformation_BCH_sequence);
@@ -88961,7 +88961,7 @@ static const per_sequence_t MBMSAccessInformation_sequence[] = {
 
 static int
 dissect_rrc_MBMSAccessInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 193 "rrc.cnf"
+#line 194 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "MBMSAccessInformation");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_MBMSAccessInformation, MBMSAccessInformation_sequence);
@@ -89830,7 +89830,7 @@ static const per_sequence_t MBMSCommonPTMRBInformation_sequence[] = {
 
 static int
 dissect_rrc_MBMSCommonPTMRBInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 197 "rrc.cnf"
+#line 198 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "MBMSCommonPTMRBInformation");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_MBMSCommonPTMRBInformation, MBMSCommonPTMRBInformation_sequence);
@@ -90218,7 +90218,7 @@ static const per_sequence_t MBMSCurrentCellPTMRBInformation_sequence[] = {
 
 static int
 dissect_rrc_MBMSCurrentCellPTMRBInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 201 "rrc.cnf"
+#line 202 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "MBMSCurrentCellPTMRBInformation");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_MBMSCurrentCellPTMRBInformation, MBMSCurrentCellPTMRBInformation_sequence);
@@ -90996,7 +90996,7 @@ static const per_sequence_t MBMSGeneralInformation_sequence[] = {
 
 static int
 dissect_rrc_MBMSGeneralInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 209 "rrc.cnf"
+#line 210 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "MBMSGeneralInformation");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_MBMSGeneralInformation, MBMSGeneralInformation_sequence);
@@ -91670,7 +91670,7 @@ static const per_sequence_t MBMSNeighbouringCellPTMRBInformation_sequence[] = {
 
 static int
 dissect_rrc_MBMSNeighbouringCellPTMRBInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 221 "rrc.cnf"
+#line 222 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "MBMSNeighbouringCellPTMRBInformation");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_MBMSNeighbouringCellPTMRBInformation, MBMSNeighbouringCellPTMRBInformation_sequence);
@@ -91807,7 +91807,7 @@ static const per_sequence_t MBMSUnmodifiedServicesInformation_sequence[] = {
 
 static int
 dissect_rrc_MBMSUnmodifiedServicesInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 229 "rrc.cnf"
+#line 230 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "MBMSUnmodifiedServicesInformation");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_MBMSUnmodifiedServicesInformation, MBMSUnmodifiedServicesInformation_sequence);
@@ -91963,7 +91963,7 @@ static const per_sequence_t MBMSSchedulingInformation_sequence[] = {
 
 static int
 dissect_rrc_MBMSSchedulingInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 225 "rrc.cnf"
+#line 226 "rrc.cnf"
   col_append_str(actx->pinfo->cinfo, COL_INFO, "MBMSSchedulingInformation");
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_rrc_MBMSSchedulingInformation, MBMSSchedulingInformation_sequence);
@@ -94849,7 +94849,7 @@ dissect_rrc_T_uE_SecurityInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx
 
 static int
 dissect_rrc_T_present(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 111 "rrc.cnf"
+#line 112 "rrc.cnf"
   tvbuff_t *ue_radio_access_cap_info_tvb=NULL;
 
   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@@ -113425,7 +113425,7 @@ dissect_rrc_UE_HistoryInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t
 
 static int
 dissect_rrc_T_interRATHandoverInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 496 "rrc.cnf"
+#line 497 "rrc.cnf"
 tvbuff_t *parameter_tvb=NULL;
 
   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@@ -117788,7 +117788,7 @@ dissect_rrc_ToTargetRNC_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t
 
 static int
 dissect_rrc_T_dL_DCCHmessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 437 "rrc.cnf"
+#line 438 "rrc.cnf"
   tvbuff_t *dl_dcch_message_tvb=NULL;
 
   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@@ -118008,10 +118008,10 @@ static void dissect_MSCH_Message_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_,
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
   dissect_rrc_MSCH_Message(tvb, 0, &asn1_ctx, tree, hf_rrc_MSCH_Message_PDU);
 }
-static void dissect_HandoverToUTRANCommand_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+void dissect_rrc_HandoverToUTRANCommand_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
-  dissect_rrc_HandoverToUTRANCommand(tvb, 0, &asn1_ctx, tree, hf_rrc_HandoverToUTRANCommand_PDU);
+  dissect_rrc_HandoverToUTRANCommand(tvb, 0, &asn1_ctx, tree, hf_rrc_rrc_HandoverToUTRANCommand_PDU);
 }
 void dissect_rrc_InterRATHandoverInfo_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
@@ -118446,7 +118446,7 @@ void proto_register_rrc(void) {
       { "MSCH-Message", "rrc.MSCH_Message",
         FT_NONE, BASE_NONE, NULL, 0,
         "rrc.MSCH_Message", HFILL }},
-    { &hf_rrc_HandoverToUTRANCommand_PDU,
+    { &hf_rrc_rrc_HandoverToUTRANCommand_PDU,
       { "HandoverToUTRANCommand", "rrc.HandoverToUTRANCommand",
         FT_UINT32, BASE_DEC, VALS(rrc_HandoverToUTRANCommand_vals), 0,
         "rrc.HandoverToUTRANCommand", HFILL }},
@@ -156123,7 +156123,7 @@ void proto_register_rrc(void) {
   register_dissector("rrc.bcch.bch", dissect_BCCH_BCH_Message_PDU, proto_rrc);
   register_dissector("rrc.mcch", dissect_MCCH_Message_PDU, proto_rrc);
   register_dissector("rrc.msch", dissect_MSCH_Message_PDU, proto_rrc);
-  register_dissector("rrc.irat.ho_to_utran_cmd", dissect_HandoverToUTRANCommand_PDU, proto_rrc);
+  register_dissector("rrc.irat.ho_to_utran_cmd", dissect_rrc_HandoverToUTRANCommand_PDU, proto_rrc);
   register_dissector("rrc.irat.irat_ho_info", dissect_rrc_InterRATHandoverInfo_PDU, proto_rrc);
   register_dissector("rrc.sysinfo", dissect_SystemInformation_BCH_PDU, proto_rrc);
   register_dissector("rrc.ue_radio_access_cap_info", dissect_UE_RadioAccessCapabilityInfo_PDU, proto_rrc);
index 172a5f0acf21405d510ba6cde4cb90bef7fa8b1e..21039572f34a437aae6c03677c552350818aeef1 100644 (file)
@@ -38,6 +38,7 @@ extern int proto_rrc;
 /*--- Included file: packet-rrc-exp.h ---*/
 #line 1 "packet-rrc-exp.h"
 int dissect_rrc_InterRATHandoverInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
+void dissect_rrc_HandoverToUTRANCommand_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_);
 void dissect_rrc_InterRATHandoverInfo_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_);
 void dissect_rrc_ToTargetRNC_Container_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_);
 void dissect_rrc_TargetRNC_ToSourceRNC_Container_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_);