-- **************************************************************
--
-- Container definitions
--
-- **************************************************************

S1AP-Containers {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) 
eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-Containers (5) }

DEFINITIONS AUTOMATIC TAGS ::= 

BEGIN

-- **************************************************************
--
-- IE parameter types from other modules.
--
-- **************************************************************

IMPORTS
    S1ap-Criticality,
    S1ap-Presence,
    S1ap-PrivateIE-ID,
    S1ap-ProtocolExtensionID,
    S1ap-ProtocolIE-ID
FROM S1AP-CommonDataTypes

    s1ap-maxPrivateIEs,
    s1ap-maxProtocolExtensions,
    s1ap-maxProtocolIEs
FROM S1AP-Constants;

-- **************************************************************
--
-- Class Definition for Protocol IEs
--
-- **************************************************************

S1AP-PROTOCOL-IES ::= CLASS {
    &id				S1ap-ProtocolIE-ID 					UNIQUE,
    &criticality			S1ap-Criticality,
    &Value,
    &presence			S1ap-Presence
}
WITH SYNTAX {
	ID				&id
	CRITICALITY			&criticality
	TYPE				&Value
	PRESENCE			&presence
}

-- **************************************************************
--
-- Class Definition for Protocol IEs
--
-- **************************************************************

S1AP-PROTOCOL-IES-PAIR ::= CLASS {
    &id				S1ap-ProtocolIE-ID 					UNIQUE,
    &firstCriticality		S1ap-Criticality,
    &FirstValue,
    &secondCriticality		S1ap-Criticality,
    &SecondValue,
    &presence			S1ap-Presence
}
WITH SYNTAX {
    ID				&id
    FIRST CRITICALITY 		&firstCriticality
    FIRST TYPE			&FirstValue
    SECOND CRITICALITY 		&secondCriticality
    SECOND TYPE			&SecondValue
    PRESENCE			&presence
}

-- **************************************************************
--
-- Class Definition for Protocol Extensions
--
-- **************************************************************

S1AP-PROTOCOL-EXTENSION ::= CLASS {
    &id			S1ap-ProtocolExtensionID 				UNIQUE,
    &criticality	S1ap-Criticality,
    &Extension,
    &presence		S1ap-Presence
}
WITH SYNTAX {
    ID			&id
    CRITICALITY		&criticality
    EXTENSION		&Extension
    PRESENCE		&presence
}

-- **************************************************************
--
-- Class Definition for Private IEs
--
-- **************************************************************

S1AP-PRIVATE-IES ::= CLASS {
    &id			S1ap-PrivateIE-ID,
    &criticality	S1ap-Criticality,
    &Value,
    &presence		S1ap-Presence
}
WITH SYNTAX {
    ID			&id
    CRITICALITY		&criticality
    TYPE		&Value
    PRESENCE		&presence
}

-- **************************************************************
--
-- Container for Protocol IEs
--
-- **************************************************************

ProtocolIE-Container {S1AP-PROTOCOL-IES : IEsSetParam} ::= 
	SEQUENCE (SIZE (0..maxProtocolIEs)) OF
	ProtocolIE-Field {{IEsSetParam}}

ProtocolIE-SingleContainer {S1AP-PROTOCOL-IES : IEsSetParam} ::= 
	ProtocolIE-Field {{IEsSetParam}}

ProtocolIE-Field {S1AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE {
	id				S1AP-PROTOCOL-IES.&id				({IEsSetParam}),
	criticality			S1AP-PROTOCOL-IES.&criticality			({IEsSetParam}{@id}),
	value				S1AP-PROTOCOL-IES.&Value	        	({IEsSetParam}{@id})
}

-- **************************************************************
--
-- Container for Protocol IE Pairs
--
-- **************************************************************

ProtocolIE-ContainerPair {S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= 
	SEQUENCE (SIZE (0..maxProtocolIEs)) OF
	ProtocolIE-FieldPair {{IEsSetParam}}

ProtocolIE-FieldPair {S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE {
	id				S1AP-PROTOCOL-IES-PAIR.&id			({IEsSetParam}),
	firstCriticality		S1AP-PROTOCOL-IES-PAIR.&firstCriticality	({IEsSetParam}{@id}),
	firstValue			S1AP-PROTOCOL-IES-PAIR.&FirstValue	        ({IEsSetParam}{@id}),
	secondCriticality		S1AP-PROTOCOL-IES-PAIR.&secondCriticality	({IEsSetParam}{@id}),
	secondValue			S1AP-PROTOCOL-IES-PAIR.&SecondValue	        ({IEsSetParam}{@id})
}

-- **************************************************************
--
-- Container Lists for Protocol IE Containers
--
-- **************************************************************

ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, S1AP-PROTOCOL-IES : IEsSetParam} ::=
	SEQUENCE (SIZE (lowerBound..upperBound)) OF
	ProtocolIE-SingleContainer {{IEsSetParam}}

ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::=
	SEQUENCE (SIZE (lowerBound..upperBound)) OF
	ProtocolIE-ContainerPair {{IEsSetParam}}

-- **************************************************************
--
-- Container for Protocol Extensions
--
-- **************************************************************

ProtocolExtensionContainer {S1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= 
	SEQUENCE (SIZE (1..maxProtocolExtensions)) OF
	ProtocolExtensionField {{ExtensionSetParam}}

ProtocolExtensionField {S1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE {
	id				S1AP-PROTOCOL-EXTENSION.&id			({ExtensionSetParam}),
	criticality			S1AP-PROTOCOL-EXTENSION.&criticality		({ExtensionSetParam}{@id}),
	extensionValue			S1AP-PROTOCOL-EXTENSION.&Extension		({ExtensionSetParam}{@id})
}

-- **************************************************************
--
-- Container for Private IEs
--
-- **************************************************************

PrivateIE-Container {S1AP-PRIVATE-IES : IEsSetParam } ::= 
	SEQUENCE (SIZE (1.. maxPrivateIEs)) OF
	PrivateIE-Field {{IEsSetParam}}

PrivateIE-Field {S1AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE {
	id				S1AP-PRIVATE-IES.&id			({IEsSetParam}),
	criticality			S1AP-PRIVATE-IES.&criticality		({IEsSetParam}{@id}),
	value			S1AP-PRIVATE-IES.&Value		({IEsSetParam}{@id})
}

END
