-- HNBAP-IEs.asn
--
-- 3GPP TS 25.469 V10.1.0 (2011-06)
-- http://www.3gpp.org/ftp/Specs/html-info/25469.htm
--
-- 9.3.4	Information Element Definitions
--

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

HNBAP-IEs {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) 
umts-Access (20) modules (3) hnbap(6) version1 (1) hnbap-IEs (2) }

DEFINITIONS AUTOMATIC TAGS ::= 

BEGIN

IMPORTS
	maxNrOfErrors,
	maxnoofRABs,
	maxnoofNeighbours,
	maxnoofIurhAddresses,
	id-HNB-Internet-Information,
	id-HNB-Cell-Identifier
	
FROM HNBAP-Constants

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

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


--A
Access-stratum-release-indicator ::=	ENUMERATED {r99,
										rel-4, rel-5, rel-6, rel-7, rel-8-and-beyond,
										...}

AccessResult	::=		ENUMERATED {allowed, notAllowed, ...}

AltitudeAndDirection ::= SEQUENCE {
	directionOfAltitude		ENUMERATED {height, depth},
	altitude		INTEGER (0..32767),
	...
}

--B
BackoffTimer ::= INTEGER(0..3600)

BindingID	::= OCTET STRING(SIZE(1..4,...))

--C
Cause ::= CHOICE {
	radioNetwork			CauseRadioNetwork,
	transport				CauseTransport,
	protocol				CauseProtocol,
	misc					CauseMisc,
	...
}
CauseRadioNetwork ::= ENUMERATED {
	overload,
	unauthorised-Location,
	unauthorised-HNB,
	hNB-parameter-mismatch,
	invalid-UE-identity,
	uE-not-allowed-on-this-HNB,
	uE-unauthorised,
	connection-with-UE-lost,
	ue-RRC-telease,
	hNB-not-registered,
	unspecified,
	normal,
	uE-relocated,
	ue-registered-in-another-HNB,
	...
}

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,
	...
}
						
CellIdentity ::=		BIT STRING (SIZE (28))

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

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 HNBAP-PROTOCOL-EXTENSION ::= {
	...
}

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

CSG-ID			::=	BIT STRING (SIZE (27))

CSG-Capability	::=	ENUMERATED {
				csg-capable,
				not-csg-capable,
				...
			}

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

CGI ::= SEQUENCE {
	pLMNidentity		PLMNidentity,
	lAC					LAC,
	cI					CI,
	iE-Extensions		ProtocolExtensionContainer { {CGI-ExtIEs} } OPTIONAL
}

CGI-ExtIEs HNBAP-PROTOCOL-EXTENSION ::= {
	...
}

CI					::= OCTET STRING (SIZE (2))


CN-DomainIndicator ::= ENUMERATED { 
	cs-domain, 
	ps-domain 
}
--D
--E
ESN		::=	BIT STRING (SIZE(32))
--F
--G
GeographicalLocation ::= SEQUENCE {
	geographicalCoordinates		GeographicalCoordinates,
	altitudeAndDirection		AltitudeAndDirection,
	iE-Extensions				ProtocolExtensionContainer { { GeographicLocation-ExtIEs} } OPTIONAL,
	...
}

GeographicLocation-ExtIEs HNBAP-PROTOCOL-EXTENSION ::= {
	...
}

GeographicalCoordinates ::= SEQUENCE {
	latitudeSign			ENUMERATED {north, south},
	latitude				INTEGER (0..8388607),
	longitude				INTEGER (-8388608..8388607),
	iE-Extensions			ProtocolExtensionContainer { {GeographicalCoordinates-ExtIEs} }		OPTIONAL,
	...
}

GeographicalCoordinates-ExtIEs HNBAP-PROTOCOL-EXTENSION ::= {
	...
}

GTP-TEI					::= OCTET STRING (SIZE (4))

--H

HNB-Cell-Access-Mode::= ENUMERATED {
	closed,
	hybrid,
	open,
	... 
}

HNB-Cell-Identifier	::= 	SEQUENCE	{
	pLMNidentity			PLMNidentity,
	cellIdentity			CellIdentity,
	iE-Extensions			ProtocolExtensionContainer { { HNB-Cell-Identifier-ExtIEs } }		OPTIONAL,
	...
}

HNB-Cell-Identifier-ExtIEs HNBAP-PROTOCOL-EXTENSION ::= {
	...
}

HNB-RNL-Identity	::= 	CHOICE	{
	hNB-Identity-as-Cell-Identifier	HNB-Cell-Identifier,
	...
}

HNBConfigInfo	::= 	SEQUENCE	{
	hnb-RNL-Identity					HNB-RNL-Identity,
	configurationInformation			ConfigurationInformation,
	iE-Extensions						ProtocolExtensionContainer { { HNBConfigInfo-ExtIEs } }		OPTIONAL,
	...
}

HNBConfigInfo-ExtIEs HNBAP-PROTOCOL-EXTENSION ::= {
	...
}

ConfigurationInformation ::= CHOICE {
	provided	HNBConfigurationInformationProvided,
	missing		HNBConfigurationInformationMissing,
	...
}

HNBConfigurationInformationProvided ::= SEQUENCE {

	psc									PSC				OPTIONAL,
	cSG-ID								CSG-ID				OPTIONAL,
	hNB-Cell-Access-Mode				HNB-Cell-Access-Mode,
	iurh-Signalling-TNL-AddressList		Iurh-Signalling-TNL-AddressList,
	iE-Extensions						ProtocolExtensionContainer { { HNBConfigurationInformationProvided-ExtIEs } }		OPTIONAL,
	...
}

HNBConfigurationInformationProvided-ExtIEs HNBAP-PROTOCOL-EXTENSION ::= {
	...
}

HNBConfigurationInformationMissing ::= SEQUENCE {
	cause					Cause,
	iE-Extensions			ProtocolExtensionContainer { { HNBConfigurationInformationMissing-ExtIEs } }		OPTIONAL,
	...
}

HNBConfigurationInformationMissing-ExtIEs HNBAP-PROTOCOL-EXTENSION ::= {
	...
}

HNB-Location-Information	::=	SEQUENCE	{
	macroCoverageInfo		MacroCoverageInformation	OPTIONAL,
	geographicalCoordinates	GeographicalLocation	OPTIONAL,
	iE-Extensions			ProtocolExtensionContainer { { HNB-Location-Information-ExtIEs } }		OPTIONAL,
		...
}

HNB-Location-Information-ExtIEs HNBAP-PROTOCOL-EXTENSION ::= {
-- Extension for release-8 to support IP address for location verification --
{ID id-HNB-Internet-Information	CRITICALITY reject	EXTENSION IP-Address	PRESENCE optional	},
	...
}



HNB-Identity	::=		SEQUENCE {
	hNB-Identity-Info		HNB-Identity-Info,
	iE-Extensions		ProtocolExtensionContainer { { HNB-Identity-ExtIEs } }		OPTIONAL,
	...
}

HNB-Identity-ExtIEs HNBAP-PROTOCOL-EXTENSION ::= {
	...
}


HNB-Identity-Info ::= OCTET STRING (SIZE (1..255))

--I

IMEI					::= BIT STRING (SIZE(60))

IMSI					::= OCTET STRING (SIZE (3..8))
-- Reference: 23.003
IMSIDS41				::= OCTET STRING (SIZE (5..7))

IMSIESN				::= SEQUENCE {
	iMSIDS41		IMSIDS41,
	eSN				ESN
}	


IP-Address		::=SEQUENCE {
		ipaddress		CHOICE {
		ipv4info		Ipv4Address,
		ipv6info		Ipv6Address,
		...
		},
	iE-Extensions		ProtocolExtensionContainer { { IP-Address-ExtIEs } }		OPTIONAL,
		...
}

IP-Address-ExtIEs HNBAP-PROTOCOL-EXTENSION ::= {
	...
}

Ipv4Address		::= OCTET STRING (SIZE (4))

Ipv6Address		::= OCTET STRING (SIZE (16))

Iurh-Signalling-TNL-AddressList ::= SEQUENCE (SIZE(1..maxnoofIurhAddresses)) OF	IP-Address


--J
--K
--L
LAC			::= OCTET STRING(SIZE(2))

LAI			::= SEQUENCE {
	pLMNID		PLMNidentity,
	lAC			LAC,
	...
			}
			
-- M

MacroCoverageInformation	::= SEQUENCE {
		cellIdentity		MacroCellID,
		iE-Extensions		ProtocolExtensionContainer { { MacroCoverageInformation-ExtIEs } }		OPTIONAL,
		...
}

MacroCoverageInformation-ExtIEs HNBAP-PROTOCOL-EXTENSION ::= {
	...
}

MacroCellID ::= CHOICE {
	uTRANCellID			UTRANCellID, 
	gERANCellID			CGI,
	...
}

MuxPortNumber ::= INTEGER (1024..65535)

--N

NeighbourInfoList	::=	SEQUENCE (SIZE(1..maxnoofNeighbours)) OF	HNBConfigInfo

NeighbourInfoRequestList	::=	SEQUENCE (SIZE(1..maxnoofNeighbours)) OF	NeighbourInfoRequestItem

NeighbourInfoRequestItem ::= SEQUENCE {
	hnb-RNL-Identity	HNB-RNL-Identity,
	iE-Extensions		ProtocolExtensionContainer { { NeighbourInfoRequestItem-ExtIEs } }		OPTIONAL,
	...
}

NeighbourInfoRequestItem-ExtIEs HNBAP-PROTOCOL-EXTENSION ::= {
	...
}

--O
--P
PLMNidentity 				::= OCTET STRING (SIZE (3))

PSC			::= BIT STRING (SIZE(9))

PTMSI		::=	BIT STRING (SIZE(32))

PTMSIRAI		::= SEQUENCE {
	pTMSI		PTMSI,
	rAI			RAI,
	...
	}
	

--Q
--R

RAB-ID		::= BIT STRING (SIZE (8))

RABList		::= SEQUENCE (SIZE(1..maxnoofRABs)) OF RABListItem

RABListItem	::= SEQUENCE {
	rAB-ID						RAB-ID,
	old-transport-Info			TransportInfo,
	new-transport-Info			TransportInfo,
	cn-domain-indicator			CN-DomainIndicator,
	iE-Extensions		ProtocolExtensionContainer { { RABListItem-ExtIEs } }		OPTIONAL,
...
}

RABListItem-ExtIEs HNBAP-PROTOCOL-EXTENSION ::= {
	...
}

RAC			::= OCTET STRING(SIZE(1))

RAI			::= SEQUENCE {
	lAI			LAI,
	rAC			RAC,
	...
}


Registration-Cause	::= ENUMERATED {
				emergency-call,
				normal,
				...,
				ue-relocation
			}

RNC-ID	::=	INTEGER(0..65535)

--S

SAC			::= OCTET STRING(SIZE(2))

--T
TMSILAI		::=	SEQUENCE {
	tMSI		BIT STRING(SIZE (32)),
	lAI			LAI
}

TMSIDS41	::=		OCTET STRING (SIZE (2..17))

TransportInfo	::= SEQUENCE {
	transportLayerAddress		TransportLayerAddress,
	transportAssociation		CHOICE	{
	gtp-TEI						GTP-TEI,
	bindingID					BindingID,
	...
	},
	iE-Extensions		ProtocolExtensionContainer { { TransportInfo-ExtIEs } }		OPTIONAL,
...
}

TransportInfo-ExtIEs HNBAP-PROTOCOL-EXTENSION ::= {
	...
}

TransportLayerAddress	::= BIT STRING(SIZE(1..160,...))

TypeOfError ::= ENUMERATED {
	not-understood,
	missing,
	...
}
--U
UE-Capabilities ::= SEQUENCE {
	access-stratum-release-indicator	Access-stratum-release-indicator,
	csg-capability						CSG-Capability,
	iE-Extensions		ProtocolExtensionContainer { { UE-Capabilities-ExtIEs } }		OPTIONAL,
...
}

UE-Capabilities-ExtIEs HNBAP-PROTOCOL-EXTENSION ::= {
	...
}

UTRANCellID ::= SEQUENCE {
	lAC						LAC,
	rAC						RAC,
	pLMNidentity			PLMNidentity,
	uTRANcellID				CellIdentity,
	iE-Extensions			ProtocolExtensionContainer { {UTRANCellID-ExtIEs} } OPTIONAL
}

UTRANCellID-ExtIEs HNBAP-PROTOCOL-EXTENSION ::= {
	...
}
							


UE-Identity	::=	CHOICE {
	iMSI		IMSI,
	tMSILAI		TMSILAI,
	pTMSIRAI	PTMSIRAI,
	iMEI		IMEI,
	eSN			ESN,
	iMSIDS41	IMSIDS41,
	iMSIESN		IMSIESN,
	tMSIDS41	TMSIDS41,
	...
}

Update-cause ::=	ENUMERATED {
	relocation-preparation,
	...
}

--V
--W
--X
--Y
--Z


END
