diff options
Diffstat (limited to 'library/GTPv2_Templates.ttcn')
-rw-r--r-- | library/GTPv2_Templates.ttcn | 481 |
1 files changed, 403 insertions, 78 deletions
diff --git a/library/GTPv2_Templates.ttcn b/library/GTPv2_Templates.ttcn index 3d690175..752e85cd 100644 --- a/library/GTPv2_Templates.ttcn +++ b/library/GTPv2_Templates.ttcn @@ -106,7 +106,7 @@ template (present) PDU_GTPCv2 tr_PDU_GTP2C_msgtypes(template (present) OCT1 type version := '010'B, messageType := types, lengthf := ?, - tEID := ?, + tEID := *, sequenceNumber := ?, spare3 := '00'O, gtpcv2_pdu := ?, @@ -126,7 +126,7 @@ template (present) IMSI tr_GTP2C_Imsi(template (present) hexstring imsi) := { lengthIndicator := ?, instance := ?, spare := '0000'B, - iMSI_Value := imsi + iMSI_Value := f_pad_bcd_number_tmpl(imsi) } template (present) MSISDN ts_GTP2C_msisdn(template (present) hexstring msisdn) := { @@ -145,30 +145,39 @@ template (omit) 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), + Error_Ind_from_RNC_eNB_SGSN_MME (6), IMSI_Detach_Only (7), Reactivation_Required (8), -} -*/ - -const integer c_GTP2C_Cause_LocalDetach := 1; + PDN_reconnection_to_APN_disallowed (9), + Access_changed_from_Non_3GPP_to_3GPP (10), + PDN_connection_inactivity_timer_expires (11), + PGW_not_responding (12), + Network_Failure (13), + QoS_parameter_mismatch (14), + EPS_to_5GS_Mobility (15), + Request_accepted (16), + Request_accepted_partially (17), + New_PDN_type_due_to_network_preference (18), + New_PDN_type_due_to_single_address_bearer_only (19), + /* ... */ + Context_Not_Found (64), + APN_access_denied__no_subscription (93) +} with { variant "FIELDLENGTH(8)" encode "RAW" }; /* 8.4 */ -template (value) Cause ts_GTP2C_Cause(template (value) OCT1 cause, +template (value) Cause ts_GTP2C_Cause(template (value) GTP2C_Cause cause, template (value) BIT1 cs) := { elementIdentifier := '02'O, lengthIndicator := 0, /* overwritten */ instance := '0000'B, spare := '0000'B, - causeValue := cause, + causeValue := int2oct(enum2int(valueof(cause)), 1), cS := cs, bCE := '0'B, pCE := '0'B, @@ -178,12 +187,24 @@ template (value) Cause ts_GTP2C_Cause(template (value) OCT1 cause, instanceOfOffendingIE := omit, spare3 := omit } -template (present) Cause tr_GTP2C_Cause(template (present) OCT1 cause) := { +private function enum2int_GTP2C_Cause_tmpl(template GTP2C_Cause inp) return template integer +{ + if (istemplatekind(inp, "omit")) { + return omit; + } else if (istemplatekind(inp, "*")) { + return *; + } else if (istemplatekind(inp, "?")) { + return ?; + } else { + return enum2int(valueof(inp)); + } +} +template (present) Cause tr_GTP2C_Cause(template (present) GTP2C_Cause cause) := { elementIdentifier := '02'O, lengthIndicator := ?, instance := ?, spare := '0000'B, - causeValue := cause, + causeValue := int2oct_tmpl(enum2int_GTP2C_Cause_tmpl(cause), 1), cS := ?, bCE := ?, pCE := ?, @@ -193,7 +214,7 @@ template (present) Cause tr_GTP2C_Cause(template (present) OCT1 cause) := { instanceOfOffendingIE := *, spare3 := * } -private function fs_GTP2C_Cause(template (omit) OCT1 cause, template (value) BIT1 cs) return +private function fs_GTP2C_Cause(template (omit) GTP2C_Cause cause, template (value) BIT1 cs) return template (omit) Cause { if (istemplatekind(cause, "omit")) { return omit; @@ -201,7 +222,7 @@ template (omit) Cause { return ts_GTP2C_Cause(cause, cs); } } -private function fr_GTP2C_Cause(template OCT1 cause) return +private function fr_GTP2C_Cause(template GTP2C_Cause cause) return template Cause { if (istemplatekind(cause, "omit")) { return omit; @@ -213,16 +234,16 @@ template Cause { } -/* 8.5 */ +/* 8.6 */ template (value) AccessPointName ts_GTP2C_APN(template (value) octetstring apn) := { - elementIdentifier := '48'O, + 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 := '48'O, + elementIdentifier := '47'O, lengthIndicator := ?, instance := ?, spare := '0000'B, @@ -262,7 +283,73 @@ tr_GTP2C_EpsBearerId(template (present) uint4_t bid) := { additionalOctets := * } +/* 8.12 */ +template (present) Indication +tr_GTP2C_Indication(template (present) BIT1 oI := ?) := { + elementIdentifier := '4D'O, + lengthIndicator := ?, + instance := '0000'B, + spare := '0000'B, + sGWCI := ?, + iSRAI := ?, + iSRSI := ?, + oI := oI, + dFI := ?, + hI := ?, + dTF := ?, + dAF := ?, + mSV := ?, + sI := ?, + pT := ?, + pBit := ?, + cRSI := ?, + cFSI := ?, + uIMSI := ?, + sQCI := ?, + cCRSI := *, + iSRAU := *, + mBMDT := *, + s4AF := *, + s6AF := *, + sRNI := *, + pBIC := *, + retLoc := *, + cPSR := *, + cLII := *, + cSFBI := *, + pPSI := *, + pPON_PPEI := *, + pPOF := *, + aRRL := *, + cPRAI := *, + aOPI := *, + aOSI := *, + pCRI := *, + pSCI := *, + bDWI := *, + dTCI := *, + uASI := *, + nSI := *, + wPMSI := *, + uNACCSI := *, + pNSI := *, + s11TF := *, + pMTSMI := *, + cPOPCI := *, + ePCOSI := *, + rOAAI := *, + tSPCMI := *, + spare_1 := *, + spare_2 := *, + spare_3 := *, + spare_4 := *, + spare_5 := *, + spare_6 := *, + spare_7 := *, + + additionalOctets := * +} /* 8.14 */ template (value) PDN_AddressAllocation @@ -320,8 +407,22 @@ ts_GTP2C_BearerQos(template (value) OCT1 qci, } /* 8.17 */ +type enumerated GTP2C_RAT_Type { + GTP2C_RAT_reserved ('00'O), + GTP2C_RAT_UTRAN ('01'O), + GTP2C_RAT_GERAN ('02'O), + GTP2C_RAT_WLAN ('03'O), + GTP2C_RAT_GAN ('04'O), + GTP2C_RAT_HSPA_EVOLUTION ('05'O), + GTP2C_RAT_EUTRAN ('06'O), + GTP2C_RAT_Virtual ('07'O), + GTP2C_RAT_EUTRAN_NB_IoT ('08'O), + GTP2C_RAT_LTE_M ('09'O), + GTP2C_RAT_NR ('0A'O) +} with { variant "FIELDLENGTH(8)" encode "RAW" }; + template (value) RAT_Type ts_GTP2C_RatType(template (value) integer rat) := { - elementIdentifier := '53'O, + elementIdentifier := '52'O, lengthIndicator := 0, /* overwritten */ instance := '0000'B, spare := '0000'B, @@ -329,7 +430,7 @@ template (value) RAT_Type ts_GTP2C_RatType(template (value) integer rat) := { additionalOctets := omit } template (present) RAT_Type tr_GTP2C_RatType(template (present) integer rat) := { - elementIdentifier := '53'O, + elementIdentifier := '52'O, lengthIndicator := ?, instance := ?, spare := '0000'B, @@ -484,6 +585,25 @@ tr_GTP2C_FTEID(template (present) integer if_type, template (present) OCT4 teid, } /* 8.28 */ +template (value) BearerContextIEs +ts_GTP2C_BcContextIE(template (value) uint4_t ebi, + template (omit) FullyQualifiedTEID_List teid_list := omit, + template (omit) Bearer_QoS qos := ts_GTP2C_BearerQos('09'O, 0,0,0,0), + template (omit) ChargingID charging_id := omit) := { + ePS_Bearer_ID := ts_GTP2C_EpsBearerId(ebi), + cause := ts_GTP2C_Cause(Request_accepted, '0'B), + ePS_Bearer_TFT := omit, + fullyQualifiedTEID := teid_list, + bearerLevel_QoS := qos, + chargingID := charging_id, + bearerFlags := omit, + transactionIdentifier := omit, + protocolConfigOptions := omit, + rAN_NASCause := omit, + additionalProtocolConfigOptions := omit, + extendedProtocolConfigOptions := omit +} + template (value) BearerContextGrouped ts_GTP2C_BcGrouped(template (value) BearerContextIEs ies) := { elementIdentifier := '5D'O, @@ -501,7 +621,16 @@ tr_GTP2C_BcGrouped(template (present) BearerContextIEs ies) := { bearerContextIEs := ies } - +/* 8.29 */ +template (value) ChargingID +ts_GTP2C_ChargingID(template (value) OCT4 chargingID_Value) := { + elementIdentifier := '5D'O, + lengthIndicator := 0, /* overwritten */ + instance := '0000'B, + spare := '0000'B, + chargingID_Value := chargingID_Value, + additionalOctets := omit +} /* 8.30 */ template (value) ChargingCharacteristics @@ -556,6 +685,13 @@ ts_GTP2C_ProcTransId(template (value) integer pti) := { pTI_Value := pti, additionalOctets := omit } +private function f_ts_GTP2C_ProcTransId_omit(template (omit) integer pti) +return template (omit) ProcedureTransactionID { + if (istemplatekind(pti, "omit")) { + return omit; + } + return ts_GTP2C_ProcTransId(pti); +} template (present) ProcedureTransactionID tr_GTP2C_ProcTransId(template (present) integer pti) := { elementIdentifier := '64'O, @@ -610,8 +746,98 @@ tr_GTP2C_SelectionMode(template (present) integer mode) := { additionalOctets := * } +/* 8.62 Fully qualified PDN Connection Set Identifier (FQ-CSID) */ +template (value) NodeID ts_GTP2C_FQCSID_NodeID_IPv4(template (value) OCT4 addr) := { + globalUnicastIPv4 := addr +} +template (value) FullyQualifiedPDN_ConnectionSetID +ts_GTP2C_FQCSID(template (value) integer nRofCSIDs, + template (value) integer nodeIDType, + template (value) NodeID nodeID, + template (value) PDN_CSID_List pDN_CSID_List, + template (value) uint4_t instance := 0) := { + elementIdentifier := '84'O, + lengthIndicator := 0, /* overwritten */ + instance := int2bit(valueof(instance), 4), + spare := '0000'B, + nRofCSIDs := nRofCSIDs, + nodeIDType := nodeIDType, + nodeID := nodeID, + pDN_CSID_List := pDN_CSID_List, + additionalOctets := omit +} +template (value) FullyQualifiedPDN_ConnectionSetID +ts_GTP2C_FQCSID_IPv4(template (value) OCT4 addr, + template (value) OCT2 csid, + template (value) uint4_t instance := 0) := +ts_GTP2C_FQCSID(nRofCSIDs := 1, + nodeIDType := 0, + nodeID := ts_GTP2C_FQCSID_NodeID_IPv4(addr), + pDN_CSID_List := {csid}, + instance := instance); + +/* 8.94 Additional Protocol Configuration Options (APCO) */ +template (present) ProtocolID_or_ContainerID +tr_GTP2C_PCO_P(template (present) OCT2 protocolID_or_ContainerID := ?, + template (present) octetstring protID_orContID_Contents := ?) := { + protocolID_or_ContainerID := protocolID_or_ContainerID, + lengthIndicator := ?, + protID_orContID_Contents := protID_orContID_Contents +} +template (value) ProtocolID_or_ContainerID +ts_GTP2C_PCO_P(template (value) OCT2 protocolID_or_ContainerID, + template (value) octetstring protID_orContID_Contents := ''O) := { + protocolID_or_ContainerID := protocolID_or_ContainerID, + lengthIndicator := 0, + protID_orContID_Contents := protID_orContID_Contents +} - +template (present) ProtocolID_or_ContainerID tr_GTP2C_PCO_P_DNS_IPv4(template (present) octetstring dns4 := ?) := + tr_GTP2C_PCO_P('000d'O, dns4); +template (value) ProtocolID_or_ContainerID ts_GTP2C_PCO_P_DNS_IPv4(template (value) octetstring dns4 := ''O) := + ts_GTP2C_PCO_P('000d'O, dns4); + +template (present) ProtocolID_or_ContainerID tr_GTP2C_PCO_P_DNS_IPv6(template (present) octetstring dns6 := ?) := + tr_GTP2C_PCO_P('0003'O, dns6); +template (value) ProtocolID_or_ContainerID ts_GTP2C_PCO_P_DNS_IPv6(template (value) octetstring dns6 := ''O) := + ts_GTP2C_PCO_P('0003'O, dns6); + +template (present) ProtocolID_or_ContainerID tr_GTP2C_PCO_P_PCSCF_IPv4(template (present) octetstring pcscf4 := ?) := + tr_GTP2C_PCO_P('000C'O, pcscf4); +template (value) ProtocolID_or_ContainerID ts_GTP2C_PCO_P_PCSCF_IPv4(template (value) octetstring pcscf4 := ''O) := + ts_GTP2C_PCO_P('000C'O, pcscf4); + +template (present) ProtocolID_or_ContainerID tr_GTP2C_PCO_P_PCSCF_IPv6(template (present) octetstring pcscf6 := ?) := + tr_GTP2C_PCO_P('0001'O, pcscf6); +template (value) ProtocolID_or_ContainerID ts_GTP2C_PCO_P_PCSCF_IPv6(template (value) octetstring pcscf6 := ''O) := + ts_GTP2C_PCO_P('0001'O, pcscf6); + +template (value) APCO +ts_GTP2C_APCO(template (value) BIT4 instance := '0000'B, + template (value) ProtocolIDs_and_ContainerIDs protocolIDs_and_ContainerIDs := {}) := { + elementIdentifier := 'A3'O, + lengthIndicator := 0, + instance := instance, + spare := '0000'B, + configProtocol := '000'B, + spare2 := '0000'B, + extensionField := '1'B, + protocolIDs_and_ContainerIDs := protocolIDs_and_ContainerIDs, + additionalOctets := omit +} +template (present) APCO +tr_GTP2C_APCO(template (present) BIT4 instance := ?, + template ProtocolIDs_and_ContainerIDs protocolIDs_and_ContainerIDs := *) := { + elementIdentifier := 'A3'O, + lengthIndicator := ?, + instance := instance, + spare := ?, + configProtocol := '000'B, + spare2 := '0000'B, + extensionField := '1'B, + protocolIDs_and_ContainerIDs := protocolIDs_and_ContainerIDs, + additionalOctets := * +} template (value) PDU_GTPCv2 ts_PDU_GTP2C(template (omit) OCT4 teid, template (value) OCT3 seq, template (value) OCT1 msg_type, @@ -675,13 +901,15 @@ ts_GTP2C_CreateSessionReq(template (value) hexstring imsi, template (omit) hexst 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)) := + template (omit) UserLocationInfo uli := omit, + template (value) Bearer_QoS qos := ts_GTP2C_BearerQos('09'O, 0,0,0,0), + template (omit) APCO apco := omit) := ts_PDU_GTP2C('00000000'O, '000000'O, '20'O, { createSessionRequest := { iMSI := ts_GTP2C_Imsi(imsi), mSISDN := fs_GTP2C_msisdn(msisdn), mEI := omit, - userLocationInfo := omit, + userLocationInfo := uli, servingNetwork := omit, rAT_Type := ts_GTP2C_RatType(rat_type), indication := omit, @@ -721,7 +949,7 @@ ts_PDU_GTP2C('00000000'O, '000000'O, '20'O, { signallingPriorityIndication := omit, iP_Addr := omit, portNumber := omit, - aPCO := omit, + aPCO := apco, trustedWLANAccessNetworkIdentifier := omit, cNOperatorSelectionEntity := omit, presenceReportingAreaInformation := omit, @@ -740,38 +968,40 @@ ts_PDU_GTP2C('00000000'O, '000000'O, '20'O, { template (present) PDU_GTPCv2 -tr_GTP2C_CreateSessionReq(template (present) hexstring imsi) := +tr_GTP2C_CreateSessionReq(template (present) hexstring imsi := ?, + template (present) octetstring apn := ?, + template APCO apco := *) := tr_PDU_GTP2C('00000000'O, ?, { createSessionRequest := { iMSI := tr_GTP2C_Imsi(imsi), mSISDN := *, mEI := *, - userLocationInfo := ?, - servingNetwork := ?, - rAT_Type := tr_GTP2C_RatType(6), + userLocationInfo := *, + servingNetwork := *, + rAT_Type := tr_GTP2C_RatType(?), indication := *, fullyQualifiedTEID := ?, - accessPointName := tr_GTP2C_APN('012a'O), // '*' + accessPointName := tr_GTP2C_APN(apn), // '*' selectionMode := ?, - pDN_Type := ?, + pDN_Type := *, pDN_AddressAllocation := ?, - maxAPN_Restriction := ?, + maxAPN_Restriction := *, ambr := *, linkedEPS_Bearer_ID := omit, trustedWLANModeIndication := omit, protocolConfigOptions := omit, bearerContextGrouped := ?, traceInformation := *, - recovery := omit, + recovery := *, csid := omit, - uE_TimeZone := ?, + uE_TimeZone := *, user_CSG_Information := omit, - chargingCharacteristics := ?, + chargingCharacteristics := *, lDN := omit, signallingPriorityIndication := *, iP_Addr := omit, portNumber := omit, - aPCO := omit, + aPCO := apco, trustedWLANAccessNetworkIdentifier := omit, cNOperatorSelectionEntity := omit, presenceReportingAreaInformation := omit, @@ -789,11 +1019,16 @@ tr_PDU_GTP2C('00000000'O, ?, { }}); 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, { +ts_GTP2C_CreateSessionResp(template (value) OCT4 d_teid, + template (value) OCT3 seq, + template (value) GTP2C_Cause cause := Request_accepted, + template (omit) FullyQualifiedTEID_List fteids := omit, + template (omit) PDN_AddressAllocation addr := omit, + template (omit) BearerContextGrouped_List bearerContextGrouped := omit, + template (omit) APCO apco := omit) := +ts_PDU_GTP2C(d_teid, seq, '21'O, { createSessionResponse := { - cause := ts_GTP2C_Cause(int2oct(16, 1), '0'B), + cause := ts_GTP2C_Cause(cause, '0'B), changeReportingAction := omit, cSG_InformationReportingAction := omit, heNBInformationReporting := omit, @@ -803,14 +1038,14 @@ ts_PDU_GTP2C('00000000'O, '000000'O, '21'O, { ambr := omit, linkedEPS_Bearer_ID := omit, protocolConfigOptions := omit, - bearerContextGrouped := omit, + bearerContextGrouped := bearerContextGrouped, recovery := omit, chargingGatewayName := omit, chargingGatewayAddress := omit, csid := omit, lDN := omit, pGW_Back_OffTime := omit, - aPCO := omit, + aPCO := apco, trustedWLANIPv4Parameters := omit, indicationFlags := omit, presenceReportingAreaAction := omit, @@ -824,10 +1059,12 @@ ts_PDU_GTP2C('00000000'O, '000000'O, '21'O, { template (present) PDU_GTPCv2 tr_GTP2C_CreateSessionResp(template (present) OCT4 d_teid := ?, template (present) OCT3 seq := ?, - template (present) OCT1 cause := ?, + template (present) GTP2C_Cause cause := ?, template FullyQualifiedTEID_List fteids := *, template PDN_AddressAllocation addr := *, - template BearerContextGrouped_List bctxg := *) := + template APN_Restriction apn_restriction := *, + template BearerContextGrouped_List bctxg := *, + template APCO exp_apco := *) := tr_PDU_GTP2C(d_teid, seq, { createSessionResponse := { cause := tr_GTP2C_Cause(cause), @@ -836,7 +1073,7 @@ tr_PDU_GTP2C(d_teid, seq, { heNBInformationReporting := *, fullyQualifiedTEID := fteids, pDN_AddressAllocation := addr, - aPN_Restriction := ?, + aPN_Restriction := apn_restriction, ambr := *, linkedEPS_Bearer_ID := *, protocolConfigOptions := *, @@ -847,7 +1084,7 @@ tr_PDU_GTP2C(d_teid, seq, { csid := *, lDN := *, pGW_Back_OffTime := *, - aPCO := *, + aPCO := exp_apco, trustedWLANIPv4Parameters := *, indicationFlags := *, presenceReportingAreaAction := *, @@ -862,7 +1099,7 @@ tr_PDU_GTP2C(d_teid, seq, { template (value) PDU_GTPCv2 ts_GTP2C_DeleteSessionReq(template (value) OCT4 d_teid, - template (omit) OCT1 cause := omit, + template (omit) GTP2C_Cause cause := omit, template (value) FullyQualifiedTEID sender_fteid, template (omit) FullyQualifiedTEID_List teid_list := omit, template (value) uint4_t bearer_id) := @@ -887,18 +1124,18 @@ ts_PDU_GTP2C(d_teid, '000000'O, '24'O, { privateExtension := omit }}); template (present) PDU_GTPCv2 -tr_GTP2C_DeleteSessionReq(template (present) OCT4 d_teid, +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) := + template GTP2C_Cause cause := *, + template (present) uint4_t bearer_id := ?, + template Indication indicationFlags := *, + template FullyQualifiedTEID sender_fteid := *) := tr_PDU_GTP2C(d_teid, seq, { deleteSessionRequest := { cause := fr_GTP2C_Cause(cause), linkedEPS_Bearer_ID := tr_GTP2C_EpsBearerId(bearer_id), uLI := *, - indicationFlags := *, + indicationFlags := indicationFlags, protocolConfigOptions := *, originatingNode := *, fullyQualifiedTEID := sender_fteid, @@ -918,8 +1155,8 @@ tr_PDU_GTP2C(d_teid, seq, { 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, { + template (value) GTP2C_Cause cause) := +ts_PDU_GTP2C(d_teid, seq, '25'O, { deleteSessionResponse := { cause := ts_GTP2C_Cause(cause, '0'B), recovery := omit, @@ -934,7 +1171,7 @@ ts_PDU_GTP2C(d_teid, '000000'O, '25'O, { template (present) PDU_GTPCv2 tr_GTP2C_DeleteSessionResp(template (present) OCT4 d_teid, template (present) OCT3 seq := ?, - template (present) OCT1 cause := ? + template (present) GTP2C_Cause cause := ? ) := tr_PDU_GTP2C(d_teid, seq, { deleteSessionResponse := { @@ -950,33 +1187,19 @@ tr_PDU_GTP2C(d_teid, seq, { template (value) PDU_GTPCv2 ts_GTP2C_CreateBearerReq(template (value) OCT4 d_teid, - template (value) integer proc_trans_id, + template (omit) integer proc_trans_id, template (value) uint4_t linked_id, template (value) uint4_t bearer_id, - template (omit) FullyQualifiedTEID_List teid_list, + template (value) BearerContextGrouped_List bearer_ctx_list, + template (omit) FullyQualifiedPDN_ConnectionSetID_List csid := omit, 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), + procedureTransactionID := f_ts_GTP2C_ProcTransId_omit(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, + bearerContextGrouped := bearer_ctx_list, + csid := csid, changeReportingAction := omit, cSG_InformationReportingAction := omit, heNBInformationReporting := omit, @@ -987,13 +1210,96 @@ ts_PDU_GTP2C(d_teid, '000000'O, '5F'O, { nBIFOMContainer := omit, privateExtension := omit }}); +template (present) PDU_GTPCv2 +tr_GTP2C_CreateBearerResp(template (present) OCT4 d_teid, + template (present) OCT3 seq := ?, + template (present) GTP2C_Cause cause := ? + ) := +tr_PDU_GTP2C(d_teid, seq, { + createBearerResponse := { + cause := tr_GTP2C_Cause(cause), + bearerContextGrouped := *, + recovery := *, + csid := *, + protocolConfigOptions := *, + uE_TimeZone := *, + uLI := *, + trustedWLANAccessNetworkIdentifier := *, + overloadControlInformationGrouped := *, + presenceReportingAreaInformation := *, + iP_Addr := *, + wLANLocationTimestamp := *, + portNumber := *, + nBIFOMContainer := *, + extendedProtocolConfigOptions := *, + privateExtension:= * + }}); +template (present) PDU_GTPCv2 +tr_GTP2C_ModifyBearerReq(template (present) OCT4 d_teid := ?, + template (present) OCT3 seq := ?) := +tr_PDU_GTP2C(d_teid, seq, { + modifyBearerRequest := { + mEI := *, + userLocationInfo := *, + servingNetwork := *, + rAT_Type := *, + indicationFlags := *, + fullyQualifiedTEID := *, + ambr := *, + delayDownlinkPacketNotificationReq := *, + bearerContextGrouped := *, + recovery := *, + uE_TimeZone := *, + csid := *, + user_CSG_Information := *, + iP_Addr := *, + portNumber := *, + lDN := *, + //maxMBR_APN_AMBR := *, + cNOperatorSelectionEntity := *, + presenceReportingAreaInformation := *, + overloadControlInformationGrouped := *, + servingPLMNRateControl := *, + counter := *, + privateExtension := * + }}); + +template (value) PDU_GTPCv2 +ts_GTP2C_ModifyBearerResp(template (value) OCT4 d_teid, + template (value) OCT3 seq, + template (value) GTP2C_Cause cause, + template (value) uint4_t bearer_id, + template (omit) BearerContextGrouped_List bearerContextGrouped := omit) := +ts_PDU_GTP2C(d_teid, seq, '23'O, { + modifyBearerResponse := { + cause := ts_GTP2C_Cause(cause, '0'B), + mSISDN := omit, + linkedEPS_Bearer_ID := ts_GTP2C_EpsBearerId(bearer_id), + aPN_Restriction := omit, + protocolConfigOptions := omit, + bearerContextGrouped := bearerContextGrouped, + changeReportingAction := omit, + cSG_InformationReportingAction := omit, + heNBInformationReporting := omit, + chargingGatewayName := omit, + chargingGatewayAddress := omit, + csid := omit, + recovery := omit, + lDN := omit, + indicationFlags := omit, + presenceReportingAreaAction := omit, + loadControlInformationGrouped := omit, + overloadControlInformationGrouped := omit, + pDNConnectionChargingID := 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) := + template (value) GTP2C_Cause cause) := ts_PDU_GTP2C(d_teid, '000000'O, '63'O, { deleteBearerRequest := { epsBearerIdentity := { ts_GTP2C_EpsBearerId(bearer_id) }, @@ -1014,7 +1320,7 @@ ts_PDU_GTP2C(d_teid, '000000'O, '63'O, { template (present) PDU_GTPCv2 tr_GTP2C_DeleteBearerResp(template (present) OCT4 d_teid, template (present) OCT3 seq := ?, - template (present) OCT1 cause := ?) := + template (present) GTP2C_Cause cause := ?) := tr_PDU_GTP2C(d_teid, seq, { deleteBearerResponse := { cause := tr_GTP2C_Cause(cause), @@ -1035,6 +1341,25 @@ tr_PDU_GTP2C(d_teid, seq, { 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 +} + } |