aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/asn1/m3ap
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/asn1/m3ap')
-rw-r--r--epan/dissectors/asn1/m3ap/CMakeLists.txt52
-rw-r--r--epan/dissectors/asn1/m3ap/M3AP-CommonDataTypes.asn57
-rw-r--r--epan/dissectors/asn1/m3ap/M3AP-Constants.asn85
-rw-r--r--epan/dissectors/asn1/m3ap/M3AP-Containers.asn203
-rw-r--r--epan/dissectors/asn1/m3ap/M3AP-IEs.asn296
-rw-r--r--epan/dissectors/asn1/m3ap/M3AP-PDU-Contents.asn472
-rw-r--r--epan/dissectors/asn1/m3ap/M3AP-PDU-Descriptions.asn213
-rw-r--r--epan/dissectors/asn1/m3ap/Makefile.am23
-rw-r--r--epan/dissectors/asn1/m3ap/Makefile.common45
-rw-r--r--epan/dissectors/asn1/m3ap/Makefile.nmake26
-rw-r--r--epan/dissectors/asn1/m3ap/m3ap.cnf340
-rw-r--r--epan/dissectors/asn1/m3ap/packet-m3ap-template.c218
12 files changed, 2030 insertions, 0 deletions
diff --git a/epan/dissectors/asn1/m3ap/CMakeLists.txt b/epan/dissectors/asn1/m3ap/CMakeLists.txt
new file mode 100644
index 0000000000..3163fc64f7
--- /dev/null
+++ b/epan/dissectors/asn1/m3ap/CMakeLists.txt
@@ -0,0 +1,52 @@
+# CMakeLists.txt
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+
+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 0000000000..b8bae0d795
--- /dev/null
+++ b/epan/dissectors/asn1/m3ap/M3AP-CommonDataTypes.asn
@@ -0,0 +1,57 @@
+-- M3AP-CommonDataTypes.asn
+--
+-- 3GPP TS 36.444 V11.1.0 (2012-03)
+-- http://www.3gpp.org/ftp/Specs/archive/36_series/36.444/36444-b10.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 0000000000..29cc4b8326
--- /dev/null
+++ b/epan/dissectors/asn1/m3ap/M3AP-Constants.asn
@@ -0,0 +1,85 @@
+-- M3AP-Constants.asn
+--
+-- 3GPP TS 36.444 V11.1.0 (2012-03)
+-- http://www.3gpp.org/ftp/Specs/archive/36_series/36.444/36444-b10.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
+
+-- **************************************************************
+--
+-- 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
+END
+
diff --git a/epan/dissectors/asn1/m3ap/M3AP-Containers.asn b/epan/dissectors/asn1/m3ap/M3AP-Containers.asn
new file mode 100644
index 0000000000..782311087b
--- /dev/null
+++ b/epan/dissectors/asn1/m3ap/M3AP-Containers.asn
@@ -0,0 +1,203 @@
+-- M3AP-Containers.asn
+--
+-- 3GPP TS 36.444 V11.1.0 (2012-03)
+-- http://www.3gpp.org/ftp/Specs/archive/36_series/36.444/36444-b10.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 0000000000..8dbaf02551
--- /dev/null
+++ b/epan/dissectors/asn1/m3ap/M3AP-IEs.asn
@@ -0,0 +1,296 @@
+-- M3AP-IEs.asn
+--
+-- 3GPP TS 36.444 V11.1.0 (2012-03)
+-- http://www.3gpp.org/ftp/Specs/archive/36_series/36.444/36444-b10.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
+
+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,
+ ...
+
+}
+
+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
+
+ExtendedMCE-ID ::= OCTET STRING (SIZE(1))
+
+-- F
+-- G
+
+Global-MCE-ID ::= SEQUENCE {
+ pLMN-Identity PLMN-Identity,
+ mCE-ID MCE-ID,
+-- extendedMCE-ID ExtendedMCE-ID,
+ extendedMCE-ID ExtendedMCE-ID OPTIONAL, -- Spec discrepancy 9.2.1.10 Global MCE 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-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
+-- 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 0000000000..4a33c9cb29
--- /dev/null
+++ b/epan/dissectors/asn1/m3ap/M3AP-PDU-Contents.asn
@@ -0,0 +1,472 @@
+-- M3AP-PDU-Contents.asn
+--
+-- 3GPP TS 36.444 V11.1.0 (2012-03)
+-- http://www.3gpp.org/ftp/Specs/archive/36_series/36.444/36444-b10.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
+
+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-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,
+ 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},
+ ...
+}
+
+-- **************************************************************
+--
+-- 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},
+ ...
+}
+
+-- **************************************************************
+--
+-- 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 0000000000..ad0c9b6ea3
--- /dev/null
+++ b/epan/dissectors/asn1/m3ap/M3AP-PDU-Descriptions.asn
@@ -0,0 +1,213 @@
+-- M3AP-PDU-Descriptions.asn
+--
+-- 3GPP TS 36.444 V11.1.0 (2012-03)
+-- http://www.3gpp.org/ftp/Specs/archive/36_series/36.444/36444-b10.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/Makefile.am b/epan/dissectors/asn1/m3ap/Makefile.am
new file mode 100644
index 0000000000..72d28e600b
--- /dev/null
+++ b/epan/dissectors/asn1/m3ap/Makefile.am
@@ -0,0 +1,23 @@
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+include ../Makefile.preinc
+include Makefile.common
+include ../Makefile.inc
+
diff --git a/epan/dissectors/asn1/m3ap/Makefile.common b/epan/dissectors/asn1/m3ap/Makefile.common
new file mode 100644
index 0000000000..b7a5b55674
--- /dev/null
+++ b/epan/dissectors/asn1/m3ap/Makefile.common
@@ -0,0 +1,45 @@
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+PROTOCOL_NAME = m3ap
+
+EXT_ASN_FILE_LIST =
+
+ASN_FILE_LIST = \
+ M3AP-CommonDataTypes.asn \
+ M3AP-Constants.asn \
+ M3AP-Containers.asn \
+ M3AP-IEs.asn \
+ M3AP-PDU-Contents.asn \
+ M3AP-PDU-Descriptions.asn
+
+EXTRA_DIST = \
+ $(EXTRA_DIST_COMMON) \
+ $(ASN_FILE_LIST) \
+ packet-$(PROTOCOL_NAME)-template.c \
+ $(PROTOCOL_NAME).cnf
+
+SRC_FILES = \
+ $(EXTRA_DIST) \
+ $(EXT_ASN_FILE_LIST)
+
+A2W_FLAGS =
+
+EXTRA_CNF =
+
diff --git a/epan/dissectors/asn1/m3ap/Makefile.nmake b/epan/dissectors/asn1/m3ap/Makefile.nmake
new file mode 100644
index 0000000000..d296638ddd
--- /dev/null
+++ b/epan/dissectors/asn1/m3ap/Makefile.nmake
@@ -0,0 +1,26 @@
+## Use: $(MAKE) /$(MAKEFLAGS) -f makefile.nmake
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+include ../../../../config.nmake
+include ../Makefile.preinc.nmake
+include Makefile.common
+include ../Makefile.inc.nmake
+
diff --git a/epan/dissectors/asn1/m3ap/m3ap.cnf b/epan/dissectors/asn1/m3ap/m3ap.cnf
new file mode 100644
index 0000000000..68a03d9832
--- /dev/null
+++ b/epan/dissectors/asn1/m3ap/m3ap.cnf
@@ -0,0 +1,340 @@
+# 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_FTR ProcedureCode
+ col_add_fstr(actx->pinfo->cinfo, COL_INFO, "%s",
+ val_to_str_ext(ProcedureCode, &m3ap_ProcedureCode_vals_ext,
+ "unknown message"));
+#.END
+
+#.FN_PARS InitiatingMessage/value FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_InitiatingMessageValue
+#.FN_HDR InitiatingMessage/value
+ message_type = INITIATING_MESSAGE;
+#.FN_PARS SuccessfulOutcome/value FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_SuccessfulOutcomeValue
+#.FN_HDR SuccessfulOutcome/value
+ message_type = SUCCESSFUL_OUTCOME;
+#.FN_PARS UnsuccessfulOutcome/value FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_UnsuccessfulOutcomeValue
+#.FN_HDR UnsuccessfulOutcome/value
+ message_type = UNSUCCESSFUL_OUTCOME;
+
+#--- Parameterization is not supported in asn2wrs ---
+
+#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 = &parameter_tvb
+ tvbuff_t *parameter_tvb=NULL;
+
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 3, 3, FALSE, &parameter_tvb);
+
+ if (!parameter_tvb)
+ return offset;
+ dissect_e212_mcc_mnc(parameter_tvb, actx->pinfo, tree, 0, E212_NONE, FALSE);
+#.END
+
+#.FN_BODY IPAddress VAL_PTR = &parameter_tvb
+ tvbuff_t *parameter_tvb=NULL;
+ gint tvb_len;
+
+%(DEFAULT_BODY)s
+
+ if (!parameter_tvb)
+ return offset;
+
+ tvb_len = tvb_reported_length(parameter_tvb);
+ switch (tvb_len) {
+ case 4:
+ proto_tree_add_item(tree, hf_m3ap_IPAddress_v4, parameter_tvb, 0, tvb_len, ENC_NA);
+ break;
+ case 6:
+ proto_tree_add_item(tree, hf_m3ap_IPAddress_v6, parameter_tvb, 0, tvb_len, ENC_NA);
+ break;
+ default:
+ proto_tree_add_expert(tree, actx->pinfo, &ei_m3ap_invalid_ip_address_len, parameter_tvb, 0, tvb_len);
+ break;
+ }
+#.END
+
+#.FN_BODY Absolute-Time-ofMBMS-Data VAL_PTR = &parameter_tvb
+ tvbuff_t *parameter_tvb=NULL;
+ const gchar *time_str;
+ gint tvb_len;
+
+%(DEFAULT_BODY)s
+
+ if (!parameter_tvb)
+ return offset;
+
+ tvb_len = tvb_reported_length(parameter_tvb);
+
+ time_str = tvb_ntp_fmt_ts(parameter_tvb, 0);
+ proto_tree_add_string(tree, hf_m3ap_Absolute_Time_ofMBMS_Data_value, parameter_tvb, 0, tvb_len, time_str);
+#.END
+
+#.FN_BODY MBMS-Service-Area VAL_PTR = &parameter_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 = &parameter_tvb
+ tvbuff_t *parameter_tvb=NULL;
+ guint16 tvb_len;
+
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 3, 3, FALSE, &parameter_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 = &parameter_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
+
+#.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
+
+#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 0000000000..98cceefbc3
--- /dev/null
+++ b/epan/dissectors/asn1/m3ap/packet-m3ap-template.c
@@ -0,0 +1,218 @@
+/* packet-m3ap.c
+ * Routines for M3 Application Protocol packet dissection
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Reference: 3GPP TS 36.444 v11.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 "packet-ber.h"
+#include "packet-per.h"
+#include "packet-e212.h"
+#include "packet-gtpv2.h"
+#include "packet-ntp.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;
+
+#include "packet-m3ap-ett.c"
+
+static expert_field ei_m3ap_invalid_ip_address_len = EI_INIT;
+
+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 *);
+
+#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(m3ap_ies_dissector_table, ProtocolIE_ID, tvb, pinfo, tree)) ? 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(m3ap_extension_dissector_table, ProtocolIE_ID, tvb, pinfo, tree)) ? 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(m3ap_proc_imsg_dissector_table, ProcedureCode, tvb, pinfo, tree)) ? 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(m3ap_proc_sout_dissector_table, ProcedureCode, tvb, pinfo, tree)) ? 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(m3ap_proc_uout_dissector_table, ProcedureCode, tvb, pinfo, tree)) ? 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, PNAME);
+
+ /* create the m3ap protocol tree */
+ if (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_STRING, BASE_NONE, 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,
+#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 tables */
+ m3ap_ies_dissector_table = register_dissector_table("m3ap.ies", "M3AP-PROTOCOL-IES", FT_UINT32, BASE_DEC, DISSECTOR_TABLE_ALLOW_DUPLICATE);
+ m3ap_extension_dissector_table = register_dissector_table("m3ap.extension", "M3AP-PROTOCOL-EXTENSION", FT_UINT32, BASE_DEC, DISSECTOR_TABLE_ALLOW_DUPLICATE);
+ m3ap_proc_imsg_dissector_table = register_dissector_table("m3ap.proc.imsg", "M3AP-ELEMENTARY-PROCEDURE InitiatingMessage", FT_UINT32, BASE_DEC, DISSECTOR_TABLE_ALLOW_DUPLICATE);
+ m3ap_proc_sout_dissector_table = register_dissector_table("m3ap.proc.sout", "M3AP-ELEMENTARY-PROCEDURE SuccessfulOutcome", FT_UINT32, BASE_DEC, DISSECTOR_TABLE_ALLOW_DUPLICATE);
+ m3ap_proc_uout_dissector_table = register_dissector_table("m3ap.proc.uout", "M3AP-ELEMENTARY-PROCEDURE UnsuccessfulOutcome", FT_UINT32, BASE_DEC, DISSECTOR_TABLE_ALLOW_DUPLICATE);
+}
+
+
+/*--- proto_reg_handoff_m3ap ---------------------------------------*/
+void
+proto_reg_handoff_m3ap(void)
+{
+ static gboolean inited = FALSE;
+ static guint SctpPort;
+
+ if( !inited ) {
+ m3ap_handle = create_dissector_handle(dissect_m3ap, proto_m3ap);
+ 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);
+ }
+}