Dissect Handover "containers".
authoretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>
Sun, 8 Nov 2009 19:59:21 +0000 (19:59 +0000)
committeretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>
Sun, 8 Nov 2009 19:59:21 +0000 (19:59 +0000)
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@30866 f5534014-38df-0310-8fa8-9805f1628bb7

asn1/lte-rrc/lte-rrc.cnf
asn1/s1ap/packet-s1ap-template.c
asn1/s1ap/s1ap.cnf
epan/dissectors/packet-lte-rrc.c
epan/dissectors/packet-lte-rrc.h
epan/dissectors/packet-s1ap.c

index 14655ca3659c853b16146d6983150ccba68e4770..e4ed0487b2db5c3120e76daf9ebb7b11106b8f14 100644 (file)
@@ -14,9 +14,12 @@ UNALIGNED
 #.EXPORTS
 HandoverCommand
 HandoverCommand_PDU
+HandoverPreparationInformation
+HandoverPreparationInformation_PDU
 
 #.PDU_NEW
 HandoverCommand
+HandoverPreparationInformation
 BCCH-BCH-Message             @bcch.bch
 BCCH-DL-SCH-Message          @bcch.dl.sch
 PCCH-Message                 @pcch
@@ -36,116 +39,116 @@ UL-DCCH-Message              @ul.dcch
 
 #.FN_HDR MasterInformationBlock
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "MasterInformationBlock");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "MasterInformationBlock ");
 
 #.FN_HDR SystemInformation
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "SystemInformation");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "SystemInformation ");
 
 #.FN_HDR SystemInformationBlockType1
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "SystemInformationBlockType1");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "SystemInformationBlockType1 ");
 
 #.FN_HDR Paging
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "Paging");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "Paging ");
 
 #.FN_HDR RRCConnectionReestablishment
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReestablishment");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReestablishment ");
 
 #.FN_HDR RRCConnectionReestablishmentReject
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReestablishmentReject");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReestablishmentReject ");
 
 #.FN_HDR RRCConnectionReject
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReject");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReject ");
 
 #.FN_HDR RRCConnectionSetup
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionSetup");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionSetup ");
 
 #.FN_HDR CSFBParametersResponseCDMA2000
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "CSFBParametersResponseCDMA2000");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "CSFBParametersResponseCDMA2000 ");
 
 #.FN_HDR DLInformationTransfer
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "DLInformationTransfer");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "DLInformationTransfer ");
 
 #.FN_HDR HandoverFromEUTRAPreparationRequest
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "HandoverFromEUTRAPreparationRequest");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "HandoverFromEUTRAPreparationRequest ");
 
 #.FN_HDR MobilityFromEUTRACommand
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "MobilityFromEUTRACommand");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "MobilityFromEUTRACommand ");
 
 #.FN_HDR RRCConnectionReconfiguration
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReconfiguration");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReconfiguration ");
 
 #.FN_HDR RRCConnectionRelease
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionRelease");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionRelease ");
 
 #.FN_HDR SecurityModeCommand
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "SecurityModeCommand");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "SecurityModeCommand ");
 
 #.FN_HDR UECapabilityEnquiry
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "UECapabilityEnquiry");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "UECapabilityEnquiry ");
 
 #.FN_HDR RRCConnectionReestablishmentRequest
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReestablishmentRequest");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReestablishmentRequest ");
 
 #.FN_HDR RRCConnectionRequest
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionRequest");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionRequest ");
 
 #.FN_HDR CSFBParametersRequestCDMA2000
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "CSFBParametersRequestCDMA2000");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "CSFBParametersRequestCDMA2000 ");
 
 #.FN_HDR MeasurementReport
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "MeasurementReport");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "MeasurementReport ");
 
 #.FN_HDR RRCConnectionReconfigurationComplete
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReconfigurationComplete");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReconfigurationComplete ");
 
 #.FN_HDR RRCConnectionReestablishmentComplete
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReestablishmentComplete");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReestablishmentComplete ");
 
 #.FN_HDR RRCConnectionSetupComplete
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionSetupComplete");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionSetupComplete ");
 
 #.FN_HDR SecurityModeComplete
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "SecurityModeComplete");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "SecurityModeComplete ");
 
 #.FN_HDR SecurityModeFailure
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "SecurityModeFailure");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "SecurityModeFailure ");
 
 #.FN_HDR UECapabilityInformation
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "UECapabilityInformation");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "UECapabilityInformation ");
 
 #.FN_HDR ULHandoverPreparationTransfer
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "ULHandoverPreparationTransfer");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "ULHandoverPreparationTransfer ");
 
 #.FN_HDR ULInformationTransfer
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "ULInformationTransfer");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "ULInformationTransfer ");
 
 #.FN_HDR CounterCheckResponse
 
-col_append_str(actx->pinfo->cinfo, COL_INFO, "CounterCheckResponse");
+col_append_str(actx->pinfo->cinfo, COL_INFO, "CounterCheckResponse ");
index d7e6ed5eed54326ec7801639e53ccf16538f3f67..d362c72f6333f2a2643989d3a72712558d8f7453 100644 (file)
@@ -46,6 +46,7 @@
 #include "packet-per.h"
 #include "packet-e212.h"
 #include "packet-sccp.h"
+#include "packet-lte-rrc.h"
 
 #ifdef _MSC_VER
 /* disable: "warning C4146: unary minus operator applied to unsigned type, result still unsigned" */
@@ -73,15 +74,25 @@ static int hf_s1ap_transportLayerAddressIPv6 = -1;
 /* Initialize the subtree pointers */
 static int ett_s1ap = -1;
 static int ett_s1ap_TransportLayerAddress = -1;
+static int ett_s1ap_ToTargetTransparentContainer = -1;
+static int ett_s1ap_ToSourceTransparentContainer = -1;
+static int ett_s1ap_RRCContainer = -1;
 
 #include "packet-s1ap-ett.c"
 
+enum{
+       INITIATING_MESSAGE,
+       SUCCESSFUL_OUTCOME,
+       UNSUCCESSFUL_OUTCOME
+};
+
 /* Global variables */
 static guint32 ProcedureCode;
 static guint32 ProtocolIE_ID;
 static guint32 ProtocolExtensionID;
 static guint gbl_s1apSctpPort=SCTP_PORT_S1AP;
 static guint32 handover_type_value;
+static guint32 message_type;
 
 /* Dissector tables */
 static dissector_table_t s1ap_ies_dissector_table;
@@ -102,7 +113,12 @@ static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, pro
 static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
 static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
 
-static int dissect_s1ap_SourceeNB_ToTargeteNB_TransparentContainer(tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
+static int dissect_SourceeNB_ToTargeteNB_TransparentContainer_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+static int dissect_TargeteNB_ToSourceeNB_TransparentContainer_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+static int dissect_SourceRNC_ToTargetRNC_TransparentContainer_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+static int dissect_TargetRNC_ToSourceRNC_TransparentContainer_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+static int dissect_SourceBSS_ToTargetBSS_TransparentContainer_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+static int dissect_TargetBSS_ToSourceBSS_TransparentContainer_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
 
 #include "packet-s1ap-fn.c"
 
@@ -208,6 +224,9 @@ void proto_register_s1ap(void) {
   static gint *ett[] = {
                  &ett_s1ap,
                  &ett_s1ap_TransportLayerAddress,
+                 &ett_s1ap_ToTargetTransparentContainer,
+                 &ett_s1ap_ToSourceTransparentContainer,
+                 &ett_s1ap_RRCContainer,
 #include "packet-s1ap-ettarr.c"
   };
 
index 33c8c287db0f407375ba8e1930f8c16db2cf62f3..e522e1e99c70913ce7b4b4ea1d1174cd07325f9b 100644 (file)
@@ -13,6 +13,11 @@ ALIGNED
 #.PDU_NEW
 S1AP-PDU
 SourceeNB-ToTargeteNB-TransparentContainer
+TargeteNB-ToSourceeNB-TransparentContainer
+SourceRNC-ToTargetRNC-TransparentContainer
+TargetRNC-ToSourceRNC-TransparentContainer
+SourceBSS-ToTargetBSS-TransparentContainer
+TargetBSS-ToSourceBSS-TransparentContainer
 
 #.MAKE_ENUM
 ProcedureCode
@@ -31,11 +36,6 @@ E-RAB-IE-ContainerPairList
 Presence
 L3-Information
 OldBSS-ToNewBSS-Information
-SourceBSS-ToTargetBSS-TransparentContainer
-SourceRNC-ToTargetRNC-TransparentContainer
-TargeteNB-ToSourceeNB-TransparentContainer
-TargetRNC-ToSourceRNC-TransparentContainer
-TargetBSS-ToSourceBSS-TransparentContainer
 #.END
 
 
@@ -83,10 +83,14 @@ ProtocolIE-Field/value ie_field_value
 #.END
 
 #.FN_PARS InitiatingMessage/value  FN_VARIANT=_pdu_new  TYPE_REF_FN=dissect_InitiatingMessageValue
-
+#.FN_HDR InitiatingMessage/value
+       message_type = INITIATING_MESSAGE;
 #.FN_PARS SuccessfulOutcome/value  FN_VARIANT=_pdu_new  TYPE_REF_FN=dissect_SuccessfulOutcomeValue
-
+#.FN_HDR SuccessfulOutcome/value
+       message_type = SUCCESSFUL_OUTCOME;
 #.FN_PARS UnsuccessfulOutcome/value  FN_VARIANT=_pdu_new  TYPE_REF_FN=dissect_UnsuccessfulOutcomeValue
+#.FN_HDR UnsuccessfulOutcome/value
+       message_type = UNSUCCESSFUL_OUTCOME;
 
 #--- Parameterization is not supported in asn2wrs ---
 
@@ -253,13 +257,23 @@ MAX_VAL = asn1_param_get_integer(%(ACTX)s,"upperBound")
 #.FN_HDR HandoverRequest
        handover_type_value = 0;
        
-#.FN_BODY Source-ToTarget-TransparentContainer
+#.FN_BODY Source-ToTarget-TransparentContainer 
+#VAL_PTR = &parameter_tvb
 # Annex A
 # ...Therefore the container content is encoded according to the
 # rules which are specified for the target radio system. In section 8.4.1.2,
 # it is described how the container shall be encoded with respect to the scenario 
-# in which it is used.    
+# in which it is used.
+ gint32 start_offset;
+ tvbuff_t *parameter_tvb;
+ proto_tree *subtree;
+ start_offset = offset;
+%(DEFAULT_BODY)s
+
+       parameter_tvb = tvb_new_subset(tvb, start_offset, -1, -1);
+       subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_ToTargetTransparentContainer);
+
     switch(handover_type_value){
    /*  
     HandoverType ::= ENUMERATED {
@@ -275,19 +289,21 @@ MAX_VAL = asn1_param_get_integer(%(ACTX)s,"upperBound")
                        Intra E-UTRAN handover Source eNB to Target eNB
                        Transparent Container 36.413    
                 */
-               dissect_s1ap_SourceeNB_ToTargeteNB_TransparentContainer(tvb , offset, actx ,tree , hf_s1ap_SourceeNB_ToTargeteNB_TransparentContainer_PDU );
+               dissect_SourceeNB_ToTargeteNB_TransparentContainer_PDU(parameter_tvb, actx->pinfo, subtree);
                break;
                case 1:
                /* ltetoutran 
                        Source RNC to Target RNC
                        Transparent Container 25.413
                */
+               dissect_SourceRNC_ToTargetRNC_TransparentContainer_PDU(parameter_tvb, actx->pinfo, subtree);
                break;
                case 2:
                /* ltetogeran 
                        Source BSS to Target BSS
                        Transparent Container 48.018
                */
+               dissect_SourceBSS_ToTargetBSS_TransparentContainer_PDU(parameter_tvb, actx->pinfo, subtree);
                break;
                case 3:
                /* utrantolte */
@@ -300,7 +316,125 @@ MAX_VAL = asn1_param_get_integer(%(ACTX)s,"upperBound")
                break;
        }
 
+#.FN_BODY Target-ToSource-TransparentContainer 
+#VAL_PTR = &parameter_tvb
+
+ gint32 start_offset;
+ tvbuff_t *parameter_tvb;
+ proto_tree *subtree;
+  
+ start_offset = offset;
+%(DEFAULT_BODY)s
+
+       parameter_tvb = tvb_new_subset(tvb, start_offset, -1, -1);
+       subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_ToSourceTransparentContainer);
+
+    switch(handover_type_value){
+   /*  
+    HandoverType ::= ENUMERATED {
+    intralte,
+    ltetoutran,
+    ltetogeran,
+    utrantolte,
+    gerantolte,
+    ...
+    } */ 
+               case 0:
+               /* intralte 
+                       Intra E-UTRAN handover Target eNB to Source eNB
+                       Transparent Container 36.413    
+                */
+               dissect_TargeteNB_ToSourceeNB_TransparentContainer_PDU(parameter_tvb, actx->pinfo, subtree);
+               break;
+               case 1:
+               /* ltetoutran 
+                       Target RNC to Source RNC
+                       Transparent Container 25.413
+               */
+               dissect_TargetRNC_ToSourceRNC_TransparentContainer_PDU(parameter_tvb, actx->pinfo, subtree);
+               break;
+               case 2:
+               /* ltetogeran 
+                       Target BSS to Source BSS
+                       Transparent Container 48.018
+               */
+               dissect_TargetBSS_ToSourceBSS_TransparentContainer_PDU(parameter_tvb, actx->pinfo, subtree);
+               break;
+               case 3:
+               /* utrantolte */
+               break;
+               case 4:
+               /* gerantolte */
+               break;
+               default:
+               DISSECTOR_ASSERT_NOT_REACHED();
+               break;
+       }
+#SourceBSS-ToTargetBSS-TransparentContainer
+#SourceRNC-ToTargetRNC-TransparentContainer
+#TargetRNC-ToSourceRNC-TransparentContainer
+#TargetBSS-ToSourceBSS-TransparentContainer
+
+#.FN_BODY RRC-Container 
+#VAL_PTR = &parameter_tvb
+
+# Extracts from the standard:
+# Includes the RRC Handover Preparation Information message as defined
+# in subclause 10.2.2 of [16].
+# [16] 3GPP TS 36.331: "Evolved Universal Terrestrial Radio Access (E-UTRAN); Radio Resource
+#  Control (RRC) Protocol Specification3GPP TS 36.331: 
+# "Evolved Universal Terrestrial Radio Access (E-UTRAN); Radio Resource
+# Control (RRC) Protocol Specification.
+# : 
+# 9.2.1.7 Source eNB to Target eNB Transparent Container
+# The Source eNB to target eNB Transparent Container IE is an information element
+# that is produced by the source eNB and is transmitted to the target eNB. 
+# For inter-system handovers to E-UTRAN, the IE is transmitted from the external
+# handover source to the target eNB. This IE is transparent to the EPC.
+#
+# RRC Container M OCTET STRING Includes the RRC Handover Preparation Information 
+# message as defined in subclause 10.2.2 of [16].
+# :
+# 9.2.1.8 Target eNB to Source eNB Transparent Container
+# The Target eNB to Source eNB Transparent Container IE is an information element 
+# that is produced by the target eNB and is transmitted to the source eNB. 
+# For inter-system handovers to E-UTRAN, the IE is transmitted from the target
+# eNB to the external relocation source.
+# :
+# RRC Container M OCTET STRING Includes the RRC E-UTRA Handover Command message
+# as defined in subclause 10.2.2 of [16].
+# --- End quote ---
+# Source eNB to Target eNB Transparent Container is present in 
+# HandoverRequired and HandoverRequest.
+# Target eNB to Source eNB Transparent Container is present in
+# HandoverCommand and HandoverRequestAcknowledge. 
+
+# I think the message id "directly encoded" into the octest string(no "double encoding")
+ gint32 start_offset;
+ tvbuff_t *parameter_tvb;
+ proto_tree *subtree;
+  
+ start_offset = offset;
+%(DEFAULT_BODY)s
 
+       subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_RRCContainer);
+
+       /* Make the new tvb to the end of the tvb as we don't (need to)know the length */
+       parameter_tvb = tvb_new_subset(tvb, start_offset, -1, -1);
+       switch(message_type){
+               case INITIATING_MESSAGE:
+               /* 9.2.1.7 Source eNB to Target eNB Transparent Container */
+                       dissect_lte_rrc_HandoverPreparationInformation_PDU(parameter_tvb, actx->pinfo, subtree);
+                       break;
+               case SUCCESSFUL_OUTCOME:
+               /* 9.2.1.7 Source eNB to Target eNB Transparent Container */
+                       dissect_lte_rrc_HandoverCommand_PDU(parameter_tvb, actx->pinfo, subtree);
+                       break;
+               default:
+                       break;
+       }
+                       
+               
        
 #.TYPE_ATTR
 ProtocolExtensionID TYPE = FT_UINT8  DISPLAY = BASE_DEC STRINGS = VALS(s1ap_ProtocolIE_ID_vals)
index ecf9fa6180c6719fcabf6c5b79423da4d6f84b39..b2509ebb2825464441aeb9bcbe8864212317e5e6 100644 (file)
@@ -103,6 +103,7 @@ static int hf_lte_rrc_DL_DCCH_Message_PDU = -1;   /* DL_DCCH_Message */
 static int hf_lte_rrc_UL_CCCH_Message_PDU = -1;   /* UL_CCCH_Message */
 static int hf_lte_rrc_UL_DCCH_Message_PDU = -1;   /* UL_DCCH_Message */
 static int hf_lte_rrc_lte_rrc_HandoverCommand_PDU = -1;  /* HandoverCommand */
+static int hf_lte_rrc_lte_rrc_HandoverPreparationInformation_PDU = -1;  /* HandoverPreparationInformation */
 static int hf_lte_rrc_UECapabilityInformation_PDU = -1;  /* UECapabilityInformation */
 static int hf_lte_rrc_message = -1;               /* BCCH_BCH_MessageType */
 static int hf_lte_rrc_message_01 = -1;            /* BCCH_DL_SCH_MessageType */
@@ -15363,7 +15364,7 @@ static const per_sequence_t HandoverPreparationInformation_sequence[] = {
   { NULL, 0, 0, NULL }
 };
 
-static int
+int
 dissect_lte_rrc_HandoverPreparationInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_lte_rrc_HandoverPreparationInformation, HandoverPreparationInformation_sequence);
@@ -15558,6 +15559,14 @@ int dissect_lte_rrc_HandoverCommand_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U
   offset += 7; offset >>= 3;
   return offset;
 }
+int dissect_lte_rrc_HandoverPreparationInformation_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  int offset = 0;
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+  offset = dissect_lte_rrc_HandoverPreparationInformation(tvb, offset, &asn1_ctx, tree, hf_lte_rrc_lte_rrc_HandoverPreparationInformation_PDU);
+  offset += 7; offset >>= 3;
+  return offset;
+}
 static int dissect_UECapabilityInformation_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   int offset = 0;
   asn1_ctx_t asn1_ctx;
@@ -15612,6 +15621,10 @@ void proto_register_lte_rrc(void) {
       { "HandoverCommand", "lte-rrc.HandoverCommand",
         FT_NONE, BASE_NONE, NULL, 0,
         "lte_rrc.HandoverCommand", HFILL }},
+    { &hf_lte_rrc_lte_rrc_HandoverPreparationInformation_PDU,
+      { "HandoverPreparationInformation", "lte-rrc.HandoverPreparationInformation",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "lte_rrc.HandoverPreparationInformation", HFILL }},
     { &hf_lte_rrc_UECapabilityInformation_PDU,
       { "UECapabilityInformation", "lte-rrc.UECapabilityInformation",
         FT_NONE, BASE_NONE, NULL, 0,
index 0b812e74dad4fdc17ca770410b046bdc3fa553d4..98d5ca39747b177b36ba23c1a01d2da2bdfbd804 100644 (file)
@@ -37,7 +37,9 @@
 /*--- Included file: packet-lte-rrc-exp.h ---*/
 #line 1 "packet-lte-rrc-exp.h"
 int dissect_lte_rrc_HandoverCommand(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
+int dissect_lte_rrc_HandoverPreparationInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
 int dissect_lte_rrc_HandoverCommand_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_);
+int dissect_lte_rrc_HandoverPreparationInformation_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_);
 
 /*--- End of included file: packet-lte-rrc-exp.h ---*/
 #line 29 "packet-lte-rrc-template.h"
index d994829a6309c5a646d481440cd2a48dade2eac6..2cb60fe6087561969a5bf1d95e691d6e33072b89 100644 (file)
@@ -54,6 +54,7 @@
 #include "packet-per.h"
 #include "packet-e212.h"
 #include "packet-sccp.h"
+#include "packet-lte-rrc.h"
 
 #ifdef _MSC_VER
 /* disable: "warning C4146: unary minus operator applied to unsigned type, result still unsigned" */
@@ -275,7 +276,7 @@ typedef enum _ProtocolIE_ID_enum {
 } ProtocolIE_ID_enum;
 
 /*--- End of included file: packet-s1ap-val.h ---*/
-#line 65 "packet-s1ap-template.c"
+#line 66 "packet-s1ap-template.c"
 
 /* Initialize the protocol and registered fields */
 static int proto_s1ap = -1;
@@ -336,9 +337,11 @@ static int hf_s1ap_SecurityContext_PDU = -1;      /* SecurityContext */
 static int hf_s1ap_SerialNumber_PDU = -1;         /* SerialNumber */
 static int hf_s1ap_SONConfigurationTransfer_PDU = -1;  /* SONConfigurationTransfer */
 static int hf_s1ap_Source_ToTarget_TransparentContainer_PDU = -1;  /* Source_ToTarget_TransparentContainer */
+static int hf_s1ap_SourceBSS_ToTargetBSS_TransparentContainer_PDU = -1;  /* SourceBSS_ToTargetBSS_TransparentContainer */
 static int hf_s1ap_SRVCCOperationPossible_PDU = -1;  /* SRVCCOperationPossible */
 static int hf_s1ap_SRVCCHOIndication_PDU = -1;    /* SRVCCHOIndication */
 static int hf_s1ap_SourceeNB_ToTargeteNB_TransparentContainer_PDU = -1;  /* SourceeNB_ToTargeteNB_TransparentContainer */
+static int hf_s1ap_SourceRNC_ToTargetRNC_TransparentContainer_PDU = -1;  /* SourceRNC_ToTargetRNC_TransparentContainer */
 static int hf_s1ap_ServedGUMMEIs_PDU = -1;        /* ServedGUMMEIs */
 static int hf_s1ap_ServedPLMNs_PDU = -1;          /* ServedPLMNs */
 static int hf_s1ap_SubscriberProfileIDforRFP_PDU = -1;  /* SubscriberProfileIDforRFP */
@@ -346,7 +349,10 @@ static int hf_s1ap_SupportedTAs_PDU = -1;         /* SupportedTAs */
 static int hf_s1ap_S_TMSI_PDU = -1;               /* S_TMSI */
 static int hf_s1ap_TAI_PDU = -1;                  /* TAI */
 static int hf_s1ap_TargetID_PDU = -1;             /* TargetID */
+static int hf_s1ap_TargeteNB_ToSourceeNB_TransparentContainer_PDU = -1;  /* TargeteNB_ToSourceeNB_TransparentContainer */
 static int hf_s1ap_Target_ToSource_TransparentContainer_PDU = -1;  /* Target_ToSource_TransparentContainer */
+static int hf_s1ap_TargetRNC_ToSourceRNC_TransparentContainer_PDU = -1;  /* TargetRNC_ToSourceRNC_TransparentContainer */
+static int hf_s1ap_TargetBSS_ToSourceBSS_TransparentContainer_PDU = -1;  /* TargetBSS_ToSourceBSS_TransparentContainer */
 static int hf_s1ap_TimeToWait_PDU = -1;           /* TimeToWait */
 static int hf_s1ap_TransportLayerAddress_PDU = -1;  /* TransportLayerAddress */
 static int hf_s1ap_TraceActivation_PDU = -1;      /* TraceActivation */
@@ -664,11 +670,14 @@ static int hf_s1ap_successfulOutcome_value = -1;  /* SuccessfulOutcome_value */
 static int hf_s1ap_unsuccessfulOutcome_value = -1;  /* UnsuccessfulOutcome_value */
 
 /*--- End of included file: packet-s1ap-hf.c ---*/
-#line 72 "packet-s1ap-template.c"
+#line 73 "packet-s1ap-template.c"
 
 /* Initialize the subtree pointers */
 static int ett_s1ap = -1;
 static int ett_s1ap_TransportLayerAddress = -1;
+static int ett_s1ap_ToTargetTransparentContainer = -1;
+static int ett_s1ap_ToSourceTransparentContainer = -1;
+static int ett_s1ap_RRCContainer = -1;
 
 
 /*--- Included file: packet-s1ap-ett.c ---*/
@@ -767,6 +776,7 @@ static gint ett_s1ap_CompletedCellinTAI_Item = -1;
 static gint ett_s1ap_TargetID = -1;
 static gint ett_s1ap_TargeteNB_ID = -1;
 static gint ett_s1ap_TargetRNC_ID = -1;
+static gint ett_s1ap_TargeteNB_ToSourceeNB_TransparentContainer = -1;
 static gint ett_s1ap_TraceActivation = -1;
 static gint ett_s1ap_UEAggregateMaximumBitrate = -1;
 static gint ett_s1ap_UE_S1AP_IDs = -1;
@@ -877,7 +887,13 @@ static gint ett_s1ap_SuccessfulOutcome = -1;
 static gint ett_s1ap_UnsuccessfulOutcome = -1;
 
 /*--- End of included file: packet-s1ap-ett.c ---*/
-#line 78 "packet-s1ap-template.c"
+#line 82 "packet-s1ap-template.c"
+
+enum{
+       INITIATING_MESSAGE,
+       SUCCESSFUL_OUTCOME,
+       UNSUCCESSFUL_OUTCOME
+};
 
 /* Global variables */
 static guint32 ProcedureCode;
@@ -885,6 +901,7 @@ static guint32 ProtocolIE_ID;
 static guint32 ProtocolExtensionID;
 static guint gbl_s1apSctpPort=SCTP_PORT_S1AP;
 static guint32 handover_type_value;
+static guint32 message_type;
 
 /* Dissector tables */
 static dissector_table_t s1ap_ies_dissector_table;
@@ -905,7 +922,12 @@ static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, pro
 static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
 static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
 
-static int dissect_s1ap_SourceeNB_ToTargeteNB_TransparentContainer(tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
+static int dissect_SourceeNB_ToTargeteNB_TransparentContainer_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+static int dissect_TargeteNB_ToSourceeNB_TransparentContainer_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+static int dissect_SourceRNC_ToTargetRNC_TransparentContainer_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+static int dissect_TargetRNC_ToSourceRNC_TransparentContainer_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+static int dissect_SourceBSS_ToTargetBSS_TransparentContainer_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+static int dissect_TargetBSS_ToSourceBSS_TransparentContainer_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
 
 
 /*--- Included file: packet-s1ap-fn.c ---*/
@@ -1258,7 +1280,7 @@ static const per_sequence_t ProtocolIE_ContainerList_sequence_of[1] = {
 
 static int
 dissect_s1ap_ProtocolIE_ContainerList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 101 "s1ap.cnf"
+#line 105 "s1ap.cnf"
   static const asn1_par_def_t ProtocolIE_ContainerList_pars[] = {
     { "lowerBound", ASN1_PAR_INTEGER },
     { "upperBound", ASN1_PAR_INTEGER },
@@ -1521,7 +1543,7 @@ dissect_s1ap_BitRate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, pr
 
 static int
 dissect_s1ap_PLMNidentity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 163 "s1ap.cnf"
+#line 167 "s1ap.cnf"
   tvbuff_t *parameter_tvb=NULL;
 
   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@@ -2667,7 +2689,7 @@ dissect_s1ap_ENB_UE_S1AP_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx
 
 static int
 dissect_s1ap_ENBname(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 175 "s1ap.cnf"
+#line 179 "s1ap.cnf"
   tvbuff_t *parameter_tvb=NULL;
   int length;
   int p_offset;
@@ -2700,7 +2722,7 @@ dissect_s1ap_ENBname(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, pr
 
 static int
 dissect_s1ap_TransportLayerAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 210 "s1ap.cnf"
+#line 214 "s1ap.cnf"
   tvbuff_t *parameter_tvb=NULL;
   proto_tree *subtree;
   gint tvb_len;
@@ -3092,7 +3114,7 @@ static const value_string s1ap_HandoverType_vals[] = {
 
 static int
 dissect_s1ap_HandoverType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 245 "s1ap.cnf"
+#line 249 "s1ap.cnf"
 
   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
                                      5, &handover_type_value, TRUE, 0, NULL);
@@ -3287,7 +3309,7 @@ dissect_s1ap_MSClassmark3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U
 
 static int
 dissect_s1ap_NAS_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 201 "s1ap.cnf"
+#line 205 "s1ap.cnf"
 
   tvbuff_t *parameter_tvb=NULL;
   
@@ -3499,9 +3521,39 @@ dissect_s1ap_RNC_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, pro
 
 static int
 dissect_s1ap_RRC_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 380 "s1ap.cnf"
+
+
+ gint32 start_offset;
+ tvbuff_t *parameter_tvb;
+ proto_tree *subtree;
+  
+ start_offset = offset;
   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
                                        NO_BOUND, NO_BOUND, FALSE, NULL);
 
+
+       subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_RRCContainer);
+
+       /* Make the new tvb to the end of the tvb as we don't (need to)know the length */
+       parameter_tvb = tvb_new_subset(tvb, start_offset, -1, -1);
+       switch(message_type){
+               case INITIATING_MESSAGE:
+               /* 9.2.1.7 Source eNB to Target eNB Transparent Container */
+                       dissect_lte_rrc_HandoverPreparationInformation_PDU(parameter_tvb, actx->pinfo, subtree);
+                       break;
+               case SUCCESSFUL_OUTCOME:
+               /* 9.2.1.7 Source eNB to Target eNB Transparent Container */
+                       dissect_lte_rrc_HandoverCommand_PDU(parameter_tvb, actx->pinfo, subtree);
+                       break;
+               default:
+                       break;
+       }
+                       
+               
+       
+
+
   return offset;
 }
 
@@ -3690,8 +3742,19 @@ dissect_s1ap_SONConfigurationTransfer(tvbuff_t *tvb _U_, int offset _U_, asn1_ct
 
 static int
 dissect_s1ap_Source_ToTarget_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 257 "s1ap.cnf"
+#line 267 "s1ap.cnf"
+ gint32 start_offset;
+ tvbuff_t *parameter_tvb;
+ proto_tree *subtree;
  
+ start_offset = offset;
+  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+                                       NO_BOUND, NO_BOUND, FALSE, NULL);
+
+
+       parameter_tvb = tvb_new_subset(tvb, start_offset, -1, -1);
+       subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_ToTargetTransparentContainer);
+
     switch(handover_type_value){
    /*  
     HandoverType ::= ENUMERATED {
@@ -3707,19 +3770,21 @@ dissect_s1ap_Source_ToTarget_TransparentContainer(tvbuff_t *tvb _U_, int offset
                        Intra E-UTRAN handover Source eNB to Target eNB
                        Transparent Container 36.413    
                 */
-               dissect_s1ap_SourceeNB_ToTargeteNB_TransparentContainer(tvb , offset, actx ,tree , hf_s1ap_SourceeNB_ToTargeteNB_TransparentContainer_PDU );
+               dissect_SourceeNB_ToTargeteNB_TransparentContainer_PDU(parameter_tvb, actx->pinfo, subtree);
                break;
                case 1:
                /* ltetoutran 
                        Source RNC to Target RNC
                        Transparent Container 25.413
                */
+               dissect_SourceRNC_ToTargetRNC_TransparentContainer_PDU(parameter_tvb, actx->pinfo, subtree);
                break;
                case 2:
                /* ltetogeran 
                        Source BSS to Target BSS
                        Transparent Container 48.018
                */
+               dissect_SourceBSS_ToTargetBSS_TransparentContainer_PDU(parameter_tvb, actx->pinfo, subtree);
                break;
                case 3:
                /* utrantolte */
@@ -3733,8 +3798,16 @@ dissect_s1ap_Source_ToTarget_TransparentContainer(tvbuff_t *tvb _U_, int offset
        }
 
 
-       
 
+  return offset;
+}
+
+
+
+static int
+dissect_s1ap_SourceBSS_ToTargetBSS_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+                                       NO_BOUND, NO_BOUND, FALSE, NULL);
 
   return offset;
 }
@@ -3814,6 +3887,16 @@ dissect_s1ap_SourceeNB_ToTargeteNB_TransparentContainer(tvbuff_t *tvb _U_, int o
 }
 
 
+
+static int
+dissect_s1ap_SourceRNC_ToTargetRNC_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+                                       NO_BOUND, NO_BOUND, FALSE, NULL);
+
+  return offset;
+}
+
+
 static const per_sequence_t ServedPLMNs_sequence_of[1] = {
   { &hf_s1ap_ServedPLMNs_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_s1ap_PLMNidentity },
 };
@@ -3989,9 +4072,99 @@ dissect_s1ap_TargetID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, p
 }
 
 
+static const per_sequence_t TargeteNB_ToSourceeNB_TransparentContainer_sequence[] = {
+  { &hf_s1ap_rRC_Container  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_s1ap_RRC_Container },
+  { &hf_s1ap_iE_Extensions  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_s1ap_ProtocolExtensionContainer },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_s1ap_TargeteNB_ToSourceeNB_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_s1ap_TargeteNB_ToSourceeNB_TransparentContainer, TargeteNB_ToSourceeNB_TransparentContainer_sequence);
+
+  return offset;
+}
+
+
 
 static int
 dissect_s1ap_Target_ToSource_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 321 "s1ap.cnf"
+
+ gint32 start_offset;
+ tvbuff_t *parameter_tvb;
+ proto_tree *subtree;
+  
+ start_offset = offset;
+  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+                                       NO_BOUND, NO_BOUND, FALSE, NULL);
+
+
+       parameter_tvb = tvb_new_subset(tvb, start_offset, -1, -1);
+       subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_ToSourceTransparentContainer);
+
+    switch(handover_type_value){
+   /*  
+    HandoverType ::= ENUMERATED {
+    intralte,
+    ltetoutran,
+    ltetogeran,
+    utrantolte,
+    gerantolte,
+    ...
+    } */ 
+               case 0:
+               /* intralte 
+                       Intra E-UTRAN handover Target eNB to Source eNB
+                       Transparent Container 36.413    
+                */
+               dissect_TargeteNB_ToSourceeNB_TransparentContainer_PDU(parameter_tvb, actx->pinfo, subtree);
+               break;
+               case 1:
+               /* ltetoutran 
+                       Target RNC to Source RNC
+                       Transparent Container 25.413
+               */
+               dissect_TargetRNC_ToSourceRNC_TransparentContainer_PDU(parameter_tvb, actx->pinfo, subtree);
+               break;
+               case 2:
+               /* ltetogeran 
+                       Target BSS to Source BSS
+                       Transparent Container 48.018
+               */
+               dissect_TargetBSS_ToSourceBSS_TransparentContainer_PDU(parameter_tvb, actx->pinfo, subtree);
+               break;
+               case 3:
+               /* utrantolte */
+               break;
+               case 4:
+               /* gerantolte */
+               break;
+               default:
+               DISSECTOR_ASSERT_NOT_REACHED();
+               break;
+       }
+
+
+
+  return offset;
+}
+
+
+
+static int
+dissect_s1ap_TargetRNC_ToSourceRNC_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+                                       NO_BOUND, NO_BOUND, FALSE, NULL);
+
+  return offset;
+}
+
+
+
+static int
+dissect_s1ap_TargetBSS_ToSourceBSS_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
                                        NO_BOUND, NO_BOUND, FALSE, NULL);
 
@@ -4252,7 +4425,7 @@ dissect_s1ap_WarningMessageContents(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_
 
 static int
 dissect_s1ap_E_RAB_IE_ContainerList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 128 "s1ap.cnf"
+#line 132 "s1ap.cnf"
   asn1_stack_frame_push(actx, "ProtocolIE-ContainerList");
   asn1_param_push_integer(actx, 1);
   asn1_param_push_integer(actx, maxNrOfE_RABs);
@@ -4272,7 +4445,7 @@ static const per_sequence_t HandoverRequired_sequence[] = {
 
 static int
 dissect_s1ap_HandoverRequired(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 250 "s1ap.cnf"
+#line 254 "s1ap.cnf"
        handover_type_value = 0;
 
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
@@ -4289,7 +4462,7 @@ static const per_sequence_t HandoverCommand_sequence[] = {
 
 static int
 dissect_s1ap_HandoverCommand(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 252 "s1ap.cnf"
+#line 256 "s1ap.cnf"
        handover_type_value = 0;
 
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
@@ -4348,7 +4521,7 @@ static const per_sequence_t HandoverRequest_sequence[] = {
 
 static int
 dissect_s1ap_HandoverRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 254 "s1ap.cnf"
+#line 258 "s1ap.cnf"
        handover_type_value = 0;
        
 
@@ -5096,7 +5269,7 @@ static const per_sequence_t DownlinkNASTransport_sequence[] = {
 
 static int
 dissect_s1ap_DownlinkNASTransport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 237 "s1ap.cnf"
+#line 241 "s1ap.cnf"
        /* Set the direction of the message */
        actx->pinfo->link_dir=P2P_DIR_DL;
 
@@ -5115,7 +5288,7 @@ static const per_sequence_t InitialUEMessage_sequence[] = {
 
 static int
 dissect_s1ap_InitialUEMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 233 "s1ap.cnf"
+#line 237 "s1ap.cnf"
        /* Set the direction of the message */
        actx->pinfo->link_dir=P2P_DIR_UL;
 
@@ -5134,7 +5307,7 @@ static const per_sequence_t UplinkNASTransport_sequence[] = {
 
 static int
 dissect_s1ap_UplinkNASTransport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 241 "s1ap.cnf"
+#line 245 "s1ap.cnf"
        /* Set the direction of the message */
        actx->pinfo->link_dir=P2P_DIR_UL;
 
@@ -5738,6 +5911,9 @@ dissect_s1ap_KillResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U
 
 static int
 dissect_s1ap_InitiatingMessage_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 87 "s1ap.cnf"
+       message_type = INITIATING_MESSAGE;
+
   offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_InitiatingMessageValue);
 
   return offset;
@@ -5763,6 +5939,9 @@ dissect_s1ap_InitiatingMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac
 
 static int
 dissect_s1ap_SuccessfulOutcome_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 90 "s1ap.cnf"
+       message_type = SUCCESSFUL_OUTCOME;
+
   offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_SuccessfulOutcomeValue);
 
   return offset;
@@ -5788,6 +5967,12 @@ dissect_s1ap_SuccessfulOutcome(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac
 
 static int
 dissect_s1ap_UnsuccessfulOutcome_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 93 "s1ap.cnf"
+       message_type = UNSUCCESSFUL_OUTCOME;
+
+
+
+
   offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_UnsuccessfulOutcomeValue);
 
   return offset;
@@ -6243,6 +6428,14 @@ static int dissect_Source_ToTarget_TransparentContainer_PDU(tvbuff_t *tvb _U_, p
   offset += 7; offset >>= 3;
   return offset;
 }
+static int dissect_SourceBSS_ToTargetBSS_TransparentContainer_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  int offset = 0;
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
+  offset = dissect_s1ap_SourceBSS_ToTargetBSS_TransparentContainer(tvb, offset, &asn1_ctx, tree, hf_s1ap_SourceBSS_ToTargetBSS_TransparentContainer_PDU);
+  offset += 7; offset >>= 3;
+  return offset;
+}
 static int dissect_SRVCCOperationPossible_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   int offset = 0;
   asn1_ctx_t asn1_ctx;
@@ -6267,6 +6460,14 @@ static int dissect_SourceeNB_ToTargeteNB_TransparentContainer_PDU(tvbuff_t *tvb
   offset += 7; offset >>= 3;
   return offset;
 }
+static int dissect_SourceRNC_ToTargetRNC_TransparentContainer_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  int offset = 0;
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
+  offset = dissect_s1ap_SourceRNC_ToTargetRNC_TransparentContainer(tvb, offset, &asn1_ctx, tree, hf_s1ap_SourceRNC_ToTargetRNC_TransparentContainer_PDU);
+  offset += 7; offset >>= 3;
+  return offset;
+}
 static int dissect_ServedGUMMEIs_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   int offset = 0;
   asn1_ctx_t asn1_ctx;
@@ -6323,6 +6524,14 @@ static int dissect_TargetID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto
   offset += 7; offset >>= 3;
   return offset;
 }
+static int dissect_TargeteNB_ToSourceeNB_TransparentContainer_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  int offset = 0;
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
+  offset = dissect_s1ap_TargeteNB_ToSourceeNB_TransparentContainer(tvb, offset, &asn1_ctx, tree, hf_s1ap_TargeteNB_ToSourceeNB_TransparentContainer_PDU);
+  offset += 7; offset >>= 3;
+  return offset;
+}
 static int dissect_Target_ToSource_TransparentContainer_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   int offset = 0;
   asn1_ctx_t asn1_ctx;
@@ -6331,6 +6540,22 @@ static int dissect_Target_ToSource_TransparentContainer_PDU(tvbuff_t *tvb _U_, p
   offset += 7; offset >>= 3;
   return offset;
 }
+static int dissect_TargetRNC_ToSourceRNC_TransparentContainer_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  int offset = 0;
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
+  offset = dissect_s1ap_TargetRNC_ToSourceRNC_TransparentContainer(tvb, offset, &asn1_ctx, tree, hf_s1ap_TargetRNC_ToSourceRNC_TransparentContainer_PDU);
+  offset += 7; offset >>= 3;
+  return offset;
+}
+static int dissect_TargetBSS_ToSourceBSS_TransparentContainer_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  int offset = 0;
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
+  offset = dissect_s1ap_TargetBSS_ToSourceBSS_TransparentContainer(tvb, offset, &asn1_ctx, tree, hf_s1ap_TargetBSS_ToSourceBSS_TransparentContainer_PDU);
+  offset += 7; offset >>= 3;
+  return offset;
+}
 static int dissect_TimeToWait_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   int offset = 0;
   asn1_ctx_t asn1_ctx;
@@ -7246,7 +7471,7 @@ static int dissect_S1AP_PDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto
 
 
 /*--- End of included file: packet-s1ap-fn.c ---*/
-#line 108 "packet-s1ap-template.c"
+#line 124 "packet-s1ap-template.c"
 
 static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
@@ -7507,7 +7732,7 @@ proto_reg_handoff_s1ap(void)
 
 
 /*--- End of included file: packet-s1ap-dis-tab.c ---*/
-#line 177 "packet-s1ap-template.c"
+#line 193 "packet-s1ap-template.c"
        } else {
                if (SctpPort != 0) {
                        dissector_delete("sctp.port", SctpPort, s1ap_handle);
@@ -7742,6 +7967,10 @@ void proto_register_s1ap(void) {
       { "Source-ToTarget-TransparentContainer", "s1ap.Source_ToTarget_TransparentContainer",
         FT_BYTES, BASE_NONE, NULL, 0,
         "s1ap.Source_ToTarget_TransparentContainer", HFILL }},
+    { &hf_s1ap_SourceBSS_ToTargetBSS_TransparentContainer_PDU,
+      { "SourceBSS-ToTargetBSS-TransparentContainer", "s1ap.SourceBSS_ToTargetBSS_TransparentContainer",
+        FT_BYTES, BASE_NONE, NULL, 0,
+        "s1ap.SourceBSS_ToTargetBSS_TransparentContainer", HFILL }},
     { &hf_s1ap_SRVCCOperationPossible_PDU,
       { "SRVCCOperationPossible", "s1ap.SRVCCOperationPossible",
         FT_UINT32, BASE_DEC, VALS(s1ap_SRVCCOperationPossible_vals), 0,
@@ -7754,6 +7983,10 @@ void proto_register_s1ap(void) {
       { "SourceeNB-ToTargeteNB-TransparentContainer", "s1ap.SourceeNB_ToTargeteNB_TransparentContainer",
         FT_NONE, BASE_NONE, NULL, 0,
         "s1ap.SourceeNB_ToTargeteNB_TransparentContainer", HFILL }},
+    { &hf_s1ap_SourceRNC_ToTargetRNC_TransparentContainer_PDU,
+      { "SourceRNC-ToTargetRNC-TransparentContainer", "s1ap.SourceRNC_ToTargetRNC_TransparentContainer",
+        FT_BYTES, BASE_NONE, NULL, 0,
+        "s1ap.SourceRNC_ToTargetRNC_TransparentContainer", HFILL }},
     { &hf_s1ap_ServedGUMMEIs_PDU,
       { "ServedGUMMEIs", "s1ap.ServedGUMMEIs",
         FT_UINT32, BASE_DEC, NULL, 0,
@@ -7782,10 +8015,22 @@ void proto_register_s1ap(void) {
       { "TargetID", "s1ap.TargetID",
         FT_UINT32, BASE_DEC, VALS(s1ap_TargetID_vals), 0,
         "s1ap.TargetID", HFILL }},
+    { &hf_s1ap_TargeteNB_ToSourceeNB_TransparentContainer_PDU,
+      { "TargeteNB-ToSourceeNB-TransparentContainer", "s1ap.TargeteNB_ToSourceeNB_TransparentContainer",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "s1ap.TargeteNB_ToSourceeNB_TransparentContainer", HFILL }},
     { &hf_s1ap_Target_ToSource_TransparentContainer_PDU,
       { "Target-ToSource-TransparentContainer", "s1ap.Target_ToSource_TransparentContainer",
         FT_BYTES, BASE_NONE, NULL, 0,
         "s1ap.Target_ToSource_TransparentContainer", HFILL }},
+    { &hf_s1ap_TargetRNC_ToSourceRNC_TransparentContainer_PDU,
+      { "TargetRNC-ToSourceRNC-TransparentContainer", "s1ap.TargetRNC_ToSourceRNC_TransparentContainer",
+        FT_BYTES, BASE_NONE, NULL, 0,
+        "s1ap.TargetRNC_ToSourceRNC_TransparentContainer", HFILL }},
+    { &hf_s1ap_TargetBSS_ToSourceBSS_TransparentContainer_PDU,
+      { "TargetBSS-ToSourceBSS-TransparentContainer", "s1ap.TargetBSS_ToSourceBSS_TransparentContainer",
+        FT_BYTES, BASE_NONE, NULL, 0,
+        "s1ap.TargetBSS_ToSourceBSS_TransparentContainer", HFILL }},
     { &hf_s1ap_TimeToWait_PDU,
       { "TimeToWait", "s1ap.TimeToWait",
         FT_UINT32, BASE_DEC, VALS(s1ap_TimeToWait_vals), 0,
@@ -9048,13 +9293,16 @@ void proto_register_s1ap(void) {
         "s1ap.UnsuccessfulOutcome_value", HFILL }},
 
 /*--- End of included file: packet-s1ap-hfarr.c ---*/
-#line 205 "packet-s1ap-template.c"
+#line 221 "packet-s1ap-template.c"
   };
 
   /* List of subtrees */
   static gint *ett[] = {
                  &ett_s1ap,
                  &ett_s1ap_TransportLayerAddress,
+                 &ett_s1ap_ToTargetTransparentContainer,
+                 &ett_s1ap_ToSourceTransparentContainer,
+                 &ett_s1ap_RRCContainer,
 
 /*--- Included file: packet-s1ap-ettarr.c ---*/
 #line 1 "packet-s1ap-ettarr.c"
@@ -9152,6 +9400,7 @@ void proto_register_s1ap(void) {
     &ett_s1ap_TargetID,
     &ett_s1ap_TargeteNB_ID,
     &ett_s1ap_TargetRNC_ID,
+    &ett_s1ap_TargeteNB_ToSourceeNB_TransparentContainer,
     &ett_s1ap_TraceActivation,
     &ett_s1ap_UEAggregateMaximumBitrate,
     &ett_s1ap_UE_S1AP_IDs,
@@ -9262,7 +9511,7 @@ void proto_register_s1ap(void) {
     &ett_s1ap_UnsuccessfulOutcome,
 
 /*--- End of included file: packet-s1ap-ettarr.c ---*/
-#line 212 "packet-s1ap-template.c"
+#line 231 "packet-s1ap-template.c"
   };
 
   module_t *s1ap_module;