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

F1AP-Containers {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) 
ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-Containers (5) }

DEFINITIONS AUTOMATIC TAGS ::= 

BEGIN

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

IMPORTS
	Criticality,
	Presence,
	PrivateIE-ID,
	ProtocolExtensionID,
	ProtocolIE-ID

FROM F1AP-CommonDataTypes
	maxPrivateIEs,
	maxProtocolExtensions,
	maxProtocolIEs

FROM F1AP-Constants;

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

F1AP-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
--
-- **************************************************************

F1AP-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
--
-- **************************************************************

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

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

F1AP-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 {F1AP-PROTOCOL-IES : IEsSetParam} ::= 
	SEQUENCE (SIZE (0..maxProtocolIEs)) OF
	ProtocolIE-Field {{IEsSetParam}}

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

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

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

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

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

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

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

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

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

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

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

END