-- **************************************************************
--
-- 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,
	maxnoofAdditionalNeighbours,
	maxnoofURAIdentities,
	id-HNB-Internet-Information,
	id-HNB-Cell-Identifier,
	id-S-RNTIPrefix,
	id-URAIdentityList
	
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-release,
	hNB-not-registered,
	unspecified,
	normal,
	uE-relocated,
	ue-registered-in-another-HNB,
	...,
	no-neighbour-information-available,
	iurh-connection-to-that-neighbour-not-Allowed
}

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

CELL-FACHMobilitySupport	::= ENUMERATED {
	supported, 
	...
}

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

HNBCapacity ::= INTEGER(0..1000)

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-GWResponse ::= CHOICE {
	hNB			HNBConfigInfo,
	macroRNC		RNC-ID,
	unknownU-RNTIIndication	UnknownU-RNTIIndication,
	...
}

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 ::= {
	{ ID id-S-RNTIPrefix	CRITICALITY ignore	EXTENSION S-RNTIPrefix		PRESENCE optional }|
	{ ID id-URAIdentityList	CRITICALITY ignore	EXTENSION URAIdentityList	PRESENCE optional },
	...
}

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

NeighbourCellIdentityList	::= SEQUENCE (SIZE(0..maxnoofAdditionalNeighbours)) OF 	NeighbourIdentity

NeighbourIdentity	::= CHOICE {
	hNB-RNL-Identity	HNB-RNL-Identity,
	cell-ID			CellIdentity,
	...
}

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

AdditionalNeighbourInfoList	::= SEQUENCE (SIZE(1..maxnoofAdditionalNeighbours)) 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)) 

S-RNTIPrefix	::= BIT STRING(SIZE(1..16, ...))

--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,...))

Tunnel-Information ::= SEQUENCE {
	iP-Address		IP-Address,
	uDP-Port-Number		UDP-Port-Number	OPTIONAL,
	iE-Extensions		ProtocolExtensionContainer { { Tunnel-Information-ExtIEs } }		OPTIONAL,
	...
}

Tunnel-Information-ExtIEs HNBAP-PROTOCOL-EXTENSION ::= {
	...
}

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

UDP-Port-Number ::= OCTET STRING(SIZE(2))

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,
	...
}

URAIdentityList ::= SEQUENCE (SIZE (0..maxnoofURAIdentities)) OF URAIdentity

URAIdentity	::= INTEGER(0..65535)

U-RNTI ::= BIT STRING (SIZE (32))

UnknownU-RNTIIndication ::= ENUMERATED {
	unknown,
	...
}

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


END
