/* 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(hexstring mcc_mnc, OCT2 mmegi, OCT1 mmec, OCT4 tmsi) := {
	typeOfIdentity := '110'B,
	oddEvenInd_identity := {
		guti := ts_NAS_GUTI(mcc_mnc, mmegi, mmec, tmsi)
	}
}

/* 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(mcc_mnc, mmegi, mmec, tmsi)
}

template (value) PDU_NAS_EPS
ts_NAS_EMM_SecurityProtected(BIT4 sec_hdr_t, integer seq_nr, octetstring inner_nas) := {
	protocolDiscriminator := c_EPS_NAS_PD_EMM,
	ePS_messages := {
		ePS_MobilityManagement := {
			pDU_NAS_EPS_SecurityProtectedNASMessage := {
				securityHeaderType := sec_hdr_t,
				messageAuthenticationCode := '00000000'O,
				sequenceNumber := seq_nr,
				nAS_Message := inner_nas
			}
		}
	}
}
template (present) PDU_NAS_EPS
tr_NAS_EMM_SecurityProtected := {
	protocolDiscriminator := c_EPS_NAS_PD_EMM,
	ePS_messages := {
		ePS_MobilityManagement := {
			pDU_NAS_EPS_SecurityProtectedNASMessage := ?
		}
	}
}

const BIT3 NAS_PDN_T_IPv4 := '001'B;
const BIT3 NAS_PDN_T_IPv6 := '010'B;
const BIT3 NAS_PDN_T_IPv4v6 := '011'B;
const BIT3 NAS_PDN_T_NonIP := '101'B;


/*********************************************************************************
 * Mobility Management
 *********************************************************************************/

/* 8.2.1 Attach Accept */
template (value) PDU_NAS_EPS
ts_NAS_AttachAccept(template (value) EPS_AttachResultV result,
		    template (value) GPRSTimerV t3412,
		    template (value) TAI_Lists tai_lists,
		    template (value) octetstring esm_enc) := {
	protocolDiscriminator := c_EPS_NAS_PD_EMM,
	ePS_messages := {
		ePS_MobilityManagement := {
			pDU_NAS_EPS_AttachAccept := {
				securityHeaderType := c_EPS_SEC_NONE,
				messageType := '01000010'B,
				ePS_AttachResult := result,
				spare := '0000'B,
				t3412 := t3412,
				tAI_List := {
					lengthIndicator := 0,
					trackingAreaIdentityLists := tai_lists
				},
				eSM_MessageContainer := ts_NAS_EsmMsgContLVE(esm_enc),
				gUTI := omit,
				locationAreaIdentification := omit,
				msIdentity := omit,
				eMMCause := omit,
				t3402 := omit,
				t3423 := omit,
				equivalentPLMNs := omit,
				emergencyNumberList := omit,
				ePS_NetworkFeatureSupport := omit,
				additionalUpdateResult := omit,
				t3412_Extended := omit,
				t3324 := omit,
				extendedDRXParameters := omit,
				dNCID := omit,
				sMS_ServiceStatus := omit,
				non3GPP_NW_ProvidedPolicies := omit,
				t3448 := omit,
				networkPolicy := omit,
				t3447 := omit,
				extendedEmergencyNumberList := omit
			}
		}
	}
}
template (present) PDU_NAS_EPS
tr_NAS_AttachAccept(template (present) EPS_AttachResultV result := ?,
		    template (present) GPRSTimerV t3412 := ?,
		    template (present) TAI_Lists tai_lists := ?,
		    template (present) octetstring esm_enc := ?) := {
	protocolDiscriminator := c_EPS_NAS_PD_EMM,
	ePS_messages := {
		ePS_MobilityManagement := {
			pDU_NAS_EPS_AttachAccept := {
				securityHeaderType := c_EPS_SEC_NONE,
				messageType := '01000010'B,
				ePS_AttachResult := result,
				spare := ?,
				t3412 := t3412,
				tAI_List := {
					lengthIndicator := ?,
					trackingAreaIdentityLists := tai_lists
				},
				eSM_MessageContainer := tr_NAS_EsmMsgContLVE(esm_enc),
				gUTI := *,
				locationAreaIdentification := *,
				msIdentity := *,
				eMMCause := *,
				t3402 := *,
				t3423 := *,
				equivalentPLMNs := *,
				emergencyNumberList := *,
				ePS_NetworkFeatureSupport := *,
				additionalUpdateResult := *,
				t3412_Extended := *,
				t3324 := *,
				extendedDRXParameters := *,
				dNCID := *,
				sMS_ServiceStatus := *,
				non3GPP_NW_ProvidedPolicies := *,
				t3448 := *,
				networkPolicy := *,
				t3447 := *,
				extendedEmergencyNumberList := *
			}
		}
	}
}


/* 8.2.2 Attach Complete */
template (value) PDU_NAS_EPS
ts_NAS_AttachComplete(template (value) octetstring esm_enc) := {
	protocolDiscriminator := c_EPS_NAS_PD_EMM,
	ePS_messages := {
		ePS_MobilityManagement := {
			pDU_NAS_EPS_AttachComplete := {
				securityHeaderType := c_EPS_SEC_NONE,
				messageType := '01000011'B,
				eSM_MessageContainer := ts_NAS_EsmMsgContLVE(esm_enc)
			}
		}
	}
}
template (present) PDU_NAS_EPS
tr_NAS_AttachComplete(template (present) octetstring esm_enc := ?) := {
	protocolDiscriminator := c_EPS_NAS_PD_EMM,
	ePS_messages := {
		ePS_MobilityManagement := {
			pDU_NAS_EPS_AttachComplete := {
				securityHeaderType := c_EPS_SEC_NONE,
				messageType := '01000011'B,
				eSM_MessageContainer := tr_NAS_EsmMsgContLVE(esm_enc)
			}
		}
	}
}

/* 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.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(EPS_MobileIdentityLV old_guti) := {
	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 := omit,
				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 := omit,
				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.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 := *
			}
		}
	}
}





}
