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

RUA-Containers {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) 
umts-Access (20) modules (3) rua(5) version1 (1) rUA-Containers (5) }

DEFINITIONS AUTOMATIC TAGS ::= 

BEGIN

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

IMPORTS
	Criticality,
	Presence,
	PrivateIE-ID,
	ProtocolIE-ID,
	maxPrivateIEs,
	maxProtocolExtensions,
	maxProtocolIEs
FROM RUA-CommonDataTypes;

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

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


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

RUA-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 Extensions
--
-- **************************************************************

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


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

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

ProtocolIE-Single-Container {RUA-PROTOCOL-IES : IEsSetParam} ::= 
	ProtocolIE-Field {{IEsSetParam}}

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

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

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

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

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

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


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

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

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


END
