/* 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 := *
			}
		}
	}
}





}
