Commit 7fea5781 authored by Javier Morgade's avatar Javier Morgade

-M2AP ASN.1 Abstract Syntax Notation

	-Initial Common M2AP (ETSI TS 136 443 v.14) defs
parent 943e480b
...@@ -405,6 +405,73 @@ add_library(S1AP_ENB ...@@ -405,6 +405,73 @@ add_library(S1AP_ENB
) )
add_dependencies(S1AP_ENB rrc_flag s1ap_flag) add_dependencies(S1AP_ENB rrc_flag s1ap_flag)
#M2AP
# Same limitation as described in RRC/S1AP: unknown generated file list
# so we generate it at cmake time
##############
add_list1_option(M2AP_RELEASE R14 "M2AP ASN.1 grammar version" R14)
set(M2AP_DIR ${OPENAIR2_DIR}/M2AP)
if (${M2AP_RELEASE} STREQUAL "R8")
make_version(M2AP_VERSION 8 9 0)
set(M2AP_ASN_FILES m2ap-8.9.0.asn1)
elseif (${M2AP_RELEASE} STREQUAL "R11")
make_version(M2AP_VERSION 11 9 0)
set(M2AP_ASN_FILES m2ap-11.9.0.asn1)
elseif (${M2AP_RELEASE} STREQUAL "R12")
make_version(M2AP_VERSION 12 9 0)
set(M2AP_ASN_FILES m2ap-12.9.0.asn1)
elseif (${M2AP_RELEASE} STREQUAL "R14")
make_version(M2AP_VERSION 14 0 0)
set(M2AP_ASN_FILES m2ap-14.0.0.asn1)
elseif (${M2AP_RELEASE} STREQUAL "R15")
make_version(M2AP_VERSION 15 0 0)
set(M2AP_ASN_FILES m2ap-15.0.0.asn1)
endif(${M2AP_RELEASE} STREQUAL "R8")
add_definitions(-DM2AP_VERSION=${M2AP_VERSION})
set(M2AP_ASN_DIR ${M2AP_DIR}/MESSAGES/ASN1/${M2AP_RELEASE})
set(M2AP_C_DIR ${asn1_generated_dir}/M2AP_${M2AP_RELEASE})
# Warning: if you modify ASN.1 source file to generate new C files, cmake should be re-run instead of make
execute_process(COMMAND ${OPENAIR_CMAKE}/tools/make_asn1c_includes.sh "${M2AP_C_DIR}" "${M2AP_ASN_DIR}/${M2AP_ASN_FILES}" "M2AP_" -fno-include-deps
RESULT_VARIABLE ret)
if (NOT ${ret} STREQUAL 0)
message(FATAL_ERROR "${ret}: error")
endif (NOT ${ret} STREQUAL 0)
file(GLOB M2AP_source ${M2AP_C_DIR}/*.c)
add_custom_target (
m2_flag ALL
COMMAND ${OPENAIR_CMAKE}/tools/make_asn1c_includes.sh "${M2AP_C_DIR}" "${M2AP_ASN_DIR}/${M2AP_ASN_FILES}" "M2AP_" -fno-include-deps
DEPENDS ${M2AP_ASN_DIR}/${M2AP_ASN_FILES}
)
add_library(M2AP_LIB
${M2AP_source}
${M2AP_DIR}/m2ap_common.c
)
add_dependencies(M2AP_LIB rrc_flag m2_flag)
include_directories ("${M2AP_C_DIR}")
include_directories ("${M2AP_DIR}")
add_library(M2AP_ENB
${M2AP_DIR}/m2ap_common.c
#${M2AP_DIR}/m2ap_eNB.c
#${M2AP_DIR}/m2ap_decoder.c
#${M2AP_DIR}/m2ap_encoder.c
#${M2AP_DIR}/m2ap_handler.c
#${M2AP_DIR}/m2ap_itti_messaging.c
#${M2AP_DIR}/m2ap_eNB_management_procedures.c
#${M2AP_DIR}/m2ap_eNB_generate_messages.c
#${M2AP_DIR}/m2ap_ids.c
#${M2AP_DIR}/m2ap_timers.c
#${M2AP_DIR}/m2ap_MCE_interface_management.c
)
add_dependencies(M2AP_ENB rrc_flag m2_flag)
#X2AP #X2AP
# Same limitation as described in RRC/S1AP: unknown generated file list # Same limitation as described in RRC/S1AP: unknown generated file list
# so we generate it at cmake time # so we generate it at cmake time
...@@ -810,6 +877,7 @@ include_directories("${OPENAIR3_DIR}/SECU") ...@@ -810,6 +877,7 @@ include_directories("${OPENAIR3_DIR}/SECU")
include_directories("${OPENAIR3_DIR}/SCTP") include_directories("${OPENAIR3_DIR}/SCTP")
include_directories("${OPENAIR3_DIR}/S1AP") include_directories("${OPENAIR3_DIR}/S1AP")
include_directories("${OPENAIR2_DIR}/X2AP") include_directories("${OPENAIR2_DIR}/X2AP")
include_directories("${OPENAIR2_DIR}/M2AP")
include_directories("${OPENAIR2_DIR}/F1AP") include_directories("${OPENAIR2_DIR}/F1AP")
include_directories("${OPENAIR3_DIR}/UDP") include_directories("${OPENAIR3_DIR}/UDP")
include_directories("${OPENAIR3_DIR}/GTPV1-U") include_directories("${OPENAIR3_DIR}/GTPV1-U")
...@@ -2085,7 +2153,7 @@ add_dependencies(lte-softmodem rrc_flag s1ap_flag x2_flag) ...@@ -2085,7 +2153,7 @@ add_dependencies(lte-softmodem rrc_flag s1ap_flag x2_flag)
target_link_libraries (lte-softmodem target_link_libraries (lte-softmodem
-Wl,--start-group -Wl,--start-group
RRC_LIB S1AP_LIB S1AP_ENB F1AP_LIB F1AP X2AP_LIB X2AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2 RRC_LIB S1AP_LIB S1AP_ENB F1AP_LIB F1AP X2AP_LIB X2AP_ENB M2AP_LIB M2AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} ${FSPT_MSG_LIB} ${PROTO_AGENT_LIB} LFDS7 ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} ${FSPT_MSG_LIB} ${PROTO_AGENT_LIB} LFDS7
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
-Wl,--end-group z dl) -Wl,--end-group z dl)
...@@ -2153,7 +2221,7 @@ add_executable(lte-uesoftmodem ...@@ -2153,7 +2221,7 @@ add_executable(lte-uesoftmodem
add_dependencies(lte-uesoftmodem rrc_flag s1ap_flag x2_flag) add_dependencies(lte-uesoftmodem rrc_flag s1ap_flag x2_flag)
target_link_libraries (lte-uesoftmodem target_link_libraries (lte-uesoftmodem
-Wl,--start-group -Wl,--start-group
RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB X2AP_ENB F1AP F1AP_LIB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB X2AP_ENB M2AP_LIB M2AP_ENB F1AP F1AP_LIB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES} ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES}
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
-Wl,--end-group z dl) -Wl,--end-group z dl)
...@@ -2232,7 +2300,7 @@ add_executable(test_epc_generate_scenario ...@@ -2232,7 +2300,7 @@ add_executable(test_epc_generate_scenario
${OPENAIR3_DIR}/S1AP/s1ap_eNB_defs.h ${OPENAIR3_DIR}/S1AP/s1ap_eNB_defs.h
) )
target_link_libraries (test_epc_generate_scenario target_link_libraries (test_epc_generate_scenario
-Wl,--start-group RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB X2AP_ENB F1AP_LIB F1AP GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS ${ITTI_LIB} ${MSC_LIB} L2 -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES} -Wl,--start-group RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB X2AP_ENB M2AP_LIB M2AP_ENB F1AP_LIB F1AP GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS ${ITTI_LIB} ${MSC_LIB} L2 -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES}
) )
add_executable(test_epc_play_scenario add_executable(test_epc_play_scenario
...@@ -2251,7 +2319,7 @@ add_executable(test_epc_play_scenario ...@@ -2251,7 +2319,7 @@ add_executable(test_epc_play_scenario
) )
target_include_directories(test_epc_play_scenario PUBLIC /usr/local/share/asn1c) target_include_directories(test_epc_play_scenario PUBLIC /usr/local/share/asn1c)
target_link_libraries (test_epc_play_scenario target_link_libraries (test_epc_play_scenario
-Wl,--start-group RRC_LIB S1AP_LIB X2AP_LIB X2AP_ENB F1AP_LIB F1AP GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY_COMMON PHY PHY_UE LFDS ${ITTI_LIB} ${MSC_LIB} -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES} -Wl,--start-group RRC_LIB S1AP_LIB X2AP_LIB X2AP_ENB M2AP_LIB M2AP_ENB F1AP_LIB F1AP GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY_COMMON PHY PHY_UE LFDS ${ITTI_LIB} ${MSC_LIB} -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES}
) )
...@@ -2287,7 +2355,7 @@ if (${T_TRACER}) ...@@ -2287,7 +2355,7 @@ if (${T_TRACER})
dlsim_tm4 dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim dlsim_tm4 dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim
pdcchsim pucchsim prachsim syncsim ulsim cu_test du_test pdcchsim pucchsim prachsim syncsim ulsim cu_test du_test
#all "add_library" definitions #all "add_library" definitions
ITTI RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB X2AP_ENB F1AP_LIB F1AP ITTI RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB X2AP_ENB M2AP_LIB M2AP_ENB F1AP_LIB F1AP
oai_exmimodevif oai_usrpdevif oai_bladerfdevif oai_lmssdrdevif oai_exmimodevif oai_usrpdevif oai_bladerfdevif oai_lmssdrdevif
oai_eth_transpro oai_eth_transpro
FLPT_MSG ASYNC_IF FLEXRAN_AGENT HASHTABLE MSC UTIL OMG_SUMO SECU_OSA FLPT_MSG ASYNC_IF FLEXRAN_AGENT HASHTABLE MSC UTIL OMG_SUMO SECU_OSA
......
-- 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
-- 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")
/*
* 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
*/
/*! \file m2ap_common.c
* \brief m2ap procedures for both eNB and MCE
* \author Javier Morgade <javier.morgade@ieee.org>
* \date 2019
* \version 0.1
*/
#include <stdint.h>
#include "m2ap_common.h"
#include "M2AP_M2AP-PDU.h"
int asn_debug = 0;
int asn1_xer_print = 0;
#if defined(EMIT_ASN_DEBUG_EXTERN)
inline void ASN_DEBUG(const char *fmt, ...)
{
if (asn_debug) {
int adi = asn_debug_indent;
va_list ap;
va_start(ap, fmt);
fprintf(stderr, "[ASN1]");
while(adi--) fprintf(stderr, " ");
vfprintf(stderr, fmt, ap);
fprintf(stderr, "\n");
va_end(ap);
}
}
#endif
ssize_t m2ap_generate_initiating_message(
uint8_t **buffer,
uint32_t *length,
M2AP_ProcedureCode_t procedureCode,
M2AP_Criticality_t criticality,
asn_TYPE_descriptor_t *td,
void *sptr)
{
M2AP_M2AP_PDU_t pdu;
ssize_t encoded;
memset(&pdu, 0, sizeof(M2AP_M2AP_PDU_t));
pdu.present = M2AP_M2AP_PDU_PR_initiatingMessage;
pdu.choice.initiatingMessage.procedureCode = procedureCode;
pdu.choice.initiatingMessage.criticality = criticality;
ANY_fromType_aper((ANY_t *)&pdu.choice.initiatingMessage.value, td, sptr);
if (asn1_xer_print) {
xer_fprint(stdout, &asn_DEF_M2AP_M2AP_PDU, (void *)&pdu);
}
/* We can safely free list of IE from sptr */
ASN_STRUCT_FREE_CONTENTS_ONLY(*td, sptr);
if ((encoded = aper_encode_to_new_buffer(&asn_DEF_M2AP_M2AP_PDU, 0, &pdu,
(void **)buffer)) < 0) {
return -1;
}
*length = encoded;
return encoded;
}
ssize_t m2ap_generate_unsuccessfull_outcome(
uint8_t **buffer,
uint32_t *length,
M2AP_ProcedureCode_t procedureCode,
M2AP_Criticality_t criticality,
asn_TYPE_descriptor_t *td,
void *sptr)
{
M2AP_M2AP_PDU_t pdu;
ssize_t encoded;
memset(&pdu, 0, sizeof(M2AP_M2AP_PDU_t));
pdu.present = M2AP_M2AP_PDU_PR_unsuccessfulOutcome;
pdu.choice.successfulOutcome.procedureCode = procedureCode;
pdu.choice.successfulOutcome.criticality = criticality;
ANY_fromType_aper((ANY_t *)&pdu.choice.successfulOutcome.value, td, sptr);
if (asn1_xer_print) {
xer_fprint(stdout, &asn_DEF_M2AP_M2AP_PDU, (void *)&pdu);
}
/* We can safely free list of IE from sptr */
ASN_STRUCT_FREE_CONTENTS_ONLY(*td, sptr);
if ((encoded = aper_encode_to_new_buffer(&asn_DEF_M2AP_M2AP_PDU, 0, &pdu,
(void **)buffer)) < 0) {
return -1;
}
*length = encoded;
return encoded;
}
void m2ap_handle_criticality(M2AP_Criticality_t criticality)
{
}
/*
* 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
*/
/*! \file m2ap_common.h
* \brief m2ap procedures for both eNB and MCE
* \author Javier Morgade <javier.morgade@ieee.org>
* \date 2019
* \version 0.1
*/
#if HAVE_CONFIG_H_
# include "config.h"
#endif
#include "M2AP_ProtocolIE-Field.h"
#include "M2AP_M2AP-PDU.h"
#include "M2AP_InitiatingMessage.h"
#include "M2AP_SuccessfulOutcome.h"
#include "M2AP_UnsuccessfulOutcome.h"
#include "M2AP_ProtocolIE-FieldPair.h"
#include "M2AP_ProtocolIE-ContainerPair.h"
#include "M2AP_ProtocolExtensionField.h"
#include "M2AP_ProtocolExtensionContainer.h"
#include "M2AP_PMCH-Configuration-Item.h"
#include "M2AP_asn_constant.h"
#include "intertask_interface.h"
#include "common/ran_context.h"
#ifndef M2AP_COMMON_H_
#define M2AP_COMMON_H_
/** @defgroup _m2ap_impl_ M2AP Layer Reference Implementation
* @ingroup _ref_implementation_
* @{
*/
/* Checking version of ASN1C compiler */
#if (ASN1C_ENVIRONMENT_VERSION < 923)
# error "You are compiling m2ap with the wrong version of ASN1C"
#endif
#ifndef M2AP_PORT
# define M2AP_PORT 36423
#endif
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif
extern int asn1_xer_print;
#if defined(ENB_MODE)
# include "common/utils/LOG/log.h"
# include "m2ap_default_values.h"
# define M2AP_INFO(x, args...) LOG_I(M2AP, x, ##args)
# define M2AP_ERROR(x, args...) LOG_E(M2AP, x, ##args)
# define M2AP_WARN(x, args...) LOG_W(M2AP, x, ##args)
# define M2AP_DEBUG(x, args...) LOG_D(M2AP, x, ##args)
#else
# define M2AP_INFO(x, args...) do { fprintf(stdout, "[M2AP][I]"x, ##args); } while(0)
# define M2AP_ERROR(x, args...) do { fprintf(stdout, "[M2AP][E]"x, ##args); } while(0)
# define M2AP_WARN(x, args...) do { fprintf(stdout, "[M2AP][W]"x, ##args); } while(0)
# define M2AP_DEBUG(x, args...) do { fprintf(stdout, "[M2AP][D]"x, ##args); } while(0)
#endif
#define M2AP_FIND_PROTOCOLIE_BY_ID(IE_TYPE, ie, container, IE_ID, mandatory) \
do {\
IE_TYPE **ptr; \
ie = NULL; \
for (ptr = container->protocolIEs.list.array; \
ptr < &container->protocolIEs.list.array[container->protocolIEs.list.count]; \
ptr++) { \
if((*ptr)->id == IE_ID) { \
ie = *ptr; \
break; \
} \
} \
if (mandatory) DevAssert(ie != NULL); \
} while(0)
/** \brief Function callback prototype.
**/
typedef int (*m2ap_message_decoded_callback)(
instance_t instance,
uint32_t assocId,
uint32_t stream,
M2AP_M2AP_PDU_t *pdu);
/** \brief Encode a successfull outcome message
\param buffer pointer to buffer in which data will be encoded
\param length pointer to the length of buffer
\param procedureCode Procedure code for the message
\param criticality Criticality of the message
\param td ASN1C type descriptor of the sptr
\param sptr Deferenced pointer to the structure to encode
@returns size in bytes encded on success or 0 on failure
**/
ssize_t m2ap_generate_successfull_outcome(
uint8_t **buffer,
uint32_t *length,
M2AP_ProcedureCode_t procedureCode,
M2AP_Criticality_t criticality,
asn_TYPE_descriptor_t *td,
void *sptr);
/** \brief Encode an initiating message
\param buffer pointer to buffer in which data will be encoded
\param length pointer to the length of buffer
\param procedureCode Procedure code for the message
\param criticality Criticality of the message
\param td ASN1C type descriptor of the sptr
\param sptr Deferenced pointer to the structure to encode
@returns size in bytes encded on success or 0 on failure
**/
ssize_t m2ap_generate_initiating_message(
uint8_t **buffer,
uint32_t *length,
M2AP_ProcedureCode_t procedureCode,
M2AP_Criticality_t criticality,
asn_TYPE_descriptor_t *td,
void *sptr);
/** \brief Encode an unsuccessfull outcome message
\param buffer pointer to buffer in which data will be encoded
\param length pointer to the length of buffer
\param procedureCode Procedure code for the message
\param criticality Criticality of the message
\param td ASN1C type descriptor of the sptr
\param sptr Deferenced pointer to the structure to encode
@returns size in bytes encded on success or 0 on failure
**/
ssize_t m2ap_generate_unsuccessfull_outcome(
uint8_t **buffer,
uint32_t *length,
M2AP_ProcedureCode_t procedureCode,
M2AP_Criticality_t criticality,
asn_TYPE_descriptor_t *td,
void *sptr);
/** \brief Handle criticality
\param criticality Criticality of the IE
@returns void
**/
void m2ap_handle_criticality(M2AP_Criticality_t criticality);
#endif /* M2AP_COMMON_H_ */
/*
* 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
*/
/*! \file m2ap_default_values.h
* \brief default values for m2ap procedures
* \author Javier Morgade
* \date 2019
* \version 0.1
* \company Vicomtech
* \email: javier.morgade@ieee.org
* \note
* \warning
*/
#ifndef M2AP_DEFAULT_VALUES_H_
#define M2AP_DEFAULT_VALUES_H_
#define M2AP_PORT_NUMBER (36443)
#define M2AP_SCTP_PPID (43)
#endif /* M2AP_DEFAULT_VALUES_H_ */
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