diff --git a/library/NAS_Templates.ttcn b/library/NAS_Templates.ttcn
new file mode 100644
index 0000000..f819862
--- /dev/null
+++ b/library/NAS_Templates.ttcn
@@ -0,0 +1,1011 @@
+/* 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,
+	/* mcc_mnc specified in format 262f42 */
+	mccDigit1 := mcc_mnc[0],
+	mccDigit2 := mcc_mnc[1],
+	mccDigit3 := mcc_mnc[2],
+	mncDigit3 := mcc_mnc[5],
+	mncDigit1 := mcc_mnc[3],
+	mncDigit2 := mcc_mnc[4],
+	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)
+	}
+}
+
+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)
+			}
+		}
+	}
+}
+
+
+/* 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
+			}
+		}
+	}
+}
+
+/* 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 := *
+			}
+		}
+	}
+}
+
+
+
+
+
+}
