-- **************************************************************
--
-- Container definitions
--
-- **************************************************************

X2AP-Containers {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) x2ap (2) version1 (1) x2ap-Containers (5)  }

DEFINITIONS AUTOMATIC TAGS ::=

BEGIN

-- **************************************************************
--
-- IE parameter types from other modules.
--
-- **************************************************************

IMPORTS
    maxPrivateIEs,
    maxProtocolExtensions,
    maxProtocolIEs,
    Criticality,
    Presence,
    PrivateIE-ID,
    ProtocolIE-ID
FROM X2AP-CommonDataTypes;

-- **************************************************************
--
-- Class Definition for Protocol IEs
--
-- **************************************************************

X2AP-PROTOCOL-IES ::= CLASS {
    &id             ProtocolIE-ID           UNIQUE,
    &criticality    Criticality,
    &Value,
    &presence       Presence
}
WITH SYNTAX {
    ID              &id
    CRITICALITY     &criticality
    TYPE            &Value
    PRESENCE        &presence
}

-- **************************************************************
--
-- Class Definition for Protocol IEs
--
-- **************************************************************

X2AP-PROTOCOL-IES-PAIR ::= CLASS {
    &id                     ProtocolIE-ID       UNIQUE,
    &firstCriticality       Criticality,
    &FirstValue,
    &secondCriticality      Criticality,
    &SecondValue,
    &presence               Presence
}
WITH SYNTAX {
    ID                      &id
    FIRST CRITICALITY       &firstCriticality
    FIRST TYPE              &FirstValue
    SECOND CRITICALITY      &secondCriticality
    SECOND TYPE             &SecondValue
    PRESENCE                &presence
}

-- **************************************************************
--
-- Class Definition for Protocol Extensions
--
-- **************************************************************

X2AP-PROTOCOL-EXTENSION ::= CLASS {
    &id                 ProtocolIE-ID       UNIQUE,
    &criticality        Criticality,
    &Extension,
    &presence           Presence
}
WITH SYNTAX {
    ID                  &id
    CRITICALITY         &criticality
    EXTENSION           &Extension
    PRESENCE            &presence
}

-- **************************************************************
--
-- Class Definition for Private IEs
--
-- **************************************************************

X2AP-PRIVATE-IES ::= CLASS {
    &id                 PrivateIE-ID,
    &criticality        Criticality,
    &Value,
    &presence           Presence
}
WITH SYNTAX {
    ID                  &id
    CRITICALITY         &criticality
    TYPE                &Value
    PRESENCE            &presence
}

-- **************************************************************
--
-- Container for Protocol IEs
--
-- **************************************************************

ProtocolIE-Container {X2AP-PROTOCOL-IES : IEsSetParam} ::=
    SEQUENCE (SIZE (0..maxProtocolIEs)) OF
    ProtocolIE-Field {{IEsSetParam}}

ProtocolIE-Single-Container {X2AP-PROTOCOL-IES : IEsSetParam} ::=
    ProtocolIE-Field {{IEsSetParam}}

ProtocolIE-Field {X2AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE {
    id              X2AP-PROTOCOL-IES.&id                   ({IEsSetParam}),
    criticality     X2AP-PROTOCOL-IES.&criticality          ({IEsSetParam}{@id}),
    value           X2AP-PROTOCOL-IES.&Value                ({IEsSetParam}{@id})
}

-- **************************************************************
--
-- Container for Protocol IE Pairs
--
-- **************************************************************

ProtocolIE-ContainerPair {X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::=
    SEQUENCE (SIZE (0..maxProtocolIEs)) OF
    ProtocolIE-FieldPair {{IEsSetParam}}

ProtocolIE-FieldPair {X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE {
    id                  X2AP-PROTOCOL-IES-PAIR.&id                  ({IEsSetParam}),
    firstCriticality    X2AP-PROTOCOL-IES-PAIR.&firstCriticality    ({IEsSetParam}{@id}),
    firstValue          X2AP-PROTOCOL-IES-PAIR.&FirstValue          ({IEsSetParam}{@id}),
    secondCriticality   X2AP-PROTOCOL-IES-PAIR.&secondCriticality   ({IEsSetParam}{@id}),
    secondValue         X2AP-PROTOCOL-IES-PAIR.&SecondValue         ({IEsSetParam}{@id})
}

-- **************************************************************
--
-- Container Lists for Protocol IE Containers
--
-- **************************************************************

ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, X2AP-PROTOCOL-IES : IEsSetParam} ::=
    SEQUENCE (SIZE (lowerBound..upperBound)) OF
    ProtocolIE-Container {{IEsSetParam}}

ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::=
    SEQUENCE (SIZE (lowerBound..upperBound)) OF
    ProtocolIE-ContainerPair {{IEsSetParam}}

-- **************************************************************
--
-- Container for Protocol Extensions
--
-- **************************************************************

ProtocolExtensionContainer {X2AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::=
    SEQUENCE (SIZE (1..maxProtocolExtensions)) OF
    ProtocolExtensionField {{ExtensionSetParam}}

ProtocolExtensionField {X2AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE {
    id                  X2AP-PROTOCOL-EXTENSION.&id             ({ExtensionSetParam}),
    criticality         X2AP-PROTOCOL-EXTENSION.&criticality    ({ExtensionSetParam}{@id}),
    extensionValue      X2AP-PROTOCOL-EXTENSION.&Extension      ({ExtensionSetParam}{@id})
}

-- **************************************************************
--
-- Container for Private IEs
--
-- **************************************************************

PrivateIE-Container {X2AP-PRIVATE-IES : IEsSetParam} ::=
    SEQUENCE (SIZE (1..maxPrivateIEs)) OF
    PrivateIE-Field {{IEsSetParam}}

PrivateIE-Field {X2AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE {
    id              X2AP-PRIVATE-IES.&id            ({IEsSetParam}),
    criticality     X2AP-PRIVATE-IES.&criticality   ({IEsSetParam}{@id}),
    value           X2AP-PRIVATE-IES.&Value         ({IEsSetParam}{@id})
}

END