-- RUA-IEs.asn
--
-- 3GPP TS 25.468 V9.1.0 (2010-03)
-- http://www.3gpp.org/ftp/Specs/html-info/25468.htm
--
-- 9.3.4	Information Element definitions
--

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

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

	ProtocolExtensionContainer{},
	RUA-PROTOCOL-EXTENSION
FROM RUA-Containers;


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	ProtocolExtensionContainer { {CriticalityDiagnostics-ExtIEs} } 	OPTIONAL,
	...
}

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

CriticalityDiagnostics-IE-List-ExtIEs RUA-PROTOCOL-EXTENSION ::= {
	...
}

CriticalityDiagnostics-ExtIEs RUA-PROTOCOL-EXTENSION ::= {
	...
}


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

END
