| module RANAP_Templates { |
| |
| import from General_Types all; |
| import from Misc_Helpers all; |
| import from Native_Functions all; |
| |
| import from RANAP_IEs all; |
| import from RANAP_CommonDataTypes all; |
| import from RANAP_Constants all; |
| import from RANAP_Containers all; |
| import from RANAP_PDU_Contents all; |
| import from RANAP_PDU_Descriptions all; |
| |
| template (value) Cause ts_RanapCause_om_intervention := { misc := 113 }; |
| |
| /***************************************************************************************************** |
| * Reset |
| *****************************************************************************************************/ |
| |
| template (value) RANAP_PDU |
| ts_RANAP_Reset(template (value) Cause cause, template (value) CN_DomainIndicator dom, |
| template (omit) Reset.protocolExtensions exts := omit) := { |
| initiatingMessage := { |
| procedureCode := id_Reset, |
| criticality := reject, |
| value_ := { |
| Reset := { |
| protocolIEs := { |
| { |
| id := id_Cause, |
| criticality := ignore, |
| value_ := { |
| cause := cause |
| } |
| }, { |
| id := id_CN_DomainIndicator, |
| criticality := reject, |
| value_ := { |
| cN_DomainIndicator := dom |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| template RANAP_PDU |
| tr_RANAP_Reset(template Cause cause := ?, template CN_DomainIndicator dom := ?, |
| template Reset.protocolExtensions exts := *) := { |
| initiatingMessage := { |
| procedureCode := id_Reset, |
| criticality := reject, |
| value_ := { |
| Reset := { |
| protocolIEs := { |
| { |
| id := id_Cause, |
| criticality := ignore, |
| value_ := { |
| cause := cause |
| } |
| }, { |
| id := id_CN_DomainIndicator, |
| criticality := reject, |
| value_ := { |
| cN_DomainIndicator := dom |
| } |
| }, * |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| |
| template (value) RANAP_PDU |
| ts_RANAP_ResetAck(template (value) CN_DomainIndicator dom, |
| template (omit) ResetAcknowledge.protocolExtensions exts := omit) := { |
| successfulOutcome := { |
| procedureCode := id_Reset, |
| criticality := reject, |
| value_ := { |
| ResetAcknowledge := { |
| protocolIEs := { |
| { |
| id := id_CN_DomainIndicator, |
| criticality := reject, |
| value_ := { |
| cN_DomainIndicator := dom |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| template RANAP_PDU |
| tr_RANAP_ResetAck(template CN_DomainIndicator dom := ?, |
| template ResetAcknowledge.protocolExtensions exts := *) := { |
| successfulOutcome := { |
| procedureCode := id_Reset, |
| criticality := reject, |
| value_ := { |
| ResetAcknowledge := { |
| protocolIEs := { |
| { |
| id := id_CN_DomainIndicator, |
| criticality := reject, |
| value_ := { |
| cN_DomainIndicator := dom |
| } |
| }, * |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| |
| /***************************************************************************************************** |
| * Security Mode Control |
| *****************************************************************************************************/ |
| |
| template (value) RANAP_PDU |
| ts_RANAP_SecurityModeCmd(template (value) PermittedIntegrityProtectionAlgorithms uia_algs, |
| template (value) IntegrityProtectionKey uia_key, |
| template (value) KeyStatus key_sts, |
| template (omit) SecurityModeCommand.protocolExtensions exts := omit) := { |
| initiatingMessage := { |
| procedureCode := id_SecurityModeControl, |
| criticality := reject, |
| value_ := { |
| securityModeCommand := { |
| protocolIEs := { |
| { |
| id := id_IntegrityProtectionInformation, |
| criticality := reject, |
| value_ := { |
| integrityProtectionInformation := { |
| permittedAlgorithms := uia_algs, |
| key := uia_key, |
| iE_Extensions := omit |
| } |
| } |
| }, { |
| id := id_KeyStatus, |
| criticality := reject, |
| value_ := { |
| keyStatus := key_sts |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| template RANAP_PDU |
| tr_RANAP_SecurityModeCmd(template PermittedIntegrityProtectionAlgorithms uia_algs, |
| template IntegrityProtectionKey uia_key, |
| template KeyStatus key_sts, |
| template SecurityModeCommand.protocolExtensions exts := *) := { |
| initiatingMessage := { |
| procedureCode := id_SecurityModeControl, |
| criticality := reject, |
| value_ := { |
| securityModeCommand := { |
| protocolIEs := { |
| { |
| id := id_IntegrityProtectionInformation, |
| criticality := reject, |
| value_ := { |
| integrityProtectionInformation := { |
| permittedAlgorithms := uia_algs, |
| key := uia_key, |
| iE_Extensions := * |
| } |
| } |
| }, { |
| id := id_KeyStatus, |
| criticality := reject, |
| value_ := { |
| keyStatus := key_sts |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| |
| template (value) RANAP_PDU |
| ts_RANAP_SecurityModeCmdEnc(template (value) PermittedIntegrityProtectionAlgorithms uia_algs, |
| template (value) IntegrityProtectionKey uia_key, |
| template (value) KeyStatus key_sts, |
| template (value) PermittedEncryptionAlgorithms uea_algs, |
| template (value) EncryptionKey uea_key, |
| template (omit) SecurityModeCommand.protocolExtensions exts := omit) := { |
| initiatingMessage := { |
| procedureCode := id_SecurityModeControl, |
| criticality := reject, |
| value_ := { |
| securityModeCommand := { |
| protocolIEs := { |
| { |
| id := id_IntegrityProtectionInformation, |
| criticality := reject, |
| value_ := { |
| integrityProtectionInformation := { |
| permittedAlgorithms := uia_algs, |
| key := uia_key, |
| iE_Extensions := omit |
| } |
| } |
| }, { |
| id := id_EncryptionInformation, |
| criticality := ignore, |
| value_ := { |
| encryptionInformation := { |
| permittedAlgorithms := uea_algs, |
| key := uea_key, |
| iE_Extensions := omit |
| } |
| } |
| }, { |
| id := id_KeyStatus, |
| criticality := reject, |
| value_ := { |
| keyStatus := key_sts |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| template RANAP_PDU |
| tr_RANAP_SecurityModeCmdEnc(template PermittedIntegrityProtectionAlgorithms uia_algs, |
| template IntegrityProtectionKey uia_key, |
| template KeyStatus key_sts, |
| template PermittedEncryptionAlgorithms uea_algs, |
| template EncryptionKey uea_key, |
| template SecurityModeCommand.protocolExtensions exts := *) := { |
| initiatingMessage := { |
| procedureCode := id_SecurityModeControl, |
| criticality := reject, |
| value_ := { |
| securityModeCommand := { |
| protocolIEs := { |
| { |
| id := id_IntegrityProtectionInformation, |
| criticality := reject, |
| value_ := { |
| integrityProtectionInformation := { |
| permittedAlgorithms := uia_algs, |
| key := uia_key, |
| iE_Extensions := * |
| } |
| } |
| }, { |
| id := id_EncryptionInformation, |
| criticality := ignore, |
| value_ := { |
| encryptionInformation := { |
| permittedAlgorithms := uea_algs, |
| key := uea_key, |
| iE_Extensions := * |
| } |
| } |
| }, { |
| id := id_KeyStatus, |
| criticality := reject, |
| value_ := { |
| keyStatus := key_sts |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| |
| template (value) RANAP_PDU |
| ts_RANAP_SecurityModeComplete(template (value) IntegrityProtectionAlgorithm uia_alg, |
| template (omit) SecurityModeComplete.protocolExtensions exts := omit) := { |
| successfulOutcome := { |
| procedureCode := id_SecurityModeControl, |
| criticality := reject, |
| value_ := { |
| securityModeComplete := { |
| protocolIEs := { |
| { |
| id := id_ChosenIntegrityProtectionAlgorithm, |
| criticality := reject, |
| value_ := { |
| chosenIntegrityProtectionAlgorithm := uia_alg |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| template RANAP_PDU |
| tr_RANAP_SecurityModeComplete(template IntegrityProtectionAlgorithm uia_alg, |
| template SecurityModeComplete.protocolExtensions exts := *) := { |
| successfulOutcome := { |
| procedureCode := id_SecurityModeControl, |
| criticality := reject, |
| value_ := { |
| securityModeComplete := { |
| protocolIEs := { |
| { |
| id := id_ChosenIntegrityProtectionAlgorithm, |
| criticality := reject, |
| value_ := { |
| chosenIntegrityProtectionAlgorithm := uia_alg |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| |
| template (value) RANAP_PDU |
| ts_RANAP_SecurityModeCompleteEnc(template (value) IntegrityProtectionAlgorithm uia_alg, |
| template (value) EncryptionAlgorithm uea_alg, |
| template (omit) SecurityModeComplete.protocolExtensions exts := omit) := { |
| successfulOutcome := { |
| procedureCode := id_SecurityModeControl, |
| criticality := reject, |
| value_ := { |
| securityModeComplete := { |
| protocolIEs := { |
| { |
| id := id_ChosenIntegrityProtectionAlgorithm, |
| criticality := reject, |
| value_ := { |
| chosenIntegrityProtectionAlgorithm := uia_alg |
| } |
| }, { |
| id := id_ChosenEncryptionAlgorithm, |
| criticality := ignore, |
| value_ := { |
| chosenEncryptionAlgorithm := uea_alg |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| template RANAP_PDU |
| tr_RANAP_SecurityModeCompleteEnc(template IntegrityProtectionAlgorithm uia_alg, |
| template EncryptionAlgorithm uea_alg, |
| template SecurityModeComplete.protocolExtensions exts := *) := { |
| successfulOutcome := { |
| procedureCode := id_SecurityModeControl, |
| criticality := reject, |
| value_ := { |
| securityModeComplete := { |
| protocolIEs := { |
| { |
| id := id_ChosenIntegrityProtectionAlgorithm, |
| criticality := reject, |
| value_ := { |
| chosenIntegrityProtectionAlgorithm := uia_alg |
| } |
| }, { |
| id := id_ChosenEncryptionAlgorithm, |
| criticality := ignore, |
| value_ := { |
| chosenEncryptionAlgorithm := uea_alg |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| |
| template (value) RANAP_PDU |
| ts_RANAP_SecurityModeReject(template (value) Cause cause, |
| template (omit) SecurityModeReject.protocolExtensions exts := omit) := { |
| unsuccessfulOutcome := { |
| procedureCode := id_SecurityModeControl, |
| criticality := reject, |
| value_ := { |
| securityModeReject := { |
| protocolIEs := { |
| { |
| id := id_Cause, |
| criticality := ignore, |
| value_ := { |
| cause := cause |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| template RANAP_PDU |
| tr_RANAP_SecurityModeReject(template Cause cause, |
| template SecurityModeReject.protocolExtensions exts := *) := { |
| unsuccessfulOutcome := { |
| procedureCode := id_SecurityModeControl, |
| criticality := reject, |
| value_ := { |
| securityModeReject := { |
| protocolIEs := { |
| { |
| id := id_Cause, |
| criticality := ignore, |
| value_ := { |
| cause := cause |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| |
| |
| |
| /***************************************************************************************************** |
| * Iu Release Request |
| *****************************************************************************************************/ |
| |
| template (value) RANAP_PDU |
| ts_RANAP_IuReleaseRequest(template (value) Cause cause, |
| template (omit) Iu_ReleaseRequest.protocolExtensions exts := omit) := { |
| initiatingMessage := { |
| procedureCode := id_Iu_ReleaseRequest, |
| criticality := ignore, |
| value_ := { |
| iu_ReleaseRequest := { |
| protocolIEs := { |
| { |
| id := id_Cause, |
| criticality := ignore, |
| value_ := { |
| cause := cause |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| template RANAP_PDU |
| tr_RANAP_IuReleaseRequest(template Cause cause, |
| template Iu_ReleaseRequest.protocolExtensions exts := *) := { |
| initiatingMessage := { |
| procedureCode := id_Iu_ReleaseRequest, |
| criticality := ignore, |
| value_ := { |
| iu_ReleaseRequest := { |
| protocolIEs := { |
| { |
| id := id_Cause, |
| criticality := ignore, |
| value_ := { |
| cause := cause |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| |
| /***************************************************************************************************** |
| * RAB Release |
| *****************************************************************************************************/ |
| |
| template (value) RAB_ID |
| t_RAB_id(integer rab_id) := int2bit(rab_id, 8); |
| |
| template (value) TransportLayerAddress ts_RAB_TLA4(OCT4 ip) := hex2bit('350001'H & oct2hex(ip) & '00000000000000000000000000'H); |
| template (value) TransportLayerAddress ts_RAB_TLA6(OCT16 ip) := hex2bit('350000'H & oct2hex(ip) & '00'H); |
| function f_ts_RAB_TLA(charstring addr) return template (value) TransportLayerAddress { |
| if (f_addr_is_ipv6(addr)) { |
| var OCT16 ip6 := f_inet6_addr(addr); |
| return ts_RAB_TLA6(ip6); |
| } else { |
| var OCT4 ip4 := f_inet_addr(addr); |
| return ts_RAB_TLA4(ip4); |
| } |
| } |
| |
| template (value) BindingID |
| t_RAB_binding_port(integer prt) := int2oct(prt, 2) & '0000'O; |
| |
| template (value) RANAP_PDU |
| ts_RANAP_RabReleaseRequest(template (value) RAB_ID rab_id, template (value) Cause cause, |
| template (omit) RAB_ReleaseRequest.protocolExtensions exts := omit) := { |
| initiatingMessage := { |
| procedureCode := id_RAB_ReleaseRequest, |
| criticality := ignore, |
| value_ := { |
| rAB_ReleaseRequest := { |
| protocolIEs := { |
| { |
| id := id_RAB_ReleaseList, |
| criticality := ignore, |
| value_ := { |
| rAB_ReleaseList := {{ |
| { |
| id := id_RAB_ReleaseItem, |
| criticality := ignore, |
| value_ := { |
| rAB_ReleaseItem := { |
| rAB_ID := rab_id, |
| cause := cause, |
| iE_Extensions := omit |
| } |
| } |
| } |
| }} |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| template RANAP_PDU |
| tr_RANAP_RabReleaseRequest(template (present) RAB_ID rab_id, template Cause cause, |
| template RAB_ReleaseRequest.protocolExtensions exts := *) := { |
| initiatingMessage := { |
| procedureCode := id_RAB_ReleaseRequest, |
| criticality := ignore, |
| value_ := { |
| rAB_ReleaseRequest := { |
| protocolIEs := { |
| { |
| id := id_RAB_ReleaseList, |
| criticality := ignore, |
| value_ := { |
| rAB_ReleaseList := {{ |
| { |
| id := id_RAB_ReleaseItem, |
| criticality := ignore, |
| value_ := { |
| rAB_ReleaseItem := { |
| rAB_ID := rab_id, |
| cause := cause, |
| iE_Extensions := * |
| } |
| } |
| } |
| }} |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| |
| |
| /***************************************************************************************************** |
| * Iu Release |
| *****************************************************************************************************/ |
| |
| template (value) RANAP_PDU |
| ts_RANAP_IuReleaseCommand(template (value) Cause cause, |
| template (omit) Iu_ReleaseCommand.protocolExtensions exts := omit) := { |
| initiatingMessage := { |
| procedureCode := id_Iu_Release, |
| criticality := reject, |
| value_ := { |
| iu_ReleaseCommand := { |
| protocolIEs := { |
| { |
| id := id_Cause, |
| criticality := ignore, |
| value_ := { |
| cause := cause |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| template RANAP_PDU |
| tr_RANAP_IuReleaseCommand(template Cause cause, |
| template Iu_ReleaseCommand.protocolExtensions exts := *) := { |
| initiatingMessage := { |
| procedureCode := id_Iu_Release, |
| criticality := reject, |
| value_ := { |
| iu_ReleaseCommand := { |
| protocolIEs := { |
| { |
| id := id_Cause, |
| criticality := ignore, |
| value_ := { |
| cause := cause |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| |
| template (value) RANAP_PDU |
| ts_RANAP_IuReleaseComplete(template (omit) Iu_ReleaseComplete.protocolIEs ies := {}, |
| template (omit) Iu_ReleaseComplete.protocolExtensions exts := omit) := { |
| successfulOutcome := { |
| procedureCode := id_Iu_Release, |
| criticality := reject, |
| value_ := { |
| iu_ReleaseComplete := { |
| protocolIEs := ies, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| template RANAP_PDU |
| tr_RANAP_IuReleaseComplete(template Iu_ReleaseComplete.protocolIEs ies := *, |
| template Iu_ReleaseComplete.protocolExtensions exts := *) := { |
| successfulOutcome := { |
| procedureCode := id_Iu_Release, |
| criticality := reject, |
| value_ := { |
| iu_ReleaseComplete:= { |
| protocolIEs := ies, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| |
| /***************************************************************************************************** |
| * Paging |
| *****************************************************************************************************/ |
| |
| template (value) RANAP_PDU |
| ts_RANAP_Paging(template (value) CN_DomainIndicator dom, template (value) IMSI imsi, |
| template (omit) TemporaryUE_ID temp_id := omit, |
| template (omit) Paging.protocolExtensions exts := omit) := { |
| initiatingMessage := { |
| procedureCode := id_Paging, |
| criticality := ignore, |
| value_ := { |
| paging := { |
| protocolIEs := { |
| { |
| id := id_CN_DomainIndicator, |
| criticality := ignore, |
| value_ := { |
| cN_DomainIndicator := dom |
| } |
| }, { |
| id := id_PermanentNAS_UE_ID, |
| criticality := ignore, |
| value_ := { |
| permanentNAS_UE_ID := { |
| iMSI := imsi |
| } |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| template RANAP_PDU |
| tr_RANAP_Paging(template CN_DomainIndicator dom, template IMSI imsi, |
| template Paging.protocolExtensions exts := *) := { |
| initiatingMessage := { |
| procedureCode := id_Paging, |
| criticality := ignore, |
| value_ := { |
| paging := { |
| protocolIEs := { |
| { |
| id := id_CN_DomainIndicator, |
| criticality := ignore, |
| value_ := { |
| cN_DomainIndicator := dom |
| } |
| }, { |
| id := id_PermanentNAS_UE_ID, |
| criticality := ignore, |
| value_ := { |
| permanentNAS_UE_ID := { |
| iMSI := imsi |
| } |
| } |
| }, * |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| |
| |
| |
| /***************************************************************************************************** |
| * Common ID |
| *****************************************************************************************************/ |
| |
| template (value) RANAP_PDU |
| ts_RANAP_CommonId(template (value) IMSI imsi, |
| template (omit) CommonID.protocolExtensions exts := omit) := { |
| initiatingMessage := { |
| procedureCode := id_CommonID, |
| criticality := ignore, |
| value_ := { |
| commonID := { |
| protocolIEs := { |
| { |
| id := id_PermanentNAS_UE_ID, |
| criticality := ignore, |
| value_ := { |
| permanentNAS_UE_ID := { |
| iMSI := imsi |
| } |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| template RANAP_PDU |
| tr_RANAP_CommonId(template IMSI imsi, |
| template CommonID.protocolExtensions exts := *) := { |
| initiatingMessage := { |
| procedureCode := id_CommonID, |
| criticality := ignore, |
| value_ := { |
| commonID := { |
| protocolIEs := { |
| { |
| id := id_PermanentNAS_UE_ID, |
| criticality := ignore, |
| value_ := { |
| permanentNAS_UE_ID := { |
| iMSI := imsi |
| } |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| |
| /***************************************************************************************************** |
| * Initial UE Message |
| *****************************************************************************************************/ |
| |
| template (value) RANAP_PDU |
| ts_RANAP_initialUE_CS(template (value) LAI lai, template (value) SAI sai, |
| template (value) NAS_PDU nas, |
| template (value) IuSignallingConnectionIdentifier sigc_id, |
| template (value) GlobalRNC_ID grnc_id, |
| template (omit) InitialUE_Message.protocolExtensions exts := omit) := { |
| initiatingMessage := { |
| procedureCode := id_InitialUE_Message, |
| criticality := ignore, |
| value_ := { |
| initialUE_Message := { |
| protocolIEs := { |
| { |
| id := id_CN_DomainIndicator, |
| criticality := ignore, |
| value_ := { |
| cN_DomainIndicator := cs_domain |
| } |
| }, { |
| id := id_LAI, |
| criticality := ignore, |
| value_ := { |
| lAI := lai |
| } |
| }, { |
| id := id_SAI, |
| criticality := ignore, |
| value_ := { |
| sAI := sai |
| } |
| }, { |
| id := id_NAS_PDU, |
| criticality := ignore, |
| value_ := { |
| nAS_PDU := nas |
| } |
| }, { |
| id := id_IuSigConId, |
| criticality := ignore, |
| value_ := { |
| iuSignallingConnectionIdentifier := sigc_id |
| } |
| }, { |
| id := id_GlobalRNC_ID, |
| criticality := ignore, |
| value_ := { |
| globalRNC_ID := grnc_id |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| template RANAP_PDU |
| tr_RANAP_initialUE_CS(template LAI lai, template SAI sai, |
| template NAS_PDU nas, |
| template IuSignallingConnectionIdentifier sigc_id, |
| template GlobalRNC_ID grnc_id, |
| template InitialUE_Message.protocolExtensions exts := *) := { |
| initiatingMessage := { |
| procedureCode := id_InitialUE_Message, |
| criticality := ignore, |
| value_ := { |
| initialUE_Message := { |
| protocolIEs := { |
| { |
| id := id_CN_DomainIndicator, |
| criticality := ignore, |
| value_ := { |
| cN_DomainIndicator := cs_domain |
| } |
| }, { |
| id := id_LAI, |
| criticality := ignore, |
| value_ := { |
| lAI := lai |
| } |
| }, { |
| id := id_SAI, |
| criticality := ignore, |
| value_ := { |
| sAI := sai |
| } |
| }, { |
| id := id_NAS_PDU, |
| criticality := ignore, |
| value_ := { |
| nAS_PDU := nas |
| } |
| }, { |
| id := id_IuSigConId, |
| criticality := ignore, |
| value_ := { |
| iuSignallingConnectionIdentifier := sigc_id |
| } |
| }, { |
| id := id_GlobalRNC_ID, |
| criticality := ignore, |
| value_ := { |
| globalRNC_ID := grnc_id |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| |
| template (value) RANAP_PDU |
| ts_RANAP_initialUE_PS(template (value) LAI lai, template (value) RAC rac, template (value) SAI sai, |
| template (value) NAS_PDU nas, |
| template (value) IuSignallingConnectionIdentifier sigc_id, |
| template (value) GlobalRNC_ID grnc_id, |
| template (omit) InitialUE_Message.protocolExtensions exts := omit) := { |
| initiatingMessage := { |
| procedureCode := id_InitialUE_Message, |
| criticality := ignore, |
| value_ := { |
| initialUE_Message := { |
| protocolIEs := { |
| { |
| id := id_CN_DomainIndicator, |
| criticality := ignore, |
| value_ := { |
| cN_DomainIndicator := ps_domain |
| } |
| }, { |
| id := id_LAI, |
| criticality := ignore, |
| value_ := { |
| lAI := lai |
| } |
| }, { |
| id := id_RAC, |
| criticality := ignore, |
| value_ := { |
| rAC := rac |
| } |
| }, { |
| id := id_SAI, |
| criticality := ignore, |
| value_ := { |
| sAI := sai |
| } |
| }, { |
| id := id_NAS_PDU, |
| criticality := ignore, |
| value_ := { |
| nAS_PDU := nas |
| } |
| }, { |
| id := id_IuSigConId, |
| criticality := ignore, |
| value_ := { |
| iuSignallingConnectionIdentifier := sigc_id |
| } |
| }, { |
| id := id_GlobalRNC_ID, |
| criticality := ignore, |
| value_ := { |
| globalRNC_ID := grnc_id |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| template RANAP_PDU |
| tr_RANAP_initialUE_PS(template LAI lai, template RAC rac, template SAI sai, |
| template NAS_PDU nas, |
| template IuSignallingConnectionIdentifier sigc_id, |
| template GlobalRNC_ID grnc_id, |
| template InitialUE_Message.protocolExtensions exts := *) := { |
| initiatingMessage := { |
| procedureCode := id_InitialUE_Message, |
| criticality := ignore, |
| value_ := { |
| initialUE_Message := { |
| protocolIEs := { |
| { |
| id := id_CN_DomainIndicator, |
| criticality := ignore, |
| value_ := { |
| cN_DomainIndicator := ps_domain |
| } |
| }, { |
| id := id_LAI, |
| criticality := ignore, |
| value_ := { |
| lAI := lai |
| } |
| }, { |
| id := id_RAC, |
| criticality := ignore, |
| value_ := { |
| rAC := rac |
| } |
| }, { |
| id := id_SAI, |
| criticality := ignore, |
| value_ := { |
| sAI := sai |
| } |
| }, { |
| id := id_NAS_PDU, |
| criticality := ignore, |
| value_ := { |
| nAS_PDU := nas |
| } |
| }, { |
| id := id_IuSigConId, |
| criticality := ignore, |
| value_ := { |
| iuSignallingConnectionIdentifier := sigc_id |
| } |
| }, { |
| id := id_GlobalRNC_ID, |
| criticality := ignore, |
| value_ := { |
| globalRNC_ID := grnc_id |
| } |
| } |
| }, |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| |
| /***************************************************************************************************** |
| * Direct Transfer |
| *****************************************************************************************************/ |
| |
| private function f_gen_ts_dt_ies(template (value) NAS_PDU nas, |
| template (omit) SAPI sapi, |
| template (value) DirectTransfer.protocolIEs opt_ies) |
| return DirectTransfer.protocolIEs { |
| var DirectTransfer.protocolIEs ies := { |
| /* NAS PDU is mandatory */ |
| { |
| id := id_NAS_PDU, |
| criticality := ignore, |
| value_ := { |
| nAS_PDU := valueof(nas) |
| } |
| } |
| }; |
| |
| /* Optional IEs, e.g. LAI, RAC, SAI */ |
| ies := ies & valueof(opt_ies); |
| |
| /* Optional SAPI is the last IE */ |
| if (isvalue(sapi)) { |
| ies := ies & {{ |
| id := id_SAPI, |
| criticality := ignore, |
| value_ := { |
| sAPI := valueof(sapi) |
| } |
| }}; |
| } |
| |
| return ies; |
| } |
| |
| private function f_gen_tr_dt_ies(template NAS_PDU nas, |
| template SAPI sapi, |
| template DirectTransfer.protocolIEs opt_ies) |
| return template DirectTransfer.protocolIEs { |
| var template DirectTransfer.protocolIEs ies := { |
| /* NAS PDU is mandatory */ |
| { |
| id := id_NAS_PDU, |
| criticality := ignore, |
| value_ := { |
| nAS_PDU := nas |
| } |
| } |
| }; |
| |
| /* Optional IEs start from index 1 */ |
| var integer idx := 1; |
| |
| /* Optional IEs, e.g. LAI, RAC, SAI */ |
| if (istemplatekind(opt_ies, "*")) { |
| ies[idx] := *; |
| idx := idx + 1; |
| } else if (not istemplatekind(opt_ies, "omit")) { |
| for (var integer i := 0; i < lengthof(opt_ies); i := i + 1) { |
| ies[idx] := opt_ies[idx]; |
| idx := idx + 1; |
| } |
| } |
| |
| /* Optional SAPI is the last IE */ |
| if (istemplatekind(sapi, "*")) { |
| ies[idx] := *; |
| } else if (not istemplatekind(sapi, "omit")) { |
| ies[idx] := { |
| id := id_SAPI, |
| criticality := ignore, |
| value_ := { |
| sAPI := sapi |
| } |
| }; |
| } |
| |
| return ies; |
| } |
| |
| template (value) RANAP_PDU |
| ts_RANAP_DirectTransfer(template (value) NAS_PDU nas, |
| template (omit) SAPI sapi := omit, |
| template (value) DirectTransfer.protocolIEs ies := {}, |
| template (omit) DirectTransfer.protocolExtensions exts := omit) := { |
| initiatingMessage := { |
| procedureCode := id_DirectTransfer, |
| criticality := ignore, |
| value_ := { |
| directTransfer := { |
| protocolIEs := f_gen_ts_dt_ies(nas, sapi, ies), |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| template RANAP_PDU |
| tr_RANAP_DirectTransfer(template NAS_PDU nas, |
| template SAPI sapi := *, |
| template DirectTransfer.protocolIEs ies := *, |
| template DirectTransfer.protocolExtensions exts := *) := { |
| initiatingMessage := { |
| procedureCode := id_DirectTransfer, |
| criticality := ignore, |
| value_ := { |
| directTransfer := { |
| protocolIEs := f_gen_tr_dt_ies(nas, sapi, ies), |
| protocolExtensions := exts |
| } |
| } |
| } |
| } |
| |
| |
| /***************************************************************************************************** |
| * RAB Assignment Request |
| *****************************************************************************************************/ |
| |
| template (value) RAB_Parameters ts_RabParams := { |
| trafficClass := conversational, |
| rAB_AsymmetryIndicator := symmetric_bidirectional, |
| maxBitrate := { 12200 }, |
| guaranteedBitRate := { 12200 }, |
| deliveryOrder := delivery_order_requested, |
| maxSDU_Size := 244, |
| sDU_Parameters := { |
| { |
| sDU_ErrorRatio := { mantissa := 1, exponent := 5, iE_Extensions := omit }, |
| residualBitErrorRatio := { mantissa := 1, exponent := 6, iE_Extensions := omit }, |
| deliveryOfErroneousSDU := yes, |
| sDU_FormatInformationParameters := { |
| { |
| subflowSDU_Size := 81, |
| rAB_SubflowCombinationBitRate := omit, |
| iE_Extensions := omit |
| }, { |
| subflowSDU_Size := 39, |
| rAB_SubflowCombinationBitRate := omit, |
| iE_Extensions := omit |
| } |
| }, |
| iE_Extensions := omit |
| }, { |
| sDU_ErrorRatio := omit, |
| residualBitErrorRatio := { mantissa := 1, exponent := 3, iE_Extensions := omit }, |
| deliveryOfErroneousSDU := no_error_detection_consideration, |
| sDU_FormatInformationParameters := { |
| { |
| subflowSDU_Size := 103, |
| rAB_SubflowCombinationBitRate := omit, |
| iE_Extensions := omit |
| }, { |
| subflowSDU_Size := 0, |
| rAB_SubflowCombinationBitRate := omit, |
| iE_Extensions := omit |
| } |
| }, |
| iE_Extensions := omit |
| }, { |
| sDU_ErrorRatio := omit, |
| residualBitErrorRatio := { mantissa := 5, exponent := 3, iE_Extensions := omit }, |
| deliveryOfErroneousSDU := no_error_detection_consideration, |
| sDU_FormatInformationParameters := { |
| { |
| subflowSDU_Size := 60, |
| rAB_SubflowCombinationBitRate := omit, |
| iE_Extensions := omit |
| }, { |
| subflowSDU_Size := 0, |
| rAB_SubflowCombinationBitRate := omit, |
| iE_Extensions := omit |
| } |
| }, |
| iE_Extensions := omit |
| } |
| }, |
| transferDelay := 80, |
| trafficHandlingPriority := omit, |
| allocationOrRetentionPriority := { |
| priorityLevel := 15, |
| pre_emptionCapability := shall_not_trigger_pre_emption, |
| pre_emptionVulnerability := pre_emptable, |
| queuingAllowed := queueing_not_allowed, |
| iE_Extensions := omit |
| }, |
| sourceStatisticsDescriptor := omit, |
| relocationRequirement := omit, |
| iE_Extensions := omit |
| } |
| |
| template (value) UserPlaneInformation ts_UserPlaneInfo := { |
| userPlaneMode := support_mode_for_predefined_SDU_sizes, |
| uP_ModeVersions := '0000000000000010'B, |
| iE_Extensions := omit |
| } |
| |
| template (value) TransportLayerInformation ts_TLI(template (value) TransportLayerAddress tla, |
| template (value) BindingID binding_id) := { |
| transportLayerAddress := tla, |
| iuTransportAssociation := { |
| bindingID := binding_id |
| }, |
| iE_Extensions := omit |
| } |
| template TransportLayerInformation tr_TLI(template TransportLayerAddress tla, |
| template BindingID binding_id) := { |
| transportLayerAddress := tla, |
| iuTransportAssociation := { |
| bindingID := binding_id |
| }, |
| iE_Extensions := * |
| } |
| |
| template (value) RAB_SetupOrModifyList ts_RAB_SML(template (value) RAB_ID rab_id, |
| template (value) TransportLayerAddress tla, |
| template (value) BindingID binding_id) := { { |
| { |
| id := id_RAB_SetupOrModifyItem, |
| firstCriticality := reject, |
| firstValue := { |
| rAB_SetupOrModifyItemFirst := { |
| rAB_ID := rab_id, |
| nAS_SynchronisationIndicator := omit, |
| rAB_Parameters := ts_RabParams, |
| userPlaneInformation := ts_UserPlaneInfo, |
| transportLayerInformation := ts_TLI(tla, binding_id), |
| service_Handover := omit, |
| iE_Extensions := omit |
| } |
| }, |
| secondCriticality := ignore, |
| secondValue := { |
| rAB_SetupOrModifyItemSecond := { |
| pDP_TypeInformation := omit, |
| dataVolumeReportingIndication := omit, |
| dl_GTP_PDU_SequenceNumber := omit, |
| ul_GTP_PDU_SequenceNumber := omit, |
| dl_N_PDU_SequenceNumber := omit, |
| ul_N_PDU_SequenceNumber := omit, |
| iE_Extensions := omit |
| } |
| } |
| } |
| } } |
| template RAB_SetupOrModifyList tr_RAB_SML(template (present) RAB_ID rab_id, |
| template TransportLayerAddress tla, |
| template BindingID binding_id) := { { |
| { |
| id := id_RAB_SetupOrModifyItem, |
| firstCriticality := reject, |
| firstValue := { |
| rAB_SetupOrModifyItemFirst := { |
| rAB_ID := rab_id, |
| nAS_SynchronisationIndicator := *, |
| rAB_Parameters := ts_RabParams, |
| userPlaneInformation := ts_UserPlaneInfo, |
| transportLayerInformation := tr_TLI(tla, binding_id), |
| service_Handover := *, |
| iE_Extensions := * |
| } |
| }, |
| secondCriticality := ignore, |
| secondValue := { |
| rAB_SetupOrModifyItemSecond := { |
| pDP_TypeInformation := omit, |
| dataVolumeReportingIndication := omit, |
| dl_GTP_PDU_SequenceNumber := omit, |
| ul_GTP_PDU_SequenceNumber := omit, |
| dl_N_PDU_SequenceNumber := omit, |
| ul_N_PDU_SequenceNumber := omit, |
| iE_Extensions := omit |
| } |
| } |
| } |
| } } |
| |
| template (value) RAB_SetupOrModifiedList ts_RAB_SMdL(template (value) RAB_ID rab_id, |
| template (value) TransportLayerAddress tla, |
| template (value) BindingID binding_id) := { { |
| { |
| id := id_RAB_SetupOrModifiedItem, |
| criticality := ignore, |
| value_ := { |
| rAB_SetupOrModifiedItem := { |
| rAB_ID := rab_id, |
| transportLayerAddress := tla, |
| iuTransportAssociation := { |
| bindingID := binding_id |
| }, |
| dl_dataVolumes := omit, |
| iE_Extensions := omit |
| } |
| } |
| } |
| } } |
| |
| template RAB_SetupOrModifiedList tr_RAB_SMdL(template (present) RAB_ID rab_id, |
| template TransportLayerAddress tla, |
| template BindingID binding_id) := { { |
| { |
| id := id_RAB_SetupOrModifiedItem, |
| criticality := ignore, |
| value_ := { |
| rAB_SetupOrModifiedItem := { |
| rAB_ID := rab_id, |
| transportLayerAddress := tla, |
| iuTransportAssociation := { |
| bindingID := binding_id |
| }, |
| dl_dataVolumes := *, |
| iE_Extensions := * |
| } |
| } |
| } |
| } } |
| |
| template (value) RAB_FailedList ts_RAB_FL(template (value) RAB_ID rab_id, |
| template (value) Cause cause) := { { |
| { |
| id := id_RAB_FailedItem, |
| criticality := ignore, |
| value_ := { |
| rAB_FailedItem := { |
| rAB_ID := rab_id, |
| cause := cause, |
| iE_Extensions := omit |
| } |
| } |
| } |
| } } |
| |
| template RAB_FailedList tr_RAB_FL(template RAB_ID rab_id, |
| template Cause cause) := { { |
| { |
| id := id_RAB_FailedItem, |
| criticality := ignore, |
| value_ := { |
| rAB_FailedItem := { |
| rAB_ID := rab_id, |
| cause := cause, |
| iE_Extensions := * |
| } |
| } |
| } |
| } } |
| |
| template (value) RAB_ReleaseList ts_RAB_RL(template (value) RAB_ID rab_id, |
| template (value) Cause cause) := { { |
| { |
| id := id_RAB_ReleaseItem, |
| criticality := ignore, |
| value_ := { |
| rAB_ReleaseItem := { |
| rAB_ID := rab_id, |
| cause := cause, |
| iE_Extensions := omit |
| } |
| } |
| } |
| } } |
| |
| template RAB_ReleaseList tr_RAB_RL(template (present) RAB_ID rab_id, |
| template Cause cause := ?) := { { |
| { |
| id := id_RAB_ReleaseItem, |
| criticality := ignore, |
| value_ := { |
| rAB_ReleaseItem := { |
| rAB_ID := rab_id, |
| cause := cause, |
| iE_Extensions := * |
| } |
| } |
| } |
| } } |
| |
| |
| function |
| ts_RANAP_RabAssReq(template (omit) RAB_SetupOrModifyList rab_sml := omit, |
| template (omit) RAB_ReleaseList rab_rl := omit, |
| template (omit) RAB_AssignmentRequest.protocolExtensions exts := omit) return template RANAP_PDU { |
| var template RANAP_PDU ret; |
| var template RAB_AssignmentRequest.protocolIEs protocolIEs := {}; |
| var integer ie_pos := 0; |
| |
| var template RAB_AssignmentRequest.protocolIEs protocolIEs_rab_sml; |
| var template RAB_AssignmentRequest.protocolIEs protocolIEs_rab_rl; |
| |
| /* RAB-SetupOrModifyList */ |
| if (istemplatekind(rab_sml, "value")) { |
| protocolIEs_rab_sml := { |
| { |
| id := id_RAB_SetupOrModifyList, |
| criticality := ignore, |
| value_ := { |
| rAB_SetupOrModifyList := rab_sml |
| } |
| } |
| }; |
| protocolIEs[ie_pos] := protocolIEs_rab_sml[0]; |
| ie_pos := ie_pos + 1; |
| } |
| |
| /* RAB-ReleaseList */ |
| if (istemplatekind(rab_rl, "value")) { |
| protocolIEs_rab_rl := { |
| { |
| id := id_RAB_ReleaseList, |
| criticality := ignore, |
| value_ := { |
| rAB_ReleaseList := rab_rl |
| } |
| } |
| }; |
| protocolIEs[ie_pos] := protocolIEs_rab_rl[0]; |
| ie_pos := ie_pos + 1; |
| } |
| |
| |
| ret.initiatingMessage := { |
| procedureCode := id_RAB_Assignment, |
| criticality := reject, |
| value_ := { |
| rAB_AssignmentRequest := { |
| protocolIEs := protocolIEs, |
| protocolExtensions := exts |
| } |
| } |
| } |
| |
| return ret; |
| } |
| |
| function |
| tr_RANAP_RabAssReq(template RAB_SetupOrModifyList rab_sml := omit, |
| template RAB_ReleaseList rab_rl := omit, |
| template RAB_AssignmentRequest.protocolExtensions exts := *) return template RANAP_PDU { |
| var template RANAP_PDU ret; |
| var template RAB_AssignmentRequest.protocolIEs protocolIEs := {}; |
| var integer ie_pos := 0; |
| |
| var template RAB_AssignmentRequest.protocolIEs protocolIEs_rab_sml; |
| var template RAB_AssignmentRequest.protocolIEs protocolIEs_rab_rl; |
| |
| /* RAB-SetupOrModifyList */ |
| if (not istemplatekind(rab_sml, "omit")) { |
| protocolIEs_rab_sml := { |
| { |
| id := id_RAB_SetupOrModifyList, |
| criticality := ignore, |
| value_ := { |
| rAB_SetupOrModifyList := rab_sml |
| } |
| } |
| }; |
| protocolIEs[ie_pos] := protocolIEs_rab_sml[0]; |
| ie_pos := ie_pos + 1; |
| } |
| |
| /* RAB-ReleaseList */ |
| if (not istemplatekind(rab_rl, "omit")) { |
| protocolIEs_rab_rl := { |
| { |
| id := id_RAB_ReleaseList, |
| criticality := ignore, |
| value_ := { |
| rAB_ReleaseList := rab_rl |
| } |
| } |
| }; |
| protocolIEs[ie_pos] := protocolIEs_rab_rl[0]; |
| ie_pos := ie_pos + 1; |
| } |
| |
| |
| ret.initiatingMessage := { |
| procedureCode := id_RAB_Assignment, |
| criticality := reject, |
| value_ := { |
| rAB_AssignmentRequest := { |
| protocolIEs := protocolIEs, |
| protocolExtensions := exts |
| } |
| } |
| } |
| |
| return ret; |
| } |
| |
| function |
| ts_RANAP_RabAssResp(template (omit) RAB_SetupOrModifiedList rab_sml := omit, |
| template (omit) RAB_FailedList rab_fl := omit, |
| template (omit) RAB_AssignmentResponse.protocolExtensions exts := omit) return template RANAP_PDU { |
| var template RANAP_PDU ret; |
| var template RAB_AssignmentResponse.protocolIEs protocolIEs := {}; |
| var integer ie_pos := 0; |
| |
| var template RAB_AssignmentResponse.protocolIEs protocolIEs_rab_sml; |
| var template RAB_AssignmentResponse.protocolIEs protocolIEs_rab_fl; |
| |
| /* RAB-SetupOrModifiedList */ |
| if (istemplatekind(rab_sml, "value")) { |
| protocolIEs_rab_sml := { |
| { |
| id := id_RAB_SetupOrModifiedList, |
| criticality := ignore, |
| value_ := { |
| rAB_SetupOrModifiedList := rab_sml |
| } |
| } |
| } |
| |
| protocolIEs[ie_pos] := protocolIEs_rab_sml[0]; |
| ie_pos := ie_pos + 1; |
| } |
| |
| /* TODO: RAB-ReleasedList */ |
| /* TODO: RAB-QueuedList */ |
| |
| /* RAB-FailedList */ |
| if (istemplatekind(rab_fl, "value")) { |
| protocolIEs_rab_fl := { |
| { |
| id := id_RAB_FailedList, |
| criticality := ignore, |
| value_ := { |
| rAB_FailedList := rab_fl |
| } |
| } |
| } |
| |
| protocolIEs[ie_pos] := protocolIEs_rab_fl[0]; |
| ie_pos := ie_pos + 1; |
| } |
| |
| /* TODO: RAB-ReleaseFailedList */ |
| |
| ret.outcome := { |
| procedureCode := id_RAB_Assignment, |
| criticality := reject, |
| value_ := { |
| rAB_AssignmentResponse := { |
| protocolIEs := protocolIEs, |
| protocolExtensions := exts |
| } |
| } |
| } |
| |
| return ret; |
| } |
| |
| function |
| tr_RANAP_RabAssResp(template RAB_SetupOrModifiedList rab_sml := omit, |
| template RAB_FailedList rab_fl := omit, |
| template RAB_AssignmentResponse.protocolExtensions exts := *) return template RANAP_PDU { |
| var template RANAP_PDU ret; |
| var template RAB_AssignmentResponse.protocolIEs protocolIEs := {}; |
| var integer ie_pos := 0; |
| |
| var template RAB_AssignmentResponse.protocolIEs protocolIEs_rab_sml; |
| var template RAB_AssignmentResponse.protocolIEs protocolIEs_rab_fl; |
| |
| /* RAB-SetupOrModifiedList */ |
| if (not istemplatekind(rab_sml, "omit")) { |
| protocolIEs_rab_sml := { |
| { |
| id := id_RAB_SetupOrModifiedList, |
| criticality := ignore, |
| value_ := { |
| rAB_SetupOrModifiedList := rab_sml |
| } |
| } |
| } |
| |
| protocolIEs[ie_pos] := protocolIEs_rab_sml[0]; |
| ie_pos := ie_pos + 1; |
| } |
| |
| /* TODO: RAB-ReleasedList */ |
| /* TODO: RAB-QueuedList */ |
| |
| /* RAB-FailedList */ |
| if (not istemplatekind(rab_fl, "omit")) { |
| protocolIEs_rab_fl := { |
| { |
| id := id_RAB_FailedList, |
| criticality := ignore, |
| value_ := { |
| rAB_FailedList := rab_fl |
| } |
| } |
| } |
| |
| protocolIEs[ie_pos] := protocolIEs_rab_fl[0]; |
| ie_pos := ie_pos + 1; |
| } |
| |
| /* TODO: RAB-ReleaseFailedList */ |
| |
| protocolIEs[ie_pos] := *; |
| |
| ret.outcome := { |
| procedureCode := id_RAB_Assignment, |
| criticality := reject, |
| value_ := { |
| rAB_AssignmentResponse := { |
| protocolIEs := protocolIEs, |
| protocolExtensions := exts |
| } |
| } |
| } |
| |
| return ret; |
| } |
| |
| /***************************************************************************************************** |
| * |
| *****************************************************************************************************/ |
| |
| /* extract the L3 (NAS) from a given RANAP message */ |
| function f_ranap_extract_l3(RANAP_PDU ranap) return template (omit) octetstring |
| { |
| var integer i; |
| |
| if (match(ranap, tr_RANAP_initialUE_CS(?, ?, ?, ?, ?)) or |
| match(ranap, tr_RANAP_initialUE_PS(?, ?, ?, ?, ?, ?)) ) { |
| var InitialUE_Message.protocolIEs ies := ranap.initiatingMessage.value_.initialUE_Message.protocolIEs; |
| for (i := 0; i < lengthof(ies); i := i+1) { |
| if (ies[i].id == id_NAS_PDU) { |
| return ies[i].value_.nAS_PDU; |
| } |
| } |
| } else if (match(ranap, tr_RANAP_DirectTransfer(?))) { |
| var DirectTransfer.protocolIEs ies := ranap.initiatingMessage.value_.directTransfer.protocolIEs; |
| for (i := 0; i < lengthof(ies); i := i+1) { |
| if (ies[i].id == id_NAS_PDU) { |
| return ies[i].value_.nAS_PDU; |
| } |
| } |
| } else { |
| /* relocationInformation not supported yet*/ |
| } |
| return omit; |
| } |
| |
| function f_ranap_extract_sapi(RANAP_PDU ranap) return template (omit) SAPI |
| { |
| var integer i; |
| |
| /* InitialUE message has no SAPI */ |
| if (match(ranap, tr_RANAP_DirectTransfer(?, omit))) { |
| var DirectTransfer.protocolIEs ies := ranap.initiatingMessage.value_.directTransfer.protocolIEs; |
| for (i := 0; i < lengthof(ies); i := i+1) { |
| if (ies[i].id == id_SAPI) { |
| return ies[i].value_.sAPI; |
| } |
| } |
| } |
| return omit; |
| } |
| |
| |
| } |