404 lines
15 KiB
Plaintext
404 lines
15 KiB
Plaintext
///////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Copyright Test Competence Center (TCC) ETH 2016 //
|
|
// //
|
|
// The copyright to the computer program(s) herein is the property of TCC. //
|
|
// The program(s) may be used and/or copied only with the written permission //
|
|
// of TCC or in accordance with the terms and conditions stipulated in the //
|
|
// agreement/contract under which the program(s) has been supplied. //
|
|
// //
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// File: MobileL3_Types.ttcn
|
|
// Rev: R1B
|
|
// 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
|
|
octetstring 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
|
|
octetstring 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 R1B"
|
|
encode "RAW"
|
|
}
|
|
|