module GTPv2_Templates { /* (C) 2019 by Harald Welte * 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 := 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.5 */ template (value) AccessPointName ts_GTP2C_APN(template (value) octetstring apn) := { elementIdentifier := '48'O, lengthIndicator := 0, /* overwritten */ instance := '0000'B, spare := '0000'B, aPN_Value := apn } template (present) AccessPointName tr_GTP2C_APN(template (present) octetstring apn) := { elementIdentifier := '48'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 := '53'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 := '53'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) := tr_PDU_GTP2C('00000000'O, ?, { createSessionRequest := { iMSI := tr_GTP2C_Imsi(imsi), mSISDN := *, mEI := *, userLocationInfo := ?, servingNetwork := ?, rAT_Type := tr_GTP2C_RatType(6), indication := *, fullyQualifiedTEID := ?, accessPointName := tr_GTP2C_APN('012a'O), // '*' selectionMode := ?, pDN_Type := ?, pDN_AddressAllocation := ?, maxAPN_Restriction := ?, ambr := *, linkedEPS_Bearer_ID := omit, trustedWLANModeIndication := omit, protocolConfigOptions := omit, bearerContextGrouped := ?, traceInformation := *, recovery := omit, csid := omit, uE_TimeZone := ?, user_CSG_Information := omit, chargingCharacteristics := ?, lDN := omit, signallingPriorityIndication := *, iP_Addr := omit, portNumber := omit, aPCO := omit, 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 := * }}); }