#.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
#.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 ");
#.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
Presence
L3-Information
OldBSS-ToNewBSS-Information
-SourceBSS-ToTargetBSS-TransparentContainer
-SourceRNC-ToTargetRNC-TransparentContainer
-TargeteNB-ToSourceeNB-TransparentContainer
-TargetRNC-ToSourceRNC-TransparentContainer
-TargetBSS-ToSourceBSS-TransparentContainer
#.END
#.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 ---
#.FN_HDR HandoverRequest
handover_type_value = 0;
-#.FN_BODY Source-ToTarget-TransparentContainer
-
+#.FN_BODY Source-ToTarget-TransparentContainer
+#VAL_PTR = ¶meter_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 {
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 */
break;
}
+#.FN_BODY Target-ToSource-TransparentContainer
+#VAL_PTR = ¶meter_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 = ¶meter_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)
#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" */
} 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;
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 */
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 */
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 ---*/
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;
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;
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;
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 ---*/
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 },
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,
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;
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;
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);
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;
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;
}
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 {
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 */
}
-
+ 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;
}
}
+
+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 },
};
}
+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);
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);
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,
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,
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
/*--- 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)
{
/*--- 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);
{ "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,
{ "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,
{ "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,
"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"
&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,
&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;