-- **************************************************************
--
-- Information Element Definitions
--
-- **************************************************************

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

DEFINITIONS AUTOMATIC TAGS ::= 

BEGIN

IMPORTS
	maxNrOfErrors
FROM RUA-Constants

	maxProtocolExtensions,
	Criticality,
	ProcedureCode,
	ProtocolIE-ID,
	TriggeringMessage
FROM RUA-CommonDataTypes

	IE
FROM RUA-PDU;

IE-Extensions ::= SEQUENCE (SIZE (1..maxProtocolExtensions)) OF IE

CN-DomainIndicator ::= ENUMERATED { 
	cs-domain, 
	ps-domain 
}

CSGMembershipStatus ::= ENUMERATED { 
	member, 
	non-member,
	...
}

Establishment-Cause ::= ENUMERATED {
	emergency-call,
	normal-call,
	... 
}





Context-ID	::=	 BIT STRING (SIZE(24))

IntraDomainNasNodeSelector ::=	SEQUENCE {
	version	CHOICE {
		release99	SEQUENCE {
			cn-Type		CHOICE {
				gsm-Map-IDNNS	Gsm-map-IDNNS,
				ansi-41-IDNNS	Ansi-41-IDNNS
			}
		},
		later	SEQUENCE {
			futurecoding	BIT STRING (SIZE (15))
		}
	}
}

Gsm-map-IDNNS ::= SEQUENCE {
	routingbasis	CHOICE {
		localPTMSI	SEQUENCE {
			routingparameter	RoutingParameter
		},
		tMSIofsamePLMN	SEQUENCE {
			routingparameter	RoutingParameter
		},
		tMSIofdifferentPLMN	SEQUENCE {
			routingparameter	RoutingParameter
		},
		iMSIresponsetopaging	SEQUENCE {
			routingparameter	RoutingParameter
		},
		iMSIcauseUEinitiatedEvent SEQUENCE {
			routingparameter	RoutingParameter
		},
		iMEI	SEQUENCE {
			routingparameter	RoutingParameter
		},
		spare2	SEQUENCE {
			routingparameter	RoutingParameter
		},
		spare1	SEQUENCE {
			routingparameter	RoutingParameter
		}
	},
	-- dummy is not used in this version of the specification and
	-- it should be ignored by the receiver.
	dummy	BOOLEAN
}


Ansi-41-IDNNS ::= BIT STRING (SIZE (14))

RANAP-Message	::= OCTET STRING

RoutingParameter ::= BIT STRING (SIZE (10))


-- **************************************************************
--
-- Cause IE
--
-- **************************************************************

Cause ::= CHOICE {
	radioNetwork	CauseRadioNetwork,
	transport	CauseTransport,
	protocol	CauseProtocol,
	misc		CauseMisc,
	...
}
CauseRadioNetwork ::= ENUMERATED {
	normal,
	connect-failed,
	network-release,
	unspecified,
	...
}
CauseTransport ::= ENUMERATED {
	transport-resource-unavailable,
	unspecified,
	...
}

CauseProtocol ::= ENUMERATED {
	transfer-syntax-error,
	abstract-syntax-error-reject,
	abstract-syntax-error-ignore-and-notify,
	message-not-compatible-with-receiver-state,
	semantic-error,
	unspecified,
	abstract-syntax-error-falsely-constructed-message,
	...
}

CauseMisc ::= ENUMERATED {
	processing-overload,
	hardware-failure,
	o-and-m-intervention,
	unspecified,
	...
}

-- **************************************************************
--
-- CriticalityDiagnostics
--
-- **************************************************************

CriticalityDiagnostics ::= SEQUENCE {
	procedureCode			ProcedureCode	OPTIONAL,
	triggeringMessage		TriggeringMessage	OPTIONAL,
	procedureCriticality		Criticality	OPTIONAL,
	iEsCriticalityDiagnostics	CriticalityDiagnostics-IE-List	OPTIONAL,
	iE-Extensions			IE-Extensions	OPTIONAL,
	...
}

CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..maxNrOfErrors)) OF
	SEQUENCE {
		iECriticality			Criticality,
		iE-ID				ProtocolIE-ID,
		typeOfError			TypeOfError,
		iE-Extensions			IE-Extensions	OPTIONAL,
		...
	}

TypeOfError ::= ENUMERATED {
	not-understood,
	missing,
	...
}

END
