1060 lines
29 KiB
Plaintext
1060 lines
29 KiB
Plaintext
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 := 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 := *
|
|
}});
|
|
|
|
/* 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
|
|
}
|
|
|
|
|
|
|
|
}
|