| /* 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. |
| * |
| * 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, |
| /* 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[3], |
| mncDigit1 := mcc_mnc[4], |
| mncDigit2 := mcc_mnc[5], |
| 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_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.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.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, |
| 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) |
| } |
| } |
| } |
| } |
| |
| /* 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.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) := { |
| 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 := omit, |
| old_P_TMSISignature := old_ptmsi_sig, |
| additionalGUTI := omit, |
| nonce := omit, |
| uENetworkCapability := omit, |
| 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 |
| 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.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) := { |
| 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 |
| } |
| } |
| } |
| } |
| 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 |
| 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 := * |
| } |
| } |
| } |
| } |
| |
| |
| |
| |
| |
| } |