module SGsAP_Templates {

/* Templates for the SGsAP protocol as per 3GPP TS 29.118
 * (C) 2018 by Harald Welte <laforg@gnumonks.org>
 * All rights reserved.
 *
 * Released under the terms of the GNU General Public License, Version 2 or
 * (at your option) any later version.
 */

import from SGsAP_Types all;
import from GSM_Types all;
import from General_Types all;
import from MobileL3_CommonIE_Types all;

/* 9.4.2 */
template (value) EPS_LocationUpdateType ts_SGsAP_IE_EpsLuType(template (value) EPS_location_update_type lut) := {
	iEI := '00001010'B,
	lengthIndicator := 1,
	locationUpdateType := lut
}
template EPS_LocationUpdateType tr_SGsAP_IE_EpsLuType(template EPS_location_update_type lut) := {
	iEI := '00001010'B,
	lengthIndicator := 1,
	locationUpdateType := lut
}

/* 9.4.3 */
template (value) ErroneousMessage ts_SGsAP_IE_ErrMsg(template (value) octetstring err_msg) := {
	iEI := '00011011'B,
	lengthIndicator := lengthof(valueof(err_msg)),
	erroneousMessage := err_msg
}
template ErroneousMessage tr_SGsAP_IE_ErrMsg(template octetstring err_msg) := {
	iEI := '00011011'B,
	lengthIndicator := ?,
	erroneousMessage := err_msg
}


/* 9.4.6 */
private function ts_SGsAP_IMSI(hexstring digits) return template (value) IMSI {
	var template (value) IMSI imsi := {
		iEI := '00000001'B,
		lengthIndicator := lengthof(digits)/2 + 1,
		iMSI := {
			field1 := '001'B,
			parity := '0'B, /* even */
			digits := digits,
			fillerDigit := '1111'B /* even */
		}
	}
	if (lengthof(digits) mod 2 == 1) {
		/* odd number of digits */
		imsi.iMSI.parity := '1'B;
		imsi.iMSI.fillerDigit := omit;
	}
	return imsi;
}
private function ts_SGsAP_IMSI_omit(template (omit) hexstring digits) return template (omit) IMSI {
	if (istemplatekind(digits, "omit")) {
		return omit;
	} else {
		return ts_SGsAP_IMSI(valueof(digits));
	}
}
private function tr_SGsAP_IMSI(template hexstring digits) return template IMSI {
	if (istemplatekind(digits, "omit")) {
		return omit;
	} else if (istemplatekind(digits, "*")) {
		return *;
	}
	var template IMSI imsi := {
		iEI := '00000001'B,
		lengthIndicator := lengthof(digits)/2 + 1,
		iMSI := {
			field1 := '001'B,
			parity := '0'B, /* even */
			digits := digits,
			fillerDigit := '1111'B /* even */
		}
	}
	if (lengthof(digits) mod 2 == 1) {
		/* odd number of digits */
		/* odd number of digits */
		imsi.iMSI.parity := '1'B;
		imsi.iMSI.fillerDigit := omit;
	}
	return imsi;
}

/* 9.4.7 */
template (value) IMSI_DetachFromEPS_ServiceType ts_SGsAP_IE_DetServiceType(template (value) IMSI_detachFromEPS_serviceType st) := {
	iEI := '00010000'B,
	lengthIndicator := 1,
	serviceType := st
}
template IMSI_DetachFromEPS_ServiceType tr_SGsAP_IE_DetServiceType(template IMSI_detachFromEPS_serviceType st) := {
	iEI := '00010000'B,
	lengthIndicator := 1,
	serviceType := st
}

/* 9.4.8 */
template (value) IMSI_DetachFromNonEPS_ServiceType ts_SGsAP_IE_DetNonEpsServiceType(template (value) IMSI_detachFromNonEPS_serviceType st) := {
	iEI := '00010001'B,
	lengthIndicator := 1,
	serviceType := st
}
template IMSI_DetachFromNonEPS_ServiceType tr_SGsAP_IE_DetNonEpsServiceType(template IMSI_detachFromNonEPS_serviceType st) := {
	iEI := '00010001'B,
	lengthIndicator := 1,
	serviceType := st
}

/* 9.4.11 */
private function f_enc_mnc_digit3(GsmMnc mnc) return HEX1 {
	if (lengthof(mnc) == 2) {
		return 'F'H;
	} else {
		return mnc[2];
	}
}
template (value) LocationAreaIdValue ts_SGsAP_LAI(GsmMcc mcc, GsmMnc mnc, GsmLac lac) := {
	mccDigit1 := mcc[0],
	mccDigit2 := mcc[1],
	mccDigit3 := mcc[2],
	mncDigit3 := f_enc_mnc_digit3(mnc),
	mncDigit1 := mnc[0],
	mncDigit2 := mnc[1],
	lac := int2oct(lac, 2)
}
template (value) LocationAreaId ts_SGsAP_IE_Lai(template (value) LocationAreaIdValue lai) := {
	iEI := '00000100'B,
	lengthIndicator := 5,
	locationAreaId := lai
}
template LocationAreaId tr_SGsAP_IE_Lai(template LocationAreaIdValue lai) := {
	iEI := '00000100'B,
	lengthIndicator := 5,
	locationAreaId := lai
}
function ts_SGsAP_IE_Lai_omit(template (omit) LocationAreaIdValue lai) return template (omit) LocationAreaId {
	if (istemplatekind(lai, "omit")) {
		return omit;
	} else {
		return ts_SGsAP_IE_Lai(lai);
	}
}
function tr_SGsAP_IE_Lai_omit(template LocationAreaIdValue lai) return template LocationAreaId {
	if (istemplatekind(lai, "omit")) {
		return omit;
	} else if (istemplatekind(lai, "*")) {
		return *;
	} else {
		return tr_SGsAP_IE_Lai(lai);
	}
}



/* 9.4.12 */
template (value) MM_Information ts_SGsAP_IE_MmInfo(template (value) octetstring mm_info) := {
	iEI := '00010111'B,
	lengthIndicator := lengthof(valueof(mm_info)),
	information := mm_info
}
template MM_Information tr_SGsAP_IE_MmInfo(template octetstring mm_info) := {
	iEI := '00010111'B,
	lengthIndicator := ?,
	information := mm_info
}



/* 9.4.13 */
template (value) MME_Name ts_SGsAP_IE_MmeName(template (value) octetstring name) := {
	iEI := '00001001'B,
	lengthIndicator := lengthof(valueof(name)),
	name := name
};
template MME_Name tr_SGsAP_IE_MmeName(template octetstring name) := {
	iEI := '00001001'B,
	lengthIndicator := ?,
	name := name
};

/* 9.4.14 */
function f_l3_to_sgs_id(MobileIdentityLV l3) return MobileIdentityValue {
	var OddEvenInd_Identity l3v := l3.mobileIdentityV.oddEvenInd_identity;
	var MobileIdentityValue ret;
	ret.typeOfIdentity := l3.mobileIdentityV.typeOfIdentity;
	if (ischosen(l3v.imei)) {
		ret.iD.imei.oddevenIndicator := l3v.imei.oddevenIndicator;
		ret.iD.imei.digits := l3v.imei.digits;
	} else if (ischosen(l3v.imsi)) {
		ret.iD.imsi.oddevenIndicator := l3v.imsi.oddevenIndicator;
		ret.iD.imsi.digits := l3v.imsi.digits;
		ret.iD.imsi.fillerDigit := l3v.imsi.fillerDigit;
	} else if (ischosen(l3v.imei_sv)) {
		ret.iD.imei_sv.oddevenIndicator := l3v.imei_sv.oddevenIndicator;
		ret.iD.imei_sv.digits := l3v.imei_sv.digits;
		ret.iD.imei_sv.fillerDigit := l3v.imei_sv.fillerDigit;
	} else if (ischosen(l3v.tmsi_ptmsi)) {
		ret.iD.tmsi_ptmsi.oddevenIndicator := l3v.tmsi_ptmsi.oddevenIndicator;
		ret.iD.tmsi_ptmsi.fillerDigit := l3v.tmsi_ptmsi.fillerDigit;
		ret.iD.tmsi_ptmsi.octets := l3v.tmsi_ptmsi.octets;
	} else if (ischosen(l3v.tmgi_and_MBMS_SessionID)) {
		ret.iD.tmgi_and_MBMS_SessionID.oddevenIndicator := l3v.tmgi_and_MBMS_SessionID.oddevenIndicator;
		ret.iD.tmgi_and_MBMS_SessionID.mCC_MNCIndicator := l3v.tmgi_and_MBMS_SessionID.mCC_MNCIndicator;
		ret.iD.tmgi_and_MBMS_SessionID.mBMS_SessionIdentityIndicator := l3v.tmgi_and_MBMS_SessionID.mBMS_SessionIdentityIndicator;
		ret.iD.tmgi_and_MBMS_SessionID.spare := l3v.tmgi_and_MBMS_SessionID.spare;
		ret.iD.tmgi_and_MBMS_SessionID.mBMS_ServiceID := l3v.tmgi_and_MBMS_SessionID.mBMS_ServiceID;
		ret.iD.tmgi_and_MBMS_SessionID.mccDigit1 := l3v.tmgi_and_MBMS_SessionID.mccDigit1;
		ret.iD.tmgi_and_MBMS_SessionID.mccDigit2 := l3v.tmgi_and_MBMS_SessionID.mccDigit2;
		ret.iD.tmgi_and_MBMS_SessionID.mccDigit3 := l3v.tmgi_and_MBMS_SessionID.mccDigit3;
		ret.iD.tmgi_and_MBMS_SessionID.mccDigit3 := l3v.tmgi_and_MBMS_SessionID.mccDigit3;
		ret.iD.tmgi_and_MBMS_SessionID.mccDigit1 := l3v.tmgi_and_MBMS_SessionID.mccDigit1;
		ret.iD.tmgi_and_MBMS_SessionID.mccDigit2 := l3v.tmgi_and_MBMS_SessionID.mccDigit2;
		ret.iD.tmgi_and_MBMS_SessionID.mBMS_SessionIdentity := l3v.tmgi_and_MBMS_SessionID.mBMS_SessionIdentity;
	} else if (ischosen(l3v.no_identity)) {
		ret.iD.no_identity.oddevenIndicator := l3v.no_identity.oddevenIndicator;
		ret.iD.no_identity.fillerDigits := l3v.no_identity.fillerDigits;
	}
	return ret;
}
template MobileIdentity ts_SGsAP_IE_MobileID(template (value) MobileIdentityLV l3_mi) := {
	iEI := '00001110'B,
	lengthIndicator := 0, /* overwritten */
	iD := f_l3_to_sgs_id(valueof(l3_mi))
}


/* 9.4.15 */
template (value) NAS_MessageContainer ts_SGsAP_NasContainer(template (value) octetstring nas_pdu) := {
	iEI := '00010110'B,
	lengthIndicator := lengthof(valueof(nas_pdu)),
	nAS_MessageContainer := nas_pdu
}
template NAS_MessageContainer tr_SGsAP_NasContainer(template octetstring nas_pdu) := {
	iEI := '00010110'B,
	lengthIndicator := ?,
	nAS_MessageContainer := nas_pdu
}

/* 9.4.16 */
template (value) RejectCause ts_SGsAP_IE_RejCause(template (value) Reject_Cause cause) := {
	iEI := '00001111'B,
	lengthIndicator := 1,
	cause := cause
}
template RejectCause tr_SGsAP_IE_RejCause(template Reject_Cause cause) := {
	iEI := '00001111'B,
	lengthIndicator := 1,
	cause := cause
}

/* 9.4.17 */
template (value) ServiceIndicator ts_SGsAP_ServiceInd(template (value) Service_Indicator si) := {
	iEI := '00100000'B,
	lengthIndicator := 1,
	indicator := si
}
template ServiceIndicator tr_SGsAP_ServiceInd(template Service_Indicator si) := {
	iEI := '00100000'B,
	lengthIndicator := 1,
	indicator := si
}


/* 9.4.18 */
template (value) SGsCause ts_SGsAP_IE_SgsCause(template (value) SGs_Cause cause) := {
	iEI := '00001000'B,
	lengthIndicator := 1,
	cause := cause
}
function tr_SGsAP_IE_SgsCause(template SGs_Cause cause) return template SGsCause {
	if (istemplatekind(cause, "omit")) {
		return omit;
	} else if (istemplatekind(cause, "*")) {
		return *;
	} else {
		var template SGsCause ret := {
			iEI := '00001000'B,
			lengthIndicator := 1,
			cause := cause
		}
		return ret;
	}
}

/* 9.4.21c */
template (value) UE_EMM_Mode ts_SGsAP_IE_UeEmmMode(template (value) UE_EMM_mode mode) := {
	iEI := '00100101'B,
	lengthIndicator := 1,
	mode := mode
}
template UE_EMM_Mode tr_SGsAP_IE_UeEmmMode(template UE_EMM_mode mode) := {
	iEI := '00100101'B,
	lengthIndicator := 1,
	mode := mode
}


/* 9.4.22 */
template (value) VLR_Name ts_SGsAP_IE_VlrName(template (value) octetstring name) := {
	iEI := '00000010'B,
	lengthIndicator := lengthof(name),
	name := name
}
template VLR_Name tr_SGsAP_IE_VlrName(template octetstring name) := {
	iEI := '00000010'B,
	lengthIndicator := ?,
	name := name
}





/* 3GPP TS 29.118 Section 8.1 */
template (value) PDU_SGsAP ts_SGsAP_ALERT_ACK(hexstring imsi) := {
	sGsAP_ALERT_ACK := {
		messageType := '00001110'B,
		iMSI := ts_SGsAP_IMSI(imsi)
	}
}
template PDU_SGsAP tr_SGsAP_ALERT_ACK(template hexstring imsi) := {
	sGsAP_ALERT_ACK := {
		messageType := '00001110'B,
		iMSI := tr_SGsAP_IMSI(imsi)
	}
}

/* 3GPP TS 29.118 Section 8.2 */
template PDU_SGsAP ts_SGsAP_ALERT_REJECT(hexstring imsi,
					 template (value) SGs_Cause cause) := {
	sGsAP_ALERT_REJECT := {
		messageType := '00001111'B,
		iMSI := ts_SGsAP_IMSI(imsi),
		sGsCause := ts_SGsAP_IE_SgsCause(cause)
	}
}
template PDU_SGsAP tr_SGsAP_ALERT_REJECT(template hexstring imsi,
					 template SGs_Cause cause := ?) := {
	sGsAP_ALERT_REJECT := {
		messageType := '00001111'B,
		iMSI := tr_SGsAP_IMSI(imsi),
		sGsCause := tr_SGsAP_IE_SgsCause(cause)
	}
}

/* 3GPP TS 29.118 Section 8.3 */
template (value) PDU_SGsAP ts_SGsAP_ALERT_REQ(hexstring imsi) := {
	sGsAP_ALERT_REQUEST := {
		messageType := '00001101'B,
		iMSI := ts_SGsAP_IMSI(imsi)
	}
}
template PDU_SGsAP tr_SGsAP_ALERT_REQ(template hexstring imsi) := {
	sGsAP_ALERT_REQUEST := {
		messageType := '00001101'B,
		iMSI := tr_SGsAP_IMSI(imsi)
	}
}

/* 3GPP TS 29.118 Section 8.4 */
template (value) PDU_SGsAP ts_SGsAP_DL_UD(hexstring imsi,
					  template (value) octetstring nas_pdu) := {
	sGsAP_DOWNLINK_UNITDATA := {
		messageType := '00000111'B,
		iMSI := ts_SGsAP_IMSI(imsi),
		nAS_MessageContainer := ts_SGsAP_NasContainer(nas_pdu)
	}
}
template PDU_SGsAP tr_SGsAP_DL_UD(template hexstring imsi, template octetstring nas_pdu := ?) := {
	sGsAP_DOWNLINK_UNITDATA := {
		messageType := '00000111'B,
		iMSI := tr_SGsAP_IMSI(imsi),
		nAS_MessageContainer := tr_SGsAP_NasContainer(nas_pdu)
	}
}

/* 8.5 */
template (value) PDU_SGsAP ts_SGsAP_EPS_DETACH_ACK(hexstring imsi) := {
	sGsAP_EPS_DETACH_ACK:= {
		messageType := '00010010'B,
		iMSI := ts_SGsAP_IMSI(imsi)
	}
}
template PDU_SGsAP tr_SGsAP_EPS_DETACH_ACK(template hexstring imsi) := {
	sGsAP_EPS_DETACH_ACK:= {
		messageType := '00010010'B,
		iMSI := tr_SGsAP_IMSI(valueof(imsi))
	}
}

/* 8.6 */
template (value) PDU_SGsAP ts_SGsAP_EPS_DETACH_IND(hexstring imsi,
						   template (value) octetstring mme_name,
						   template (value) IMSI_detachFromEPS_serviceType det_serv_typ) := {
	sGsAP_EPS_DETACH_INDICATION:= {
		messageType := '00010001'B,
		iMSI := ts_SGsAP_IMSI(imsi),
		mME_Name := ts_SGsAP_IE_MmeName(mme_name),
		iMSI_DetachFromEPS_ServiceType := ts_SGsAP_IE_DetServiceType(det_serv_typ)
	}
}
template PDU_SGsAP tr_SGsAP_EPS_DETACH_IND(template hexstring imsi,
					   template octetstring mme_name,
					   template IMSI_detachFromEPS_serviceType det_serv_typ) := {
	sGsAP_EPS_DETACH_INDICATION:= {
		messageType := '00010001'B,
		iMSI := tr_SGsAP_IMSI(valueof(imsi)),
		mME_Name := tr_SGsAP_IE_MmeName(mme_name),
		iMSI_DetachFromEPS_ServiceType := tr_SGsAP_IE_DetServiceType(det_serv_typ)
	}
}

/* 8.7 */
template (value) PDU_SGsAP ts_SGsAP_IMSI_DETACH_ACK(hexstring imsi) := {
	sGsAP_IMSI_DETACH_ACK := {
		messageType := '00010100'B,
		iMSI := ts_SGsAP_IMSI(imsi)
	}
}
template PDU_SGsAP tr_SGsAP_IMSI_DETACH_ACK(template hexstring imsi) := {
	sGsAP_IMSI_DETACH_ACK := {
		messageType := '00010100'B,
		iMSI := tr_SGsAP_IMSI(imsi)
	}
}

/* 8.8 */
template (value) PDU_SGsAP ts_SGsAP_IMSI_DETACH_IND(hexstring imsi,
						    template (value) octetstring mme_name,
						    template (value) IMSI_detachFromNonEPS_serviceType det_serv_typ) := {
	sGsAP_IMSI_DETACH_INDICATION := {
		messageType := '00010011'B,
		iMSI := ts_SGsAP_IMSI(imsi),
		mME_Name := ts_SGsAP_IE_MmeName(mme_name),
		iMSI_DetachFromNonEPS_ServiceType := ts_SGsAP_IE_DetNonEpsServiceType(det_serv_typ)
	}
}
template PDU_SGsAP tr_SGsAP_IMSI_DETACH_IND(template hexstring imsi,
					    template octetstring mme_name := ?,
					    template IMSI_detachFromNonEPS_serviceType det_serv_typ := ?) := {
	sGsAP_IMSI_DETACH_INDICATION := {
		messageType := '00010011'B,
		iMSI := tr_SGsAP_IMSI(imsi),
		mME_Name := tr_SGsAP_IE_MmeName(mme_name),
		iMSI_DetachFromNonEPS_ServiceType := tr_SGsAP_IE_DetNonEpsServiceType(det_serv_typ)
	}
}

/* 8.9 */
template (value) PDU_SGsAP ts_SGsAP_LU_ACCEPT(hexstring imsi,
					      template (value) LocationAreaIdValue lai,
					      template (value) MobileIdentityLV mobile_id) := {
	sGsAP_LOCATION_UPDATE_ACCEPT := {
		messageType := '00001010'B,
		iMSI := ts_SGsAP_IMSI(imsi),
		locationAreaId := ts_SGsAP_IE_Lai(lai),
		newTMSIorIMSI := ts_SGsAP_IE_MobileID(mobile_id)
	}
}
template PDU_SGsAP tr_SGsAP_LU_ACCEPT(template hexstring imsi,
				      template LocationAreaIdValue lai := ?) := {
	sGsAP_LOCATION_UPDATE_ACCEPT := {
		messageType := '00001010'B,
		iMSI := tr_SGsAP_IMSI(imsi),
		locationAreaId := tr_SGsAP_IE_Lai(lai),
		newTMSIorIMSI := *
	}
}

/* 8.10 */
template (value) PDU_SGsAP ts_SGsAP_LU_REJECT(hexstring imsi,
					      template (value) Reject_Cause rej_cause,
					      template (omit) LocationAreaIdValue lai) := {
	sGsAP_LOCATION_UPDATE_REJECT := {
		messageType := '00001011'B,
		iMSI := ts_SGsAP_IMSI(imsi),
		rejectCause := ts_SGsAP_IE_RejCause(rej_cause),
		locationAreaId := ts_SGsAP_IE_Lai_omit(lai)
	}
}
template PDU_SGsAP tr_SGsAP_LU_REJECT(template hexstring imsi,
				      template Reject_Cause rej_cause,
				      template LocationAreaIdValue lai) := {
	sGsAP_LOCATION_UPDATE_REJECT := {
		messageType := '00001011'B,
		iMSI := tr_SGsAP_IMSI(imsi),
		rejectCause := tr_SGsAP_IE_RejCause(rej_cause),
		locationAreaId := tr_SGsAP_IE_Lai_omit(lai)
	}
}

/* 8.11 */
template (value) PDU_SGsAP ts_SGsAP_LU_REQ(hexstring imsi,
					   template (value) octetstring mme_name,
					   template (value) EPS_location_update_type eps_lu_type,
					   template (value) LocationAreaIdValue new_lai) := {
	sGsAP_LOCATION_UPDATE_REQUEST := {
		messageType := '00001001'B,
		iMSI := ts_SGsAP_IMSI(imsi),
		mME_Name := ts_SGsAP_IE_MmeName(mme_name),
		ePS_LocationUpdateType := ts_SGsAP_IE_EpsLuType(eps_lu_type),
		newLocationAreaId := ts_SGsAP_IE_Lai(new_lai),
		oldLocationAreaId := omit,
		tMSI_Status := omit,
		iMEI_SV := omit,
		tAI := omit,
		eCGI := omit,
		tMSI_NRI := omit,
		cS_DomainOperator := omit
	}
}
template PDU_SGsAP tr_SGsAP_LU_REQ(template hexstring imsi,
				   template octetstring mme_name := ?,
				   template EPS_location_update_type eps_lu_type := ?,
				   template LocationAreaIdValue new_lai := ?) := {
	sGsAP_LOCATION_UPDATE_REQUEST := {
		messageType := '00001001'B,
		iMSI := tr_SGsAP_IMSI(imsi),
		mME_Name := tr_SGsAP_IE_MmeName(mme_name),
		ePS_LocationUpdateType := tr_SGsAP_IE_EpsLuType(eps_lu_type),
		newLocationAreaId := tr_SGsAP_IE_Lai_omit(new_lai),
		oldLocationAreaId := *,
		tMSI_Status := *,
		iMEI_SV := *,
		tAI := *,
		eCGI := *,
		tMSI_NRI := *,
		cS_DomainOperator := *
	}
}

/* 8.12 */
template (value) PDU_SGsAP ts_SGsAP_MM_INFO_REQ(hexstring imsi,
						template (value) octetstring mm_info) := {
	sGsAP_MM_INFORMATION_REQUEST := {
		messageType := '00011010'B,
		iMSI := ts_SGsAP_IMSI(imsi),
		mM_Information := ts_SGsAP_IE_MmInfo(mm_info)
	}
}
template PDU_SGsAP tr_SGsAP_MM_INFO_REQ(template hexstring imsi,
					template octetstring mm_info :=?) := {
	sGsAP_MM_INFORMATION_REQUEST := {
		messageType := '00011010'B,
		iMSI := tr_SGsAP_IMSI(imsi),
		mM_Information := tr_SGsAP_IE_MmInfo(mm_info)
	}
}

/* 8.13 */
template (value) PDU_SGsAP ts_SGsAP_PAGING_REJ(hexstring imsi,
						template (value) SGs_Cause cause) := {
	sGsAP_PAGING_REJECT := {
		messageType := '00000010'B,
		iMSI := ts_SGsAP_IMSI(imsi),
		sGsCause := ts_SGsAP_IE_SgsCause(cause)
	}
}
template PDU_SGsAP tr_SGsAP_PAGING_REJ(template hexstring imsi,
					template SGs_Cause cause := ?) := {
	sGsAP_PAGING_REJECT := {
		messageType := '00000010'B,
		iMSI := tr_SGsAP_IMSI(imsi),
		sGsCause := tr_SGsAP_IE_SgsCause(cause)
	}
}

/* 8.14 */
template (value) PDU_SGsAP ts_SGsAP_PAGING_REQ(hexstring imsi,
						template (value) octetstring vlr_name,
						template (value) Service_Indicator serv_ind,
						template (omit) OCT4 tmsi) :=
{
	sGsAP_PAGING_REQUEST := {
		messageType := '00000001'B,
		iMSI := ts_SGsAP_IMSI(imsi),
		vLR_Name := ts_SGsAP_IE_VlrName(vlr_name),
		serviceIndicator := ts_SGsAP_ServiceInd(serv_ind),
		tMSI := omit,
		cLI := omit,
		locationAreaId := omit,
		globalCN_Id := omit,
		sS_Code := omit,
		lCS_Indicator := omit,
		lCS_ClientIdentity := omit,
		channelNeeded := omit,
		eMLPP_Priority := omit,
		additionalPagingIndicator := omit
	}
}
template PDU_SGsAP tr_SGsAP_PAGING_REQ(template hexstring imsi,
					template octetstring vlr_name,
					template Service_Indicator serv_ind,
					template OCT4 tmsi) :=
{
	sGsAP_PAGING_REQUEST := {
		messageType := '00000001'B,
		iMSI := tr_SGsAP_IMSI(imsi),
		vLR_Name := tr_SGsAP_IE_VlrName(vlr_name),
		serviceIndicator := tr_SGsAP_ServiceInd(serv_ind),
		tMSI := *,
		cLI := *,
		locationAreaId := *,
		globalCN_Id := *,
		sS_Code := *,
		lCS_Indicator := *,
		lCS_ClientIdentity := *,
		channelNeeded := *,
		eMLPP_Priority := *,
		additionalPagingIndicator := *
	}
}

/* 8.15 */
template (value) PDU_SGsAP ts_SGsAP_RESET_ACK_MME(template (value) octetstring mme_name) := {
	sGsAP_RESET_ACK := {
		messageType := '00010110'B,
		mME_Name := ts_SGsAP_IE_MmeName(mme_name),
		vLR_Name := omit
	}
}
template (value) PDU_SGsAP ts_SGsAP_RESET_ACK_VLR(template (value) octetstring vlr_name) := {
	sGsAP_RESET_ACK := {
		messageType := '00010110'B,
		mME_Name := omit,
		vLR_Name := ts_SGsAP_IE_VlrName(vlr_name)
	}
}
template PDU_SGsAP tr_SGsAP_RESET_ACK(template octetstring mme_name, template octetstring vlr_name) := {
	sGsAP_RESET_ACK := {
		messageType := '00010110'B,
		mME_Name := tr_SGsAP_IE_MmeName(mme_name),
		vLR_Name := tr_SGsAP_IE_VlrName(vlr_name)
	}
}

/* 8.16 */
template (value) PDU_SGsAP ts_SGsAP_RESET_IND_MME(template (value) octetstring mme_name) := {
	sGsAP_RESET_INDICATION := {
		messageType := '00010101'B,
		mME_Name := ts_SGsAP_IE_MmeName(mme_name),
		vLR_Name := omit
	}
}
template (value) PDU_SGsAP ts_SGsAP_RESET_IND_VLR(template (value) octetstring vlr_name) := {
	sGsAP_RESET_INDICATION := {
		messageType := '00010101'B,
		mME_Name := omit,
		vLR_Name := ts_SGsAP_IE_VlrName(vlr_name)
	}
}
template PDU_SGsAP tr_SGsAP_RESET_IND(template octetstring mme_name, template octetstring vlr_name) := {
	sGsAP_RESET_INDICATION := {
		messageType := '00010101'B,
		mME_Name := tr_SGsAP_IE_MmeName(mme_name),
		vLR_Name := tr_SGsAP_IE_VlrName(vlr_name)
	}
}

/* 8.17 */
template (value) PDU_SGsAP ts_SGsAP_SERVICE_REQ(hexstring imsi,
						template (value) Service_Indicator serv_ind,
					        template (value) UE_EMM_mode emm_mode) := {
	sGsAP_SERVICE_REQUEST := {
		messageType := '00000110'B,
		iMSI := ts_SGsAP_IMSI(imsi),
		serviceIndicator := ts_SGsAP_ServiceInd(serv_ind),
		iMEI_SV := omit,
		uE_TimeZone := omit,
		mobileStationClassmark2 := omit,
		tAI := omit,
		eCGI := omit,
		/* optional, but "the MME shall include this IE." */
		uE_EMM_Mode := ts_SGsAP_IE_UeEmmMode(emm_mode)
	}
}
template PDU_SGsAP tr_SGsAP_SERVICE_REQ(template hexstring imsi,
					template Service_Indicator serv_ind := ?,
				        template UE_EMM_mode emm_mode := ?) := {
	sGsAP_SERVICE_REQUEST := {
		messageType := '00000110'B,
		iMSI := tr_SGsAP_IMSI(imsi),
		serviceIndicator := tr_SGsAP_ServiceInd(serv_ind),
		iMEI_SV := *,
		uE_TimeZone := *,
		mobileStationClassmark2 := *,
		tAI := *,
		eCGI := *,
		/* optional, but "the MME shall include this IE." */
		uE_EMM_Mode := tr_SGsAP_IE_UeEmmMode(emm_mode)
	}
}


/* 8.18 */
template (value) PDU_SGsAP ts_SGsAP_STATUS(template (omit) hexstring imsi,
					   template (value) SGs_Cause cause,
					   template (value) octetstring err_msg) := {
	sGsAP_STATUS := {
		messageType := '00011101'B,
		iMSI := ts_SGsAP_IMSI_omit(imsi),
		sGsCause := ts_SGsAP_IE_SgsCause(cause),
		erroneousMessage := ts_SGsAP_IE_ErrMsg(err_msg)
	}
}
template PDU_SGsAP tr_SGsAP_STATUS(template hexstring imsi,
				   template SGs_Cause cause,
				   template octetstring err_msg) := {
	sGsAP_STATUS := {
		messageType := '00011101'B,
		iMSI := tr_SGsAP_IMSI(imsi),
		sGsCause := tr_SGsAP_IE_SgsCause(cause),
		erroneousMessage := tr_SGsAP_IE_ErrMsg(err_msg)
	}
}


/* 8.19 */
template (value) PDU_SGsAP ts_SGsAP_TMSI_REALL_CMPL(hexstring imsi) := {
	sGsAP_TMSI_REALLOCATION_COMPLETE := {
		messageType := '00001100'B,
		iMSI := ts_SGsAP_IMSI(imsi)
	}
}
template PDU_SGsAP tr_SGsAP_TMSI_REALL_CMPL(template hexstring imsi) := {
	sGsAP_TMSI_REALLOCATION_COMPLETE := {
		messageType := '00001100'B,
		iMSI := tr_SGsAP_IMSI(imsi)
	}
}

/* 8.20 */
template (value) PDU_SGsAP ts_SGsAP_UE_ACT_IND(hexstring imsi) := {
	sGsAP_UE_ACTIVITY_INDICATION := {
		messageType := '00010000'B,
		iMSI := ts_SGsAP_IMSI(imsi)
		/* Rel 14: Max UE Avail Time */
	}
}
template PDU_SGsAP tr_SGsAP_UE_ACT_IND(template hexstring imsi) := {
	sGsAP_UE_ACTIVITY_INDICATION := {
		messageType := '00010000'B,
		iMSI := tr_SGsAP_IMSI(imsi)
		/* Rel 14: Max UE Avail Time */
	}
}

/* 8.21 */
template (value) PDU_SGsAP ts_SGsAP_UE_UNREACHABLE(hexstring imsi,
						   template (value) SGs_Cause cause) := {
	sGsAP_UE_UNREACHABLE := {
		messageType := '00011111'B,
		iMSI := ts_SGsAP_IMSI(imsi),
		sGsCause := ts_SGsAP_IE_SgsCause(cause)
		/* Rel 14: Requested Retransmission Time */
		/* Rel 14: Additional UE Unreachable indicators */
	}
}
template PDU_SGsAP tr_SGsAP_UE_UNREACHABLE(template hexstring imsi,
					   template SGs_Cause cause := ?) := {
	sGsAP_UE_UNREACHABLE := {
		messageType := '00011111'B,
		iMSI := tr_SGsAP_IMSI(imsi),
		sGsCause := tr_SGsAP_IE_SgsCause(cause)
		/* Rel 14: Requested Retransmission Time */
		/* Rel 14: Additional UE Unreachable indicators */
	}
}

/* 8.22 */
template (value) PDU_SGsAP ts_SGsAP_UL_UD(hexstring imsi,
					  template (value) octetstring nas_msg) := {
	sGsAP_UPLINK_UNITDATA := {
		messageType := '00001000'B,
		iMSI := ts_SGsAP_IMSI(imsi),
		nAS_MessageContainer := ts_SGsAP_NasContainer(nas_msg),
		iMEI_SV := omit,
		uE_TimeZone := omit,
		mobileStationClassmark2 := omit,
		tAI := omit,
		eCGI := omit
	}
}
template PDU_SGsAP tr_SGsAP_UL_UD(template hexstring imsi,
				  template octetstring nas_msg := ?) := {
	sGsAP_UPLINK_UNITDATA := {
		messageType := '00001000'B,
		iMSI := tr_SGsAP_IMSI(imsi),
		nAS_MessageContainer := tr_SGsAP_NasContainer(nas_msg),
		iMEI_SV := *,
		uE_TimeZone := *,
		mobileStationClassmark2 := *,
		tAI := *,
		eCGI := *
	}
}

/* 8.23 */
template (value) PDU_SGsAP ts_SGsAP_RELEASE_REQ(hexstring imsi,
						template (value) SGs_Cause cause) := {
	sGsAP_RELEASE_REQUEST := {
		messageType := '00011011'B,
		iMSI := ts_SGsAP_IMSI(imsi),
		sGsCause := ts_SGsAP_IE_SgsCause(cause)
	}
}
template PDU_SGsAP tr_SGsAP_RELEASE_REQ(template hexstring imsi,
					template SGs_Cause cause) := {
	sGsAP_RELEASE_REQUEST := {
		messageType := '00011011'B,
		iMSI := tr_SGsAP_IMSI(imsi),
		sGsCause := tr_SGsAP_IE_SgsCause(cause)
	}
}

/* 8.24 */
template (value) PDU_SGsAP ts_SGsAP_SERVICE_ABORT_REQ(hexstring imsi) := {
	sGsAP_SERVICE_ABORT_REQUEST := {
		messageType := '00010111'B,
		iMSI := ts_SGsAP_IMSI(imsi)
	}
}
template PDU_SGsAP tr_SGsAP_SERVICE_ABORT_REQ(template hexstring imsi) := {
	sGsAP_SERVICE_ABORT_REQUEST := {
		messageType := '00010111'B,
		iMSI := tr_SGsAP_IMSI(imsi)
	}
}

/* 8.25 */
template (value) PDU_SGsAP ts_SGsAP_MO_CSFB_IND(hexstring imsi) := {
	sGsAP_MO_CSFB_INDICATION := {
		messageType := '00011000'B,
		iMSI := ts_SGsAP_IMSI(imsi),
		tAI := omit,
		eCGI := omit
	}
}
template PDU_SGsAP tr_SGsAP_MO_CSFB_IND(template hexstring imsi) := {
	sGsAP_MO_CSFB_INDICATION := {
		messageType := '00011000'B,
		iMSI := tr_SGsAP_IMSI(imsi),
		tAI := *,
		eCGI := *
	}
}






}
