| /////////////////////////////////////////////////////////////////////////////// |
| // // |
| // 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 |
| 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 R1B" |
| encode "RAW" |
| } |
| |