More IE:s
authoretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 24 Sep 2007 21:26:31 +0000 (21:26 +0000)
committeretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 24 Sep 2007 21:26:31 +0000 (21:26 +0000)
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@22941 f5534014-38df-0310-8fa8-9805f1628bb7

epan/dissectors/packet-gsm_a.c
epan/dissectors/packet-gsm_a.h
epan/dissectors/packet-rsl.c

index b24963f92684ec1a12a2a61f685e7f1729e87798..453d55f63545eaf7166560c4529e4457685e90de 100644 (file)
@@ -4176,7 +4176,7 @@ de_rr_cell_dsc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar
  * [3] 10.5.2.4a MAC Mode and Channel Coding Requested 
  * [3] 10.5.2.5 Channel Description
  */
-static guint8
+guint8
 de_rr_ch_dsc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
 {
     guint32    curr_offset;
@@ -4818,6 +4818,22 @@ de_rr_l2_pseudo_len(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len,
 }
 /*
  * [3] 10.5.2.20 Measurement Results
+ */
+
+       /* BA-USED (octet 2), the value of the BA_IND field of the neighbour cell description
+        * information element or elements defining the BCCH allocation used for the coding of
+        * BCCH-FREQ-NCELL fields. Range 0 to 1.
+        */
+
+       /* DTX-USED (octet 2) This bit indicates whether or not the mobile station used DTX during
+        *      the previous measurement period.
+        * Bit 7
+        * 0 DTX was not used
+        * 1 DTX was used
+        */
+
+       
+/*
  * [3] 10.5.2.20a GPRS Measurement Results
  */
 /*
@@ -15470,6 +15486,12 @@ dtap_rr_imm_ass(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
                ELEM_MAND_V(BSSAP_PDU_TYPE_DTAP, DE_RR_IA_REST_OCT);
 
 }
+
+/*
+ * 9.1.21 Measurement report
+ */
+
+       /* Measurement Results 10.5.2.20 M V 16 */
 /*
  * [4] 9.1.25
  */
@@ -17881,7 +17903,7 @@ static void (*dtap_msg_rr_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset
     dtap_rr_rr_status, /* RR Status */
     NULL,      /* Channel Mode Modify Acknowledge */
     NULL,      /* Frequency Redefinition */
-    NULL,      /* Measurement Report */
+    NULL,      /* 9.1.21 Measurement report */
     dtap_rr_mm_cm_change,      /* 9.1.11 Classmark Change */
     NULL,      /* Classmark Enquiry */
     NULL,      /* Extended Measurement Report */
index 27905d464777f5212177fa49d4d8bcd4938f0adc..6f1a231b23f7a450a6bcbd102ddf6c263b55db9a 100644 (file)
@@ -86,6 +86,7 @@ guint8 de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset,
 
 guint8 de_rr_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
 guint8 de_rr_cell_dsc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
+guint8 de_rr_ch_dsc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_);
 guint8 de_rr_ch_mode(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
 guint8 de_rr_chnl_needed(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_);
 guint8 de_rr_cip_mode_set(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
index 27b6494858733484c1b7af337397efc4cc62fc8d..ea6712863000c1dc29ad85e1d1ef7882aa5fb3d2 100644 (file)
@@ -61,25 +61,55 @@ static int hf_rsl_req_ref_ra                = -1;
 static int hf_rsl_req_ref_T1prim       = -1;
 static int hf_rsl_req_ref_T3           = -1;
 static int hf_rsl_req_ref_T2           = -1;
+static int hf_rsl_ho_ref                       = -1;
+static int hf_rsl_ms_power_lev         = -1;
+static int hf_rsl_ms_fpc                       = -1;
+static int hf_rsl_act_timing_adv       = -1;
 static int hf_rsl_phy_ctx                      = -1;
 static int hf_rsl_na                           = -1;
 static int hf_rsl_ch_type                      = -1;
 static int hf_rsl_prio                         = -1;
 static int hf_rsl_sapi                         = -1;
+static int hf_rsl_rbit                         = -1;
+static int hf_rsl_a3a2                         = -1;
+static int hf_rsl_a1_0                         = -1;
+static int hf_rsl_a1_1                         = -1;
+static int hf_rsl_a1_2                         = -1;
+static int hf_rsl_epc_mode                     = -1;
+static int hf_rsl_fpc_epc_mode         = -1;
+static int hf_rsl_bs_power                     = -1;
+static int hf_rsl_cm_dtxd                      = -1;
+static int hf_rsl_cm_dtxu                      = -1;
+static int hf_rsl_alg_id                       = -1;
+static int hf_rsl_key                          = -1;
 static int hf_rsl_cause                                = -1;
 static int hf_rsl_rel_mode                     = -1;
 static int hf_rsl_meas_res_no          = -1;
 static int hf_rsl_extension_bit                = -1;
+static int hf_rsl_dtxd                         = -1;
+static int hf_rsl_rxlev_full_up                = -1;
+static int hf_rsl_rxlev_sub_up         = -1;
+static int hf_rsl_rxqual_full_up       = -1;
+static int hf_rsl_rxqual_sub_up                = -1;
 static int hf_rsl_class                                = -1;
 static int hf_rsl_paging_grp           = -1;
+static int hf_rsl_sys_info_type                = -1;
+static int hf_rsl_timing_offset                = -1;
 static int hf_rsl_ch_needed                    = -1;
 static int hf_rsl_emlpp_prio           = -1;
 
 /* Initialize the subtree pointers */
 static int ett_rsl = -1;
-static int ett_ie_link_id;
+static int ett_ie_link_id = -1;
+static int ett_ie_act_type = -1;
+static int ett_ie_bs_power = -1;
+static int ett_ie_ch_id = -1;
+static int ett_ie_ch_mode = -1;
+static int ett_ie_enc_inf = -1;
 static int ett_ie_ch_no = -1;
 static int ett_ie_frame_no = -1;
+static int ett_ie_ho_ref = -1;
+static int ett_ie_l1_inf = -1;
 static int ett_ie_L3_inf = -1;
 static int ett_ie_ms_id = -1;
 static int ett_ie_phy_ctx = -1;
@@ -88,11 +118,18 @@ static int ett_ie_access_delay = -1;
 static int ett_ie_req_ref = -1;
 static int ett_ie_rel_mode = -1;
 static int ett_ie_rlm_cause    =-1;
+static int ett_ie_staring_time = -1;
+static int ett_ie_uplik_meas = -1;
 static int ett_ie_full_imm_ass_inf = -1;
+static int ett_ie_ms_timing_offset = -1;
 static int ett_ie_ch_needed = -1;
 static int ett_ie_emlpp_prio = -1;
+static int ett_ie_main_ch_ref = -1;
+static int ett_ie_multirate_conf = -1;
 static int ett_ie_cause = -1;
 static int ett_ie_meas_res_no = -1;
+static int ett_ie_message_id = -1;
+static int ett_ie_sys_info_type = -1;
 
 proto_tree *top_tree;
 dissector_handle_t gsm_a_ccch_handle = NULL;
@@ -104,8 +141,8 @@ static const true_false_string rsl_t_bit_vals = {
 };
 
 static const true_false_string rsl_na_vals = {
-  "Applicable",
-  "Not Applicable"
+  "Not Applicable",
+  "Applicable"
 };
 
 static const true_false_string rsl_extension_bit_value = {
@@ -145,14 +182,53 @@ static const value_string rsl_msg_disc_vals[] = {
 #define RSL_MSG_DELETE_IND                     20
 #define RSL_MSG_PAGING_CMD                     21
 #define RSL_MSG_IMM_ASS_CMD                    22
+#define RSL_MSG_SMS_BC_REQ                     23      /* 8.5.7 */
+#define RSL_MSG_RF_RES_IND                     24      /* 8.6.1 */
+#define RSL_MSG_SACCH_FILL                     25      /* 8.6.2 */
 
+#define RSL_MSG_OVERLOAD                       27      /* 8.6.3 */
+#define RSL_MSG_ERROR_REPORT           28      /* 8.6.4 */
+#define RSL_MSG_SMS_BC_CMD                     29      /* 8.5.8 */
+#define RSL_MSG_CBCH_LOAD_IND          30      /* 8.5.9 */
+#define RSL_MSG_NOT_CMD                                31      /* 8.5.10 */
+
+/* 0 0 1 - - - - - Dedicated Channel Management messages: */
 #define RSL_MSG_CHAN_ACTIV                     33
 #define RSL_MSG_CHAN_ACTIV_ACK         34
 #define RSL_MSG_CHAN_ACTIV_N_ACK       35
 #define RSL_MSG_CONN_FAIL                      36
 #define RSL_MSG_DEACTIVATE_SACCH       37
  
-#define RSL_MSG_MEAS_RES                       40
+#define RSL_MSG_ENCR_CMD                               38      /* 8.4.6 */
+#define RSL_MSG_HANDODET                               39      /* 8.4.7 */
+#define RSL_MSG_MEAS_RES                               40      /* 8.4.8 */
+#define RSL_MSG_MODE_MODIFY_REQ                        41      /* 8.4.9 */
+#define RSL_MSG_MODE_MODIFY_ACK                        42      /* 8.4.10 */
+#define RSL_MSG_MODE_MODIFY_NACK               43      /* 8.4.11 */
+#define RSL_MSG_PHY_CONTEXT_REQ                        44      /* 8.4.12 */
+#define RSL_MSG_PHY_CONTEXT_CONF               45      /* 8.4.13 */
+#define RSL_MSG_RF_CHAN_REL                            46      /* 8.4.14 */
+#define RSL_MSG_MS_POWER_CONTROL               47      /* 8.4.15 */
+#define RSL_MSG_BS_POWER_CONTROL               48      /* 8.4.16 */
+#define RSL_MSG_PREPROC_CONFIG                 49      /* 8.4.17 */
+#define RSL_MSG_PREPROC_MEAS_RES               50      /* 8.4.18 */
+#define RSL_MSG_RF_CHAN_REL_ACK                        51      /* 8.4.19 */
+#define RSL_MSG_SACCH_INFO_MODIFY              52      /* 8.4.20 */
+#define RSL_MSG_TALKER_DET                             53      /* 8.4.21 */
+#define RSL_MSG_LISTENER_DET                   54      /* 8.4.22 */
+#define RSL_MSG_REMOTE_CODEC_CONF_REP  55      /* 8.4.23 */
+#define RSL_MSG_R_T_D_REP                              56      /* 8.4.24 */
+#define RSL_MSG_PRE_HANDO_NOTIF                        57      /* 8.4.25 */
+#define RSL_MSG_MR_CODEC_MOD_REQ               58      /* 8.4.26 */
+#define RSL_MSG_MR_CODEC_MOD_ACK               59      /* 8.4.27 */
+#define RSL_MSG_MR_CODEC_MOD_NACK              60      /* 8.4.28 */
+#define RSL_MSG_MR_CODEC_MOD_PER               61      /* 8.4.29 */
+#define RSL_MSG_TFO_REP                                        62      /* 8.4.30 */
+#define RSL_MSG_TFO_MOD_REQ                            63      /* 8.4.31 */
+       /*      0 1 - - - - - - Location Services messages: */
+#define RSL_MSG_LOC_INF                                        65      /* 8.7.1 */
+
+
 static const value_string rsl_msg_type_vals[] = {
          /*    0 0 0 0 - - - - Radio Link Layer Management messages: */
        {  0x01,        "DATA REQuest" },                                                               /* 8.3.1 */
@@ -217,7 +293,52 @@ static const value_string rsl_msg_type_vals[] = {
        { 0,            NULL }
 };
 
+#define RSL_IE_CH_NO                   1
+#define RSL_IE_LINK_ID                 2
+
+#define RSL_IE_BS_POW                  4
+#define RSL_IE_CH_ID                   5
+#define RSL_IE_CH_MODE                 6
+
+#define RSL_IE_FRAME_NO                        8
+#define RSL_IE_HO_REF                  9
+#define RSL_IE_L1_INF                  10
+#define RSL_IE_L3_INF                  11
+#define RSL_IE_MS_ID                   12
+#define RSL_IE_MS_POW                  13
+#define RSL_IE_PAGING_GRP              14
+
+#define RSL_IE_PHY_CTX                 16
+#define RSL_IE_ACCESS_DELAY            17
+
+#define RSL_IE_REQ_REF                 19
+#define RSL_IE_REL_MODE                        20
+
+#define RSL_IE_RLM_CAUSE               22
+#define RSL_IE_STARTING_TIME   23
+
+#define RSL_IE_UPLINK_MEAS             25
+#define RSL_IE_CAUSE                   26
+#define RSL_IE_MEAS_RES_NO             27
+#define RSL_IE_MESSAGE_ID              28
+
+#define RSL_IE_SYS_INFO_TYPE   30
+
+
+
+
+#define RSL_IE_FULL_IMM_ASS_INF 35
+
+#define RSL_IE_FULL_MS_TIMING_OFFSET   37
+
+
+#define RSL_IE_CH_NEEDED                               40
 
+
+#define RSL_IE_EMLPP_PRIO                              51
+#define RSL_IE_MAIN_CH_REF                             53
+#define RSL_IE_MULTIRATE_CONF                  54
+       
 static const value_string rsl_ie_type_vals[] = {
        {  0x01,        "Channel Number" },                             /*  9.3.1 */
        {  0x02,        "Link Identifier" },                    /*  9.3.2 */
@@ -327,12 +448,20 @@ static const value_string rsl_ch_no_Cbits_vals[] = {
        {  0x12,        "Downlink CCCH (PCH + AGCH)" },
        { 0,                    NULL }
 };
+
 /* 9.3.1 Channel number                        9.3.1   M TV 2 */
 static int
-dissect_rsl_ie_ch_no(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
+dissect_rsl_ie_ch_no(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
 {
        proto_item *ti;
        proto_tree *ie_tree;
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_CH_NO)
+                       return offset;
+       }
 
        ti = proto_tree_add_text(tree, tvb,offset,2,"Channel number IE ");
        ie_tree = proto_item_add_subtree(ti, ett_ie_ch_no);
@@ -368,11 +497,18 @@ static const value_string rsl_prio_vals[] = {
  * 9.3.2 Link Identifier M TV 2
  */
 static int
-dissect_rsl_ie_link_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
+dissect_rsl_ie_link_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
 {
        proto_item *ti;
        proto_tree *ie_tree;
        guint8 octet;
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_LINK_ID)
+                       return offset;
+       }
 
        ti = proto_tree_add_text(tree, tvb,offset,2,"Link Identifier IE ");
        ie_tree = proto_item_add_subtree(ti, ett_ie_link_id);
@@ -403,16 +539,318 @@ dissect_rsl_ie_link_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
        return offset;
 }
 
- /*
+/*
+ * 9.3.3 Activation Type
+ */
+static const true_false_string rsl_rbit_vals = {
+  "Reactivation",
+  "Initial activation"
+};
+
+static const value_string rsl_a3a2_vals[] = {
+       {  0x00,        "Activation related to intra-cell channel change" },
+       {  0x01,        "Activation related to inter-cell channel change (handover)" },
+       {  0x02,        "Activation related to secondary channels" },
+       { 0,                    NULL }
+};
+
+static const true_false_string rsl_a1_0_vals = {
+  "related to normal assignment procedure",
+  "related to immediate assignment procedure"
+};
+
+static const true_false_string rsl_a1_1_vals = {
+  "related to synchronous handover procedure",
+  "related to asynchronous handover procedure"
+};
+
+static const true_false_string rsl_a1_2_vals = {
+  "related to multislot configuration",
+  "related to additional assignment procedure"
+};
+
+static int
+dissect_rsl_ie_act_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
+{
+       proto_item *ti;
+       proto_tree *ie_tree;
+       guint8 ie_id;
+       guint   octet;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_CH_NO)
+                       return offset;
+       }
+
+       ti = proto_tree_add_text(tree, tvb,offset,2,"Activation Type IE ");
+       ie_tree = proto_item_add_subtree(ti, ett_ie_act_type);
+
+
+       /* Element identifier */
+       proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
+       offset++;
+
+       /* The R bit indicates if the procedure is an initial activation or a reactivation. */
+       proto_tree_add_item(ie_tree, hf_rsl_rbit, tvb, offset, 1, FALSE);
+
+       /* The A-bits indicate the type of activation, which defines the access procedure 
+        * and the operation of the data link layer
+        */
+       octet = (tvb_get_guint8(tvb,offset) & 0x06)>>1;
+       proto_tree_add_item(ie_tree, hf_rsl_a3a2, tvb, offset, 1, FALSE);
+       switch(octet){
+       case 0:
+               /* Activation related to intra-cell channel change */
+               proto_tree_add_item(ie_tree, hf_rsl_a1_0, tvb, offset, 1, FALSE);
+               break;
+       case 1:
+               /* Activation related to inter-cell channel change (handover) */
+               proto_tree_add_item(ie_tree, hf_rsl_a1_1, tvb, offset, 1, FALSE);
+               break;
+       case 2:
+               /* Activation related to secondary channels */
+               proto_tree_add_item(ie_tree, hf_rsl_a1_2, tvb, offset, 1, FALSE);
+               break;
+       default:
+               break;
+       }
+       offset++;
+
+       return offset;
+}
+/*
+ * 9.3.4 BS Power
+ */
+
+static const true_false_string rsl_epc_mode_vals = {
+  "Channel in EPC mode",
+  "Channel not in EPC mode"
+};
+
+static const true_false_string rsl_fpc_epc_mode_vals = {
+  "Fast Power Control in use",
+  "Fast Power Control not in use"
+};
+
+static const value_string rsl_rlm_bs_power_vals[] = {
+       {  0x00,        "Pn" },
+       {  0x01,        "Pn - 2 dB" },
+       {  0x02,        "Pn - 4 dB" },
+       {  0x03,        "Pn - 6 dB" },
+       {  0x04,        "Pn - 8 dB" },
+       {  0x05,        "Pn - 10 dB" },
+       {  0x06,        "Pn - 12 dB" },
+       {  0x07,        "Pn - 14 dB" },
+       {  0x08,        "Pn - 16 dB" },
+       {  0x09,        "Pn - 18 dB" },
+       {  0x0a,        "Pn - 20 dB" },
+       {  0x0b,        "Pn - 22 dB" },
+       {  0x0c,        "Pn - 24 dB" },
+       {  0x0d,        "Pn - 26 dB" },
+       {  0x0e,        "Pn - 28 dB" },
+       {  0x0f,        "Pn - 30 dB" },
+       { 0,                    NULL }
+};
+
+static int
+dissect_rsl_ie_bs_power(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
+{
+       proto_item *ti;
+       proto_tree *ie_tree;
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_BS_POW)
+                       return offset;
+       }
+
+       ti = proto_tree_add_text(tree, tvb,offset,3,"BS Power IE");
+       ie_tree = proto_item_add_subtree(ti, ett_ie_bs_power);
+
+       /* Element identifier */
+       proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
+       offset++;
+
+       /* EPC mode */
+       proto_tree_add_item(ie_tree, hf_rsl_epc_mode, tvb, offset, 1, FALSE);
+       /* FPC_EPC mode */
+       proto_tree_add_item(ie_tree, hf_rsl_fpc_epc_mode, tvb, offset, 1, FALSE);
+
+       /* The Power Level field (octet 2) indicates the number of 2 dB steps by 
+        * which the power shall be reduced from its nominal value, Pn, 
+        * set by the network operator to adjust the coverage. 
+        * Thus the Power Level values correspond to the following powers (relative to Pn):
+        */
+       proto_tree_add_item(ie_tree, hf_rsl_bs_power, tvb, offset, 1, FALSE);
+       offset++;
+
+       return offset;
+}
+/*
+ * 9.3.5 Channel Identification
+ */
+static int
+dissect_rsl_ie_ch_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, gboolean is_mandatory)
+{
+       proto_item *ti;
+       proto_tree *ie_tree;
+       guint8 length;
+       int ie_offset;
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_CH_ID)
+                       return offset;
+       }
+
+       ti = proto_tree_add_text(tree, tvb,offset,0,"Channel Identification IE");
+       ie_tree = proto_item_add_subtree(ti, ett_ie_ch_id);
+
+       /* Element identifier */
+       proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
+       offset++;
+       /* Length */
+       length = tvb_get_guint8(tvb, offset);
+       proto_item_set_len(ti, length+1);
+       proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, FALSE);
+       offset++;
+
+       ie_offset = offset;
+
+       /* 3GPP TS 44.018 "Channel Description" */
+       de_rr_ch_dsc(tvb, ie_tree, offset, length, NULL, 0);
+       /*
+        * The 3GPP TS 24.008 "Mobile Allocation" shall for compatibility reasons be
+        * included but empty, i.e. the length shall be zero.
+        */
+       return ie_offset + length;
+}
+/*
+ * 9.3.6 Channel Mode
+ */
+
+static const true_false_string rsl_dtx_vals = {
+  "DTX is applied",
+  "DTX is not applied"
+};
+
+static int
+dissect_rsl_ie_ch_mode(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, gboolean is_mandatory)
+{
+       proto_item *ti;
+       proto_tree *ie_tree;
+       guint8 length;
+       int ie_offset;
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_CH_MODE)
+                       return offset;
+       }
+
+       ti = proto_tree_add_text(tree, tvb,offset,0,"Channel Mode IE");
+       ie_tree = proto_item_add_subtree(ti, ett_ie_ch_mode);
+
+       /* Element identifier */
+       proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
+       offset++;
+       /* Length */
+       length = tvb_get_guint8(tvb, offset);
+       proto_item_set_len(ti, length+1);
+       offset++;
+       ie_offset = offset;
+       proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, FALSE);
+       offset++;
+
+       /* The DTX bits of octet 3 indicate whether DTX is applied
+        * DTXd indicates use of DTX in the downlink direction (BTS to MS) and 
+        * DTXu indicates use of DTX in the uplink direction (MS to BTS).
+        */
+       proto_tree_add_item(ie_tree, hf_rsl_cm_dtxd, tvb, offset, 1, FALSE);
+       proto_tree_add_item(ie_tree, hf_rsl_cm_dtxu, tvb, offset, 1, FALSE);
+       offset++;
+       /* The "Speech or data indicator" field (octet 4) */
+
+       return ie_offset + length;
+
+}
+
+/*
+ * 9.3.7 Encryption information
+ */
+
+/* The Algorithm Identifier field (octet 3) indicates the relevant ciphering algorithm. It is coded as: */
+static const value_string rsl_algorithm_id_vals[] = {
+       {  0x00,        "Pn" },
+       {  0x00,        "Reserved" },
+       {  0x01,        "No encryption shall be used" },
+       {  0x02,        "GSM encryption algorithm version 1 (A5/1)" },
+       {  0x03,        "GSM A5/2" },
+       {  0x04,        "GSM A5/3" },
+       {  0x05,        "GSM A5/4" },
+       {  0x06,        "GSM A5/5" },
+       {  0x07,        "GSM A5/6" },
+       {  0x08,        "GSM A5/7" },
+       { 0,                    NULL }
+};
+
+static int
+dissect_rsl_ie_enc_inf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, gboolean is_mandatory)
+{
+       proto_item *ti;
+       proto_tree *ie_tree;
+       guint8 length;
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_L3_INF)
+                       return offset;
+       }
+
+       ti = proto_tree_add_text(tree, tvb,offset,0,"Encryption information IE");
+       ie_tree = proto_item_add_subtree(ti, ett_ie_enc_inf);
+
+       /* Element identifier */
+       proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
+       offset++;
+       /* Length */
+       length = tvb_get_guint8(tvb, offset);
+       proto_item_set_len(ti, length+1);
+       proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, FALSE);
+       offset++;
+
+       /* Algorithm Identifier field (octet 3) */
+
+       proto_tree_add_item(ie_tree, hf_rsl_alg_id, tvb, offset, 1, FALSE);
+
+       /* key */
+       proto_tree_add_item(ie_tree, hf_rsl_key, tvb, offset+1, length -1, FALSE);
+
+       return offset + length;
+
+}
+/*
  * 9.3.8 Frame Number
  */
 static int
-dissect_rsl_ie_frame_no(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
+dissect_rsl_ie_frame_no(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
 {
        proto_item *ti;
        proto_tree *ie_tree;
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_FRAME_NO)
+                       return offset;
+       }
 
-       ti = proto_tree_add_text(tree, tvb,offset,0,"Frame Number");
+       ti = proto_tree_add_text(tree, tvb,offset,0,"Frame Number IE");
        ie_tree = proto_item_add_subtree(ti, ett_ie_frame_no);
 
        /* Element identifier */
@@ -428,6 +866,76 @@ dissect_rsl_ie_frame_no(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
        return offset;
 }
 
+/*
+ * 9.3.9 Handover reference
+ */
+static int
+dissect_rsl_ie_ho_ref(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
+{
+       proto_item *ti;
+       proto_tree *ie_tree;
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_HO_REF)
+                       return offset;
+       }
+
+       ti = proto_tree_add_text(tree, tvb,offset,0,"Handover reference IE");
+       ie_tree = proto_item_add_subtree(ti, ett_ie_ho_ref);
+
+       /* Element identifier */
+       proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
+       offset++;
+       
+       /* Hand-over reference */
+       proto_tree_add_item(ie_tree, hf_rsl_ho_ref, tvb, offset, 1, FALSE);
+       offset++;
+
+       return offset;
+}
+
+/*
+ * 9.3.10 L1 Information
+ */
+
+static int
+dissect_rsl_ie_l1_inf(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
+{
+       proto_item *ti;
+       proto_tree *ie_tree;
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_L1_INF)
+                       return offset;
+       }
+
+       ti = proto_tree_add_text(tree, tvb,offset, 3,"L1 Information IE");
+       ie_tree = proto_item_add_subtree(ti, ett_ie_l1_inf);
+
+       /* Element identifier */
+       proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
+       offset++;
+
+       /* Octets 2-3 contain the L1 header information of SACCH blocks.
+        * The information fields and codings are as defined in 3GPP TS 44.004.
+        */
+
+       /* MS power level */
+       proto_tree_add_item(ie_tree, hf_rsl_ms_power_lev, tvb, offset, 1, FALSE);
+       /* FPC */
+       proto_tree_add_item(ie_tree, hf_rsl_ms_fpc, tvb, offset, 1, FALSE);
+       /* Reserved */
+       offset++;
+       /* Actual Timing Advance */
+       proto_tree_add_item(ie_tree, hf_rsl_act_timing_adv, tvb, offset, 1, FALSE);
+       offset++;
+
+       return offset;
+}
 
 /*
  * 9.3.11 L3 Information                       9.3.11  M TLV >=3
@@ -437,14 +945,21 @@ dissect_rsl_ie_frame_no(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
  * 3GPP TS 24.008 or 3GPP TS 44.018 between BTS and BSC.
  */
 static int
-dissect_rsl_ie_L3_inf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
+dissect_rsl_ie_L3_inf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, gboolean is_mandatory)
 {
        proto_item *ti;
        proto_tree *ie_tree;
        tvbuff_t        *next_tvb;
        guint16 length;
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_L3_INF)
+                       return offset;
+       }
 
-       ti = proto_tree_add_text(tree, tvb,offset,0,"L3 Information ");
+       ti = proto_tree_add_text(tree, tvb,offset,0,"L3 Information IE");
        ie_tree = proto_item_add_subtree(ti, ett_ie_L3_inf);
 
        /* Element identifier */
@@ -473,13 +988,19 @@ dissect_rsl_ie_L3_inf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int o
  * 9.3.12 MS Identity
  */
 static int
-dissect_rsl_ie_ms_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
+dissect_rsl_ie_ms_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
 {
        proto_item *ti;
        proto_tree *ie_tree;
        guint length;
+       guint8 ie_id;
 
-       ti = proto_tree_add_text(tree, tvb,offset,0,"MS Identity");
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_MS_ID)
+                       return offset;
+       }
+       ti = proto_tree_add_text(tree, tvb,offset,0,"MS Identity IE");
        ie_tree = proto_item_add_subtree(ti, ett_ie_ms_id);
 
        /* Element identifier */
@@ -496,19 +1017,23 @@ dissect_rsl_ie_ms_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, in
        offset = offset + length;
 
        return offset;
-
-
 }
 /*
  * 9.3.14 Paging Group M TV 2 2
  */
 static int
-dissect_rsl_ie_paging_grp(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
+dissect_rsl_ie_paging_grp(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
 {
        proto_item *ti;
        proto_tree *ie_tree;
+       guint8 ie_id;
 
-       ti = proto_tree_add_text(tree, tvb,offset,0,"Paging Group");
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_PAGING_GRP)
+                       return offset;
+       }
+       ti = proto_tree_add_text(tree, tvb,offset,0,"Paging Group IE");
        ie_tree = proto_item_add_subtree(ti, ett_ie_paging_grp);
 
        /* Element identifier */
@@ -527,11 +1052,18 @@ dissect_rsl_ie_paging_grp(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tre
  * 9.3.16 Physical Context TLV
  */
 static int
-dissect_rsl_ie_phy_ctx(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
+dissect_rsl_ie_phy_ctx(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
 {
        proto_item *ti;
        proto_tree *ie_tree;
        guint length;
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_PHY_CTX)
+                       return offset;
+       }
 
        ti = proto_tree_add_text(tree, tvb,offset,0,"Physical Context IE ");
        ie_tree = proto_item_add_subtree(ti, ett_ie_phy_ctx);
@@ -560,10 +1092,17 @@ dissect_rsl_ie_phy_ctx(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
  * 9.3.17 Access Delay M TV 2
  */
 static int
-dissect_rsl_ie_access_delay(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
+dissect_rsl_ie_access_delay(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
 {
        proto_item *ti;
        proto_tree *ie_tree;
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_ACCESS_DELAY)
+                       return offset;
+       }
 
        ti = proto_tree_add_text(tree, tvb,offset,2,"Access Delay IE ");
        ie_tree = proto_item_add_subtree(ti, ett_ie_access_delay);
@@ -579,10 +1118,17 @@ dissect_rsl_ie_access_delay(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *t
  * 9.3.19 Request Reference M TV 4
  */
 static int
-dissect_rsl_ie_req_ref(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
+dissect_rsl_ie_req_ref(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
 {
        proto_item *ti;
        proto_tree *ie_tree;
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_REQ_REF)
+                       return offset;
+       }
 
        ti = proto_tree_add_text(tree, tvb,offset,4,"Request Reference IE ");
        ie_tree = proto_item_add_subtree(ti, ett_ie_req_ref);
@@ -610,10 +1156,17 @@ static const value_string rel_mode_vals[] = {
  * 9.3.20 Release Mode                         9.3.20  M TV 2
  */
 static int
-dissect_rsl_ie_rel_mode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
+dissect_rsl_ie_rel_mode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
 {
        proto_item *ti;
        proto_tree *ie_tree;
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_REL_MODE)
+                       return offset;
+       }
 
        ti = proto_tree_add_text(tree, tvb,offset,4,"Release Mode IE ");
        ie_tree = proto_item_add_subtree(ti, ett_ie_rel_mode);
@@ -656,35 +1209,143 @@ static const value_string rsl_rlm_cause_vals[] = {
  * 9.3.22 RLM Cause                            9.3.22  M TLV 2-4
  */
 static int
-dissect_rsl_ie_rlm_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
+dissect_rsl_ie_rlm_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
+{
+       proto_item *ti;
+       proto_tree *ie_tree;
+
+       guint           length;
+       guint8          octet;
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_RLM_CAUSE)
+                       return offset;
+       }
+
+       ti = proto_tree_add_text(tree, tvb,offset,0,"RLM Cause IE ");
+       ie_tree = proto_item_add_subtree(ti, ett_ie_rlm_cause);
+
+       /* Element identifier */
+       proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
+       offset++;
+       /* Length */
+       length = tvb_get_guint8(tvb,offset);
+       proto_item_set_len(ti, length+2);
+
+       proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, FALSE);
+       offset++;
+
+       /* The Cause Value is a one octet field if the extension bit is set to 0.
+        * If the extension bit is set to 1, the Cause Value is a two octet field.
+        */
+       octet = tvb_get_guint8(tvb,offset);
+       proto_tree_add_item(tree, hf_rsl_extension_bit, tvb, offset, 1, FALSE);
+       proto_tree_add_item(ie_tree, hf_rsl_cause, tvb, offset, 1, FALSE);
+       offset++;
+
+       return offset;
+}
+
+/*
+ * 9.3.23 Starting Time
+ */
+static int
+dissect_rsl_ie_staring_time(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
+{
+       proto_item *ti;
+       proto_tree *ie_tree;
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_STARTING_TIME)
+                       return offset;
+       }
+
+       ti = proto_tree_add_text(tree, tvb,offset,3,"Starting Time IE");
+       ie_tree = proto_item_add_subtree(ti, ett_ie_staring_time);
+
+       /* Element identifier */
+       proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
+       offset++;
+
+       proto_tree_add_item(ie_tree, hf_rsl_req_ref_T1prim, tvb, offset, 1, FALSE);
+       proto_tree_add_item(ie_tree, hf_rsl_req_ref_T3, tvb, offset, 2, FALSE);
+       offset++;
+       proto_tree_add_item(ie_tree, hf_rsl_req_ref_T2, tvb, offset, 1, FALSE);
+       offset++;
+
+       return offset;
+}
+
+/*
+ * 9.3.25 Uplink Measurements
+ */
+static const true_false_string rsl_dtxd_vals = {
+  "Employed",
+  "Not employed"
+};
+
+static int
+dissect_rsl_ie_uplik_meas(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
 {
        proto_item *ti;
        proto_tree *ie_tree;
-
        guint           length;
+       int                     ie_offset;
+       guint8 ie_id;
 
-       ti = proto_tree_add_text(tree, tvb,offset,0,"RLM Cause IE ");
-       ie_tree = proto_item_add_subtree(ti, ett_ie_rlm_cause);
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_UPLINK_MEAS)
+                       return offset;
+       }
+
+       ti = proto_tree_add_text(tree, tvb,offset,0,"Uplink Measurements IE");
+       ie_tree = proto_item_add_subtree(ti, ett_ie_uplik_meas);
 
        /* Element identifier */
        proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
        offset++;
+
        /* Length */
        length = tvb_get_guint8(tvb,offset);
        proto_item_set_len(ti, length+2);
 
        proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, FALSE);
+       offset++;
+       ie_offset = offset;
 
-       /* The Cause Value is a one octet field if the extension bit is set to 0.
-        * If the extension bit is set to 1, the Cause Value is a two octet field.
+       /* Octet 3
+        * 8    7        6      5       4       3       2       1
+        * rfu  DTXd | RXLEV.FULL.up
         */
-       proto_tree_add_item(ie_tree, hf_rsl_cause, tvb, offset, 1, FALSE);
+       proto_tree_add_item(ie_tree, hf_rsl_dtxd, tvb, offset, 1, FALSE);
+       proto_tree_add_item(ie_tree, hf_rsl_rxlev_full_up, tvb, offset, 1, FALSE);
        offset++;
-       offset = offset + length;
 
-       return offset;
+       /* Octet4
+        * 8    7       6       5       4       3       2       1
+        * Reserved |  RXLEV.SUB.up 4
+        */
+       proto_tree_add_item(ie_tree, hf_rsl_rxlev_sub_up, tvb, offset, 1, FALSE);
+       offset++;
+       /* Octet 5 
+        * 8    7        6      5       4                 3     2       1
+        * Reserved | RXQUAL.FULL.up | RXQUAL.SUB.up
+        */
+       proto_tree_add_item(ie_tree, hf_rsl_rxqual_full_up, tvb, offset, 1, FALSE);
+       proto_tree_add_item(ie_tree, hf_rsl_rxqual_sub_up, tvb, offset, 1, FALSE);
+        offset++;
+       /* Octet 6 - N
+        * Supplementary Measurement Information
+        */
+       return ie_offset+length;
 }
 
+
 static const value_string rsl_class_vals[] = {
        {  0x00,        "Normal event" },
        {  0x01,        "Normal event" },
@@ -701,15 +1362,22 @@ static const value_string rsl_class_vals[] = {
   * 9.3.26 Cause
   */
 static int
-dissect_rsl_ie_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
+dissect_rsl_ie_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
 {
        proto_item *ti;
        proto_tree *ie_tree;
        guint           length;
        guint8          octet;
        int                     ie_offset;
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_CAUSE)
+                       return offset;
+       }
 
-       ti = proto_tree_add_text(tree, tvb,offset,0,"Cause IE ");
+       ti = proto_tree_add_text(tree, tvb,offset,0,"Cause IE");
        ie_tree = proto_item_add_subtree(ti, ett_ie_cause);
 
        /* Element identifier */
@@ -736,13 +1404,21 @@ dissect_rsl_ie_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, in
 /*
  * 9.3.27 Measurement result number
  */
-#if 0
+
 static int
-dissect_rsl_ie_meas_res_no(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
+dissect_rsl_ie_meas_res_no(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
 {
        proto_item *ti;
        proto_tree *ie_tree;
-       ti = proto_tree_add_text(tree, tvb,offset,0,"Measurement result number IE ");
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_MEAS_RES_NO)
+                       return offset;
+       }
+
+       ti = proto_tree_add_text(tree, tvb,offset,0,"Measurement result number IE");
        ie_tree = proto_item_add_subtree(ti, ett_ie_meas_res_no);
 
        /* Element identifier */
@@ -755,18 +1431,24 @@ dissect_rsl_ie_meas_res_no(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tr
 
        return offset;
 }
-#endif
 /*
  * 9.3.28 Message Identifier
  */
-#if 0 
 static int
-dissect_rsl_ie_message_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
+dissect_rsl_ie_message_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
 {
        proto_item *ti;
        proto_tree *ie_tree;
-       ti = proto_tree_add_text(tree, tvb,offset,0,"Measurement result number IE ");
-       ie_tree = proto_item_add_subtree(ti, ett_ie_meas_res_no);
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_MESSAGE_ID)
+                       return offset;
+       }
+
+       ti = proto_tree_add_text(tree, tvb,offset,0,"Message Identifier IE");
+       ie_tree = proto_item_add_subtree(ti, ett_ie_message_id);
 
        /* Element identifier */
        proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
@@ -776,18 +1458,79 @@ dissect_rsl_ie_message_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tre
        offset++;
        return offset;
 }
-#endif
+/*
+ * 9.3.30 System Info Type
+ */
+static const value_string rsl_sys_info_type_vals[] = {
+       {  0x00,        "SYSTEM INFORMATION 8" },
+       {  0x01,        "SYSTEM INFORMATION 1" },
+       {  0x02,        "SYSTEM INFORMATION 2" },
+       {  0x03,        "SYSTEM INFORMATION 3" },
+       {  0x04,        "SYSTEM INFORMATION 4" },
+       {  0x05,        "SYSTEM INFORMATION 5" },
+       {  0x06,        "SYSTEM INFORMATION 6" },
+       {  0x07,        "SYSTEM INFORMATION 7" },
+       {  0x08,        "SYSTEM INFORMATION 16" },
+       {  0x09,        "SYSTEM INFORMATION 17" },
+       {  0x0a,        "SYSTEM INFORMATION 2bis" },
+       {  0x0b,        "SYSTEM INFORMATION 2ter" },
+       {  0x0d,        "SYSTEM INFORMATION 5bis" },
+       {  0x0e,        "SYSTEM INFORMATION 5ter" },
+       {  0x0f,        "SYSTEM INFORMATION 10" },
+       {  0x47,        "EXTENDED MEASUREMENT ORDER" },
+       {  0x48,        "MEASUREMENT INFORMATION" },
+       {  0x28,        "SYSTEM INFORMATION 13" },
+       {  0x29,        "SYSTEM INFORMATION 2quater" },
+       {  0x2a,        "SYSTEM INFORMATION 9" },
+       {  0x2b,        "SYSTEM INFORMATION 18" },
+       {  0x2c,        "SYSTEM INFORMATION 19" },
+       {  0x2d,        "SYSTEM INFORMATION 20" },
+       { 0,                    NULL }
+};
+
+
+static int
+dissect_rsl_ie_sys_info_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
+{
+       proto_item *ti;
+       proto_tree *ie_tree;
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_SYS_INFO_TYPE)
+                       return offset;
+       }
+
+       ti = proto_tree_add_text(tree, tvb,offset,2,"System Info Type IE");
+       ie_tree = proto_item_add_subtree(ti, ett_ie_sys_info_type);
+
+       /* Element identifier */
+       proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
+       offset++;
+       /* Message Type */
+       proto_tree_add_item(tree, hf_rsl_sys_info_type, tvb, offset, 1, FALSE);
+       offset++;
+       return offset;
+}
 /*
  * 9.3.35 Full Immediate Assign Info TLV 25
  */
 static int
-dissect_rsl_ie_full_imm_ass_inf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
+dissect_rsl_ie_full_imm_ass_inf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, gboolean is_mandatory)
 {
        proto_item *ti;
        proto_tree *ie_tree;
 
        guint           length;
        tvbuff_t        *next_tvb;
+       guint8          ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_FULL_IMM_ASS_INF)
+                       return offset;
+       }
 
        ti = proto_tree_add_text(tree, tvb,offset,0,"Full Immediate Assign Info IE ");
        ie_tree = proto_item_add_subtree(ti, ett_ie_full_imm_ass_inf);
@@ -815,6 +1558,41 @@ dissect_rsl_ie_full_imm_ass_inf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *t
        return offset;
 }
 
+/*
+ * 9.3.37 MS Timing Offset
+ */
+
+static int
+dissect_rsl_ie_ms_timing_offset(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
+{
+       proto_item *ti;
+       proto_tree *ie_tree;
+       guint8          ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_FULL_MS_TIMING_OFFSET)
+                       return offset;
+       }
+
+       ti = proto_tree_add_text(tree, tvb,offset,0,"MS Timing Offset IE");
+       ie_tree = proto_item_add_subtree(ti, ett_ie_ms_timing_offset);
+
+       /* Element identifier */
+       proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
+       offset++;
+
+       /* Timing Offset 
+        * The meaning of the MS Timing Offset is as defined in 3GPP TS 45.010. 
+        * The value of MS Timing Offset is the binary value of the 8-bit Timing Offset field (octet 2) - 63.
+        * The range of MS Timing Offset is therefore -63 to 192.
+        */
+       proto_tree_add_item(ie_tree, hf_rsl_timing_offset, tvb, offset, 1, FALSE);
+       offset++;
+       
+       return offset;
+}
+
 /*
  * 9.3.40 Channel Needed
  */
@@ -827,13 +1605,20 @@ static const value_string rsl_ch_needed_vals[] = {
 };
 
 static int
-dissect_rsl_ie_ch_needed(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
+dissect_rsl_ie_ch_needed(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
 {
        proto_item *ti;
        proto_tree *ie_tree;
+       guint8          ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_CH_NEEDED)
+                       return offset;
+       }
 
 
-       ti = proto_tree_add_text(tree, tvb,offset,0,"Channel Needed");
+       ti = proto_tree_add_text(tree, tvb,offset,0,"Channel Needed IE");
        ie_tree = proto_item_add_subtree(ti, ett_ie_ch_needed);
 
        /* Element identifier */
@@ -863,12 +1648,19 @@ static const value_string rsl_emlpp_prio_vals[] = {
 };
 
 static int
-dissect_rsl_ie_emlpp_prio(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
+dissect_rsl_ie_emlpp_prio(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
 {
        proto_item *ti;
        proto_tree *ie_tree;
+       guint8          ie_id;
 
-       ti = proto_tree_add_text(tree, tvb,offset,0,"eMLPP Priority");
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_EMLPP_PRIO)
+                       return offset;
+       }
+
+       ti = proto_tree_add_text(tree, tvb,offset,0,"eMLPP Priority IE");
        ie_tree = proto_item_add_subtree(ti, ett_ie_emlpp_prio);
 
        /* Element identifier */
@@ -886,6 +1678,88 @@ dissect_rsl_ie_emlpp_prio(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tre
        return offset;
 }
 
+/*
+ * 9.3.51 Main channel reference
+ */
+
+static int
+dissect_rsl_ie_main_ch_ref(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
+{
+       proto_item *ti;
+       proto_tree *ie_tree;
+       guint8          ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_MAIN_CH_REF)
+                       return offset;
+       }
+
+       ti = proto_tree_add_text(tree, tvb,offset,0,"Main channel reference IE");
+       ie_tree = proto_item_add_subtree(ti, ett_ie_main_ch_ref);
+
+       /* Element identifier */
+       proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
+       offset++;
+
+       /* TN is time slot number, binary represented as in 3GPP TS 45.002.
+        * 3 Bits
+        */
+       proto_tree_add_item(ie_tree, hf_rsl_ch_no_TN, tvb, offset, 1, FALSE);
+       offset++;
+       return offset;
+}
+
+/*
+ * 9.3.52 MultiRate configuration
+ */
+
+static int
+dissect_rsl_ie_multirate_conf(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
+{
+       proto_item *ti;
+       proto_tree *ie_tree;
+       guint length;
+       guint8 ie_id;
+
+       if(is_mandatory == FALSE){
+               ie_id = tvb_get_guint8(tvb,offset);
+               if (ie_id != RSL_IE_MULTIRATE_CONF)
+                       return offset;
+       }
+       ti = proto_tree_add_text(tree, tvb,offset,0,"MultiRate configuration IE");
+       ie_tree = proto_item_add_subtree(ti, ett_ie_multirate_conf);
+
+       /* Element identifier */
+       proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
+       offset++;
+       /* Length */
+       length = tvb_get_guint8(tvb,offset);
+       proto_item_set_len(ti, length+2);
+       proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, FALSE);
+       offset++;
+
+       /* Rest of element coded as in 3GPP TS 44.018 not including
+        * 3GPP TS 44.018 element identifier or 3GPP TS 44.018 octet length value
+        */
+
+       de_rr_multirate_conf(tvb, ie_tree, offset, length, NULL, 0);
+
+       offset = offset + length;
+
+       return offset;
+}
+
+/*
+ * 9.3.58 LLP APDU
+ */
+
+/* The rest of the information element contains the embedded message
+ * that contains a Facility Information Element as defined in
+ * 3GPP TS 44.071 excluding the Facility IEI and length of Facility IEI
+ * octets defined in 3GPP TS 44.071.
+ */
+
 static int
 dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
 {
@@ -905,139 +1779,213 @@ dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
        /* 8.3.1 DATA REQUEST */
        case RSL_MSG_TYPE_DATA_REQ:
                /* Channel number                       9.3.1   M TV 2          */
-               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /* Link Identifier                      9.3.2   M TV 2          */
-               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
                /* L3 Information                       9.3.11  M TLV >=3       */
-               offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset, TRUE);
                break;
        /* 8.3.2 DATA INDICATION */
        case RSL_MSG_TYPE_DATA_IND:
                /* Channel number                       9.3.1   M TV 2          */
-               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /* Link Identifier                      9.3.2   M TV 2          */
-               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
                /* L3 Information                       9.3.11  M TLV >=3       */
-               offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset, TRUE);
                break;
        /* 8.3.3 ERROR INDICATION */
        case RSL_MSG_TYPE_ERROR_IND:
                /* Channel number                       9.3.1   M TV 2          */
-               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /* Link Identifier                      9.3.2   M TV 2          */
-               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
                /* RLM Cause                            9.3.22  M TLV 2-4       */
-               offset = dissect_rsl_ie_rlm_cause(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_rlm_cause(tvb, pinfo, tree, offset, TRUE);
                break;
        /* 8.3.4 ESTABLISH REQUEST */
        case RSL_MSG_TYPE_EST_REQ:
                /* Channel number                       9.3.1   M TV 2          */
-               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /* Link Identifier                      9.3.2   M TV 2          */
-               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
                break;
        /* 8.3.5 ESTABLISH CONFIRM */
        case RSL_MSG_TYPE_EST_CONF:
                /* Channel number                       9.3.1   M TV 2          */
-               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /* Link Identifier                      9.3.2   M TV 2          */
-               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
                break;
        /* 8.3.6 */
        case RSL_MSG_EST_IND:
                /*      Channel number                  9.3.1   M TV 2                           */
-               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /*      Link Identifier                 9.3.2   M TV 2                           */
-               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
                /*      L3 Information                  9.3.11  O (note 1) TLV 3-23      */
                if(tvb_length_remaining(tvb,offset) >1)
-                       offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset);
+                       offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset, FALSE);
                break;
        /* 8.3.7 RELEASE REQUEST */
        case RSL_MSG_REL_REQ:
                /*      Channel number                  9.3.1   M TV 2                           */
-               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /*      Link Identifier                 9.3.2   M TV 2                           */
-               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
                /* Release Mode                         9.3.20  M TV 2                          */
-               offset = dissect_rsl_ie_rel_mode(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_rel_mode(tvb, pinfo, tree, offset, TRUE);
                break;
        /* 8.3.8 RELEASE CONFIRM */
        case RSL_MSG_REL_CONF:
                /*      Channel number                  9.3.1   M TV 2                           */
-               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /*      Link Identifier                 9.3.2   M TV 2                           */
-               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
                break;
        /* 8.3.9 RELEASE INDICATION */
        case RSL_MSG_REL_IND:
                /*      Channel number                  9.3.1   M TV 2                           */
-               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /*      Link Identifier                 9.3.2   M TV 2                           */
-               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
                break;
        /* 8.3.10 UNIT DATA REQUEST */
        case RSL_MSG_UNIT_DATA_REQ:
                /*      Channel number                  9.3.1   M TV 2                           */
-               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /*      Link Identifier                 9.3.2   M TV 2                           */
-               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
                /*      L3 Information                  9.3.11  O (note 1) TLV 3-23      */
-               offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset, FALSE);
                break;
 
 /* Common Channel Management/TRX Management messages: */
        /* 8.5.3 */
        case RSL_MSG_CHANRQD: /* 19 */
                /* Channel number                       9.3.1   M TV 2 */
-               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /* Request Reference            9.3.19  M TV 4 */
-               offset = dissect_rsl_ie_req_ref(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_req_ref(tvb, pinfo, tree, offset, TRUE);
                /* Access Delay                         9.3.17  M TV 2 */
-               offset = dissect_rsl_ie_access_delay(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_access_delay(tvb, pinfo, tree, offset, TRUE);
                /* Physical Context                     9.3.16  O 1) TLV >=2 */
                if(tvb_length_remaining(tvb,offset) > 0)
-                       offset = dissect_rsl_ie_phy_ctx(tvb, pinfo, tree, offset);
+                       offset = dissect_rsl_ie_phy_ctx(tvb, pinfo, tree, offset, FALSE);
                break;
        /* 8.5.4 DELETE INDICATION */
        case RSL_MSG_DELETE_IND: /* 20 */
                /* Channel number                       9.3.1   M TV 2 */
-               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /* Full Imm. Assign Info        9.3.35  M TLV 25 */
-               offset = dissect_rsl_ie_full_imm_ass_inf(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_full_imm_ass_inf(tvb, pinfo, tree, offset, TRUE);
                break;
-       case RSL_MSG_PAGING_CMD: /* 21 */
+       case RSL_MSG_PAGING_CMD:        /* 21 */
                /* Channel number                       9.3.1   M TV 2 */
-               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /* Paging Group                         9.3.14  M TV 2 2 */
-               offset = dissect_rsl_ie_paging_grp(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_paging_grp(tvb, pinfo, tree, offset, TRUE);
                /* MS Identity                          9.3.12  M TLV 2-10 2 */
-               offset = dissect_rsl_ie_ms_id(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_ms_id(tvb, pinfo, tree, offset, TRUE);
                /* Channel Needed                       9.3.40  O 1) TV 2 2 */
                if(tvb_length_remaining(tvb,offset) > 0)
-                       offset = dissect_rsl_ie_ch_needed(tvb, pinfo, tree, offset);
+                       offset = dissect_rsl_ie_ch_needed(tvb, pinfo, tree, offset, FALSE);
                /* eMLPP Priority                       9.3.49  O 2) TV 2 2 */
                if(tvb_length_remaining(tvb,offset) > 0)
-                       offset = dissect_rsl_ie_emlpp_prio(tvb, pinfo, tree, offset);
+                       offset = dissect_rsl_ie_emlpp_prio(tvb, pinfo, tree, offset, FALSE);
                break;
-       /* 8.5.6 */
-       case RSL_MSG_IMM_ASS_CMD:
+       /* 8.5.6 IMMEDIATE ASSIGN COMMAND */
+       case RSL_MSG_IMM_ASS_CMD:       /* 22 */
                /* Channel number                       9.3.1   M TV 2 */
-               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /* Full Imm. Assign Info        9.3.35  M TLV 25 */
-               offset = dissect_rsl_ie_full_imm_ass_inf(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_full_imm_ass_inf(tvb, pinfo, tree, offset, TRUE);
+               break;
+       /* 8.5.7 SMS BROADCAST REQUEST */
+       case RSL_MSG_SMS_BC_REQ:        /*      23       8.5.7 */
+               /* Channel number                       9.3.1   M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* SMSCB Information            9.3.36  M TV 24 */
+               /* SMSCB Channel Indicator      9.3.44  O 1) TV 2 */
+               break;
+/* 8.6 TRX MANAGEMENT MESSAGES */
+       /* 8.6.1 RF RESOURCE INDICATION */
+       case RSL_MSG_RF_RES_IND:        /*      24       8.6.1 */
+               /* Resource Information         9.3.21  M TLV >=2 */
+               break;
+       /* 8.6.2 SACCH FILLING */
+       case RSL_MSG_SACCH_FILL:        /*      25       8.6.2 */
+               /* System Info Type                     9.3.30  M TV 2 */
+               offset = dissect_rsl_ie_sys_info_type(tvb, pinfo, tree, offset, TRUE);
+               /* L3 Info (SYS INFO)           9.3.11 O 1) TLV 22 */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset, FALSE);
+               /* Starting Time                        9.3.23 O 2) TV 3 */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_staring_time(tvb, pinfo, tree, offset, FALSE);
                break;
+       case RSL_MSG_OVERLOAD:          /*      27       8.6.3 */
+               /* Cause                                        9.3.26  M TLV >=3 */
+               offset = dissect_rsl_ie_cause(tvb, pinfo, tree, offset, TRUE);
+               break;
+       case RSL_MSG_ERROR_REPORT:      /*      28       8.6.4 */
+               /* Cause                                        9.3.26  M TLV >=3 */
+               offset = dissect_rsl_ie_cause(tvb, pinfo, tree, offset, TRUE);
+               /* Message Identifier           9.3.28  O 1) TV 2 */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_message_id(tvb, pinfo, tree, offset, FALSE);
+               /* Channel Number                       9.3.1   O 2) TV 2 */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* Link identifier                      9.3.2   O 3) TV 2 */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
+               /* Erroneous Message            9.3.38  O 4) TLV >=3 */
+               break;
+       /* 8.5.8 SMS BROADCAST COMMAND */
+       case RSL_MSG_SMS_BC_CMD:        /*      29       8.5.8 */
+               /* Channel number                       9.3.1   M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* CB Command type                      9.3.41  M TV 2 */
+               /* SMSCB message                        9.3.42  M TLV 2-90 */
+               /* SMSCB Channel Indicator      9.3.44  O 1) TV 2 */
+               break;
+       case RSL_MSG_CBCH_LOAD_IND:     /*      30       8.5.9 */
+               /* Channel number                       9.3.1   M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* CBCH Load Information        9.3.43  M TV 2 */
+               /* SMSCB Channel Indicator      9.3.44 O 1) TV 2 */
+               break;
+       case RSL_MSG_NOT_CMD:           /*      31       8.5.10 */
+               /* Channel number                       9.3.1   M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* Command indicator            9.3.48 M 1) TLV 3-4 */
+               /* Group call reference         9.3.45 O TLV 7 */
+               /* Channel Description          9.3.46 O TLV 3-n */
+               /* NCH DRX information          9.3.47 O TLV 3 */
+               break;
+
 /* Dedicated Channel Management messages: */
        /* 8.4.1 CHANNEL ACTIVATION 33*/
        case RSL_MSG_CHAN_ACTIV:
-               break;
                /* Channel number                       9.3.1   M TV 2                  */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /* Activation Type                      9.3.3   M TV 2                  */
+               offset = dissect_rsl_ie_act_type(tvb, pinfo, tree, offset, TRUE);
                /* Channel Mode                         9.3.6   M TLV 8-9               */
+               offset = dissect_rsl_ie_ch_mode(tvb, pinfo, tree, offset, TRUE);
                /* Channel Identification       9.3.5   O 7) TLV 8              */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_ch_id(tvb, pinfo, tree, offset, FALSE);
                /* Encryption information       9.3.7   O 1) TLV >=3    */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_enc_inf(tvb, pinfo, tree, offset, FALSE);
                /* Handover Reference           9.3.9   C 2) TV 2               */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_ho_ref(tvb, pinfo, tree, offset, FALSE);
                /* BS Power                                     9.3.4   O 3) TV 2               */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_bs_power(tvb, pinfo, tree, offset, FALSE); 
                /* MS Power                                     9.3.13  O 3) TV 2               */
                /* Timing Advance                       9.3.24  C 3) 4) TV 2    */
                /* BS Power Parameters          9.3.32  O 5) TLV >=2    */
@@ -1045,54 +1993,262 @@ dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
                /* Physical Context                     9.3.16  O 6) TLV >=2    */
                /* SACCH Information            9.3.29  O 8) TLV >=3    */
                /* UIC                                          9.3.50  O 9) TLV 3              */
-               /* Main channel reference       9.3.51  O 10) TV 2              */
-               /* MultiRate configuration      9.3.52  O 11) TLV >=4   */
+               /* Main channel reference       9.3.51  O 10) TV 2              *
+               offset = dissect_rsl_ie_main_ch_ref(tvb, pinfo, tree, offset, FALSE);
+               /* MultiRate configuration      9.3.52  O 11) TLV >=4   *
+               offset = dissect_rsl_ie_multirate_conf(tvb, pinfo, tree, offset, FALSE);
                /* MultiRate Control            9.3.53  O 12) TV 2              */
                /* Supported Codec Types        9.3.54  O 12) TLV >=5   */
                /* TFO transparent container 9.3.59 O 12) TLV >=3       */
+               break;
 
        /* 8.4.2 CHANNEL ACTIVATION ACKNOWLEDGE 34*/
        case RSL_MSG_CHAN_ACTIV_ACK:
                /* Channel number                       9.3.1   M TV 2                  */
-               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /* Frame number                         9.3.8   M TV 3                  */
-               offset = dissect_rsl_ie_frame_no(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_frame_no(tvb, pinfo, tree, offset, TRUE);
                break;
        case RSL_MSG_CHAN_ACTIV_N_ACK:
        /* 8.4.3 CHANNEL ACTIVATION NEGATIVE ACKNOWLEDGE */
                /* Channel number                       9.3.1   M TV 2                  */
-               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /* Cause                                        9.3.26  M TLV >=3               */
-               offset = dissect_rsl_ie_cause(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_cause(tvb, pinfo, tree, offset, TRUE);
                break;
        /* 8.4.4 CONNECTION FAILURE INDICATION */
        case RSL_MSG_CONN_FAIL:
                /* Channel number                       9.3.1   M TV 2                  */
-               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /* Cause                                        9.3.26  M TLV >=3               */
-               offset = dissect_rsl_ie_cause(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_cause(tvb, pinfo, tree, offset, TRUE);
                break;
        /* 8.4.5 DEACTIVATE SACCH */
        case RSL_MSG_DEACTIVATE_SACCH:
                /* Channel number                       9.3.1   M TV 2                  */
-               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset);
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                break;
        /* 8.4.6 ENCRYPTION COMMAND */
+       case RSL_MSG_ENCR_CMD:                  /*      38       8.4.6 */
+               /* Channel number                       9.3.1   M TV 2                  */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /* Encryption information       9.3.7   M TLV >=3               */
+               offset = dissect_rsl_ie_enc_inf(tvb, pinfo, tree, offset, TRUE);
                /* Link Identifier                      9.3.2   M TV 2                  */
+               offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
                /* L3 Info (CIPH MOD CMD)       9.3.11  M TLV 6                 */
+               offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset, TRUE); 
+               break;
        /* 8.4.7 HANDOVER DETECTION */
+       case RSL_MSG_HANDODET:                  /*      39       8.4.7 */
                /* Channel number                       9.3.1   M TV 2                  */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /* Access Delay                         9.3.17 O 1) TV 2                */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_access_delay(tvb, pinfo, tree, offset, FALSE);
+               break;
        /* 8.4.8 MEASUREMENT RESULT 40 */
        case RSL_MSG_MEAS_RES:
                /* Channel number                       9.3.1   M TV 2                  */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
                /* Measurement result number 9.3.27 M TV 2                      */
+               offset = dissect_rsl_ie_meas_res_no(tvb, pinfo, tree, offset, TRUE);
                /* Uplink Measurements          9.3.25  M TLV >=5               */
+               offset = dissect_rsl_ie_uplik_meas(tvb, pinfo, tree, offset, TRUE);
                /* BS Power                                     9.3.4   M TV 2                  */
+               offset = dissect_rsl_ie_bs_power(tvb, pinfo, tree, offset, TRUE);
                /* L1 Information                       9.3.10 O 1) TV 3                */
-               /* L3 Info (MEAS REP, EXT MEAS REP or ENH MEAS REP) 9.3.11 O 1) TLV 21*/
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_l1_inf(tvb, pinfo, tree, offset, FALSE);
+               /* L3 Info (MEAS REP, EXT MEAS REP or ENH MEAS REP) 9.3.11 O 1) TLV 21 */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset, FALSE); 
                /* MS Timing Offset                     9.3.37 O 2) TV 2                */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_ms_timing_offset(tvb, pinfo, tree, offset, FALSE); 
+               break;
+       /* 8.4.9 MODE MODIFY */
+       case RSL_MSG_MODE_MODIFY_REQ:   /*      41      8.4.9 */
+               /* Channel number                       9.3.1 M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* Channel Mode                         9.3.6 M TLV 8-9 */
+               offset = dissect_rsl_ie_ch_mode(tvb, pinfo, tree, offset, TRUE);
+               /* Encryption information       9.3.7 O 1) TLV >=3 */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_enc_inf(tvb, pinfo, tree, offset, FALSE); 
+               /* Main channel reference       9.3.45 O 2) TV 2 */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_main_ch_ref(tvb, pinfo, tree, offset, FALSE);
+               /* MultiRate configuration      9.3.52 O 3) TLV >=3 */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_multirate_conf(tvb, pinfo, tree, offset, FALSE);
+               /* Multirate Control            9.3.53 O 4) TV 2 */
+               /* Supported Codec Types        9.3.54 O 4) TLV >=5 */
+               /* TFO transparent container 9.3.59 O 4) TLV */
+               break;
+       /* 8.4.10 MODE MODIFY ACKNOWLEDGE */
+       case RSL_MSG_MODE_MODIFY_ACK:   /*      42      8.4.10 */
+               /* Channel number                       9.3.1   M TV 2                  */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               break;
+       /* 8.4.11 MODE MODIFY NEGATIVE ACKNOWLEDGE */
+       case RSL_MSG_MODE_MODIFY_NACK:  /*      43      8.4.11 */
+               /* Channel number                       9.3.1   M TV 2                  */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* Cause                                        9.3.26  M TLV >=3               */
+               offset = dissect_rsl_ie_cause(tvb, pinfo, tree, offset, TRUE);
+               break;
+       /* 8.4.12 PHYSICAL CONTEXT REQUEST */
+       case RSL_MSG_PHY_CONTEXT_REQ:   /*      44      8.4.12 */
+               /* Channel number                       9.3.1   M TV 2                  */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               break;
+       /* 8.4.13 PHYSICAL CONTEXT CONFIRM */
+       case RSL_MSG_PHY_CONTEXT_CONF:  /*      45      8.4.13 */
+               /* Channel number                       9.3.1   M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* BS Power                                     9.3.4   M TV 2 */
+               offset = dissect_rsl_ie_bs_power(tvb, pinfo, tree, offset, TRUE);
+               /* MS Power                                     9.3.13  M TV 2 */
+               /* Timing Advance                       9.3.24  M TV 2 */
+               /* Physical Context                     9.3.16  O 1) TLV */
+               break;
+       /* 8.4.14 RF CHANNEL RELEASE */
+       case RSL_MSG_RF_CHAN_REL:               /*      46      8.4.14 */
+               /* Channel number                       9.3.1   M TV 2                  */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               break;
+       /* 8.4.15 MS POWER CONTROL */
+       case RSL_MSG_MS_POWER_CONTROL:  /*      47      8.4.15 */
+               /* Channel number                       9.3.1   M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* MS Power                                     9.3.13  M TV 2 */
+               /* MS Power Parameters          9.3.31  O 1) TLV >=2 */
+               break;
+       /* 8.4.16 BS POWER CONTROL */
+       case RSL_MSG_BS_POWER_CONTROL:  /*      48      8.4.16 */
+               /* Channel number                       9.3.1 M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* BS Power                                     9.3.4 M TV 2 */
+               offset = dissect_rsl_ie_bs_power(tvb, pinfo, tree, offset, TRUE);
+               /* BS Power Parameters          9.3.32 O 1) TLV >=2 */
+               break;
+       /* 8.4.17 PREPROCESS CONFIGURE */
+       case RSL_MSG_PREPROC_CONFIG:            /*      49      8.4.17 */
+               /* Channel number                       9.3.1   M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* Preproc. Parameters          9.3.33  M TLV >=3 */
+               break;
+       /* 8.4.18 PREPROCESSED MEASUREMENT RESULT */
+       case RSL_MSG_PREPROC_MEAS_RES:  /*      50      8.4.18 */
+               /* Channel number                       9.3.1   M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* Preproc. Measurements        9.3.34  M TLV >=2 */
+               break;
+       /* 8.4.19 RF CHANNEL RELEASE ACKNOWLEDGE */
+       case RSL_MSG_RF_CHAN_REL_ACK:           /*      51      8.4.19 */
+               /* Channel number                       9.3.1   M TV 2                  */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               break;
+       /* 8.4.20 SACCH INFO MODIFY */
+       case RSL_MSG_SACCH_INFO_MODIFY: /*      52      8.4.20 */
+               /* Channel number                       9.3.1   M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* System Info Type                     9.3.30  M TV 2 */
+               offset = dissect_rsl_ie_sys_info_type(tvb, pinfo, tree, offset, TRUE);
+               /* L3 Info                                      9.3.11  O 1) TLV 22 */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset, FALSE);
+               /* Starting Time                        9.3.23  O 2) TV 3 */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_staring_time(tvb, pinfo, tree, offset, FALSE);
+               break;
+       /* 8.4.21 TALKER DETECTION */
+       case RSL_MSG_TALKER_DET:                        /*      53      8.4.21 */
+               /* Channel number                       9.3.1   M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* Access Delay                         9.3.17  O 1) TV 2 */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               break;
+       /* 8.4.22 LISTENER DETECTION */
+       case RSL_MSG_LISTENER_DET:              /*      54      8.4.22 */
+               /* Channel number                       9.3.1   M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* Access Delay                         9.3.17  O 1) TV 2 */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               break;
+       /* 8.4.23 REMOTE CODEC CONFIGURATION REPORT */
+       case RSL_MSG_REMOTE_CODEC_CONF_REP:/*   55      8.4.23 */
+               /* Channel number                       9.3.1   M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* Codec Configuration          9.3.55  M TLV >=3 */
+               /* Supported Codec Types        9.3.54  M TLV >=5 */
+               /* TFO transparent container 9.3.59 O 4) TLV >=3 */
+               break;
+       /* 8.4.24 ROUND TRIP DELAY REPORT */
+       case RSL_MSG_R_T_D_REP:                 /*      56      8.4.24 */
+               /* Channel number                       9.3.1   M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* Round Trip Delay                     9.3.56  M TV 2 */
+               break;
+       /* 8.4.25 PRE-HANDOVER NOTIFICATION */
+       case RSL_MSG_PRE_HANDO_NOTIF:           /*      57      8.4.25 */
+               /* Channel number                       9.3.1   M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* MultiRateControl                     9.3.53  M TV 2 */
+               /* Codec Configuration          9.3.55  M TLV >=3 */
+               /* TFO transparent container 9.3.59 O 4) TLV >=3 */
+               break;
+       /* 8.4.26 MULTIRATE CODEC MODIFICATION REQUEST */
+       case RSL_MSG_MR_CODEC_MOD_REQ:  /*      58      8.4.26 */
+               /* Channel number                       9.3.1   M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* MultiRate Configuration      9.3.52  O 1) TLV >=4 */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_multirate_conf(tvb, pinfo, tree, offset, FALSE);
+               break;
+       /*  8.4.27 MULTIRATE CODEC MODIFICATION ACKNOWLEDGE */
+       case RSL_MSG_MR_CODEC_MOD_ACK:  /*      59      8.4.27 */
+               /* Channel number                       9.3.1   M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* MultiRate Configuration      9.3.52  O 1) TLV >=4 */
+               if(tvb_length_remaining(tvb,offset) > 0)
+                       offset = dissect_rsl_ie_multirate_conf(tvb, pinfo, tree, offset, FALSE);
+               break;
+       /* 8.4.28 MULTIRATE CODEC MODIFICATION NEGATIVE ACKNOWLEDGE */
+       case RSL_MSG_MR_CODEC_MOD_NACK: /*      60      8.4.28 */
+               /* Channel number                       9.3.1   M TV 2                  */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* Cause                                        9.3.26  M TLV >=3               */
+               offset = dissect_rsl_ie_cause(tvb, pinfo, tree, offset, TRUE);
+               break;
+       /* 8.4.29 MULTIRATE CODEC MODIFICATION PERFORMED */
+       case RSL_MSG_MR_CODEC_MOD_PER:  /*      61      8.4.29 */
+               /* Channel number                       9.3.1   M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* MultiRate Configuration      9.3.52  M TLV >=4 */
+               offset = dissect_rsl_ie_multirate_conf(tvb, pinfo, tree, offset, TRUE);
+               break;
+       /* 8.4.30 TFO REPORT */
+       case RSL_MSG_TFO_REP:                           /*      62      8.4.30 */
+               /* Channel number                       9.3.1   M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* TFO Status                           9.3.57  M TV 1 */
+               break;
+       /* 8.4.31 TFO MODIFICATION REQUEST */
+       case RSL_MSG_TFO_MOD_REQ:                       /*      63      8.4.31 */
+               /* Channel number                       9.3.1 M TV 2 */
+               offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
+               /* MultiRateControl                     9.3.53 M TV 2 */
+               /* Supported Codec Type         9.3.54 O 1) TLV >=5 */
+               /* TFO transparent container 9.3.59 O 4) TLV >=3 */
+               break;
+       /*      0 1 - - - - - - Location Services messages: */
+       /* 8.7.1 LOCATION INFORMATION */
+       case RSL_MSG_LOC_INF:                           /*      65      8.7.1 */
+               /* LLP APDU 9.3.58 M LV 2-N */
                break;
        default:
                break;
@@ -1124,7 +2280,7 @@ dissect_rsl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
                proto_tree_add_item(rsl_tree, hf_rsl_msg_dsc, tvb, offset, 1, FALSE);
                proto_tree_add_item(rsl_tree, hf_rsl_T_bit, tvb, offset, 1, FALSE);
                offset++;
-               offset = dissct_rsl_msg(tvb, pinfo, rsl_tree, offset );
+               offset = dissct_rsl_msg(tvb, pinfo, rsl_tree, offset);
 
        /*}*/
 
@@ -1180,7 +2336,7 @@ void proto_register_rsl(void)
                },
                { &hf_rsl_ch_no_TN,
                        { "Time slot number (TN)",  "rsl.ch_no_TN",
-                       FT_UINT8, BASE_DEC, NULL, 0x03,
+                       FT_UINT8, BASE_DEC, NULL, 0x07,
                        "Time slot number (TN)", HFILL }
                },
                { &hf_rsl_req_ref_ra,
@@ -1203,6 +2359,51 @@ void proto_register_rsl(void)
                        FT_UINT8, BASE_DEC, NULL, 0x1f,
                        "T2", HFILL }
                },
+               { &hf_rsl_ho_ref,
+                       { "Hand-over reference",           "rsl.ho_ref",
+                       FT_UINT8, BASE_DEC, NULL, 0x0,
+                       "Hand-over reference", HFILL }
+               },
+               { &hf_rsl_ms_power_lev,
+                       { "MS power level",           "rsl.s_power_lev",
+                       FT_UINT8, BASE_DEC, NULL, 0xf8,
+                       "MS power level", HFILL }
+               },
+               { &hf_rsl_ms_fpc,
+                       { "FPC",           "rsl.fpc",
+                       FT_BOOLEAN, 8, TFS(&rsl_fpc_epc_mode_vals), 0x04,
+                       "FPC", HFILL }
+               },
+               { &hf_rsl_act_timing_adv,
+                       { "Actual Timing Advance",           "rsl.act_timing_adv",
+                       FT_UINT8, BASE_DEC, NULL, 0x0,
+                       "Actual Timing Advance", HFILL }
+               },
+               { &hf_rsl_dtxd,
+                       { "DTXd",           "rsl.dtxd",
+                       FT_BOOLEAN, 8, TFS(&rsl_dtxd_vals), 0x40,
+                       "DTXd", HFILL }
+               },
+               { &hf_rsl_rxlev_full_up,
+                       { "RXLEV.FULL.up",           "rsl.rxlev_full_up",
+                       FT_UINT8, BASE_DEC, NULL, 0x3f,
+                       "RXLEV.FULL.up", HFILL }
+               },
+               { &hf_rsl_rxlev_sub_up,
+                       { "RXLEV.SUB.up",           "rsl.rxlev_sub_up",
+                       FT_UINT8, BASE_DEC, NULL, 0x3f,
+                       "RXLEV.SUB.up", HFILL }
+               },
+               { &hf_rsl_rxqual_full_up,
+                       { "RXQUAL.FULL.up",           "rsl.rxqual_full_up",
+                       FT_UINT8, BASE_DEC, NULL, 0x38,
+                       "RXQUAL.FULL.up", HFILL }
+               },
+               { &hf_rsl_rxqual_sub_up,
+                       { "RXQUAL.SUB.up",           "rsl.rxqual_sub_up",
+                       FT_UINT8, BASE_DEC, NULL, 0x07,
+                       "RXQUAL.SUB.up", HFILL }
+               },
                { &hf_rsl_acc_delay,
                        { "Access Delay",           "rsl.acc_del",
                        FT_UINT8, BASE_DEC, NULL, 0x0,
@@ -1233,6 +2434,66 @@ void proto_register_rsl(void)
                        FT_UINT8, BASE_DEC, NULL, 0x07,
                        "SAPI", HFILL }
                },
+               { &hf_rsl_rbit,
+                       { "R",           "rsl.rbit",
+                       FT_BOOLEAN, 8, TFS(&rsl_rbit_vals), 0x80,
+                       "R", HFILL }
+               },
+               { &hf_rsl_a3a2,
+                       { "A3A2",           "rsl.a3a2",
+                       FT_UINT8, BASE_DEC, VALS(rsl_a3a2_vals), 0x06,
+                       "A3A2", HFILL }
+               },
+               { &hf_rsl_a1_0,
+                       { "A1",           "rsl.a1_0",
+                       FT_BOOLEAN, 8, TFS(&rsl_a1_0_vals), 0x01,
+                       "A1", HFILL }
+               },
+               { &hf_rsl_a1_1,
+                       { "A1",           "rsl.a1_1",
+                       FT_BOOLEAN, 8, TFS(&rsl_a1_1_vals), 0x01,
+                       "A1", HFILL }
+               },
+               { &hf_rsl_a1_2,
+                       { "A1",           "rsl.a2_0",
+                       FT_BOOLEAN, 8, TFS(&rsl_a1_2_vals), 0x01,
+                       "A1", HFILL }
+               },
+               { &hf_rsl_epc_mode,
+                       { "EPC mode", "rsl.epc_mode",
+                       FT_BOOLEAN, 8, TFS(&rsl_epc_mode_vals), 0x20,
+                       "EPC mode", HFILL }
+               },
+               { &hf_rsl_fpc_epc_mode,
+                       { "FPC-EPC mode", "rsl.fpc_epc_mode",
+                       FT_BOOLEAN, 8, TFS(&rsl_fpc_epc_mode_vals), 0x10,
+                       "FPC-EPC mode", HFILL }
+               },
+               { &hf_rsl_bs_power,
+                       { "Power Level",           "rsl.bs_power",
+                       FT_UINT8, BASE_DEC, VALS(rsl_rlm_bs_power_vals), 0x0f,
+                       "Power Level", HFILL }
+               },
+               { &hf_rsl_cm_dtxd,
+                       { "DTXd", "rsl.cm_dtxd",
+                       FT_BOOLEAN, 8, TFS(&rsl_dtx_vals), 0x02,
+                       "DTXd", HFILL }
+               },
+               { &hf_rsl_cm_dtxu,
+                       { "DTXu", "rsl.cm_dtxu",
+                       FT_BOOLEAN, 8, TFS(&rsl_dtx_vals), 0x01,
+                       "DTXu", HFILL }
+               },
+               { &hf_rsl_alg_id,
+                       { "Algorithm Identifier",           "rsl.alg_id",
+                       FT_UINT8, BASE_DEC, VALS(rsl_algorithm_id_vals), 0x0,
+                       "Algorithm Identifier", HFILL }
+               },
+               { &hf_rsl_key,
+                       { "KEY",           "rsl.key",
+                       FT_BYTES, BASE_NONE, NULL, 0x0,
+                       "KEY", HFILL }
+               },
                { &hf_rsl_cause,
                        { "Cause",           "rsl.cause",
                        FT_UINT8, BASE_DEC, VALS(rsl_rlm_cause_vals), 0x7f,
@@ -1262,13 +2523,23 @@ void proto_register_rsl(void)
                        FT_UINT8, BASE_DEC, NULL, 0x0,
                        "Paging Group", HFILL }
                },
+               { &hf_rsl_sys_info_type,
+                       { "System Info Type",           "rsl.sys_info_type",
+                       FT_UINT8, BASE_DEC, VALS(rsl_sys_info_type_vals), 0x0,
+                       "System Info Type", HFILL }
+               },
+               { &hf_rsl_timing_offset,
+                       { "Timing Offset",           "rsl.timing_offset",
+                       FT_UINT8, BASE_DEC, NULL, 0x0,
+                       "Timing Offset", HFILL }
+               },
                { &hf_rsl_ch_needed,
-                       { "Channel Needed",           "rsl.class",
+                       { "Channel Needed",           "rsl.ch_needed",
                        FT_UINT8, BASE_DEC, VALS(rsl_ch_needed_vals), 0x03,
                        "Channel Needed", HFILL }
                },
                { &hf_rsl_emlpp_prio,
-                       { "eMLPP Priority",           "rsl.class",
+                       { "eMLPP Priority",           "rsl.emlpp_prio",
                        FT_UINT8, BASE_DEC, VALS(rsl_emlpp_prio_vals), 0x03,
                        "eMLPP Priority", HFILL }
                },
@@ -1276,8 +2547,15 @@ void proto_register_rsl(void)
        static gint *ett[] = {
                &ett_rsl,
                &ett_ie_link_id,
+               &ett_ie_act_type,
+               &ett_ie_bs_power,
+               &ett_ie_ch_id,
+               &ett_ie_ch_mode,
+               &ett_ie_enc_inf,
                &ett_ie_ch_no,
                &ett_ie_frame_no,
+               &ett_ie_ho_ref,
+               &ett_ie_l1_inf,
                &ett_ie_L3_inf,
                &ett_ie_ms_id,
                &ett_ie_phy_ctx,
@@ -1286,11 +2564,18 @@ void proto_register_rsl(void)
                &ett_ie_req_ref,
                &ett_ie_rel_mode,
                &ett_ie_rlm_cause,
+               &ett_ie_staring_time,
+               &ett_ie_uplik_meas,
                &ett_ie_full_imm_ass_inf,
+               &ett_ie_ms_timing_offset,
                &ett_ie_ch_needed,
                &ett_ie_emlpp_prio,
+               &ett_ie_main_ch_ref,
+               &ett_ie_multirate_conf,
                &ett_ie_cause,
                &ett_ie_meas_res_no,
+               &ett_ie_message_id,
+               &ett_ie_sys_info_type,
        };
 
        /* Register the protocol name and description */
@@ -1302,3 +2587,4 @@ void proto_register_rsl(void)
 
 
 }
+