Added M3AP ETSI TS 136 444 V14.0.0 ASN1 references

	Added M2AP ETSI TS 136 443 V14.0.0 ASN1 references
parent 5ddad9bd
-- 3GPP TS 36.443 V15.0.0 (2018-09)
-- **************************************************************
--
-- Elementary Procedure definitions
--
-- **************************************************************
M2AP-PDU-Descriptions {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) m2ap (4) version1 (1) m2ap-PDU-Descriptions (0) }
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
-- **************************************************************
--
-- IE parameter types from other modules.
--
-- **************************************************************
IMPORTS
Criticality,
ProcedureCode
FROM M2AP-CommonDataTypes
SessionStartRequest,
SessionStartResponse,
SessionStartFailure,
SessionStopRequest,
SessionStopResponse,
SessionUpdateRequest,
SessionUpdateResponse,
SessionUpdateFailure,
MbmsSchedulingInformation,
MbmsSchedulingInformationResponse,
ErrorIndication,
Reset,
ResetAcknowledge,
M2SetupRequest,
M2SetupResponse,
M2SetupFailure,
ENBConfigurationUpdate,
ENBConfigurationUpdateAcknowledge,
ENBConfigurationUpdateFailure,
MCEConfigurationUpdate,
MCEConfigurationUpdateAcknowledge,
MCEConfigurationUpdateFailure,
MbmsServiceCountingRequest,
MbmsServiceCountingResponse,
MbmsServiceCountingFailure,
MbmsServiceCountingResultsReport,
PrivateMessage,
MbmsOverloadNotification
FROM M2AP-PDU-Contents
id-sessionStart,
id-sessionStop,
id-sessionUpdate,
id-mbmsServiceCounting,
id-mbmsServiceCountingResultsReport,
id-mbmsSchedulingInformation,
id-errorIndication,
id-reset,
id-m2Setup,
id-eNBConfigurationUpdate,
id-mCEConfigurationUpdate,
id-privateMessage,
id-mbmsOverloadNotification
FROM M2AP-Constants;
-- **************************************************************
--
-- Interface Elementary Procedure Class
--
-- **************************************************************
M2AP-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
--
-- **************************************************************
M2AP-PDU ::= CHOICE {
initiatingMessage InitiatingMessage,
successfulOutcome SuccessfulOutcome,
unsuccessfulOutcome UnsuccessfulOutcome,
...
}
InitiatingMessage ::= SEQUENCE {
procedureCode M2AP-ELEMENTARY-PROCEDURE.&procedureCode ({M2AP-ELEMENTARY-PROCEDURES}),
criticality M2AP-ELEMENTARY-PROCEDURE.&criticality ({M2AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
value M2AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({M2AP-ELEMENTARY-PROCEDURES}{@procedureCode})
}
SuccessfulOutcome ::= SEQUENCE {
procedureCode M2AP-ELEMENTARY-PROCEDURE.&procedureCode ({M2AP-ELEMENTARY-PROCEDURES}),
criticality M2AP-ELEMENTARY-PROCEDURE.&criticality ({M2AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
value M2AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({M2AP-ELEMENTARY-PROCEDURES}{@procedureCode})
}
UnsuccessfulOutcome ::= SEQUENCE {
procedureCode M2AP-ELEMENTARY-PROCEDURE.&procedureCode ({M2AP-ELEMENTARY-PROCEDURES}),
criticality M2AP-ELEMENTARY-PROCEDURE.&criticality ({M2AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
value M2AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({M2AP-ELEMENTARY-PROCEDURES}{@procedureCode})
}
-- **************************************************************
--
-- Interface Elementary Procedure List
--
-- **************************************************************
M2AP-ELEMENTARY-PROCEDURES M2AP-ELEMENTARY-PROCEDURE ::= {
M2AP-ELEMENTARY-PROCEDURES-CLASS-1 |
M2AP-ELEMENTARY-PROCEDURES-CLASS-2 ,
...
}
M2AP-ELEMENTARY-PROCEDURES-CLASS-1 M2AP-ELEMENTARY-PROCEDURE ::= {
sessionStart |
sessionStop |
sessionUpdate |
mbmsSchedulingInformation |
reset |
m2Setup |
eNBConfigurationUpdate |
mCEConfigurationUpdate |
mbmsServiceCounting ,
...
}
M2AP-ELEMENTARY-PROCEDURES-CLASS-2 M2AP-ELEMENTARY-PROCEDURE ::= {
errorIndication |
privateMessage |
mbmsServiceCountingResultsReport |
mbmsOverloadNotification ,
...
}
-- **************************************************************
--
-- Interface Elementary Procedures
--
-- **************************************************************
sessionStart M2AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE SessionStartRequest
SUCCESSFUL OUTCOME SessionStartResponse
UNSUCCESSFUL OUTCOME SessionStartFailure
PROCEDURE CODE id-sessionStart
CRITICALITY reject
}
sessionStop M2AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE SessionStopRequest
SUCCESSFUL OUTCOME SessionStopResponse
PROCEDURE CODE id-sessionStop
CRITICALITY reject
}
sessionUpdate M2AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE SessionUpdateRequest
SUCCESSFUL OUTCOME SessionUpdateResponse
UNSUCCESSFUL OUTCOME SessionUpdateFailure
PROCEDURE CODE id-sessionUpdate
CRITICALITY reject
}
mbmsSchedulingInformation M2AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE MbmsSchedulingInformation
SUCCESSFUL OUTCOME MbmsSchedulingInformationResponse
PROCEDURE CODE id-mbmsSchedulingInformation
CRITICALITY reject
}
errorIndication M2AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE ErrorIndication
PROCEDURE CODE id-errorIndication
CRITICALITY ignore
}
reset M2AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE Reset
SUCCESSFUL OUTCOME ResetAcknowledge
PROCEDURE CODE id-reset
CRITICALITY reject
}
m2Setup M2AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE M2SetupRequest
SUCCESSFUL OUTCOME M2SetupResponse
UNSUCCESSFUL OUTCOME M2SetupFailure
PROCEDURE CODE id-m2Setup
CRITICALITY reject
}
eNBConfigurationUpdate M2AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE ENBConfigurationUpdate
SUCCESSFUL OUTCOME ENBConfigurationUpdateAcknowledge
UNSUCCESSFUL OUTCOME ENBConfigurationUpdateFailure
PROCEDURE CODE id-eNBConfigurationUpdate
CRITICALITY reject
}
mCEConfigurationUpdate M2AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE MCEConfigurationUpdate
SUCCESSFUL OUTCOME MCEConfigurationUpdateAcknowledge
UNSUCCESSFUL OUTCOME MCEConfigurationUpdateFailure
PROCEDURE CODE id-mCEConfigurationUpdate
CRITICALITY reject
}
mbmsServiceCounting M2AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE MbmsServiceCountingRequest
SUCCESSFUL OUTCOME MbmsServiceCountingResponse
UNSUCCESSFUL OUTCOME MbmsServiceCountingFailure
PROCEDURE CODE id-mbmsServiceCounting
CRITICALITY reject
}
mbmsServiceCountingResultsReport M2AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE MbmsServiceCountingResultsReport
PROCEDURE CODE id-mbmsServiceCountingResultsReport
CRITICALITY reject
}
privateMessage M2AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE PrivateMessage
PROCEDURE CODE id-privateMessage
CRITICALITY ignore
}
mbmsOverloadNotification M2AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE MbmsOverloadNotification
PROCEDURE CODE id-mbmsOverloadNotification
CRITICALITY reject
}
END
-- **************************************************************
--
-- PDU definitions for M2AP.
--
-- **************************************************************
M2AP-PDU-Contents {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) m2ap (4) version1 (1) m2ap-PDU-Contents (1) }
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
-- **************************************************************
--
-- IE parameter types from other modules.
--
-- **************************************************************
IMPORTS
Cause,
CriticalityDiagnostics,
ENB-MBMS-Configuration-data-Item,
ENB-MBMS-Configuration-data-ConfigUpdate-Item,
ENB-MBMS-M2AP-ID,
ENBname,
GlobalENB-ID,
GlobalMCE-ID,
MBSFN-Area-ID,
MBMS-Service-Area,
MBMS-Session-ID,
MBMSsessionListPerPMCH-Item,
MBMS-Service-associatedLogicalM2-ConnectionItem,
MBSFN-Subframe-Configuration,
MCCH-Update-Time,
MCCHrelatedBCCH-ConfigPerMBSFNArea-Item,
MCE-MBMS-M2AP-ID,
MCEname,
PMCH-Configuration,
Common-Subframe-Allocation-Period,
TimeToWait,
TMGI,
TNL-Information,
SFN,
MBMSsessionsToBeSuspendedListPerPMCH-Item,
SC-PTM-Information
FROM M2AP-Ies
PrivateIE-Container{},
ProtocolExtensionContainer{},
ProtocolIE-Container{},
ProtocolIE-ContainerList{},
ProtocolIE-ContainerPair{},
ProtocolIE-ContainerPairList{},
ProtocolIE-Single-Container{},
M2AP-PRIVATE-IES,
M2AP-PROTOCOL-EXTENSION,
M2AP-PROTOCOL-IES,
M2AP-PROTOCOL-IES-PAIR
FROM M2AP-Containers
id-MCE-MBMS-M2AP-ID,
id-ENB-MBMS-M2AP-ID,
id-TMGI,
id-MBMS-Session-ID,
id-MBMS-Service-Area,
id-TNL-Information,
id-Alternative-TNL-Information,
id-CriticalityDiagnostics,
id-Cause,
id-MBSFN-Area-Configuration-List,
id-MBSFN-Subframe-Configuration-Item,
id-MBSFN-Subframe-Configuration-List,
id-MCCH-Update-Time,
id-PMCH-Configuration-List,
id-PMCH-Configuration-Item,
id-Common-Subframe-Allocation-Period,
id-GlobalENB-ID,
id-ENBname,
id-ENB-MBMS-Configuration-data-List,
id-ENB-MBMS-Configuration-data-Item,
id-GlobalMCE-ID,
id-MCEname,
id-MCCHrelatedBCCH-ConfigPerMBSFNArea,
id-MCCHrelatedBCCH-ConfigPerMBSFNArea-Item,
id-TimeToWait,
id-ENB-MBMS-Configuration-data-List-ConfigUpdate,
id-ENB-MBMS-Configuration-data-ConfigUpdate-Item,
id-MBSFN-Area-ID,
id-ResetType,
id-MBMS-Service-associatedLogicalM2-ConnectionItem,
id-MBMS-Service-associatedLogicalM2-ConnectionListResAck,
id-MBMS-Counting-Request-Session,
id-MBMS-Counting-Request-Session-Item,
id-MBMS-Counting-Result-List,
id-MBMS-Counting-Result-Item,
id-MBMS-Suspension-Notification-List,
id-MBMS-Suspension-Notification-Item,
id-PMCH-Overload-Status,
id-Overload-Status-Per-PMCH-List,
id-Active-MBMS-Session-List,
id-SC-PTM-Information,
maxnoofMBSFN-Allocations,
maxnoofMBSFNareas,
maxnoofPMCHsperMBSFNarea,
maxnoofCells,
maxnoofMBMSServiceAreasPerCell,
maxnoofSessionsPerPMCH,
maxnooferrors,
maxNrOfIndividualM2ConnectionsToReset,
maxnoofCountingService
FROM M2AP-Constants;
-- **************************************************************
--
-- SESSION START REQUEST
--
-- **************************************************************
SessionStartRequest ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{SessionStartRequest-Ies}},
...
}
SessionStartRequest-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-MCE-MBMS-M2AP-ID CRITICALITY reject TYPE MCE-MBMS-M2AP-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-Service-Area CRITICALITY reject TYPE MBMS-Service-Area PRESENCE mandatory}|
{ ID id-TNL-Information CRITICALITY reject TYPE TNL-Information PRESENCE mandatory}|
{ ID id-Alternative-TNL-Information CRITICALITY ignore TYPE TNL-Information PRESENCE optional}|
{ ID id-SC-PTM-Information CRITICALITY reject TYPE SC-PTM-Information PRESENCE optional},
...
}
-- **************************************************************
--
-- SESSION START RESPONSE
--
-- **************************************************************
SessionStartResponse ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ SessionStartResponse-Ies}},
...
}
SessionStartResponse-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-MCE-MBMS-M2AP-ID CRITICALITY ignore TYPE MCE-MBMS-M2AP-ID PRESENCE mandatory } |
{ ID id-ENB-MBMS-M2AP-ID CRITICALITY ignore TYPE ENB-MBMS-M2AP-ID PRESENCE mandatory } |
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional },
...
}
-- **************************************************************
--
-- SESSION START FAILURE
--
-- **************************************************************
SessionStartFailure ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ SessionStartFailure-Ies}},
...
}
SessionStartFailure-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-MCE-MBMS-M2AP-ID CRITICALITY ignore TYPE MCE-MBMS-M2AP-ID PRESENCE mandatory } |
{ ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory } |
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional },
...
}
-- **************************************************************
--
-- SESSION STOP REQUEST
--
-- **************************************************************
SessionStopRequest ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{SessionStopRequest-Ies}},
...
}
SessionStopRequest-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-MCE-MBMS-M2AP-ID CRITICALITY reject TYPE MCE-MBMS-M2AP-ID PRESENCE mandatory } |
{ ID id-ENB-MBMS-M2AP-ID CRITICALITY reject TYPE ENB-MBMS-M2AP-ID PRESENCE mandatory } ,
...
}
-- **************************************************************
--
-- SESSION STOP RESPONSE
--
-- **************************************************************
SessionStopResponse ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ SessionStopResponse-Ies}},
...
}
SessionStopResponse-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-MCE-MBMS-M2AP-ID CRITICALITY ignore TYPE MCE-MBMS-M2AP-ID PRESENCE mandatory } |
{ ID id-ENB-MBMS-M2AP-ID CRITICALITY ignore TYPE ENB-MBMS-M2AP-ID PRESENCE mandatory } |
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional } ,
...
}
-- **************************************************************
--
-- SESSION UPDATE REQUEST
--
-- **************************************************************
SessionUpdateRequest ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{SessionUpdateRequest-Ies}},
...
}
SessionUpdateRequest-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-MCE-MBMS-M2AP-ID CRITICALITY reject TYPE MCE-MBMS-M2AP-ID PRESENCE mandatory}|
{ ID id-ENB-MBMS-M2AP-ID CRITICALITY reject TYPE ENB-MBMS-M2AP-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-Service-Area CRITICALITY ignore TYPE MBMS-Service-Area PRESENCE optional}|
{ ID id-TNL-Information CRITICALITY reject TYPE TNL-Information PRESENCE optional}|
{ ID id-SC-PTM-Information CRITICALITY reject TYPE SC-PTM-Information PRESENCE optional},
...
}
-- **************************************************************
--
-- SESSION UPDATE RESPONSE
--
-- **************************************************************
SessionUpdateResponse ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ SessionUpdateResponse-Ies}},
...
}
SessionUpdateResponse-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-MCE-MBMS-M2AP-ID CRITICALITY ignore TYPE MCE-MBMS-M2AP-ID PRESENCE mandatory } |
{ ID id-ENB-MBMS-M2AP-ID CRITICALITY ignore TYPE ENB-MBMS-M2AP-ID PRESENCE mandatory } |
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional },
...
}
-- **************************************************************
--
-- SESSION UPDATE FAILURE
--
-- **************************************************************
SessionUpdateFailure ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ SessionUpdateFailure-Ies}},
...
}
SessionUpdateFailure-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-MCE-MBMS-M2AP-ID CRITICALITY ignore TYPE MCE-MBMS-M2AP-ID PRESENCE mandatory } |
{ ID id-ENB-MBMS-M2AP-ID CRITICALITY ignore TYPE ENB-MBMS-M2AP-ID PRESENCE mandatory } |
{ ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory } |
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional },
...
}
-- **************************************************************
--
-- MBMS SCHEDULING INFORMATION
--
-- **************************************************************
MbmsSchedulingInformation ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ MbmsSchedulingInformation-Ies}},
...
}
MbmsSchedulingInformation-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-MCCH-Update-Time CRITICALITY reject TYPE MCCH-Update-Time PRESENCE mandatory }|
{ ID id-MBSFN-Area-Configuration-List CRITICALITY reject TYPE MBSFN-Area-Configuration-List PRESENCE mandatory },
...
}
MBSFN-Area-Configuration-List ::= SEQUENCE (SIZE(1.. maxnoofMBSFNareas)) OF ProtocolIE-Container { { MBSFN-Area-Configuration-Item } }
MBSFN-Area-Configuration-Item M2AP-PROTOCOL-IES ::= {
{ ID id-PMCH-Configuration-List CRITICALITY reject TYPE PMCH-Configuration-List PRESENCE mandatory }|
{ ID id-MBSFN-Subframe-Configuration-List CRITICALITY reject TYPE MBSFN-Subframe-ConfigurationList PRESENCE mandatory }|
{ ID id-Common-Subframe-Allocation-Period CRITICALITY reject TYPE Common-Subframe-Allocation-Period PRESENCE mandatory }|
{ ID id-MBSFN-Area-ID CRITICALITY reject TYPE MBSFN-Area-ID PRESENCE mandatory }|
{ ID id-MBMS-Suspension-Notification-List CRITICALITY ignore TYPE MBMS-Suspension-Notification-List PRESENCE optional },
...
}
PMCH-Configuration-List ::= SEQUENCE (SIZE(0.. maxnoofPMCHsperMBSFNarea)) OF ProtocolIE-Single-Container { { PMCH-Configuration-ItemIEs } }
PMCH-Configuration-ItemIEs M2AP-PROTOCOL-IES ::= {
{ ID id-PMCH-Configuration-Item CRITICALITY reject TYPE PMCH-Configuration-Item PRESENCE mandatory },
...
}
PMCH-Configuration-Item ::= SEQUENCE {
pmch-Configuration PMCH-Configuration,
mbms-Session-List MBMSsessionListPerPMCH-Item,
iE-Extensions ProtocolExtensionContainer { { PMCH-Configuration-ItemExtIEs} } OPTIONAL,
...
}
PMCH-Configuration-ItemExtIEs M2AP-PROTOCOL-EXTENSION ::= {
...
}
MBSFN-Subframe-ConfigurationList ::= SEQUENCE (SIZE(1.. maxnoofMBSFN-Allocations)) OF ProtocolIE-Single-Container { { MBSFN-Subframe-ConfigurationItem } }
MBSFN-Subframe-ConfigurationItem M2AP-PROTOCOL-IES ::= {
{ ID id-MBSFN-Subframe-Configuration-Item CRITICALITY reject TYPE MBSFN-Subframe-Configuration PRESENCE mandatory },
...
}
MBMS-Suspension-Notification-List ::= SEQUENCE (SIZE(1.. maxnoofPMCHsperMBSFNarea)) OF ProtocolIE-Single-Container { { MBMS-Suspension-Notification-ItemIEs } }
MBMS-Suspension-Notification-ItemIEs M2AP-PROTOCOL-IES ::= {
{ ID id-MBMS-Suspension-Notification-Item CRITICALITY ignore TYPE MBMS-Suspension-Notification-Item PRESENCE optional},
...
}
MBMS-Suspension-Notification-Item ::= SEQUENCE {
sfn SFN,
mbms-Sessions-To-Be-Suspended-List MBMSsessionsToBeSuspendedListPerPMCH-Item,
iE-Extensions ProtocolExtensionContainer { { MBMS-Suspension-Notification-ItemExtIEs} } OPTIONAL,
...
}
MBMS-Suspension-Notification-ItemExtIEs M2AP-PROTOCOL-EXTENSION ::= {
...
}
-- **************************************************************
--
-- MBMS SCHEDULING INFORMATION RESPONSE
--
-- **************************************************************
MbmsSchedulingInformationResponse ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ MbmsSchedulingInformationResponse-Ies}},
...
}
MbmsSchedulingInformationResponse-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional },
...
}
-- **************************************************************
--
-- M2 SETUP REQUEST
--
-- **************************************************************
M2SetupRequest ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{M2SetupRequest-Ies}},
...
}
M2SetupRequest-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}|
{ ID id-ENBname CRITICALITY ignore TYPE ENBname PRESENCE optional}|
{ ID id-ENB-MBMS-Configuration-data-List CRITICALITY reject TYPE ENB-MBMS-Configuration-data-List PRESENCE mandatory},
...
}
ENB-MBMS-Configuration-data-List ::= SEQUENCE (SIZE(1.. maxnoofCells)) OF ProtocolIE-Single-Container { { ENB-MBMS-Configuration-data-ItemIEs } }
ENB-MBMS-Configuration-data-ItemIEs M2AP-PROTOCOL-IES ::= {
{ ID id-ENB-MBMS-Configuration-data-Item CRITICALITY reject TYPE ENB-MBMS-Configuration-data-Item PRESENCE mandatory },
...
}
-- **************************************************************
--
-- M2 SETUP RESPONSE
--
-- **************************************************************
M2SetupResponse ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ M2SetupResponse-Ies}},
...
}
M2SetupResponse-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-GlobalMCE-ID CRITICALITY reject TYPE GlobalMCE-ID PRESENCE mandatory }|
{ ID id-MCEname CRITICALITY ignore TYPE MCEname PRESENCE optional }|
{ ID id-MCCHrelatedBCCH-ConfigPerMBSFNArea CRITICALITY reject TYPE MCCHrelatedBCCH-ConfigPerMBSFNArea PRESENCE mandatory }|
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional },
...
}
MCCHrelatedBCCH-ConfigPerMBSFNArea ::= SEQUENCE (SIZE(1.. maxnoofMBSFNareas)) OF ProtocolIE-Single-Container { { MCCHrelatedBCCH-ConfigPerMBSFNArea-ItemIEs } }
MCCHrelatedBCCH-ConfigPerMBSFNArea-ItemIEs M2AP-PROTOCOL-IES ::= {
{ ID id-MCCHrelatedBCCH-ConfigPerMBSFNArea-Item CRITICALITY reject TYPE MCCHrelatedBCCH-ConfigPerMBSFNArea-Item PRESENCE mandatory },
...
}
-- **************************************************************
--
-- M2 SETUP FAILURE
--
-- **************************************************************
M2SetupFailure ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ M2SetupFailure-Ies}},
...
}
M2SetupFailure-Ies M2AP-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},
...
}
-- **************************************************************
--
-- ENB CONFIGURATION UPDATE
--
-- **************************************************************
ENBConfigurationUpdate ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ENBConfigurationUpdate-Ies}},
...
}
ENBConfigurationUpdate-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE optional }|
{ ID id-ENBname CRITICALITY ignore TYPE ENBname PRESENCE optional }|
{ ID id-ENB-MBMS-Configuration-data-List-ConfigUpdate CRITICALITY reject TYPE ENB-MBMS-Configuration-data-List-ConfigUpdate PRESENCE optional },
...
}
ENB-MBMS-Configuration-data-List-ConfigUpdate ::= SEQUENCE (SIZE(1.. maxnoofCells)) OF ProtocolIE-Single-Container { { ENB-MBMS-Configuration-data-ConfigUpdate-ItemIEs } }
ENB-MBMS-Configuration-data-ConfigUpdate-ItemIEs M2AP-PROTOCOL-IES ::= {
{ ID id-ENB-MBMS-Configuration-data-ConfigUpdate-Item CRITICALITY reject TYPE ENB-MBMS-Configuration-data-ConfigUpdate-Item PRESENCE mandatory },
...
}
-- **************************************************************
--
-- ENB CONFIGURATION UPDATE ACKNOWLEDGE
--
-- **************************************************************
ENBConfigurationUpdateAcknowledge ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ ENBConfigurationUpdateAcknowledge-Ies}},
...
}
ENBConfigurationUpdateAcknowledge-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-MCCHrelatedBCCH-ConfigPerMBSFNArea CRITICALITY reject TYPE MCCHrelatedBCCH-ConfigPerMBSFNArea PRESENCE optional }|
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional },
...
}
-- **************************************************************
--
-- ENB CONFIGURATION UPDATE FAILURE
--
-- **************************************************************
ENBConfigurationUpdateFailure ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ ENBConfigurationUpdateFailure-Ies}},
...
}
ENBConfigurationUpdateFailure-Ies M2AP-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
--
-- **************************************************************
MCEConfigurationUpdate ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{MCEConfigurationUpdate-Ies}},
...
}
MCEConfigurationUpdate-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-GlobalMCE-ID CRITICALITY reject TYPE GlobalMCE-ID PRESENCE optional }|
{ ID id-MCEname CRITICALITY ignore TYPE MCEname PRESENCE optional }|
{ ID id-MCCHrelatedBCCH-ConfigPerMBSFNArea CRITICALITY reject TYPE MCCHrelatedBCCH-ConfigPerMBSFNArea PRESENCE optional },
...
}
-- **************************************************************
--
-- MCE CONFIGURATION UPDATE ACKNOWLEDGE
--
-- **************************************************************
MCEConfigurationUpdateAcknowledge ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ MCEConfigurationUpdateAcknowledge-Ies}},
...
}
MCEConfigurationUpdateAcknowledge-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional},
...
}
-- **************************************************************
--
-- MCE CONFIGURATION UPDATE FAILURE
--
-- **************************************************************
MCEConfigurationUpdateFailure ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ MCEConfigurationUpdateFailure-Ies}},
...
}
MCEConfigurationUpdateFailure-Ies M2AP-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},
...
}
-- **************************************************************
--
-- ERROR INDICATION
--
-- **************************************************************
ErrorIndication ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ErrorIndication-Ies}},
...
}
ErrorIndication-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-MCE-MBMS-M2AP-ID CRITICALITY ignore TYPE MCE-MBMS-M2AP-ID PRESENCE optional}|
{ ID id-ENB-MBMS-M2AP-ID CRITICALITY ignore TYPE ENB-MBMS-M2AP-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 {{Reset-Ies}},
...
}
Reset-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}|
{ ID id-ResetType CRITICALITY reject TYPE ResetType PRESENCE mandatory},
...
}
ResetType ::= CHOICE {
m2-Interface ResetAll,
partOfM2-Interface MBMS-Service-associatedLogicalM2-ConnectionListRes,
...
}
ResetAll ::= ENUMERATED {
reset-all,
...
}
MBMS-Service-associatedLogicalM2-ConnectionListRes ::= SEQUENCE (SIZE(1.. maxNrOfIndividualM2ConnectionsToReset)) OF ProtocolIE-Single-Container { { MBMS-Service-associatedLogicalM2-ConnectionItemRes } }
MBMS-Service-associatedLogicalM2-ConnectionItemRes M2AP-PROTOCOL-IES ::= {
{ ID id-MBMS-Service-associatedLogicalM2-ConnectionItem CRITICALITY reject TYPE MBMS-Service-associatedLogicalM2-ConnectionItem PRESENCE mandatory},
...
}
-- **************************************************************
--
-- RESET ACKNOWLEDGE
--
-- **************************************************************
ResetAcknowledge ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ResetAcknowledge-Ies}},
...
}
ResetAcknowledge-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-MBMS-Service-associatedLogicalM2-ConnectionListResAck CRITICALITY ignore TYPE MBMS-Service-associatedLogicalM2-ConnectionListResAck PRESENCE optional}|
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional},
...
}
MBMS-Service-associatedLogicalM2-ConnectionListResAck ::= SEQUENCE (SIZE(1.. maxNrOfIndividualM2ConnectionsToReset)) OF ProtocolIE-Single-Container { { MBMS-Service-associatedLogicalM2-ConnectionItemResAck } }
MBMS-Service-associatedLogicalM2-ConnectionItemResAck M2AP-PROTOCOL-IES ::= {
{ ID id-MBMS-Service-associatedLogicalM2-ConnectionItem CRITICALITY ignore TYPE MBMS-Service-associatedLogicalM2-ConnectionItem PRESENCE mandatory},
...
}
-- **************************************************************
--
-- PRIVATE MESSAGE
--
-- **************************************************************
PrivateMessage ::= SEQUENCE {
privateIEs PrivateIE-Container {{PrivateMessage-Ies}},
...
}
PrivateMessage-Ies M2AP-PRIVATE-IES ::= {
...
}
-- **************************************************************
--
-- MBMS SERVICE COUNTING REQUEST
--
-- **************************************************************
MbmsServiceCountingRequest ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{MbmsServiceCountingRequest-Ies}},
...
}
MbmsServiceCountingRequest-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-MCCH-Update-Time CRITICALITY reject TYPE MCCH-Update-Time PRESENCE mandatory }|
{ ID id-MBSFN-Area-ID CRITICALITY reject TYPE MBSFN-Area-ID PRESENCE mandatory }|
{ ID id-MBMS-Counting-Request-Session CRITICALITY reject TYPE MBMS-Counting-Request-Session PRESENCE mandatory },
...
}
MBMS-Counting-Request-Session ::= SEQUENCE (SIZE(1.. maxnoofCountingService)) OF ProtocolIE-Container { { MBMS-Counting-Request-Session-Item } }
MBMS-Counting-Request-Session-Item M2AP-PROTOCOL-IES ::= {
{ ID id-MBMS-Counting-Request-Session-Item CRITICALITY reject TYPE MBMS-Counting-Request-SessionIE PRESENCE mandatory },
...
}
MBMS-Counting-Request-SessionIE ::= SEQUENCE{
tmgi TMGI,
iE-Extensions ProtocolExtensionContainer { { MBMS-Counting-Request-SessionIE-ExtIEs} } OPTIONAL,
...
}
MBMS-Counting-Request-SessionIE-ExtIEs M2AP-PROTOCOL-EXTENSION ::= {
...
}
-- **************************************************************
--
-- MBMS SERVICE COUNTING RESPONSE
--
-- **************************************************************
MbmsServiceCountingResponse ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{MbmsServiceCountingResponse-Ies}},
...
}
MbmsServiceCountingResponse-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional },
...
}
-- **************************************************************
--
-- MBMS SERVICE COUNTING FAILURE
--
-- **************************************************************
MbmsServiceCountingFailure ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ MbmsServiceCountingFailure-Ies}},
...
}
MbmsServiceCountingFailure-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}|
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional},
...
}
-- **************************************************************
--
-- MBMS SERVICE COUNTING RESULTS REPORT
--
-- **************************************************************
MbmsServiceCountingResultsReport ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ MbmsServiceCountingResultsReport-Ies}},
...
}
MbmsServiceCountingResultsReport-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-MBSFN-Area-ID CRITICALITY reject TYPE MBSFN-Area-ID PRESENCE mandatory}|
{ ID id-MBMS-Counting-Result-List CRITICALITY reject TYPE MBMS-Counting-Result-List PRESENCE mandatory},
...
}
MBMS-Counting-Result-List ::= SEQUENCE (SIZE(1.. maxnoofCountingService)) OF ProtocolIE-Container { { MBMS-Counting-Result-Item } }
MBMS-Counting-Result-Item M2AP-PROTOCOL-IES ::= {
{ ID id-MBMS-Counting-Result-Item CRITICALITY reject TYPE MBMS-Counting-Result PRESENCE mandatory },
...
}
MBMS-Counting-Result ::= SEQUENCE{
tmgi TMGI,
countingResult CountingResult,
iE-Extensions ProtocolExtensionContainer { { MBMS-Counting-Result-ExtIEs} } OPTIONAL,
...
}
MBMS-Counting-Result-ExtIEs M2AP-PROTOCOL-EXTENSION ::= {
...
}
CountingResult ::= INTEGER (0..1023)
-- **************************************************************
--
-- MBMS OVERLOAD NOTIFICATION
--
-- **************************************************************
MbmsOverloadNotification ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ MbmsOverloadNotification-Ies}},
...
}
MbmsOverloadNotification-Ies M2AP-PROTOCOL-IES ::= {
{ ID id-MBSFN-Area-ID CRITICALITY reject TYPE MBSFN-Area-ID PRESENCE mandatory}|
{ ID id-Overload-Status-Per-PMCH-List CRITICALITY reject TYPE Overload-Status-Per-PMCH-List PRESENCE mandatory},
...
}
Overload-Status-Per-PMCH-List ::= SEQUENCE (SIZE(1..maxnoofPMCHsperMBSFNarea)) OF ProtocolIE-Container { { Overload-Status-Per-PMCH-Item } }
Overload-Status-Per-PMCH-Item M2AP-PROTOCOL-IES ::= {
{ ID id-PMCH-Overload-Status CRITICALITY reject TYPE PMCH-Overload-Status PRESENCE mandatory }|
{ ID id-Active-MBMS-Session-List CRITICALITY reject TYPE Active-MBMS-Session-List PRESENCE optional },
...
}
PMCH-Overload-Status ::= ENUMERATED {normal, overload, ...}
Active-MBMS-Session-List ::= SEQUENCE (SIZE(1..maxnoofSessionsPerPMCH)) OF ProtocolIE-Container { { Active-MBMS-Session-Item } }
Active-MBMS-Session-Item M2AP-PROTOCOL-IES ::= {
{ ID id-TMGI CRITICALITY reject TYPE TMGI PRESENCE mandatory },
...
}
END
-- **************************************************************
--
-- Information Element Definitions
--
-- **************************************************************
M2AP-Ies {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) m2ap (4) version1 (1) m2ap-Ies (2) }
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
IMPORTS
id-MCH-Scheduling-PeriodExtended,
id-MCH-Scheduling-PeriodExtended2,
id-Modification-PeriodExtended,
id-Modulation-Coding-Scheme2,
id-Repetition-PeriodExtended,
id-Subcarrier-SpacingMBMS,
id-SubframeAllocationExtended,
maxnoofMBSFNareas,
maxnoofPMCHsperMBSFNarea,
maxnoofCells,
maxnoofMBMSServiceAreasPerCell,
maxnoofSessionsPerPMCH,
maxnooferrors,
maxnoofCellsforMBMS
FROM M2AP-Constants
Criticality,
ProcedureCode,
ProtocolIE-ID,
TriggeringMessage
FROM M2AP-CommonDataTypes
ProtocolExtensionContainer{},
ProtocolIE-Single-Container{},
M2AP-PROTOCOL-EXTENSION,
M2AP-PROTOCOL-IES
FROM M2AP-Containers;
-- A
AllocatedSubframesEnd ::= INTEGER (0..1535)
AllocationAndRetentionPriority ::= SEQUENCE {
priorityLevel PriorityLevel,
pre-emptionCapability Pre-emptionCapability,
pre-emptionVulnerability Pre-emptionVulnerability,
iE-Extensions ProtocolExtensionContainer { {AllocationAndRetentionPriority-ExtIEs} } OPTIONAL
}
AllocationAndRetentionPriority-ExtIEs M2AP-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,
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-MCE-MBMS-M2AP-ID,
unknown-or-already-allocated-eNB-MBMS-M2AP-ID,
unknown-or-inconsistent-pair-of-MBMS-M2AP-IDs,
radio-resources-not-available,
interaction-with-other-procedure,
unspecified,
...,
invalid-QoS-combination,
not-supported-QCI-value
}
CauseTransport ::= ENUMERATED {
transport-resource-unavailable,
unspecified,
...
}
Cell-Information ::= SEQUENCE {
eCGI ECGI,
cellReservationInfo ENUMERATED {reservedCell, nonReservedCell, ...},
iE-Extensions ProtocolExtensionContainer { { Cell-Information-ExtIEs} } OPTIONAL,
...
}
Cell-Information-ExtIEs M2AP-PROTOCOL-EXTENSION ::= {
...
}
Cell-Information-List ::= SEQUENCE (SIZE(1..maxnoofCells)) OF Cell-Information
CriticalityDiagnostics ::= SEQUENCE {
procedureCode ProcedureCode OPTIONAL,
triggeringMessage TriggeringMessage OPTIONAL,
procedureCriticality Criticality OPTIONAL,
iEsCriticalityDiagnostics CriticalityDiagnostics-IE-List OPTIONAL,
iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-ExtIEs} } OPTIONAL,
...
}
CriticalityDiagnostics-ExtIEs M2AP-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 M2AP-PROTOCOL-EXTENSION ::= {
...
}
-- D
-- E
ECGI ::= SEQUENCE {
pLMN-Identity PLMN-Identity,
eUTRANcellIdentifier EUTRANCellIdentifier,
iE-Extensions ProtocolExtensionContainer { {ECGI-ExtIEs} } OPTIONAL,
...
}
ECGI-ExtIEs M2AP-PROTOCOL-EXTENSION ::= {
...
}
ENB-ID ::= CHOICE {
macro-eNB-ID BIT STRING (SIZE (20)),
... ,
short-Macro-eNB-ID BIT STRING (SIZE(18)),
long-Macro-eNB-ID BIT STRING (SIZE(21))
}
ENB-MBMS-Configuration-data-Item ::= SEQUENCE {
eCGI ECGI,
mbsfnSynchronisationArea MBSFN-SynchronisationArea-ID,
mbmsServiceAreaList MBMS-Service-Area-ID-List,
iE-Extensions ProtocolExtensionContainer { { ENB-MBMS-Configuration-data-Item-ExtIEs} } OPTIONAL,
...
}
ENB-MBMS-Configuration-data-Item-ExtIEs M2AP-PROTOCOL-EXTENSION ::= {
...
}
ENB-MBMS-Configuration-data-ConfigUpdate-Item ::= CHOICE {
mBMSConfigData ENB-MBMS-Configuration-data-Item,
eCGI ECGI,
...
}
ENB-MBMS-M2AP-ID ::= INTEGER (0..65535)
ENBname ::= PrintableString (SIZE (1..150,...))
EUTRANCellIdentifier ::= BIT STRING (SIZE (28))
-- F
-- G
GBR-QosInformation ::= SEQUENCE {
mBMS-E-RAB-MaximumBitrateDL BitRate,
mBMS-E-RAB-GuaranteedBitrateDL BitRate,
iE-Extensions ProtocolExtensionContainer { { GBR-QosInformation-ExtIEs} } OPTIONAL,
...
}
GBR-QosInformation-ExtIEs M2AP-PROTOCOL-EXTENSION ::= {
...
}
GlobalENB-ID ::= SEQUENCE {
pLMN-Identity PLMN-Identity,
eNB-ID ENB-ID,
iE-Extensions ProtocolExtensionContainer { {GlobalENB-ID-ExtIEs} } OPTIONAL,
...
}
GlobalENB-ID-ExtIEs M2AP-PROTOCOL-EXTENSION ::= {
...
}
GlobalMCE-ID ::= SEQUENCE {
pLMN-Identity PLMN-Identity,
mCE-ID MCE-ID,
iE-Extensions ProtocolExtensionContainer { {GlobalMCE-ID-ExtIEs} } OPTIONAL,
...
}
GlobalMCE-ID-ExtIEs M2AP-PROTOCOL-EXTENSION ::= {
...
}
GTP-TEID ::= OCTET STRING (SIZE (4))
-- H
-- I
IPAddress ::= OCTET STRING (SIZE(4..16))
-- J
-- K
-- L
LCID ::= INTEGER (0..28)
-- M
MBMS-Cell-List ::= SEQUENCE (SIZE(1.. maxnoofCellsforMBMS)) OF ECGI
MBMS-E-RAB-QoS-Parameters ::= SEQUENCE {
qCI QCI,
gbrQosInformation GBR-QosInformation OPTIONAL,
allocationAndRetentionPriority AllocationAndRetentionPriority,
iE-Extensions ProtocolExtensionContainer { { MBMS-E-RAB-QoS-Parameters-ExtIEs} } OPTIONAL,
...
}
MBMS-E-RAB-QoS-Parameters-ExtIEs M2AP-PROTOCOL-EXTENSION ::= {
...
}
MBMS-Service-associatedLogicalM2-ConnectionItem ::= SEQUENCE {
eNB-MBMS-M2AP-ID ENB-MBMS-M2AP-ID OPTIONAL,
mCE-MBMS-M2AP-ID MCE-MBMS-M2AP-ID OPTIONAL,
iE-Extensions ProtocolExtensionContainer { { MBMS-Service-associatedLogicalM2-ConnectionItemExtIEs} } OPTIONAL,
...
}
MBMS-Service-associatedLogicalM2-ConnectionItemExtIEs M2AP-PROTOCOL-EXTENSION ::= {
...
}
MBMS-Service-Area ::= OCTET STRING
MBMS-Service-Area-ID-List ::= SEQUENCE (SIZE(1..maxnoofMBMSServiceAreasPerCell)) OF MBMS-Service-Area
MBMS-Session-ID ::= OCTET STRING (SIZE (1))
MBMSsessionListPerPMCH-Item ::= SEQUENCE (SIZE(1..maxnoofSessionsPerPMCH)) OF SEQUENCE {
tmgi TMGI,
lcid LCID,
iE-Extensions ProtocolExtensionContainer { { MBMSsessionListPerPMCH-Item-ExtIEs} } OPTIONAL,
...
}
MBMSsessionListPerPMCH-Item-ExtIEs M2AP-PROTOCOL-EXTENSION ::= {
...
}
MBMSsessionsToBeSuspendedListPerPMCH-Item ::= SEQUENCE (SIZE(1..maxnoofSessionsPerPMCH)) OF SEQUENCE {
tmgi TMGI,
iE-Extensions ProtocolExtensionContainer { { MBMSsessionsToBeSuspendedListPerPMCH-Item-ExtIEs} } OPTIONAL,
...
}
MBMSsessionsToBeSuspendedListPerPMCH-Item-ExtIEs M2AP-PROTOCOL-EXTENSION ::= {
...
}
MBSFN-Area-ID ::= INTEGER (0..255)
MBSFN-SynchronisationArea-ID ::= INTEGER (0..65535)
MBSFN-Subframe-Configuration ::= SEQUENCE {
radioframeAllocationPeriod ENUMERATED {n1, n2, n4, n8, n16, n32},
radioframeAllocationOffset INTEGER (0..7),
subframeAllocation CHOICE {
oneFrame BIT STRING (SIZE (6) ),
fourFrames BIT STRING (SIZE (24) ) },
iE-Extensions ProtocolExtensionContainer { { MBSFN-Subframe-Configuration-ExtIEs} } OPTIONAL,
...
}
MBSFN-Subframe-Configuration-ExtIEs M2AP-PROTOCOL-EXTENSION ::= {
{ID id-SubframeAllocationExtended CRITICALITY reject EXTENSION SubframeAllocationExtended PRESENCE optional},
...
}
MCCH-Update-Time ::= INTEGER (0..255)
MCCHrelatedBCCH-ConfigPerMBSFNArea-Item ::= SEQUENCE {
mbsfnArea MBSFN-Area-ID,
pdcchLength ENUMERATED {s1, s2, ...},
repetitionPeriod ENUMERATED {rf32, rf64, rf128, rf256},
offset INTEGER (0..10),
modificationPeriod ENUMERATED {rf512, rf1024},
subframeAllocationInfo BIT STRING (SIZE(6)),
modulationAndCodingScheme ENUMERATED {n2, n7, n13, n19},
cellInformationList Cell-Information-List OPTIONAL,
iE-Extensions ProtocolExtensionContainer { { MCCHrelatedBCCH-ConfigPerMBSFNArea-Item-ExtIEs} } OPTIONAL,
...
}
MCCHrelatedBCCH-ConfigPerMBSFNArea-Item-ExtIEs M2AP-PROTOCOL-EXTENSION ::= {
-- Extension for Rel-14 to support MCCH repetition period values –-
{ID id-Repetition-PeriodExtended CRITICALITY reject EXTENSION Repetition-PeriodExtended PRESENCE optional}|
-- Extension for Rel-14 to support MCCH modification period values –-
{ID id-Modification-PeriodExtended CRITICALITY reject EXTENSION Modification-PeriodExtended PRESENCE optional}|
{ID id-Subcarrier-SpacingMBMS CRITICALITY reject EXTENSION Subcarrier-SpacingMBMS PRESENCE optional},
...
}
MCE-ID ::= OCTET STRING (SIZE(2))
MCE-MBMS-M2AP-ID ::= INTEGER (0.. 16777215)
MCEname ::= PrintableString (SIZE (1..150,...))
MCH-Scheduling-Period ::= ENUMERATED {rf8, rf16, rf32, rf64, rf128, rf256, rf512, rf1024}
MCH-Scheduling-PeriodExtended ::= ENUMERATED {rf4, ...}
MCH-Scheduling-PeriodExtended2 ::= ENUMERATED {rf1, rf2, ...}
Modulation-Coding-Scheme2 ::= INTEGER (0..27)
Modification-PeriodExtended ::= ENUMERATED {rf1, rf2, rf4, rf8, rf16, rf32, rf64, rf128, rf256, ...}
-- N
-- O
-- P
PLMN-Identity ::= OCTET STRING (SIZE(3))
PMCH-Configuration ::= SEQUENCE {
allocatedSubframesEnd AllocatedSubframesEnd,
dataMCS INTEGER (0..28),
mchSchedulingPeriod MCH-Scheduling-Period,
iE-Extensions ProtocolExtensionContainer { {PMCH-Configuration-ExtIEs} } OPTIONAL,
...
}
PMCH-Configuration-ExtIEs M2AP-PROTOCOL-EXTENSION ::= {
-- Extension for Rel-12 to support 256QAM for MTCH –
{ID id-Modulation-Coding-Scheme2 CRITICALITY reject EXTENSION Modulation-Coding-Scheme2 PRESENCE optional}|
-- Extension for Rel-12 to support shorter MCH scheduling period –
{ID id-MCH-Scheduling-PeriodExtended CRITICALITY reject EXTENSION MCH-Scheduling-PeriodExtended PRESENCE optional}|
-- Extension for Rel-14 to support shorter MCH scheduling period values –
{ID id-MCH-Scheduling-PeriodExtended2 CRITICALITY reject EXTENSION MCH-Scheduling-PeriodExtended2 PRESENCE optional},
...
}
Common-Subframe-Allocation-Period ::= ENUMERATED {rf4, rf8, rf16, rf32, rf64, rf128, rf256}
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)
-- Q
QCI ::= INTEGER (0..255)
-- R
Repetition-PeriodExtended ::= ENUMERATED {rf1, rf2, rf4, rf8, rf16, ...}
-- S
SC-PTM-Information ::= SEQUENCE {
mbmsCellList MBMS-Cell-List,
mbms-E-RAB-QoS-Parameters MBMS-E-RAB-QoS-Parameters,
iE-Extensions ProtocolExtensionContainer { {SC-PTM-Information-ExtIEs} } OPTIONAL,
...
}
SC-PTM-Information-ExtIEs M2AP-PROTOCOL-EXTENSION ::= {
...
}
SFN ::= INTEGER (0..1023)
Subcarrier-SpacingMBMS ::= ENUMERATED {khz-7dot5, khz-1dot25, ...}
SubframeAllocationExtended ::= CHOICE {
oneFrameExtension BIT STRING (SIZE(2)),
fourFrameExtension BIT STRING (SIZE(8)),
choice-extension ProtocolIE-Single-Container { { SubframeAllocationExtended-ExtIEs} },
...
}
SubframeAllocationExtended-ExtIEs M2AP-PROTOCOL-IES ::= { ...
}
-- 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 M2AP-PROTOCOL-EXTENSION ::= {
...
}
TNL-Information ::= SEQUENCE {
iPMCAddress IPAddress,
iPSourceAddress IPAddress,
gTP-TEID GTP-TEID,
iE-Extensions ProtocolExtensionContainer { {TNL-Information-ExtIEs} } OPTIONAL,
...
}
TNL-Information-ExtIEs M2AP-PROTOCOL-EXTENSION ::= {
...
}
TypeOfError ::= ENUMERATED {
not-understood,
missing,
...
}
-- U
-- V
-- W
-- X
-- Y
-- Z
END
-- **************************************************************
--
-- Common definitions
--
-- **************************************************************
M2AP-CommonDataTypes {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) m2ap (4) version1 (1) m2ap-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
-- **************************************************************
--
-- Constant definitions
--
-- **************************************************************
M2AP-Constants {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) m2ap (4) version1 (1) m2ap-Constants (4) }
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
IMPORTS
ProcedureCode,
ProtocolIE-ID
FROM M2AP-CommonDataTypes;
-- **************************************************************
--
-- Elementary Procedures
--
-- **************************************************************
id-sessionStart ProcedureCode ::= 0
id-sessionStop ProcedureCode ::= 1
id-mbmsSchedulingInformation ProcedureCode ::= 2
id-errorIndication ProcedureCode ::= 3
id-reset ProcedureCode ::= 4
id-m2Setup ProcedureCode ::= 5
id-eNBConfigurationUpdate ProcedureCode ::= 6
id-mCEConfigurationUpdate ProcedureCode ::= 7
id-privateMessage ProcedureCode ::= 8
id-sessionUpdate ProcedureCode ::= 9
id-mbmsServiceCounting ProcedureCode ::= 10
id-mbmsServiceCountingResultsReport ProcedureCode ::= 11
id-mbmsOverloadNotification ProcedureCode ::= 12
-- **************************************************************
--
-- Lists
--
-- **************************************************************
maxnoofMBSFNareas INTEGER ::= 256
maxnoofMBSFN-Allocations INTEGER ::= 8
maxnoofPMCHsperMBSFNarea INTEGER ::= 15
maxnoofCells INTEGER ::= 256
maxnoofMBMSServiceAreasPerCell INTEGER ::= 256
maxnoofSessionsPerPMCH INTEGER ::= 29
maxnooferrors INTEGER ::= 256
maxNrOfIndividualM2ConnectionsToReset INTEGER ::= 256
maxnoofCountingService INTEGER ::= 16
maxnoofCellsforMBMS INTEGER ::= 4096
-- **************************************************************
--
-- Ies
--
-- **************************************************************
id-MCE-MBMS-M2AP-ID ProtocolIE-ID ::= 0
id-ENB-MBMS-M2AP-ID ProtocolIE-ID ::= 1
id-TMGI ProtocolIE-ID ::= 2
id-MBMS-Session-ID ProtocolIE-ID ::= 3
id-MBMS-Service-Area ProtocolIE-ID ::= 6
id-TNL-Information ProtocolIE-ID ::= 7
id-CriticalityDiagnostics ProtocolIE-ID ::= 8
id-Cause ProtocolIE-ID ::= 9
id-MBSFN-Area-Configuration-List ProtocolIE-ID ::= 10
id-PMCH-Configuration-List ProtocolIE-ID ::= 11
id-PMCH-Configuration-Item ProtocolIE-ID ::= 12
id-GlobalENB-ID ProtocolIE-ID ::= 13
id-ENBname ProtocolIE-ID ::= 14
id-ENB-MBMS-Configuration-data-List ProtocolIE-ID ::= 15
id-ENB-MBMS-Configuration-data-Item ProtocolIE-ID ::= 16
id-GlobalMCE-ID ProtocolIE-ID ::= 17
id-MCEname ProtocolIE-ID ::= 18
id-MCCHrelatedBCCH-ConfigPerMBSFNArea ProtocolIE-ID ::= 19
id-MCCHrelatedBCCH-ConfigPerMBSFNArea-Item ProtocolIE-ID ::= 20
id-TimeToWait ProtocolIE-ID ::= 21
id-MBSFN-Subframe-Configuration-List ProtocolIE-ID ::= 22
id-MBSFN-Subframe-Configuration-Item ProtocolIE-ID ::= 23
id-Common-Subframe-Allocation-Period ProtocolIE-ID ::= 24
id-MCCH-Update-Time ProtocolIE-ID ::= 25
id-ENB-MBMS-Configuration-data-List-ConfigUpdate ProtocolIE-ID ::= 26
id-ENB-MBMS-Configuration-data-ConfigUpdate-Item ProtocolIE-ID ::= 27
id-MBMS-Service-associatedLogicalM2-ConnectionItem ProtocolIE-ID ::= 28
id-MBSFN-Area-ID ProtocolIE-ID ::= 29
id-ResetType ProtocolIE-ID ::= 30
id-MBMS-Service-associatedLogicalM2-ConnectionListResAck ProtocolIE-ID ::= 31
id-MBMS-Counting-Request-Session ProtocolIE-ID ::= 32
id-MBMS-Counting-Request-Session-Item ProtocolIE-ID ::= 33
id-MBMS-Counting-Result-List ProtocolIE-ID ::= 34
id-MBMS-Counting-Result-Item ProtocolIE-ID ::= 35
id-Modulation-Coding-Scheme2 ProtocolIE-ID ::= 36
id-MCH-Scheduling-PeriodExtended ProtocolIE-ID ::= 37
id-Alternative-TNL-Information ProtocolIE-ID ::= 38
id-Overload-Status-Per-PMCH-List ProtocolIE-ID ::= 39
id-PMCH-Overload-Status ProtocolIE-ID ::= 41
id-Active-MBMS-Session-List ProtocolIE-ID ::= 42
id-MBMS-Suspension-Notification-List ProtocolIE-ID ::= 43
id-MBMS-Suspension-Notification-Item ProtocolIE-ID ::= 44
id-SC-PTM-Information ProtocolIE-ID ::= 45
id-Modification-PeriodExtended ProtocolIE-ID ::= 46
id-Repetition-PeriodExtended ProtocolIE-ID ::= 47
id-MCH-Scheduling-PeriodExtended2 ProtocolIE-ID ::= 48
id-Subcarrier-SpacingMBMS ProtocolIE-ID ::= 49
id-SubframeAllocationExtended ProtocolIE-ID ::= 50
END
-- **************************************************************
--
-- Container definitions
--
-- **************************************************************
M2AP-Containers {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) m2ap (4) version1 (1) m2ap-Containers (5) }
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
-- **************************************************************
--
-- IE parameter types from other modules.
--
-- **************************************************************
IMPORTS
maxPrivateIEs,
maxProtocolExtensions,
maxProtocolIEs,
Criticality,
Presence,
PrivateIE-ID,
ProtocolIE-ID
FROM M2AP-CommonDataTypes;
-- **************************************************************
--
-- Class Definition for Protocol Ies
--
-- **************************************************************
M2AP-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
--
-- **************************************************************
M2AP-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
--
-- **************************************************************
M2AP-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
--
-- **************************************************************
M2AP-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 {M2AP-PROTOCOL-IES : IesSetParam} ::=
SEQUENCE (SIZE (0..maxProtocolIEs)) OF
ProtocolIE-Field {{IesSetParam}}
ProtocolIE-Single-Container {M2AP-PROTOCOL-IES : IesSetParam} ::=
ProtocolIE-Field {{IesSetParam}}
ProtocolIE-Field {M2AP-PROTOCOL-IES : IesSetParam} ::= SEQUENCE {
id M2AP-PROTOCOL-IES.&id ({IesSetParam}),
criticality M2AP-PROTOCOL-IES.&criticality ({IesSetParam}{@id}),
value M2AP-PROTOCOL-IES.&Value ({IesSetParam}{@id})
}
-- **************************************************************
--
-- Container for Protocol IE Pairs
--
-- **************************************************************
ProtocolIE-ContainerPair {M2AP-PROTOCOL-IES-PAIR : IesSetParam} ::=
SEQUENCE (SIZE (0..maxProtocolIEs)) OF
ProtocolIE-FieldPair {{IesSetParam}}
ProtocolIE-FieldPair {M2AP-PROTOCOL-IES-PAIR : IesSetParam} ::= SEQUENCE {
id M2AP-PROTOCOL-IES-PAIR.&id ({IesSetParam}),
firstCriticality M2AP-PROTOCOL-IES-PAIR.&firstCriticality ({IesSetParam}{@id}),
firstValue M2AP-PROTOCOL-IES-PAIR.&FirstValue ({IesSetParam}{@id}),
secondCriticality M2AP-PROTOCOL-IES-PAIR.&secondCriticality ({IesSetParam}{@id}),
secondValue M2AP-PROTOCOL-IES-PAIR.&SecondValue ({IesSetParam}{@id})
}
-- **************************************************************
--
-- Container Lists for Protocol IE Containers
--
-- **************************************************************
ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, M2AP-PROTOCOL-IES : IesSetParam} ::=
SEQUENCE (SIZE (lowerBound..upperBound)) OF
ProtocolIE-Container {{IesSetParam}}
ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, M2AP-PROTOCOL-IES-PAIR : IesSetParam} ::=
SEQUENCE (SIZE (lowerBound..upperBound)) OF
ProtocolIE-ContainerPair {{IesSetParam}}
-- **************************************************************
--
-- Container for Protocol Extensions
--
-- **************************************************************
ProtocolExtensionContainer {M2AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::=
SEQUENCE (SIZE (1..maxProtocolExtensions)) OF
ProtocolExtensionField {{ExtensionSetParam}}
ProtocolExtensionField {M2AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE {
id M2AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}),
criticality M2AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}),
extensionValue M2AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id})
}
-- **************************************************************
--
-- Container for Private Ies
--
-- **************************************************************
PrivateIE-Container {M2AP-PRIVATE-IES : IesSetParam} ::=
SEQUENCE (SIZE (1..maxPrivateIEs)) OF
PrivateIE-Field {{IesSetParam}}
PrivateIE-Field {M2AP-PRIVATE-IES : IesSetParam} ::= SEQUENCE {
id M2AP-PRIVATE-IES.&id ({IesSetParam}),
criticality M2AP-PRIVATE-IES.&criticality ({IesSetParam}{@id}),
value M2AP-PRIVATE-IES.&Value ({IesSetParam}{@id})
}
END
import re, os, sys, string
import datetime
import getopt
import getpass
version = "1.0.2"
lines = ""
iesDefs = {}
ieofielist = {}
outdir = './'
filenames = []
verbosity = 0
prefix = ""
FAIL = '\033[91m'
WARN = '\033[93m'
ENDC = '\033[0m'
fileprefix = ""
fileprefix_first_upper = ""
def printFail(string):
sys.stderr.write(FAIL + string + ENDC + "\n")
def printWarning(string):
print WARN + string + ENDC
def printDebug(string):
if verbosity > 0:
print string
def outputHeaderToFile(f, filename):
now = datetime.datetime.now()
f.write("""/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
""")
f.write("/*******************************************************************************\n")
f.write(" * This file had been created by asn1tostruct.py script v%s\n" % (version))
f.write(" * Please do not modify this file but regenerate it via script.\n")
f.write(" * Created on: %s by %s\n * from %s\n" % (str(now), getpass.getuser(), filenames))
f.write(" ******************************************************************************/\n")
def lowerFirstCamelWord(word):
""" puts the first word in a CamelCase Word in lowercase.
I.e. CustomerID becomes customerID, XMLInfoTest becomes xmlInfoTest
"""
newstr = ''
swapped = word.swapcase()
idx = 0
# if it's all-caps, return an all-lowered version
lowered = word.lower()
if swapped == lowered:
return lowered
for c in swapped:
if c in string.lowercase:
newstr += c
idx += 1
else:
break
if idx < 2:
newstr += word[idx:]
else:
newstr = newstr[:-1]+ word[idx-1:]
return newstr
def usage():
print "Python parser for asn1 v%s" % (version)
print "Usage: python asn1tostruct.py [options]"
print "Available options:"
print "-d Enable script debug"
print "-f [file] Input file to parse"
print "-o [dir] Output files to given directory"
print "-h Print this help and return"
try:
opts, args = getopt.getopt(sys.argv[1:], "df:ho:", ["debug", "file", "help", "outdir"])
except getopt.GetoptError as err:
# print help information and exit:
usage()
sys.exit(2)
for o, a in opts:
if o in ("-f", "--file"):
filenames.append(a)
if o in ("-d", "--debug"):
verbosity = 1
if o in ("-o", "--outdir"):
outdir = a
if outdir.rfind('/') != len(outdir):
outdir += '/'
if o in ("-h", "--help"):
usage()
sys.exit(2)
for filename in filenames:
file = open(filename, 'r')
for line in file:
# Removing any comment
if line.find('--') >= 0:
line = line[:line.find('--')]
# Removing any carriage return
lines += re.sub('\r', '', line)
for m in re.findall(r'([a-zA-Z0-9-]+)\s*::=\s+SEQUENCE\s+\(\s*SIZE\s*\(\s*\d+\s*\.\.\s*[0-9a-zA-Z-]+\s*\)\s*\)\s*OF\s+[a-zA-Z-]+\s*\{\s*\{\s*([0-9a-zA-Z-]+)\s*\}\s*\}', lines, re.MULTILINE):
ieofielist[m[0]] = m[1]
for m in re.findall(r'([a-zA-Z0-9-]+)\s*::=\s+E-RAB-IE-ContainerList\s*\{\s*\{\s*([a-zA-Z0-9-]+)\s*\}\s*\}', lines, re.MULTILINE):
ieofielist[m[0]] = m[1]
for i in re.findall(r'([a-zA-Z0-9-]+)\s+([A-Z0-9-]+)\s*::=\s*\{\s+([\,\|\{\}\t\n\.{3}\ \-a-zA-Z0-9]+)\s+}\n', lines, re.MULTILINE):
ies = []
maxLength = 0
# TODO: handle extensions
if i[1].find('EXTENSION') >= 0:
continue
if fileprefix == "":
fileprefix = i[1][:i[1].find('-')].lower()
for j in re.findall(r'\s*\{\s*([a-zA-Z0-9-\ \t]+)\s*\}\s*[\|,]*', i[2], re.MULTILINE):
for k in re.findall(r'ID\s*([a-zA-Z0-9\-]+)\s*CRITICALITY\s*([a-zA-Z0-9\-]+)\s+[A-Z]+\s+([a-zA-Z0-9\-]+)\s*PRESENCE\s*([a-zA-Z0-9\-]+)', j, re.MULTILINE):
printDebug("Got new ie for message " + i[0] + ": " + str(k))
if len(k[2]) > maxLength:
maxLength = len(k[2])
ies.append(k)
if len(ies) > 0:
iesDefs[i[0]] = { "length": maxLength, "ies": ies }
else:
printWarning("Didn't find any information element for message: " + i[0])
if len(iesDefs) == 0:
printFail("No Information Element parsed, exiting")
sys.exit(0)
fileprefix_first_upper = fileprefix[0].upper() + fileprefix[1:]
f = open(outdir + fileprefix + '_ies_defs.h', 'w')
outputHeaderToFile(f, filename)
f.write("#include \"%s_common.h\"\n\n" % (fileprefix))
f.write("#ifndef %s_IES_DEFS_H_\n#define %s_IES_DEFS_H_\n\n" % (fileprefix.upper(), fileprefix.upper()))
f.write("/* Define the version of script used to generate this file */\n")
f.write("#define %s_SCRIPT_VERSION (%s)\n\n" % (fileprefix.upper(), re.sub('\.', '', version)))
for key in iesDefs:
if key not in ieofielist.values():
continue
for (i, j) in ieofielist.items():
if j == key:
break
f.write("typedef struct %sIEs_s {\n" % (re.sub('-', '_', i)))
f.write(" A_SEQUENCE_OF(struct %s_s) %s;\n" % (re.sub('IEs', '', re.sub('-', '_', ieofielist[i])), lowerFirstCamelWord(re.sub('IEs', '', re.sub('-', '_', ieofielist[i])))))
f.write("} %sIEs_t;\n\n" % (re.sub('-', '_', i)))
for key in iesDefs:
keyupperunderscore = re.sub('-', '_', key.upper())
keylowerunderscore = re.sub('-', '_', key.lower())
shift = 0
if len(iesDefs[key]["ies"]) == 0:
continue
# Presence mask
for ie in iesDefs[key]["ies"]:
ieupperunderscore = re.sub('-', '_', re.sub('id-', '', ie[0])).upper()
if ie[3] == "optional" or ie[3] == "conditional":
f.write("#define {0:<{pad}} {1}\n".format("%s_%s_PRESENT" % (keyupperunderscore, ieupperunderscore), "(1 << %d)" % shift,
pad=iesDefs[key]["length"] + len(keyupperunderscore) + 9))
shift += 1
if (shift > 0):
f.write("\n")
f.write("typedef struct %s_s {\n" % (re.sub('-', '_', key)))
if (shift > 0):
f.write(" {0:<{pad}} {1};\n".format("uint16_t", "presenceMask", pad=iesDefs[key]["length"] + 2))
for ie in iesDefs[key]["ies"]:
ieunderscore = re.sub('-', '_', ie[2])
iename = re.sub('id-', '', ie[0])
ienameunderscore = lowerFirstCamelWord(re.sub('-', '_', iename))
if ie[2] in ieofielist:
f.write(" %sIEs_t %s;" % (re.sub('-', '_', ie[2]), ienameunderscore))
else:
f.write(" {0:<{pad}} {1};".format("%s_t" % ieunderscore, ienameunderscore, pad=iesDefs[key]["length"] + 2))
if ie[3] == "optional":
f.write(" ///< Optional field")
elif ie[3] == "conditional":
f.write(" ///< Conditional field")
f.write("\n")
f.write("} %s_t;\n\n" % (re.sub('-', '_', key)))
f.write("typedef struct %s_message_s {\n" % (fileprefix))
f.write(" %s_ProcedureCode_t procedureCode;\n" % (fileprefix_first_upper))
f.write(" %s_Criticality_t criticality;\n" % (fileprefix_first_upper))
f.write(" uint8_t direction;\n")
f.write(" union {\n")
messageList = iesDefs.keys()
messageList.sort()
for message in messageList:
if message in ieofielist.values():
continue
if len(iesDefs[message]["ies"]) == 0:
continue
f.write(" %s_t %s;\n" % (re.sub('-', '_', message), lowerFirstCamelWord(re.sub('-', '_', message))))
f.write(" } msg;\n")
f.write("} %s_message;\n\n" % (fileprefix))
for key in iesDefs:
if key in ieofielist.values():
continue
structName = re.sub('ies', '', key)
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', re.sub('-IEs', '', key)))
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
keylowerunderscore = re.sub('-', '_', key.lower())
firstlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
f.write("/** \\brief Decode function for %s ies.\n" % (key))
if len(iesDefs[key]["ies"]) != 0:
f.write(" * \\param %s Pointer to ASN1 structure in which data will be stored\n" % (lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" * \\param any_p Pointer to the ANY value to decode.\n")
f.write(" **/\n")
f.write("int %s_decode_%s(\n" % (fileprefix, keylowerunderscore))
if len(iesDefs[key]["ies"]) != 0:
f.write(" %s_t *%s,\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" ANY_t *any_p);\n\n")
if len(iesDefs[key]["ies"]) == 0:
continue
f.write("/** \\brief Encode function for %s ies.\n" % (key))
f.write(" * \\param %s Pointer to the ASN1 structure.\n" % (firstlower))
f.write(" * \\param %s Pointer to the IES structure.\n" % (lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" **/\n")
f.write("int %s_encode_%s(\n" % (fileprefix, re.sub('-', '_', structName.lower())))
f.write(" %s_t *%s,\n" % (asn1cStruct, firstlower))
f.write(" %s_t *%s);\n\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
for key in iesDefs:
if key not in ieofielist.values():
continue
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', key))
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
firstlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
f.write("/** \\brief Encode function for %s ies.\n" % (key))
f.write(" * \\param %s Pointer to the ASN1 structure.\n" % (firstlower))
f.write(" * \\param %s Pointer to the IES structure.\n" % (lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" **/\n")
f.write("int %s_encode_%s(\n" % (fileprefix, firstlower.lower()))
f.write(" %s_t *%s,\n" % (asn1cStruct, firstlower))
f.write(" %sIEs_t *%sIEs);\n\n" % (asn1cStruct, firstlower))
f.write("/** \\brief Decode function for %s ies.\n" % (key))
f.write(" * \\param any_p Pointer to the ANY value to decode.\n")
f.write(" * \\param callback Callback function called when any_p is successfully decoded.\n")
f.write(" **/\n")
f.write("int %s_decode_%s(\n" % (fileprefix, firstlower.lower()))
f.write(" %sIEs_t *%sIEs,\n" % (asn1cStruct, firstlower))
f.write(" %s_t *%s);\n\n" % (asn1cStruct, lowerFirstCamelWord(asn1cStruct)))
for key in iesDefs:
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', key))
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
firstlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
if key in ieofielist.values():
f.write("/** \\brief Display %s encapsulated IE using XER encoding.\n" % (asn1cStruct))
f.write(" * \\param %s Pointer to the IES structure.\n" % (lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" * \\param file File descriptor to write output.\n")
f.write(" **/\n")
f.write("asn_enc_rval_t %s_xer_print_%s(\n" % (fileprefix, re.sub('item', 'list', firstlower.lower())))
f.write(" asn_app_consume_bytes_f *cb,\n")
f.write(" void *app_key,\n")
f.write(" %sIEs_t *%sIEs);\n\n" % (re.sub('item', 'list', asn1cStruct), firstlower))
else:
f.write("/** \\brief Display %s message using XER encoding.\n" % (asn1cStruct))
f.write(" * \\param message_p Pointer to root message.\n")
f.write(" * \\param file File descriptor to write output.\n")
f.write(" **/\n")
f.write("asn_enc_rval_t %s_xer_print_%s(\n" % (fileprefix, firstlower.lower()))
f.write(" asn_app_consume_bytes_f *cb,\n")
f.write(" void *app_key,\n")
f.write(" %s_message *message_p);\n\n" % (fileprefix))
f.write("int %s_xer__print2sp(const void *buffer, size_t size, void *app_key);\n\n" % (fileprefix.lower()))
f.write("int %s_xer__print2fp(const void *buffer, size_t size, void *app_key);\n\n" % (fileprefix.lower()))
f.write("extern size_t %s_string_total_size;\n\n" % (fileprefix.lower()))
f.write("#endif /* %s_IES_DEFS_H_ */\n\n" % (fileprefix.upper()))
#Generate Decode functions
f = open(outdir + fileprefix + '_decoder.c', 'w')
outputHeaderToFile(f, filename)
f.write("#include \"%s_common.h\"\n#include \"%s_ies_defs.h\"\n\n" % (fileprefix, fileprefix))
for key in iesDefs:
if key in ieofielist.values():
continue
structName = re.sub('ies', '', key)
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', key))
if asn1cStruct.rfind('_') == len(asn1cStruct) - 1:
asn1cStruct = asn1cStruct[:-1]
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
ielistname = re.sub('UE', 'ue', asn1cStruct)
ielistnamefirstlower = ielistname[:1].lower() + ielistname[1:]
asn1cStructfirstlower = asn1cStruct[:1].lower() + asn1cStruct[1:]
keyName = re.sub('-', '_', key)
keyupperunderscore = keyName.upper()
firstlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
iesaccess = ""
if key not in ieofielist.values():
iesaccess = "%s_ies." % (firstlower)
f.write("int %s_decode_%s(\n" % (fileprefix, re.sub('-', '_', structName.lower())))
if len(iesDefs[key]["ies"]) != 0:
f.write(" %s_t *%s,\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" ANY_t *any_p) {\n\n")
f.write(" %s_t %s;\n %s_t *%s_p = &%s;\n" % (asn1cStruct, asn1cStructfirstlower, asn1cStruct, asn1cStructfirstlower, asn1cStructfirstlower))
f.write(" int i, decoded = 0;\n")
if len(iesDefs[key]["ies"]) != 0:
f.write(" int tempDecoded = 0;\n")
f.write(" assert(any_p != NULL);\n")
if len(iesDefs[key]["ies"]) != 0:
f.write(" assert(%s != NULL);\n\n" % (lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" %s_DEBUG(\"Decoding message %s (%%s:%%d)\\n\", __FILE__, __LINE__);\n\n" % (fileprefix.upper(), re.sub('-', '_', keyName)))
f.write(" ANY_to_type_aper(any_p, &asn_DEF_%s, (void**)&%s_p);\n\n" % (asn1cStruct, asn1cStructfirstlower))
f.write(" for (i = 0; i < %s_p->%slist.count; i++) {\n" % (asn1cStructfirstlower, iesaccess))
f.write(" %s_IE_t *ie_p;\n" % (fileprefix[0].upper() + fileprefix[1:]))
f.write(" ie_p = %s_p->%slist.array[i];\n" % (asn1cStructfirstlower, iesaccess))
f.write(" switch(ie_p->id) {\n")
for ie in iesDefs[key]["ies"]:
iename = re.sub('id-', '', ie[0])
ienameunderscore = lowerFirstCamelWord(re.sub('-', '_', iename))
ienameunderscorefirstlower = lowerFirstCamelWord(ienameunderscore)
ietypesubst = re.sub('-', '', ie[2])
ietypeunderscore = re.sub('-', '_', ie[2])
ieupperunderscore = re.sub('-', '_', re.sub('id-', '', ie[0])).upper()
if ie[3] == "optional":
f.write(" /* Optional field */\n")
elif ie[3] == "conditional":
f.write(" /* Conditional field */\n")
f.write(" case %s_ProtocolIE_ID_%s:\n" % (fileprefix_first_upper, re.sub('-', '_', ie[0])))
f.write(" {\n")
f.write(" %s_t *%s_p = NULL;\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst)))
if ie[3] != "mandatory":
f.write(" %s->presenceMask |= %s_%s_PRESENT;\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), keyupperunderscore, ieupperunderscore))
f.write(" tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_%s, (void**)&%s_p);\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst)))
f.write(" if (tempDecoded < 0 || %s_p == NULL) {\n" % (lowerFirstCamelWord(ietypesubst)))
f.write(" %s_ERROR(\"Decoding of IE %s failed\\n\");\n" % (fileprefix.upper(), ienameunderscore))
f.write(" if (%s_p)\n" % (lowerFirstCamelWord(ietypesubst)))
f.write(" ASN_STRUCT_FREE(asn_DEF_%s, %s_p);\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst)))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" decoded += tempDecoded;\n")
f.write(" if (asn1_xer_print)\n")
f.write(" xer_fprint(stdout, &asn_DEF_%s, %s_p);\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst)))
if ie[2] in ieofielist.keys():
f.write(" if (%s_decode_%s(&%s->%s, %s_p) < 0) {\n" % (fileprefix, ietypeunderscore.lower(), lowerFirstCamelWord(re.sub('-', '_', key)), ienameunderscore, lowerFirstCamelWord(ietypesubst)))
f.write(" %s_ERROR(\"Decoding of encapsulated IE %s failed\\n\");\n" % (fileprefix.upper(), lowerFirstCamelWord(ietypesubst)))
f.write(" ASN_STRUCT_FREE(asn_DEF_%s, %s_p);\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst)))
f.write(" }\n")
else:
f.write(" memcpy(&%s->%s, %s_p, sizeof(%s_t));\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), ienameunderscore, lowerFirstCamelWord(ietypesubst), ietypeunderscore))
#f.write(" ASN_STRUCT_FREE(asn_DEF_%s, %s_p);\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst)))
f.write(" } break;\n")
f.write(" default:\n")
f.write(" %s_ERROR(\"Unknown protocol IE id (%%d) for message %s\\n\", (int)ie_p->id);\n" % (fileprefix.upper(), re.sub('-', '_', structName.lower())))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" }\n")
f.write(" return decoded;\n")
f.write("}\n\n")
for key in iesDefs:
if key not in ieofielist.values():
continue
keyname = re.sub('IEs', '', re.sub('Item', 'List', key))
f.write("int %s_decode_%s(\n" % (fileprefix, re.sub('-', '_', keyname).lower()))
f.write(" %sIEs_t *%sIEs,\n" % (re.sub('-', '_', keyname), lowerFirstCamelWord(re.sub('-', '_', keyname))))
f.write(" %s_t *%s) {\n\n" % (re.sub('-', '_', keyname), lowerFirstCamelWord(re.sub('-', '_', keyname))))
f.write(" int i, decoded = 0;\n")
f.write(" int tempDecoded = 0;\n\n")
f.write(" assert(%s != NULL);\n" % (lowerFirstCamelWord(re.sub('-', '_', keyname))));
f.write(" assert(%sIEs != NULL);\n\n" % (lowerFirstCamelWord(re.sub('-', '_', keyname))));
f.write(" for (i = 0; i < %s->list.count; i++) {\n" % (lowerFirstCamelWord(re.sub('-', '_', keyname))))
f.write(" %s_IE_t *ie_p = %s->list.array[i];\n" % (fileprefix[0].upper() + fileprefix[1:], lowerFirstCamelWord(re.sub('-', '_', keyname))))
f.write(" switch (ie_p->id) {\n")
for ie in iesDefs[key]["ies"]:
iename = re.sub('id-', '', ie[0])
ienameunderscore = lowerFirstCamelWord(re.sub('-', '_', iename))
f.write(" case %s_ProtocolIE_ID_%s:\n" % (fileprefix_first_upper, re.sub('-', '_', ie[0])))
f.write(" {\n")
f.write(" %s_t *%s_p = NULL;\n" % (re.sub('-', '_', ie[2]), lowerFirstCamelWord(re.sub('-', '', ie[2]))))
f.write(" tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_%s, (void**)&%s_p);\n" % (re.sub('-', '_', ie[2]), lowerFirstCamelWord(re.sub('-', '', ie[2]))))
f.write(" if (tempDecoded < 0 || %s_p == NULL) {\n" % (lowerFirstCamelWord(re.sub('-', '', ie[2]))))
f.write(" %s_ERROR(\"Decoding of IE %s for message %s failed\\n\");\n" % (fileprefix.upper(), ienameunderscore, re.sub('-', '_', keyname)))
f.write(" if (%s_p)\n" % (lowerFirstCamelWord(re.sub('-', '', ie[2]))))
#f.write(" free(%s_p);\n" % (lowerFirstCamelWord(re.sub('-', '', ie[2]))))
f.write(" ASN_STRUCT_FREE(asn_DEF_%s, %s_p);\n" % (re.sub('-', '_', ie[2]), lowerFirstCamelWord(re.sub('-', '', ie[2]))))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" decoded += tempDecoded;\n")
f.write(" if (asn1_xer_print)\n")
f.write(" xer_fprint(stdout, &asn_DEF_%s, %s_p);\n" % (re.sub('-', '_', ie[2]), lowerFirstCamelWord(re.sub('-', '', ie[2]))))
f.write(" ASN_SEQUENCE_ADD(&%sIEs->%s, %s_p);\n" % (lowerFirstCamelWord(re.sub('-', '_', keyname)),
re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key))), lowerFirstCamelWord(re.sub('-', '', ie[2]))))
f.write(" } break;\n")
f.write(" default:\n")
f.write(" %s_ERROR(\"Unknown protocol IE id (%%d) for message %s\\n\", (int)ie_p->id);\n" % (fileprefix.upper(), re.sub('-', '_', structName.lower())))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" }\n")
f.write(" return decoded;\n")
f.write("}\n\n")
#Generate IES Encode functions
f = open(outdir + fileprefix + '_encoder.c', 'w')
outputHeaderToFile(f,filename)
f.write("#include \"%s_common.h\"\n" % (fileprefix))
f.write("#include \"%s_ies_defs.h\"\n\n" % (fileprefix))
for key in iesDefs:
if key in ieofielist.values():
continue
structName = re.sub('ies', '', key)
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', key))
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
if asn1cStruct.rfind('_') == len(asn1cStruct) - 1:
asn1cStruct = asn1cStruct[:-1]
asn1cStructfirstlower = asn1cStruct[:1].lower() + asn1cStruct[1:]
firstwordlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
iesaccess = ""
if key not in ieofielist.values():
iesaccess = "%s_ies." % (firstwordlower)
keyName = re.sub('-', '_', key)
keyupperunderscore = keyName.upper()
# No IE to encode...
if len(iesDefs[key]["ies"]) == 0:
continue
f.write("int %s_encode_%s(\n" % (fileprefix, re.sub('-', '_', structName.lower())))
f.write(" %s_t *%s,\n" % (asn1cStruct, firstwordlower))
f.write(" %s_t *%s) {\n\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" %s_IE_t *ie;\n\n" % (fileprefix_first_upper))
f.write(" assert(%s != NULL);\n" % (firstwordlower));
f.write(" assert(%s != NULL);\n\n" % (lowerFirstCamelWord(re.sub('-', '_', key))));
for ie in iesDefs[key]["ies"]:
iename = re.sub('-', '_', re.sub('id-', '', ie[0]))
ienameunderscore = re.sub('-', '_', iename)
ienamefirstwordlower = lowerFirstCamelWord(iename)
ieupperunderscore = re.sub('-', '_', re.sub('id-', '', ie[0])).upper()
ietypeunderscore = re.sub('-', '_', ie[2])
if ie[3] != "mandatory":
if ie[3] == "optional":
f.write(" /* Optional field */\n")
elif ie[3] == "conditional":
f.write(" /* Conditional field */\n")
f.write(" if (%s->presenceMask & %s_%s_PRESENT) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), keyupperunderscore, ieupperunderscore))
#f.write(" == %s_%s_PRESENT) {\n" % (keyupperunderscore, ieupperunderscore))
f.write(" if ((ie = %s_new_ie(%s_ProtocolIE_ID_%s,\n" % (fileprefix, fileprefix_first_upper, re.sub('-', '_', ie[0])))
f.write(" %s_Criticality_%s,\n" % (fileprefix_first_upper, ie[1]))
f.write(" &asn_DEF_%s,\n" % (ietypeunderscore))
f.write(" &%s->%s)) == NULL) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" ASN_SEQUENCE_ADD(&%s->%slist, ie);\n" % (firstwordlower, iesaccess))
f.write(" }\n\n")
else:
if ie[2] in ieofielist.keys():
f.write(" %s_t %s;\n\n" % (ietypeunderscore, ienamefirstwordlower))
f.write(" memset(&%s, 0, sizeof(%s_t));\n" % (ienamefirstwordlower, ietypeunderscore))
f.write("\n")
f.write(" if (%s_encode_%s(&%s, &%s->%s) < 0) return -1;\n" % (fileprefix, ietypeunderscore.lower(), ienamefirstwordlower, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower))
f.write(" if ((ie = %s_new_ie(%s_ProtocolIE_ID_%s,\n" % (fileprefix, fileprefix_first_upper, re.sub('-', '_', ie[0])))
f.write(" %s_Criticality_%s,\n" % (fileprefix_first_upper, ie[1]))
f.write(" &asn_DEF_%s,\n" % (ietypeunderscore))
if ie[2] in ieofielist.keys():
f.write(" &%s)) == NULL) {\n" % (ienamefirstwordlower))
else:
f.write(" &%s->%s)) == NULL) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" ASN_SEQUENCE_ADD(&%s->%slist, ie);\n\n" % (firstwordlower, iesaccess))
if ie[2] in ieofielist.keys():
f.write(" /* Free any dynamic allocation that is no more used */\n")
f.write(" ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_%s, &%s);\n\n" % (ietypeunderscore, ienamefirstwordlower))
f.write(" return 0;\n")
f.write("}\n\n")
for (key, value) in iesDefs.items():
if key not in ieofielist.values():
continue
ie = value["ies"][0]
ietypeunderscore = re.sub('-', '_', ie[2])
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', re.sub('-IEs', '', key)))
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
firstwordlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
for (i, j) in ieofielist.items():
if j == key:
break
f.write("int %s_encode_%s(\n" % (fileprefix, re.sub('-', '_', i).lower()))
f.write(" %s_t *%s,\n" % (asn1cStruct, firstwordlower))
f.write(" %sIEs_t *%sIEs) {\n\n" % (re.sub('-', '_', i), lowerFirstCamelWord(re.sub('-', '_', i))))
f.write(" int i;\n")
f.write(" %s_IE_t *ie;\n\n" % (fileprefix_first_upper))
f.write(" assert(%s != NULL);\n" % (firstwordlower));
f.write(" assert(%sIEs != NULL);\n\n" % (lowerFirstCamelWord(re.sub('-', '_', i))));
f.write(" for (i = 0; i < %sIEs->%s.count; i++) {\n" % (firstwordlower, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key)))))
f.write(" if ((ie = %s_new_ie(%s_ProtocolIE_ID_%s,\n" % (fileprefix, fileprefix_first_upper, re.sub('-', '_', ie[0])))
f.write(" %s_Criticality_%s,\n" % (fileprefix_first_upper, ie[1]))
f.write(" &asn_DEF_%s,\n" % (ietypeunderscore))
f.write(" %sIEs->%s.array[i])) == NULL) {\n" % (firstwordlower, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key)))))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" ASN_SEQUENCE_ADD(&%s->list, ie);\n" % (firstwordlower))
f.write(" }\n")
f.write(" return 0;\n")
f.write("}\n\n")
#Generate xer print functions
f = open(outdir + fileprefix + '_xer_print.c', 'w')
outputHeaderToFile(f, filename)
f.write("#include <stdlib.h>\n")
f.write("#include <stdio.h>\n\n")
f.write("#include <asn_application.h>\n#include <asn_internal.h>\n\n")
f.write("#include \"%s_common.h\"\n#include \"%s_ies_defs.h\"\n\n" % (fileprefix, fileprefix))
f.write("size_t %s_string_total_size = 0;\n\n" % (fileprefix.lower()))
f.write("""int
%s_xer__print2fp(const void *buffer, size_t size, void *app_key) {
FILE *stream = (FILE *)app_key;
if(fwrite(buffer, 1, size, stream) != size)
return -1;
return 0;
}
""" % (fileprefix.lower()))
f.write("""int %s_xer__print2sp(const void *buffer, size_t size, void *app_key) {
char *string = (char *)app_key;
/* Copy buffer to the formatted string */
memcpy(&string[%s_string_total_size], buffer, size);
%s_string_total_size += size;
return 0;
}
""" % (fileprefix.lower(), fileprefix.lower(), fileprefix.lower()))
f.write("""static asn_enc_rval_t
xer_encode_local(asn_TYPE_descriptor_t *td, void *sptr,
asn_app_consume_bytes_f *cb, void *app_key, int indent) {
asn_enc_rval_t er, tmper;
const char *mname;
size_t mlen;
int xcan = 2;
if(!td || !sptr) goto cb_failed;
mname = td->xml_tag;
mlen = strlen(mname);
_i_ASN_TEXT_INDENT(0, indent);
_ASN_CALLBACK3("<", 1, mname, mlen, ">", 1);
tmper = td->xer_encoder(td, sptr, indent + 1, XER_F_BASIC, cb, app_key);
if(tmper.encoded == -1) return tmper;
_ASN_CALLBACK3("</", 2, mname, mlen, ">\\n", xcan);
er.encoded = 4 + xcan + (2 * mlen) + tmper.encoded;
_ASN_ENCODED_OK(er);
cb_failed:
_ASN_ENCODE_FAILED;
}
""")
for (key, value) in iesDefs.items():
keyName = re.sub('-', '_', key)
keyupperunderscore = keyName.upper()
iesStructName = lowerFirstCamelWord(re.sub('-', '_', key))
ie = value["ies"][0]
ietypeunderscore = re.sub('-', '_', ie[2])
if key in ieofielist.values():
f.write("asn_enc_rval_t %s_xer_print_%s(\n" % (fileprefix, re.sub('ies', '', re.sub('item', 'list', re.sub('-', '_', key).lower()))))
else:
f.write("asn_enc_rval_t %s_xer_print_%s(\n" % (fileprefix, re.sub('ies', '', re.sub('-', '_', key).lower())))
#f.write(" FILE *file,\n")
f.write(" asn_app_consume_bytes_f *cb,\n")
f.write(" void *app_key,\n")
if key in ieofielist.values():
iesStructName = lowerFirstCamelWord(re.sub('Item', 'List', re.sub('-', '_', key)))
f.write(" %sIEs_t *%s) {\n\n" % (re.sub('IEs', '', re.sub('Item', 'List', re.sub('-', '_', key))), iesStructName))
f.write(" int i;\n")
f.write(" asn_enc_rval_t er;\n")
else:
f.write(" %s_message *message_p)\n{\n" % (fileprefix))
f.write(" %s_t *%s;\n" % (re.sub('-', '_', key), iesStructName))
f.write(" asn_enc_rval_t er;\n")
#f.write(" void *app_key = (void *)file;\n")
#f.write(" asn_app_consume_bytes_f *cb = %s_xer__print2fp;\n\n" % (fileprefix.lower()))
f.write(" %s = &message_p->msg.%s;\n\n" % (iesStructName, iesStructName))
if key in ieofielist.values():
# Increase indentation level
f.write(" for (i = 0; i < %s->%s.count; i++) {\n" % (iesStructName, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key)))))
#f.write(" xer_fprint(file, &asn_DEF_%s, %s->%s.array[i]);\n" % (ietypeunderscore, iesStructName, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key)))))
f.write(" er = xer_encode(&asn_DEF_%s, %s->%s.array[i], XER_F_BASIC, cb, app_key);\n" % (ietypeunderscore, iesStructName, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key)))))
f.write(" }\n")
else:
f.write(" cb(\"<%s-PDU>\\n\", %d, app_key);\n" % (key, len("<%s-PDU>\n" % (key))))
f.write(" xer_encode_local(&asn_DEF_%s_Criticality, &message_p->criticality, cb, app_key, 1);\n" % fileprefix_first_upper)
f.write(" xer_encode_local(&asn_DEF_%s_ProcedureCode, &message_p->procedureCode, cb, app_key, 1);\n" % fileprefix_first_upper)
f.write(" cb(\" <%s>\\n\", %d, app_key);\n" % (key, len(" <%s>\n" % (key))))
for ie in iesDefs[key]["ies"]:
iename = re.sub('-', '_', re.sub('id-', '', ie[0]))
ienameunderscore = re.sub('-', '_', iename)
ienamefirstwordlower = lowerFirstCamelWord(iename)
ietypeunderscore = re.sub('-', '_', ie[2])
ieupperunderscore = re.sub('-', '_', re.sub('id-', '', ie[0])).upper()
if ie[3] != "mandatory":
if ie[3] == "optional":
f.write(" /* Optional field */\n")
elif ie[3] == "conditional":
f.write(" /* Conditional field */\n")
f.write(" if (%s->presenceMask & %s_%s_PRESENT)\n " % (iesStructName, keyupperunderscore, ieupperunderscore))
# Is it an encapsulated IE ?
if ie[2] in ieofielist.keys():
f.write(" %s_xer_print_%s(cb, app_key, &%s->%s);\n" % (fileprefix, re.sub('ies', '', re.sub('-', '_', ie[2]).lower()), iesStructName, ienamefirstwordlower))
else:
f.write(" xer_encode_local(&asn_DEF_%s, &%s->%s, cb, app_key, 2);\n" % (ietypeunderscore, iesStructName, ienamefirstwordlower))
f.write(" cb(\" </%s>\\n\", %d, app_key);\n" % (key, len(" </%s>\n" % (key))))
f.write(" cb(\"</%s-PDU>\\n\", %d, app_key);\n" % (key, len("</%s-PDU>\n" % (key))))
f.write(" _ASN_ENCODED_OK(er);\n")
#if key not in ieofielist.values():
#f.write("cb_failed:\n")
#f.write(" return er;\n")
f.write("}\n\n")
-- **************************************************************
--
-- 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
-- **************************************************************
--
-- 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 optional},
...
}
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
-- **************************************************************
--
-- 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
-- **************************************************************
--
-- 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
-- **************************************************************
--
-- 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
-- **************************************************************
--
-- 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
-- M3AP-PDU-Descriptions.asn
--
-- 3GPP TS 36.444 V13.2.0 (2016-03)
-- 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
-- M3AP-PDU-Contents.asn
--
-- 3GPP TS 36.444 V13.2.0 (2016-03)
-- 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
-- M3AP-IEs.asn
--
-- 3GPP TS 36.444 V13.2.0 (2016-03)
-- 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
-- M3AP-CommonDataTypes.asn
--
-- 3GPP TS 36.444 V13.2.0 (2016-03)
-- 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
-- M3AP-Containers.asn
--
-- 3GPP TS 36.444 V13.2.0 (2016-03)
-- 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
-- M3AP-Constants.asn
--
-- 3GPP TS 36.444 V13.2.0 (2016-03)
-- 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
import re, os, sys, string
import datetime
import getopt
import getpass
version = "1.0.2"
lines = ""
iesDefs = {}
ieofielist = {}
outdir = './'
filenames = []
verbosity = 0
prefix = ""
FAIL = '\033[91m'
WARN = '\033[93m'
ENDC = '\033[0m'
fileprefix = ""
fileprefix_first_upper = ""
def printFail(string):
sys.stderr.write(FAIL + string + ENDC + "\n")
def printWarning(string):
print WARN + string + ENDC
def printDebug(string):
if verbosity > 0:
print string
def outputHeaderToFile(f, filename):
now = datetime.datetime.now()
f.write("""/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
""")
f.write("/*******************************************************************************\n")
f.write(" * This file had been created by asn1tostruct.py script v%s\n" % (version))
f.write(" * Please do not modify this file but regenerate it via script.\n")
f.write(" * Created on: %s by %s\n * from %s\n" % (str(now), getpass.getuser(), filenames))
f.write(" ******************************************************************************/\n")
def lowerFirstCamelWord(word):
""" puts the first word in a CamelCase Word in lowercase.
I.e. CustomerID becomes customerID, XMLInfoTest becomes xmlInfoTest
"""
newstr = ''
swapped = word.swapcase()
idx = 0
# if it's all-caps, return an all-lowered version
lowered = word.lower()
if swapped == lowered:
return lowered
for c in swapped:
if c in string.lowercase:
newstr += c
idx += 1
else:
break
if idx < 2:
newstr += word[idx:]
else:
newstr = newstr[:-1]+ word[idx-1:]
return newstr
def usage():
print "Python parser for asn1 v%s" % (version)
print "Usage: python asn1tostruct.py [options]"
print "Available options:"
print "-d Enable script debug"
print "-f [file] Input file to parse"
print "-o [dir] Output files to given directory"
print "-h Print this help and return"
try:
opts, args = getopt.getopt(sys.argv[1:], "df:ho:", ["debug", "file", "help", "outdir"])
except getopt.GetoptError as err:
# print help information and exit:
usage()
sys.exit(2)
for o, a in opts:
if o in ("-f", "--file"):
filenames.append(a)
if o in ("-d", "--debug"):
verbosity = 1
if o in ("-o", "--outdir"):
outdir = a
if outdir.rfind('/') != len(outdir):
outdir += '/'
if o in ("-h", "--help"):
usage()
sys.exit(2)
for filename in filenames:
file = open(filename, 'r')
for line in file:
# Removing any comment
if line.find('--') >= 0:
line = line[:line.find('--')]
# Removing any carriage return
lines += re.sub('\r', '', line)
for m in re.findall(r'([a-zA-Z0-9-]+)\s*::=\s+SEQUENCE\s+\(\s*SIZE\s*\(\s*\d+\s*\.\.\s*[0-9a-zA-Z-]+\s*\)\s*\)\s*OF\s+[a-zA-Z-]+\s*\{\s*\{\s*([0-9a-zA-Z-]+)\s*\}\s*\}', lines, re.MULTILINE):
ieofielist[m[0]] = m[1]
for m in re.findall(r'([a-zA-Z0-9-]+)\s*::=\s+E-RAB-IE-ContainerList\s*\{\s*\{\s*([a-zA-Z0-9-]+)\s*\}\s*\}', lines, re.MULTILINE):
ieofielist[m[0]] = m[1]
for i in re.findall(r'([a-zA-Z0-9-]+)\s+([A-Z0-9-]+)\s*::=\s*\{\s+([\,\|\{\}\t\n\.{3}\ \-a-zA-Z0-9]+)\s+}\n', lines, re.MULTILINE):
ies = []
maxLength = 0
# TODO: handle extensions
if i[1].find('EXTENSION') >= 0:
continue
if fileprefix == "":
fileprefix = i[1][:i[1].find('-')].lower()
for j in re.findall(r'\s*\{\s*([a-zA-Z0-9-\ \t]+)\s*\}\s*[\|,]*', i[2], re.MULTILINE):
for k in re.findall(r'ID\s*([a-zA-Z0-9\-]+)\s*CRITICALITY\s*([a-zA-Z0-9\-]+)\s+[A-Z]+\s+([a-zA-Z0-9\-]+)\s*PRESENCE\s*([a-zA-Z0-9\-]+)', j, re.MULTILINE):
printDebug("Got new ie for message " + i[0] + ": " + str(k))
if len(k[2]) > maxLength:
maxLength = len(k[2])
ies.append(k)
if len(ies) > 0:
iesDefs[i[0]] = { "length": maxLength, "ies": ies }
else:
printWarning("Didn't find any information element for message: " + i[0])
if len(iesDefs) == 0:
printFail("No Information Element parsed, exiting")
sys.exit(0)
fileprefix_first_upper = fileprefix[0].upper() + fileprefix[1:]
f = open(outdir + fileprefix + '_ies_defs.h', 'w')
outputHeaderToFile(f, filename)
f.write("#include \"%s_common.h\"\n\n" % (fileprefix))
f.write("#ifndef %s_IES_DEFS_H_\n#define %s_IES_DEFS_H_\n\n" % (fileprefix.upper(), fileprefix.upper()))
f.write("/* Define the version of script used to generate this file */\n")
f.write("#define %s_SCRIPT_VERSION (%s)\n\n" % (fileprefix.upper(), re.sub('\.', '', version)))
for key in iesDefs:
if key not in ieofielist.values():
continue
for (i, j) in ieofielist.items():
if j == key:
break
f.write("typedef struct %sIEs_s {\n" % (re.sub('-', '_', i)))
f.write(" A_SEQUENCE_OF(struct %s_s) %s;\n" % (re.sub('IEs', '', re.sub('-', '_', ieofielist[i])), lowerFirstCamelWord(re.sub('IEs', '', re.sub('-', '_', ieofielist[i])))))
f.write("} %sIEs_t;\n\n" % (re.sub('-', '_', i)))
for key in iesDefs:
keyupperunderscore = re.sub('-', '_', key.upper())
keylowerunderscore = re.sub('-', '_', key.lower())
shift = 0
if len(iesDefs[key]["ies"]) == 0:
continue
# Presence mask
for ie in iesDefs[key]["ies"]:
ieupperunderscore = re.sub('-', '_', re.sub('id-', '', ie[0])).upper()
if ie[3] == "optional" or ie[3] == "conditional":
f.write("#define {0:<{pad}} {1}\n".format("%s_%s_PRESENT" % (keyupperunderscore, ieupperunderscore), "(1 << %d)" % shift,
pad=iesDefs[key]["length"] + len(keyupperunderscore) + 9))
shift += 1
if (shift > 0):
f.write("\n")
f.write("typedef struct %s_s {\n" % (re.sub('-', '_', key)))
if (shift > 0):
f.write(" {0:<{pad}} {1};\n".format("uint16_t", "presenceMask", pad=iesDefs[key]["length"] + 2))
for ie in iesDefs[key]["ies"]:
ieunderscore = re.sub('-', '_', ie[2])
iename = re.sub('id-', '', ie[0])
ienameunderscore = lowerFirstCamelWord(re.sub('-', '_', iename))
if ie[2] in ieofielist:
f.write(" %sIEs_t %s;" % (re.sub('-', '_', ie[2]), ienameunderscore))
else:
f.write(" {0:<{pad}} {1};".format("%s_t" % ieunderscore, ienameunderscore, pad=iesDefs[key]["length"] + 2))
if ie[3] == "optional":
f.write(" ///< Optional field")
elif ie[3] == "conditional":
f.write(" ///< Conditional field")
f.write("\n")
f.write("} %s_t;\n\n" % (re.sub('-', '_', key)))
f.write("typedef struct %s_message_s {\n" % (fileprefix))
f.write(" %s_ProcedureCode_t procedureCode;\n" % (fileprefix_first_upper))
f.write(" %s_Criticality_t criticality;\n" % (fileprefix_first_upper))
f.write(" uint8_t direction;\n")
f.write(" union {\n")
messageList = iesDefs.keys()
messageList.sort()
for message in messageList:
if message in ieofielist.values():
continue
if len(iesDefs[message]["ies"]) == 0:
continue
f.write(" %s_t %s;\n" % (re.sub('-', '_', message), lowerFirstCamelWord(re.sub('-', '_', message))))
f.write(" } msg;\n")
f.write("} %s_message;\n\n" % (fileprefix))
for key in iesDefs:
if key in ieofielist.values():
continue
structName = re.sub('ies', '', key)
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', re.sub('-IEs', '', key)))
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
keylowerunderscore = re.sub('-', '_', key.lower())
firstlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
f.write("/* %s in iesDefs not in ieofielist.values() */\n" % (key))
f.write("/** \\brief Decode function for %s ies.\n" % (key))
if len(iesDefs[key]["ies"]) != 0:
f.write(" * \\param %s Pointer to ASN1 structure in which data will be stored\n" % (lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" * \\param any_p Pointer to the ANY value to decode.\n")
f.write(" **/\n")
f.write("int %s_decode_%s(\n" % (fileprefix, keylowerunderscore))
if len(iesDefs[key]["ies"]) != 0:
f.write(" %s_t *%s,\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" ANY_t *any_p);\n\n")
if len(iesDefs[key]["ies"]) == 0:
continue
f.write("/* %s in iesDefs not in ieofielist.values() */\n" % (key))
f.write("/** \\brief Encode function for %s ies.\n" % (key))
f.write(" * \\param %s Pointer to the ASN1 structure.\n" % (firstlower))
f.write(" * \\param %s Pointer to the IES structure.\n" % (lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" **/\n")
f.write("int %s_encode_%s(\n" % (fileprefix, re.sub('-', '_', structName.lower())))
f.write(" %s_t *%s,\n" % (asn1cStruct, firstlower))
f.write(" %s_t *%s);\n\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
for key in iesDefs:
if key not in ieofielist.values():
continue
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', key))
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
firstlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
f.write("/* %s in iesDefs in ieofielist.values() */\n" % (key))
f.write("/** \\brief Encode function for %s ies.\n" % (key))
f.write(" * \\param %s Pointer to the ASN1 structure.\n" % (firstlower))
f.write(" * \\param %s Pointer to the IES structure.\n" % (lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" **/\n")
f.write("/* %s in iesDefs in ieofielist.values() */\n" % (key))
f.write("int %s_encode_%s(\n" % (fileprefix, firstlower.lower()))
f.write(" %s_t *%s,\n" % (asn1cStruct, firstlower))
f.write(" %sIEs_t *%sIEs);\n\n" % (asn1cStruct, firstlower))
f.write("/** \\brief Decode function for %s ies.\n" % (key))
f.write(" * \\param any_p Pointer to the ANY value to decode.\n")
f.write(" * \\param callback Callback function called when any_p is successfully decoded.\n")
f.write(" **/\n")
f.write("/* %s in iesDefs in ieofielist.values() */\n" % (key))
f.write("int %s_decode_%s(\n" % (fileprefix, firstlower.lower()))
f.write(" %sIEs_t *%sIEs,\n" % (asn1cStruct, firstlower))
f.write(" %s_t *%s);\n\n" % (asn1cStruct, lowerFirstCamelWord(asn1cStruct)))
for key in iesDefs:
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', key))
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
firstlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
if key in ieofielist.values():
f.write("/** \\brief Display %s encapsulated IE using XER encoding.\n" % (asn1cStruct))
f.write(" * \\param %s Pointer to the IES structure.\n" % (lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" * \\param file File descriptor to write output.\n")
f.write(" **/\n")
f.write("asn_enc_rval_t %s_xer_print_%s(\n" % (fileprefix, re.sub('item', 'list', firstlower.lower())))
f.write(" asn_app_consume_bytes_f *cb,\n")
f.write(" void *app_key,\n")
f.write(" %sIEs_t *%sIEs);\n\n" % (re.sub('item', 'list', asn1cStruct), firstlower))
else:
f.write("/** \\brief Display %s message using XER encoding.\n" % (asn1cStruct))
f.write(" * \\param message_p Pointer to root message.\n")
f.write(" * \\param file File descriptor to write output.\n")
f.write(" **/\n")
f.write("asn_enc_rval_t %s_xer_print_%s(\n" % (fileprefix, firstlower.lower()))
f.write(" asn_app_consume_bytes_f *cb,\n")
f.write(" void *app_key,\n")
f.write(" %s_message *message_p);\n\n" % (fileprefix))
f.write("int %s_xer__print2sp(const void *buffer, size_t size, void *app_key);\n\n" % (fileprefix.lower()))
f.write("int %s_xer__print2fp(const void *buffer, size_t size, void *app_key);\n\n" % (fileprefix.lower()))
f.write("extern size_t %s_string_total_size;\n\n" % (fileprefix.lower()))
f.write("#endif /* %s_IES_DEFS_H_ */\n\n" % (fileprefix.upper()))
#Generate Decode functions
f = open(outdir + fileprefix + '_decoder.c', 'w')
outputHeaderToFile(f, filename)
f.write("#include \"%s_common.h\"\n#include \"%s_ies_defs.h\"\n\n" % (fileprefix, fileprefix))
for key in iesDefs:
if key in ieofielist.values():
continue
structName = re.sub('ies', '', key)
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', key))
if asn1cStruct.rfind('_') == len(asn1cStruct) - 1:
asn1cStruct = asn1cStruct[:-1]
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
ielistname = re.sub('UE', 'ue', asn1cStruct)
ielistnamefirstlower = ielistname[:1].lower() + ielistname[1:]
asn1cStructfirstlower = asn1cStruct[:1].lower() + asn1cStruct[1:]
keyName = re.sub('-', '_', key)
keyupperunderscore = keyName.upper()
firstlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
iesaccess = ""
if key not in ieofielist.values():
iesaccess = "%s_ies." % (firstlower)
f.write("int %s_decode_%s(\n" % (fileprefix, re.sub('-', '_', structName.lower())))
if len(iesDefs[key]["ies"]) != 0:
f.write(" %s_t *%s,\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" ANY_t *any_p) {\n\n")
f.write(" %s_t %s;\n %s_t *%s_p = &%s;\n" % (asn1cStruct, asn1cStructfirstlower, asn1cStruct, asn1cStructfirstlower, asn1cStructfirstlower))
f.write(" int i, decoded = 0;\n")
if len(iesDefs[key]["ies"]) != 0:
f.write(" int tempDecoded = 0;\n")
f.write(" assert(any_p != NULL);\n")
if len(iesDefs[key]["ies"]) != 0:
f.write(" assert(%s != NULL);\n\n" % (lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" %s_DEBUG(\"Decoding message %s (%%s:%%d)\\n\", __FILE__, __LINE__);\n\n" % (fileprefix.upper(), re.sub('-', '_', keyName)))
f.write(" ANY_to_type_aper(any_p, &asn_DEF_%s, (void**)&%s_p);\n\n" % (asn1cStruct, asn1cStructfirstlower))
f.write(" for (i = 0; i < %s_p->%slist.count; i++) {\n" % (asn1cStructfirstlower, iesaccess))
f.write(" %s_IE_t *ie_p;\n" % (fileprefix[0].upper() + fileprefix[1:]))
f.write(" ie_p = %s_p->%slist.array[i];\n" % (asn1cStructfirstlower, iesaccess))
f.write(" switch(ie_p->id) {\n")
for ie in iesDefs[key]["ies"]:
iename = re.sub('id-', '', ie[0])
ienameunderscore = lowerFirstCamelWord(re.sub('-', '_', iename))
ienameunderscorefirstlower = lowerFirstCamelWord(ienameunderscore)
ietypesubst = re.sub('-', '', ie[2])
ietypeunderscore = re.sub('-', '_', ie[2])
ieupperunderscore = re.sub('-', '_', re.sub('id-', '', ie[0])).upper()
if ie[3] == "optional":
f.write(" /* Optional field */\n")
elif ie[3] == "conditional":
f.write(" /* Conditional field */\n")
f.write(" case %s_ProtocolIE_ID_%s:\n" % (fileprefix_first_upper, re.sub('-', '_', ie[0])))
f.write(" {\n")
f.write(" %s_t *%s_p = NULL;\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst)))
if ie[3] != "mandatory":
f.write(" %s->presenceMask |= %s_%s_PRESENT;\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), keyupperunderscore, ieupperunderscore))
f.write(" tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_%s, (void**)&%s_p);\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst)))
f.write(" if (tempDecoded < 0 || %s_p == NULL) {\n" % (lowerFirstCamelWord(ietypesubst)))
f.write(" %s_ERROR(\"Decoding of IE %s failed\\n\");\n" % (fileprefix.upper(), ienameunderscore))
f.write(" if (%s_p)\n" % (lowerFirstCamelWord(ietypesubst)))
f.write(" ASN_STRUCT_FREE(asn_DEF_%s, %s_p);\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst)))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" decoded += tempDecoded;\n")
f.write(" if (asn1_xer_print)\n")
f.write(" xer_fprint(stdout, &asn_DEF_%s, %s_p);\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst)))
if ie[2] in ieofielist.keys():
f.write(" if (%s_decode_%s(&%s->%s, %s_p) < 0) {\n" % (fileprefix, ietypeunderscore.lower(), lowerFirstCamelWord(re.sub('-', '_', key)), ienameunderscore, lowerFirstCamelWord(ietypesubst)))
f.write(" %s_ERROR(\"Decoding of encapsulated IE %s failed\\n\");\n" % (fileprefix.upper(), lowerFirstCamelWord(ietypesubst)))
f.write(" ASN_STRUCT_FREE(asn_DEF_%s, %s_p);\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst)))
f.write(" }\n")
else:
f.write(" memcpy(&%s->%s, %s_p, sizeof(%s_t));\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), ienameunderscore, lowerFirstCamelWord(ietypesubst), ietypeunderscore))
#f.write(" ASN_STRUCT_FREE(asn_DEF_%s, %s_p);\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst)))
f.write(" } break;\n")
f.write(" default:\n")
f.write(" %s_ERROR(\"Unknown protocol IE id (%%d) for message %s\\n\", (int)ie_p->id);\n" % (fileprefix.upper(), re.sub('-', '_', structName.lower())))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" }\n")
f.write(" return decoded;\n")
f.write("}\n\n")
for key in iesDefs:
if key not in ieofielist.values():
continue
keyname = re.sub('IEs', '', re.sub('Item', 'List', key))
f.write("int %s_decode_%s(\n" % (fileprefix, re.sub('-', '_', keyname).lower()))
f.write(" %sIEs_t *%sIEs,\n" % (re.sub('-', '_', keyname), lowerFirstCamelWord(re.sub('-', '_', keyname))))
f.write(" %s_t *%s) {\n\n" % (re.sub('-', '_', keyname), lowerFirstCamelWord(re.sub('-', '_', keyname))))
f.write(" int i, decoded = 0;\n")
f.write(" int tempDecoded = 0;\n\n")
f.write(" assert(%s != NULL);\n" % (lowerFirstCamelWord(re.sub('-', '_', keyname))));
f.write(" assert(%sIEs != NULL);\n\n" % (lowerFirstCamelWord(re.sub('-', '_', keyname))));
f.write(" for (i = 0; i < %s->list.count; i++) {\n" % (lowerFirstCamelWord(re.sub('-', '_', keyname))))
f.write(" %s_IE_t *ie_p = %s->list.array[i];\n" % (fileprefix[0].upper() + fileprefix[1:], lowerFirstCamelWord(re.sub('-', '_', keyname))))
f.write(" switch (ie_p->id) {\n")
for ie in iesDefs[key]["ies"]:
iename = re.sub('id-', '', ie[0])
ienameunderscore = lowerFirstCamelWord(re.sub('-', '_', iename))
f.write(" case %s_ProtocolIE_ID_%s:\n" % (fileprefix_first_upper, re.sub('-', '_', ie[0])))
f.write(" {\n")
f.write(" %s_t *%s_p = NULL;\n" % (re.sub('-', '_', ie[2]), lowerFirstCamelWord(re.sub('-', '', ie[2]))))
f.write(" tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_%s, (void**)&%s_p);\n" % (re.sub('-', '_', ie[2]), lowerFirstCamelWord(re.sub('-', '', ie[2]))))
f.write(" if (tempDecoded < 0 || %s_p == NULL) {\n" % (lowerFirstCamelWord(re.sub('-', '', ie[2]))))
f.write(" %s_ERROR(\"Decoding of IE %s for message %s failed\\n\");\n" % (fileprefix.upper(), ienameunderscore, re.sub('-', '_', keyname)))
f.write(" if (%s_p)\n" % (lowerFirstCamelWord(re.sub('-', '', ie[2]))))
#f.write(" free(%s_p);\n" % (lowerFirstCamelWord(re.sub('-', '', ie[2]))))
f.write(" ASN_STRUCT_FREE(asn_DEF_%s, %s_p);\n" % (re.sub('-', '_', ie[2]), lowerFirstCamelWord(re.sub('-', '', ie[2]))))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" decoded += tempDecoded;\n")
f.write(" if (asn1_xer_print)\n")
f.write(" xer_fprint(stdout, &asn_DEF_%s, %s_p);\n" % (re.sub('-', '_', ie[2]), lowerFirstCamelWord(re.sub('-', '', ie[2]))))
f.write(" ASN_SEQUENCE_ADD(&%sIEs->%s, %s_p);\n" % (lowerFirstCamelWord(re.sub('-', '_', keyname)),
re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key))), lowerFirstCamelWord(re.sub('-', '', ie[2]))))
f.write(" } break;\n")
f.write(" default:\n")
f.write(" %s_ERROR(\"Unknown protocol IE id (%%d) for message %s\\n\", (int)ie_p->id);\n" % (fileprefix.upper(), re.sub('-', '_', structName.lower())))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" }\n")
f.write(" return decoded;\n")
f.write("}\n\n")
#Generate IES Encode functions
f = open(outdir + fileprefix + '_encoder.c', 'w')
outputHeaderToFile(f,filename)
f.write("#include \"%s_common.h\"\n" % (fileprefix))
f.write("#include \"%s_ies_defs.h\"\n\n" % (fileprefix))
for key in iesDefs:
if key in ieofielist.values():
continue
structName = re.sub('ies', '', key)
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', key))
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
if asn1cStruct.rfind('_') == len(asn1cStruct) - 1:
asn1cStruct = asn1cStruct[:-1]
asn1cStructfirstlower = asn1cStruct[:1].lower() + asn1cStruct[1:]
firstwordlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
iesaccess = ""
if key not in ieofielist.values():
iesaccess = "%s_ies." % (firstwordlower)
keyName = re.sub('-', '_', key)
keyupperunderscore = keyName.upper()
# No IE to encode...
if len(iesDefs[key]["ies"]) == 0:
continue
f.write("int %s_encode_%s(\n" % (fileprefix, re.sub('-', '_', structName.lower())))
f.write(" %s_t *%s,\n" % (asn1cStruct, firstwordlower))
f.write(" %s_t *%s) {\n\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" %s_IE_t *ie;\n\n" % (fileprefix_first_upper))
f.write(" assert(%s != NULL);\n" % (firstwordlower));
f.write(" assert(%s != NULL);\n\n" % (lowerFirstCamelWord(re.sub('-', '_', key))));
for ie in iesDefs[key]["ies"]:
iename = re.sub('-', '_', re.sub('id-', '', ie[0]))
ienameunderscore = re.sub('-', '_', iename)
ienamefirstwordlower = lowerFirstCamelWord(iename)
ieupperunderscore = re.sub('-', '_', re.sub('id-', '', ie[0])).upper()
ietypeunderscore = re.sub('-', '_', ie[2])
if ie[3] != "mandatory":
if ie[3] == "optional":
f.write(" /* Optional field */\n")
elif ie[3] == "conditional":
f.write(" /* Conditional field */\n")
f.write(" if (%s->presenceMask & %s_%s_PRESENT) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), keyupperunderscore, ieupperunderscore))
#f.write(" == %s_%s_PRESENT) {\n" % (keyupperunderscore, ieupperunderscore))
f.write(" if ((ie = %s_new_ie(%s_ProtocolIE_ID_%s,\n" % (fileprefix, fileprefix_first_upper, re.sub('-', '_', ie[0])))
f.write(" %s_Criticality_%s,\n" % (fileprefix_first_upper, ie[1]))
f.write(" &asn_DEF_%s,\n" % (ietypeunderscore))
f.write(" &%s->%s)) == NULL) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" ASN_SEQUENCE_ADD(&%s->%slist, ie);\n" % (firstwordlower, iesaccess))
f.write(" }\n\n")
else:
if ie[2] in ieofielist.keys():
f.write(" %s_t %s;\n\n" % (ietypeunderscore, ienamefirstwordlower))
f.write(" memset(&%s, 0, sizeof(%s_t));\n" % (ienamefirstwordlower, ietypeunderscore))
f.write("\n")
f.write(" if (%s_encode_%s(&%s, &%s->%s) < 0) return -1;\n" % (fileprefix, ietypeunderscore.lower(), ienamefirstwordlower, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower))
f.write(" if ((ie = %s_new_ie(%s_ProtocolIE_ID_%s,\n" % (fileprefix, fileprefix_first_upper, re.sub('-', '_', ie[0])))
f.write(" %s_Criticality_%s,\n" % (fileprefix_first_upper, ie[1]))
f.write(" &asn_DEF_%s,\n" % (ietypeunderscore))
if ie[2] in ieofielist.keys():
f.write(" &%s)) == NULL) {\n" % (ienamefirstwordlower))
else:
f.write(" &%s->%s)) == NULL) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" ASN_SEQUENCE_ADD(&%s->%slist, ie);\n\n" % (firstwordlower, iesaccess))
if ie[2] in ieofielist.keys():
f.write(" /* Free any dynamic allocation that is no more used */\n")
f.write(" ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_%s, &%s);\n\n" % (ietypeunderscore, ienamefirstwordlower))
f.write(" return 0;\n")
f.write("}\n\n")
for (key, value) in iesDefs.items():
if key not in ieofielist.values():
continue
ie = value["ies"][0]
ietypeunderscore = re.sub('-', '_', ie[2])
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', re.sub('-IEs', '', key)))
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
firstwordlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
for (i, j) in ieofielist.items():
if j == key:
break
f.write("int %s_encode_%s(\n" % (fileprefix, re.sub('-', '_', i).lower()))
f.write(" %s_t *%s,\n" % (asn1cStruct, firstwordlower))
f.write(" %sIEs_t *%sIEs) {\n\n" % (re.sub('-', '_', i), lowerFirstCamelWord(re.sub('-', '_', i))))
f.write(" int i;\n")
f.write(" %s_IE_t *ie;\n\n" % (fileprefix_first_upper))
f.write(" assert(%s != NULL);\n" % (firstwordlower));
f.write(" assert(%sIEs != NULL);\n\n" % (lowerFirstCamelWord(re.sub('-', '_', i))));
f.write(" for (i = 0; i < %sIEs->%s.count; i++) {\n" % (firstwordlower, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key)))))
f.write(" if ((ie = %s_new_ie(%s_ProtocolIE_ID_%s,\n" % (fileprefix, fileprefix_first_upper, re.sub('-', '_', ie[0])))
f.write(" %s_Criticality_%s,\n" % (fileprefix_first_upper, ie[1]))
f.write(" &asn_DEF_%s,\n" % (ietypeunderscore))
f.write(" %sIEs->%s.array[i])) == NULL) {\n" % (firstwordlower, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key)))))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" ASN_SEQUENCE_ADD(&%s->list, ie);\n" % (firstwordlower))
f.write(" }\n")
f.write(" return 0;\n")
f.write("}\n\n")
#Generate xer print functions
f = open(outdir + fileprefix + '_xer_print.c', 'w')
outputHeaderToFile(f, filename)
f.write("#include <stdlib.h>\n")
f.write("#include <stdio.h>\n\n")
f.write("#include <asn_application.h>\n#include <asn_internal.h>\n\n")
f.write("#include \"%s_common.h\"\n#include \"%s_ies_defs.h\"\n\n" % (fileprefix, fileprefix))
f.write("size_t %s_string_total_size = 0;\n\n" % (fileprefix.lower()))
f.write("""int
%s_xer__print2fp(const void *buffer, size_t size, void *app_key) {
FILE *stream = (FILE *)app_key;
if(fwrite(buffer, 1, size, stream) != size)
return -1;
return 0;
}
""" % (fileprefix.lower()))
f.write("""int %s_xer__print2sp(const void *buffer, size_t size, void *app_key) {
char *string = (char *)app_key;
/* Copy buffer to the formatted string */
memcpy(&string[%s_string_total_size], buffer, size);
%s_string_total_size += size;
return 0;
}
""" % (fileprefix.lower(), fileprefix.lower(), fileprefix.lower()))
f.write("""static asn_enc_rval_t
xer_encode_local(asn_TYPE_descriptor_t *td, void *sptr,
asn_app_consume_bytes_f *cb, void *app_key, int indent) {
asn_enc_rval_t er, tmper;
const char *mname;
size_t mlen;
int xcan = 2;
if(!td || !sptr) goto cb_failed;
mname = td->xml_tag;
mlen = strlen(mname);
ASN__TEXT_INDENT(0, indent);
ASN__CALLBACK3("<", 1, mname, mlen, ">", 1);
tmper = td->op->xer_encoder(td, sptr, indent + 1, XER_F_BASIC, cb, app_key);
if(tmper.encoded == -1) return tmper;
ASN__CALLBACK3("</", 2, mname, mlen, ">\\n", xcan);
er.encoded = 4 + xcan + (2 * mlen) + tmper.encoded;
ASN__ENCODED_OK(er);
cb_failed:
ASN__ENCODE_FAILED;
}
""")
for (key, value) in iesDefs.items():
keyName = re.sub('-', '_', key)
keyupperunderscore = keyName.upper()
iesStructName = lowerFirstCamelWord(re.sub('-', '_', key))
ie = value["ies"][0]
ietypeunderscore = re.sub('-', '_', ie[2])
if key in ieofielist.values():
f.write("asn_enc_rval_t %s_xer_print_%s(\n" % (fileprefix, re.sub('ies', '', re.sub('item', 'list', re.sub('-', '_', key).lower()))))
else:
f.write("asn_enc_rval_t %s_xer_print_%s(\n" % (fileprefix, re.sub('ies', '', re.sub('-', '_', key).lower())))
#f.write(" FILE *file,\n")
f.write(" asn_app_consume_bytes_f *cb,\n")
f.write(" void *app_key,\n")
if key in ieofielist.values():
iesStructName = lowerFirstCamelWord(re.sub('Item', 'List', re.sub('-', '_', key)))
f.write(" %sIEs_t *%s) {\n\n" % (re.sub('IEs', '', re.sub('Item', 'List', re.sub('-', '_', key))), iesStructName))
f.write(" int i;\n")
f.write(" asn_enc_rval_t er;\n")
else:
f.write(" %s_message *message_p)\n{\n" % (fileprefix))
f.write(" %s_t *%s;\n" % (re.sub('-', '_', key), iesStructName))
f.write(" asn_enc_rval_t er;\n")
#f.write(" void *app_key = (void *)file;\n")
#f.write(" asn_app_consume_bytes_f *cb = %s_xer__print2fp;\n\n" % (fileprefix.lower()))
f.write(" %s = &message_p->msg.%s;\n\n" % (iesStructName, iesStructName))
if key in ieofielist.values():
# Increase indentation level
f.write(" for (i = 0; i < %s->%s.count; i++) {\n" % (iesStructName, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key)))))
#f.write(" xer_fprint(file, &asn_DEF_%s, %s->%s.array[i]);\n" % (ietypeunderscore, iesStructName, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key)))))
f.write(" er = xer_encode(&asn_DEF_%s, %s->%s.array[i], XER_F_BASIC, cb, app_key);\n" % (ietypeunderscore, iesStructName, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key)))))
f.write(" }\n")
else:
f.write(" cb(\"<%s-PDU>\\n\", %d, app_key);\n" % (key, len("<%s-PDU>\n" % (key))))
f.write(" xer_encode_local(&asn_DEF_%s_Criticality, &message_p->criticality, cb, app_key, 1);\n" % fileprefix_first_upper)
f.write(" xer_encode_local(&asn_DEF_%s_ProcedureCode, &message_p->procedureCode, cb, app_key, 1);\n" % fileprefix_first_upper)
f.write(" cb(\" <%s>\\n\", %d, app_key);\n" % (key, len(" <%s>\n" % (key))))
for ie in iesDefs[key]["ies"]:
iename = re.sub('-', '_', re.sub('id-', '', ie[0]))
ienameunderscore = re.sub('-', '_', iename)
ienamefirstwordlower = lowerFirstCamelWord(iename)
ietypeunderscore = re.sub('-', '_', ie[2])
ieupperunderscore = re.sub('-', '_', re.sub('id-', '', ie[0])).upper()
if ie[3] != "mandatory":
if ie[3] == "optional":
f.write(" /* Optional field */\n")
elif ie[3] == "conditional":
f.write(" /* Conditional field */\n")
f.write(" if (%s->presenceMask & %s_%s_PRESENT)\n " % (iesStructName, keyupperunderscore, ieupperunderscore))
# Is it an encapsulated IE ?
if ie[2] in ieofielist.keys():
f.write(" %s_xer_print_%s(cb, app_key, &%s->%s);\n" % (fileprefix, re.sub('ies', '', re.sub('-', '_', ie[2]).lower()), iesStructName, ienamefirstwordlower))
else:
f.write(" xer_encode_local(&asn_DEF_%s, &%s->%s, cb, app_key, 2);\n" % (ietypeunderscore, iesStructName, ienamefirstwordlower))
f.write(" cb(\" </%s>\\n\", %d, app_key);\n" % (key, len(" </%s>\n" % (key))))
f.write(" cb(\"</%s-PDU>\\n\", %d, app_key);\n" % (key, len("</%s-PDU>\n" % (key))))
f.write(" ASN__ENCODED_OK(er);\n")
#if key not in ieofielist.values():
#f.write("cb_failed:\n")
#f.write(" return er;\n")
f.write("}\n\n")
#Generate xer print functions
f = open(outdir + fileprefix + '_compare.c', 'w')
outputHeaderToFile(f, filename)
f.write("#include <stdlib.h>\n")
f.write("#include <stdio.h>\n\n")
f.write("#include <asn_application.h>\n#include <asn_internal.h>\n\n")
f.write("#include \"%s_common.h\"\n#include \"%s_ies_defs.h\"\n" % (fileprefix, fileprefix))
f.write("#include \"%s-ProtocolIE-ID.h\"\n\n" % (fileprefix_first_upper))
for (key, value) in iesDefs.items():
if key not in ieofielist.values():
continue
ie = value["ies"][0]
ietypeunderscore = re.sub('-', '_', ie[2])
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', re.sub('-IEs', '', key)))
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
firstwordlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
for (i, j) in ieofielist.items():
if j == key:
break
f.write("extern asn_TYPE_descriptor_t asn_DEF_%s;\n" % (ietypeunderscore))
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment