diff options
Diffstat (limited to 'library/NAS_Templates.ttcn')
-rw-r--r-- | library/NAS_Templates.ttcn | 311 |
1 files changed, 301 insertions, 10 deletions
diff --git a/library/NAS_Templates.ttcn b/library/NAS_Templates.ttcn index f8198624..a3e01f75 100644 --- a/library/NAS_Templates.ttcn +++ b/library/NAS_Templates.ttcn @@ -1,4 +1,4 @@ -/* EPC (Evolved Packet Core) NAS (Non-Access Stratum) templates in TTCN-3 +/* 3GPP TS 24.301, EPC (Evolved Packet Core) NAS (Non-Access Stratum) templates in TTCN-3 * (C) 2019 Harald Welte <laforge@gnumonks.org> * All rights reserved. * @@ -44,6 +44,9 @@ tr_NAS_MM(template (present) EPS_MobilityManagement mm) := { } const BIT4 c_EPS_SEC_NONE := '0000'B; +const BIT4 c_EPS_SEC_IP := '0001'B; +const BIT4 c_EPS_SEC_IP_CIPH := '0010'B; + const BIT4 c_EPS_NAS_PD_EMM := '0111'B; const BIT4 c_EPS_NAS_PD_ESM := '0010'B; @@ -58,6 +61,16 @@ tr_NAS_EsmMsgContLVE(template (present) octetstring inp) := { content := inp } +/* 9.9.3.4A - 10.5.1.2/24.008 */ +template (value) CipheringKeySequenceNumberTV +ts_CipheringKeySequenceNumberTV(template (value) BIT3 key_seq) := { + keySequence := { + keySequence := key_seq, + spare := '0'B + }, + elementIdentifier := '1000'B +} + private template (value) MobileIdentityLV ts_NAS_MobileIdLV(template (value) MobileIdentityV mid) := { lengthIndicator := 0, @@ -111,13 +124,15 @@ private function f_enc_IMEI_SV(hexstring digits) return IMEI_SV { 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 */ + /* use the mcc_mnc format as specified in 3GPP TS 24.301, figure 9.9.3.12.1. + * Example: mcc=262, mnc=42 => 262f42. + * mcc=001, mnc=01 => 001f01. */ mccDigit1 := mcc_mnc[0], mccDigit2 := mcc_mnc[1], mccDigit3 := mcc_mnc[2], - mncDigit3 := mcc_mnc[5], - mncDigit1 := mcc_mnc[3], - mncDigit2 := mcc_mnc[4], + mncDigit3 := mcc_mnc[3], + mncDigit1 := mcc_mnc[4], + mncDigit2 := mcc_mnc[5], mMEGI := mmegi, mMEC := mmec, mTMSI := tmsi @@ -140,13 +155,84 @@ ts_NAS_MobileId_IMEI(hexstring imei) := { } template (value) EPS_MobileIdentityV -ts_NAS_MobileId_GUTI(hexstring mcc_mnc, OCT2 mmegi, OCT1 mmec, OCT4 tmsi) := { +ts_NAS_MobileId_GUTI_fields(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) EPS_MobileIdentityV +ts_NAS_MobileId_GUTI(template (value) GUTI guti) := { + typeOfIdentity := '110'B, + oddEvenInd_identity := { + guti := guti + } +} + +/* 9.9.3.12 EPS mobile identity */ +template (value) EPS_MobileIdentityLV +ts_EPS_MobileId_IMSI(hexstring imsi) := { + ePS_MobileIdentity := ts_NAS_MobileId_IMSI(imsi) +} + +template (value) EPS_MobileIdentityLV +ts_EPS_MobileId_IMEI(hexstring imei) := { + ePS_MobileIdentity := ts_NAS_MobileId_IMEI(imei) +} + +template (value) EPS_MobileIdentityLV +ts_EPS_MobileId_GUTI(hexstring mcc_mnc, OCT2 mmegi, OCT1 mmec, OCT4 tmsi) := { + ePS_MobileIdentity := ts_NAS_MobileId_GUTI_fields(mcc_mnc, mmegi, mmec, tmsi) +} + +template (value) EPS_MobileIdentityLV +ts_EPS_MobileId_GUTI_(template (value) GUTI guti) := { + ePS_MobileIdentity := ts_NAS_MobileId_GUTI(guti) +} + +/* 9.9.3.25 Nonce */ +template (value) NonceTV +ts_NonceTV(template (value) OCT4 nonce) := { + elementIdentifier := '55'O, + noncevalue := nonce +} +function f_ts_NonceTV(template (omit) OCT4 nonce) return template (omit) NonceTV { + if (istemplatekind(nonce, "omit")) { + return omit; + } + return ts_NonceTV(nonce); +} + +/* 9.9.3.26 P-TMSI signature */ +template (value) P_TMSISignatureTV +ts_PTMSI_SignatureTV(template (value) OCT3 ptmsi_sig) := { + elementIdentifier := '19'O, + valueField := ptmsi_sig +} + +/* 9.9.3.34 UE network capability */ +template (value) UENetworkCapabilityLV +ts_UENetworkCapabilityLV(template (value) UENetworkCapabilityV ue_net_cap) := { + lengthIndicator := 0, /* overwritten */ + uENetworkCapabilityV := ue_net_cap +} +template (value) UENetworkCapabilityTLV +ts_UENetworkCapabilityTLV(template (value) UENetworkCapabilityV ue_net_cap) := { + elementIdentifier := '58'O, + uENetworkCapabilityLV := ts_UENetworkCapabilityLV(ue_net_cap) +} + +/* 9.9.3.45 GUTI Type */ +const BIT1 GUTI_TYPE_NATIVE := '0'B; +const BIT1 GUTI_TYPE_MAPPED := '1'B; +template (value) GUTI_TypeTV +ts_GUTI_TypeTV(template (value) BIT1 guti_type) := { + gUTI_Type := guti_type, + spare := '000'B, + elementIdentifier := '1110'B +} + 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, @@ -298,6 +384,147 @@ tr_NAS_AttachComplete(template (present) octetstring esm_enc := ?) := { } } +/* 9.9.3.14 EPS update type */ +const BIT3 c_EPS_UPD_TYPE_TA_UPD := '000'B; +const BIT3 c_EPS_UPD_TYPE_COMB_TA_LA_UPD := '001'B; +const BIT3 c_EPS_UPD_TYPE_COMB_TA_LA_UPD_IMSI_ATTACH := '010'B; +const BIT3 c_EPS_UPD_TYPE_TA_UPD_PERIODIC := '011'B; +template (value) EPS_UpdateTypeV ts_EPS_UpdateTypeV(BIT3 typeOfUpdate := c_EPS_UPD_TYPE_TA_UPD, BIT1 activeFlag := '0'B) := { + typeOfUpdate := typeOfUpdate, + activeFlag := activeFlag +} + +/* 9.9.3.21 NAS key set identifier */ +const BIT3 c_NAS_KEY_SET_ID_NO_KEY := '111'B; +const BIT1 c_NAS_TSC_NATIVE_SEC_CTX := '0'B; +const BIT1 c_NAS_TSC_MAPPED_SEC_CTX := '1'B; +template (value) NAS_KeySetIdentifierV ts_NAS_KeySetIdentifierV(BIT3 identifier := c_NAS_KEY_SET_ID_NO_KEY, BIT1 tSC := c_NAS_TSC_NATIVE_SEC_CTX) := { + identifier := identifier, + tSC := tSC +} + +/* 8.2.26 Tracking Area Update Accept */ +template (present) PDU_NAS_EPS +tr_PDU_NAS_EPS_TrackingAreaUpdateAccept := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_TrackingAreaUpdateAccept := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01001001'B, + updateResult := { + valueOfUpdateResult := ?, + spare := '0'B + }, + spareHalfOctet := '0000'B, + t3412 := *, + gUTI := *, + tAI_List := *, + ePSBearerContextStatus := *, + locationAreaIdentification := *, + msIdentity := *, + eMMCause := *, + t3402 := *, + t3423 := *, + equivalentPLMNs := *, + emergencyNumberList := *, + ePS_NetworkFeatureSupport := *, + additionalUpdateResult := *, + t3412_Extended := *, + t3324 := *, + extendedDRXParameters := *, + headerCompressionConfigurationStatus := *, + dNCID := *, + sMS_ServiceStatus := *, + non3GPP_NW_ProvidedPolicies := *, + t3448 := *, + networkPolicy := *, + t3447 := *, + extendedEmergencyNumberList := * + } + } + } +} + +/* 8.2.27 Tracking Area Update Complete */ +template (value) PDU_NAS_EPS +ts_PDU_NAS_EPS_TrackingAreaUpdateComplete(template (value) BIT4 securityHeaderType := c_EPS_SEC_NONE) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_TrackingAreaUpdateComplete := { + securityHeaderType := securityHeaderType, + messageType := '01001010'B + } + } + } +} + +/* 8.2.28 Tracking Area Update Reject */ +template (present) PDU_NAS_EPS +tr_PDU_NAS_EPS_TrackingAreaUpdateReject(template (present) EMM_CauseV cause := ?) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_TrackingAreaUpdateReject := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01001011'B, + emmCause := cause, + t3346 := *, + extendedEmmCause := * + } + } + } +} + +/* 8.2.29 Tracking Area Update Request */ +template (value) PDU_NAS_EPS +ts_PDU_NAS_EPS_TrackingAreaUpdateRequest(template (value) EPS_MobileIdentityLV old_guti, + template (omit) P_TMSISignatureTV old_ptmsi_sig := omit, + template (omit) GUTI_TypeTV old_guti_type := omit, + template (omit) NonceTV nonce_ue := omit, + template (omit) CipheringKeySequenceNumberTV gprs_cksn := omit, + template (omit) UENetworkCapabilityTLV ue_net_cap := omit) := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_TrackingAreaUpdateRequest := { + securityHeaderType := c_EPS_SEC_NONE, + messageType := '01001000'B, + ePSupdateType := ts_EPS_UpdateTypeV, + nasKeySetId := ts_NAS_KeySetIdentifierV, + oldGUTI := old_guti, + nonCurrentNative_nasKeySetId := omit, + gprsCipheringKeySequenceNumber := gprs_cksn, + old_P_TMSISignature := old_ptmsi_sig, + additionalGUTI := omit, + nonce := nonce_ue, + uENetworkCapability := ue_net_cap, + lastVisitedRegisteredTAI := omit, + dRXParameter := omit, + uE_RadioCapabilityInfoUpdateNeeded := omit, + ePSBearerContextStatus := omit, + mSNetworkCapability := omit, + oldLocationAreaIdentification := omit, + tMSIStatusTV := omit, + mobileStationClassmark2 := omit, + mobileStationClassmark3 := omit, + supportedCodecList := omit, + additionalUpdateType := omit, + voiceDomainPrefandUEsettings := omit, + oldGUTI_Type := old_guti_type, + deviceProperties := omit, + mS_NetworkFeatureSupport := omit, + tMSIBasedNRIContainer := omit, + t3324 := omit, + t3412_Extended := omit, + extendedDRXParameters := omit, + uEAdditionalSecurityCapability := omit, + uEStatus := omit + } + } + } +} /* 8.2.3 Attach Reject */ template (value) PDU_NAS_EPS @@ -590,6 +817,25 @@ tr_NAS_AuthResp(template OCT16 res := ?) := { } } +/* 8.2.13 EMM information */ +template (present) PDU_NAS_EPS +tr_NAS_EMMInformation := { + protocolDiscriminator := c_EPS_NAS_PD_EMM, + ePS_messages := { + ePS_MobilityManagement := { + pDU_NAS_EPS_EMM_Information := { + securityHeaderType := ?, + messageType := '01100001'B, + fullNameForNetwork := *, + shortNameForNetwork := *, + localTimeZone := *, + universalTimeAndLocalTimeZone := *, + networkDaylightSavingTime := * + } + } + } +} + /* 8.2.18 Identity Request */ template (value) PDU_NAS_EPS ts_NAS_IdentityReq(template (value) IdentityType2V id_type) := { @@ -928,6 +1174,55 @@ ts_NAS_ActDefEpsBearCtxReq(template (value) BIT4 bearer_id, } } } +template (present) PDU_NAS_EPS +tr_NAS_ActDefEpsBearCtxReq(template (present) BIT4 bearer_id := ?, + template (present) BIT8 proc_tid := ?, + template (present) EPS_QualityOfServiceV qos := ?, + template (present) octetstring apn := ?, + template (present) BIT3 addr_type := ?, + template (present) 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 := ?, + ePS_QualityOfServiceV := qos + }, + accessPointName := { + lengthIndicator := 0, + accessPointNameValue := apn + }, + pDN_Address := { + lengthIndicator := 0, + typeValue := addr_type, + spare := '00000'B, + addressInformation := addr_info + }, + transactionIdentifier := *, + negotiatedQoS := *, + negotiated_LLC_SAPI := *, + radioPriority := *, + packetFlowID := *, + aPN_AMBR := *, + esmCause := *, + protocolConfigOptions := *, + connectivityType := *, + wLANOffloadIndication := *, + nBIFOMContainer := *, + headerCompressinConfiguration := *, + controlPlaneOnlyIndication := *, + extendedProtocolConfigurationOptions := *, + servingPLMNRateControl := *, + extended_APN_AMBR := *, + extendedQoS := * + } + } + } +} /* 8.3.4 Activate Default EPS Bearer Context Accept */ template (value) PDU_NAS_EPS @@ -1004,8 +1299,4 @@ tr_NAS_ActDefEpsBearCtxRej(template (present) BIT4 bearer_id := ?, } } - - - - } |