From d6f91a7ca421caa7787c1539bca61f943923fa9c Mon Sep 17 00:00:00 2001 From: Pascal Quantin Date: Fri, 9 Sep 2016 23:37:46 +0200 Subject: [PATCH] S1AP: prettify dissection Change-Id: I2b4339e489d11ade2751cad8874ba220d12fe3db Reviewed-on: https://code.wireshark.org/review/17615 Petri-Dish: Pascal Quantin Tested-by: Petri Dish Buildbot Reviewed-by: Pascal Quantin --- .../asn1/lte-rrc/packet-lte-rrc-template.c | 4 +- .../asn1/lte-rrc/packet-lte-rrc-template.h | 2 + epan/dissectors/asn1/ranap/ranap.cnf | 10 +- .../asn1/s1ap/S1AP-PDU-Contents.asn | 85 +- .../asn1/s1ap/S1AP-SonTransfer-IEs.asn | 8 +- .../asn1/s1ap/packet-s1ap-template.c | 286 +++++- epan/dissectors/asn1/s1ap/s1ap.cnf | 364 ++++++- epan/dissectors/packet-lte-rrc.c | 4 +- epan/dissectors/packet-lte-rrc.h | 4 +- epan/dissectors/packet-ranap.c | 144 ++- epan/dissectors/packet-ranap.h | 1 + epan/dissectors/packet-s1ap.c | 958 ++++++++++++++---- 12 files changed, 1582 insertions(+), 288 deletions(-) diff --git a/epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.c b/epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.c index 26d4669f53..d7464623aa 100644 --- a/epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.c +++ b/epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.c @@ -2198,7 +2198,7 @@ static const value_string lte_rrc_messageIdentifier_vals[] = { { 0x112b, "CMAS Identifier for operator defined use for additional languages"}, { 0, NULL}, }; -static value_string_ext lte_rrc_messageIdentifier_vals_ext = VALUE_STRING_EXT_INIT(lte_rrc_messageIdentifier_vals); +value_string_ext lte_rrc_messageIdentifier_vals_ext = VALUE_STRING_EXT_INIT(lte_rrc_messageIdentifier_vals); static const value_string lte_rrc_serialNumber_gs_vals[] = { { 0, "Display mode immediate, cell wide"}, @@ -3624,7 +3624,7 @@ void proto_register_lte_rrc(void) { NULL, HFILL }}, { &hf_lte_rrc_warningMessageSegment_decoded_page, { "Decoded Page", "lte-rrc.warningMessageSegment.decoded_page", - FT_STRING, BASE_NONE, NULL, 0, + FT_STRING, STR_UNICODE, NULL, 0, NULL, HFILL }}, { &hf_lte_rrc_interBandTDD_CA_WithDifferentConfig_bit1, { "Bit 1", "lte-rrc.interBandTDD_CA_WithDifferentConfig.bit1", diff --git a/epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.h b/epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.h index 76ad9df287..cee3512e3b 100644 --- a/epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.h +++ b/epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.h @@ -23,6 +23,8 @@ #ifndef PACKET_LTE_RRC_H #define PACKET_LTE_RRC_H +extern value_string_ext lte_rrc_messageIdentifier_vals_ext; + #include "packet-lte-rrc-exp.h" #endif /* PACKET_LTE_RRC_H */ diff --git a/epan/dissectors/asn1/ranap/ranap.cnf b/epan/dissectors/asn1/ranap/ranap.cnf index 896ee1f8c4..73a77a58c4 100644 --- a/epan/dissectors/asn1/ranap/ranap.cnf +++ b/epan/dissectors/asn1/ranap/ranap.cnf @@ -9,16 +9,18 @@ ALIGNED #.EXPORTS EncryptionInformation IntegrityProtectionInformation +InterSystemInformation-TransparentContainer_PDU +LastVisitedUTRANCell-Item_PDU Service-Handover +Source-ToTarget-TransparentContainer_PDU SourceCellID_PDU SourceRNC-ToTargetRNC-TransparentContainer_PDU TargetRNC-ToSourceRNC-TransparentContainer_PDU TargetRNC-ID TargetRNC-ID_PDU -InterSystemInformation-TransparentContainer_PDU -Source-ToTarget-TransparentContainer_PDU #.PDU +LastVisitedUTRANCell-Item RANAP-PDU SourceCellID SourceRNC-ToTargetRNC-TransparentContainer @@ -44,10 +46,6 @@ ProtocolError-IE-ContainerList Presence # NOTE when updating the asn1 spec check if these are used !!!! ForwardingIndication -LastVisitedUTRANCell-Item -UTRAN-CellID -CellType -Time-UE-StayedInCell SourceeNodeB-ToTargeteNodeB-TransparentContainer TargeteNodeB-ToSourceeNodeB-TransparentContainer #.TYPE_RENAME diff --git a/epan/dissectors/asn1/s1ap/S1AP-PDU-Contents.asn b/epan/dissectors/asn1/s1ap/S1AP-PDU-Contents.asn index 94fe190cdc..14e3a0dbfb 100644 --- a/epan/dissectors/asn1/s1ap/S1AP-PDU-Contents.asn +++ b/epan/dissectors/asn1/s1ap/S1AP-PDU-Contents.asn @@ -6,11 +6,11 @@ -- -- ************************************************************** -S1AP-PDU-Contents { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +S1AP-PDU-Contents { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-PDU-Contents (1) } -DEFINITIONS AUTOMATIC TAGS ::= +DEFINITIONS AUTOMATIC TAGS ::= BEGIN @@ -21,7 +21,7 @@ BEGIN -- ************************************************************** IMPORTS - + UEAggregateMaximumBitrate, BearerType, Cause, @@ -39,7 +39,7 @@ IMPORTS CriticalityDiagnostics, CSFallbackIndicator, CSG-Id, - CSG-IdList, + CSG-IdList, CSGMembershipStatus, Data-Forwarding-Not-Possible, Direct-Forwarding-Path-Availability, @@ -94,7 +94,7 @@ IMPORTS SupportedTAs, TAI, Target-ToSource-TransparentContainer, - TargetBSS-ToSourceBSS-TransparentContainer, + TargetBSS-ToSourceBSS-TransparentContainer, TargeteNB-ToSourceeNB-TransparentContainer, TargetID, TargetRNC-ToSourceRNC-TransparentContainer, @@ -199,7 +199,7 @@ FROM S1AP-Containers id-EUTRAN-CGI, id-eNBname, id-eNB-StatusTransfer-TransparentContainer, - id-eNB-UE-S1AP-ID, + id-eNB-UE-S1AP-ID, id-GERANtoLTEHOInformationRes, id-GUMMEI-ID, id-GUMMEIType, @@ -263,7 +263,7 @@ FROM S1AP-Containers id-E-RABNotToBeModifiedItemBearerModInd, id-E-RABModifyListBearerModConf, id-E-RABModifyItemBearerModConf, - id-E-RABFailedToModifyListBearerModConf, + id-E-RABFailedToModifyListBearerModConf, id-E-RABToBeReleasedListBearerModConf, id-E-RABToBeReleasedList, id-E-RABReleasedList, @@ -403,7 +403,7 @@ HandoverRequired ::= SEQUENCE { ... } -HandoverRequiredIEs S1AP-PROTOCOL-IES ::= { +HandoverRequiredIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-HandoverType CRITICALITY reject TYPE HandoverType PRESENCE mandatory}| @@ -433,7 +433,7 @@ HandoverCommand ::= SEQUENCE { ... } -HandoverCommandIEs S1AP-PROTOCOL-IES ::= { +HandoverCommandIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-HandoverType CRITICALITY reject TYPE HandoverType PRESENCE mandatory}| @@ -481,7 +481,7 @@ HandoverPreparationFailure ::= SEQUENCE { ... } -HandoverPreparationFailureIEs S1AP-PROTOCOL-IES ::= { +HandoverPreparationFailureIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| @@ -567,7 +567,7 @@ HandoverRequestAcknowledge ::= SEQUENCE { ... } -HandoverRequestAcknowledgeIEs S1AP-PROTOCOL-IES ::= { +HandoverRequestAcknowledgeIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-E-RABAdmittedList CRITICALITY ignore TYPE E-RABAdmittedList PRESENCE mandatory }| @@ -632,7 +632,7 @@ HandoverFailure ::= SEQUENCE { ... } -HandoverFailureIEs S1AP-PROTOCOL-IES ::= { +HandoverFailureIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, @@ -656,12 +656,12 @@ HandoverNotify ::= SEQUENCE { ... } -HandoverNotifyIEs S1AP-PROTOCOL-IES ::= { +HandoverNotifyIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory}| { ID id-TAI CRITICALITY ignore TYPE TAI PRESENCE mandatory}| --- Extension for Release 11 to support BBAI -- +-- Extension for Release 11 to support BBAI -- { ID id-Tunnel-Information-for-BBF CRITICALITY ignore TYPE TunnelInformation PRESENCE optional}| { ID id-LHN-ID CRITICALITY ignore TYPE LHN-ID PRESENCE optional}, ... @@ -684,7 +684,7 @@ PathSwitchRequest ::= SEQUENCE { ... } -PathSwitchRequestIEs S1AP-PROTOCOL-IES ::= { +PathSwitchRequestIEs S1AP-PROTOCOL-IES ::= { { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-E-RABToBeSwitchedDLList CRITICALITY reject TYPE E-RABToBeSwitchedDLList PRESENCE mandatory}| { ID id-SourceMME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| @@ -695,7 +695,7 @@ PathSwitchRequestIEs S1AP-PROTOCOL-IES ::= { { ID id-CellAccessMode CRITICALITY ignore TYPE CellAccessMode PRESENCE optional}| { ID id-SourceMME-GUMMEI CRITICALITY ignore TYPE GUMMEI PRESENCE optional}| { ID id-CSGMembershipStatus CRITICALITY ignore TYPE CSGMembershipStatus PRESENCE optional}| --- Extension for Release 11 to support BBAI -- +-- Extension for Release 11 to support BBAI -- { ID id-Tunnel-Information-for-BBF CRITICALITY ignore TYPE TunnelInformation PRESENCE optional}| { ID id-LHN-ID CRITICALITY ignore TYPE LHN-ID PRESENCE optional}, ... @@ -731,7 +731,7 @@ PathSwitchRequestAcknowledge ::= SEQUENCE { ... } -PathSwitchRequestAcknowledgeIEs S1AP-PROTOCOL-IES ::= { +PathSwitchRequestAcknowledgeIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-uEaggregateMaximumBitrate CRITICALITY ignore TYPE UEAggregateMaximumBitrate PRESENCE optional}| @@ -777,7 +777,7 @@ PathSwitchRequestFailure ::= SEQUENCE { ... } -PathSwitchRequestFailureIEs S1AP-PROTOCOL-IES ::= { +PathSwitchRequestFailureIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| @@ -802,7 +802,7 @@ HandoverCancel ::= SEQUENCE { ... } -HandoverCancelIEs S1AP-PROTOCOL-IES ::= { +HandoverCancelIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, @@ -820,7 +820,7 @@ HandoverCancelAcknowledge ::= SEQUENCE { ... } -HandoverCancelAcknowledgeIEs S1AP-PROTOCOL-IES ::= { +HandoverCancelAcknowledgeIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, @@ -1055,7 +1055,7 @@ E-RABReleaseResponseIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABReleaseListBearerRelComp CRITICALITY ignore TYPE E-RABReleaseListBearerRelComp PRESENCE optional }| { ID id-E-RABFailedToReleaseList CRITICALITY ignore TYPE E-RABList PRESENCE optional }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| --- Extension for Release 12 to support User Location Information -- +-- Extension for Release 12 to support User Location Information -- { ID id-UserLocationInformation CRITICALITY ignore TYPE UserLocationInformation PRESENCE optional }, ... } @@ -1102,7 +1102,7 @@ E-RABReleaseIndicationIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-E-RABReleasedList CRITICALITY ignore TYPE E-RABList PRESENCE mandatory }| --- Extension for Release 12 to support User Location Information -- +-- Extension for Release 12 to support User Location Information -- { ID id-UserLocationInformation CRITICALITY ignore TYPE UserLocationInformation PRESENCE optional }, ... } @@ -1350,7 +1350,7 @@ UEContextReleaseComplete-IEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| --- Extension for Release 12 to support User Location Information -- +-- Extension for Release 12 to support User Location Information -- { ID id-UserLocationInformation CRITICALITY ignore TYPE UserLocationInformation PRESENCE optional}| -- Extension for Release 13 to support Paging Optimisation { ID id-InformationOnRecommendedCellsAndENBsForPaging CRITICALITY ignore TYPE InformationOnRecommendedCellsAndENBsForPaging PRESENCE optional}| @@ -1377,7 +1377,7 @@ UEContextModificationRequest ::= SEQUENCE { ... } -UEContextModificationRequestIEs S1AP-PROTOCOL-IES ::= { +UEContextModificationRequestIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-SecurityKey CRITICALITY reject TYPE SecurityKey PRESENCE optional}| @@ -1402,7 +1402,7 @@ UEContextModificationResponse ::= SEQUENCE { ... } -UEContextModificationResponseIEs S1AP-PROTOCOL-IES ::= { +UEContextModificationResponseIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, @@ -1419,7 +1419,7 @@ UEContextModificationFailure ::= SEQUENCE { ... } -UEContextModificationFailureIEs S1AP-PROTOCOL-IES ::= { +UEContextModificationFailureIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| @@ -1444,7 +1444,7 @@ UERadioCapabilityMatchRequest ::= SEQUENCE { ... } -UERadioCapabilityMatchRequestIEs S1AP-PROTOCOL-IES ::= { +UERadioCapabilityMatchRequestIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-UERadioCapability CRITICALITY ignore TYPE UERadioCapability PRESENCE optional }, @@ -1462,7 +1462,7 @@ UERadioCapabilityMatchResponse ::= SEQUENCE { ... } -UERadioCapabilityMatchResponseIEs S1AP-PROTOCOL-IES ::= { +UERadioCapabilityMatchResponseIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-VoiceSupportMatchIndicator CRITICALITY reject TYPE VoiceSupportMatchIndicator PRESENCE mandatory }| @@ -1523,7 +1523,7 @@ InitialUEMessage-IEs S1AP-PROTOCOL-IES ::= { { ID id-GW-TransportLayerAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE optional}| { ID id-RelayNode-Indicator CRITICALITY reject TYPE RelayNode-Indicator PRESENCE optional}| { ID id-GUMMEIType CRITICALITY ignore TYPE GUMMEIType PRESENCE optional}| --- Extension for Release 11 to support BBAI -- +-- Extension for Release 11 to support BBAI -- { ID id-Tunnel-Information-for-BBF CRITICALITY ignore TYPE TunnelInformation PRESENCE optional}| { ID id-SIPTO-L-GW-TransportLayerAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE optional}| { ID id-LHN-ID CRITICALITY ignore TYPE LHN-ID PRESENCE optional}| @@ -1585,10 +1585,15 @@ RerouteNASRequest ::= SEQUENCE { ... } +-- WS modification, add a definition for S1 Message +S1-Message ::= OCTET STRING + RerouteNASRequest-IEs S1AP-PROTOCOL-IES ::= { { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE optional}| - { ID id-S1-Message CRITICALITY reject TYPE OCTET STRING PRESENCE mandatory}| +-- WS modification, add a definition for S1 Message +-- { ID id-S1-Message CRITICALITY reject TYPE OCTET STRING PRESENCE mandatory}| + { ID id-S1-Message CRITICALITY reject TYPE S1-Message PRESENCE mandatory}| { ID id-MME-Group-ID CRITICALITY reject TYPE MME-Group-ID PRESENCE mandatory}| { ID id-Additional-GUTI CRITICALITY ignore TYPE Additional-GUTI PRESENCE optional}| { ID id-UE-Usage-Type CRITICALITY ignore TYPE UE-Usage-Type PRESENCE optional}, @@ -1764,7 +1769,7 @@ S1SetupFailureIEs S1AP-PROTOCOL-IES ::= { -- ************************************************************** -- --- eNB Configuration Update +-- eNB Configuration Update -- -- ************************************************************** @@ -1826,7 +1831,7 @@ ENBConfigurationUpdateFailureIEs S1AP-PROTOCOL-IES ::= { -- ************************************************************** -- --- MME Configuration Update +-- MME Configuration Update -- -- ************************************************************** @@ -2148,7 +2153,7 @@ LocationReportingFailureIndicationIEs S1AP-PROTOCOL-IES ::= { -- ************************************************************** -- --- Location Report +-- Location Report -- -- ************************************************************** @@ -2183,7 +2188,7 @@ OverloadStart ::= SEQUENCE { ... } -OverloadStartIEs S1AP-PROTOCOL-IES ::= { +OverloadStartIEs S1AP-PROTOCOL-IES ::= { { ID id-OverloadResponse CRITICALITY reject TYPE OverloadResponse PRESENCE mandatory }| { ID id-GUMMEIList CRITICALITY ignore TYPE GUMMEIList PRESENCE optional }| { ID id-TrafficLoadReductionIndication CRITICALITY ignore TYPE TrafficLoadReductionIndication PRESENCE optional }, @@ -2200,13 +2205,13 @@ OverloadStop ::= SEQUENCE { ... } -OverloadStopIEs S1AP-PROTOCOL-IES ::= { +OverloadStopIEs S1AP-PROTOCOL-IES ::= { { ID id-GUMMEIList CRITICALITY ignore TYPE GUMMEIList PRESENCE optional }, ... } -- ************************************************************** -- --- WRITE-REPLACE WARNING ELEMENTARY PROCEDURE +-- WRITE-REPLACE WARNING ELEMENTARY PROCEDURE -- -- ************************************************************** @@ -2222,7 +2227,7 @@ WriteReplaceWarningRequest ::= SEQUENCE { ... } -WriteReplaceWarningRequestIEs S1AP-PROTOCOL-IES ::= { +WriteReplaceWarningRequestIEs S1AP-PROTOCOL-IES ::= { { ID id-MessageIdentifier CRITICALITY reject TYPE MessageIdentifier PRESENCE mandatory }| { ID id-SerialNumber CRITICALITY reject TYPE SerialNumber PRESENCE mandatory }| { ID id-WarningAreaList CRITICALITY ignore TYPE WarningAreaList PRESENCE optional }| @@ -2386,7 +2391,7 @@ KillRequest ::= SEQUENCE { ... } -KillRequestIEs S1AP-PROTOCOL-IES ::= { +KillRequestIEs S1AP-PROTOCOL-IES ::= { { ID id-MessageIdentifier CRITICALITY reject TYPE MessageIdentifier PRESENCE mandatory}| { ID id-SerialNumber CRITICALITY reject TYPE SerialNumber PRESENCE mandatory}| { ID id-WarningAreaList CRITICALITY ignore TYPE WarningAreaList PRESENCE optional}| @@ -2557,7 +2562,7 @@ E-RABModificationIndicationIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABToBeModifiedListBearerModInd CRITICALITY reject TYPE E-RABToBeModifiedListBearerModInd PRESENCE mandatory}| { ID id-E-RABNotToBeModifiedListBearerModInd CRITICALITY reject TYPE E-RABNotToBeModifiedListBearerModInd PRESENCE optional}| { ID id-CSGMembershipInfo CRITICALITY reject TYPE CSGMembershipInfo PRESENCE optional}| --- Extension for Release 11 to support BBAI -- +-- Extension for Release 11 to support BBAI -- { ID id-Tunnel-Information-for-BBF CRITICALITY ignore TYPE TunnelInformation PRESENCE optional}, ... } diff --git a/epan/dissectors/asn1/s1ap/S1AP-SonTransfer-IEs.asn b/epan/dissectors/asn1/s1ap/S1AP-SonTransfer-IEs.asn index 9acfbd1d12..2c2cfc4c34 100644 --- a/epan/dissectors/asn1/s1ap/S1AP-SonTransfer-IEs.asn +++ b/epan/dissectors/asn1/s1ap/S1AP-SonTransfer-IEs.asn @@ -5,14 +5,14 @@ -- IE definitions for the SON Transfer application -- The IEs in this ASN.1 module shall be defined and encoded -- using the same rules as applicable for the S1AP-IEs module. --- +-- -- ************************************************************** SonTransfer-IEs -DEFINITIONS AUTOMATIC TAGS ::= +DEFINITIONS AUTOMATIC TAGS ::= BEGIN @@ -155,7 +155,7 @@ ReportingCellList ::= SEQUENCE (SIZE(1.. maxnoofIRATReportingCells)) OF Reportin MultiCellLoadReportingResponse ::= SEQUENCE (SIZE(1.. maxnoofIRATReportingCells)) OF MultiCellLoadReportingResponse-Item -MultiCellLoadReportingResponse-Item ::= CHOICE{ +MultiCellLoadReportingResponse-Item ::= CHOICE{ eUTRANResponse EUTRANResponse, uTRANResponse OCTET STRING, gERANResponse OCTET STRING, @@ -294,7 +294,7 @@ TooEarlyInterRATHOReportReportFromEUTRAN ::= SEQUENCE { ... } --- Ws modification, allready defined in S1AP-IEs.asn +-- WS modification, already defined in S1AP-IEs.asn --MobilityInformation ::= BIT STRING (SIZE(32)) diff --git a/epan/dissectors/asn1/s1ap/packet-s1ap-template.c b/epan/dissectors/asn1/s1ap/packet-s1ap-template.c index 0de9f1f343..4087f93e91 100644 --- a/epan/dissectors/asn1/s1ap/packet-s1ap-template.c +++ b/epan/dissectors/asn1/s1ap/packet-s1ap-template.c @@ -33,6 +33,7 @@ #include #include #include +#include #include "packet-ber.h" #include "packet-per.h" @@ -43,11 +44,9 @@ #include "packet-bssgp.h" #include "packet-s1ap.h" #include "packet-a21.h" - -#ifdef _MSC_VER -/* disable: "warning C4146: unary minus operator applied to unsigned type, result still unsigned" */ -#pragma warning(disable:4146) -#endif +#include "packet-gsm_map.h" +#include "packet-cell_broadcast.h" +#include "packet-gsm_a_common.h" #define PNAME "S1 Application Protocol" #define PSNAME "S1AP" @@ -70,6 +69,39 @@ static int proto_s1ap = -1; static int hf_s1ap_transportLayerAddressIPv4 = -1; static int hf_s1ap_transportLayerAddressIPv6 = -1; +static int hf_s1ap_E_UTRAN_Trace_ID_TraceID = -1; +static int hf_s1ap_E_UTRAN_Trace_ID_TraceRecordingSessionReference = -1; +static int hf_s1ap_interfacesToTrace_S1_MME = -1; +static int hf_s1ap_interfacesToTrace_X2 = -1; +static int hf_s1ap_interfacesToTrace_Uu = -1; +static int hf_s1ap_interfacesToTrace_Reserved = -1; +static int hf_s1ap_encryptionAlgorithms_EEA1 = -1; +static int hf_s1ap_encryptionAlgorithms_EEA2 = -1; +static int hf_s1ap_encryptionAlgorithms_EEA3 = -1; +static int hf_s1ap_encryptionAlgorithms_Reserved = -1; +static int hf_s1ap_integrityProtectionAlgorithms_EIA1 = -1; +static int hf_s1ap_integrityProtectionAlgorithms_EIA2 = -1; +static int hf_s1ap_integrityProtectionAlgorithms_EIA3 = -1; +static int hf_s1ap_integrityProtectionAlgorithms_Reserved = -1; +static int hf_s1ap_SerialNumber_gs = -1; +static int hf_s1ap_SerialNumber_msg_code = -1; +static int hf_s1ap_SerialNumber_upd_nb = -1; +static int hf_s1ap_WarningType_value = -1; +static int hf_s1ap_WarningType_emergency_user_alert = -1; +static int hf_s1ap_WarningType_popup = -1; +static int hf_s1ap_WarningMessageContents_nb_pages = -1; +static int hf_s1ap_WarningMessageContents_decoded_page = -1; +static int hf_s1ap_measurementsToActivate_M1 = -1; +static int hf_s1ap_measurementsToActivate_M2 = -1; +static int hf_s1ap_measurementsToActivate_M3 = -1; +static int hf_s1ap_measurementsToActivate_M4 = -1; +static int hf_s1ap_measurementsToActivate_M5 = -1; +static int hf_s1ap_measurementsToActivate_LoggingM1FromEventTriggered = -1; +static int hf_s1ap_measurementsToActivate_M6 = -1; +static int hf_s1ap_measurementsToActivate_M7 = -1; +static int hf_s1ap_MDT_Location_Info_GNSS = -1; +static int hf_s1ap_MDT_Location_Info_E_CID = -1; +static int hf_s1ap_MDT_Location_Info_Reserved = -1; #include "packet-s1ap-hf.c" /* Initialize the subtree pointers */ @@ -87,16 +119,31 @@ static int ett_s1ap_UE_HistoryInformationFromTheUE = -1; static int ett_s1ap_CELevel = -1; static int ett_s1ap_UE_RLF_Report_Container = -1; static int ett_s1ap_UE_RLF_Report_Container_for_extended_bands = -1; - +static int ett_s1ap_S1_Message = -1; +static int ett_s1ap_E_UTRAN_Trace_ID = -1; +static int ett_s1ap_InterfacesToTrace = -1; +static int ett_s1ap_EncryptionAlgorithms = -1; +static int ett_s1ap_IntegrityProtectionAlgorithms = -1; +static int ett_s1ap_LastVisitedUTRANCellInformation = -1; +static int ett_s1ap_SerialNumber = -1; +static int ett_s1ap_WarningType = -1; +static int ett_s1ap_DataCodingScheme = -1; +static int ett_s1ap_WarningMessageContents = -1; +static int ett_s1ap_MSClassmark = -1; +static int ett_s1ap_MeasurementsToActivate = -1; +static int ett_s1ap_MDT_Location_Info = -1; +static int ett_s1ap_IMSI = -1; +static int ett_s1ap_NASSecurityParameters = -1; #include "packet-s1ap-ett.c" +static expert_field ei_s1ap_number_pages_le15 = EI_INIT; + enum{ INITIATING_MESSAGE, SUCCESSFUL_OUTCOME, UNSUCCESSFUL_OUTCOME }; - /* Global variables */ static guint32 ProcedureCode; static guint32 ProtocolIE_ID; @@ -106,6 +153,7 @@ static guint32 handover_type_value; static guint32 message_type; static gboolean g_s1ap_dissect_container = TRUE; static const char *obj_id = NULL; +static guint8 dataCodingScheme = SMS_ENCODING_NOT_SET; static dissector_handle_t gcsna_handle = NULL; static dissector_handle_t s1ap_handle; @@ -132,6 +180,7 @@ static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, p static int dissect_SourceeNB_ToTargeteNB_TransparentContainer_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *); static int dissect_TargeteNB_ToSourceeNB_TransparentContainer_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *); +static int dissect_InitialUEMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data); #if 0 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); @@ -151,6 +200,74 @@ s1ap_Threshold_RSRQ_fmt(gchar *s, guint32 v) g_snprintf(s, ITEM_LABEL_LENGTH, "%.1fdB (%u)", ((float)v/2)-20, v); } +static const true_false_string s1ap_tfs_interfacesToTrace = { + "Should be traced", + "Should not be traced" +}; + +static void +s1ap_Time_UE_StayedInCell_EnhancedGranularity_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%.1fs", ((float)v)/10); +} + +static const value_string s1ap_serialNumber_gs_vals[] = { + { 0, "Display mode immediate, cell wide"}, + { 1, "Display mode normal, PLMN wide"}, + { 2, "Display mode normal, tracking area wide"}, + { 3, "Display mode normal, cell wide"}, + { 0, NULL}, +}; + +static const value_string s1ap_warningType_vals[] = { + { 0, "Earthquake"}, + { 1, "Tsunami"}, + { 2, "Earthquake and Tsunami"}, + { 3, "Test"}, + { 4, "Other"}, + { 0, NULL}, +}; + +static void +dissect_s1ap_warningMessageContents(tvbuff_t *warning_msg_tvb, proto_tree *tree, packet_info *pinfo, guint8 dcs) +{ + guint32 offset; + guint8 nb_of_pages, length, *str; + proto_item *ti; + tvbuff_t *cb_data_page_tvb, *cb_data_tvb; + int i; + + nb_of_pages = tvb_get_guint8(warning_msg_tvb, 0); + ti = proto_tree_add_uint(tree, hf_s1ap_WarningMessageContents_nb_pages, warning_msg_tvb, 0, 1, nb_of_pages); + if (nb_of_pages > 15) { + expert_add_info_format(pinfo, ti, &ei_s1ap_number_pages_le15, + "Number of pages should be <=15 (found %u)", nb_of_pages); + nb_of_pages = 15; + } + for (i = 0, offset = 1; i < nb_of_pages; i++) { + length = tvb_get_guint8(warning_msg_tvb, offset+82); + cb_data_page_tvb = tvb_new_subset_length(warning_msg_tvb, offset, length); + cb_data_tvb = dissect_cbs_data(dcs, cb_data_page_tvb, tree, pinfo, 0); + if (cb_data_tvb) { + str = tvb_get_string_enc(wmem_packet_scope(), cb_data_tvb, 0, tvb_reported_length(cb_data_tvb), ENC_UTF_8|ENC_NA); + proto_tree_add_string_format(tree, hf_s1ap_WarningMessageContents_decoded_page, warning_msg_tvb, offset, 83, + str, "Decoded Page %u: %s", i+1, str); + } + offset += 83; + } +} + +static void +s1ap_EUTRANRoundTripDelayEstimationInfo_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%uTs (%u)", 16*v, v); +} + +static const true_false_string s1ap_tfs_activate_do_not_activate = { + "Activate", + "Do not activate" +}; + #include "packet-s1ap-fn.c" static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) @@ -264,7 +381,138 @@ void proto_register_s1ap(void) { { "transportLayerAddress(IPv6)", "s1ap.transportLayerAddressIPv6", FT_IPv6, BASE_NONE, NULL, 0, NULL, HFILL }}, - + { &hf_s1ap_E_UTRAN_Trace_ID_TraceID, + { "TraceID", "s1ap.E_UTRAN_Trace_ID.TraceID", + FT_UINT24, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_s1ap_E_UTRAN_Trace_ID_TraceRecordingSessionReference, + { "TraceRecordingSessionReference", "s1ap.E_UTRAN_Trace_ID.TraceRecordingSessionReference", + FT_UINT16, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_s1ap_interfacesToTrace_S1_MME, + { "S1-MME", "s1ap.interfacesToTrace.S1_MME", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_interfacesToTrace), 0x80, + NULL, HFILL }}, + { &hf_s1ap_interfacesToTrace_X2, + { "X2", "s1ap.interfacesToTrace.X2", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_interfacesToTrace), 0x40, + NULL, HFILL }}, + { &hf_s1ap_interfacesToTrace_Uu, + { "Uu", "s1ap.interfacesToTrace.Uu", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_interfacesToTrace), 0x20, + NULL, HFILL }}, + { &hf_s1ap_interfacesToTrace_Reserved, + { "Reserved", "s1ap.interfacesToTrace.Reserved", + FT_UINT8, BASE_HEX, NULL, 0x1f, + NULL, HFILL }}, + { &hf_s1ap_encryptionAlgorithms_EEA1, + { "128-EEA1", "s1ap.encryptionAlgorithms.EEA1", + FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x8000, + NULL, HFILL }}, + { &hf_s1ap_encryptionAlgorithms_EEA2, + { "128-EEA2", "s1ap.encryptionAlgorithms.EEA2", + FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x4000, + NULL, HFILL }}, + { &hf_s1ap_encryptionAlgorithms_EEA3, + { "128-EEA3", "s1ap.encryptionAlgorithms.EEA3", + FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x2000, + NULL, HFILL }}, + { &hf_s1ap_encryptionAlgorithms_Reserved, + { "Reserved", "s1ap.encryptionAlgorithms.Reserved", + FT_UINT16, BASE_HEX, NULL, 0x1fff, + NULL, HFILL }}, + { &hf_s1ap_integrityProtectionAlgorithms_EIA1, + { "128-EIA1", "s1ap.integrityProtectionAlgorithms.EIA1", + FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x8000, + NULL, HFILL }}, + { &hf_s1ap_integrityProtectionAlgorithms_EIA2, + { "128-EIA2", "s1ap.integrityProtectionAlgorithms.EIA2", + FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x4000, + NULL, HFILL }}, + { &hf_s1ap_integrityProtectionAlgorithms_EIA3, + { "128-EIA3", "s1ap.integrityProtectionAlgorithms.EIA3", + FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x2000, + NULL, HFILL }}, + { &hf_s1ap_integrityProtectionAlgorithms_Reserved, + { "Reserved", "s1ap.integrityProtectionAlgorithms.Reserved", + FT_UINT16, BASE_HEX, NULL, 0x1fff, + NULL, HFILL }}, + { &hf_s1ap_SerialNumber_gs, + { "Geographical Scope", "s1ap.SerialNumber.gs", + FT_UINT16, BASE_DEC, VALS(s1ap_serialNumber_gs_vals), 0xc000, + NULL, HFILL }}, + { &hf_s1ap_SerialNumber_msg_code, + { "Message Code", "s1ap.SerialNumber.msg_code", + FT_UINT16, BASE_DEC, NULL, 0x3ff0, + NULL, HFILL }}, + { &hf_s1ap_SerialNumber_upd_nb, + { "Update Number", "s1ap.SerialNumber.upd_nb", + FT_UINT16, BASE_DEC, NULL, 0x000f, + NULL, HFILL }}, + { &hf_s1ap_WarningType_value, + { "Warning Type Value", "s1ap.WarningType.value", + FT_UINT16, BASE_DEC, VALS(s1ap_warningType_vals), 0xfe00, + NULL, HFILL }}, + { &hf_s1ap_WarningType_emergency_user_alert, + { "Emergency User Alert", "s1ap.WarningType.emergency_user_alert", + FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0100, + NULL, HFILL }}, + { &hf_s1ap_WarningType_popup, + { "Popup", "s1ap.WarningType.popup", + FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0080, + NULL, HFILL }}, + { &hf_s1ap_WarningMessageContents_nb_pages, + { "Number of Pages", "s1ap.WarningMessageContents.nb_pages", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_s1ap_WarningMessageContents_decoded_page, + { "Decoded Page", "lte-rrc.WarningMessageContents.decoded_page", + FT_STRING, STR_UNICODE, NULL, 0, + NULL, HFILL }}, + { &hf_s1ap_measurementsToActivate_M1, + { "M1", "s1ap.measurementsToActivate.M1", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x80, + NULL, HFILL }}, + { &hf_s1ap_measurementsToActivate_M2, + { "M2", "s1ap.measurementsToActivate.M2", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x40, + NULL, HFILL }}, + { &hf_s1ap_measurementsToActivate_M3, + { "M3", "s1ap.measurementsToActivate.M3", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x20, + NULL, HFILL }}, + { &hf_s1ap_measurementsToActivate_M4, + { "M4", "s1ap.measurementsToActivate.M4", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x10, + NULL, HFILL }}, + { &hf_s1ap_measurementsToActivate_M5, + { "M5", "s1ap.measurementsToActivate.M5", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x08, + NULL, HFILL }}, + { &hf_s1ap_measurementsToActivate_LoggingM1FromEventTriggered, + { "LoggingOfM1FromEventTriggeredMeasurementReports", "s1ap.measurementsToActivate.LoggingM1FromEventTriggered", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x04, + NULL, HFILL }}, + { &hf_s1ap_measurementsToActivate_M6, + { "M6", "s1ap.measurementsToActivate.M6", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x02, + NULL, HFILL }}, + { &hf_s1ap_measurementsToActivate_M7, + { "M7", "s1ap.measurementsToActivate.M7", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x01, + NULL, HFILL }}, + { &hf_s1ap_MDT_Location_Info_GNSS, + { "GNSS", "s1ap.MDT_Location_Info.GNSS", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x80, + NULL, HFILL }}, + { &hf_s1ap_MDT_Location_Info_E_CID, + { "E-CID", "s1ap.MDT_Location_Info.E_CID", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x40, + NULL, HFILL }}, + { &hf_s1ap_MDT_Location_Info_Reserved, + { "Reserved", "s1ap.MDT_Location_Info.Reserved", + FT_UINT8, BASE_HEX, NULL, 0x3f, + NULL, HFILL }}, #include "packet-s1ap-hfarr.c" }; @@ -284,16 +532,38 @@ void proto_register_s1ap(void) { &ett_s1ap_CELevel, &ett_s1ap_UE_RLF_Report_Container, &ett_s1ap_UE_RLF_Report_Container_for_extended_bands, + &ett_s1ap_S1_Message, + &ett_s1ap_E_UTRAN_Trace_ID, + &ett_s1ap_InterfacesToTrace, + &ett_s1ap_EncryptionAlgorithms, + &ett_s1ap_IntegrityProtectionAlgorithms, + &ett_s1ap_LastVisitedUTRANCellInformation, + &ett_s1ap_SerialNumber, + &ett_s1ap_WarningType, + &ett_s1ap_DataCodingScheme, + &ett_s1ap_WarningMessageContents, + &ett_s1ap_MSClassmark, + &ett_s1ap_MeasurementsToActivate, + &ett_s1ap_MDT_Location_Info, + &ett_s1ap_IMSI, + &ett_s1ap_NASSecurityParameters, #include "packet-s1ap-ettarr.c" }; + static ei_register_info ei[] = { + { &ei_s1ap_number_pages_le15, { "s1ap.number_pages_le15", PI_MALFORMED, PI_ERROR, "Number of pages should be <=15", EXPFILL }} + }; + module_t *s1ap_module; + expert_module_t* expert_s1ap; /* Register protocol */ proto_s1ap = proto_register_protocol(PNAME, PSNAME, PFNAME); /* Register fields and subtrees */ proto_register_field_array(proto_s1ap, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_s1ap = expert_register_protocol(proto_s1ap); + expert_register_field_array(expert_s1ap, ei, array_length(ei)); /* Register dissector */ s1ap_handle = register_dissector("s1ap", dissect_s1ap, proto_s1ap); diff --git a/epan/dissectors/asn1/s1ap/s1ap.cnf b/epan/dissectors/asn1/s1ap/s1ap.cnf index e740cebe34..738bc6628c 100644 --- a/epan/dissectors/asn1/s1ap/s1ap.cnf +++ b/epan/dissectors/asn1/s1ap/s1ap.cnf @@ -236,18 +236,30 @@ obj_id = NULL; } } if (is_ascii) - proto_item_append_text(actx->created_item,"(%%s)",tvb_format_text(parameter_tvb, 0, length)); + proto_item_append_text(actx->created_item," (%%s)",tvb_format_text(parameter_tvb, 0, length)); - -#.FN_BODY TAC VAL_PTR = ¶meter_tvb -tvbuff_t *parameter_tvb=NULL; +#.FN_BODY MMEname VAL_PTR = parameter_tvb + tvbuff_t *parameter_tvb=NULL; + int length; + int p_offset; + gboolean is_ascii; %(DEFAULT_BODY)s if (!parameter_tvb) return offset; - proto_item_append_text(actx->created_item," (%%u)",tvb_get_ntohs(parameter_tvb, 0)); + length = tvb_reported_length(parameter_tvb); + + is_ascii = TRUE; + for (p_offset=0; p_offset < length; p_offset++){ + if(!g_ascii_isprint(tvb_get_guint8(parameter_tvb, p_offset ))){ + is_ascii = FALSE; + break; + } + } + if (is_ascii) + proto_item_append_text(actx->created_item," (%%s)",tvb_format_text(parameter_tvb, 0, length)); #.END @@ -299,6 +311,15 @@ tvbuff_t *parameter_tvb=NULL; proto_tree_add_item(subtree, hf_s1ap_transportLayerAddressIPv6, parameter_tvb, 4, 16, ENC_NA); } +#.TYPE_ATTR +Port-Number TYPE = FT_UINT16 DISPLAY = BASE_DEC +#.FN_BODY Port-Number VAL_PTR = ¶meter_tvb HF_INDEX = -1 + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + if (parameter_tvb) { + actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + } + #.FN_HDR InitialUEMessage /* Set the direction of the message */ actx->pinfo->link_dir=P2P_DIR_UL; @@ -334,7 +355,7 @@ tvbuff_t *parameter_tvb=NULL; # it is described how the container shall be encoded with respect to the scenario # in which it is used. tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + proto_tree *subtree; %(DEFAULT_BODY)s @@ -392,7 +413,7 @@ tvbuff_t *parameter_tvb=NULL; # See Target-ToSource-TransparentContainer in RANAP tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + proto_tree *subtree; %(DEFAULT_BODY)s @@ -481,7 +502,7 @@ tvbuff_t *parameter_tvb=NULL; # HandoverCommand and HandoverRequestAcknowledge. tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + proto_tree *subtree; %(DEFAULT_BODY)s if (!parameter_tvb) @@ -506,7 +527,7 @@ tvbuff_t *parameter_tvb=NULL; #.FN_BODY UE-HistoryInformationFromTheUE VAL_PTR = ¶meter_tvb tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + proto_tree *subtree; %(DEFAULT_BODY)s if (!parameter_tvb) @@ -519,7 +540,7 @@ tvbuff_t *parameter_tvb=NULL; #.FN_BODY UERadioCapability VAL_PTR = ¶meter_tvb tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + proto_tree *subtree; %(DEFAULT_BODY)s if (!parameter_tvb) @@ -531,10 +552,10 @@ tvbuff_t *parameter_tvb=NULL; } #.TYPE_ATTR -Threshold-RSRP DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(s1ap_Threshold_RSRP_fmt) +Threshold-RSRP DISPLAY = BASE_CUSTOM STRINGS = CF_FUNC(s1ap_Threshold_RSRP_fmt) #.TYPE_ATTR -Threshold-RSRQ DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(s1ap_Threshold_RSRQ_fmt) +Threshold-RSRQ DISPLAY = BASE_CUSTOM STRINGS = CF_FUNC(s1ap_Threshold_RSRQ_fmt) # 9.2.3.24 RIM Information # Contains the BSSGP RIM PDU @@ -545,7 +566,7 @@ Threshold-RSRQ DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(s1ap_Threshold_RSRQ_fmt) %(DEFAULT_BODY)s if (!parameter_tvb) - return offset; + return offset; subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_RIMInformation); if ((tvb_reported_length(parameter_tvb)>0)&&(bssgp_handle)){ @@ -557,7 +578,7 @@ Threshold-RSRQ DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(s1ap_Threshold_RSRQ_fmt) #.FN_BODY Cdma2000PDU VAL_PTR = ¶meter_tvb tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + proto_tree *subtree; %(DEFAULT_BODY)s if (!parameter_tvb) @@ -577,8 +598,8 @@ if (gcsna_handle) { * to handover to. The CDMA2000 Reference Cell * ID is statically configured in the eNB. */ - tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + tvbuff_t *parameter_tvb; + proto_tree *subtree; %(DEFAULT_BODY)s if (!parameter_tvb) @@ -591,8 +612,8 @@ if (gcsna_handle) { # 9.2.1.98 UE Radio Capability for Paging # Includes the UERadioPagingInformation message as defined in 10.2.2 of TS 36.331 [16]. - tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + tvbuff_t *parameter_tvb; + proto_tree *subtree; %(DEFAULT_BODY)s if (!parameter_tvb) @@ -606,8 +627,8 @@ if (gcsna_handle) { #.FN_BODY CELevel VAL_PTR = ¶meter_tvb # 9.2.1.109 Cell Identifier and Coverage Enhancement Level # Includes the UEPagingCoverageInformation message as defined in 10.2.2 of TS 36.331 - tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + tvbuff_t *parameter_tvb; + proto_tree *subtree; %(DEFAULT_BODY)s if (!parameter_tvb) return offset; @@ -620,8 +641,8 @@ if (gcsna_handle) { #.FN_BODY UE-RLF-Report-Container VAL_PTR = ¶meter_tvb # 9.2.3.40 RLF Report Information # Includes the rlf-Report-r9 contained in UEInformationResponse message as defined in TS 36.331 - tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + tvbuff_t *parameter_tvb; + proto_tree *subtree; %(DEFAULT_BODY)s if (!parameter_tvb) return offset; @@ -634,8 +655,8 @@ if (gcsna_handle) { #.FN_BODY UE-RLF-Report-Container-for-extended-bands VAL_PTR = ¶meter_tvb # 9.2.3.40 RLF Report Information # Includes the rlf-Report-v9e0 contained in UEInformationResponse message as defined in TS 36.331 - tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + tvbuff_t *parameter_tvb; + proto_tree *subtree; %(DEFAULT_BODY)s if (!parameter_tvb) return offset; @@ -648,8 +669,8 @@ if (gcsna_handle) { #.FN_BODY TooEarlyInterRATHOReportReportFromEUTRAN/uERLFReportContainer VAL_PTR = ¶meter_tvb # B.1.17 Failure Event Report # Includes the RLF Report contained in the UEInformationResponse message (TS 36.331 [16]) - tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + tvbuff_t *parameter_tvb; + proto_tree *subtree; %(DEFAULT_BODY)s if (!parameter_tvb) return offset; @@ -662,6 +683,294 @@ if (gcsna_handle) { #.TYPE_ATTR ProtocolExtensionID TYPE = FT_UINT8 DISPLAY = BASE_DEC|BASE_EXT_STRING STRINGS = &s1ap_ProtocolIE_ID_vals_ext +#.FN_BODY S1-Message VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; +%(DEFAULT_BODY)s + if (!parameter_tvb) + return offset; + + subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_S1_Message); + dissect_InitialUEMessage_PDU(parameter_tvb, actx->pinfo, subtree, NULL); + +#.FN_BODY E-UTRAN-Trace-ID VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; +%(DEFAULT_BODY)s + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_E_UTRAN_Trace_ID); + dissect_e212_mcc_mnc(parameter_tvb, actx->pinfo, subtree, 0, E212_NONE, FALSE); + proto_tree_add_item(subtree, hf_s1ap_E_UTRAN_Trace_ID_TraceID, parameter_tvb, 3, 3, ENC_BIG_ENDIAN); + proto_tree_add_item(subtree, hf_s1ap_E_UTRAN_Trace_ID_TraceRecordingSessionReference, parameter_tvb, 6, 2, ENC_BIG_ENDIAN); + +#.FN_BODY InterfacesToTrace VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + if(parameter_tvb){ + const gint *fields[] = { + &hf_s1ap_interfacesToTrace_S1_MME, + &hf_s1ap_interfacesToTrace_X2, + &hf_s1ap_interfacesToTrace_Uu, + &hf_s1ap_interfacesToTrace_Reserved, + NULL + }; + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_InterfacesToTrace); + proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN); + } + +#.FN_FTR BitRate + proto_item_append_text(actx->created_item, "bit/s"); + +#.TYPE_ATTR +MME-Code TYPE = FT_UINT8 DISPLAY = BASE_DEC_HEX +#.FN_BODY MME-Code VAL_PTR = ¶meter_tvb HF_INDEX = -1 + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + if (parameter_tvb) { + actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, 1, ENC_BIG_ENDIAN); + } + +#.TYPE_ATTR +MME-Group-ID TYPE = FT_UINT16 DISPLAY = BASE_DEC_HEX +#.FN_BODY MME-Group-ID VAL_PTR = ¶meter_tvb HF_INDEX = -1 + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + if (parameter_tvb) { + actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + } + +#.FN_BODY EncryptionAlgorithms VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + if(parameter_tvb){ + const gint *fields[] = { + &hf_s1ap_encryptionAlgorithms_EEA1, + &hf_s1ap_encryptionAlgorithms_EEA2, + &hf_s1ap_encryptionAlgorithms_EEA3, + &hf_s1ap_encryptionAlgorithms_Reserved, + NULL + }; + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_EncryptionAlgorithms); + proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 2, fields, ENC_BIG_ENDIAN); + } + +#.FN_BODY IntegrityProtectionAlgorithms VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + if(parameter_tvb){ + const gint *fields[] = { + &hf_s1ap_integrityProtectionAlgorithms_EIA1, + &hf_s1ap_integrityProtectionAlgorithms_EIA2, + &hf_s1ap_integrityProtectionAlgorithms_EIA3, + &hf_s1ap_integrityProtectionAlgorithms_Reserved, + NULL + }; + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_IntegrityProtectionAlgorithms); + proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 2, fields, ENC_BIG_ENDIAN); + } + +#.FN_FTR Time-UE-StayedInCell + proto_item_append_text(actx->created_item, "s"); + +#.TYPE_ATTR +Time-UE-StayedInCell-EnhancedGranularity DISPLAY = BASE_CUSTOM STRINGS = CF_FUNC(s1ap_Time_UE_StayedInCell_EnhancedGranularity_fmt) + +#.FN_BODY LastVisitedUTRANCellInformation VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; +%(DEFAULT_BODY)s + if (!parameter_tvb) + return offset; + + if (g_s1ap_dissect_container) { + subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_LastVisitedUTRANCellInformation); + dissect_ranap_LastVisitedUTRANCell_Item_PDU(parameter_tvb, actx->pinfo, subtree, NULL); + } + +#.TYPE_ATTR +MessageIdentifier TYPE = FT_UINT16 DISPLAY = BASE_DEC|BASE_EXT_STRING STRINGS = <e_rrc_messageIdentifier_vals_ext + +#.FN_BODY MessageIdentifier VAL_PTR = ¶meter_tvb HF_INDEX = -1 + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + if (parameter_tvb) { + actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + } + +#.FN_BODY SerialNumber VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + if (parameter_tvb) { + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_SerialNumber); + proto_tree_add_item(subtree, hf_s1ap_SerialNumber_gs, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(subtree, hf_s1ap_SerialNumber_msg_code, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(subtree, hf_s1ap_SerialNumber_upd_nb, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + } + +#.FN_FTR RepetitionPeriod + proto_item_append_text(actx->created_item, "s"); + +#.FN_BODY WarningType VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + if (parameter_tvb) { + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_WarningType); + proto_tree_add_item(subtree, hf_s1ap_WarningType_value, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(subtree, hf_s1ap_WarningType_emergency_user_alert, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(subtree, hf_s1ap_WarningType_popup, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + } + +#.FN_BODY DataCodingScheme VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + if (parameter_tvb) { + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_DataCodingScheme); + dataCodingScheme = dissect_cbs_data_coding_scheme(parameter_tvb, actx->pinfo, subtree, 0); + } + +#.FN_BODY WarningMessageContents VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + if (parameter_tvb) { + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_WarningMessageContents); + dissect_s1ap_warningMessageContents(parameter_tvb, subtree, actx->pinfo, dataCodingScheme); + } + +#.FN_BODY MSClassmark2 VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + if (parameter_tvb) { + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_MSClassmark); + de_ms_cm_2(parameter_tvb, subtree, actx->pinfo, 0, tvb_reported_length(tvb), NULL, 0); + } + +#.FN_BODY MSClassmark3 VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + if (parameter_tvb) { + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_MSClassmark); + de_ms_cm_3(parameter_tvb, subtree, actx->pinfo, 0, tvb_reported_length(tvb), NULL, 0); + } + +#.TYPE_ATTR +EUTRANRoundTripDelayEstimationInfo DISPLAY = BASE_CUSTOM STRINGS = CF_FUNC(s1ap_EUTRANRoundTripDelayEstimationInfo_fmt) + +#.FN_FTR ExtendedRepetitionPeriod + proto_item_append_text(actx->created_item, "s"); + +#.FN_BODY MeasurementsToActivate VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + if(parameter_tvb){ + const gint *fields[] = { + &hf_s1ap_measurementsToActivate_M1, + &hf_s1ap_measurementsToActivate_M2, + &hf_s1ap_measurementsToActivate_M3, + &hf_s1ap_measurementsToActivate_M4, + &hf_s1ap_measurementsToActivate_M5, + &hf_s1ap_measurementsToActivate_LoggingM1FromEventTriggered, + &hf_s1ap_measurementsToActivate_M6, + &hf_s1ap_measurementsToActivate_M7, + NULL + }; + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_MeasurementsToActivate); + proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN); + } + +#.FN_BODY MDT-Location-Info VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + if(parameter_tvb){ + const gint *fields[] = { + &hf_s1ap_MDT_Location_Info_GNSS, + &hf_s1ap_MDT_Location_Info_E_CID, + &hf_s1ap_MDT_Location_Info_Reserved, + NULL + }; + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_MDT_Location_Info); + proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN); + } + +#.TYPE_ATTR +LHN-ID TYPE=FT_STRING DISPLAY = STR_UNICODE +#.FN_BODY LHN-ID VAL_PTR = ¶meter_tvb HF_INDEX = -1 + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, -1, ENC_UTF_8|ENC_NA); +#.END + +#.FN_FTR ExpectedActivityPeriod +proto_item_append_text(actx->created_item, "s"); + +#.FN_FTR ExpectedIdlePeriod +proto_item_append_text(actx->created_item, "s"); + +#.FN_FTR Time-UE-StayedInCell + proto_item_append_text(actx->created_item, "s"); + +#.TYPE_ATTR +TAC TYPE = FT_UINT16 DISPLAY = BASE_DEC_HEX +#.FN_BODY TAC VAL_PTR = ¶meter_tvb HF_INDEX = -1 + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + if (parameter_tvb) { + actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + } + +#.TYPE_ATTR +LAC TYPE = FT_UINT16 DISPLAY = BASE_DEC_HEX +#.FN_BODY LAC VAL_PTR = ¶meter_tvb HF_INDEX = -1 + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + if (parameter_tvb) { + actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + } + +#.TYPE_ATTR +RAC TYPE = FT_UINT8 DISPLAY = BASE_DEC_HEX +#.FN_BODY RAC VAL_PTR = ¶meter_tvb HF_INDEX = -1 + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + if (parameter_tvb) { + actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, 1, ENC_BIG_ENDIAN); + } + +#.TYPE_ATTR +M-TMSI TYPE = FT_UINT32 DISPLAY = BASE_DEC_HEX +#.FN_BODY M-TMSI VAL_PTR = ¶meter_tvb HF_INDEX = -1 + tvbuff_t *parameter_tvb = NULL; +%(DEFAULT_BODY)s + if (parameter_tvb) { + actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, 4, ENC_BIG_ENDIAN); + } + +#.FN_BODY IMSI VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; +%(DEFAULT_BODY)s + if (parameter_tvb) { + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_IMSI); + dissect_e212_imsi(parameter_tvb, actx->pinfo, subtree, 0, tvb_reported_length(parameter_tvb), FALSE); + } + +#.FN_BODY NASSecurityParametersfromE-UTRAN VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; +%(DEFAULT_BODY)s + if (parameter_tvb) { + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_NASSecurityParameters); + de_emm_sec_par_from_eutra(parameter_tvb, subtree, actx->pinfo, 0, tvb_reported_length(parameter_tvb), NULL, 0); + } + +#.FN_BODY NASSecurityParameterstoE-UTRAN VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; +%(DEFAULT_BODY)s + if (parameter_tvb) { + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_NASSecurityParameters); + de_emm_sec_par_to_eutra(parameter_tvb, subtree, actx->pinfo, 0, tvb_reported_length(parameter_tvb), NULL, 0); + } + #.ASSIGN_VALUE_TO_TYPE # S1AP does not have constants assigned to types, they are pure INTEGER # ProcedureCode @@ -1125,7 +1434,7 @@ RecommendedENBItem N s1ap.ies id-RecommendedENBItem PWSfailedECGIList N s1ap.ies id-PWSfailedECGIList MME-Group-ID N s1ap.ies id-MME-Group-ID Additional-GUTI N s1ap.ies id-Additional-GUTI -#OCTET STRING N s1ap.ies id-S1-Message +S1-Message N s1ap.ies id-S1-Message CSGMembershipInfo N s1ap.ies id-CSGMembershipInfo Paging-eDRXInformation N s1ap.ies id-Paging-eDRXInformation UE-RetentionInformation N s1ap.ies id-UE-RetentionInformation @@ -1414,6 +1723,7 @@ UEContextResumeFailure N s1ap.proc.uout id-UEContextResume #.FN_HDR WriteReplaceWarningRequest col_append_str(actx->pinfo->cinfo, COL_INFO, ", WriteReplaceWarningRequest "); + dataCodingScheme = SMS_ENCODING_NOT_SET; #.FN_HDR WriteReplaceWarningResponse col_append_str(actx->pinfo->cinfo, COL_INFO, ", WriteReplaceWarningResponse "); #.FN_HDR KillRequest diff --git a/epan/dissectors/packet-lte-rrc.c b/epan/dissectors/packet-lte-rrc.c index aea169da8f..0950a2905b 100644 --- a/epan/dissectors/packet-lte-rrc.c +++ b/epan/dissectors/packet-lte-rrc.c @@ -8961,7 +8961,7 @@ static const value_string lte_rrc_messageIdentifier_vals[] = { { 0x112b, "CMAS Identifier for operator defined use for additional languages"}, { 0, NULL}, }; -static value_string_ext lte_rrc_messageIdentifier_vals_ext = VALUE_STRING_EXT_INIT(lte_rrc_messageIdentifier_vals); +value_string_ext lte_rrc_messageIdentifier_vals_ext = VALUE_STRING_EXT_INIT(lte_rrc_messageIdentifier_vals); static const value_string lte_rrc_serialNumber_gs_vals[] = { { 0, "Display mode immediate, cell wide"}, @@ -87808,7 +87808,7 @@ void proto_register_lte_rrc(void) { NULL, HFILL }}, { &hf_lte_rrc_warningMessageSegment_decoded_page, { "Decoded Page", "lte-rrc.warningMessageSegment.decoded_page", - FT_STRING, BASE_NONE, NULL, 0, + FT_STRING, STR_UNICODE, NULL, 0, NULL, HFILL }}, { &hf_lte_rrc_interBandTDD_CA_WithDifferentConfig_bit1, { "Bit 1", "lte-rrc.interBandTDD_CA_WithDifferentConfig.bit1", diff --git a/epan/dissectors/packet-lte-rrc.h b/epan/dissectors/packet-lte-rrc.h index 325f46c898..037d7d46f7 100644 --- a/epan/dissectors/packet-lte-rrc.h +++ b/epan/dissectors/packet-lte-rrc.h @@ -31,6 +31,8 @@ #ifndef PACKET_LTE_RRC_H #define PACKET_LTE_RRC_H +extern value_string_ext lte_rrc_messageIdentifier_vals_ext; + /*--- Included file: packet-lte-rrc-exp.h ---*/ #line 1 "./asn1/lte-rrc/packet-lte-rrc-exp.h" @@ -48,6 +50,6 @@ int dissect_lte_rrc_HandoverPreparationInformation_NB_PDU(tvbuff_t *tvb _U_, pac int dissect_lte_rrc_UERadioAccessCapabilityInformation_NB_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); /*--- End of included file: packet-lte-rrc-exp.h ---*/ -#line 27 "./asn1/lte-rrc/packet-lte-rrc-template.h" +#line 29 "./asn1/lte-rrc/packet-lte-rrc-template.h" #endif /* PACKET_LTE_RRC_H */ diff --git a/epan/dissectors/packet-ranap.c b/epan/dissectors/packet-ranap.c index 9987ca94aa..4d89f3c792 100644 --- a/epan/dissectors/packet-ranap.c +++ b/epan/dissectors/packet-ranap.c @@ -491,6 +491,7 @@ static int hf_ranap_IuTransportAssociation_PDU = -1; /* IuTransportAssociation static int hf_ranap_KeyStatus_PDU = -1; /* KeyStatus */ static int hf_ranap_LAI_PDU = -1; /* LAI */ static int hf_ranap_LastKnownServiceArea_PDU = -1; /* LastKnownServiceArea */ +static int hf_ranap_ranap_LastVisitedUTRANCell_Item_PDU = -1; /* LastVisitedUTRANCell_Item */ static int hf_ranap_LocationRelatedDataRequestType_PDU = -1; /* LocationRelatedDataRequestType */ static int hf_ranap_LocationRelatedDataRequestTypeSpecificToGERANIuMode_PDU = -1; /* LocationRelatedDataRequestTypeSpecificToGERANIuMode */ static int hf_ranap_L3_Information_PDU = -1; /* L3_Information */ @@ -892,6 +893,9 @@ static int hf_ranap_bindingID = -1; /* BindingID */ static int hf_ranap_LA_LIST_item = -1; /* LA_LIST_item */ static int hf_ranap_listOF_SNAs = -1; /* ListOF_SNAs */ static int hf_ranap_ageOfSAI = -1; /* INTEGER_0_32767 */ +static int hf_ranap_uTRAN_CellID = -1; /* UTRAN_CellID */ +static int hf_ranap_cellType = -1; /* CellType */ +static int hf_ranap_time_UE_StayedInCell = -1; /* Time_UE_StayedInCell */ static int hf_ranap_ListOF_SNAs_item = -1; /* SNAC */ static int hf_ranap_ListOfInterfacesToTrace_item = -1; /* InterfacesToTraceItem */ static int hf_ranap_interface = -1; /* T_interface */ @@ -1075,6 +1079,7 @@ static int hf_ranap_pdu14FrameSeqNoUL = -1; /* PDUType14FrameSequenceNumbe static int hf_ranap_pdu14FrameSeqNoDL = -1; /* PDUType14FrameSequenceNumber */ static int hf_ranap_dataPDUType = -1; /* DataPDUType */ static int hf_ranap_upinitialisationFrame = -1; /* UPInitialisationFrame */ +static int hf_ranap_cellID = -1; /* TargetCellId */ static int hf_ranap_horizontalVelocity = -1; /* HorizontalVelocity */ static int hf_ranap_horizontalWithVerticalVelocity = -1; /* HorizontalWithVerticalVelocity */ static int hf_ranap_horizontalVelocityWithUncertainty = -1; /* HorizontalVelocityWithUncertainty */ @@ -1248,6 +1253,7 @@ static gint ett_ranap_LA_LIST = -1; static gint ett_ranap_LA_LIST_item = -1; static gint ett_ranap_LAI = -1; static gint ett_ranap_LastKnownServiceArea = -1; +static gint ett_ranap_LastVisitedUTRANCell_Item = -1; static gint ett_ranap_ListOF_SNAs = -1; static gint ett_ranap_ListOfInterfacesToTrace = -1; static gint ett_ranap_InterfacesToTraceItem = -1; @@ -1345,6 +1351,7 @@ static gint ett_ranap_UE_AggregateMaximumBitRate = -1; static gint ett_ranap_UE_ID = -1; static gint ett_ranap_UESBI_Iu = -1; static gint ett_ranap_UPInformation = -1; +static gint ett_ranap_UTRAN_CellID = -1; static gint ett_ranap_VelocityEstimate = -1; static gint ett_ranap_HorizontalVelocity = -1; static gint ett_ranap_HorizontalWithVerticalVelocity = -1; @@ -1666,7 +1673,7 @@ dissect_ranap_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 93 "./asn1/ranap/ranap.cnf" +#line 91 "./asn1/ranap/ranap.cnf" col_add_fstr(actx->pinfo->cinfo, COL_INFO, "%s ", val_to_str_ext_const(ProcedureCode, &ranap_ProcedureCode_vals_ext, "unknown message")); @@ -1950,7 +1957,7 @@ dissect_ranap_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 77 "./asn1/ranap/ranap.cnf" +#line 75 "./asn1/ranap/ranap.cnf" if (tree) { proto_item_append_text(proto_item_get_parent_nth(actx->created_item, 2), ": %s", val_to_str_ext(ProtocolIE_ID, &ranap_ProtocolIE_ID_vals_ext, "unknown (%d)")); } @@ -2072,7 +2079,7 @@ static const per_sequence_t ProtocolIE_ContainerList_sequence_of[1] = { static int dissect_ranap_ProtocolIE_ContainerList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 117 "./asn1/ranap/ranap.cnf" +#line 115 "./asn1/ranap/ranap.cnf" static const asn1_par_def_t ProtocolIE_ContainerList_pars[] = { { "lowerBound", ASN1_PAR_INTEGER }, { "upperBound", ASN1_PAR_INTEGER }, @@ -2094,7 +2101,7 @@ static const per_sequence_t ProtocolIE_ContainerPairList_sequence_of[1] = { static int dissect_ranap_ProtocolIE_ContainerPairList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 133 "./asn1/ranap/ranap.cnf" +#line 131 "./asn1/ranap/ranap.cnf" static const asn1_par_def_t ProtocolIE_ContainerPairList_pars[] = { { "lowerBound", ASN1_PAR_INTEGER }, { "upperBound", ASN1_PAR_INTEGER }, @@ -2663,7 +2670,7 @@ dissect_ranap_APN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto static int dissect_ranap_PLMNidentity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 289 "./asn1/ranap/ranap.cnf" +#line 287 "./asn1/ranap/ranap.cnf" tvbuff_t *parameter_tvb=NULL; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, @@ -3160,7 +3167,7 @@ dissect_ranap_AuthorisedPLMNs(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *act static int dissect_ranap_BindingID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 391 "./asn1/ranap/ranap.cnf" +#line 389 "./asn1/ranap/ranap.cnf" tvbuff_t *value_tvb = NULL; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, 4, 4, FALSE, &value_tvb); @@ -3639,6 +3646,24 @@ dissect_ranap_CellLoadInformationGroup(tvbuff_t *tvb _U_, int offset _U_, asn1_c } +static const value_string ranap_CellType_vals[] = { + { 0, "macro" }, + { 1, "micro" }, + { 2, "pico" }, + { 3, "femto" }, + { 0, NULL } +}; + + +static int +dissect_ranap_CellType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 4, NULL, TRUE, 0, NULL); + + return offset; +} + + static const value_string ranap_ClientType_vals[] = { { 0, "emergency-Services" }, { 1, "value-Added-Services" }, @@ -4592,7 +4617,7 @@ dissect_ranap_GlobalRNC_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _ static int dissect_ranap_GTP_TEI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 341 "./asn1/ranap/ranap.cnf" +#line 339 "./asn1/ranap/ranap.cnf" tvbuff_t *parameter_tvb=NULL; int saved_hf; @@ -4775,7 +4800,7 @@ dissect_ranap_ImmediateMDT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _ static int dissect_ranap_IMSI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 190 "./asn1/ranap/ranap.cnf" +#line 188 "./asn1/ranap/ranap.cnf" tvbuff_t* imsi_tvb; const char *digit_str; sccp_msg_info_t *sccp_info; @@ -5369,6 +5394,49 @@ dissect_ranap_LastKnownServiceArea(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t } +static const per_sequence_t UTRAN_CellID_sequence[] = { + { &hf_ranap_pLMNidentity , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ranap_PLMNidentity }, + { &hf_ranap_cellID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ranap_TargetCellId }, + { &hf_ranap_iE_Extensions , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ranap_ProtocolExtensionContainer }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_ranap_UTRAN_CellID(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_ranap_UTRAN_CellID, UTRAN_CellID_sequence); + + return offset; +} + + + +static int +dissect_ranap_Time_UE_StayedInCell(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, + 0U, 4095U, NULL, FALSE); + + return offset; +} + + +static const per_sequence_t LastVisitedUTRANCell_Item_sequence[] = { + { &hf_ranap_uTRAN_CellID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ranap_UTRAN_CellID }, + { &hf_ranap_cellType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ranap_CellType }, + { &hf_ranap_time_UE_StayedInCell, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ranap_Time_UE_StayedInCell }, + { &hf_ranap_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ranap_ProtocolExtensionContainer }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_ranap_LastVisitedUTRANCell_Item(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_ranap_LastVisitedUTRANCell_Item, LastVisitedUTRANCell_Item_sequence); + + return offset; +} + + static const value_string ranap_T_interface_vals[] = { { 0, "iu-cs" }, { 1, "iu-ps" }, @@ -5624,7 +5692,7 @@ dissect_ranap_LocationReportingTransferInformation(tvbuff_t *tvb _U_, int offset static int dissect_ranap_L3_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 277 "./asn1/ranap/ranap.cnf" +#line 275 "./asn1/ranap/ranap.cnf" tvbuff_t *l3_info_tvb=NULL; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, @@ -6044,7 +6112,7 @@ dissect_ranap_MSISDN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, pr static int dissect_ranap_NAS_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 213 "./asn1/ranap/ranap.cnf" +#line 211 "./asn1/ranap/ranap.cnf" tvbuff_t *nas_pdu_tvb=NULL; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, @@ -6082,7 +6150,7 @@ dissect_ranap_NAS_SynchronisationIndicator(tvbuff_t *tvb _U_, int offset _U_, as static int dissect_ranap_NewBSS_To_OldBSS_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 269 "./asn1/ranap/ranap.cnf" +#line 267 "./asn1/ranap/ranap.cnf" tvbuff_t *bss_info_tvb=NULL; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, @@ -6171,7 +6239,7 @@ dissect_ranap_Offload_RAB_Parameters(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx static int dissect_ranap_OldBSS_ToNewBSS_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 261 "./asn1/ranap/ranap.cnf" +#line 259 "./asn1/ranap/ranap.cnf" tvbuff_t *bss_info_tvb=NULL; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, @@ -7337,7 +7405,7 @@ dissect_ranap_RNSAPRelocationParameters(tvbuff_t *tvb _U_, int offset _U_, asn1_ static int dissect_ranap_RRC_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 222 "./asn1/ranap/ranap.cnf" +#line 220 "./asn1/ranap/ranap.cnf" tvbuff_t *rrc_message_tvb=NULL; guint8 container_choice=0; @@ -7458,7 +7526,7 @@ dissect_ranap_Service_Handover(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac static int dissect_ranap_Source_ToTarget_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 376 "./asn1/ranap/ranap.cnf" +#line 374 "./asn1/ranap/ranap.cnf" dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer(tvb , offset, actx ,tree , hf_ranap_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU ); @@ -7535,7 +7603,7 @@ static const per_sequence_t SourceRNC_ToTargetRNC_TransparentContainer_sequence[ static int dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 353 "./asn1/ranap/ranap.cnf" +#line 351 "./asn1/ranap/ranap.cnf" /* If SourceRNC-ToTargetRNC-TransparentContainer is called through dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU ProtocolIE_ID may be unset @@ -7774,7 +7842,7 @@ dissect_ranap_SRVCC_Operation_Possible(tvbuff_t *tvb _U_, int offset _U_, asn1_c static int dissect_ranap_Target_ToSource_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 386 "./asn1/ranap/ranap.cnf" +#line 384 "./asn1/ranap/ranap.cnf" dissect_ranap_TargetRNC_ToSourceRNC_TransparentContainer(tvb , offset, actx ,tree , hf_ranap_ranap_TargetRNC_ToSourceRNC_TransparentContainer_PDU ); @@ -7828,7 +7896,7 @@ static const per_sequence_t TargetRNC_ToSourceRNC_TransparentContainer_sequence[ static int dissect_ranap_TargetRNC_ToSourceRNC_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 362 "./asn1/ranap/ranap.cnf" +#line 360 "./asn1/ranap/ranap.cnf" /* If TargetRNC-ToSourceRNC-TransparentContainer is called through dissect_ranap_TargetRNC_ToSourceRNC_TransparentContainer_PDU ProtocolIE_ID may be unset @@ -7916,7 +7984,7 @@ dissect_ranap_TraceType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, static int dissect_ranap_TransportLayerAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 312 "./asn1/ranap/ranap.cnf" +#line 310 "./asn1/ranap/ranap.cnf" tvbuff_t *parameter_tvb=NULL; proto_item *item; proto_tree *subtree, *nsap_tree; @@ -8015,7 +8083,7 @@ dissect_ranap_UE_AggregateMaximumBitRate(tvbuff_t *tvb _U_, int offset _U_, asn1 static int dissect_ranap_UE_History_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 401 "./asn1/ranap/ranap.cnf" +#line 399 "./asn1/ranap/ranap.cnf" tvbuff_t *value_tvb = NULL; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, @@ -8282,7 +8350,7 @@ dissect_ranap_VelocityEstimate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac static int dissect_ranap_RAB_IE_ContainerList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 143 "./asn1/ranap/ranap.cnf" +#line 141 "./asn1/ranap/ranap.cnf" asn1_stack_frame_push(actx, "ProtocolIE-ContainerList"); asn1_param_push_integer(actx, 1); asn1_param_push_integer(actx, maxNrOfRABs); @@ -8298,7 +8366,7 @@ dissect_ranap_RAB_IE_ContainerList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t static int dissect_ranap_RAB_IE_ContainerPairList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 151 "./asn1/ranap/ranap.cnf" +#line 149 "./asn1/ranap/ranap.cnf" asn1_stack_frame_push(actx, "ProtocolIE-ContainerPairList"); asn1_param_push_integer(actx, 1); asn1_param_push_integer(actx, maxNrOfRABs); @@ -8314,7 +8382,7 @@ dissect_ranap_RAB_IE_ContainerPairList(tvbuff_t *tvb _U_, int offset _U_, asn1_c static int dissect_ranap_IuSigConId_IE_ContainerList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 168 "./asn1/ranap/ranap.cnf" +#line 166 "./asn1/ranap/ranap.cnf" asn1_stack_frame_push(actx, "ProtocolIE-ContainerList"); asn1_param_push_integer(actx, 1); asn1_param_push_integer(actx, maxNrOfIuSigConIds); @@ -8330,7 +8398,7 @@ dissect_ranap_IuSigConId_IE_ContainerList(tvbuff_t *tvb _U_, int offset _U_, asn static int dissect_ranap_DirectTransfer_IE_ContainerList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 176 "./asn1/ranap/ranap.cnf" +#line 174 "./asn1/ranap/ranap.cnf" asn1_stack_frame_push(actx, "ProtocolIE-ContainerList"); asn1_param_push_integer(actx, 1); asn1_param_push_integer(actx, maxNrOfDTs); @@ -11180,6 +11248,14 @@ static int dissect_LastKnownServiceArea_PDU(tvbuff_t *tvb _U_, packet_info *pinf offset += 7; offset >>= 3; return offset; } +int dissect_ranap_LastVisitedUTRANCell_Item_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_ranap_LastVisitedUTRANCell_Item(tvb, offset, &asn1_ctx, tree, hf_ranap_ranap_LastVisitedUTRANCell_Item_PDU); + offset += 7; offset >>= 3; + return offset; +} static int dissect_LocationRelatedDataRequestType_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { int offset = 0; asn1_ctx_t asn1_ctx; @@ -13547,6 +13623,10 @@ void proto_register_ranap(void) { { "LastKnownServiceArea", "ranap.LastKnownServiceArea_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_ranap_ranap_LastVisitedUTRANCell_Item_PDU, + { "LastVisitedUTRANCell-Item", "ranap.LastVisitedUTRANCell_Item_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, { &hf_ranap_LocationRelatedDataRequestType_PDU, { "LocationRelatedDataRequestType", "ranap.LocationRelatedDataRequestType_element", FT_NONE, BASE_NONE, NULL, 0, @@ -15151,6 +15231,18 @@ void proto_register_ranap(void) { { "ageOfSAI", "ranap.ageOfSAI", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_32767", HFILL }}, + { &hf_ranap_uTRAN_CellID, + { "uTRAN-CellID", "ranap.uTRAN_CellID_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_ranap_cellType, + { "cellType", "ranap.cellType", + FT_UINT32, BASE_DEC, VALS(ranap_CellType_vals), 0, + NULL, HFILL }}, + { &hf_ranap_time_UE_StayedInCell, + { "time-UE-StayedInCell", "ranap.time_UE_StayedInCell", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, { &hf_ranap_ListOF_SNAs_item, { "SNAC", "ranap.SNAC", FT_UINT32, BASE_DEC, NULL, 0, @@ -15883,6 +15975,10 @@ void proto_register_ranap(void) { { "upinitialisationFrame", "ranap.upinitialisationFrame", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_ranap_cellID, + { "cellID", "ranap.cellID", + FT_UINT32, BASE_DEC, NULL, 0, + "TargetCellId", HFILL }}, { &hf_ranap_horizontalVelocity, { "horizontalVelocity", "ranap.horizontalVelocity_element", FT_NONE, BASE_NONE, NULL, 0, @@ -16267,6 +16363,7 @@ void proto_register_ranap(void) { &ett_ranap_LA_LIST_item, &ett_ranap_LAI, &ett_ranap_LastKnownServiceArea, + &ett_ranap_LastVisitedUTRANCell_Item, &ett_ranap_ListOF_SNAs, &ett_ranap_ListOfInterfacesToTrace, &ett_ranap_InterfacesToTraceItem, @@ -16364,6 +16461,7 @@ void proto_register_ranap(void) { &ett_ranap_UE_ID, &ett_ranap_UESBI_Iu, &ett_ranap_UPInformation, + &ett_ranap_UTRAN_CellID, &ett_ranap_VelocityEstimate, &ett_ranap_HorizontalVelocity, &ett_ranap_HorizontalWithVerticalVelocity, diff --git a/epan/dissectors/packet-ranap.h b/epan/dissectors/packet-ranap.h index 9a8e9edf00..7433f9900e 100644 --- a/epan/dissectors/packet-ranap.h +++ b/epan/dissectors/packet-ranap.h @@ -40,6 +40,7 @@ int dissect_ranap_IntegrityProtectionInformation(tvbuff_t *tvb _U_, int offset _ int dissect_ranap_Service_Handover(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_); int dissect_ranap_TargetRNC_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_); int dissect_ranap_InterSystemInformation_TransparentContainer_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); +int dissect_ranap_LastVisitedUTRANCell_Item_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); int dissect_ranap_Source_ToTarget_TransparentContainer_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); int dissect_ranap_SourceCellID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); int dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); diff --git a/epan/dissectors/packet-s1ap.c b/epan/dissectors/packet-s1ap.c index 5bbfeca92f..f3e886963c 100644 --- a/epan/dissectors/packet-s1ap.c +++ b/epan/dissectors/packet-s1ap.c @@ -41,6 +41,7 @@ #include #include #include +#include #include "packet-ber.h" #include "packet-per.h" @@ -51,11 +52,9 @@ #include "packet-bssgp.h" #include "packet-s1ap.h" #include "packet-a21.h" - -#ifdef _MSC_VER -/* disable: "warning C4146: unary minus operator applied to unsigned type, result still unsigned" */ -#pragma warning(disable:4146) -#endif +#include "packet-gsm_map.h" +#include "packet-cell_broadcast.h" +#include "packet-gsm_a_common.h" #define PNAME "S1 Application Protocol" #define PSNAME "S1AP" @@ -420,13 +419,46 @@ typedef enum _ProtocolIE_ID_enum { } ProtocolIE_ID_enum; /*--- End of included file: packet-s1ap-val.h ---*/ -#line 67 "./asn1/s1ap/packet-s1ap-template.c" +#line 66 "./asn1/s1ap/packet-s1ap-template.c" /* Initialize the protocol and registered fields */ static int proto_s1ap = -1; static int hf_s1ap_transportLayerAddressIPv4 = -1; static int hf_s1ap_transportLayerAddressIPv6 = -1; +static int hf_s1ap_E_UTRAN_Trace_ID_TraceID = -1; +static int hf_s1ap_E_UTRAN_Trace_ID_TraceRecordingSessionReference = -1; +static int hf_s1ap_interfacesToTrace_S1_MME = -1; +static int hf_s1ap_interfacesToTrace_X2 = -1; +static int hf_s1ap_interfacesToTrace_Uu = -1; +static int hf_s1ap_interfacesToTrace_Reserved = -1; +static int hf_s1ap_encryptionAlgorithms_EEA1 = -1; +static int hf_s1ap_encryptionAlgorithms_EEA2 = -1; +static int hf_s1ap_encryptionAlgorithms_EEA3 = -1; +static int hf_s1ap_encryptionAlgorithms_Reserved = -1; +static int hf_s1ap_integrityProtectionAlgorithms_EIA1 = -1; +static int hf_s1ap_integrityProtectionAlgorithms_EIA2 = -1; +static int hf_s1ap_integrityProtectionAlgorithms_EIA3 = -1; +static int hf_s1ap_integrityProtectionAlgorithms_Reserved = -1; +static int hf_s1ap_SerialNumber_gs = -1; +static int hf_s1ap_SerialNumber_msg_code = -1; +static int hf_s1ap_SerialNumber_upd_nb = -1; +static int hf_s1ap_WarningType_value = -1; +static int hf_s1ap_WarningType_emergency_user_alert = -1; +static int hf_s1ap_WarningType_popup = -1; +static int hf_s1ap_WarningMessageContents_nb_pages = -1; +static int hf_s1ap_WarningMessageContents_decoded_page = -1; +static int hf_s1ap_measurementsToActivate_M1 = -1; +static int hf_s1ap_measurementsToActivate_M2 = -1; +static int hf_s1ap_measurementsToActivate_M3 = -1; +static int hf_s1ap_measurementsToActivate_M4 = -1; +static int hf_s1ap_measurementsToActivate_M5 = -1; +static int hf_s1ap_measurementsToActivate_LoggingM1FromEventTriggered = -1; +static int hf_s1ap_measurementsToActivate_M6 = -1; +static int hf_s1ap_measurementsToActivate_M7 = -1; +static int hf_s1ap_MDT_Location_Info_GNSS = -1; +static int hf_s1ap_MDT_Location_Info_E_CID = -1; +static int hf_s1ap_MDT_Location_Info_Reserved = -1; /*--- Included file: packet-s1ap-hf.c ---*/ #line 1 "./asn1/s1ap/packet-s1ap-hf.c" @@ -647,6 +679,7 @@ static int hf_s1ap_InitialUEMessage_PDU = -1; /* InitialUEMessage */ static int hf_s1ap_UplinkNASTransport_PDU = -1; /* UplinkNASTransport */ static int hf_s1ap_NASNonDeliveryIndication_PDU = -1; /* NASNonDeliveryIndication */ static int hf_s1ap_RerouteNASRequest_PDU = -1; /* RerouteNASRequest */ +static int hf_s1ap_S1_Message_PDU = -1; /* S1_Message */ static int hf_s1ap_Reset_PDU = -1; /* Reset */ static int hf_s1ap_ResetType_PDU = -1; /* ResetType */ static int hf_s1ap_ResetAcknowledge_PDU = -1; /* ResetAcknowledge */ @@ -1096,7 +1129,7 @@ static int hf_s1ap_eHRPD_Sector_ID_01 = -1; /* EHRPD_Sector_ID */ static int hf_s1ap_eHRPDSectorLoadReportingResponse = -1; /* EHRPDSectorLoadReportingResponse */ /*--- End of included file: packet-s1ap-hf.c ---*/ -#line 74 "./asn1/s1ap/packet-s1ap-template.c" +#line 106 "./asn1/s1ap/packet-s1ap-template.c" /* Initialize the subtree pointers */ static int ett_s1ap = -1; @@ -1113,7 +1146,21 @@ static int ett_s1ap_UE_HistoryInformationFromTheUE = -1; static int ett_s1ap_CELevel = -1; static int ett_s1ap_UE_RLF_Report_Container = -1; static int ett_s1ap_UE_RLF_Report_Container_for_extended_bands = -1; - +static int ett_s1ap_S1_Message = -1; +static int ett_s1ap_E_UTRAN_Trace_ID = -1; +static int ett_s1ap_InterfacesToTrace = -1; +static int ett_s1ap_EncryptionAlgorithms = -1; +static int ett_s1ap_IntegrityProtectionAlgorithms = -1; +static int ett_s1ap_LastVisitedUTRANCellInformation = -1; +static int ett_s1ap_SerialNumber = -1; +static int ett_s1ap_WarningType = -1; +static int ett_s1ap_DataCodingScheme = -1; +static int ett_s1ap_WarningMessageContents = -1; +static int ett_s1ap_MSClassmark = -1; +static int ett_s1ap_MeasurementsToActivate = -1; +static int ett_s1ap_MDT_Location_Info = -1; +static int ett_s1ap_IMSI = -1; +static int ett_s1ap_NASSecurityParameters = -1; /*--- Included file: packet-s1ap-ett.c ---*/ #line 1 "./asn1/s1ap/packet-s1ap-ett.c" @@ -1444,7 +1491,9 @@ static gint ett_s1ap_EHRPDCompositeAvailableCapacity = -1; static gint ett_s1ap_EHRPDMultiSectorLoadReportingResponseItem = -1; /*--- End of included file: packet-s1ap-ett.c ---*/ -#line 92 "./asn1/s1ap/packet-s1ap-template.c" +#line 138 "./asn1/s1ap/packet-s1ap-template.c" + +static expert_field ei_s1ap_number_pages_le15 = EI_INIT; enum{ INITIATING_MESSAGE, @@ -1452,7 +1501,6 @@ enum{ UNSUCCESSFUL_OUTCOME }; - /* Global variables */ static guint32 ProcedureCode; static guint32 ProtocolIE_ID; @@ -1462,6 +1510,7 @@ static guint32 handover_type_value; static guint32 message_type; static gboolean g_s1ap_dissect_container = TRUE; static const char *obj_id = NULL; +static guint8 dataCodingScheme = SMS_ENCODING_NOT_SET; static dissector_handle_t gcsna_handle = NULL; static dissector_handle_t s1ap_handle; @@ -1488,6 +1537,7 @@ static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, p static int dissect_SourceeNB_ToTargeteNB_TransparentContainer_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *); static int dissect_TargeteNB_ToSourceeNB_TransparentContainer_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *); +static int dissect_InitialUEMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data); #if 0 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); @@ -1507,6 +1557,74 @@ s1ap_Threshold_RSRQ_fmt(gchar *s, guint32 v) g_snprintf(s, ITEM_LABEL_LENGTH, "%.1fdB (%u)", ((float)v/2)-20, v); } +static const true_false_string s1ap_tfs_interfacesToTrace = { + "Should be traced", + "Should not be traced" +}; + +static void +s1ap_Time_UE_StayedInCell_EnhancedGranularity_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%.1fs", ((float)v)/10); +} + +static const value_string s1ap_serialNumber_gs_vals[] = { + { 0, "Display mode immediate, cell wide"}, + { 1, "Display mode normal, PLMN wide"}, + { 2, "Display mode normal, tracking area wide"}, + { 3, "Display mode normal, cell wide"}, + { 0, NULL}, +}; + +static const value_string s1ap_warningType_vals[] = { + { 0, "Earthquake"}, + { 1, "Tsunami"}, + { 2, "Earthquake and Tsunami"}, + { 3, "Test"}, + { 4, "Other"}, + { 0, NULL}, +}; + +static void +dissect_s1ap_warningMessageContents(tvbuff_t *warning_msg_tvb, proto_tree *tree, packet_info *pinfo, guint8 dcs) +{ + guint32 offset; + guint8 nb_of_pages, length, *str; + proto_item *ti; + tvbuff_t *cb_data_page_tvb, *cb_data_tvb; + int i; + + nb_of_pages = tvb_get_guint8(warning_msg_tvb, 0); + ti = proto_tree_add_uint(tree, hf_s1ap_WarningMessageContents_nb_pages, warning_msg_tvb, 0, 1, nb_of_pages); + if (nb_of_pages > 15) { + expert_add_info_format(pinfo, ti, &ei_s1ap_number_pages_le15, + "Number of pages should be <=15 (found %u)", nb_of_pages); + nb_of_pages = 15; + } + for (i = 0, offset = 1; i < nb_of_pages; i++) { + length = tvb_get_guint8(warning_msg_tvb, offset+82); + cb_data_page_tvb = tvb_new_subset_length(warning_msg_tvb, offset, length); + cb_data_tvb = dissect_cbs_data(dcs, cb_data_page_tvb, tree, pinfo, 0); + if (cb_data_tvb) { + str = tvb_get_string_enc(wmem_packet_scope(), cb_data_tvb, 0, tvb_reported_length(cb_data_tvb), ENC_UTF_8|ENC_NA); + proto_tree_add_string_format(tree, hf_s1ap_WarningMessageContents_decoded_page, warning_msg_tvb, offset, 83, + str, "Decoded Page %u: %s", i+1, str); + } + offset += 83; + } +} + +static void +s1ap_EUTRANRoundTripDelayEstimationInfo_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%uTs (%u)", 16*v, v); +} + +static const true_false_string s1ap_tfs_activate_do_not_activate = { + "Activate", + "Do not activate" +}; + /*--- Included file: packet-s1ap-fn.c ---*/ #line 1 "./asn1/s1ap/packet-s1ap-fn.c" @@ -2122,8 +2240,16 @@ dissect_s1ap_PLMNidentity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U static int dissect_s1ap_MME_Group_ID(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, - 2, 2, FALSE, NULL); +#line 737 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_per_octet_string(tvb, offset, actx, tree, -1, + 2, 2, FALSE, ¶meter_tvb); + + if (parameter_tvb) { + actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + } + + return offset; } @@ -2132,8 +2258,16 @@ dissect_s1ap_MME_Group_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U static int dissect_s1ap_MME_Code(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, - 1, 1, FALSE, NULL); +#line 728 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_per_octet_string(tvb, offset, actx, tree, -1, + 1, 1, FALSE, ¶meter_tvb); + + if (parameter_tvb) { + actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, 1, ENC_BIG_ENDIAN); + } + + return offset; } @@ -2159,8 +2293,16 @@ dissect_s1ap_GUMMEI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, pro static int dissect_s1ap_M_TMSI(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, - 4, 4, FALSE, NULL); +#line 944 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_per_octet_string(tvb, offset, actx, tree, -1, + 4, 4, FALSE, ¶meter_tvb); + + if (parameter_tvb) { + actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, 4, ENC_BIG_ENDIAN); + } + + return offset; } @@ -2240,17 +2382,14 @@ dissect_s1ap_CellBasedMDT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U static int dissect_s1ap_TAC(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 243 "./asn1/s1ap/s1ap.cnf" -tvbuff_t *parameter_tvb=NULL; - - offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, +#line 917 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_per_octet_string(tvb, offset, actx, tree, -1, 2, 2, FALSE, ¶meter_tvb); - - if (!parameter_tvb) - return offset; - - proto_item_append_text(actx->created_item," (%u)",tvb_get_ntohs(parameter_tvb, 0)); + if (parameter_tvb) { + actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + } @@ -2437,9 +2576,9 @@ dissect_s1ap_AllocationAndRetentionPriority(tvbuff_t *tvb _U_, int offset _U_, a static int dissect_s1ap_CELevel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 609 "./asn1/s1ap/s1ap.cnf" - tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; +#line 630 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb; + proto_tree *subtree; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); @@ -2711,6 +2850,10 @@ dissect_s1ap_BitRate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, pr offset = dissect_per_constrained_integer_64b(tvb, offset, actx, tree, hf_index, 0U, G_GUINT64_CONSTANT(10000000000), NULL, FALSE); +#line 723 "./asn1/s1ap/s1ap.cnf" + proto_item_append_text(actx->created_item, "bit/s"); + + return offset; } @@ -3142,7 +3285,7 @@ static value_string_ext s1ap_CauseRadioNetwork_vals_ext = VALUE_STRING_EXT_INIT( static int dissect_s1ap_CauseRadioNetwork(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1464 "./asn1/s1ap/s1ap.cnf" +#line 1774 "./asn1/s1ap/s1ap.cnf" guint32 value; offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, 36, &value, TRUE, 3, NULL); @@ -3164,7 +3307,7 @@ const value_string s1ap_CauseTransport_vals[] = { static int dissect_s1ap_CauseTransport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1469 "./asn1/s1ap/s1ap.cnf" +#line 1779 "./asn1/s1ap/s1ap.cnf" guint32 value; offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, 2, &value, TRUE, 0, NULL); @@ -3189,7 +3332,7 @@ const value_string s1ap_CauseNas_vals[] = { static int dissect_s1ap_CauseNas(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1474 "./asn1/s1ap/s1ap.cnf" +#line 1784 "./asn1/s1ap/s1ap.cnf" guint32 value; offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, 4, &value, TRUE, 1, NULL); @@ -3216,7 +3359,7 @@ const value_string s1ap_CauseProtocol_vals[] = { static int dissect_s1ap_CauseProtocol(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1479 "./asn1/s1ap/s1ap.cnf" +#line 1789 "./asn1/s1ap/s1ap.cnf" guint32 value; offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, 7, &value, TRUE, 0, NULL); @@ -3242,7 +3385,7 @@ const value_string s1ap_CauseMisc_vals[] = { static int dissect_s1ap_CauseMisc(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1484 "./asn1/s1ap/s1ap.cnf" +#line 1794 "./asn1/s1ap/s1ap.cnf" guint32 value; offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, 6, &value, TRUE, 0, NULL); @@ -3301,10 +3444,10 @@ dissect_s1ap_CellAccessMode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx static int dissect_s1ap_Cdma2000PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 558 "./asn1/s1ap/s1ap.cnf" +#line 579 "./asn1/s1ap/s1ap.cnf" tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + proto_tree *subtree; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); @@ -3343,7 +3486,7 @@ dissect_s1ap_Cdma2000RATType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx static int dissect_s1ap_Cdma2000SectorID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 573 "./asn1/s1ap/s1ap.cnf" +#line 594 "./asn1/s1ap/s1ap.cnf" /* 9.2.1.25 * This IE is set to CDMA2000 Reference Cell ID * corresponding to the HRPD/1xRTT sector under @@ -3351,8 +3494,8 @@ dissect_s1ap_Cdma2000SectorID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *act * to handover to. The CDMA2000 Reference Cell * ID is statically configured in the eNB. */ - tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + tvbuff_t *parameter_tvb; + proto_tree *subtree; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); @@ -3493,8 +3636,16 @@ dissect_s1ap_CellType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, p static int dissect_s1ap_LAC(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, - 2, 2, FALSE, NULL); +#line 926 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_per_octet_string(tvb, offset, actx, tree, -1, + 2, 2, FALSE, ¶meter_tvb); + + if (parameter_tvb) { + actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + } + + return offset; } @@ -3513,8 +3664,16 @@ dissect_s1ap_CI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_t static int dissect_s1ap_RAC(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, - 1, 1, FALSE, NULL); +#line 935 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_per_octet_string(tvb, offset, actx, tree, -1, + 1, 1, FALSE, ¶meter_tvb); + + if (parameter_tvb) { + actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, 1, ENC_BIG_ENDIAN); + } + + return offset; } @@ -3806,8 +3965,19 @@ dissect_s1ap_CriticalityDiagnostics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_ static int dissect_s1ap_DataCodingScheme(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 825 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, - 8, 8, FALSE, NULL, NULL); + 8, 8, FALSE, ¶meter_tvb, NULL); + + if (parameter_tvb) { + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_DataCodingScheme); + dataCodingScheme = dissect_cbs_data_coding_scheme(parameter_tvb, actx->pinfo, subtree, 0); + } + + return offset; } @@ -4094,8 +4264,7 @@ dissect_s1ap_ENBname(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, pr } } if (is_ascii) - proto_item_append_text(actx->created_item,"(%s)",tvb_format_text(parameter_tvb, 0, length)); - + proto_item_append_text(actx->created_item," (%s)",tvb_format_text(parameter_tvb, 0, length)); @@ -4106,7 +4275,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 274 "./asn1/s1ap/s1ap.cnf" +#line 286 "./asn1/s1ap/s1ap.cnf" tvbuff_t *parameter_tvb=NULL; proto_tree *subtree; gint tvb_len; @@ -4156,8 +4325,24 @@ dissect_s1ap_ENBX2TLAs(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, static int dissect_s1ap_EncryptionAlgorithms(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 744 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, - 16, 16, TRUE, NULL, NULL); + 16, 16, TRUE, ¶meter_tvb, NULL); + + if(parameter_tvb){ + const gint *fields[] = { + &hf_s1ap_encryptionAlgorithms_EEA1, + &hf_s1ap_encryptionAlgorithms_EEA2, + &hf_s1ap_encryptionAlgorithms_EEA3, + &hf_s1ap_encryptionAlgorithms_Reserved, + NULL + }; + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_EncryptionAlgorithms); + proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 2, fields, ENC_BIG_ENDIAN); + } + + return offset; } @@ -4315,6 +4500,10 @@ dissect_s1ap_ExpectedActivityPeriod(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 1U, 181U, NULL, FALSE); +#line 906 "./asn1/s1ap/s1ap.cnf" +proto_item_append_text(actx->created_item, "s"); + + return offset; } @@ -4325,6 +4514,10 @@ dissect_s1ap_ExpectedIdlePeriod(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *a offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 1U, 181U, NULL, FALSE); +#line 909 "./asn1/s1ap/s1ap.cnf" +proto_item_append_text(actx->created_item, "s"); + + return offset; } @@ -4415,6 +4608,10 @@ dissect_s1ap_ExtendedRepetitionPeriod(tvbuff_t *tvb _U_, int offset _U_, asn1_ct offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 4096U, 131071U, NULL, FALSE); +#line 862 "./asn1/s1ap/s1ap.cnf" + proto_item_append_text(actx->created_item, "s"); + + return offset; } @@ -4609,7 +4806,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 315 "./asn1/s1ap/s1ap.cnf" +#line 336 "./asn1/s1ap/s1ap.cnf" offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, 5, &handover_type_value, TRUE, 0, NULL); @@ -4634,8 +4831,28 @@ dissect_s1ap_Masked_IMEISV(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _ static int dissect_s1ap_MeasurementsToActivate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 865 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, - 8, 8, FALSE, NULL, NULL); + 8, 8, FALSE, ¶meter_tvb, NULL); + + if(parameter_tvb){ + const gint *fields[] = { + &hf_s1ap_measurementsToActivate_M1, + &hf_s1ap_measurementsToActivate_M2, + &hf_s1ap_measurementsToActivate_M3, + &hf_s1ap_measurementsToActivate_M4, + &hf_s1ap_measurementsToActivate_M5, + &hf_s1ap_measurementsToActivate_LoggingM1FromEventTriggered, + &hf_s1ap_measurementsToActivate_M6, + &hf_s1ap_measurementsToActivate_M7, + NULL + }; + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_MeasurementsToActivate); + proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN); + } + + return offset; } @@ -4801,8 +5018,17 @@ dissect_s1ap_ImmediateMDT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U static int dissect_s1ap_IMSI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 951 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, - 3, 8, FALSE, NULL); + 3, 8, FALSE, ¶meter_tvb); + + if (parameter_tvb) { + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_IMSI); + dissect_e212_imsi(parameter_tvb, actx->pinfo, subtree, 0, tvb_reported_length(parameter_tvb), FALSE); + } + + return offset; } @@ -4856,8 +5082,24 @@ dissect_s1ap_InformationOnRecommendedCellsAndENBsForPaging(tvbuff_t *tvb _U_, in static int dissect_s1ap_IntegrityProtectionAlgorithms(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 759 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, - 16, 16, TRUE, NULL, NULL); + 16, 16, TRUE, ¶meter_tvb, NULL); + + if(parameter_tvb){ + const gint *fields[] = { + &hf_s1ap_integrityProtectionAlgorithms_EIA1, + &hf_s1ap_integrityProtectionAlgorithms_EIA2, + &hf_s1ap_integrityProtectionAlgorithms_EIA3, + &hf_s1ap_integrityProtectionAlgorithms_Reserved, + NULL + }; + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_IntegrityProtectionAlgorithms); + proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 2, fields, ENC_BIG_ENDIAN); + } + + return offset; } @@ -4866,8 +5108,24 @@ dissect_s1ap_IntegrityProtectionAlgorithms(tvbuff_t *tvb _U_, int offset _U_, as static int dissect_s1ap_InterfacesToTrace(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 708 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, - 8, 8, FALSE, NULL, NULL); + 8, 8, FALSE, ¶meter_tvb, NULL); + + if(parameter_tvb){ + const gint *fields[] = { + &hf_s1ap_interfacesToTrace_S1_MME, + &hf_s1ap_interfacesToTrace_X2, + &hf_s1ap_interfacesToTrace_Uu, + &hf_s1ap_interfacesToTrace_Reserved, + NULL + }; + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_InterfacesToTrace); + proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN); + } + + return offset; } @@ -4894,6 +5152,12 @@ dissect_s1ap_Time_UE_StayedInCell(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 4095U, NULL, FALSE); +#line 774 "./asn1/s1ap/s1ap.cnf" + proto_item_append_text(actx->created_item, "s"); + + proto_item_append_text(actx->created_item, "s"); + + return offset; } @@ -4918,8 +5182,21 @@ dissect_s1ap_LastVisitedEUTRANCellInformation(tvbuff_t *tvb _U_, int offset _U_, static int dissect_s1ap_LastVisitedUTRANCellInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 780 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb; + proto_tree *subtree; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, - NO_BOUND, NO_BOUND, FALSE, NULL); + NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); + + if (!parameter_tvb) + return offset; + + if (g_s1ap_dissect_container) { + subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_LastVisitedUTRANCellInformation); + dissect_ranap_LastVisitedUTRANCell_Item_PDU(parameter_tvb, actx->pinfo, subtree, NULL); + } + + return offset; } @@ -4972,7 +5249,7 @@ dissect_s1ap_LastVisitedCell_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t static int dissect_s1ap_LPPa_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 265 "./asn1/s1ap/s1ap.cnf" +#line 277 "./asn1/s1ap/s1ap.cnf" tvbuff_t *parameter_tvb=NULL; @@ -4992,8 +5269,13 @@ dissect_s1ap_LPPa_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, p static int dissect_s1ap_LHN_ID(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, - 32, 256, FALSE, NULL); +#line 900 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_per_octet_string(tvb, offset, actx, tree, -1, + 32, 256, FALSE, ¶meter_tvb); + + actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, -1, ENC_UTF_8|ENC_NA); + return offset; } @@ -5385,8 +5667,23 @@ dissect_s1ap_MDT_Activation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx static int dissect_s1ap_MDT_Location_Info(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 884 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, - 8, 8, FALSE, NULL, NULL); + 8, 8, FALSE, ¶meter_tvb, NULL); + + if(parameter_tvb){ + const gint *fields[] = { + &hf_s1ap_MDT_Location_Info_GNSS, + &hf_s1ap_MDT_Location_Info_E_CID, + &hf_s1ap_MDT_Location_Info_Reserved, + NULL + }; + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_MDT_Location_Info); + proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN); + } + + return offset; } @@ -5490,8 +5787,16 @@ dissect_s1ap_PrivacyIndicator(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *act static int dissect_s1ap_MessageIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { - offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, - 16, 16, FALSE, NULL, NULL); +#line 795 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_per_bit_string(tvb, offset, actx, tree, -1, + 16, 16, FALSE, ¶meter_tvb, NULL); + + if (parameter_tvb) { + actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + } + + return offset; } @@ -5510,9 +5815,33 @@ dissect_s1ap_MobilityInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t * static int dissect_s1ap_MMEname(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 242 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb=NULL; + int length; + int p_offset; + gboolean is_ascii; + offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index, 1, 150, TRUE); + + if (!parameter_tvb) + return offset; + + length = tvb_reported_length(parameter_tvb); + + is_ascii = TRUE; + for (p_offset=0; p_offset < length; p_offset++){ + if(!g_ascii_isprint(tvb_get_guint8(parameter_tvb, p_offset ))){ + is_ascii = FALSE; + break; + } + } + if (is_ascii) + proto_item_append_text(actx->created_item," (%s)",tvb_format_text(parameter_tvb, 0, length)); + + + return offset; } @@ -5567,8 +5896,17 @@ dissect_s1ap_MME_UE_S1AP_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx static int dissect_s1ap_MSClassmark2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 843 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, - NO_BOUND, NO_BOUND, FALSE, NULL); + NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); + + if (parameter_tvb) { + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_MSClassmark); + de_ms_cm_2(parameter_tvb, subtree, actx->pinfo, 0, tvb_reported_length(tvb), NULL, 0); + } + + return offset; } @@ -5577,8 +5915,17 @@ dissect_s1ap_MSClassmark2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U static int dissect_s1ap_MSClassmark3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 851 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, - NO_BOUND, NO_BOUND, FALSE, NULL); + NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); + + if (parameter_tvb) { + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_MSClassmark); + de_ms_cm_3(parameter_tvb, subtree, actx->pinfo, 0, tvb_reported_length(tvb), NULL, 0); + } + + return offset; } @@ -5638,7 +5985,7 @@ dissect_s1ap_MutingPatternInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ct 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 256 "./asn1/s1ap/s1ap.cnf" +#line 268 "./asn1/s1ap/s1ap.cnf" tvbuff_t *parameter_tvb=NULL; @@ -5658,8 +6005,17 @@ tvbuff_t *parameter_tvb=NULL; static int dissect_s1ap_NASSecurityParametersfromE_UTRAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 959 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, - NO_BOUND, NO_BOUND, FALSE, NULL); + NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); + + if (parameter_tvb) { + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_NASSecurityParameters); + de_emm_sec_par_from_eutra(parameter_tvb, subtree, actx->pinfo, 0, tvb_reported_length(parameter_tvb), NULL, 0); + } + + return offset; } @@ -5668,8 +6024,17 @@ dissect_s1ap_NASSecurityParametersfromE_UTRAN(tvbuff_t *tvb _U_, int offset _U_, static int dissect_s1ap_NASSecurityParameterstoE_UTRAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 967 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, - NO_BOUND, NO_BOUND, FALSE, NULL); + NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); + + if (parameter_tvb) { + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_NASSecurityParameters); + de_emm_sec_par_to_eutra(parameter_tvb, subtree, actx->pinfo, 0, tvb_reported_length(parameter_tvb), NULL, 0); + } + + return offset; } @@ -5933,8 +6298,16 @@ dissect_s1ap_PagingPriority(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx static int dissect_s1ap_Port_Number(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, - 2, 2, FALSE, NULL); +#line 317 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_per_octet_string(tvb, offset, actx, tree, -1, + 2, 2, FALSE, ¶meter_tvb); + + if (parameter_tvb) { + actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + } + + return offset; } @@ -6154,7 +6527,7 @@ dissect_s1ap_RequestType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_ static int dissect_s1ap_RIMInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 542 "./asn1/s1ap/s1ap.cnf" +#line 563 "./asn1/s1ap/s1ap.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; @@ -6163,7 +6536,7 @@ dissect_s1ap_RIMInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx if (!parameter_tvb) - return offset; + return offset; subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_RIMInformation); if ((tvb_reported_length(parameter_tvb)>0)&&(bssgp_handle)){ @@ -6262,6 +6635,10 @@ dissect_s1ap_RepetitionPeriod(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *act offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 4095U, NULL, FALSE); +#line 812 "./asn1/s1ap/s1ap.cnf" + proto_item_append_text(actx->created_item, "s"); + + return offset; } @@ -6269,9 +6646,9 @@ dissect_s1ap_RepetitionPeriod(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *act static int dissect_s1ap_UE_RLF_Report_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 623 "./asn1/s1ap/s1ap.cnf" - tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; +#line 644 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb; + proto_tree *subtree; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); @@ -6292,9 +6669,9 @@ dissect_s1ap_UE_RLF_Report_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx static int dissect_s1ap_UE_RLF_Report_Container_for_extended_bands(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 637 "./asn1/s1ap/s1ap.cnf" - tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; +#line 658 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb; + proto_tree *subtree; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); @@ -6331,11 +6708,11 @@ dissect_s1ap_RLFReportInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t 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 451 "./asn1/s1ap/s1ap.cnf" +#line 472 "./asn1/s1ap/s1ap.cnf" tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + proto_tree *subtree; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); @@ -6451,8 +6828,19 @@ dissect_s1ap_SecurityContext(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx static int dissect_s1ap_SerialNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 802 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, - 16, 16, FALSE, NULL, NULL); + 16, 16, FALSE, ¶meter_tvb, NULL); + + if (parameter_tvb) { + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_SerialNumber); + proto_tree_add_item(subtree, hf_s1ap_SerialNumber_gs, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(subtree, hf_s1ap_SerialNumber_msg_code, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(subtree, hf_s1ap_SerialNumber_upd_nb, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + } + + return offset; } @@ -6638,9 +7026,9 @@ dissect_s1ap_SynchronisationInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ 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 336 "./asn1/s1ap/s1ap.cnf" +#line 357 "./asn1/s1ap/s1ap.cnf" tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + proto_tree *subtree; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); @@ -6984,10 +7372,10 @@ dissect_s1ap_TargeteNB_ToSourceeNB_TransparentContainer(tvbuff_t *tvb _U_, int o 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 393 "./asn1/s1ap/s1ap.cnf" +#line 414 "./asn1/s1ap/s1ap.cnf" tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + proto_tree *subtree; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); @@ -7096,8 +7484,20 @@ dissect_s1ap_TransportInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t static int dissect_s1ap_E_UTRAN_Trace_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 697 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb; + proto_tree *subtree; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, - 8, 8, FALSE, NULL); + 8, 8, FALSE, ¶meter_tvb); + + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_E_UTRAN_Trace_ID); + dissect_e212_mcc_mnc(parameter_tvb, actx->pinfo, subtree, 0, E212_NONE, FALSE); + proto_tree_add_item(subtree, hf_s1ap_E_UTRAN_Trace_ID_TraceID, parameter_tvb, 3, 3, ENC_BIG_ENDIAN); + proto_tree_add_item(subtree, hf_s1ap_E_UTRAN_Trace_ID_TraceRecordingSessionReference, parameter_tvb, 6, 2, ENC_BIG_ENDIAN); + + return offset; } @@ -7279,9 +7679,9 @@ dissect_s1ap_UEIdentityIndexValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t static int dissect_s1ap_UE_HistoryInformationFromTheUE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 508 "./asn1/s1ap/s1ap.cnf" +#line 529 "./asn1/s1ap/s1ap.cnf" tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + proto_tree *subtree; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); @@ -7325,9 +7725,9 @@ dissect_s1ap_UEPagingID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, static int dissect_s1ap_UERadioCapability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 521 "./asn1/s1ap/s1ap.cnf" +#line 542 "./asn1/s1ap/s1ap.cnf" tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + proto_tree *subtree; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); @@ -7349,10 +7749,10 @@ dissect_s1ap_UERadioCapability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac static int dissect_s1ap_UERadioCapabilityForPaging(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 593 "./asn1/s1ap/s1ap.cnf" +#line 614 "./asn1/s1ap/s1ap.cnf" - tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; + tvbuff_t *parameter_tvb; + proto_tree *subtree; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); @@ -7471,8 +7871,19 @@ dissect_s1ap_WarningAreaList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx static int dissect_s1ap_WarningType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 815 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, - 2, 2, FALSE, NULL); + 2, 2, FALSE, ¶meter_tvb); + + if (parameter_tvb) { + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_WarningType); + proto_tree_add_item(subtree, hf_s1ap_WarningType_value, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(subtree, hf_s1ap_WarningType_emergency_user_alert, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(subtree, hf_s1ap_WarningType_popup, parameter_tvb, 0, 2, ENC_BIG_ENDIAN); + } + + return offset; } @@ -7491,8 +7902,17 @@ dissect_s1ap_WarningSecurityInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t * static int dissect_s1ap_WarningMessageContents(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 835 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb = NULL; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, - 1, 9600, FALSE, NULL); + 1, 9600, FALSE, ¶meter_tvb); + + if (parameter_tvb) { + proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_WarningMessageContents); + dissect_s1ap_warningMessageContents(parameter_tvb, subtree, actx->pinfo, dataCodingScheme); + } + + return offset; } @@ -7579,7 +7999,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 320 "./asn1/s1ap/s1ap.cnf" +#line 341 "./asn1/s1ap/s1ap.cnf" handover_type_value = 0; col_append_str(actx->pinfo->cinfo, COL_INFO, ", HandoverRequired "); @@ -7597,7 +8017,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 322 "./asn1/s1ap/s1ap.cnf" +#line 343 "./asn1/s1ap/s1ap.cnf" handover_type_value = 0; col_append_str(actx->pinfo->cinfo, COL_INFO, ", HandoverCommand "); @@ -7643,7 +8063,7 @@ static const per_sequence_t HandoverPreparationFailure_sequence[] = { static int dissect_s1ap_HandoverPreparationFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1369 "./asn1/s1ap/s1ap.cnf" +#line 1678 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", HandoverPreparationFailure "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -7660,7 +8080,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 324 "./asn1/s1ap/s1ap.cnf" +#line 345 "./asn1/s1ap/s1ap.cnf" handover_type_value = 0; col_append_str(actx->pinfo->cinfo, COL_INFO, ", HandoverRequest "); @@ -7705,7 +8125,7 @@ static const per_sequence_t HandoverRequestAcknowledge_sequence[] = { static int dissect_s1ap_HandoverRequestAcknowledge(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 326 "./asn1/s1ap/s1ap.cnf" +#line 347 "./asn1/s1ap/s1ap.cnf" handover_type_value = 0; col_append_str(actx->pinfo->cinfo, COL_INFO, ", HandoverRequestAcknowledge "); @@ -7779,7 +8199,7 @@ static const per_sequence_t HandoverFailure_sequence[] = { static int dissect_s1ap_HandoverFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1375 "./asn1/s1ap/s1ap.cnf" +#line 1684 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", HandoverFailure "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -7796,7 +8216,7 @@ static const per_sequence_t HandoverNotify_sequence[] = { static int dissect_s1ap_HandoverNotify(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1377 "./asn1/s1ap/s1ap.cnf" +#line 1686 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", HandoverNotify "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -7813,7 +8233,7 @@ static const per_sequence_t PathSwitchRequest_sequence[] = { static int dissect_s1ap_PathSwitchRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1379 "./asn1/s1ap/s1ap.cnf" +#line 1688 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", PathSwitchRequest "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -7856,7 +8276,7 @@ static const per_sequence_t PathSwitchRequestAcknowledge_sequence[] = { static int dissect_s1ap_PathSwitchRequestAcknowledge(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1381 "./asn1/s1ap/s1ap.cnf" +#line 1690 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", PathSwitchRequestAcknowledge "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -7899,7 +8319,7 @@ static const per_sequence_t PathSwitchRequestFailure_sequence[] = { static int dissect_s1ap_PathSwitchRequestFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1383 "./asn1/s1ap/s1ap.cnf" +#line 1692 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", PathSwitchRequestFailure "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -7916,7 +8336,7 @@ static const per_sequence_t HandoverCancel_sequence[] = { static int dissect_s1ap_HandoverCancel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1385 "./asn1/s1ap/s1ap.cnf" +#line 1694 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", HandoverCancel "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -7933,7 +8353,7 @@ static const per_sequence_t HandoverCancelAcknowledge_sequence[] = { static int dissect_s1ap_HandoverCancelAcknowledge(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1387 "./asn1/s1ap/s1ap.cnf" +#line 1696 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", HandoverCancelAcknowledge "); @@ -7952,7 +8372,7 @@ static const per_sequence_t E_RABSetupRequest_sequence[] = { static int dissect_s1ap_E_RABSetupRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1331 "./asn1/s1ap/s1ap.cnf" +#line 1640 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", E_RABSetupRequest "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8002,7 +8422,7 @@ static const per_sequence_t E_RABSetupResponse_sequence[] = { static int dissect_s1ap_E_RABSetupResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1333 "./asn1/s1ap/s1ap.cnf" +#line 1642 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", E_RABSetupResponse "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8050,7 +8470,7 @@ static const per_sequence_t E_RABModifyRequest_sequence[] = { static int dissect_s1ap_E_RABModifyRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1335 "./asn1/s1ap/s1ap.cnf" +#line 1644 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", E_RABModifyRequest "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8098,7 +8518,7 @@ static const per_sequence_t E_RABModifyResponse_sequence[] = { static int dissect_s1ap_E_RABModifyResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1337 "./asn1/s1ap/s1ap.cnf" +#line 1646 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", E_RABModifyResponse "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8144,7 +8564,7 @@ static const per_sequence_t E_RABReleaseCommand_sequence[] = { static int dissect_s1ap_E_RABReleaseCommand(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1339 "./asn1/s1ap/s1ap.cnf" +#line 1648 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", E_RABReleaseCommand "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8161,7 +8581,7 @@ static const per_sequence_t E_RABReleaseResponse_sequence[] = { static int dissect_s1ap_E_RABReleaseResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1341 "./asn1/s1ap/s1ap.cnf" +#line 1650 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", E_RABReleaseResponse "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8207,7 +8627,7 @@ static const per_sequence_t E_RABReleaseIndication_sequence[] = { static int dissect_s1ap_E_RABReleaseIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1343 "./asn1/s1ap/s1ap.cnf" +#line 1652 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", E_RABReleaseIndication "); @@ -8225,7 +8645,7 @@ static const per_sequence_t InitialContextSetupRequest_sequence[] = { static int dissect_s1ap_InitialContextSetupRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1346 "./asn1/s1ap/s1ap.cnf" +#line 1655 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", InitialContextSetupRequest "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8275,7 +8695,7 @@ static const per_sequence_t InitialContextSetupResponse_sequence[] = { static int dissect_s1ap_InitialContextSetupResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1348 "./asn1/s1ap/s1ap.cnf" +#line 1657 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", InitialContextSetupResponse "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8323,7 +8743,7 @@ static const per_sequence_t InitialContextSetupFailure_sequence[] = { static int dissect_s1ap_InitialContextSetupFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1350 "./asn1/s1ap/s1ap.cnf" +#line 1659 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", InitialContextSetupFailure "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8383,7 +8803,7 @@ static const per_sequence_t UEContextReleaseRequest_sequence[] = { static int dissect_s1ap_UEContextReleaseRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1352 "./asn1/s1ap/s1ap.cnf" +#line 1661 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", UEContextReleaseRequest "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8400,7 +8820,7 @@ static const per_sequence_t UEContextReleaseCommand_sequence[] = { static int dissect_s1ap_UEContextReleaseCommand(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1354 "./asn1/s1ap/s1ap.cnf" +#line 1663 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", UEContextReleaseCommand "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8417,7 +8837,7 @@ static const per_sequence_t UEContextReleaseComplete_sequence[] = { static int dissect_s1ap_UEContextReleaseComplete(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1356 "./asn1/s1ap/s1ap.cnf" +#line 1665 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", UEContextReleaseComplete "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8434,7 +8854,7 @@ static const per_sequence_t UEContextModificationRequest_sequence[] = { static int dissect_s1ap_UEContextModificationRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1358 "./asn1/s1ap/s1ap.cnf" +#line 1667 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", UEContextModificationRequest "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8451,7 +8871,7 @@ static const per_sequence_t UEContextModificationResponse_sequence[] = { static int dissect_s1ap_UEContextModificationResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1360 "./asn1/s1ap/s1ap.cnf" +#line 1669 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", UEContextModificationResponse "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8468,7 +8888,7 @@ static const per_sequence_t UEContextModificationFailure_sequence[] = { static int dissect_s1ap_UEContextModificationFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1362 "./asn1/s1ap/s1ap.cnf" +#line 1671 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", UEContextModificationFailure "); @@ -8486,7 +8906,7 @@ static const per_sequence_t UERadioCapabilityMatchRequest_sequence[] = { static int dissect_s1ap_UERadioCapabilityMatchRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1437 "./asn1/s1ap/s1ap.cnf" +#line 1747 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", UERadioCapabilityMatchRequest "); @@ -8504,7 +8924,7 @@ static const per_sequence_t UERadioCapabilityMatchResponse_sequence[] = { static int dissect_s1ap_UERadioCapabilityMatchResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1440 "./asn1/s1ap/s1ap.cnf" +#line 1750 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", UERadioCapabilityMatchResponse "); @@ -8522,7 +8942,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 307 "./asn1/s1ap/s1ap.cnf" +#line 328 "./asn1/s1ap/s1ap.cnf" /* Set the direction of the message */ actx->pinfo->link_dir=P2P_DIR_DL; @@ -8541,7 +8961,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 303 "./asn1/s1ap/s1ap.cnf" +#line 324 "./asn1/s1ap/s1ap.cnf" /* Set the direction of the message */ actx->pinfo->link_dir=P2P_DIR_UL; @@ -8560,7 +8980,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 311 "./asn1/s1ap/s1ap.cnf" +#line 332 "./asn1/s1ap/s1ap.cnf" /* Set the direction of the message */ actx->pinfo->link_dir=P2P_DIR_UL; @@ -8593,7 +9013,7 @@ static const per_sequence_t RerouteNASRequest_sequence[] = { static int dissect_s1ap_RerouteNASRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1455 "./asn1/s1ap/s1ap.cnf" +#line 1765 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", RerouteNASRequest "); @@ -8604,6 +9024,27 @@ dissect_s1ap_RerouteNASRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac } + +static int +dissect_s1ap_S1_Message(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 687 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb; + proto_tree *subtree; + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); + + if (!parameter_tvb) + return offset; + + subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_S1_Message); + dissect_InitialUEMessage_PDU(parameter_tvb, actx->pinfo, subtree, NULL); + + + + return offset; +} + + static const per_sequence_t Reset_sequence[] = { { &hf_s1ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_s1ap_ProtocolIE_Container }, { NULL, 0, 0, NULL } @@ -8611,7 +9052,7 @@ static const per_sequence_t Reset_sequence[] = { static int dissect_s1ap_Reset(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1391 "./asn1/s1ap/s1ap.cnf" +#line 1700 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", Reset "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8679,7 +9120,7 @@ static const per_sequence_t ResetAcknowledge_sequence[] = { static int dissect_s1ap_ResetAcknowledge(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1393 "./asn1/s1ap/s1ap.cnf" +#line 1702 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", ResetAcknowledge "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8724,7 +9165,7 @@ static const per_sequence_t S1SetupRequest_sequence[] = { static int dissect_s1ap_S1SetupRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1397 "./asn1/s1ap/s1ap.cnf" +#line 1706 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", S1SetupRequest "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8741,7 +9182,7 @@ static const per_sequence_t S1SetupResponse_sequence[] = { static int dissect_s1ap_S1SetupResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1399 "./asn1/s1ap/s1ap.cnf" +#line 1708 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", S1SetupResponse "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8758,7 +9199,7 @@ static const per_sequence_t S1SetupFailure_sequence[] = { static int dissect_s1ap_S1SetupFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1401 "./asn1/s1ap/s1ap.cnf" +#line 1710 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", S1SetupFailure "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8775,7 +9216,7 @@ static const per_sequence_t ENBConfigurationUpdate_sequence[] = { static int dissect_s1ap_ENBConfigurationUpdate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1403 "./asn1/s1ap/s1ap.cnf" +#line 1712 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", ENBConfigurationUpdate "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8792,7 +9233,7 @@ static const per_sequence_t ENBConfigurationUpdateAcknowledge_sequence[] = { static int dissect_s1ap_ENBConfigurationUpdateAcknowledge(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1405 "./asn1/s1ap/s1ap.cnf" +#line 1714 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", ENBConfigurationUpdateAcknowledge "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8809,7 +9250,7 @@ static const per_sequence_t ENBConfigurationUpdateFailure_sequence[] = { static int dissect_s1ap_ENBConfigurationUpdateFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1407 "./asn1/s1ap/s1ap.cnf" +#line 1716 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", ENBConfigurationUpdateFailure "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8826,7 +9267,7 @@ static const per_sequence_t MMEConfigurationUpdate_sequence[] = { static int dissect_s1ap_MMEConfigurationUpdate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1409 "./asn1/s1ap/s1ap.cnf" +#line 1718 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", MMEConfigurationUpdate "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8843,7 +9284,7 @@ static const per_sequence_t MMEConfigurationUpdateAcknowledge_sequence[] = { static int dissect_s1ap_MMEConfigurationUpdateAcknowledge(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1411 "./asn1/s1ap/s1ap.cnf" +#line 1720 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", MMEConfigurationUpdateAcknowledge "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -8860,7 +9301,7 @@ static const per_sequence_t MMEConfigurationUpdateFailure_sequence[] = { static int dissect_s1ap_MMEConfigurationUpdateFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1413 "./asn1/s1ap/s1ap.cnf" +#line 1722 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", MMEConfigurationUpdateFailure "); @@ -9074,8 +9515,9 @@ static const per_sequence_t WriteReplaceWarningRequest_sequence[] = { static int dissect_s1ap_WriteReplaceWarningRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1416 "./asn1/s1ap/s1ap.cnf" +#line 1725 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", WriteReplaceWarningRequest "); + dataCodingScheme = SMS_ENCODING_NOT_SET; offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_s1ap_WriteReplaceWarningRequest, WriteReplaceWarningRequest_sequence); @@ -9091,7 +9533,7 @@ static const per_sequence_t WriteReplaceWarningResponse_sequence[] = { static int dissect_s1ap_WriteReplaceWarningResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1418 "./asn1/s1ap/s1ap.cnf" +#line 1728 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", WriteReplaceWarningResponse "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -9198,7 +9640,7 @@ static const per_sequence_t KillRequest_sequence[] = { static int dissect_s1ap_KillRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1420 "./asn1/s1ap/s1ap.cnf" +#line 1730 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", KillRequest "); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -9215,7 +9657,7 @@ static const per_sequence_t KillResponse_sequence[] = { static int dissect_s1ap_KillResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1422 "./asn1/s1ap/s1ap.cnf" +#line 1732 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", KillResponse "); @@ -9247,7 +9689,7 @@ static const per_sequence_t PWSFailureIndication_sequence[] = { static int dissect_s1ap_PWSFailureIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1458 "./asn1/s1ap/s1ap.cnf" +#line 1768 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", PWSFailureIndication "); @@ -9268,7 +9710,7 @@ static const per_sequence_t DownlinkUEAssociatedLPPaTransport_sequence[] = { static int dissect_s1ap_DownlinkUEAssociatedLPPaTransport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1425 "./asn1/s1ap/s1ap.cnf" +#line 1735 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", DownlinkUEAssociatedLPPaTransport "); @@ -9286,7 +9728,7 @@ static const per_sequence_t UplinkUEAssociatedLPPaTransport_sequence[] = { static int dissect_s1ap_UplinkUEAssociatedLPPaTransport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1428 "./asn1/s1ap/s1ap.cnf" +#line 1738 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", UplinkUEAssociatedLPPaTransport "); @@ -9304,7 +9746,7 @@ static const per_sequence_t DownlinkNonUEAssociatedLPPaTransport_sequence[] = { static int dissect_s1ap_DownlinkNonUEAssociatedLPPaTransport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1431 "./asn1/s1ap/s1ap.cnf" +#line 1741 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", DownlinkNonUEAssociatedLPPaTransport "); @@ -9322,7 +9764,7 @@ static const per_sequence_t UplinkNonUEAssociatedLPPaTransport_sequence[] = { static int dissect_s1ap_UplinkNonUEAssociatedLPPaTransport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1434 "./asn1/s1ap/s1ap.cnf" +#line 1744 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", UplinkNonUEAssociatedLPPaTransport "); @@ -9340,7 +9782,7 @@ static const per_sequence_t E_RABModificationIndication_sequence[] = { static int dissect_s1ap_E_RABModificationIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1443 "./asn1/s1ap/s1ap.cnf" +#line 1753 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", E-RABModificationIndication "); @@ -9428,7 +9870,7 @@ static const per_sequence_t E_RABModificationConfirm_sequence[] = { static int dissect_s1ap_E_RABModificationConfirm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1446 "./asn1/s1ap/s1ap.cnf" +#line 1756 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", E-RABModificationConfirm "); @@ -9475,7 +9917,7 @@ static const per_sequence_t UEContextModificationIndication_sequence[] = { static int dissect_s1ap_UEContextModificationIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1449 "./asn1/s1ap/s1ap.cnf" +#line 1759 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", UEContextModificationIndication "); @@ -9493,7 +9935,7 @@ static const per_sequence_t UEContextModificationConfirm_sequence[] = { static int dissect_s1ap_UEContextModificationConfirm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1452 "./asn1/s1ap/s1ap.cnf" +#line 1762 "./asn1/s1ap/s1ap.cnf" col_append_str(actx->pinfo->cinfo, COL_INFO, ", UEContextModificationConfirm "); @@ -10096,9 +10538,9 @@ dissect_s1ap_CellStateIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t * static int dissect_s1ap_T_uERLFReportContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 651 "./asn1/s1ap/s1ap.cnf" - tvbuff_t *parameter_tvb; - proto_tree *subtree = NULL; +#line 672 "./asn1/s1ap/s1ap.cnf" + tvbuff_t *parameter_tvb; + proto_tree *subtree; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); @@ -12313,6 +12755,14 @@ static int dissect_RerouteNASRequest_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _ offset += 7; offset >>= 3; return offset; } +static int dissect_S1_Message_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_s1ap_S1_Message(tvb, offset, &asn1_ctx, tree, hf_s1ap_S1_Message_PDU); + offset += 7; offset >>= 3; + return offset; +} static int dissect_Reset_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { int offset = 0; asn1_ctx_t asn1_ctx; @@ -12876,7 +13326,7 @@ int dissect_s1ap_SONtransferCause_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, /*--- End of included file: packet-s1ap-fn.c ---*/ -#line 155 "./asn1/s1ap/packet-s1ap-template.c" +#line 272 "./asn1/s1ap/packet-s1ap-template.c" static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { @@ -13134,6 +13584,7 @@ proto_reg_handoff_s1ap(void) dissector_add_uint("s1ap.ies", id_PWSfailedECGIList, create_dissector_handle(dissect_PWSfailedECGIList_PDU, proto_s1ap)); dissector_add_uint("s1ap.ies", id_MME_Group_ID, create_dissector_handle(dissect_MME_Group_ID_PDU, proto_s1ap)); dissector_add_uint("s1ap.ies", id_Additional_GUTI, create_dissector_handle(dissect_Additional_GUTI_PDU, proto_s1ap)); + dissector_add_uint("s1ap.ies", id_S1_Message, create_dissector_handle(dissect_S1_Message_PDU, proto_s1ap)); dissector_add_uint("s1ap.ies", id_CSGMembershipInfo, create_dissector_handle(dissect_CSGMembershipInfo_PDU, proto_s1ap)); dissector_add_uint("s1ap.ies", id_Paging_eDRXInformation, create_dissector_handle(dissect_Paging_eDRXInformation_PDU, proto_s1ap)); dissector_add_uint("s1ap.ies", id_UE_RetentionInformation, create_dissector_handle(dissect_UE_RetentionInformation_PDU, proto_s1ap)); @@ -13270,7 +13721,7 @@ proto_reg_handoff_s1ap(void) /*--- End of included file: packet-s1ap-dis-tab.c ---*/ -#line 241 "./asn1/s1ap/packet-s1ap-template.c" +#line 358 "./asn1/s1ap/packet-s1ap-template.c" } else { if (SctpPort != 0) { dissector_delete_uint("sctp.port", SctpPort, s1ap_handle); @@ -13297,7 +13748,138 @@ void proto_register_s1ap(void) { { "transportLayerAddress(IPv6)", "s1ap.transportLayerAddressIPv6", FT_IPv6, BASE_NONE, NULL, 0, NULL, HFILL }}, - + { &hf_s1ap_E_UTRAN_Trace_ID_TraceID, + { "TraceID", "s1ap.E_UTRAN_Trace_ID.TraceID", + FT_UINT24, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_s1ap_E_UTRAN_Trace_ID_TraceRecordingSessionReference, + { "TraceRecordingSessionReference", "s1ap.E_UTRAN_Trace_ID.TraceRecordingSessionReference", + FT_UINT16, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_s1ap_interfacesToTrace_S1_MME, + { "S1-MME", "s1ap.interfacesToTrace.S1_MME", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_interfacesToTrace), 0x80, + NULL, HFILL }}, + { &hf_s1ap_interfacesToTrace_X2, + { "X2", "s1ap.interfacesToTrace.X2", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_interfacesToTrace), 0x40, + NULL, HFILL }}, + { &hf_s1ap_interfacesToTrace_Uu, + { "Uu", "s1ap.interfacesToTrace.Uu", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_interfacesToTrace), 0x20, + NULL, HFILL }}, + { &hf_s1ap_interfacesToTrace_Reserved, + { "Reserved", "s1ap.interfacesToTrace.Reserved", + FT_UINT8, BASE_HEX, NULL, 0x1f, + NULL, HFILL }}, + { &hf_s1ap_encryptionAlgorithms_EEA1, + { "128-EEA1", "s1ap.encryptionAlgorithms.EEA1", + FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x8000, + NULL, HFILL }}, + { &hf_s1ap_encryptionAlgorithms_EEA2, + { "128-EEA2", "s1ap.encryptionAlgorithms.EEA2", + FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x4000, + NULL, HFILL }}, + { &hf_s1ap_encryptionAlgorithms_EEA3, + { "128-EEA3", "s1ap.encryptionAlgorithms.EEA3", + FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x2000, + NULL, HFILL }}, + { &hf_s1ap_encryptionAlgorithms_Reserved, + { "Reserved", "s1ap.encryptionAlgorithms.Reserved", + FT_UINT16, BASE_HEX, NULL, 0x1fff, + NULL, HFILL }}, + { &hf_s1ap_integrityProtectionAlgorithms_EIA1, + { "128-EIA1", "s1ap.integrityProtectionAlgorithms.EIA1", + FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x8000, + NULL, HFILL }}, + { &hf_s1ap_integrityProtectionAlgorithms_EIA2, + { "128-EIA2", "s1ap.integrityProtectionAlgorithms.EIA2", + FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x4000, + NULL, HFILL }}, + { &hf_s1ap_integrityProtectionAlgorithms_EIA3, + { "128-EIA3", "s1ap.integrityProtectionAlgorithms.EIA3", + FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x2000, + NULL, HFILL }}, + { &hf_s1ap_integrityProtectionAlgorithms_Reserved, + { "Reserved", "s1ap.integrityProtectionAlgorithms.Reserved", + FT_UINT16, BASE_HEX, NULL, 0x1fff, + NULL, HFILL }}, + { &hf_s1ap_SerialNumber_gs, + { "Geographical Scope", "s1ap.SerialNumber.gs", + FT_UINT16, BASE_DEC, VALS(s1ap_serialNumber_gs_vals), 0xc000, + NULL, HFILL }}, + { &hf_s1ap_SerialNumber_msg_code, + { "Message Code", "s1ap.SerialNumber.msg_code", + FT_UINT16, BASE_DEC, NULL, 0x3ff0, + NULL, HFILL }}, + { &hf_s1ap_SerialNumber_upd_nb, + { "Update Number", "s1ap.SerialNumber.upd_nb", + FT_UINT16, BASE_DEC, NULL, 0x000f, + NULL, HFILL }}, + { &hf_s1ap_WarningType_value, + { "Warning Type Value", "s1ap.WarningType.value", + FT_UINT16, BASE_DEC, VALS(s1ap_warningType_vals), 0xfe00, + NULL, HFILL }}, + { &hf_s1ap_WarningType_emergency_user_alert, + { "Emergency User Alert", "s1ap.WarningType.emergency_user_alert", + FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0100, + NULL, HFILL }}, + { &hf_s1ap_WarningType_popup, + { "Popup", "s1ap.WarningType.popup", + FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0080, + NULL, HFILL }}, + { &hf_s1ap_WarningMessageContents_nb_pages, + { "Number of Pages", "s1ap.WarningMessageContents.nb_pages", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_s1ap_WarningMessageContents_decoded_page, + { "Decoded Page", "lte-rrc.WarningMessageContents.decoded_page", + FT_STRING, STR_UNICODE, NULL, 0, + NULL, HFILL }}, + { &hf_s1ap_measurementsToActivate_M1, + { "M1", "s1ap.measurementsToActivate.M1", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x80, + NULL, HFILL }}, + { &hf_s1ap_measurementsToActivate_M2, + { "M2", "s1ap.measurementsToActivate.M2", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x40, + NULL, HFILL }}, + { &hf_s1ap_measurementsToActivate_M3, + { "M3", "s1ap.measurementsToActivate.M3", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x20, + NULL, HFILL }}, + { &hf_s1ap_measurementsToActivate_M4, + { "M4", "s1ap.measurementsToActivate.M4", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x10, + NULL, HFILL }}, + { &hf_s1ap_measurementsToActivate_M5, + { "M5", "s1ap.measurementsToActivate.M5", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x08, + NULL, HFILL }}, + { &hf_s1ap_measurementsToActivate_LoggingM1FromEventTriggered, + { "LoggingOfM1FromEventTriggeredMeasurementReports", "s1ap.measurementsToActivate.LoggingM1FromEventTriggered", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x04, + NULL, HFILL }}, + { &hf_s1ap_measurementsToActivate_M6, + { "M6", "s1ap.measurementsToActivate.M6", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x02, + NULL, HFILL }}, + { &hf_s1ap_measurementsToActivate_M7, + { "M7", "s1ap.measurementsToActivate.M7", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x01, + NULL, HFILL }}, + { &hf_s1ap_MDT_Location_Info_GNSS, + { "GNSS", "s1ap.MDT_Location_Info.GNSS", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x80, + NULL, HFILL }}, + { &hf_s1ap_MDT_Location_Info_E_CID, + { "E-CID", "s1ap.MDT_Location_Info.E_CID", + FT_BOOLEAN, 8, TFS(&s1ap_tfs_activate_do_not_activate), 0x40, + NULL, HFILL }}, + { &hf_s1ap_MDT_Location_Info_Reserved, + { "Reserved", "s1ap.MDT_Location_Info.Reserved", + FT_UINT8, BASE_HEX, NULL, 0x3f, + NULL, HFILL }}, /*--- Included file: packet-s1ap-hfarr.c ---*/ #line 1 "./asn1/s1ap/packet-s1ap-hfarr.c" @@ -13467,7 +14049,7 @@ void proto_register_s1ap(void) { NULL, HFILL }}, { &hf_s1ap_EUTRANRoundTripDelayEstimationInfo_PDU, { "EUTRANRoundTripDelayEstimationInfo", "s1ap.EUTRANRoundTripDelayEstimationInfo", - FT_UINT32, BASE_DEC, NULL, 0, + FT_UINT32, BASE_CUSTOM, CF_FUNC(s1ap_EUTRANRoundTripDelayEstimationInfo_fmt), 0, NULL, HFILL }}, { &hf_s1ap_ExpectedUEBehaviour_PDU, { "ExpectedUEBehaviour", "s1ap.ExpectedUEBehaviour_element", @@ -13523,7 +14105,7 @@ void proto_register_s1ap(void) { NULL, HFILL }}, { &hf_s1ap_LHN_ID_PDU, { "LHN-ID", "s1ap.LHN_ID", - FT_BYTES, BASE_NONE, NULL, 0, + FT_STRING, STR_UNICODE, NULL, 0, NULL, HFILL }}, { &hf_s1ap_LoggedMBSFNMDT_PDU, { "LoggedMBSFNMDT", "s1ap.LoggedMBSFNMDT_element", @@ -13571,7 +14153,7 @@ void proto_register_s1ap(void) { NULL, HFILL }}, { &hf_s1ap_MessageIdentifier_PDU, { "MessageIdentifier", "s1ap.MessageIdentifier", - FT_BYTES, BASE_NONE, NULL, 0, + FT_UINT16, BASE_DEC|BASE_EXT_STRING, <e_rrc_messageIdentifier_vals_ext, 0, NULL, HFILL }}, { &hf_s1ap_MobilityInformation_PDU, { "MobilityInformation", "s1ap.MobilityInformation", @@ -13587,7 +14169,7 @@ void proto_register_s1ap(void) { NULL, HFILL }}, { &hf_s1ap_MME_Group_ID_PDU, { "MME-Group-ID", "s1ap.MME_Group_ID", - FT_BYTES, BASE_NONE, NULL, 0, + FT_UINT16, BASE_DEC_HEX, NULL, 0, NULL, HFILL }}, { &hf_s1ap_MME_UE_S1AP_ID_PDU, { "MME-UE-S1AP-ID", "s1ap.MME_UE_S1AP_ID", @@ -13795,7 +14377,7 @@ void proto_register_s1ap(void) { NULL, HFILL }}, { &hf_s1ap_Time_UE_StayedInCell_EnhancedGranularity_PDU, { "Time-UE-StayedInCell-EnhancedGranularity", "s1ap.Time_UE_StayedInCell_EnhancedGranularity", - FT_UINT32, BASE_DEC, NULL, 0, + FT_UINT32, BASE_CUSTOM, CF_FUNC(s1ap_Time_UE_StayedInCell_EnhancedGranularity_fmt), 0, NULL, HFILL }}, { &hf_s1ap_TransportInformation_PDU, { "TransportInformation", "s1ap.TransportInformation_element", @@ -14169,6 +14751,10 @@ void proto_register_s1ap(void) { { "RerouteNASRequest", "s1ap.RerouteNASRequest_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_s1ap_S1_Message_PDU, + { "S1-Message", "s1ap.S1_Message", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, { &hf_s1ap_Reset_PDU, { "Reset", "s1ap.Reset_element", FT_NONE, BASE_NONE, NULL, 0, @@ -14507,7 +15093,7 @@ void proto_register_s1ap(void) { NULL, HFILL }}, { &hf_s1ap_m_TMSI, { "m-TMSI", "s1ap.m_TMSI", - FT_BYTES, BASE_NONE, NULL, 0, + FT_UINT32, BASE_DEC_HEX, NULL, 0, NULL, HFILL }}, { &hf_s1ap_iE_Extensions, { "iE-Extensions", "s1ap.iE_Extensions", @@ -14691,7 +15277,7 @@ void proto_register_s1ap(void) { NULL, HFILL }}, { &hf_s1ap_lAC, { "lAC", "s1ap.lAC", - FT_BYTES, BASE_NONE, NULL, 0, + FT_UINT16, BASE_DEC_HEX, NULL, 0, NULL, HFILL }}, { &hf_s1ap_cI, { "cI", "s1ap.cI", @@ -14699,7 +15285,7 @@ void proto_register_s1ap(void) { NULL, HFILL }}, { &hf_s1ap_rAC, { "rAC", "s1ap.rAC", - FT_BYTES, BASE_NONE, NULL, 0, + FT_UINT8, BASE_DEC_HEX, NULL, 0, NULL, HFILL }}, { &hf_s1ap_CSG_IdList_item, { "CSG-IdList-Item", "s1ap.CSG_IdList_Item_element", @@ -14907,7 +15493,7 @@ void proto_register_s1ap(void) { NULL, HFILL }}, { &hf_s1ap_ForbiddenTACs_item, { "TAC", "s1ap.TAC", - FT_BYTES, BASE_NONE, NULL, 0, + FT_UINT16, BASE_DEC_HEX, NULL, 0, NULL, HFILL }}, { &hf_s1ap_ForbiddenLAs_item, { "ForbiddenLAs-Item", "s1ap.ForbiddenLAs_Item_element", @@ -14919,7 +15505,7 @@ void proto_register_s1ap(void) { NULL, HFILL }}, { &hf_s1ap_ForbiddenLACs_item, { "LAC", "s1ap.LAC", - FT_BYTES, BASE_NONE, NULL, 0, + FT_UINT16, BASE_DEC_HEX, NULL, 0, NULL, HFILL }}, { &hf_s1ap_e_RAB_MaximumBitrateDL, { "e-RAB-MaximumBitrateDL", "s1ap.e_RAB_MaximumBitrateDL", @@ -14939,11 +15525,11 @@ void proto_register_s1ap(void) { "BitRate", HFILL }}, { &hf_s1ap_mME_Group_ID, { "mME-Group-ID", "s1ap.mME_Group_ID", - FT_BYTES, BASE_NONE, NULL, 0, + FT_UINT16, BASE_DEC_HEX, NULL, 0, NULL, HFILL }}, { &hf_s1ap_mME_Code, { "mME-Code", "s1ap.mME_Code", - FT_BYTES, BASE_NONE, NULL, 0, + FT_UINT8, BASE_DEC_HEX, NULL, 0, NULL, HFILL }}, { &hf_s1ap_servingPLMN, { "servingPLMN", "s1ap.servingPLMN", @@ -15343,11 +15929,11 @@ void proto_register_s1ap(void) { NULL, HFILL }}, { &hf_s1ap_ServedGroupIDs_item, { "MME-Group-ID", "s1ap.MME_Group_ID", - FT_BYTES, BASE_NONE, NULL, 0, + FT_UINT16, BASE_DEC_HEX, NULL, 0, NULL, HFILL }}, { &hf_s1ap_ServedMMECs_item, { "MME-Code", "s1ap.MME_Code", - FT_BYTES, BASE_NONE, NULL, 0, + FT_UINT8, BASE_DEC_HEX, NULL, 0, NULL, HFILL }}, { &hf_s1ap_ServedPLMNs_item, { "PLMNidentity", "s1ap.PLMNidentity", @@ -15359,7 +15945,7 @@ void proto_register_s1ap(void) { NULL, HFILL }}, { &hf_s1ap_tAC, { "tAC", "s1ap.tAC", - FT_BYTES, BASE_NONE, NULL, 0, + FT_UINT16, BASE_DEC_HEX, NULL, 0, NULL, HFILL }}, { &hf_s1ap_broadcastPLMNs, { "broadcastPLMNs", "s1ap.broadcastPLMNs", @@ -15375,7 +15961,7 @@ void proto_register_s1ap(void) { NULL, HFILL }}, { &hf_s1ap_mMEC, { "mMEC", "s1ap.mMEC", - FT_BYTES, BASE_NONE, NULL, 0, + FT_UINT8, BASE_DEC_HEX, NULL, 0, "MME_Code", HFILL }}, { &hf_s1ap_tAIListforMDT, { "tAIListforMDT", "s1ap.tAIListforMDT", @@ -15411,7 +15997,7 @@ void proto_register_s1ap(void) { NULL, HFILL }}, { &hf_s1ap_TAListforMDT_item, { "TAC", "s1ap.TAC", - FT_BYTES, BASE_NONE, NULL, 0, + FT_UINT16, BASE_DEC_HEX, NULL, 0, NULL, HFILL }}, { &hf_s1ap_CompletedCellinTAI_item, { "CompletedCellinTAI-Item", "s1ap.CompletedCellinTAI_Item_element", @@ -15459,7 +16045,7 @@ void proto_register_s1ap(void) { "TransportLayerAddress", HFILL }}, { &hf_s1ap_uDP_Port_Number, { "uDP-Port-Number", "s1ap.uDP_Port_Number", - FT_BYTES, BASE_NONE, NULL, 0, + FT_UINT16, BASE_DEC, NULL, 0, "Port_Number", HFILL }}, { &hf_s1ap_TAIListForRestart_item, { "TAI", "s1ap.TAI_element", @@ -15959,7 +16545,7 @@ void proto_register_s1ap(void) { NULL, HFILL }}, /*--- End of included file: packet-s1ap-hfarr.c ---*/ -#line 269 "./asn1/s1ap/packet-s1ap-template.c" +#line 517 "./asn1/s1ap/packet-s1ap-template.c" }; /* List of subtrees */ @@ -15978,6 +16564,21 @@ void proto_register_s1ap(void) { &ett_s1ap_CELevel, &ett_s1ap_UE_RLF_Report_Container, &ett_s1ap_UE_RLF_Report_Container_for_extended_bands, + &ett_s1ap_S1_Message, + &ett_s1ap_E_UTRAN_Trace_ID, + &ett_s1ap_InterfacesToTrace, + &ett_s1ap_EncryptionAlgorithms, + &ett_s1ap_IntegrityProtectionAlgorithms, + &ett_s1ap_LastVisitedUTRANCellInformation, + &ett_s1ap_SerialNumber, + &ett_s1ap_WarningType, + &ett_s1ap_DataCodingScheme, + &ett_s1ap_WarningMessageContents, + &ett_s1ap_MSClassmark, + &ett_s1ap_MeasurementsToActivate, + &ett_s1ap_MDT_Location_Info, + &ett_s1ap_IMSI, + &ett_s1ap_NASSecurityParameters, /*--- Included file: packet-s1ap-ettarr.c ---*/ #line 1 "./asn1/s1ap/packet-s1ap-ettarr.c" @@ -16308,16 +16909,23 @@ void proto_register_s1ap(void) { &ett_s1ap_EHRPDMultiSectorLoadReportingResponseItem, /*--- End of included file: packet-s1ap-ettarr.c ---*/ -#line 288 "./asn1/s1ap/packet-s1ap-template.c" +#line 551 "./asn1/s1ap/packet-s1ap-template.c" + }; + + static ei_register_info ei[] = { + { &ei_s1ap_number_pages_le15, { "s1ap.number_pages_le15", PI_MALFORMED, PI_ERROR, "Number of pages should be <=15", EXPFILL }} }; module_t *s1ap_module; + expert_module_t* expert_s1ap; /* Register protocol */ proto_s1ap = proto_register_protocol(PNAME, PSNAME, PFNAME); /* Register fields and subtrees */ proto_register_field_array(proto_s1ap, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_s1ap = expert_register_protocol(proto_s1ap); + expert_register_field_array(expert_s1ap, ei, array_length(ei)); /* Register dissector */ s1ap_handle = register_dissector("s1ap", dissect_s1ap, proto_s1ap);