diff options
Diffstat (limited to '')
-rw-r--r-- | epan/dissectors/asn1/m3ap/CMakeLists.txt | 38 | ||||
-rw-r--r-- | epan/dissectors/asn1/m3ap/M3AP-CommonDataTypes.asn | 56 | ||||
-rw-r--r-- | epan/dissectors/asn1/m3ap/M3AP-Constants.asn | 88 | ||||
-rw-r--r-- | epan/dissectors/asn1/m3ap/M3AP-Containers.asn | 202 | ||||
-rw-r--r-- | epan/dissectors/asn1/m3ap/M3AP-IEs.asn | 315 | ||||
-rw-r--r-- | epan/dissectors/asn1/m3ap/M3AP-PDU-Contents.asn | 481 | ||||
-rw-r--r-- | epan/dissectors/asn1/m3ap/M3AP-PDU-Descriptions.asn | 213 | ||||
-rw-r--r-- | epan/dissectors/asn1/m3ap/m3ap.cnf | 348 | ||||
-rw-r--r-- | epan/dissectors/asn1/m3ap/packet-m3ap-template.c | 223 |
9 files changed, 1964 insertions, 0 deletions
diff --git a/epan/dissectors/asn1/m3ap/CMakeLists.txt b/epan/dissectors/asn1/m3ap/CMakeLists.txt new file mode 100644 index 00000000..36df0abc --- /dev/null +++ b/epan/dissectors/asn1/m3ap/CMakeLists.txt @@ -0,0 +1,38 @@ +# CMakeLists.txt +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# SPDX-License-Identifier: GPL-2.0-or-later +# +set( PROTOCOL_NAME m3ap ) + +set( PROTO_OPT ) + +set( EXT_ASN_FILE_LIST +) + +set( ASN_FILE_LIST + M3AP-CommonDataTypes.asn + M3AP-Constants.asn + M3AP-Containers.asn + M3AP-IEs.asn + M3AP-PDU-Contents.asn + M3AP-PDU-Descriptions.asn +) + +set( EXTRA_DIST + ${ASN_FILE_LIST} + packet-${PROTOCOL_NAME}-template.c + ${PROTOCOL_NAME}.cnf +) + +set( SRC_FILES + ${EXTRA_DIST} + ${EXT_ASN_FILE_LIST} +) + +set( A2W_FLAGS ) + +ASN2WRS() diff --git a/epan/dissectors/asn1/m3ap/M3AP-CommonDataTypes.asn b/epan/dissectors/asn1/m3ap/M3AP-CommonDataTypes.asn new file mode 100644 index 00000000..14d7717d --- /dev/null +++ b/epan/dissectors/asn1/m3ap/M3AP-CommonDataTypes.asn @@ -0,0 +1,56 @@ +-- M3AP-CommonDataTypes.asn +-- +-- 3GPP TS 36.444 V16.0.0 (2020-07) +-- http://www.3gpp.org/ftp/Specs/archive/36_series/36.444/36444-d20.zip +-- +-- 9.3.6 Common Definitions +-- + +-- ************************************************************** +-- +-- Common definitions +-- +-- ************************************************************** + +M3AP-CommonDataTypes { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +eps-Access (21) modules (3) m3ap (5) version1 (1) m3ap-CommonDataTypes (3) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- Extension constants +-- +-- ************************************************************** + +maxPrivateIEs INTEGER ::= 65535 +maxProtocolExtensions INTEGER ::= 65535 +maxProtocolIEs INTEGER ::= 65535 + +-- ************************************************************** +-- +-- Common Data Types +-- +-- ************************************************************** + +Criticality ::= ENUMERATED { reject, ignore, notify } + +Presence ::= ENUMERATED { optional, conditional, mandatory } + +PrivateIE-ID ::= CHOICE { + local INTEGER (0.. maxPrivateIEs), + global OBJECT IDENTIFIER +} + +ProcedureCode ::= INTEGER (0..255) + + +ProtocolIE-ID ::= INTEGER (0..maxProtocolIEs) + + +TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessful-outcome} + +END diff --git a/epan/dissectors/asn1/m3ap/M3AP-Constants.asn b/epan/dissectors/asn1/m3ap/M3AP-Constants.asn new file mode 100644 index 00000000..28e23a0e --- /dev/null +++ b/epan/dissectors/asn1/m3ap/M3AP-Constants.asn @@ -0,0 +1,88 @@ +-- M3AP-Constants.asn +-- +-- 3GPP TS 36.444 V16.0.0 (2020-07) +-- http://www.3gpp.org/ftp/Specs/archive/36_series/36.444/36444-d20.zip +-- +-- 9.3.7 Constant Definitions +-- + +-- ************************************************************** +-- +-- Constant definitions +-- +-- ************************************************************** + +M3AP-Constants { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +eps-Access (21) modules (3) m3ap (5) version1 (1) m3ap-Constants (4) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +IMPORTS + ProcedureCode, + ProtocolIE-ID +FROM M3AP-CommonDataTypes; + +-- ************************************************************** +-- +-- Elementary Procedures +-- +-- ************************************************************** + +id-mBMSsessionStart ProcedureCode ::= 0 +id-mBMSsessionStop ProcedureCode ::= 1 +id-errorIndication ProcedureCode ::= 2 +id-privateMessage ProcedureCode ::= 3 +id-Reset ProcedureCode ::= 4 +id-mBMSsessionUpdate ProcedureCode ::= 5 +id-mCEConfigurationUpdate ProcedureCode ::= 6 +id-m3Setup ProcedureCode ::= 7 + + + +-- ************************************************************** +-- +-- Lists +-- +-- ************************************************************** + +maxnoofMBMSServiceAreaIdentitiesPerMCE INTEGER ::= 65536 +maxnooferrors INTEGER ::= 256 +maxNrOfIndividualM3ConnectionsToReset INTEGER ::= 256 +maxnoofCellsforMBMS INTEGER ::= 4096 + +-- ************************************************************** +-- +-- IEs +-- +-- ************************************************************** + +id-MME-MBMS-M3AP-ID ProtocolIE-ID ::= 0 +id-MCE-MBMS-M3AP-ID ProtocolIE-ID ::= 1 +id-TMGI ProtocolIE-ID ::= 2 +id-MBMS-Session-ID ProtocolIE-ID ::= 3 +id-MBMS-E-RAB-QoS-Parameters ProtocolIE-ID ::= 4 +id-MBMS-Session-Duration ProtocolIE-ID ::= 5 +id-MBMS-Service-Area ProtocolIE-ID ::= 6 +id-TNL-Information ProtocolIE-ID ::= 7 +id-CriticalityDiagnostics ProtocolIE-ID ::= 8 +id-Cause ProtocolIE-ID ::= 9 +id-MBMS-Service-Area-List ProtocolIE-ID ::= 10 +id-MBMS-Service-Area-List-Item ProtocolIE-ID ::= 11 +id-TimeToWait ProtocolIE-ID ::= 12 +id-ResetType ProtocolIE-ID ::= 13 +id-MBMS-Service-associatedLogicalM3-ConnectionItem ProtocolIE-ID ::= 14 +id-MBMS-Service-associatedLogicalM3-ConnectionListResAck ProtocolIE-ID ::= 15 +id-MinimumTimeToMBMSDataTransfer ProtocolIE-ID ::= 16 +id-AllocationAndRetentionPriority ProtocolIE-ID ::= 17 +id-Global-MCE-ID ProtocolIE-ID ::= 18 +id-MCEname ProtocolIE-ID ::= 19 +id-MBMSServiceAreaList ProtocolIE-ID ::= 20 +id-Time-ofMBMS-DataTransfer ProtocolIE-ID ::= 21 +id-Time-ofMBMS-DataStop ProtocolIE-ID ::= 22 +id-Reestablishment ProtocolIE-ID ::= 23 +id-Alternative-TNL-Information ProtocolIE-ID ::= 24 +id-MBMS-Cell-List ProtocolIE-ID ::= 25 +END diff --git a/epan/dissectors/asn1/m3ap/M3AP-Containers.asn b/epan/dissectors/asn1/m3ap/M3AP-Containers.asn new file mode 100644 index 00000000..3b0a6105 --- /dev/null +++ b/epan/dissectors/asn1/m3ap/M3AP-Containers.asn @@ -0,0 +1,202 @@ +-- M3AP-Containers.asn +-- +-- 3GPP TS 36.444 V16.0.0 (2020-07) +-- http://www.3gpp.org/ftp/Specs/archive/36_series/36.444/36444-d20.zip +-- +-- 9.3.8 Container Definitions +-- + +-- ************************************************************** +-- +-- Container definitions +-- +-- ************************************************************** + +M3AP-Containers { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +eps-Access (21) modules (3) m3ap (5) version1 (1) m3ap-Containers (5) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS + maxPrivateIEs, + maxProtocolExtensions, + maxProtocolIEs, + Criticality, + Presence, + PrivateIE-ID, + ProtocolIE-ID +FROM M3AP-CommonDataTypes; + +-- ************************************************************** +-- +-- Class Definition for Protocol IEs +-- +-- ************************************************************** + +M3AP-PROTOCOL-IES ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &criticality Criticality, + &Value, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + TYPE &Value + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Class Definition for Protocol IEs +-- +-- ************************************************************** + +M3AP-PROTOCOL-IES-PAIR ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &firstCriticality Criticality, + &FirstValue, + &secondCriticality Criticality, + &SecondValue, + &presence Presence +} +WITH SYNTAX { + ID &id + FIRST CRITICALITY &firstCriticality + FIRST TYPE &FirstValue + SECOND CRITICALITY &secondCriticality + SECOND TYPE &SecondValue + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Class Definition for Protocol Extensions +-- +-- ************************************************************** + +M3AP-PROTOCOL-EXTENSION ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &criticality Criticality, + &Extension, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + EXTENSION &Extension + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Class Definition for Private IEs +-- +-- ************************************************************** + +M3AP-PRIVATE-IES ::= CLASS { + &id PrivateIE-ID, + &criticality Criticality, + &Value, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + TYPE &Value + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Container for Protocol IEs +-- +-- ************************************************************** + +ProtocolIE-Container {M3AP-PROTOCOL-IES : IEsSetParam} ::= + SEQUENCE (SIZE (0..maxProtocolIEs)) OF + ProtocolIE-Field {{IEsSetParam}} + +ProtocolIE-Single-Container {M3AP-PROTOCOL-IES : IEsSetParam} ::= + ProtocolIE-Field {{IEsSetParam}} + +ProtocolIE-Field {M3AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE { + id M3AP-PROTOCOL-IES.&id ({IEsSetParam}), + criticality M3AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}), + value M3AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id}) +} + +-- ************************************************************** +-- +-- Container for Protocol IE Pairs +-- +-- ************************************************************** + +ProtocolIE-ContainerPair {M3AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= + SEQUENCE (SIZE (0..maxProtocolIEs)) OF + ProtocolIE-FieldPair {{IEsSetParam}} + +ProtocolIE-FieldPair {M3AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE { + id M3AP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}), + firstCriticality M3AP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}), + firstValue M3AP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}), + secondCriticality M3AP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}), + secondValue M3AP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id}) +} + +-- ************************************************************** +-- +-- Container Lists for Protocol IE Containers +-- +-- ************************************************************** + +ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, M3AP-PROTOCOL-IES : IEsSetParam} ::= + SEQUENCE (SIZE (lowerBound..upperBound)) OF + ProtocolIE-Container {{IEsSetParam}} + +ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, M3AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= + SEQUENCE (SIZE (lowerBound..upperBound)) OF + ProtocolIE-ContainerPair {{IEsSetParam}} + +-- ************************************************************** +-- +-- Container for Protocol Extensions +-- +-- ************************************************************** + +ProtocolExtensionContainer {M3AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= + SEQUENCE (SIZE (1..maxProtocolExtensions)) OF + ProtocolExtensionField {{ExtensionSetParam}} + +ProtocolExtensionField {M3AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE { + id M3AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}), + criticality M3AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}), + extensionValue M3AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id}) +} + +-- ************************************************************** +-- +-- Container for Private IEs +-- +-- ************************************************************** + +PrivateIE-Container {M3AP-PRIVATE-IES : IEsSetParam} ::= + SEQUENCE (SIZE (1..maxPrivateIEs)) OF + PrivateIE-Field {{IEsSetParam}} + +PrivateIE-Field {M3AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE { + id M3AP-PRIVATE-IES.&id ({IEsSetParam}), + criticality M3AP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}), + value M3AP-PRIVATE-IES.&Value ({IEsSetParam}{@id}) +} + +END diff --git a/epan/dissectors/asn1/m3ap/M3AP-IEs.asn b/epan/dissectors/asn1/m3ap/M3AP-IEs.asn new file mode 100644 index 00000000..10ab161e --- /dev/null +++ b/epan/dissectors/asn1/m3ap/M3AP-IEs.asn @@ -0,0 +1,315 @@ +-- M3AP-IEs.asn +-- +-- 3GPP TS 36.444 V16.0.0 (2020-07) +-- http://www.3gpp.org/ftp/Specs/archive/36_series/36.444/36444-d20.zip +-- +-- 9.3.5 Information Element Definitions +-- + +-- ************************************************************** +-- +-- Information Element Definitions +-- +-- ************************************************************** + +M3AP-IEs { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +eps-Access (21) modules (3) m3ap (5) version1 (1) m3ap-IEs (2) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +IMPORTS + id-AllocationAndRetentionPriority, + maxnooferrors, + maxnoofCellsforMBMS + +FROM M3AP-Constants + + Criticality, + ProcedureCode, + ProtocolIE-ID, + TriggeringMessage +FROM M3AP-CommonDataTypes + + ProtocolExtensionContainer{}, + ProtocolIE-Single-Container{}, + M3AP-PROTOCOL-EXTENSION, + M3AP-PROTOCOL-IES +FROM M3AP-Containers; + +-- A + +Absolute-Time-ofMBMS-Data ::= BIT STRING (SIZE (64)) + +AllocationAndRetentionPriority ::= SEQUENCE { + priorityLevel PriorityLevel, + pre-emptionCapability Pre-emptionCapability, + pre-emptionVulnerability Pre-emptionVulnerability, + iE-Extensions ProtocolExtensionContainer { {AllocationAndRetentionPriority-ExtIEs} } OPTIONAL +} + +AllocationAndRetentionPriority-ExtIEs M3AP-PROTOCOL-EXTENSION ::= { + ... +} +-- B + +BitRate ::= INTEGER (0..10000000000) + +-- C + +Cause ::= CHOICE { + radioNetwork CauseRadioNetwork, + transport CauseTransport, + nAS CauseNAS, + protocol CauseProtocol, + misc CauseMisc, + ... +} + +CauseMisc ::= ENUMERATED { + control-processing-overload, + not-enough-user-plane-processing-resources, + hardware-failure, + om-intervention, + unspecified, + ... +} + +CauseNAS ::= ENUMERATED { + unspecified, + ... +} + +CauseProtocol ::= ENUMERATED { + transfer-syntax-error, + abstract-syntax-error-reject, + abstract-syntax-error-ignore-and-notify, + message-not-compatible-with-receiver-state, + semantic-error, + abstract-syntax-error-falsely-constructed-message, + unspecified, + ... +} + +CauseRadioNetwork ::= ENUMERATED { + unknown-or-already-allocated-MME-MBMS-M3AP-ID, + unknown-or-already-allocated-MCE-MBMS-M3AP-ID, + unknown-or-inconsistent-pair-of-MBMS-M3AP-IDs, + radio-resources-not-available, + invalid-QoS-combination, + interaction-with-other-procedure, + not-supported-QCI-value, + unspecified, + ..., + uninvolved-MCE + +} + +CauseTransport ::= ENUMERATED { + transport-resource-unavailable, + unspecified, + ... +} + +CriticalityDiagnostics ::= SEQUENCE { + procedureCode ProcedureCode OPTIONAL, + triggeringMessage TriggeringMessage OPTIONAL, + procedureCriticality Criticality OPTIONAL, + iEsCriticalityDiagnostics CriticalityDiagnostics-IE-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-ExtIEs} } OPTIONAL, + ... +} + + +CriticalityDiagnostics-ExtIEs M3AP-PROTOCOL-EXTENSION ::= { + ... +} + +CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..maxnooferrors)) OF + SEQUENCE { + iECriticality Criticality, + iE-ID ProtocolIE-ID, + typeOfError TypeOfError, + iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-IE-List-ExtIEs} } OPTIONAL, + ... +} + +CriticalityDiagnostics-IE-List-ExtIEs M3AP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- D +-- E + +ECGI ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + eUTRANcellIdentifier EUTRANCellIdentifier, + iE-Extensions ProtocolExtensionContainer { {ECGI-ExtIEs} } OPTIONAL, + ... +} + +ECGI-ExtIEs M3AP-PROTOCOL-EXTENSION ::= { + ... +} + +EUTRANCellIdentifier ::= BIT STRING (SIZE (28)) + +ExtendedMCE-ID ::= OCTET STRING (SIZE(1)) + +-- F +-- G + +Global-MCE-ID ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + mCE-ID MCE-ID, + extendedMCE-ID ExtendedMCE-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {GlobalMCE-ID-ExtIEs} } OPTIONAL, + ... +} + +GlobalMCE-ID-ExtIEs M3AP-PROTOCOL-EXTENSION ::= { + ... +} + +GBR-QosInformation ::= SEQUENCE { + mBMS-E-RAB-MaximumBitrateDL BitRate, + mBMS-E-RAB-GuaranteedBitrateDL BitRate, + iE-Extensions ProtocolExtensionContainer { { GBR-QosInformation-ExtIEs} } OPTIONAL, + ... +} + +GBR-QosInformation-ExtIEs M3AP-PROTOCOL-EXTENSION ::= { + ... +} + +GTP-TEID ::= OCTET STRING (SIZE (4)) + +-- H +-- I + +IPAddress ::= OCTET STRING (SIZE(4..16, ...)) + +-- J +-- K +-- L +-- M + +MBMS-Cell-List ::= SEQUENCE (SIZE(1.. maxnoofCellsforMBMS)) OF ECGI + +MBMS-E-RAB-QoS-Parameters ::= SEQUENCE { + qCI QCI, + gbrQosInformation GBR-QosInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { MBMS-E-RAB-QoS-Parameters-ExtIEs} } OPTIONAL, + ... +} + +MBMS-E-RAB-QoS-Parameters-ExtIEs M3AP-PROTOCOL-EXTENSION ::= { +-- Extension for Release 10 ARP support -- + {ID id-AllocationAndRetentionPriority CRITICALITY ignore EXTENSION AllocationAndRetentionPriority PRESENCE mandatory}, + ... +} + +MBMS-Service-associatedLogicalM3-ConnectionItem ::= SEQUENCE { + mME-MBMS-M3AP-ID MME-MBMS-M3AP-ID OPTIONAL, + mCE-MBMS-M3AP-ID MCE-MBMS-M3AP-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { MBMS-Service-associatedLogicalM3-ConnectionItemExtIEs} } OPTIONAL, + ... +} + + +MBMS-Service-associatedLogicalM3-ConnectionItemExtIEs M3AP-PROTOCOL-EXTENSION ::= { + ... +} + +MBMSServiceArea1 ::= OCTET STRING (SIZE (2)) + +MBMS-Service-Area ::= OCTET STRING + + +MBMS-Session-Duration ::= OCTET STRING (SIZE (3)) + +MBMS-Session-ID ::= OCTET STRING (SIZE (1)) + + +MCE-MBMS-M3AP-ID ::= INTEGER (0..65535) + +MCE-ID ::= OCTET STRING (SIZE(2)) + +MCEname ::= PrintableString (SIZE (1..150,...)) + +MinimumTimeToMBMSDataTransfer ::= OCTET STRING (SIZE (1)) + +MME-MBMS-M3AP-ID ::= INTEGER (0..65535) + +-- N +-- O +-- P + +Pre-emptionCapability ::= ENUMERATED { + shall-not-trigger-pre-emption, + may-trigger-pre-emption +} + +Pre-emptionVulnerability ::= ENUMERATED { + not-pre-emptable, + pre-emptable +} + +PriorityLevel ::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15) + +PLMN-Identity ::= OCTET STRING (SIZE(3)) + +-- Q + +QCI ::= INTEGER (0..255) + +-- R + +Reestablishment ::= ENUMERATED {true, ...} + +-- S +-- T + +TimeToWait ::= ENUMERATED {v1s, v2s, v5s, v10s, v20s, v60s, ...} + +TMGI ::= SEQUENCE { + pLMNidentity PLMN-Identity, + serviceID OCTET STRING (SIZE (3)), + iE-Extensions ProtocolExtensionContainer { {TMGI-ExtIEs} } OPTIONAL +} + +TMGI-ExtIEs M3AP-PROTOCOL-EXTENSION ::= { + ... +} + + +TNL-Information ::= SEQUENCE { + iPMCAddress IPAddress, + iPSourceAddress IPAddress, + gTP-DLTEID GTP-TEID, + iE-Extensions ProtocolExtensionContainer { {TNL-Information-ExtIEs} } OPTIONAL, + ... +} + +TNL-Information-ExtIEs M3AP-PROTOCOL-EXTENSION ::= { + ... +} + +TypeOfError ::= ENUMERATED { + not-understood, + missing, + ... +} + + +-- U +-- V +-- W +-- X +-- Y +-- Z + +END diff --git a/epan/dissectors/asn1/m3ap/M3AP-PDU-Contents.asn b/epan/dissectors/asn1/m3ap/M3AP-PDU-Contents.asn new file mode 100644 index 00000000..3dff45b4 --- /dev/null +++ b/epan/dissectors/asn1/m3ap/M3AP-PDU-Contents.asn @@ -0,0 +1,481 @@ +-- M3AP-PDU-Contents.asn +-- +-- 3GPP TS 36.444 V16.0.0 (2020-07) +-- http://www.3gpp.org/ftp/Specs/archive/36_series/36.444/36444-d20.zip +-- +-- 9.3.4 PDU Definitions +-- + +-- ************************************************************** +-- +-- PDU definitions for M3AP. +-- +-- ************************************************************** + +M3AP-PDU-Contents { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +eps-Access (21) modules (3) m3ap (5) version1 (1) m3ap-PDU-Contents (1) } +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS + + Absolute-Time-ofMBMS-Data, + Cause, + CriticalityDiagnostics, + Global-MCE-ID, + MBMS-E-RAB-QoS-Parameters, + MBMS-Service-associatedLogicalM3-ConnectionItem, + MBMS-Service-Area, + MBMSServiceArea1, + MBMS-Session-Duration, + MBMS-Session-ID, + MCE-MBMS-M3AP-ID, + MCEname, + MinimumTimeToMBMSDataTransfer, + MME-MBMS-M3AP-ID, + TimeToWait, + TMGI, + TNL-Information, + Reestablishment, + MBMS-Cell-List + +FROM M3AP-IEs + + PrivateIE-Container{}, + ProtocolExtensionContainer{}, + ProtocolIE-Container{}, + ProtocolIE-ContainerList{}, + ProtocolIE-ContainerPair{}, + ProtocolIE-ContainerPairList{}, + ProtocolIE-Single-Container{}, + M3AP-PRIVATE-IES, + M3AP-PROTOCOL-EXTENSION, + M3AP-PROTOCOL-IES, + M3AP-PROTOCOL-IES-PAIR +FROM M3AP-Containers + + id-AllocationAndRetentionPriority, + id-MCE-MBMS-M3AP-ID, + id-MME-MBMS-M3AP-ID, + id-TMGI, + id-MBMS-Session-ID, + id-MBMS-E-RAB-QoS-Parameters, + id-MBMS-Session-Duration, + id-MBMS-Service-Area, + id-TNL-Information, + id-Alternative-TNL-Information, + id-CriticalityDiagnostics, + id-Cause, + id-MBMS-Service-Area-List, + id-MBMS-Service-Area-List-Item, + id-TimeToWait, + id-ResetType, + id-MBMS-Service-associatedLogicalM3-ConnectionItem, + id-MBMS-Service-associatedLogicalM3-ConnectionListResAck, + id-MBMSServiceAreaList, + id-MinimumTimeToMBMSDataTransfer, + id-Time-ofMBMS-DataStop, + id-Time-ofMBMS-DataTransfer, + id-Global-MCE-ID, + id-MCEname, + id-Reestablishment, + id-MBMS-Cell-List, + maxnoofMBMSServiceAreaIdentitiesPerMCE, + maxnooferrors, + maxNrOfIndividualM3ConnectionsToReset + +FROM M3AP-Constants; + +-- ************************************************************** +-- +-- MBMS SESSION START REQUEST +-- +-- ************************************************************** + +MBMSSessionStartRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{MBMSSessionStartRequest-IEs}}, + ... +} + +MBMSSessionStartRequest-IEs M3AP-PROTOCOL-IES ::= { + { ID id-MME-MBMS-M3AP-ID CRITICALITY reject TYPE MME-MBMS-M3AP-ID PRESENCE mandatory}| + { ID id-TMGI CRITICALITY reject TYPE TMGI PRESENCE mandatory}| + { ID id-MBMS-Session-ID CRITICALITY ignore TYPE MBMS-Session-ID PRESENCE optional}| + { ID id-MBMS-E-RAB-QoS-Parameters CRITICALITY reject TYPE MBMS-E-RAB-QoS-Parameters PRESENCE mandatory}| + { ID id-MBMS-Session-Duration CRITICALITY reject TYPE MBMS-Session-Duration PRESENCE mandatory}| + { ID id-MBMS-Service-Area CRITICALITY reject TYPE MBMS-Service-Area PRESENCE mandatory}| + { ID id-MinimumTimeToMBMSDataTransfer CRITICALITY reject TYPE MinimumTimeToMBMSDataTransfer PRESENCE mandatory}| + { ID id-TNL-Information CRITICALITY reject TYPE TNL-Information PRESENCE mandatory}| + { ID id-Time-ofMBMS-DataTransfer CRITICALITY ignore TYPE Absolute-Time-ofMBMS-Data PRESENCE optional}| + { ID id-Reestablishment CRITICALITY ignore TYPE Reestablishment PRESENCE optional}| + { ID id-Alternative-TNL-Information CRITICALITY ignore TYPE TNL-Information PRESENCE optional}| + { ID id-MBMS-Cell-List CRITICALITY reject TYPE MBMS-Cell-List PRESENCE optional}, + ... +} + +-- ************************************************************** +-- +-- MBMS SESSION START RESPONSE +-- +-- ************************************************************** + +MBMSSessionStartResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ MBMSSessionStartResponse-IEs}}, + ... +} + +MBMSSessionStartResponse-IEs M3AP-PROTOCOL-IES ::= { + { ID id-MME-MBMS-M3AP-ID CRITICALITY ignore TYPE MME-MBMS-M3AP-ID PRESENCE mandatory } | + { ID id-MCE-MBMS-M3AP-ID CRITICALITY ignore TYPE MCE-MBMS-M3AP-ID PRESENCE mandatory } | + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- MBMS SESSION START FAILURE +-- +-- ************************************************************** + +MBMSSessionStartFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ MBMSSessionStartFailure-IEs}}, + ... +} + +MBMSSessionStartFailure-IEs M3AP-PROTOCOL-IES ::= { + { ID id-MME-MBMS-M3AP-ID CRITICALITY ignore TYPE MME-MBMS-M3AP-ID PRESENCE mandatory } | + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory } | + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- MBMS SESSION STOP REQUEST +-- +-- ************************************************************** + +MBMSSessionStopRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{MBMSSessionStopRequest-IEs}}, + ... +} + +MBMSSessionStopRequest-IEs M3AP-PROTOCOL-IES ::= { + { ID id-MME-MBMS-M3AP-ID CRITICALITY reject TYPE MME-MBMS-M3AP-ID PRESENCE mandatory}| + { ID id-MCE-MBMS-M3AP-ID CRITICALITY reject TYPE MCE-MBMS-M3AP-ID PRESENCE mandatory}| + { ID id-Time-ofMBMS-DataStop CRITICALITY ignore TYPE Absolute-Time-ofMBMS-Data PRESENCE optional}, + ... +} + +-- ************************************************************** +-- +-- MBMS SESSION STOP RESPONSE +-- +-- ************************************************************** + +MBMSSessionStopResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ MBMSSessionStopResponse-IEs}}, + ... +} + +MBMSSessionStopResponse-IEs M3AP-PROTOCOL-IES ::= { + { ID id-MME-MBMS-M3AP-ID CRITICALITY ignore TYPE MME-MBMS-M3AP-ID PRESENCE mandatory } | + { ID id-MCE-MBMS-M3AP-ID CRITICALITY ignore TYPE MCE-MBMS-M3AP-ID PRESENCE mandatory } | + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional } , + ... +} + +-- ************************************************************** +-- +-- MBMS SESSION UPDATE REQUEST +-- +-- ************************************************************** + +MBMSSessionUpdateRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{MBMSSessionUpdateRequest-IEs}}, + ... +} + +MBMSSessionUpdateRequest-IEs M3AP-PROTOCOL-IES ::= { + { ID id-MME-MBMS-M3AP-ID CRITICALITY reject TYPE MME-MBMS-M3AP-ID PRESENCE mandatory}| + { ID id-MCE-MBMS-M3AP-ID CRITICALITY reject TYPE MCE-MBMS-M3AP-ID PRESENCE mandatory}| + { ID id-TMGI CRITICALITY reject TYPE TMGI PRESENCE mandatory}| + { ID id-MBMS-Session-ID CRITICALITY ignore TYPE MBMS-Session-ID PRESENCE optional}| + { ID id-MBMS-E-RAB-QoS-Parameters CRITICALITY reject TYPE MBMS-E-RAB-QoS-Parameters PRESENCE mandatory}| + { ID id-MBMS-Session-Duration CRITICALITY reject TYPE MBMS-Session-Duration PRESENCE mandatory}| + { ID id-MBMS-Service-Area CRITICALITY ignore TYPE MBMS-Service-Area PRESENCE optional}| + { ID id-MinimumTimeToMBMSDataTransfer CRITICALITY reject TYPE MinimumTimeToMBMSDataTransfer PRESENCE mandatory}| + { ID id-TNL-Information CRITICALITY ignore TYPE TNL-Information PRESENCE optional}| + { ID id-Time-ofMBMS-DataTransfer CRITICALITY ignore TYPE Absolute-Time-ofMBMS-Data PRESENCE optional}| + { ID id-MBMS-Cell-List CRITICALITY reject TYPE MBMS-Cell-List PRESENCE optional}, + ... +} + +-- ************************************************************** +-- +-- MBMS SESSION UPDATE RESPONSE +-- +-- ************************************************************** + +MBMSSessionUpdateResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ MBMSSessionUpdateResponse-IEs}}, + ... +} + +MBMSSessionUpdateResponse-IEs M3AP-PROTOCOL-IES ::= { + { ID id-MME-MBMS-M3AP-ID CRITICALITY ignore TYPE MME-MBMS-M3AP-ID PRESENCE mandatory } | + { ID id-MCE-MBMS-M3AP-ID CRITICALITY ignore TYPE MCE-MBMS-M3AP-ID PRESENCE mandatory } | + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- MBMS SESSION UPDATE FAILURE +-- +-- ************************************************************** + +MBMSSessionUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ MBMSSessionUpdateFailure-IEs}}, + ... +} + +MBMSSessionUpdateFailure-IEs M3AP-PROTOCOL-IES ::= { + { ID id-MME-MBMS-M3AP-ID CRITICALITY ignore TYPE MME-MBMS-M3AP-ID PRESENCE mandatory } | + { ID id-MCE-MBMS-M3AP-ID CRITICALITY ignore TYPE MCE-MBMS-M3AP-ID PRESENCE mandatory } | + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory } | + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- ERROR INDICATION +-- +-- ************************************************************** + +ErrorIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ErrorIndication-IEs}}, + ... +} + +ErrorIndication-IEs M3AP-PROTOCOL-IES ::= { + { ID id-MME-MBMS-M3AP-ID CRITICALITY ignore TYPE MME-MBMS-M3AP-ID PRESENCE optional } | + { ID id-MCE-MBMS-M3AP-ID CRITICALITY ignore TYPE MCE-MBMS-M3AP-ID PRESENCE optional } | + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional } | + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional } , + ... +} + + +-- ************************************************************** +-- +-- Reset +-- +-- ************************************************************** + +Reset ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {ResetIEs} }, + ... +} + +ResetIEs M3AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-ResetType CRITICALITY reject TYPE ResetType PRESENCE mandatory }, + ... +} + +ResetType ::= CHOICE { + m3-Interface ResetAll, + partOfM3-Interface MBMS-Service-associatedLogicalM3-ConnectionListRes, + ... +} + + + +ResetAll ::= ENUMERATED { + reset-all, + ... +} + +MBMS-Service-associatedLogicalM3-ConnectionListRes ::= SEQUENCE (SIZE(1.. maxNrOfIndividualM3ConnectionsToReset)) OF ProtocolIE-Single-Container { { MBMS-Service-associatedLogicalM3-ConnectionItemRes } } + +MBMS-Service-associatedLogicalM3-ConnectionItemRes M3AP-PROTOCOL-IES ::= { + { ID id-MBMS-Service-associatedLogicalM3-ConnectionItem CRITICALITY reject TYPE MBMS-Service-associatedLogicalM3-ConnectionItem PRESENCE mandatory }, + ... +} + + +-- ************************************************************** +-- +-- Reset Acknowledge +-- +-- ************************************************************** + +ResetAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {ResetAcknowledgeIEs} }, + ... +} + +ResetAcknowledgeIEs M3AP-PROTOCOL-IES ::= { + { ID id-MBMS-Service-associatedLogicalM3-ConnectionListResAck CRITICALITY ignore TYPE MBMS-Service-associatedLogicalM3-ConnectionListResAck PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +MBMS-Service-associatedLogicalM3-ConnectionListResAck ::= SEQUENCE (SIZE(1.. maxNrOfIndividualM3ConnectionsToReset)) OF ProtocolIE-Single-Container { { MBMS-Service-associatedLogicalM3-ConnectionItemResAck } } + +MBMS-Service-associatedLogicalM3-ConnectionItemResAck M3AP-PROTOCOL-IES ::= { + { ID id-MBMS-Service-associatedLogicalM3-ConnectionItem CRITICALITY ignore TYPE MBMS-Service-associatedLogicalM3-ConnectionItem PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- PRIVATE MESSAGE +-- +-- ************************************************************** + +PrivateMessage ::= SEQUENCE { + privateIEs PrivateIE-Container {{PrivateMessage-IEs}}, + ... +} + +PrivateMessage-IEs M3AP-PRIVATE-IES ::= { + ... +} + + +-- ************************************************************** +-- +-- M3 SETUP ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- M3 Setup Request +-- +-- ************************************************************** + +M3SetupRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {M3SetupRequestIEs} }, + ... +} + +M3SetupRequestIEs M3AP-PROTOCOL-IES ::= { + { ID id-Global-MCE-ID CRITICALITY reject TYPE Global-MCE-ID PRESENCE mandatory}| + { ID id-MCEname CRITICALITY ignore TYPE MCEname PRESENCE optional}| + { ID id-MBMSServiceAreaList CRITICALITY reject TYPE MBMSServiceAreaListItem PRESENCE mandatory}, + ... +} + + +MBMSServiceAreaListItem ::= SEQUENCE (SIZE(1..maxnoofMBMSServiceAreaIdentitiesPerMCE)) OF MBMSServiceArea1 + + +-- ************************************************************** +-- +-- M3 Setup Response +-- +-- ************************************************************** + +M3SetupResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {M3SetupResponseIEs} }, + ... +} + + +M3SetupResponseIEs M3AP-PROTOCOL-IES ::= { + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} + +-- ************************************************************** +-- +-- M3 Setup Failure +-- +-- ************************************************************** + +M3SetupFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {M3SetupFailureIEs} }, + ... +} + +M3SetupFailureIEs M3AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} + +-- ************************************************************** +-- +-- MCE CONFIGURATION UPDATE ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- MCE Configuration Update +-- +-- ************************************************************** + +MCEConfigurationUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {MCEConfigurationUpdateIEs} }, + ... +} + +MCEConfigurationUpdateIEs M3AP-PROTOCOL-IES ::= { + { ID id-Global-MCE-ID CRITICALITY reject TYPE Global-MCE-ID PRESENCE optional}| + { ID id-MCEname CRITICALITY ignore TYPE MCEname PRESENCE optional}| + { ID id-MBMSServiceAreaList CRITICALITY reject TYPE MBMSServiceAreaListItem PRESENCE optional}, + ... +} + +-- ************************************************************** +-- +-- MCE Configuration Update Acknowledge +-- +-- ************************************************************** + +MCEConfigurationUpdateAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {MCEConfigurationUpdateAcknowledgeIEs} }, + ... +} + + +MCEConfigurationUpdateAcknowledgeIEs M3AP-PROTOCOL-IES ::= { + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- MCE Configuration Update Failure +-- +-- ************************************************************** + +MCEConfigurationUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {MCEConfigurationUpdateFailureIEs} }, + ... +} + +MCEConfigurationUpdateFailureIEs M3AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} + +END diff --git a/epan/dissectors/asn1/m3ap/M3AP-PDU-Descriptions.asn b/epan/dissectors/asn1/m3ap/M3AP-PDU-Descriptions.asn new file mode 100644 index 00000000..1d4e1800 --- /dev/null +++ b/epan/dissectors/asn1/m3ap/M3AP-PDU-Descriptions.asn @@ -0,0 +1,213 @@ +-- M3AP-PDU-Descriptions.asn +-- +-- 3GPP TS 36.444 V16.0.0 (2020-07) +-- http://www.3gpp.org/ftp/Specs/archive/36_series/36.444/36444-d20.zip +-- +-- 9.3.3 Elementary Procedure Definitions +-- + +-- ************************************************************** +-- +-- Elementary Procedure definitions +-- +-- ************************************************************** + +M3AP-PDU-Descriptions { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +eps-Access (21) modules (3) m3ap (5) version1 (1) m3ap-PDU-Descriptions (0) } +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS + Criticality, + ProcedureCode +FROM M3AP-CommonDataTypes + + MBMSSessionStartRequest, + MBMSSessionStartResponse, + MBMSSessionStartFailure, + MBMSSessionStopRequest, + MBMSSessionStopResponse, + MBMSSessionUpdateRequest, + MBMSSessionUpdateResponse, + MBMSSessionUpdateFailure, + MCEConfigurationUpdate, + MCEConfigurationUpdateAcknowledge, + MCEConfigurationUpdateFailure, + M3SetupRequest, + M3SetupResponse, + M3SetupFailure, + ErrorIndication, + Reset, + ResetAcknowledge, + PrivateMessage + +FROM M3AP-PDU-Contents + + id-mBMSsessionStart, + id-mBMSsessionStop, + id-mBMSsessionUpdate, + id-mCEConfigurationUpdate, + id-m3Setup, + id-errorIndication, + id-Reset, + id-privateMessage +FROM M3AP-Constants; + + +-- ************************************************************** +-- +-- Interface Elementary Procedure Class +-- +-- ************************************************************** + +M3AP-ELEMENTARY-PROCEDURE ::= CLASS { + &InitiatingMessage , + &SuccessfulOutcome OPTIONAL, + &UnsuccessfulOutcome OPTIONAL, + &procedureCode ProcedureCode UNIQUE, + &criticality Criticality DEFAULT ignore +} +WITH SYNTAX { + INITIATING MESSAGE &InitiatingMessage + [SUCCESSFUL OUTCOME &SuccessfulOutcome] + [UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome] + PROCEDURE CODE &procedureCode + [CRITICALITY &criticality] +} + +-- ************************************************************** +-- +-- Interface PDU Definition +-- +-- ************************************************************** + +M3AP-PDU ::= CHOICE { + initiatingMessage InitiatingMessage, + successfulOutcome SuccessfulOutcome, + unsuccessfulOutcome UnsuccessfulOutcome, + ... +} + +InitiatingMessage ::= SEQUENCE { + procedureCode M3AP-ELEMENTARY-PROCEDURE.&procedureCode ({M3AP-ELEMENTARY-PROCEDURES}), + criticality M3AP-ELEMENTARY-PROCEDURE.&criticality ({M3AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value M3AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({M3AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} + +SuccessfulOutcome ::= SEQUENCE { + procedureCode M3AP-ELEMENTARY-PROCEDURE.&procedureCode ({M3AP-ELEMENTARY-PROCEDURES}), + criticality M3AP-ELEMENTARY-PROCEDURE.&criticality ({M3AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value M3AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({M3AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} + +UnsuccessfulOutcome ::= SEQUENCE { + procedureCode M3AP-ELEMENTARY-PROCEDURE.&procedureCode ({M3AP-ELEMENTARY-PROCEDURES}), + criticality M3AP-ELEMENTARY-PROCEDURE.&criticality ({M3AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value M3AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({M3AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} + + +-- ************************************************************** +-- +-- Interface Elementary Procedure List +-- +-- ************************************************************** + +M3AP-ELEMENTARY-PROCEDURES M3AP-ELEMENTARY-PROCEDURE ::= { + M3AP-ELEMENTARY-PROCEDURES-CLASS-1 | + M3AP-ELEMENTARY-PROCEDURES-CLASS-2 , + ... +} + +M3AP-ELEMENTARY-PROCEDURES-CLASS-1 M3AP-ELEMENTARY-PROCEDURE ::= { + mBMSsessionStart | + mBMSsessionStop | + mBMSsessionUpdate | + reset | + m3Setup | + mCEConfigurationUpdate , + ... +} + +M3AP-ELEMENTARY-PROCEDURES-CLASS-2 M3AP-ELEMENTARY-PROCEDURE ::= { + errorIndication | + privateMessage , + ... + +} + + +-- ************************************************************** +-- +-- Interface Elementary Procedures +-- +-- ************************************************************** + +mBMSsessionStart M3AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE MBMSSessionStartRequest + SUCCESSFUL OUTCOME MBMSSessionStartResponse + UNSUCCESSFUL OUTCOME MBMSSessionStartFailure + PROCEDURE CODE id-mBMSsessionStart + CRITICALITY reject +} + +mBMSsessionStop M3AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE MBMSSessionStopRequest + SUCCESSFUL OUTCOME MBMSSessionStopResponse + PROCEDURE CODE id-mBMSsessionStop + CRITICALITY reject +} + +mBMSsessionUpdate M3AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE MBMSSessionUpdateRequest + SUCCESSFUL OUTCOME MBMSSessionUpdateResponse + UNSUCCESSFUL OUTCOME MBMSSessionUpdateFailure + PROCEDURE CODE id-mBMSsessionUpdate + CRITICALITY reject +} + +errorIndication M3AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE ErrorIndication + PROCEDURE CODE id-errorIndication + CRITICALITY ignore +} + +reset M3AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE Reset + SUCCESSFUL OUTCOME ResetAcknowledge + PROCEDURE CODE id-Reset + CRITICALITY reject +} + +privateMessage M3AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PrivateMessage + PROCEDURE CODE id-privateMessage + CRITICALITY ignore +} + +mCEConfigurationUpdate M3AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE MCEConfigurationUpdate + SUCCESSFUL OUTCOME MCEConfigurationUpdateAcknowledge + UNSUCCESSFUL OUTCOME MCEConfigurationUpdateFailure + PROCEDURE CODE id-mCEConfigurationUpdate + CRITICALITY reject +} + + +m3Setup M3AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE M3SetupRequest + SUCCESSFUL OUTCOME M3SetupResponse + UNSUCCESSFUL OUTCOME M3SetupFailure + PROCEDURE CODE id-m3Setup + CRITICALITY reject +} + +END diff --git a/epan/dissectors/asn1/m3ap/m3ap.cnf b/epan/dissectors/asn1/m3ap/m3ap.cnf new file mode 100644 index 00000000..420a6a5e --- /dev/null +++ b/epan/dissectors/asn1/m3ap/m3ap.cnf @@ -0,0 +1,348 @@ +# m3ap.cnf +# m3ap conformation file + +#.OPT +PER +ALIGNED +#.END + +#.USE_VALS_EXT +ProcedureCode +ProtocolIE-ID + +#.EXPORTS + +#.PDU +M3AP-PDU + +#.MAKE_ENUM +ProcedureCode +ProtocolIE-ID + +#.NO_EMIT +# TBCD-STRING + +#.OMIT_ASSIGNMENT +# Get rid of unused code warnings +ProtocolIE-FieldPair +ProtocolIE-ContainerPair +ProtocolIE-ContainerPairList +ProtocolIE-ContainerList +Presence + +#.TYPE_RENAME +InitiatingMessage/value InitiatingMessage_value +SuccessfulOutcome/value SuccessfulOutcome_value +UnsuccessfulOutcome/value UnsuccessfulOutcome_value + +#.FIELD_RENAME +InitiatingMessage/value initiatingMessagevalue +UnsuccessfulOutcome/value unsuccessfulOutcome_value +SuccessfulOutcome/value successfulOutcome_value + +PrivateIE-Field/id private_id +ProtocolExtensionField/id ext_id + +PrivateIE-Field/value private_value +ProtocolIE-Field/value ie_field_value + +#.FN_PARS ProtocolIE-ID VAL_PTR=&ProtocolIE_ID +#.FN_FTR ProtocolIE-ID + if (tree) { + proto_item_append_text(proto_item_get_parent_nth(actx->created_item, 2), ": %s", val_to_str_ext(ProtocolIE_ID, &m3ap_ProtocolIE_ID_vals_ext, "unknown (%d)")); + } +#.END + +#.FN_PARS ProtocolIE-Field/value FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_ProtocolIEFieldValue +# Currently not used +# FN_PARS ProtocolIE-FieldPair/firstValue FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_ProtocolIEFieldPairFirstValue +# FN_PARS ProtocolIE-FieldPair/secondValue FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_ProtocolIEFieldPairSecondValue + +# FN_PARS ProtocolExtensionID VAL_PTR=&ProtocolExtensionID +#.FN_PARS ProtocolExtensionField/extensionValue FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_ProtocolExtensionFieldExtensionValue + +#.FN_PARS ProcedureCode VAL_PTR = &ProcedureCode + +#.FN_PARS InitiatingMessage/value FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_InitiatingMessageValue +#.FN_HDR InitiatingMessage/value + message_type = INITIATING_MESSAGE; +#.FN_PARS SuccessfulOutcome/value FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_SuccessfulOutcomeValue +#.FN_HDR SuccessfulOutcome/value + message_type = SUCCESSFUL_OUTCOME; +#.FN_PARS UnsuccessfulOutcome/value FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_UnsuccessfulOutcomeValue +#.FN_HDR UnsuccessfulOutcome/value + message_type = UNSUCCESSFUL_OUTCOME; + +#--- Parameterization is not supported in asn2wrs --- + +#ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, M3AP-PROTOCOL-IES : IEsSetParam} ::= +# SEQUENCE (SIZE (lowerBound..upperBound)) OF +# ProtocolIE-Container {{IEsSetParam}} + +# FN_PARS ProtocolIE-ContainerList +#MIN_VAL = asn1_param_get_integer(%(ACTX)s,"lowerBound") +#MAX_VAL = asn1_param_get_integer(%(ACTX)s,"upperBound") +# FN_HDR ProtocolIE-ContainerList +# static const asn1_par_def_t ProtocolIE_ContainerList_pars[] = { +# { "lowerBound", ASN1_PAR_INTEGER }, +# { "upperBound", ASN1_PAR_INTEGER }, +# { NULL, (asn1_par_type)0 } +# }; +# asn1_stack_frame_check(actx, "ProtocolIE-ContainerList", ProtocolIE_ContainerList_pars); +# END + +#ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, M3AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= +# SEQUENCE (SIZE (lowerBound..upperBound)) OF +# ProtocolIE-ContainerPair {{IEsSetParam}} + +# FN_PARS ProtocolIE-ContainerPairList +#MIN_VAL = asn1_param_get_integer(%(ACTX)s,"lowerBound") +#MAX_VAL = asn1_param_get_integer(%(ACTX)s,"upperBound") +# FN_HDR ProtocolIE-ContainerPairList +# static const asn1_par_def_t ProtocolIE_ContainerPairList_pars[] = { +# { "lowerBound", ASN1_PAR_INTEGER }, +# { "upperBound", ASN1_PAR_INTEGER }, +# { NULL, 0 } +# }; +# asn1_stack_frame_check(actx, "ProtocolIE-ContainerPairList", ProtocolIE_ContainerPairList_pars); +# END + +# following construction is not supported by asn2wrs +# PLMNidentity ::= TBCD-STRING (SIZE (3)) + +#.FN_BODY PLMN-Identity VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb=NULL; + struct m3ap_private_data *m3ap_data = m3ap_get_private_data(actx->pinfo); + e212_number_type_t number_type = m3ap_data->number_type; + m3ap_data->number_type = E212_NONE; + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + 3, 3, FALSE, ¶meter_tvb); + + if (!parameter_tvb) + return offset; + dissect_e212_mcc_mnc(parameter_tvb, actx->pinfo, tree, 0, number_type, FALSE); +#.END + +#.FN_BODY ECGI + struct m3ap_private_data *m3ap_data = m3ap_get_private_data(actx->pinfo); + m3ap_data->number_type = E212_ECGI; +%(DEFAULT_BODY)s + +#.FN_BODY IPAddress VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb=NULL; + gint tvb_len; + proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + + tvb_len = tvb_reported_length(parameter_tvb); + subtree = proto_item_add_subtree(actx->created_item, ett_m3ap_IPAddress); + switch (tvb_len) { + case 4: + proto_tree_add_item(subtree, hf_m3ap_IPAddress_v4, parameter_tvb, 0, 4, ENC_BIG_ENDIAN); + break; + case 16: + proto_tree_add_item(subtree, hf_m3ap_IPAddress_v6, parameter_tvb, 0, 16, ENC_NA); + break; + default: + proto_tree_add_expert(subtree, actx->pinfo, &ei_m3ap_invalid_ip_address_len, parameter_tvb, 0, tvb_len); + break; + } +#.END + +#.FN_BODY Absolute-Time-ofMBMS-Data VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb=NULL; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + + proto_tree_add_item(tree, hf_m3ap_Absolute_Time_ofMBMS_Data_value, parameter_tvb, 0, 8, ENC_TIME_NTP|ENC_BIG_ENDIAN); +#.END + +#.TYPE_ATTR +BitRate DISPLAY=BASE_DEC|BASE_UNIT_STRING STRINGS=&units_bit_sec + +#.FN_BODY MBMS-Service-Area VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb=NULL; + guint16 tvb_len; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + + tvb_len = tvb_reported_length(parameter_tvb); + + dissect_gtpv2_mbms_service_area(parameter_tvb, actx->pinfo, tree, actx->created_item, tvb_len, 0, 0, NULL); +#.END + +#.FN_BODY MBMS-Session-Duration VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb=NULL; + guint16 tvb_len; + + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + 3, 3, FALSE, ¶meter_tvb); + + if (!parameter_tvb) + return offset; + + tvb_len = tvb_reported_length(parameter_tvb); + + proto_item_append_text(actx->created_item, " "); + dissect_gtpv2_mbms_session_duration(parameter_tvb, actx->pinfo, tree, actx->created_item, tvb_len, 0, 0, NULL); +#.END + +#.FN_BODY MinimumTimeToMBMSDataTransfer VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb=NULL; + guint16 tvb_len; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + + tvb_len = tvb_reported_length(parameter_tvb); + dissect_gtpv2_mbms_time_to_data_xfer(parameter_tvb, actx->pinfo, tree, actx->created_item, tvb_len, 0, 0, NULL); +#.END + +#------ Pretify info column ----- +#.FN_HDR MBMSSessionStartRequest + col_set_str(actx->pinfo->cinfo, COL_INFO,"MBMS Session Start Request "); +#.FN_HDR MBMSSessionStartResponse + col_set_str(actx->pinfo->cinfo, COL_INFO,"MBMS Session Start Response "); +#.FN_HDR MBMSSessionStartFailure + col_set_str(actx->pinfo->cinfo, COL_INFO,"MBMS Session Start Failure "); +#.FN_HDR MBMSSessionStopRequest + col_set_str(actx->pinfo->cinfo, COL_INFO,"MBMS Session Stop Request "); +#.FN_HDR MBMSSessionStopResponse + col_set_str(actx->pinfo->cinfo, COL_INFO,"MBMS Session Stop Response "); +#.FN_HDR MBMSSessionUpdateRequest + col_set_str(actx->pinfo->cinfo, COL_INFO,"MBMS Session Update Request "); +#.FN_HDR MBMSSessionUpdateResponse + col_set_str(actx->pinfo->cinfo, COL_INFO,"MBMS Session Update Response "); +#.FN_HDR MBMSSessionUpdateFailure + col_set_str(actx->pinfo->cinfo, COL_INFO,"MBMS Session Update Failure "); +#.FN_HDR ErrorIndication + col_set_str(actx->pinfo->cinfo, COL_INFO,"Error Indication "); +#.FN_HDR Reset + col_set_str(actx->pinfo->cinfo, COL_INFO,"Reset "); +#.FN_HDR ResetAcknowledge + col_set_str(actx->pinfo->cinfo, COL_INFO,"Reset Acknowledge "); +#.FN_HDR PrivateMessage + col_set_str(actx->pinfo->cinfo, COL_INFO,"Private Message "); +#.FN_HDR MCEConfigurationUpdate + col_set_str(actx->pinfo->cinfo, COL_INFO,"MCE Configuration Update "); +#.FN_HDR MCEConfigurationUpdateAcknowledge + col_set_str(actx->pinfo->cinfo, COL_INFO,"MCE Configuration Update Acknowledge "); +#.FN_HDR MCEConfigurationUpdateFailure + col_set_str(actx->pinfo->cinfo, COL_INFO,"MCE Configuration Update Failure "); +#.FN_HDR M3SetupRequest + col_set_str(actx->pinfo->cinfo, COL_INFO,"M3 Setup Request "); +#.FN_HDR M3SetupResponse + col_set_str(actx->pinfo->cinfo, COL_INFO,"M3 Setup Response "); +#.FN_HDR M3SetupFailure + col_set_str(actx->pinfo->cinfo, COL_INFO,"M3 Setup Failure "); + + +#.ASSIGN_VALUE_TO_TYPE # M3AP does not have constants assigned to types, they are pure INTEGER +# ProcedureCode +id-mBMSsessionStart ProcedureCode +id-mBMSsessionStop ProcedureCode +id-errorIndication ProcedureCode +id-privateMessage ProcedureCode +id-Reset ProcedureCode +id-mBMSsessionUpdate ProcedureCode +id-mCEConfigurationUpdate ProcedureCode +id-m3Setup ProcedureCode + +# ProtocolIE +id-MME-MBMS-M3AP-ID ProtocolIE-ID +id-MCE-MBMS-M3AP-ID ProtocolIE-ID +id-TMGI ProtocolIE-ID +id-MBMS-Session-ID ProtocolIE-ID +id-MBMS-E-RAB-QoS-Parameters ProtocolIE-ID +id-MBMS-Session-Duration ProtocolIE-ID +id-MBMS-Service-Area ProtocolIE-ID +id-TNL-Information ProtocolIE-ID +id-CriticalityDiagnostics ProtocolIE-ID +id-Cause ProtocolIE-ID +id-MBMS-Service-Area-List ProtocolIE-ID +id-MBMS-Service-Area-List-Item ProtocolIE-ID +id-TimeToWait ProtocolIE-ID +id-ResetType ProtocolIE-ID +id-MBMS-Service-associatedLogicalM3-ConnectionItem ProtocolIE-ID +id-MBMS-Service-associatedLogicalM3-ConnectionListResAck ProtocolIE-ID +id-MinimumTimeToMBMSDataTransfer ProtocolIE-ID +id-AllocationAndRetentionPriority ProtocolIE-ID +id-Global-MCE-ID ProtocolIE-ID +id-MCEname ProtocolIE-ID +id-MBMSServiceAreaList ProtocolIE-ID +id-Time-ofMBMS-DataTransfer ProtocolIE-ID +id-Time-ofMBMS-DataStop ProtocolIE-ID +id-Reestablishment ProtocolIE-ID +id-Alternative-TNL-Information ProtocolIE-ID +id-MBMS-Cell-List ProtocolIE-ID + +#.REGISTER + +#M3AP-PROTOCOL-IES +MME-MBMS-M3AP-ID N m3ap.ies id-MME-MBMS-M3AP-ID +MCE-MBMS-M3AP-ID N m3ap.ies id-MCE-MBMS-M3AP-ID +TMGI N m3ap.ies id-TMGI +MBMS-Session-ID N m3ap.ies id-MBMS-Session-ID +MBMS-E-RAB-QoS-Parameters N m3ap.ies id-MBMS-E-RAB-QoS-Parameters +MBMS-Session-Duration N m3ap.ies id-MBMS-Session-Duration +MBMS-Service-Area N m3ap.ies id-MBMS-Service-Area +TNL-Information N m3ap.ies id-TNL-Information +CriticalityDiagnostics N m3ap.ies id-CriticalityDiagnostics +Cause N m3ap.ies id-Cause +#MBMS-Service-Area-List N m3ap.ies id-MBMS-Service-Area-List +#MBMS-Service-Area-List-Item N m3ap.ies id-MBMS-Service-Area-List-Item +TimeToWait N m3ap.ies id-TimeToWait +ResetType N m3ap.ies id-ResetType +MBMS-Service-associatedLogicalM3-ConnectionItem N m3ap.ies id-MBMS-Service-associatedLogicalM3-ConnectionItem +MBMS-Service-associatedLogicalM3-ConnectionListResAck N m3ap.ies id-MBMS-Service-associatedLogicalM3-ConnectionListResAck +MinimumTimeToMBMSDataTransfer N m3ap.ies id-MinimumTimeToMBMSDataTransfer +AllocationAndRetentionPriority N m3ap.ies id-AllocationAndRetentionPriority +Global-MCE-ID N m3ap.ies id-Global-MCE-ID +MCEname N m3ap.ies id-MCEname +MBMSServiceAreaListItem N m3ap.ies id-MBMSServiceAreaList +Absolute-Time-ofMBMS-Data N m3ap.ies id-Time-ofMBMS-DataTransfer +Absolute-Time-ofMBMS-Data N m3ap.ies id-Time-ofMBMS-DataStop +Reestablishment N m3ap.ies id-Reestablishment +TNL-Information N m3ap.ies id-Alternative-TNL-Information +MBMS-Cell-List N m3ap.ies id-MBMS-Cell-List + +#M3AP-ELEMENTARY-PROCEDURE +MBMSSessionStartRequest N m3ap.proc.imsg id-mBMSsessionStart +MBMSSessionStartResponse N m3ap.proc.sout id-mBMSsessionStart +MBMSSessionStartFailure N m3ap.proc.uout id-mBMSsessionStart + +MBMSSessionStopRequest N m3ap.proc.imsg id-mBMSsessionStop +MBMSSessionStopResponse N m3ap.proc.sout id-mBMSsessionStop + +MBMSSessionUpdateRequest N m3ap.proc.imsg id-mBMSsessionUpdate +MBMSSessionUpdateResponse N m3ap.proc.sout id-mBMSsessionUpdate +MBMSSessionUpdateFailure N m3ap.proc.uout id-mBMSsessionUpdate + +ErrorIndication N m3ap.proc.imsg id-errorIndication + +Reset N m3ap.proc.imsg id-Reset +ResetAcknowledge N m3ap.proc.sout id-Reset + +PrivateMessage N m3ap.proc.imsg id-privateMessage + +MCEConfigurationUpdate N m3ap.proc.imsg id-mCEConfigurationUpdate +MCEConfigurationUpdateAcknowledge N m3ap.proc.sout id-mCEConfigurationUpdate +MCEConfigurationUpdateFailure N m3ap.proc.uout id-mCEConfigurationUpdate + +M3SetupRequest N m3ap.proc.imsg id-m3Setup +M3SetupResponse N m3ap.proc.sout id-m3Setup +M3SetupFailure N m3ap.proc.uout id-m3Setup + +#.END diff --git a/epan/dissectors/asn1/m3ap/packet-m3ap-template.c b/epan/dissectors/asn1/m3ap/packet-m3ap-template.c new file mode 100644 index 00000000..d2c2c389 --- /dev/null +++ b/epan/dissectors/asn1/m3ap/packet-m3ap-template.c @@ -0,0 +1,223 @@ +/* packet-m3ap.c + * Routines for M3 Application Protocol packet dissection + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + * + * Reference: 3GPP TS 36.444 v16.0.0 + */ + +#include "config.h" + +#include <epan/packet.h> + +#include <epan/strutil.h> +#include <epan/asn1.h> +#include <epan/sctpppids.h> +#include <epan/expert.h> +#include <epan/proto_data.h> + +#include "packet-ber.h" +#include "packet-per.h" +#include "packet-e212.h" +#include "packet-gtpv2.h" + +#define PNAME "M3 Application Protocol" +#define PSNAME "M3AP" +#define PFNAME "m3ap" + +void proto_register_m3ap(void); +void proto_reg_handoff_m3ap(void); + +/* M3AP uses port 36444 as recommended by IANA. */ +#define M3AP_PORT 36444 +static dissector_handle_t m3ap_handle=NULL; + +#include "packet-m3ap-val.h" + +/* Initialize the protocol and registered fields */ +static int proto_m3ap = -1; + +static int hf_m3ap_Absolute_Time_ofMBMS_Data_value = -1; +static int hf_m3ap_IPAddress_v4 = -1; +static int hf_m3ap_IPAddress_v6 = -1; + +#include "packet-m3ap-hf.c" + +/* Initialize the subtree pointers */ +static int ett_m3ap = -1; +static int ett_m3ap_IPAddress = -1; +#include "packet-m3ap-ett.c" + +static expert_field ei_m3ap_invalid_ip_address_len = EI_INIT; + +struct m3ap_private_data { + e212_number_type_t number_type; +}; + +enum{ + INITIATING_MESSAGE, + SUCCESSFUL_OUTCOME, + UNSUCCESSFUL_OUTCOME +}; + +/* Global variables */ +static guint32 ProcedureCode; +static guint32 ProtocolIE_ID; +/*static guint32 ProtocolExtensionID; */ +static int global_m3ap_port = M3AP_PORT; +static guint32 message_type; + +/* Dissector tables */ +static dissector_table_t m3ap_ies_dissector_table; +static dissector_table_t m3ap_extension_dissector_table; +static dissector_table_t m3ap_proc_imsg_dissector_table; +static dissector_table_t m3ap_proc_sout_dissector_table; +static dissector_table_t m3ap_proc_uout_dissector_table; + +static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *); +static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *); +static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *); +static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *); +static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *); + +static struct m3ap_private_data* +m3ap_get_private_data(packet_info *pinfo) +{ + struct m3ap_private_data *m3ap_data = (struct m3ap_private_data*)p_get_proto_data(pinfo->pool, pinfo, proto_m3ap, 0); + if (!m3ap_data) { + m3ap_data = wmem_new0(pinfo->pool, struct m3ap_private_data); + p_add_proto_data(pinfo->pool, pinfo, proto_m3ap, 0, m3ap_data); + } + return m3ap_data; +} + +#include "packet-m3ap-fn.c" + +static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) +{ + return (dissector_try_uint_new(m3ap_ies_dissector_table, ProtocolIE_ID, tvb, pinfo, tree, FALSE, NULL)) ? tvb_captured_length(tvb) : 0; +} + +static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) +{ + return (dissector_try_uint_new(m3ap_extension_dissector_table, ProtocolIE_ID, tvb, pinfo, tree, FALSE, NULL)) ? tvb_captured_length(tvb) : 0; +} + +static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) +{ + return (dissector_try_uint_new(m3ap_proc_imsg_dissector_table, ProcedureCode, tvb, pinfo, tree, FALSE, NULL)) ? tvb_captured_length(tvb) : 0; +} + +static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) +{ + return (dissector_try_uint_new(m3ap_proc_sout_dissector_table, ProcedureCode, tvb, pinfo, tree, FALSE, NULL)) ? tvb_captured_length(tvb) : 0; +} + +static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) +{ + return (dissector_try_uint_new(m3ap_proc_uout_dissector_table, ProcedureCode, tvb, pinfo, tree, FALSE, NULL)) ? tvb_captured_length(tvb) : 0; +} + + +static int +dissect_m3ap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) +{ + proto_item *m3ap_item = NULL; + proto_tree *m3ap_tree = NULL; + + /* make entry in the Protocol column on summary display */ + col_set_str(pinfo->cinfo, COL_PROTOCOL, PSNAME); + col_clear_fence(pinfo->cinfo, COL_INFO); + col_clear(pinfo->cinfo, COL_INFO); + + /* create the m3ap protocol tree */ + m3ap_item = proto_tree_add_item(tree, proto_m3ap, tvb, 0, -1, ENC_NA); + m3ap_tree = proto_item_add_subtree(m3ap_item, ett_m3ap); + + dissect_M3AP_PDU_PDU(tvb, pinfo, m3ap_tree, NULL); + return tvb_captured_length(tvb); +} +/*--- proto_register_m3ap -------------------------------------------*/ +void proto_register_m3ap(void) { + + /* List of fields */ + static hf_register_info hf[] = { + { &hf_m3ap_Absolute_Time_ofMBMS_Data_value, + { "Absolute-Time-ofMBMS-Data-value", "m3ap.Absolute_Time_ofMBMS_Data_value", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0, + NULL, HFILL } + }, + { &hf_m3ap_IPAddress_v4, + { "IPAddress", "m3ap.IPAddress_v4", + FT_IPv4, BASE_NONE, NULL, 0, + NULL, HFILL } + }, + { &hf_m3ap_IPAddress_v6, + { "IPAddress", "m3ap.IPAddress_v6", + FT_IPv6, BASE_NONE, NULL, 0, + NULL, HFILL } + }, + +#include "packet-m3ap-hfarr.c" + }; + + /* List of subtrees */ + static gint *ett[] = { + &ett_m3ap, + &ett_m3ap_IPAddress, +#include "packet-m3ap-ettarr.c" + }; + + expert_module_t* expert_m3ap; + + static ei_register_info ei[] = { + { &ei_m3ap_invalid_ip_address_len, { "m3ap.invalid_ip_address_len", PI_MALFORMED, PI_ERROR, "Invalid IP address length", EXPFILL }} + }; + + /* Register protocol */ + proto_m3ap = proto_register_protocol(PNAME, PSNAME, PFNAME); + /* Register fields and subtrees */ + proto_register_field_array(proto_m3ap, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + expert_m3ap = expert_register_protocol(proto_m3ap); + expert_register_field_array(expert_m3ap, ei, array_length(ei)); + /* Register dissector */ + m3ap_handle = register_dissector(PFNAME, dissect_m3ap, proto_m3ap); + + /* Register dissector tables */ + m3ap_ies_dissector_table = register_dissector_table("m3ap.ies", "M3AP-PROTOCOL-IES", proto_m3ap, FT_UINT32, BASE_DEC); + m3ap_extension_dissector_table = register_dissector_table("m3ap.extension", "M3AP-PROTOCOL-EXTENSION", proto_m3ap, FT_UINT32, BASE_DEC); + m3ap_proc_imsg_dissector_table = register_dissector_table("m3ap.proc.imsg", "M3AP-ELEMENTARY-PROCEDURE InitiatingMessage", proto_m3ap, FT_UINT32, BASE_DEC); + m3ap_proc_sout_dissector_table = register_dissector_table("m3ap.proc.sout", "M3AP-ELEMENTARY-PROCEDURE SuccessfulOutcome", proto_m3ap, FT_UINT32, BASE_DEC); + m3ap_proc_uout_dissector_table = register_dissector_table("m3ap.proc.uout", "M3AP-ELEMENTARY-PROCEDURE UnsuccessfulOutcome", proto_m3ap, FT_UINT32, BASE_DEC); +} + + +/*--- proto_reg_handoff_m3ap ---------------------------------------*/ +void +proto_reg_handoff_m3ap(void) +{ + static gboolean inited = FALSE; + static guint SctpPort; + + if( !inited ) { + dissector_add_uint("sctp.ppi", PROTO_3GPP_M3AP_PROTOCOL_ID, m3ap_handle); + inited = TRUE; +#include "packet-m3ap-dis-tab.c" + dissector_add_uint("m3ap.extension", 17, create_dissector_handle(dissect_AllocationAndRetentionPriority_PDU, proto_m3ap)); + } + else { + if (SctpPort != 0) { + dissector_delete_uint("sctp.port", SctpPort, m3ap_handle); + } + } + + SctpPort = global_m3ap_port; + if (SctpPort != 0) { + dissector_add_uint("sctp.port", SctpPort, m3ap_handle); + } +} |