-- **************************************************************
--
-- Information Element Definitions
--
-- **************************************************************
SABP-IEs {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
umts-Access (20) modules (3) sabp (3) version1 (1) sabp-IEs (2) }
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
IMPORTS
 maxNrOfErrors,
 maxnoofSAI,
 maxNrOfLevels,
 id-MessageStructure,
 id-TypeOfError
FROM SABP-Constants
 Criticality,
 ProcedureCode,
 TriggeringMessage,
 ProtocolIE-ID
FROM SABP-CommonDataTypes
 ProtocolExtensionContainer{},
 SABP-PROTOCOL-EXTENSION
FROM SABP-Containers;
-- A
Available-Bandwidth ::= INTEGER (0..20480)
-- bits/sec
-- B
Broadcast-Message-Content ::= BIT STRING (SIZE (1..9968))-- This IE is sent from the CN to the RNC containing user information i.e.
-- the message.
Broadcast-Message-Content-Validity-Indicator ::= ENUMERATED {
 broadcast-Message-Content-not-valid,
 ...
}
-- C
Category ::= ENUMERATED {
 high-priority,
 background-priority,
 normal-priority,
 default-priority,
 ...
}
Cause ::= INTEGER {
 parameter-not-recognised (0),
 parameter-value-invalid (1),
 valid-CN-message-not-identified (2),
 service-area-identity-not-valid (3),
 unrecognised-message (4),
 missing-mandatory-element (5),
 rNC-capacity-exceeded (6),
 rNC-memory-exceeded (7),
 service-area-broadcast-not-supported (8), 
 service-area-broadcast-not-operational (9),
 message-reference-already-used (10),
 unspecifed-error (11),
 transfer-syntax-error (12),
 semantic-error (13),
 message-not-compatible-with-receiver-state (14),
 abstract-syntax-error-reject (15),
 abstract-syntax-error-ignore-and-notify (16),
 abstract-syntax-error-falsely-constructed-message (17)
} (0..255)
Criticality-Diagnostics ::= SEQUENCE {
 procedureCode ProcedureCode OPTIONAL,
 triggeringMessage TriggeringMessage OPTIONAL,
 procedureCriticality Criticality OPTIONAL,
 iEsCriticalityDiagnostics CriticalityDiagnostics-IE-List OPTIONAL,
 iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-ExtIEs} } OPTIONAL,
 ...
}
CriticalityDiagnostics-ExtIEs SABP-PROTOCOL-EXTENSION ::= {
 ...
}
CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..maxNrOfErrors)) OF
 SEQUENCE {
 iECriticality Criticality,
 iE-ID ProtocolIE-ID,
 repetitionNumber RepetitionNumber0 OPTIONAL,
 iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-IE-List-ExtIEs} } OPTIONAL,
 ...
 }
CriticalityDiagnostics-IE-List-ExtIEs SABP-PROTOCOL-EXTENSION ::= {
 { ID id-MessageStructure CRITICALITY ignore EXTENSION MessageStructure PRESENCE optional }|
 { ID id-TypeOfError CRITICALITY ignore EXTENSION TypeOfError PRESENCE mandatory },
 ...
}
MessageStructure ::= SEQUENCE (SIZE (1..maxNrOfLevels)) OF
 SEQUENCE {
 iE-ID ProtocolIE-ID,
 repetitionNumber RepetitionNumber1 OPTIONAL,
 iE-Extensions ProtocolExtensionContainer { {MessageStructure-ExtIEs} } OPTIONAL,
 ...
 }
MessageStructure-ExtIEs SABP-PROTOCOL-EXTENSION ::= {
 ...
} 
-- D
Data-Coding-Scheme ::= BIT STRING (SIZE (8))
-- E
-- F
Failure-List ::= SEQUENCE (SIZE (1..maxnoofSAI)) OF Failure-List-Item
Failure-List-Item ::= SEQUENCE {
 service-area-identifier Service-Area-Identifier,
 cause Cause,
 iE-Extensions ProtocolExtensionContainer { {FailureListItemIE-ExtIEs} } OPTIONAL,
 ...
}
FailureListItemIE-ExtIEs SABP-PROTOCOL-EXTENSION ::= {
...
}
-- G
-- H
-- I
-- J
-- K
-- L
-- M
Message-Identifier ::= BIT STRING (SIZE (16))
-- N
New-Serial-Number ::= Serial-Number
Number-of-Broadcasts-Completed-List ::= SEQUENCE (SIZE (1..maxnoofSAI)) OF
 Number-of-Broadcasts-Completed-List-Item
Number-of-Broadcasts-Completed-List-Item ::= SEQUENCE {
 service-area-identifier Service-Area-Identifier,
 number-of-broadcasts-completed INTEGER (0..65535),
 number-of-broadcasts-completed-info Number-Of-Broadcasts-Completed-Info OPTIONAL,
 iE-Extensions ProtocolExtensionContainer { {NoOfBroadcastsCompletedListItemIE-ExtIEs} } OPTIONAL,
 ...
}
NoOfBroadcastsCompletedListItemIE-ExtIEs SABP-PROTOCOL-EXTENSION ::= {
... 
}
Number-Of-Broadcasts-Completed-Info ::= ENUMERATED {
 overflow,
 unknown,
 ...
}
Number-of-Broadcasts-Requested ::= INTEGER {
 broadcast-indefinitely (0)
} (0..65535)
-- O
Old-Serial-Number ::= Serial-Number
-- P
Paging-ETWS-Indicator ::= ENUMERATED {
 paging,
 ...
}
-- Q
-- R
Radio-Resource-Loading-List ::= SEQUENCE (SIZE (1..maxnoofSAI)) OF
 Radio-Resource-Loading-List-Item
Radio-Resource-Loading-List-Item ::= SEQUENCE {
 service-area-identifier Service-Area-Identifier,
 available-bandwidth Available-Bandwidth,
 iE-Extensions ProtocolExtensionContainer { {RadioResourceLoadingListItemIE-ExtIEs} } OPTIONAL,
 ...
}
RadioResourceLoadingListItemIE-ExtIEs SABP-PROTOCOL-EXTENSION ::= {
...
}
Recovery-Indication ::= ENUMERATED {
 data-lost,
 data-available
}
RepetitionNumber0 ::= INTEGER(0..255)
RepetitionNumber1 ::= INTEGER(1..256)
Repetition-Period ::= INTEGER (1..4096)
-- Each unit represents a repetition of one second to a maximum of
-- once per 4096 seconds (~1 hour). 
-- S
Serial-Number ::= BIT STRING (SIZE (16))
Service-Area-Identifier ::= SEQUENCE {
 pLMNidentity OCTET STRING (SIZE (3))
 -- Digits 0 to 9, two digits per octet. --
 -- Each octet encoded 0000 to 1001. --
 -- 1111 used as filler --
 -- Bit 4 to 1 of octet n encoding digit 2n-1. --
 -- Bit 8 to 5 of octet n encoding digit 2n. --
 -- The PLMN identity consists of 3 digits from MCC --
 -- followed by either a filler plus 2 digits --
 -- from MNC (in case of 2 digit MNC) or 3 digits --
 -- from MNC (in case of 3 digit MNC). -- ,
 lac OCTET STRING (SIZE (2))
 -- 0000 and FFFE not allowed -- ,
 sac OCTET STRING (SIZE (2))
}
-- **TODO** The IE type for these parameters is not known as yet
Service-Areas-List ::= SEQUENCE (SIZE (1..maxnoofSAI)) OF Service-Area-Identifier
-- T
TypeOfError ::= ENUMERATED {
 not-understood,
 missing,
 ...
}
-- U
-- V
-- W
WarningSecurityInfo ::= OCTET STRING (SIZE (50))
Warning-Type ::= OCTET STRING (SIZE(2))
-- X
-- Y
END 
