aboutsummaryrefslogtreecommitdiffstats
path: root/library/NAS_Templates.ttcn
diff options
context:
space:
mode:
Diffstat (limited to 'library/NAS_Templates.ttcn')
-rw-r--r--library/NAS_Templates.ttcn311
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 := ?,
}
}
-
-
-
-
}