diff --git a/asn1/s1ap/packet-s1ap-template.c b/asn1/s1ap/packet-s1ap-template.c index 3827568b31..d7e6ed5eed 100644 --- a/asn1/s1ap/packet-s1ap-template.c +++ b/asn1/s1ap/packet-s1ap-template.c @@ -81,6 +81,7 @@ static guint32 ProcedureCode; static guint32 ProtocolIE_ID; static guint32 ProtocolExtensionID; static guint gbl_s1apSctpPort=SCTP_PORT_S1AP; +static guint32 handover_type_value; /* Dissector tables */ static dissector_table_t s1ap_ies_dissector_table; @@ -101,6 +102,8 @@ 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); + #include "packet-s1ap-fn.c" static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) diff --git a/asn1/s1ap/s1ap.cnf b/asn1/s1ap/s1ap.cnf index de91ab31c6..33c8c287db 100644 --- a/asn1/s1ap/s1ap.cnf +++ b/asn1/s1ap/s1ap.cnf @@ -12,6 +12,7 @@ ALIGNED #.PDU_NEW S1AP-PDU +SourceeNB-ToTargeteNB-TransparentContainer #.MAKE_ENUM ProcedureCode @@ -31,14 +32,10 @@ Presence L3-Information OldBSS-ToNewBSS-Information SourceBSS-ToTargetBSS-TransparentContainer -SourceeNB-ToTargeteNB-TransparentContainer SourceRNC-ToTargetRNC-TransparentContainer TargeteNB-ToSourceeNB-TransparentContainer TargetRNC-ToSourceRNC-TransparentContainer TargetBSS-ToSourceBSS-TransparentContainer -RRC-Container -E-RABInformationList -UE-HistoryInformation #.END @@ -243,6 +240,67 @@ MAX_VAL = asn1_param_get_integer(%(ACTX)s,"upperBound") #.FN_HDR UplinkNASTransport /* Set the direction of the message */ actx->pinfo->link_dir=P2P_DIR_UL; + +#.FN_BODY HandoverType VAL_PTR = &handover_type_value + +%(DEFAULT_BODY)s + +#Zero the value before use +#.FN_HDR HandoverRequired + handover_type_value = 0; +#.FN_HDR HandoverCommand + handover_type_value = 0; +#.FN_HDR HandoverRequest + handover_type_value = 0; + +#.FN_BODY Source-ToTarget-TransparentContainer + +# 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. + switch(handover_type_value){ + /* + HandoverType ::= ENUMERATED { + intralte, + ltetoutran, + ltetogeran, + utrantolte, + gerantolte, + ... + } */ + case 0: + /* intralte + 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 ); + break; + case 1: + /* ltetoutran + Source RNC to Target RNC + Transparent Container 25.413 + */ + break; + case 2: + /* ltetogeran + Source BSS to Target BSS + Transparent Container 48.018 + */ + break; + case 3: + /* utrantolte */ + break; + case 4: + /* gerantolte */ + break; + default: + DISSECTOR_ASSERT_NOT_REACHED(); + break; + } + + #.TYPE_ATTR ProtocolExtensionID TYPE = FT_UINT8 DISPLAY = BASE_DEC STRINGS = VALS(s1ap_ProtocolIE_ID_vals) diff --git a/epan/dissectors/packet-s1ap.c b/epan/dissectors/packet-s1ap.c index 950f46e5ac..d994829a63 100644 --- a/epan/dissectors/packet-s1ap.c +++ b/epan/dissectors/packet-s1ap.c @@ -338,6 +338,7 @@ static int hf_s1ap_SONConfigurationTransfer_PDU = -1; /* SONConfigurationTransf static int hf_s1ap_Source_ToTarget_TransparentContainer_PDU = -1; /* Source_ToTarget_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_ServedGUMMEIs_PDU = -1; /* ServedGUMMEIs */ static int hf_s1ap_ServedPLMNs_PDU = -1; /* ServedPLMNs */ static int hf_s1ap_SubscriberProfileIDforRFP_PDU = -1; /* SubscriberProfileIDforRFP */ @@ -535,6 +536,7 @@ static int hf_s1ap_eNB_ID = -1; /* ENB_ID */ static int hf_s1ap_bearers_SubjectToStatusTransferList = -1; /* Bearers_SubjectToStatusTransferList */ static int hf_s1ap_ENBX2TLAs_item = -1; /* TransportLayerAddress */ static int hf_s1ap_EPLMNs_item = -1; /* PLMNidentity */ +static int hf_s1ap_E_RABInformationList_item = -1; /* ProtocolIE_SingleContainer */ static int hf_s1ap_dL_Forwarding = -1; /* DL_Forwarding */ static int hf_s1ap_E_RABList_item = -1; /* ProtocolIE_SingleContainer */ static int hf_s1ap_cause = -1; /* Cause */ @@ -583,6 +585,11 @@ static int hf_s1ap_sourceeNB_ID = -1; /* SourceeNB_ID */ static int hf_s1ap_sONInformation = -1; /* SONInformation */ static int hf_s1ap_global_ENB_ID = -1; /* Global_ENB_ID */ static int hf_s1ap_selected_TAI = -1; /* TAI */ +static int hf_s1ap_rRC_Container = -1; /* RRC_Container */ +static int hf_s1ap_e_RABInformationList = -1; /* E_RABInformationList */ +static int hf_s1ap_targetCell_ID = -1; /* EUTRAN_CGI */ +static int hf_s1ap_subscriberProfileIDforRFP = -1; /* SubscriberProfileIDforRFP */ +static int hf_s1ap_uE_HistoryInformation = -1; /* UE_HistoryInformation */ static int hf_s1ap_ServedGUMMEIs_item = -1; /* ServedGUMMEIsItem */ static int hf_s1ap_servedPLMNs = -1; /* ServedPLMNs */ static int hf_s1ap_servedGroupIDs = -1; /* ServedGroupIDs */ @@ -615,6 +622,7 @@ static int hf_s1ap_uEaggregateMaximumBitRateUL = -1; /* BitRate */ static int hf_s1ap_uE_S1AP_ID_pair = -1; /* UE_S1AP_ID_pair */ static int hf_s1ap_mME_UE_S1AP_ID = -1; /* MME_UE_S1AP_ID */ static int hf_s1ap_eNB_UE_S1AP_ID = -1; /* ENB_UE_S1AP_ID */ +static int hf_s1ap_UE_HistoryInformation_item = -1; /* LastVisitedCell_Item */ static int hf_s1ap_s_TMSI = -1; /* S_TMSI */ static int hf_s1ap_iMSI = -1; /* IMSI */ static int hf_s1ap_encryptionAlgorithms = -1; /* EncryptionAlgorithms */ @@ -711,6 +719,7 @@ static gint ett_s1ap_Global_ENB_ID = -1; static gint ett_s1ap_ENB_StatusTransfer_TransparentContainer = -1; static gint ett_s1ap_ENBX2TLAs = -1; static gint ett_s1ap_EPLMNs = -1; +static gint ett_s1ap_E_RABInformationList = -1; static gint ett_s1ap_E_RABInformationListItem = -1; static gint ett_s1ap_E_RABList = -1; static gint ett_s1ap_E_RABItem = -1; @@ -738,6 +747,7 @@ static gint ett_s1ap_SONInformation = -1; static gint ett_s1ap_SONInformationReply = -1; static gint ett_s1ap_SONConfigurationTransfer = -1; static gint ett_s1ap_SourceeNB_ID = -1; +static gint ett_s1ap_SourceeNB_ToTargeteNB_TransparentContainer = -1; static gint ett_s1ap_ServedGUMMEIs = -1; static gint ett_s1ap_ServedGUMMEIsItem = -1; static gint ett_s1ap_ServedGroupIDs = -1; @@ -762,6 +772,7 @@ static gint ett_s1ap_UEAggregateMaximumBitrate = -1; static gint ett_s1ap_UE_S1AP_IDs = -1; static gint ett_s1ap_UE_S1AP_ID_pair = -1; static gint ett_s1ap_UE_associatedLogicalS1_ConnectionItem = -1; +static gint ett_s1ap_UE_HistoryInformation = -1; static gint ett_s1ap_UEPagingID = -1; static gint ett_s1ap_UESecurityCapabilities = -1; static gint ett_s1ap_WarningAreaList = -1; @@ -873,6 +884,7 @@ static guint32 ProcedureCode; static guint32 ProtocolIE_ID; static guint32 ProtocolExtensionID; static guint gbl_s1apSctpPort=SCTP_PORT_S1AP; +static guint32 handover_type_value; /* Dissector tables */ static dissector_table_t s1ap_ies_dissector_table; @@ -893,6 +905,8 @@ 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); + /*--- Included file: packet-s1ap-fn.c ---*/ #line 1 "packet-s1ap-fn.c" @@ -1009,7 +1023,7 @@ dissect_s1ap_ProcedureCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 255U, &ProcedureCode, FALSE); -#line 83 "s1ap.cnf" +#line 80 "s1ap.cnf" col_add_fstr(actx->pinfo->cinfo, COL_INFO, "%s ", val_to_str(ProcedureCode, s1ap_ProcedureCode_vals, "unknown message")); @@ -1164,7 +1178,7 @@ dissect_s1ap_ProtocolIE_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 65535U, &ProtocolIE_ID, FALSE); -#line 66 "s1ap.cnf" +#line 63 "s1ap.cnf" if (tree) { proto_item_append_text(proto_item_get_parent_nth(actx->created_item, 2), ": %s", val_to_str(ProtocolIE_ID, VALS(s1ap_ProtocolIE_ID_vals), "unknown (%d)")); } @@ -1244,7 +1258,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 104 "s1ap.cnf" +#line 101 "s1ap.cnf" static const asn1_par_def_t ProtocolIE_ContainerList_pars[] = { { "lowerBound", ASN1_PAR_INTEGER }, { "upperBound", ASN1_PAR_INTEGER }, @@ -1507,7 +1521,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 166 "s1ap.cnf" +#line 163 "s1ap.cnf" tvbuff_t *parameter_tvb=NULL; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, @@ -2653,7 +2667,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 178 "s1ap.cnf" +#line 175 "s1ap.cnf" tvbuff_t *parameter_tvb=NULL; int length; int p_offset; @@ -2686,7 +2700,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 213 "s1ap.cnf" +#line 210 "s1ap.cnf" tvbuff_t *parameter_tvb=NULL; proto_tree *subtree; gint tvb_len; @@ -2769,6 +2783,20 @@ dissect_s1ap_EventType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, } +static const per_sequence_t E_RABInformationList_sequence_of[1] = { + { &hf_s1ap_E_RABInformationList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_s1ap_ProtocolIE_SingleContainer }, +}; + +static int +dissect_s1ap_E_RABInformationList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_s1ap_E_RABInformationList, E_RABInformationList_sequence_of, + 1, maxNrOfE_RABs, FALSE); + + return offset; +} + + static const per_sequence_t E_RABInformationListItem_sequence[] = { { &hf_s1ap_e_RAB_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_s1ap_E_RAB_ID }, { &hf_s1ap_dL_Forwarding , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_s1ap_DL_Forwarding }, @@ -3064,8 +3092,13 @@ 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" + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, - 5, NULL, TRUE, 0, NULL); + 5, &handover_type_value, TRUE, 0, NULL); + + + return offset; } @@ -3254,7 +3287,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 204 "s1ap.cnf" +#line 201 "s1ap.cnf" tvbuff_t *parameter_tvb=NULL; @@ -3463,6 +3496,16 @@ 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_) { + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + NO_BOUND, NO_BOUND, FALSE, NULL); + + return offset; +} + + static const value_string s1ap_RRC_Establishment_Cause_vals[] = { { 0, "emergency" }, { 1, "highPriorityAccess" }, @@ -3647,8 +3690,51 @@ 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_) { - offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, - NO_BOUND, NO_BOUND, FALSE, NULL); +#line 257 "s1ap.cnf" + + switch(handover_type_value){ + /* + HandoverType ::= ENUMERATED { + intralte, + ltetoutran, + ltetogeran, + utrantolte, + gerantolte, + ... + } */ + case 0: + /* intralte + 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 ); + break; + case 1: + /* ltetoutran + Source RNC to Target RNC + Transparent Container 25.413 + */ + break; + case 2: + /* ltetogeran + Source BSS to Target BSS + Transparent Container 48.018 + */ + break; + case 3: + /* utrantolte */ + break; + case 4: + /* gerantolte */ + break; + default: + DISSECTOR_ASSERT_NOT_REACHED(); + break; + } + + + + return offset; } @@ -3685,6 +3771,49 @@ dissect_s1ap_SRVCCHOIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac } + +static int +dissect_s1ap_SubscriberProfileIDforRFP(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 1U, 256U, NULL, FALSE); + + return offset; +} + + +static const per_sequence_t UE_HistoryInformation_sequence_of[1] = { + { &hf_s1ap_UE_HistoryInformation_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_s1ap_LastVisitedCell_Item }, +}; + +static int +dissect_s1ap_UE_HistoryInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_s1ap_UE_HistoryInformation, UE_HistoryInformation_sequence_of, + 1, maxnoofCells, FALSE); + + return offset; +} + + +static const per_sequence_t SourceeNB_ToTargeteNB_TransparentContainer_sequence[] = { + { &hf_s1ap_rRC_Container , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_s1ap_RRC_Container }, + { &hf_s1ap_e_RABInformationList, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_s1ap_E_RABInformationList }, + { &hf_s1ap_targetCell_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_s1ap_EUTRAN_CGI }, + { &hf_s1ap_subscriberProfileIDforRFP, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_s1ap_SubscriberProfileIDforRFP }, + { &hf_s1ap_uE_HistoryInformation, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_s1ap_UE_HistoryInformation }, + { &hf_s1ap_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_s1ap_ProtocolExtensionContainer }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_s1ap_SourceeNB_ToTargeteNB_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_SourceeNB_ToTargeteNB_TransparentContainer, SourceeNB_ToTargeteNB_TransparentContainer_sequence); + + return offset; +} + + static const per_sequence_t ServedPLMNs_sequence_of[1] = { { &hf_s1ap_ServedPLMNs_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_s1ap_PLMNidentity }, }; @@ -3758,16 +3887,6 @@ dissect_s1ap_ServedGUMMEIs(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _ } - -static int -dissect_s1ap_SubscriberProfileIDforRFP(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { - offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, - 1U, 256U, NULL, FALSE); - - return offset; -} - - static const per_sequence_t SupportedTAs_Item_sequence[] = { { &hf_s1ap_tAC , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_s1ap_TAC }, { &hf_s1ap_broadcastPLMNs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_s1ap_BPLMNs }, @@ -4133,7 +4252,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 131 "s1ap.cnf" +#line 128 "s1ap.cnf" asn1_stack_frame_push(actx, "ProtocolIE-ContainerList"); asn1_param_push_integer(actx, 1); asn1_param_push_integer(actx, maxNrOfE_RABs); @@ -4153,6 +4272,9 @@ 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" + handover_type_value = 0; + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_s1ap_HandoverRequired, HandoverRequired_sequence); @@ -4167,6 +4289,9 @@ 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" + handover_type_value = 0; + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_s1ap_HandoverCommand, HandoverCommand_sequence); @@ -4223,6 +4348,10 @@ 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" + handover_type_value = 0; + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_s1ap_HandoverRequest, HandoverRequest_sequence); @@ -4967,7 +5096,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 240 "s1ap.cnf" +#line 237 "s1ap.cnf" /* Set the direction of the message */ actx->pinfo->link_dir=P2P_DIR_DL; @@ -4986,7 +5115,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 236 "s1ap.cnf" +#line 233 "s1ap.cnf" /* Set the direction of the message */ actx->pinfo->link_dir=P2P_DIR_UL; @@ -5005,10 +5134,10 @@ 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 244 "s1ap.cnf" +#line 241 "s1ap.cnf" /* Set the direction of the message */ actx->pinfo->link_dir=P2P_DIR_UL; - + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_s1ap_UplinkNASTransport, UplinkNASTransport_sequence); @@ -6130,6 +6259,14 @@ static int dissect_SRVCCHOIndication_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _ offset += 7; offset >>= 3; return offset; } +static int dissect_SourceeNB_ToTargeteNB_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_SourceeNB_ToTargeteNB_TransparentContainer(tvb, offset, &asn1_ctx, tree, hf_s1ap_SourceeNB_ToTargeteNB_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; @@ -7109,7 +7246,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 105 "packet-s1ap-template.c" +#line 108 "packet-s1ap-template.c" static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { @@ -7370,7 +7507,7 @@ proto_reg_handoff_s1ap(void) /*--- End of included file: packet-s1ap-dis-tab.c ---*/ -#line 174 "packet-s1ap-template.c" +#line 177 "packet-s1ap-template.c" } else { if (SctpPort != 0) { dissector_delete("sctp.port", SctpPort, s1ap_handle); @@ -7613,6 +7750,10 @@ void proto_register_s1ap(void) { { "SRVCCHOIndication", "s1ap.SRVCCHOIndication", FT_UINT32, BASE_DEC, VALS(s1ap_SRVCCHOIndication_vals), 0, "s1ap.SRVCCHOIndication", HFILL }}, + { &hf_s1ap_SourceeNB_ToTargeteNB_TransparentContainer_PDU, + { "SourceeNB-ToTargeteNB-TransparentContainer", "s1ap.SourceeNB_ToTargeteNB_TransparentContainer", + FT_NONE, BASE_NONE, NULL, 0, + "s1ap.SourceeNB_ToTargeteNB_TransparentContainer", HFILL }}, { &hf_s1ap_ServedGUMMEIs_PDU, { "ServedGUMMEIs", "s1ap.ServedGUMMEIs", FT_UINT32, BASE_DEC, NULL, 0, @@ -8401,6 +8542,10 @@ void proto_register_s1ap(void) { { "PLMNidentity", "s1ap.PLMNidentity", FT_BYTES, BASE_NONE, NULL, 0, "s1ap.PLMNidentity", HFILL }}, + { &hf_s1ap_E_RABInformationList_item, + { "ProtocolIE-SingleContainer", "s1ap.ProtocolIE_SingleContainer", + FT_NONE, BASE_NONE, NULL, 0, + "s1ap.ProtocolIE_SingleContainer", HFILL }}, { &hf_s1ap_dL_Forwarding, { "dL-Forwarding", "s1ap.dL_Forwarding", FT_UINT32, BASE_DEC, VALS(s1ap_DL_Forwarding_vals), 0, @@ -8593,6 +8738,26 @@ void proto_register_s1ap(void) { { "selected-TAI", "s1ap.selected_TAI", FT_NONE, BASE_NONE, NULL, 0, "s1ap.TAI", HFILL }}, + { &hf_s1ap_rRC_Container, + { "rRC-Container", "s1ap.rRC_Container", + FT_BYTES, BASE_NONE, NULL, 0, + "s1ap.RRC_Container", HFILL }}, + { &hf_s1ap_e_RABInformationList, + { "e-RABInformationList", "s1ap.e_RABInformationList", + FT_UINT32, BASE_DEC, NULL, 0, + "s1ap.E_RABInformationList", HFILL }}, + { &hf_s1ap_targetCell_ID, + { "targetCell-ID", "s1ap.targetCell_ID", + FT_NONE, BASE_NONE, NULL, 0, + "s1ap.EUTRAN_CGI", HFILL }}, + { &hf_s1ap_subscriberProfileIDforRFP, + { "subscriberProfileIDforRFP", "s1ap.subscriberProfileIDforRFP", + FT_UINT32, BASE_DEC, NULL, 0, + "s1ap.SubscriberProfileIDforRFP", HFILL }}, + { &hf_s1ap_uE_HistoryInformation, + { "uE-HistoryInformation", "s1ap.uE_HistoryInformation", + FT_UINT32, BASE_DEC, NULL, 0, + "s1ap.UE_HistoryInformation", HFILL }}, { &hf_s1ap_ServedGUMMEIs_item, { "ServedGUMMEIsItem", "s1ap.ServedGUMMEIsItem", FT_NONE, BASE_NONE, NULL, 0, @@ -8721,6 +8886,10 @@ void proto_register_s1ap(void) { { "eNB-UE-S1AP-ID", "s1ap.eNB_UE_S1AP_ID", FT_UINT32, BASE_DEC, NULL, 0, "s1ap.ENB_UE_S1AP_ID", HFILL }}, + { &hf_s1ap_UE_HistoryInformation_item, + { "LastVisitedCell-Item", "s1ap.LastVisitedCell_Item", + FT_UINT32, BASE_DEC, VALS(s1ap_LastVisitedCell_Item_vals), 0, + "s1ap.LastVisitedCell_Item", HFILL }}, { &hf_s1ap_s_TMSI, { "s-TMSI", "s1ap.s_TMSI", FT_NONE, BASE_NONE, NULL, 0, @@ -8879,7 +9048,7 @@ void proto_register_s1ap(void) { "s1ap.UnsuccessfulOutcome_value", HFILL }}, /*--- End of included file: packet-s1ap-hfarr.c ---*/ -#line 202 "packet-s1ap-template.c" +#line 205 "packet-s1ap-template.c" }; /* List of subtrees */ @@ -8935,6 +9104,7 @@ void proto_register_s1ap(void) { &ett_s1ap_ENB_StatusTransfer_TransparentContainer, &ett_s1ap_ENBX2TLAs, &ett_s1ap_EPLMNs, + &ett_s1ap_E_RABInformationList, &ett_s1ap_E_RABInformationListItem, &ett_s1ap_E_RABList, &ett_s1ap_E_RABItem, @@ -8962,6 +9132,7 @@ void proto_register_s1ap(void) { &ett_s1ap_SONInformationReply, &ett_s1ap_SONConfigurationTransfer, &ett_s1ap_SourceeNB_ID, + &ett_s1ap_SourceeNB_ToTargeteNB_TransparentContainer, &ett_s1ap_ServedGUMMEIs, &ett_s1ap_ServedGUMMEIsItem, &ett_s1ap_ServedGroupIDs, @@ -8986,6 +9157,7 @@ void proto_register_s1ap(void) { &ett_s1ap_UE_S1AP_IDs, &ett_s1ap_UE_S1AP_ID_pair, &ett_s1ap_UE_associatedLogicalS1_ConnectionItem, + &ett_s1ap_UE_HistoryInformation, &ett_s1ap_UEPagingID, &ett_s1ap_UESecurityCapabilities, &ett_s1ap_WarningAreaList, @@ -9090,7 +9262,7 @@ void proto_register_s1ap(void) { &ett_s1ap_UnsuccessfulOutcome, /*--- End of included file: packet-s1ap-ettarr.c ---*/ -#line 209 "packet-s1ap-template.c" +#line 212 "packet-s1ap-template.c" }; module_t *s1ap_module;