blob: d76e328913f7f39a60c2aba8480dcd9082d5ed70 [file] [log] [blame]
///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2019 Ericsson Telecom AB
//
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v2.0
// which accompanies this distribution, and is available at
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
///////////////////////////////////////////////////////////////////////////////
//
// File: MobileL3_Types.ttcn
// Rev: R2A
// Prodnr: CNL 113 832
// Contact: http://ttcn.ericsson.se
// Reference: 3GPP TS 24.008 v13.4.0
module MobileL3_Types
{
import from General_Types all;
import from MobileL3_CommonIE_Types all;
import from MobileL3_GMM_SM_Types all;
import from MobileL3_MM_Types all;
import from MobileL3_CC_Types all;
import from MobileL3_RRM_Types all;
import from MobileL3_SMS_Types all;
import from MobileL3_SS_Types all;
external function enc_PDU_L3_MS_SGSN(in PDU_L3_MS_SGSN pdu) return octetstring
with { extension "prototype(convert)" extension "encode(RAW)" }
external function enc_PDU_L3_MS_SGSN_fast(in PDU_L3_MS_SGSN pdu, out octetstring stream)
with { extension "prototype(fast)" extension "encode(RAW)" }
// new external function for decoding MS -> SGSN
external function dec_PDU_L3_MS_SGSN(in octetstring stream) return PDU_L3_MS_SGSN
with { extension "prototype(convert)" extension "decode(RAW)" }
external function dec_PDU_L3_MS_SGSN_backtrack(in octetstring stream, out PDU_L3_MS_SGSN pdu) return integer
with { extension "prototype(backtrack)" extension "decode(RAW)" }
// new external function for encoding SGSN -> MS
external function enc_PDU_L3_SGSN_MS(in PDU_L3_SGSN_MS pdu) return octetstring
with { extension "prototype(convert)" extension "encode(RAW)" }
external function enc_PDU_L3_SGSN_MS_fast(in PDU_L3_SGSN_MS pdu, out octetstring stream)
with { extension "prototype(fast)" extension "encode(RAW)" }
external function dec_PDU_L3_SGSN_MS(in octetstring stream) return PDU_L3_SGSN_MS
with { extension "prototype(convert)" extension "decode(RAW)" }
external function dec_PDU_L3_SGSN_MS_backtrack(in octetstring stream, out PDU_L3_SGSN_MS pdu) return integer
with { extension "prototype(backtrack)" extension "decode(RAW)" }
external function enc_PDU_ML3_NW_MS(in PDU_ML3_NW_MS pdu) return octetstring
with { extension "prototype(convert)" extension " encode(RAW)" }
external function enc_PDU_ML3_NW_MS_fast(in PDU_ML3_NW_MS pdu, out octetstring stream)
with { extension "prototype(fast)" extension " encode(RAW)" }
external function dec_PDU_ML3_NW_MS(in octetstring stream) return PDU_ML3_NW_MS
with { extension "prototype(convert)" extension " decode(RAW)" }
external function dec_PDU_ML3_NW_MS_backtrack(in octetstring stream, out PDU_ML3_NW_MS pdu) return integer
with { extension "prototype(backtrack)" extension " decode(RAW)" }
external function enc_PDU_ML3_MS_NW(in PDU_ML3_MS_NW pdu) return octetstring
with { extension "prototype(convert)" extension " encode(RAW)" }
external function enc_PDU_ML3_MS_NW_fast(in PDU_ML3_MS_NW pdu, out octetstring stream)
with { extension "prototype(fast)" extension " encode(RAW)" }
external function dec_PDU_ML3_MS_NW(in octetstring stream) return PDU_ML3_MS_NW
with { extension "prototype(convert)" extension " decode(RAW)" }
external function dec_PDU_ML3_MS_NW_backtrack(in octetstring stream, out PDU_ML3_MS_NW pdu) return integer
with { extension "prototype(backtrack)" extension " decode(RAW)" }
// ***************************************************************************
// * The container types of all L3_PDU
// ***************************************************************************
type record L3_TransactionId
{
BIT3 tio,
BIT1 tiFlag ,
TI_Extension tIExtension optional
// an extension octet (TI) can be used for session management messages
// not yet implemented (see 24.008 clause 10.3.2 for more detail
} with { variant (tIExtension) "PRESENCE(tio = '111'B)" };
type record L3_TransactionId_not_extended
{
BIT3 tio,
BIT1 tiFlag
};
type union TiOrSkip_not_extended
{
BIT4 skipIndicator,
L3_TransactionId_not_extended transactionId
};
type union TiOrSkip
{
BIT4 skipIndicator,
L3_TransactionId transactionId
};
type union L3_Discr_SGSN_MS
{
octetstring gcc, //group call control
octetstring bcc, // broadcast call control
octetstring cc, // call control; call related SS messages PDU_ypes_CC_MSC_MS
octetstring gttp, // GPRS Transparent Transport Protocol
octetstring mm, // mobility management messages PDU_DTAP_MM
octetstring rrm, // radio resource management messages PDU_DTAP_RRM
L3_GMM_SGSN_MS gprs_mm, // GPRS mobility management messages
octetstring sms, // SMS messages
L3_GSM_SGSN_MS gprs_sm, // GPRS session management messages
octetstring ss, // non call related SS messages
octetstring loc, // Location services
octetstring reserved
};
type record PDU_L3_SGSN_MS_unextended_ti
{
BIT4 discriminator,
TiOrSkip_not_extended tiOrSkip,
L3_Discr_SGSN_MS msgs
} with { variant (msgs)"CROSSTAG(
gcc, discriminator='0000'B;
bcc, discriminator='0001'B;
cc, discriminator='0011'B;
gttp, discriminator='0100'B;
mm, discriminator='0101'B;
rrm, discriminator='0110'B;
gprs_mm, discriminator='1000'B;
sms, discriminator='1001'B;
gprs_sm, discriminator='1010'B;
ss, discriminator='1011'B;
loc, discriminator='1100'B;
reserved, { discriminator='0010'B,
discriminator='0111'B,
discriminator='1101'B,
discriminator='1110'B,
discriminator='1111'B }
)";
variant (tiOrSkip)"CROSSTAG(
skipIndicator, { discriminator='0000'B,
discriminator='0001'B,
discriminator='0010'B,
discriminator='0100'B,
discriminator='0101'B,
discriminator='0110'B,
discriminator='0111'B,
discriminator='1000'B,
discriminator='1100'B,
discriminator='1101'B,
discriminator='1110'B,
discriminator='1111'B };
transactionId, { discriminator='0011'B,
discriminator='1001'B,
discriminator='1011'B,
discriminator='1010'B }
)";
};
type record PDU_L3_SGSN_MS
{
BIT4 discriminator,
TiOrSkip tiOrSkip,
L3_Discr_SGSN_MS msgs
} with { variant (msgs)"CROSSTAG(
gcc, discriminator='0000'B;
bcc, discriminator='0001'B;
cc, discriminator='0011'B;
gttp, discriminator='0100'B;
mm, discriminator='0101'B;
rrm, discriminator='0110'B;
gprs_mm, discriminator='1000'B;
sms, discriminator='1001'B;
gprs_sm, discriminator='1010'B;
ss, discriminator='1011'B;
loc, discriminator='1100'B;
reserved, { discriminator='0010'B,
discriminator='0111'B,
discriminator='1101'B,
discriminator='1110'B,
discriminator='1111'B }
)";
variant (tiOrSkip)"CROSSTAG(
skipIndicator, { discriminator='0000'B,
discriminator='0001'B,
discriminator='0010'B,
discriminator='0100'B,
discriminator='0101'B,
discriminator='0110'B,
discriminator='0111'B,
discriminator='1000'B,
discriminator='1100'B,
discriminator='1101'B,
discriminator='1110'B,
discriminator='1111'B };
transactionId, { discriminator='0011'B,
discriminator='1011'B,
discriminator='1001'B,
discriminator='1010'B }
)";
};
type union L3_Discr_MS_SGSN
{
octetstring gcc, //group call control
octetstring bcc, // broadcast call control
octetstring cc, // call control; call related SS messages PDU_DTAP_CC_MS_MSC
octetstring gttp, // GPRS Transparent Transport Protocol
octetstring mm, // mobility management messages PDU_DTAP_MM
octetstring rrm, // radio resource management messages PDU_DTAP_RRM
L3_GMM_MS_SGSN gprs_mm, // GPRS mobility management messages
octetstring sms, // SMS messages
L3_GSM_MS_SGSN gprs_sm, // GPRS session management messages
octetstring ss, // non call related SS messages
octetstring loc, // Location services
octetstring reserved
};
type record PDU_L3_MS_SGSN
{
BIT4 discriminator,
TiOrSkip tiOrSkip,
L3_Discr_MS_SGSN msgs
} with { variant (msgs)"CROSSTAG(
gcc, discriminator='0000'B;
bcc, discriminator='0001'B;
cc, discriminator='0011'B;
gttp, discriminator='0100'B;
mm, discriminator='0101'B;
rrm, discriminator='0110'B;
gprs_mm, discriminator='1000'B;
sms, discriminator='1001'B;
gprs_sm, discriminator='1010'B;
ss, discriminator='1011'B;
loc, discriminator='1100'B;
reserved, { discriminator='0010'B,
discriminator='0111'B,
discriminator='1101'B,
discriminator='1110'B,
discriminator='1111'B }
)";
variant (tiOrSkip)"CROSSTAG(
skipIndicator, { discriminator='0000'B,
discriminator='0001'B,
discriminator='0010'B,
discriminator='0100'B,
discriminator='0101'B,
discriminator='0110'B,
discriminator='0111'B,
discriminator='1000'B,
discriminator='1100'B,
discriminator='1101'B,
discriminator='1110'B,
discriminator='1111'B };
transactionId, { discriminator='0011'B,
discriminator='1001'B,
discriminator='1011'B,
discriminator='1010'B }
)";
};
//***************************************************************************
// 24.007/11.2.3.1.1 and 24.008/10.2 Protocol Discriminator NW->MS
//***************************************************************************
type union ML3_Discr_NW_MS
{
octetstring gcc, // group call control <- 24.068 WITHDRAWN
octetstring bcc, // broadcast call control <- 24.069 WITHDRAWN
PDU_ML3_CC_NW_MS cc, // call control; call related SS messages <-24.008, implemented
octetstring gttp, // GPRS Transparent Transport Protocol <- not required in MSC
PDU_ML3_MM mm, // mobility management messages <- 24.008,
PDU_RRM_NW_MS rrm, // radio resource management messages <- 24.008, 24.018
octetstring gprs_mm, // GPRS mobility management messages <- Not required in MSC
// but implemented as L3_GMM_SGSN_MS in L3_Types (SGSN)
L3_SMS_SGSN_MS sms, // SMS messages
//<-24.011, imported from L3_SMS_Types
octetstring gprs_sm, // GPRS session management messages <- not required in MSC
// but impl. as L3_GMM_MS_SGSN in L3_GSM_SGSN_MS_Types
PDU_ML3_SS_NW_MS ss, // non call related SS messages
//<- 24.080 ASN1 or implemented by ethgbh
octetstring loc, // Location services(LCS) <- 24.030
octetstring reserved
};
// ref: 24.007/11.2.3.1.1 "Protocol discriminator" and
// Table 11.2 "Protocol dicriminator values"
type record PDU_ML3_NW_MS
{
BIT4 discriminator, //24.008/10.2
TiOrSkip tiOrSkip, //24.008/10.3
ML3_Discr_NW_MS msgs
} with { variant (msgs)"CROSSTAG(
gcc, discriminator='0000'B;
bcc, discriminator='0001'B;
cc, discriminator='0011'B;
gttp, discriminator='0100'B;
mm, discriminator='0101'B;
rrm, discriminator='0110'B;
gprs_mm, discriminator='1000'B;
sms, discriminator='1001'B;
gprs_sm, discriminator='1010'B;
ss, discriminator='1011'B;
loc, discriminator='1100'B;
reserved, { discriminator='0010'B,
discriminator='0111'B,
discriminator='1101'B,
discriminator='1110'B,
discriminator='1111'B }
)";
variant (tiOrSkip)"CROSSTAG(
skipIndicator, { discriminator='0000'B,
discriminator='0001'B,
discriminator='0010'B,
discriminator='0100'B,
discriminator='0101'B,
discriminator='0110'B,
discriminator='0111'B,
discriminator='1000'B,
discriminator='1100'B,
discriminator='1101'B,
discriminator='1110'B,
discriminator='1111'B };
transactionId, { discriminator='0011'B,
discriminator='1001'B,
discriminator='1011'B,
discriminator='1010'B }
)";
};
type union ML3_Discr_MS_NW
{
octetstring gcc, //group call control
octetstring bcc, // broadcast call control
PDU_ML3_CC_MS_NW cc, // call control; call related SS messages
octetstring gttp, // GPRS Transparent Transport Protocol
PDU_ML3_MM mm, // mobility management messages
PDU_RRM_MS_NW rrm, // radio resource management messages
octetstring gprs_mm, // GPRS mobility management messages
L3_SMS_MS_SGSN sms, // SMS messages
octetstring gprs_sm, // GPRS session management messages
PDU_ML3_SS_MS_NW ss, // non call related SS messages
octetstring loc, // Location services
octetstring reserved
};
type record PDU_ML3_MS_NW
{
BIT4 discriminator,
TiOrSkip tiOrSkip,
ML3_Discr_MS_NW msgs
} with { variant (msgs)"CROSSTAG(
gcc, discriminator='0000'B;
bcc, discriminator='0001'B;
cc, discriminator='0011'B;
gttp, discriminator='0100'B;
mm, discriminator='0101'B;
rrm, discriminator='0110'B;
gprs_mm, discriminator='1000'B;
sms, discriminator='1001'B;
gprs_sm, discriminator='1010'B;
ss, discriminator='1011'B;
loc, discriminator='1100'B;
reserved, { discriminator='0010'B,
discriminator='0111'B,
discriminator='1101'B,
discriminator='1110'B,
discriminator='1111'B }
)";
variant (tiOrSkip)"CROSSTAG(
skipIndicator, { discriminator='0000'B,
discriminator='0001'B,
discriminator='0010'B,
discriminator='0100'B,
discriminator='0101'B,
discriminator='0110'B,
discriminator='0111'B,
discriminator='1000'B,
discriminator='1100'B,
discriminator='1101'B,
discriminator='1110'B,
discriminator='1111'B };
transactionId, { discriminator='0011'B, //24.008/10.3.2
discriminator='1001'B,
discriminator='1011'B,
discriminator='1010'B } //24.008/10.3.2
)";
};
}//end of module
with {
extension "version R2A"
encode "RAW"
}