module GTPv2_Templates {

/* (C) 2019 by 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
 */

import from General_Types all;
import from Osmocom_Types all;
import from GTPv2_Types all;

private function fs_GTP2C_t_bit(template (omit) OCT4 teid) return BIT1 {
	if (istemplatekind(teid, "omit")) {
		return '0'B;
	} else {
		return '1'B;
	}
}

private function fs_GTP2C_p_bit(template (omit) PDU_GTPCv2 piggyback) return BIT1 {
	if (istemplatekind(piggyback, "omit")) {
		return '0'B;
	} else {
		return '1'B;
	}
}

template (present) PDU_GTPCv2 tr_PDU_GTP2C(template OCT4 teid := ?,
					   template (present) OCT3 seq := ?,
					   template (present) GTPCv2_PDUs pdus := ?,
					   template PDU_GTPCv2 piggyback := omit) := {
	spare := '000'B,
	t_Bit := ?,
	p_Bit := ?,
	version := '010'B,
	messageType := ?,
	lengthf := ?,
	tEID := teid,
	sequenceNumber := seq,
	spare3 := '00'O,
	gtpcv2_pdu := pdus,
	piggybackPDU_GTPCv2 := piggyback
}

template (present) OCT1 gtp2_requests := (
	'01'O,	// echoRequest
	'20'O,	// createSessionRequest
	'5F'O,	// createBearerRequest
	'22'O, 	// modifyBearerRequest
	'24'O,	// deleteSessionRequest
	'63'O,	// deleteBearerRequest
	'A8'O,	// deleteIndirectDataForwardingTunnelRequest
	'61'O,	// updateBearerRequest
	'42'O,	// deleteBearerCommand
	'A6'O,	// createIndirectDataForwardingTunnelRequest
	'AA'O,	// releaseAccessBearersRequest
	'B3'O,	// modifyAccessBearersRequest
	'85'O,	// forwardRelocationRequest
	'82'O,	// contextRequest
	'80'O,	// identificationRequest
	'26'O,	// changeNotificationRequest
	'8B'O,	// relocationCancelRequest
	'A0'O,	// createForwardingTunnelRequest
	'65'O,	// deletePDN_ConnectionSetRequest
	'C8'O,	// updatePDN_ConnectionSetRequest
	'9E'O,	// uE_RegistrationQueryRequest
	'E7'O,	// mBMSSessionStartRequest
	'E9'O,	// mBMSSessionUpdateRequest
	'EB'O 	// mBMSSessionStopRequest
);
template (present) OCT1 gtp2_responses := (
	'02'O,	// echoResponse
	'21'O,	// createSessionResponse
	'60'O,	// createBearerResponse
	'23'O, 	// modifyBearerResponse
	'25'O,	// deleteSessionResponse
	'64'O,	// deleteBearerResponse
	'A9'O,	// deleteIndirectDataForwardingTunnelResponse
	'62'O,	// updateBearerResponse
	'43'O,	// deleteBearerFailureIndication
	'A7'O,	// createIndirectDataForwardingTunnelResponse
	'AB'O,	// releaseAccessBearersResponse
	'B4'O,	// modifyAccessBearersResponse
	'86'O,	// forwardRelocationResponse
	'83'O,	// contextResponse
	'81'O,	// identificationResponse
	'27'O,	// changeNotificationResponse
	'8C'O,	// relocationCancelResponse
	'A1'O,	// createForwardingTunnelResponse
	'66'O,	// deletePDN_ConnectionSetResponse
	'C9'O,	// updatePDN_ConnectionSetResponse
	'9F'O,	// uE_RegistrationQueryResponse
	'E8'O,	// mBMSSessionStartResponse
	'EA'O,	// mBMSSessionUpdateResponse
	'EC'O 	// mBMSSessionStopResponse
);

template (present) PDU_GTPCv2 tr_PDU_GTP2C_msgtypes(template (present) OCT1 types) := {
	spare := '000'B,
	t_Bit := ?,
	p_Bit := ?,
	version := '010'B,
	messageType := types,
	lengthf := ?,
	tEID := ?,
	sequenceNumber := ?,
	spare3 := '00'O,
	gtpcv2_pdu := ?,
	piggybackPDU_GTPCv2 := *
};

/* 8.3 */
template (value) IMSI ts_GTP2C_Imsi(template (value) hexstring imsi) := {
	elementIdentifier := '01'O,
	lengthIndicator := 0, /* overwritten */
	instance := '0000'B,
	spare := '0000'B,
	iMSI_Value := imsi
}
template (present) IMSI tr_GTP2C_Imsi(template (present) hexstring imsi) := {
	elementIdentifier := '01'O,
	lengthIndicator := ?,
	instance := ?,
	spare := '0000'B,
	iMSI_Value := f_pad_bcd_number_tmpl(imsi)
}

template (present) MSISDN ts_GTP2C_msisdn(template (present) hexstring msisdn) := {
	elementIdentifier := '4C'O,
	lengthIndicator := 0, /* overwritten */
	instance := '0000'B,
	spare := '0000'B,
	mSISDN_Value := msisdn
}
private function fs_GTP2C_msisdn(template (omit) hexstring msisdn) return
template (omit) MSISDN {
	if (istemplatekind(msisdn, "omit")) {
		return omit;
	} else {
		return ts_GTP2C_msisdn(msisdn);
	}
}


/* 8.4-1 */
/*
type enumerated GTP2C_Cause {
	Local_Detach 				(2),
	Complete_Detach				(3),
	RAT_changed_from_3GPP_to_Non_3GPP	(4),
	ISR_deactivation			(5),
	Error_Ind_from_RNC_eNB_SGSN_MME		(5),
	IMSI_Detach_Only			(7),
	Reactivation_Required			(8),
}
*/

const integer c_GTP2C_Cause_LocalDetach := 1;

/* 8.4 */
template (value) Cause ts_GTP2C_Cause(template (value) OCT1 cause,
				      template (value) BIT1 cs) := {
	elementIdentifier := '02'O,
	lengthIndicator := 0, /* overwritten */
	instance := '0000'B,
	spare := '0000'B,
	causeValue := cause,
	cS := cs,
	bCE := '0'B,
	pCE := '0'B,
	spare2 := '00000'B,
	typeOfOffendingIE := omit,
	lengthIndicator2 := omit,
	instanceOfOffendingIE := omit,
	spare3 := omit
}
template (present) Cause tr_GTP2C_Cause(template (present) OCT1 cause) := {
	elementIdentifier := '02'O,
	lengthIndicator := ?,
	instance := ?,
	spare := '0000'B,
	causeValue := cause,
	cS := ?,
	bCE := ?,
	pCE := ?,
	spare2 := '00000'B,
	typeOfOffendingIE := *,
	lengthIndicator2 := *,
	instanceOfOffendingIE := *,
	spare3 := *
}
private function fs_GTP2C_Cause(template (omit) OCT1 cause, template (value) BIT1 cs) return
template (omit) Cause {
	if (istemplatekind(cause, "omit")) {
		return omit;
	} else {
		return ts_GTP2C_Cause(cause, cs);
	}
}
private function fr_GTP2C_Cause(template OCT1 cause) return
template Cause {
	if (istemplatekind(cause, "omit")) {
		return omit;
	} else if (istemplatekind(cause, "*")) {
		return *;
	} else {
		return tr_GTP2C_Cause(cause);
	}
}


/* 8.6 */
template (value) AccessPointName ts_GTP2C_APN(template (value) octetstring apn) := {
	elementIdentifier := '47'O,
	lengthIndicator := 0, /* overwritten */
	instance := '0000'B,
	spare := '0000'B,
	aPN_Value := apn
}
template (present) AccessPointName tr_GTP2C_APN(template (present) octetstring apn) := {
	elementIdentifier := '47'O,
	lengthIndicator := ?,
	instance := ?,
	spare := '0000'B,
	aPN_Value := apn
}

/* 8.7 */
template (value) AggregateMaximumBitRate
ts_GTP2C_Ambr(integer ambr_ul, integer ambr_dl) := {
	elementIdentifier := '48'O,
	lengthIndicator := 0, /* overwritten */
	instance := '0000'B,
	spare := '0000'B,
	aPN_AMBR_for_uplink := int2oct(ambr_ul, 4),
	aPN_AMBR_for_downlink := int2oct(ambr_dl, 4)
}

/* 8.8 */
template (value) EPS_BearerID
ts_GTP2C_EpsBearerId(template (value) uint4_t bid) := {
	elementIdentifier := '49'O,
	lengthIndicator := 0, /* overwritten */
	instance := '0000'B,
	spare := '0000'B,
	ePS_Bearer_ID_Value := bid,
	spare2 := '0000'B,
	additionalOctets := omit
}
template (present) EPS_BearerID
tr_GTP2C_EpsBearerId(template (present) uint4_t bid) := {
	elementIdentifier := '49'O,
	lengthIndicator := ?, /* overwritten */
	instance := '0000'B,
	spare := '0000'B,
	ePS_Bearer_ID_Value := bid,
	spare2 := '0000'B,
	additionalOctets := *
}



/* 8.14 */
template (value) PDN_AddressAllocation
ts_GTP2C_PdnAddrAlloc(template (value) BIT3 pdn_type,
		      template (value) PDN_Address_and_Prefix addr_pfx) := {
	elementIdentifier := '4F'O,
	lengthIndicator := 0, /* overwritten */
	instance := '0000'B,
	spare := '0000'B,
	pDN_Type := pdn_type,
	spare2 := '00000'B,
	pDN_Address_and_Prefix := addr_pfx
}
template (present) PDN_AddressAllocation
tr_GTP2C_PdnAddrAlloc(template (present) BIT3 pdn_type,
		      template (present) PDN_Address_and_Prefix addr_pfx) := {
	elementIdentifier := '4F'O,
	lengthIndicator := ?,
	instance := ?,
	spare := '0000'B,
	pDN_Type := pdn_type,
	spare2 := '00000'B,
	pDN_Address_and_Prefix := addr_pfx
}
template (value) PDN_AddressAllocation
ts_GTP2C_PdnAddrAlloc_v4(template (value) OCT4 addr) :=
	ts_GTP2C_PdnAddrAlloc('001'B, {iPv4_Address:=addr});
template (present) PDN_AddressAllocation
tr_GTP2C_PdnAddrAlloc_v4(template (present) OCT4 addr) :=
	ts_GTP2C_PdnAddrAlloc('001'B, {iPv4_Address:=addr});

/* 8.15 */
template (value) Bearer_QoS
ts_GTP2C_BearerQos(template (value) OCT1 qci,
		   uint40_t max_br_ul, uint40_t max_br_dl,
		   uint40_t g_br_ul, uint40_t g_br_dl,
		   template (value) BIT4 prio_lvl := '1001'B,
		   template (value) BIT1 pe_vuln := '0'B,
		   template (value) BIT1 pe_capa := '0'B) := {
	elementIdentifier := '50'O,
	lengthIndicator := 0, /* overwritten */
	instance := '0000'B,
	spare := '0000'B,
	pVI := pe_vuln,
	spare2 := '0'B,
	pL := prio_lvl,
	pCI := pe_capa,
	spare3 := '0'B,
	labelQCI := qci,
	maxBitrateUplink := int2oct(max_br_ul, 5),
	maxBitrateDownLink := int2oct(max_br_dl, 5),
	guaranteedBitrateUplink := int2oct(g_br_ul, 5),
	guaranteedBitrateDownLink := int2oct(g_br_dl, 5),
	additionalOctets := omit
}

/* 8.17 */
template (value) RAT_Type ts_GTP2C_RatType(template (value) integer rat) := {
	elementIdentifier := '52'O,
	lengthIndicator := 0, /* overwritten */
	instance := '0000'B,
	spare := '0000'B,
	rAT_TypeValue := rat,
	additionalOctets := omit
}
template (present) RAT_Type tr_GTP2C_RatType(template (present) integer rat) := {
	elementIdentifier := '52'O,
	lengthIndicator := ?,
	instance := ?,
	spare := '0000'B,
	rAT_TypeValue := rat,
	additionalOctets := *
}

/* 8.21 */
function ts_GTP2C_UserLocInfo(template (omit) CGI cgi := omit,
			      template (omit) SAI sai := omit,
			      template (omit) RAI rai := omit,
			      template (omit) TAI tai := omit,
			      template (omit) ECGI ecgi := omit,
			      template (omit) LAI lai := omit)
return template (value) UserLocationInfo {
	var template (value) UserLocationInfo uli;
	uli.elementIdentifier := '56'O;
	uli.lengthIndicator := 0; // overwritten
	uli.instance := '0000'B;
	uli.spare := '0000'B;
	uli.spare2 := '00'B;
	uli.additionalOctets := omit;

	if (istemplatekind(cgi, "omit")) {
		uli.cGI_Flag := '0'B;
	} else {
		uli.cGI_Flag := '1'B;
	}
	uli.cGI := cgi;

	if (istemplatekind(sai, "omit")) {
		uli.sAI_Flag := '0'B;
	} else {
		uli.sAI_Flag := '1'B;
	}
	uli.sAI := sai;

	if (istemplatekind(rai, "omit")) {
		uli.rAI_Flag := '0'B;
	} else {
		uli.rAI_Flag := '1'B;
	}
	uli.rAI := rai

	if (istemplatekind(tai, "omit")) {
		uli.tAI_Flag := '0'B;
	} else {
		uli.tAI_Flag := '1'B;
	}
	uli.tAI := tai

	if (istemplatekind(ecgi, "omit")) {
		uli.eCGI_Flag := '0'B;
	} else {
		uli.eCGI_Flag := '1'B;
	}
	uli.eCGI := ecgi;

	if (istemplatekind(lai, "omit")) {
		uli.lAI_Flag := '0'B;
	} else {
		uli.lAI_Flag := '1'B;
	}
	uli.lAI := lai

	return uli;
}

/* 8.22 */
private function f_bit4oct(template (omit) octetstring os) return BIT1
{
	if (istemplatekind(os, "omit")) {
		return '0'B;
	} else {
		return '1'B;
	}
}
type enumerated FteidInterface {
	FTEID_IF_S1U_eNodeB_GTPU	(0),
	FTEID_IF_S1U_SGW_GTPU		(1),
	FTEID_IF_S12_RNC_GTPU		(2),
	FTEID_IF_S12_SGW_GTPU		(3),
	FTEID_IF_S5S8_SGW_GTPU		(4),
	FTEID_IF_S5S8_PGW_GTPU		(5),
	FTEID_IF_S5S8_SGW_GTPC		(6),
	FTEID_IF_S5S8_PGW_GTPC		(7),
	FTEID_IF_S5S8_SGW_PMIPv6	(8),
	FTEID_IF_S5S8_PGW_PMIPv6	(9),
	FTEID_IF_S11_MME_GTPC		(10),
	FTEID_IF_S11S4_SGW_GTPC		(11),
	FTEID_IF_S10ND26_MME_GTPC	(12),
	FTEID_IF_S3_MME_GTPC		(13),
	FTEID_IF_S3_SGSN_GTPC		(14),
	FTEID_IF_S4_SGSN_GTPU		(15),
	FTEID_IF_S4_SGW_GTPU		(16),
	FTEID_IF_S16_SGSN_GTPC		(18),
	FTEID_IF_eNB_GTPU_DL_DATA_FW	(19),
	FTEID_IF_eNB_GTPU_UL_DATA_FW	(20),
	FTEID_IF_RNC_GTPU_DATA_FW	(21),
	FTEID_IF_SGSN_GTPU_DATA_FW	(22),
	FTEID_IF_SGWUPF_GTPU_DL_DATA_FW	(23),
	FTEID_IF_Sm_MMBS_GW_GTPC	(24),
	FTEID_IF_Sn_MMBS_GW_GTPC	(25),
	FTEID_IF_Sm_MME_GTPC		(26),
	FTEID_IF_Sn_MME_GTPC		(27),
	FTEID_IF_SGW_GTPU_UL_DATA_FW	(28),
	FTEID_IF_Sn_SGSN_GTPU		(29),
	FTEID_IF_S2b_ePDG_GTPC		(30),
	FTEID_IF_S2bU_ePDG_GTPU		(31),
	FTEID_IF_S2b_PGW_GTPC		(32),
	FTEID_IF_S2bU_PGW_GTPU		(33),
	FTEID_IF_S2a_TWAN_GTPU		(34),
	FTEID_IF_S2a_TWAN_GTPC		(35),
	FTEID_IF_S2a_PGW_GTPC		(36),
	FTEID_IF_S2a_PGW_GTPU		(37),
	FTEID_IF_S11_MME_GTPU		(38),
	FTEID_IF_S11_SGW_GTPU		(39),
	FTEID_IF_N26_AMF_GTPC		(40)
};
template (value) FullyQualifiedTEID
ts_GTP2C_FTEID(FteidInterface if_type, OCT4 teid, uint4_t instance := 0,
		template (omit) OCT4 v4_addr := omit,
		template (omit) OCT16 v6_addr := omit) := {
	elementIdentifier := '57'O,
	lengthIndicator := 0, /* overwritten */
	instance := int2bit(instance, 4),
	spare := '0000'B,
	interfaceType := enum2int(if_type),
	v6_Flag := f_bit4oct(v6_addr),
	v4_Flag := f_bit4oct(v4_addr),
	tEID_GRE_Key := teid,
	iPv4_Address := v4_addr,
	iPv6_Address := v6_addr,
	additionalOctets := omit
}
template (present) FullyQualifiedTEID
tr_GTP2C_FTEID(template (present) integer if_type, template (present) OCT4 teid,
		template BIT4 instance := ?,
		template OCT4 v4_addr := omit,
		template OCT16 v6_addr := omit) := {
	elementIdentifier := '57'O,
	lengthIndicator := ?,
	instance := instance,
	spare := '0000'B,
	interfaceType := if_type,
	v6_Flag := ?,
	v4_Flag := ?,
	tEID_GRE_Key := teid,
	iPv4_Address := v4_addr,
	iPv6_Address := v6_addr,
	additionalOctets := omit
}

/* 8.28 */
template (value) BearerContextGrouped
ts_GTP2C_BcGrouped(template (value) BearerContextIEs ies) := {
	elementIdentifier := '5D'O,
	lengthIndicator := 0, /* overwritten */
	instance := '0000'B,
	spare := '0000'B,
	bearerContextIEs := ies
}
template (present) BearerContextGrouped
tr_GTP2C_BcGrouped(template (present) BearerContextIEs ies) := {
	elementIdentifier := '5D'O,
	lengthIndicator := ?, /* overwritten */
	instance := '0000'B,
	spare := '0000'B,
	bearerContextIEs := ies
}



/* 8.30 */
template (value) ChargingCharacteristics
ts_GTP2C_ChargingCaracteristics(template (value) OCT2 cc) := {
	elementIdentifier := '5F'O,
	lengthIndicator := 0, /* overwritten */
	instance := '0000'B,
	spare := '0000'B,
	chargingCharacteristicsValue := cc,
	additionalOctets := omit
}
template (present) ChargingCharacteristics
tr_GTP2C_ChargingCaracteristics(template (present) OCT2 cc) := {
	elementIdentifier := '5F'O,
	lengthIndicator := ?, /* overwritten */
	instance := '0000'B,
	spare := '0000'B,
	chargingCharacteristicsValue := cc,
	additionalOctets := omit
}


/* 8.34 */
template (value) PDN_Type
ts_GTP2C_PdnType(template (value) BIT3 pdn_type) := {
	elementIdentifier := '63'O,
	lengthIndicator := 0,
	instance := '0000'B,
	spare := '0000'B,
	pDN_TypeValue := pdn_type,
	spare2 := '00000'B,
	additionalOctets := omit
}
template (present) PDN_Type
tr_GTP2C_PdnType(template (present) BIT3 pdn_type) := {
	elementIdentifier := '63'O,
	lengthIndicator := ?,
	instance := ?,
	spare := ?,
	pDN_TypeValue := pdn_type,
	spare2 := ?,
	additionalOctets := *
}

/* 8.35 */
template (value) ProcedureTransactionID
ts_GTP2C_ProcTransId(template (value) integer pti) := {
	elementIdentifier := '64'O,
	lengthIndicator := 0,
	instance := '0000'B,
	spare := '0000'B,
	pTI_Value := pti,
	additionalOctets := omit
}
template (present) ProcedureTransactionID
tr_GTP2C_ProcTransId(template (present) integer pti) := {
	elementIdentifier := '64'O,
	lengthIndicator := ?,
	instance :=?,
	spare := ?,
	pTI_Value := pti,
	additionalOctets := *
}


/* 8.57 */
template (value) APN_Restriction
ts_GTP2C_ApnRestriction(template (value) integer val) := {
	elementIdentifier := '7F'O,
	lengthIndicator := 0,
	instance := '0000'B,
	spare := '0000'B,
	restrictionTypeValue := val,
	additionalOctets := omit
}
template (present) APN_Restriction
tr_GTP2C_ApnRestriction(template (present) integer val) := {
	elementIdentifier := '7F'O,
	lengthIndicator := ?,
	instance := '0000'B,
	spare := ?,
	restrictionTypeValue := val,
	additionalOctets := *
}


/* 8.58 */
template (value) SelectionMode
ts_GTP2C_SelectionMode(template (value) integer mode) := {
	elementIdentifier := '80'O,
	lengthIndicator := 0, /* overwritten */
	instance := '0000'B,
	spare := '0000'B,
	selectionModeValue := mode,
	spare2 := '000000'B,
	additionalOctets := omit
}
template (present) SelectionMode
tr_GTP2C_SelectionMode(template (present) integer mode) := {
	elementIdentifier := '80'O,
	lengthIndicator := ?,
	instance := ?,
	spare := ?,
	selectionModeValue := mode,
	spare2 := ?,
	additionalOctets := *
}




template (value) PDU_GTPCv2 ts_PDU_GTP2C(template (omit) OCT4 teid, template (value) OCT3 seq,
					 template (value) OCT1 msg_type,
					 template (value) GTPCv2_PDUs pdus,
					 template (omit) PDU_GTPCv2 piggyback := omit) := {
	spare := '000'B,
	t_Bit := fs_GTP2C_t_bit(teid),
	p_Bit := fs_GTP2C_p_bit(piggyback),
	version := '010'B,
	messageType := msg_type,
	lengthf := 0, /* overwritten */
	tEID := teid,
	sequenceNumber := seq,
	spare3 := '00'O,
	gtpcv2_pdu := pdus,
	piggybackPDU_GTPCv2 := piggyback
}


template (value) PDU_GTPCv2
ts_GTP2C_EchoReq(template (value) integer rec_val) :=
ts_PDU_GTP2C(omit, '000000'O, '01'O, {
	echoRequest := {
		recovery := {
			elementIdentifier := '03'O,
			lengthIndicator := 0,
			instance := '0000'B,
			spare := '0000'B,
			recoveryValue := rec_val
		},
		sendingNodeFeatures := omit,
		privateExtension := omit
	}});
template (present) PDU_GTPCv2
tr_GTP2C_EchoReq(template (present) OCT3 seq := ?) :=
tr_PDU_GTP2C(omit, seq, { echoRequest := ? }, omit);

template (value) PDU_GTPCv2
ts_GTP2C_EchoResp(template (value) integer rec_val) :=
ts_PDU_GTP2C(omit, '000000'O, '02'O, {
	echoRequest := {
		recovery := {
			elementIdentifier := '03'O,
			lengthIndicator := 0,
			instance := '0000'B,
			spare := '0000'B,
			recoveryValue := rec_val
		},
		sendingNodeFeatures := omit,
		privateExtension := omit
	}});
template (present) PDU_GTPCv2
tr_GTP2C_EchoResp(template (present) OCT3 seq := ?) :=
tr_PDU_GTP2C(omit, seq, { echoResponse := ? }, omit);



template (present) PDU_GTPCv2
ts_GTP2C_CreateSessionReq(template (value) hexstring imsi, template (omit) hexstring msisdn,
			  integer rat_type, template (value) FullyQualifiedTEID sender_fteid,
			  template (value) octetstring apn, template (value) BIT3 pdn_type,
			  template (omit) FullyQualifiedTEID_List teid_list,
			  template (value) OCT2 chg_car, template (value) uint4_t bearer_id,
			  template (value) Bearer_QoS qos := ts_GTP2C_BearerQos('09'O, 0,0,0,0)) :=
ts_PDU_GTP2C('00000000'O, '000000'O, '20'O, {
	createSessionRequest := {
		iMSI := ts_GTP2C_Imsi(imsi),
		mSISDN := fs_GTP2C_msisdn(msisdn),
		mEI := omit,
		userLocationInfo := omit,
		servingNetwork := omit,
		rAT_Type := ts_GTP2C_RatType(rat_type),
		indication := omit,
		fullyQualifiedTEID := { sender_fteid },
		accessPointName := ts_GTP2C_APN(apn),
		selectionMode := ts_GTP2C_SelectionMode(0),
		pDN_Type := ts_GTP2C_PdnType(pdn_type),
		pDN_AddressAllocation := ts_GTP2C_PdnAddrAlloc('001'B, {iPv4_Address:='00000000'O}),
		maxAPN_Restriction := ts_GTP2C_ApnRestriction(0),
		ambr := ts_GTP2C_Ambr(102400, 102400),
		linkedEPS_Bearer_ID := omit,
		trustedWLANModeIndication := omit,
		protocolConfigOptions := omit,
		bearerContextGrouped := {
			ts_GTP2C_BcGrouped({
				ePS_Bearer_ID := ts_GTP2C_EpsBearerId(bearer_id),
				cause := omit,
				ePS_Bearer_TFT := omit,
				fullyQualifiedTEID := teid_list,
				bearerLevel_QoS := qos,
				chargingID := omit,
				bearerFlags := omit,
				transactionIdentifier := omit,
				protocolConfigOptions := omit,
				rAN_NASCause := omit,
				additionalProtocolConfigOptions := omit,
				extendedProtocolConfigOptions := omit
				})
		},
		traceInformation := omit,
		recovery := omit,
		csid := omit,
		uE_TimeZone := omit,
		user_CSG_Information := omit,
		chargingCharacteristics := ts_GTP2C_ChargingCaracteristics(chg_car),
		lDN := omit,
		signallingPriorityIndication := omit,
		iP_Addr := omit,
		portNumber := omit,
		aPCO := omit,
		trustedWLANAccessNetworkIdentifier := omit,
		cNOperatorSelectionEntity := omit,
		presenceReportingAreaInformation := omit,
		overloadControlInformationGrouped := omit,
		originationTimeStamp := omit,
		maximumWaitTime := omit,
		wLANLocationTimestamp := omit,
		nBIFOMContainer := omit,
		remoteUEContextGrouped := omit,
		nodeIdentifier := omit,
		extendedProtocolConfigOptions := omit,
		servingPLMNRateControl := omit,
		counter := omit,
		privateExtension := omit
	}});


template (present) PDU_GTPCv2
tr_GTP2C_CreateSessionReq(template (present) hexstring imsi := ?, template (present) octetstring apn := ?) :=
tr_PDU_GTP2C('00000000'O, ?, {
	createSessionRequest := {
		iMSI := tr_GTP2C_Imsi(imsi),
		mSISDN := *,
		mEI := *,
		userLocationInfo := *,
		servingNetwork := *,
		rAT_Type := tr_GTP2C_RatType(?),
		indication := *,
		fullyQualifiedTEID := ?,
		accessPointName := tr_GTP2C_APN(apn), // '*'
		selectionMode := ?,
		pDN_Type := *,
		pDN_AddressAllocation := ?,
		maxAPN_Restriction := *,
		ambr := *,
		linkedEPS_Bearer_ID := omit,
		trustedWLANModeIndication := omit,
		protocolConfigOptions := omit,
		bearerContextGrouped := ?,
		traceInformation := *,
		recovery := *,
		csid := omit,
		uE_TimeZone := *,
		user_CSG_Information := omit,
		chargingCharacteristics := *,
		lDN := omit,
		signallingPriorityIndication := *,
		iP_Addr := omit,
		portNumber := omit,
		aPCO := *,
		trustedWLANAccessNetworkIdentifier := omit,
		cNOperatorSelectionEntity := omit,
		presenceReportingAreaInformation := omit,
		overloadControlInformationGrouped := omit,
		originationTimeStamp := *,
		maximumWaitTime := *,
		wLANLocationTimestamp := omit,
		nBIFOMContainer := omit,
		remoteUEContextGrouped := *,
		nodeIdentifier := *,
		extendedProtocolConfigOptions := omit,
		servingPLMNRateControl := omit,
		counter := omit,
		privateExtension := omit
	}});

template (value) PDU_GTPCv2
ts_GTP2C_CreateSessionResp(template (value) FullyQualifiedTEID_List fteids,
			   template (value) PDN_AddressAllocation addr) :=
ts_PDU_GTP2C('00000000'O, '000000'O, '21'O, {
	createSessionResponse := {
		cause := ts_GTP2C_Cause(int2oct(16, 1), '0'B),
		changeReportingAction := omit,
		cSG_InformationReportingAction := omit,
		heNBInformationReporting := omit,
		fullyQualifiedTEID := fteids,
		pDN_AddressAllocation := addr,
		aPN_Restriction := omit,
		ambr := omit,
		linkedEPS_Bearer_ID := omit,
		protocolConfigOptions := omit,
		bearerContextGrouped := omit,
		recovery := omit,
		chargingGatewayName := omit,
		chargingGatewayAddress := omit,
		csid := omit,
		lDN := omit,
		pGW_Back_OffTime := omit,
		aPCO := omit,
		trustedWLANIPv4Parameters := omit,
		indicationFlags := omit,
		presenceReportingAreaAction := omit,
		loadControlInformationGrouped := omit,
		overloadControlInformationGrouped := omit,
		nBIFOMContainer := omit,
		pDNConnectionChargingID := omit,
		extendedProtocolConfigOptions := omit,
		privateExtension := omit
	}});
template (present) PDU_GTPCv2
tr_GTP2C_CreateSessionResp(template (present) OCT4 d_teid := ?,
			   template (present) OCT3 seq := ?,
			   template (present) OCT1 cause := ?,
			   template FullyQualifiedTEID_List fteids := *,
			   template PDN_AddressAllocation addr := *,
			   template BearerContextGrouped_List bctxg := *) :=
tr_PDU_GTP2C(d_teid, seq, {
	createSessionResponse := {
		cause := tr_GTP2C_Cause(cause),
		changeReportingAction := *,
		cSG_InformationReportingAction := *,
		heNBInformationReporting := *,
		fullyQualifiedTEID := fteids,
		pDN_AddressAllocation := addr,
		aPN_Restriction := ?,
		ambr := *,
		linkedEPS_Bearer_ID := *,
		protocolConfigOptions := *,
		bearerContextGrouped := bctxg,
		recovery := *,
		chargingGatewayName := *,
		chargingGatewayAddress := *,
		csid := *,
		lDN := *,
		pGW_Back_OffTime := *,
		aPCO := *,
		trustedWLANIPv4Parameters := *,
		indicationFlags := *,
		presenceReportingAreaAction := *,
		loadControlInformationGrouped := *,
		overloadControlInformationGrouped := *,
		nBIFOMContainer := *,
		pDNConnectionChargingID := *,
		extendedProtocolConfigOptions := *,
		privateExtension := *
	}});


template (value) PDU_GTPCv2
ts_GTP2C_DeleteSessionReq(template (value) OCT4 d_teid,
			  template (omit) OCT1 cause := omit,
			  template (value) FullyQualifiedTEID sender_fteid,
			  template (omit) FullyQualifiedTEID_List teid_list := omit,
			  template (value) uint4_t bearer_id) :=
ts_PDU_GTP2C(d_teid, '000000'O, '24'O, {
	deleteSessionRequest := {
		cause := fs_GTP2C_Cause(cause, '0'B),
		linkedEPS_Bearer_ID := ts_GTP2C_EpsBearerId(bearer_id),
		uLI := omit,
		indicationFlags := omit,
		protocolConfigOptions := omit,
		originatingNode := omit,
		fullyQualifiedTEID := sender_fteid,
		uE_TimeZone := omit,
		uLITimestamp := omit,
		rANNASReleaseCause := omit,
		trustedWLANAccessNetworkIdentifier := omit,
		tWANIdentifierTimestamp := omit,
		overloadControlInformationGrouped := omit,
		uELocalIP_Addr := omit,
		portNumber := omit,
		extendedProtocolConfigOptions := omit,
		privateExtension := omit
	}});
template (present) PDU_GTPCv2
tr_GTP2C_DeleteSessionReq(template (present) OCT4 d_teid,
			  template (present) OCT3 seq := ?,
			  template (omit) OCT1 cause,
			  template (present) FullyQualifiedTEID sender_fteid,
			  template FullyQualifiedTEID_List teid_list,
			  template (present) uint4_t bearer_id) :=
tr_PDU_GTP2C(d_teid, seq, {
	deleteSessionRequest := {
		cause := fr_GTP2C_Cause(cause),
		linkedEPS_Bearer_ID := tr_GTP2C_EpsBearerId(bearer_id),
		uLI := *,
		indicationFlags := *,
		protocolConfigOptions := *,
		originatingNode := *,
		fullyQualifiedTEID := sender_fteid,
		uE_TimeZone := *,
		uLITimestamp := *,
		rANNASReleaseCause := *,
		trustedWLANAccessNetworkIdentifier := *,
		tWANIdentifierTimestamp := *,
		overloadControlInformationGrouped := *,
		uELocalIP_Addr := *,
		portNumber := *,
		extendedProtocolConfigOptions := *,
		privateExtension := *
	}});


template (value) PDU_GTPCv2
ts_GTP2C_DeleteSessionResp(template (value) OCT4 d_teid,
			   template (value) OCT3 seq,
			   template (value) OCT1 cause) :=
ts_PDU_GTP2C(d_teid, '000000'O, '25'O, {
	deleteSessionResponse := {
		cause := ts_GTP2C_Cause(cause, '0'B),
		recovery := omit,
		protocolConfigOptions := omit,
		indicationFlags := omit,
		loadControlInformationGrouped := omit,
		overloadControlInformationGrouped := omit,
		extendedProtocolConfigOptions := omit,
		privateExtension := omit

	}});
template (present) PDU_GTPCv2
tr_GTP2C_DeleteSessionResp(template (present) OCT4 d_teid,
			   template (present) OCT3 seq := ?,
			   template (present) OCT1 cause := ?
			) :=
tr_PDU_GTP2C(d_teid, seq, {
	deleteSessionResponse := {
		cause := tr_GTP2C_Cause(cause),
		recovery := *,
		protocolConfigOptions := *,
		indicationFlags := *,
		loadControlInformationGrouped := *,
		overloadControlInformationGrouped := *,
		extendedProtocolConfigOptions := *,
		privateExtension := *
	}});

template (value) PDU_GTPCv2
ts_GTP2C_CreateBearerReq(template (value) OCT4 d_teid,
			 template (value) integer proc_trans_id,
			 template (value) uint4_t linked_id,
			 template (value) uint4_t bearer_id,
			 template (omit) FullyQualifiedTEID_List teid_list,
			 template (value) Bearer_QoS qos := ts_GTP2C_BearerQos('09'O, 0,0,0,0)) :=
ts_PDU_GTP2C(d_teid, '000000'O, '5F'O, {
	createBearerRequest := {
		procedureTransactionID := ts_GTP2C_ProcTransId(proc_trans_id),
		linkedEPS_BearerID := ts_GTP2C_EpsBearerId(linked_id),
		protocolConfigOptions := omit,
		bearerContextGrouped := {
			ts_GTP2C_BcGrouped({
				ePS_Bearer_ID := ts_GTP2C_EpsBearerId(bearer_id),
				cause := omit,
				ePS_Bearer_TFT := omit,
				fullyQualifiedTEID := teid_list,
				bearerLevel_QoS := qos,
				chargingID := omit,
				bearerFlags := omit,
				transactionIdentifier := omit,
				protocolConfigOptions := omit,
				rAN_NASCause := omit,
				additionalProtocolConfigOptions := omit,
				extendedProtocolConfigOptions := omit
				})
		},
		csid := omit,
		changeReportingAction := omit,
		cSG_InformationReportingAction := omit,
		heNBInformationReporting := omit,
		presenceReportingAreaAction := omit,
		indicationFlags := omit,
		loadControlInformationGrouped := omit,
		overloadControlInformationGrouped := omit,
		nBIFOMContainer := omit,
		privateExtension := omit
	}});


template (value) PDU_GTPCv2
ts_GTP2C_DeleteBearerReq(template (value) OCT4 d_teid,
			 template (value) integer proc_trans_id,
			 template (value) uint4_t bearer_id,
			 template (value) OCT1 cause) :=
ts_PDU_GTP2C(d_teid, '000000'O, '63'O, {
	deleteBearerRequest := {
		epsBearerIdentity := { ts_GTP2C_EpsBearerId(bearer_id) },
		bearerContextGrouped := omit,
		procedureTransactionID := ts_GTP2C_ProcTransId(proc_trans_id),
		protocolConfigOptions := omit,
		csid := omit,
		cause := ts_GTP2C_Cause(cause, '0'B),
		indicationFlags := omit,
		loadControlInformationGrouped := omit,
		overloadControlInformationGrouped := omit,
		nBIFOMContainer := omit,
		extendedProtocolConfigOptions := omit,
		privateExtension := omit
	}});


template (present) PDU_GTPCv2
tr_GTP2C_DeleteBearerResp(template (present) OCT4 d_teid,
			  template (present) OCT3 seq := ?,
			  template (present) OCT1 cause := ?) :=
tr_PDU_GTP2C(d_teid, seq, {
	deleteBearerResponse := {
		cause := tr_GTP2C_Cause(cause),
		linkedBearerIdentity := *,
		bearerContextGrouped := *,
		recovery := *,
		csid := *,
		protocolConfigOptions := *,
		uE_TimeZone := *,
		uLI := *,
		uLITimestamp := *,
		trustedWLANAccessNetworkIdentifier := *,
		tWANIdentifierTimestamp := *,
		overloadControlInformationGrouped := *,
		iP_Addr := *,
		portNumber := *,
		nBIFOMContainer := *,
		privateExtension := *
	}});

/* 8.18 */
template (value) ServingNetwork
ts_GTP2C_ServingNetwork(template (value) hexstring mcc,
			template (value) hexstring mnc,
			template (value) BIT4 instance := '0000'B) :=
{
	elementIdentifier := '53'O,
	lengthIndicator := 0, /* overwritten */
	instance := instance,
	spare := '0000'B,
	mccDigit1 := mcc[0],
	mccDigit2 := mcc[1],
	mccDigit3 := mcc[2],
	mncDigit3 := mnc[2], /* 'F'H for 2 digit MNC */
	mncDigit1 := mnc[0],
	mncDigit2 := mnc[1],
	additionalOctets := omit
}



}
