From fc5f6375054c2591c4a5f799d90c1d10c408ebaf Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Tue, 9 Jul 2019 14:10:05 +0800 Subject: [PATCH] library: Add initial set of LTE/EPC NAS templates Change-Id: I53a598011041d642f03dcd9cca128f4e9da4adfd --- deps/Makefile | 1 + library/NAS_Templates.ttcn | 1011 ++++++++++++++++++++++++++++++++++++ mme/gen_links.sh | 5 + 3 files changed, 1017 insertions(+) create mode 100644 library/NAS_Templates.ttcn diff --git a/deps/Makefile b/deps/Makefile index cdca8f132..61afb3769 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -51,6 +51,7 @@ ECLIPSEGIT2_REPOS= titan.ProtocolModules.GRE \ titan.ProtocolModules.GTPv2_v13.7.0 \ titan.ProtocolModules.ISUP_Q.762 \ titan.ProtocolModules.MobileL3_v13.4.0 \ + titan.ProtocolModules.NAS_EPS_15.2.0.1 \ titan.ProtocolModules.NS_v7.3.0 \ titan.ProtocolModules.SNDCP_v7.0.0 \ titan.ProtocolEmulations.SCCP diff --git a/library/NAS_Templates.ttcn b/library/NAS_Templates.ttcn new file mode 100644 index 000000000..f81986241 --- /dev/null +++ b/library/NAS_Templates.ttcn @@ -0,0 +1,1011 @@ +/* EPC (Evolved Packet Core) NAS (Non-Access Stratum) templates in TTCN-3 + * (C) 2019 Harald Welte + * All rights reserved. + * + * Released under the terms of GNU General Public License, Version 2 or + * (at your option) any later version. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +module NAS_Templates { + +import from General_Types all; +import from NAS_EPS_Types all; + +template (value) PDU_NAS_EPS +ts_NAS_SM(template (value) EPS_SessionManagement sm) := { + protocolDiscriminator := '0010'B, + ePS_messages := { + ePS_SessionManagement := sm + } +} +template (present) PDU_NAS_EPS +tr_NAS_SM(template (present) EPS_SessionManagement sm) := { + protocolDiscriminator := '0010'B, + ePS_messages := { + ePS_SessionManagement := sm + } +} + +template (value) PDU_NAS_EPS +ts_NAS_MM(template (value) EPS_MobilityManagement mm) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := mm + } +} +template (present) PDU_NAS_EPS +tr_NAS_MM(template (present) EPS_MobilityManagement mm) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := mm + } +} + +const BIT4 c_EPS_SEC_NONE := '0000'B; +const BIT4 c_EPS_NAS_PD_EMM := '0111'B; +const BIT4 c_EPS_NAS_PD_ESM := '0010'B; + +private template (value) ESM_MessageContainerLVE +ts_NAS_EsmMsgContLVE(template (value) octetstring inp) := { + lengthIndicator := 0, + content := inp +} +private template (present) ESM_MessageContainerLVE +tr_NAS_EsmMsgContLVE(template (present) octetstring inp) := { + lengthIndicator := ?, + content := inp +} + +private template (value) MobileIdentityLV +ts_NAS_MobileIdLV(template (value) MobileIdentityV mid) := { + lengthIndicator := 0, + mobileIdentityV := mid +} +private template (present) MobileIdentityLV +tr_NAS_MobileIdLV(template (present) MobileIdentityV mid) := { + lengthIndicator := ?, + mobileIdentityV := mid +} + +private function f_enc_IMSI_NAS(hexstring digits) return IMSI { + var IMSI l3; + var integer len := lengthof(digits); + if (len rem 2 == 1) { /* modulo remainder */ + l3.oddevenIndicator := '1'B; + l3.fillerDigit := omit; + } else { + l3.oddevenIndicator := '0'B; + l3.fillerDigit := '1111'B; + } + l3.digits := digits; + return l3; +} + +private function f_enc_IMEI_NAS(hexstring digits) return IMEI { + var IMEI l3; + var integer len := lengthof(digits); + if (len rem 2 == 1) { /* modulo remainder */ + l3.oddevenIndicator := '1'B; + } else { + l3.oddevenIndicator := '0'B; + } + l3.digits := digits; + return l3; +} + +private function f_enc_IMEI_SV(hexstring digits) return IMEI_SV { + var IMEI_SV l3; + var integer len := lengthof(digits); + if (len rem 2 == 1) { /* modulo remainder */ + l3.oddevenIndicator := '1'B; + } else { + l3.oddevenIndicator := '0'B; + } + l3.digits := digits; + l3.fillerDigit := '1111'B; + return l3; +} + +template (value) GUTI ts_NAS_GUTI(hexstring mcc_mnc, OCT2 mmegi, OCT1 mmec, OCT4 tmsi) := { + oddevenIndicator := '0'B, + spare := '1111'B, + /* mcc_mnc specified in format 262f42 */ + mccDigit1 := mcc_mnc[0], + mccDigit2 := mcc_mnc[1], + mccDigit3 := mcc_mnc[2], + mncDigit3 := mcc_mnc[5], + mncDigit1 := mcc_mnc[3], + mncDigit2 := mcc_mnc[4], + mMEGI := mmegi, + mMEC := mmec, + mTMSI := tmsi +} + +template (value) EPS_MobileIdentityV +ts_NAS_MobileId_IMSI(hexstring imsi) := { + typeOfIdentity := '001'B, + oddEvenInd_identity := { + imsi := f_enc_IMSI_NAS(imsi) + } +} + +template (value) EPS_MobileIdentityV +ts_NAS_MobileId_IMEI(hexstring imei) := { + typeOfIdentity := '011'B, + oddEvenInd_identity := { + imei := f_enc_IMEI_NAS(imei) + } +} + +template (value) EPS_MobileIdentityV +ts_NAS_MobileId_GUTI(hexstring mcc_mnc, OCT2 mmegi, OCT1 mmec, OCT4 tmsi) := { + typeOfIdentity := '110'B, + oddEvenInd_identity := { + guti := ts_NAS_GUTI(mcc_mnc, mmegi, mmec, tmsi) + } +} + +template (value) PDU_NAS_EPS +ts_NAS_EMM_SecurityProtected(BIT4 sec_hdr_t, integer seq_nr, octetstring inner_nas) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_SecurityProtectedNASMessage := { + securityHeaderType := sec_hdr_t, + messageAuthenticationCode := '00000000'O, + sequenceNumber := seq_nr, + nAS_Message := inner_nas + } + } + } +} +template (present) PDU_NAS_EPS +tr_NAS_EMM_SecurityProtected := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_SecurityProtectedNASMessage := ? + } + } +} + +const BIT3 NAS_PDN_T_IPv4 := '001'B; +const BIT3 NAS_PDN_T_IPv6 := '010'B; +const BIT3 NAS_PDN_T_IPv4v6 := '011'B; +const BIT3 NAS_PDN_T_NonIP := '101'B; + + +/********************************************************************************* + * Mobility Management + *********************************************************************************/ + +/* 8.2.1 Attach Accept */ +template (value) PDU_NAS_EPS +ts_NAS_AttachAccept(template (value) EPS_AttachResultV result, + template (value) GPRSTimerV t3412, + template (value) TAI_Lists tai_lists, + template (value) octetstring esm_enc) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_AttachAccept := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01000010'B, + ePS_AttachResult := result, + spare := '0000'B, + t3412 := t3412, + tAI_List := { + lengthIndicator := 0, + trackingAreaIdentityLists := tai_lists + }, + eSM_MessageContainer := ts_NAS_EsmMsgContLVE(esm_enc), + gUTI := omit, + locationAreaIdentification := omit, + msIdentity := omit, + eMMCause := omit, + t3402 := omit, + t3423 := omit, + equivalentPLMNs := omit, + emergencyNumberList := omit, + ePS_NetworkFeatureSupport := omit, + additionalUpdateResult := omit, + t3412_Extended := omit, + t3324 := omit, + extendedDRXParameters := omit, + dNCID := omit, + sMS_ServiceStatus := omit, + non3GPP_NW_ProvidedPolicies := omit, + t3448 := omit, + networkPolicy := omit, + t3447 := omit, + extendedEmergencyNumberList := omit + } + } + } +} +template (present) PDU_NAS_EPS +tr_NAS_AttachAccept(template (present) EPS_AttachResultV result := ?, + template (present) GPRSTimerV t3412 := ?, + template (present) TAI_Lists tai_lists := ?, + template (present) octetstring esm_enc := ?) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_AttachAccept := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01000010'B, + ePS_AttachResult := result, + spare := ?, + t3412 := t3412, + tAI_List := { + lengthIndicator := ?, + trackingAreaIdentityLists := tai_lists + }, + eSM_MessageContainer := tr_NAS_EsmMsgContLVE(esm_enc), + gUTI := *, + locationAreaIdentification := *, + msIdentity := *, + eMMCause := *, + t3402 := *, + t3423 := *, + equivalentPLMNs := *, + emergencyNumberList := *, + ePS_NetworkFeatureSupport := *, + additionalUpdateResult := *, + t3412_Extended := *, + t3324 := *, + extendedDRXParameters := *, + dNCID := *, + sMS_ServiceStatus := *, + non3GPP_NW_ProvidedPolicies := *, + t3448 := *, + networkPolicy := *, + t3447 := *, + extendedEmergencyNumberList := * + } + } + } +} + + +/* 8.2.2 Attach Complete */ +template (value) PDU_NAS_EPS +ts_NAS_AttachComplete(template (value) octetstring esm_enc) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_AttachComplete := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01000011'B, + eSM_MessageContainer := ts_NAS_EsmMsgContLVE(esm_enc) + } + } + } +} +template (present) PDU_NAS_EPS +tr_NAS_AttachComplete(template (present) octetstring esm_enc := ?) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_AttachComplete := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01000011'B, + eSM_MessageContainer := tr_NAS_EsmMsgContLVE(esm_enc) + } + } + } +} + + +/* 8.2.3 Attach Reject */ +template (value) PDU_NAS_EPS +ts_NAS_AttachReject(template (value) EMM_CauseV cause) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_AttachReject := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01000100'B, + emmCause := cause, + eSM_MessageContainer := omit, + t3346 := omit, + t3402 := omit, + extendedEmmCause := omit + } + } + } +} +template (present) PDU_NAS_EPS +tr_NAS_AttachReject(template (present) EMM_CauseV cause := ?) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_AttachReject := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01000100'B, + emmCause := cause, + eSM_MessageContainer := omit, + t3346 := omit, + t3402 := omit, + extendedEmmCause := omit + } + } + } +} + +/* 8.2.4 Attach Request */ +template (value) PDU_NAS_EPS +ts_NAS_AttachRequest(template (value) BIT3 att_type, + template (value) BIT3 kset_id, + template (value) EPS_MobileIdentityV mobile_id, + template (value) UENetworkCapabilityV ue_net_cap, + template (value) octetstring esm_enc) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_AttachRequest := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01000001'B, + ePS_attachType := { + typeOfAttach := att_type, + spare := '0'B + }, + nasKeySetId := { + identifier := kset_id, + tSC := '1'B + }, + ePSMobileId := { + lengthIndicator := 0, + ePS_MobileIdentity := mobile_id + }, + uENetworkCapability := { + lengthIndicator := 0, + uENetworkCapabilityV := ue_net_cap + }, + eSM_MessageContainer := ts_NAS_EsmMsgContLVE(esm_enc), + old_P_TMSISignature := omit, + additionalGUTI := omit, + lastVisitedRegisteredTAI := omit, + dRXParameter := omit, + mSNetworkCapability := omit, + oldLocationAreaIdentification := omit, + tMSIStatusTV := omit, + mobileStationClassmark2 := omit, + mobileStationClassmark3 := omit, + supportedCodecList := omit, + additionalUpdateType := omit, + voiceDomainPrefandUEsettings := omit, + deviceProperties := omit, + oldGUTI_Type := omit, + mS_NetworkFeatureSupport := omit, + tMSIBasedNRIContainer := omit, + t3324 := omit, + t3412_Extended := omit, + extendedDRXParameters := omit, + uEAdditionalSecurityCapability := omit + } + } + } +} +template (present) PDU_NAS_EPS +tr_NAS_AttachRequest(template (present) BIT3 att_type := ?, + template (present) BIT3 kset_id := ?, + template (present) EPS_MobileIdentityV mobile_id := ?, + template (present) UENetworkCapabilityV ue_net_cap := ?, + template (present) octetstring esm_enc := ?) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_AttachRequest := { + securityHeaderType := ?, + messageType := '01000001'B, + ePS_attachType := { + typeOfAttach := att_type, + spare := ? + }, + nasKeySetId := { + identifier := kset_id, + tSC := ? + }, + ePSMobileId := { + lengthIndicator := ?, + ePS_MobileIdentity := mobile_id + }, + uENetworkCapability := { + lengthIndicator := ?, + uENetworkCapabilityV := ue_net_cap + }, + eSM_MessageContainer := tr_NAS_EsmMsgContLVE(esm_enc), + old_P_TMSISignature := *, + additionalGUTI := *, + lastVisitedRegisteredTAI := *, + dRXParameter := *, + mSNetworkCapability := *, + oldLocationAreaIdentification := *, + tMSIStatusTV := *, + mobileStationClassmark2 := *, + mobileStationClassmark3 := *, + supportedCodecList := *, + additionalUpdateType := *, + voiceDomainPrefandUEsettings := *, + deviceProperties := *, + oldGUTI_Type := *, + mS_NetworkFeatureSupport := *, + tMSIBasedNRIContainer := *, + t3324 := *, + t3412_Extended := *, + extendedDRXParameters := *, + uEAdditionalSecurityCapability := * + } + } + } +} + + +/* 8.2.5 Authentication Failure */ +template (value) PDU_NAS_EPS +ts_NAS_AuthFail(template (value) EMM_CauseV cause /* template (omit) OCT14 auth_fail_par */) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_AuthenticationFailure := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01011100'B, + emmCause := cause, + authenticationFailureParameter := omit + } + } + } +} +template (value) PDU_NAS_EPS +ts_NAS_AuthFail_par(template (value) EMM_CauseV cause, + template (value) OCT14 auth_fail_par) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_AuthenticationFailure := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01011100'B, + emmCause := cause, + authenticationFailureParameter := { + elementIdentifier := '30'O, + lengthIndicator := lengthof(auth_fail_par), + authenticationFailureParameter := auth_fail_par + } + } + } + } +} + +/* 8.2.6 Authentication Reject */ +template (value) PDU_NAS_EPS +ts_NAS_AuthRej := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_AuthenticationReject := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01010100'B + } + } + } +} +template (present) PDU_NAS_EPS +tr_NAS_AuthRej := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_AuthenticationReject := { + securityHeaderType := ?, + messageType := '01010100'B + } + } + } +} + +/* 8.2.7 Authentication Request */ +template (value) PDU_NAS_EPS +ts_NAS_AuthReq(template (value) NAS_KeySetIdentifierV kset_id, + OCT16 rand, OCT16 autn) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_AuthenticationRequest := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01010010'B, + nasKeySetId := kset_id, + spare := '0000'B, + authenticationParameterRAND := { + rAND := rand + }, + authenticationParameterAUTN := { + lengthIndicator := lengthof(autn), + aUTN := autn + } + } + } + } +} +template (present) PDU_NAS_EPS +tr_NAS_AuthReq(template (present) NAS_KeySetIdentifierV kset_id := ?, + template (present) OCT16 rand := ?, + template (present) OCT16 autn := ?) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_AuthenticationRequest := { + securityHeaderType := ?, + messageType := '01010010'B, + nasKeySetId := kset_id, + spare := '0000'B, + authenticationParameterRAND := { + rAND := rand + }, + authenticationParameterAUTN := { + lengthIndicator := ?, + aUTN := autn + } + } + } + } +} + +/* 8.2.8 Authentication Response */ +template (value) PDU_NAS_EPS +ts_NAS_AuthResp(octetstring res) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_AuthenticationResponse := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01010011'B, + authenticationResponseParameter := { + lengthIndicator := lengthof(res), + authenticationResponseParameter := { + rES := res + } + } + } + } + } +} +template (present) PDU_NAS_EPS +tr_NAS_AuthResp(template OCT16 res := ?) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_AuthenticationResponse := { + securityHeaderType := ?, + messageType := '01010011'B, + authenticationResponseParameter := { + lengthIndicator := ?, + authenticationResponseParameter := { + rES := res + } + } + } + } + } +} + +/* 8.2.18 Identity Request */ +template (value) PDU_NAS_EPS +ts_NAS_IdentityReq(template (value) IdentityType2V id_type) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_IdentityRequest := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01010101'B, + identityType := id_type, + spareHalfOctet := '0000'B + } + } + } +} +template (present) PDU_NAS_EPS +tr_NAS_IdentityReq(template (present) IdentityType2V id_type := ?) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_IdentityRequest := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01010101'B, + identityType := id_type, + spareHalfOctet := ? + } + } + } +} + +/* 8.2.19 Identity Response */ +template (value) PDU_NAS_EPS +ts_NAS_IdentityResp(template (value) MobileIdentityV mobile_id) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_IdentityResponse := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01010110'B, + mobileIdentity := ts_NAS_MobileIdLV(mobile_id) + } + } + } +} +template (present) PDU_NAS_EPS +tr_NAS_IdentityResp(template (present) MobileIdentityV mobile_id := ?) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_IdentityResponse := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01010110'B, + mobileIdentity := tr_NAS_MobileIdLV(mobile_id) + } + } + } +} + + + + +/* 8.2.20 Security Mode Command */ +template (value) PDU_NAS_EPS +ts_NAS_SecModeCmd(template (value) NAS_SecurityAlgorithmsV alg, + template (value) NAS_KeySetIdentifierV kset_id, + template (value) UESecurityCapabilityLV ue_sec_cap) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_SecurityModeCommand := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01011101'B, + selected_NAS_SecurityAlgorithms := alg, + nasKeySetId := kset_id, + spareHalfOctet := '0000'B, + replayed_UE_SecurityCapability := ue_sec_cap, + iMEISV_Request := omit, + replayedNonceUE := omit, + nonceMME := omit, + hashMME := omit, + uEAdditionalSecurityCapability := omit + } + } + } +} +template (present) PDU_NAS_EPS +tr_NAS_SecModeCmd(template (present) NAS_SecurityAlgorithmsV alg := ?, + template (present) NAS_KeySetIdentifierV kset_id := ?, + template (present) UESecurityCapabilityLV ue_sec_cap := ?) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_SecurityModeCommand := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01011101'B, + selected_NAS_SecurityAlgorithms := alg, + nasKeySetId := kset_id, + spareHalfOctet := ?, + replayed_UE_SecurityCapability := ue_sec_cap, + iMEISV_Request := *, + replayedNonceUE := *, + nonceMME := *, + hashMME := *, + uEAdditionalSecurityCapability := * + } + } + } +} + +/* 8.2.21 Security Mode Complete */ +template (value) PDU_NAS_EPS +ts_NAS_SecModeCmpl := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_SecurityModeComplete := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01011110'B, + iMEISV := omit, + replayedNASMessageContainer := omit + } + } + } +} +template (present) PDU_NAS_EPS +tr_NAS_SecModeCmpl := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_SecurityModeComplete := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01011110'B, + iMEISV := *, + replayedNASMessageContainer := * + } + } + } +} + +/********************************************************************************* + * Session Management + *********************************************************************************/ + +/* 9.9.4.11 - 10.5.6.3/24.008 */ +private function ts_NAS_PCO_TLV(template (omit) ProtocolConfigOptionsV pco) +return template (omit) ProtocolConfigOptionsTLV { + var template (value) ProtocolConfigOptionsTLV ret; + if (istemplatekind(pco, "omit")) { + return omit; + } + ret := { + elementIdentifier := '27'O, + protocolConfigOptions := { + lengthIndicator := 0, + protocolConfigOptionsV := pco + } + } + return ret; +} +private function tr_NAS_PCO_TLV(template ProtocolConfigOptionsV pco := ?) +return template ProtocolConfigOptionsTLV { + var template ProtocolConfigOptionsTLV ret := { + elementIdentifier := '27'O, + protocolConfigOptions := { + lengthIndicator := ?, + protocolConfigOptionsV := pco + } + } + if (istemplatekind(pco, "omit")) { + return omit; + } else if (istemplatekind(pco, "*")) { + return *; + } else { + return ret; + } +} + + + +/* 8.3.20 PDN Connectivity Request */ +template (value) PDU_NAS_EPS +ts_NAS_PdnConnReq(template (value) BIT4 bearer_id, + template (value) BIT8 proc_tid, + template (value) BIT3 pdn_type, + template (value) BIT3 req_type) := { + protocolDiscriminator := c_EPS_NAS_PD_ESM, + ePS_messages := { + ePS_SessionManagement := { + pDU_NAS_EPS_PDN_ConnectivityRequest := { + ePSBearerIdentity := bearer_id, + procedureTransactionIdentifier := proc_tid, + messageType := '11010000'B, + requestType := { + requestTypeValue := req_type, + spare := '0'B + }, + pDN_Type := { + pDN_TypeValue := pdn_type, + spare := '0'B + }, + eSM_InformationTransferFlag := omit, + accessPointName := omit, + protocolConfigOptions := omit, + deviceProperties := omit, + nBIFOMContainer := omit, + headerCompressinConfiguration := omit, + extendedProtocolConfigurationOptions := omit + } + } + } +} +template (present) PDU_NAS_EPS +tr_NAS_PdnConnReq(template (present) BIT4 bearer_id := ?, + template (present) BIT8 proc_tid := ?, + template (present) BIT3 pdn_type := ?, + template (present) BIT3 req_type := ?) := { + protocolDiscriminator := c_EPS_NAS_PD_ESM, + ePS_messages := { + ePS_SessionManagement := { + pDU_NAS_EPS_PDN_ConnectivityRequest := { + ePSBearerIdentity := bearer_id, + procedureTransactionIdentifier := proc_tid, + messageType := '11010000'B, + requestType := { + requestTypeValue := req_type, + spare := '0'B + }, + pDN_Type := { + pDN_TypeValue := pdn_type, + spare := '0'B + }, + eSM_InformationTransferFlag := omit, + accessPointName := omit, + protocolConfigOptions := omit, + deviceProperties := omit, + nBIFOMContainer := omit, + headerCompressinConfiguration := omit, + extendedProtocolConfigurationOptions := omit + } + } + } +} + +/* 8.3.19 PDN Connectivity Reject */ +template (value) PDU_NAS_EPS +ts_NAS_PdnConnRej(template (value) BIT4 bearer_id, + template (value) BIT8 proc_tid, + template (value) ESM_CauseV cause) := { + protocolDiscriminator := c_EPS_NAS_PD_ESM, + ePS_messages := { + ePS_SessionManagement := { + pDU_NAS_EPS_PDN_ConnectivityReject := { + ePSBearerIdentity := bearer_id, + procedureTransactionIdentifier := proc_tid, + messageType := '11010001'B, + esmCause := cause, + protocolConfigOptions := omit, + backOffTimer := omit, + reAttemptIndicator := omit, + nBIFOMContainer := omit, + extendedProtocolConfigurationOptions := omit + } + } + } +} +template (present) PDU_NAS_EPS +tr_NAS_PdnConnRej(template (present) BIT4 bearer_id := ?, + template (present) BIT8 proc_tid := ?, + template (present) ESM_CauseV cause := ?) := { + protocolDiscriminator := c_EPS_NAS_PD_ESM, + ePS_messages := { + ePS_SessionManagement := { + pDU_NAS_EPS_PDN_ConnectivityReject := { + ePSBearerIdentity := bearer_id, + procedureTransactionIdentifier := proc_tid, + messageType := '11010001'B, + esmCause := cause, + protocolConfigOptions := *, + backOffTimer := *, + reAttemptIndicator := *, + nBIFOMContainer := *, + extendedProtocolConfigurationOptions := * + } + } + } +} + + +/* 8.3.6 Activate Default EPS Bearer Context Request */ +template (value) PDU_NAS_EPS +ts_NAS_ActDefEpsBearCtxReq(template (value) BIT4 bearer_id, + template (value) BIT8 proc_tid, + template (value) EPS_QualityOfServiceV qos, + template (value) octetstring apn, + template (value) BIT3 addr_type, + template (value) octetstring addr_info) := { + protocolDiscriminator := c_EPS_NAS_PD_ESM, + ePS_messages := { + ePS_SessionManagement := { + pDU_NAS_EPS_ActDefEPSBearerContextRequest := { + ePSBearerIdentity := bearer_id, + procedureTransactionIdentifier := proc_tid, + messageType := '11000001'B, + ePS_QoS := { + lengthIndicator := 0, + ePS_QualityOfServiceV := qos + }, + accessPointName := { + lengthIndicator := 0, + accessPointNameValue := apn + }, + pDN_Address := { + lengthIndicator := 0, + typeValue := addr_type, + spare := '00000'B, + addressInformation := addr_info + }, + transactionIdentifier := omit, + negotiatedQoS := omit, + negotiated_LLC_SAPI := omit, + radioPriority := omit, + packetFlowID := omit, + aPN_AMBR := omit, + esmCause := omit, + protocolConfigOptions := omit, + connectivityType := omit, + wLANOffloadIndication := omit, + nBIFOMContainer := omit, + headerCompressinConfiguration := omit, + controlPlaneOnlyIndication := omit, + extendedProtocolConfigurationOptions := omit, + servingPLMNRateControl := omit, + extended_APN_AMBR := omit, + extendedQoS := omit + } + } + } +} + +/* 8.3.4 Activate Default EPS Bearer Context Accept */ +template (value) PDU_NAS_EPS +ts_NAS_ActDefEpsBearCtxAck(template (value) BIT4 bearer_id, + template (value) BIT8 proc_tid, + template (omit) ProtocolConfigOptionsV pco) := { + protocolDiscriminator := c_EPS_NAS_PD_ESM, + ePS_messages := { + ePS_SessionManagement := { + pDU_NAS_EPS_ActDefEPSBearerContextAccept := { + ePSBearerIdentity := bearer_id, + procedureTransactionIdentifier := proc_tid, + messageType := '11000010'B, + protocolConfigOptions := ts_NAS_PCO_TLV(pco), + extendedProtocolConfigurationOptions := omit + } + } + } +} +template (present) PDU_NAS_EPS +tr_NAS_ActDefEpsBearCtxAck(template (present) BIT4 bearer_id := ?, + template (present) BIT8 proc_tid := ?, + template ProtocolConfigOptionsV pco := *) := { + protocolDiscriminator := c_EPS_NAS_PD_ESM, + ePS_messages := { + ePS_SessionManagement := { + pDU_NAS_EPS_ActDefEPSBearerContextAccept := { + ePSBearerIdentity := bearer_id, + procedureTransactionIdentifier := proc_tid, + messageType := '11000010'B, + protocolConfigOptions := tr_NAS_PCO_TLV(pco), + extendedProtocolConfigurationOptions := * + } + } + } +} + + +/* 8.3.5 Activate Default EPS Bearer Context Reject */ +template (value) PDU_NAS_EPS +ts_NAS_ActDefEpsBearCtxRej(template (value) BIT4 bearer_id, + template (value) BIT8 proc_tid, + template (value) ESM_CauseV cause) := { + protocolDiscriminator := c_EPS_NAS_PD_ESM, + ePS_messages := { + ePS_SessionManagement := { + pDU_NAS_EPS_ActDefEPSBearerContextReject := { + ePSBearerIdentity := bearer_id, + procedureTransactionIdentifier := proc_tid, + messageType := '11000011'B, + esmCause := cause, + protocolConfigOptions := omit, + extendedProtocolConfigurationOptions := omit + } + } + } +} +template (present) PDU_NAS_EPS +tr_NAS_ActDefEpsBearCtxRej(template (present) BIT4 bearer_id := ?, + template (present) BIT8 proc_tid := ?, + template (present) ESM_CauseV cause := ?) := { + protocolDiscriminator := c_EPS_NAS_PD_ESM, + ePS_messages := { + ePS_SessionManagement := { + pDU_NAS_EPS_ActDefEPSBearerContextReject := { + ePSBearerIdentity := bearer_id, + procedureTransactionIdentifier := proc_tid, + messageType := '11000011'B, + esmCause := cause, + protocolConfigOptions := *, + extendedProtocolConfigurationOptions := * + } + } + } +} + + + + + +} diff --git a/mme/gen_links.sh b/mme/gen_links.sh index 1f2d85bf7..8c1da59f3 100755 --- a/mme/gen_links.sh +++ b/mme/gen_links.sh @@ -31,6 +31,10 @@ DIR=$BASEDIR/titan.ProtocolModules.SGsAP_13.2.0/src FILES="SGsAP_Types.ttcn" gen_links $DIR $FILES +DIR=$BASEDIR/titan.ProtocolModules.NAS_EPS_15.2.0.1/src +FILES="NAS_EPS_Types.ttcn" +gen_links $DIR $FILES + DIR=../library/s1ap FILES="S1AP_CommonDataTypes.asn S1AP_Constants.asn S1AP_Containers.asn S1AP_IEs.asn S1AP_PDU_Contents.asn S1AP_PDU_Descriptions.asn " @@ -42,6 +46,7 @@ FILES="Misc_Helpers.ttcn General_Types.ttcn GSM_Types.ttcn Osmocom_Types.ttcn Na FILES+="SGsAP_Templates.ttcn SGsAP_CodecPort.ttcn SGsAP_CodecPort_CtrlFunct.ttcn SGsAP_CodecPort_CtrlFunctDef.cc SGsAP_Emulation.ttcn DNS_Helpers.ttcn " FILES+="L3_Templates.ttcn " FILES+="S1AP_CodecPort.ttcn " +FILES+="NAS_Templates.ttcn " gen_links $DIR $FILES ignore_pp_results