fixeria has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/39848?usp=email )
Change subject: library/s1ap: split PDU specific API to S1AP_Functions.ttcn ...................................................................... library/s1ap: split PDU specific API to S1AP_Functions.ttcn Change-Id: Id3ba089140093490abd0307addeb5d7287dc5894 Related: SYS#7288 --- M library/S1AP_Emulation.ttcn A library/S1AP_Functions.ttcn M mme/MME_Tests.ttcn M mme/gen_links.sh 4 files changed, 170 insertions(+), 152 deletions(-) Approvals: pespin: Looks good to me, approved Jenkins Builder: Verified diff --git a/library/S1AP_Emulation.ttcn b/library/S1AP_Emulation.ttcn index f81441f..6ee1e6a 100644 --- a/library/S1AP_Emulation.ttcn +++ b/library/S1AP_Emulation.ttcn @@ -40,6 +40,7 @@ import from S1AP_PDU_Descriptions all; import from S1AP_IEs all; import from S1AP_Templates all; +import from S1AP_Functions all; import from SCTP_Templates all; import from NAS_EPS_Types all; @@ -710,155 +711,4 @@ return omit; } - -function f_S1AP_get_ENB_UE_S1AP_ID(S1AP_PDU s1ap) return template (omit) ENB_UE_S1AP_ID -{ - if (ischosen(s1ap.initiatingMessage)) { - var InitiatingMessage im := s1ap.initiatingMessage; - select (s1ap) { - case (tr_S1AP_InitialUE) { - return im.value_.InitialUEMessage.protocolIEs[0].value_.ENB_UE_S1AP_ID; - } - case (tr_S1AP_DlNasTransport) { - return im.value_.DownlinkNASTransport.protocolIEs[1].value_.ENB_UE_S1AP_ID; - } - case (tr_S1AP_UlNasTransport) { - return im.value_.UplinkNASTransport.protocolIEs[1].value_.ENB_UE_S1AP_ID; - } - case (tr_S1AP_IntialCtxSetupReq) { - return im.value_.initialContextSetupRequest.protocolIEs[1].value_.ENB_UE_S1AP_ID; - } - case (tr_S1AP_UeContextReleaseReq) { - return im.value_.UEContextReleaseRequest.protocolIEs[1].value_.ENB_UE_S1AP_ID; - } - case (tr_S1AP_UeContextReleaseCmd) { - if (ispresent(im.value_.uEContextReleaseCommand.protocolIEs[0].value_.uE_S1AP_IDs.uE_S1AP_ID_pair)) { - return im.value_.uEContextReleaseCommand.protocolIEs[0].value_.uE_S1AP_IDs.uE_S1AP_ID_pair.eNB_UE_S1AP_ID; - } else { - return omit; - } - } - case (tr_S1AP_ConnEstInd) { - return im.value_.ConnectionEstablishmentIndication.protocolIEs[1].value_.ENB_UE_S1AP_ID; - } - /* TODO */ - } - } else if (ischosen(s1ap.successfulOutcome)) { - var SuccessfulOutcome so := s1ap.successfulOutcome; - select (s1ap) { - case (tr_S1AP_InitialCtxSetupResp) { - return so.value_.initialContextSetupResponse.protocolIEs[1].value_.ENB_UE_S1AP_ID; - } - case (tr_S1AP_UeContextReleaseCompl) { - return so.value_.UEContextReleaseComplete.protocolIEs[1].value_.ENB_UE_S1AP_ID; - } - /* TODO */ - } - } else if (ischosen(s1ap.unsuccessfulOutcome)) { - var UnsuccessfulOutcome uo := s1ap.unsuccessfulOutcome; - select (s1ap) { - case (tr_S1AP_InitialCtxSetupFail) { - return uo.value_.initialContextSetupFailure.protocolIEs[1].value_.ENB_UE_S1AP_ID; - } - /* TODO */ - } - } - return omit; -} - -function f_S1AP_get_MME_UE_S1AP_ID(S1AP_PDU s1ap) return template (omit) MME_UE_S1AP_ID -{ - if (ischosen(s1ap.initiatingMessage)) { - var InitiatingMessage im := s1ap.initiatingMessage; - select (s1ap) { - case (tr_S1AP_DlNasTransport) { - return im.value_.DownlinkNASTransport.protocolIEs[0].value_.MME_UE_S1AP_ID; - } - case (tr_S1AP_UlNasTransport) { - return im.value_.UplinkNASTransport.protocolIEs[0].value_.MME_UE_S1AP_ID; - } - case (tr_S1AP_IntialCtxSetupReq) { - return im.value_.initialContextSetupRequest.protocolIEs[0].value_.MME_UE_S1AP_ID; - } - case (tr_S1AP_UeContextReleaseReq) { - return im.value_.UEContextReleaseRequest.protocolIEs[0].value_.MME_UE_S1AP_ID; - } - case (tr_S1AP_UeContextReleaseCmd) { - if (ispresent(im.value_.uEContextReleaseCommand.protocolIEs[0].value_.uE_S1AP_IDs.uE_S1AP_ID_pair)) { - return im.value_.uEContextReleaseCommand.protocolIEs[0].value_.uE_S1AP_IDs.uE_S1AP_ID_pair.mME_UE_S1AP_ID; - } else { - return im.value_.uEContextReleaseCommand.protocolIEs[0].value_.uE_S1AP_IDs.mME_UE_S1AP_ID; - } - } - case (tr_S1AP_ConnEstInd) { - return im.value_.ConnectionEstablishmentIndication.protocolIEs[0].value_.MME_UE_S1AP_ID; - } - /* TODO */ - } - } else if (ischosen(s1ap.successfulOutcome)) { - var SuccessfulOutcome so := s1ap.successfulOutcome; - select (s1ap) { - case (tr_S1AP_InitialCtxSetupResp) { - return so.value_.initialContextSetupResponse.protocolIEs[0].value_.MME_UE_S1AP_ID; - } - case (tr_S1AP_UeContextReleaseCompl) { - return so.value_.UEContextReleaseComplete.protocolIEs[0].value_.MME_UE_S1AP_ID; - } - /* TODO */ - } - } else if (ischosen(s1ap.unsuccessfulOutcome)) { - var UnsuccessfulOutcome uo := s1ap.unsuccessfulOutcome; - select (s1ap) { - case (tr_S1AP_InitialCtxSetupFail) { - return uo.value_.initialContextSetupFailure.protocolIEs[0].value_.MME_UE_S1AP_ID; - } - /* TODO */ - } - } - return omit; -} - -function f_S1AP_get_NAS_PDU(S1AP_PDU s1ap) return template (omit) NAS_PDU -{ - var integer i, j; - - if (ischosen(s1ap.initiatingMessage)) { - var InitiatingMessage im := s1ap.initiatingMessage; - select (s1ap) { - case (tr_S1AP_DlNasTransport) { - var DownlinkNASTransport msg := im.value_.DownlinkNASTransport; - for (i := 0; i < lengthof(msg.protocolIEs); i := i+1) { - if (msg.protocolIEs[i].id == id_NAS_PDU) { - return msg.protocolIEs[i].value_.NAS_PDU; - } - } - } - case (tr_S1AP_UlNasTransport) { - var UplinkNASTransport msg := im.value_.UplinkNASTransport; - for (i := 0; i < lengthof(msg.protocolIEs); i := i+1) { - if (msg.protocolIEs[i].id == id_NAS_PDU) { - return msg.protocolIEs[i].value_.NAS_PDU; - } - } - } - case (tr_S1AP_IntialCtxSetupReq) { - var InitialContextSetupRequest msg := im.value_.initialContextSetupRequest; - for (i := 0; i < lengthof(msg.protocolIEs); i := i+1) { - if (msg.protocolIEs[i].id == id_E_RABToBeSetupListCtxtSUReq) { - var E_RABToBeSetupListCtxtSUReq rab_req := msg.protocolIEs[i].value_.E_RABToBeSetupListCtxtSUReq; - for (j := 0; j < lengthof(rab_req); j := j+1) { - var E_RABToBeSetupItemCtxtSUReq it := rab_req[j].value_.E_RABToBeSetupItemCtxtSUReq; - return it.nAS_PDU; - } - } - } - return omit; - } - } - } - return omit; -} - - - } diff --git a/library/S1AP_Functions.ttcn b/library/S1AP_Functions.ttcn new file mode 100644 index 0000000..63bdaa4 --- /dev/null +++ b/library/S1AP_Functions.ttcn @@ -0,0 +1,167 @@ +module S1AP_Functions { + +/* (C) 2019 by Harald Welte <lafo...@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 S1AP_IEs all; +import from S1AP_Types all; +import from S1AP_Constants all; +import from S1AP_PDU_Contents all; +import from S1AP_PDU_Descriptions all; +import from S1AP_Templates all; + +function f_S1AP_get_ENB_UE_S1AP_ID(S1AP_PDU s1ap) return template (omit) ENB_UE_S1AP_ID +{ + if (ischosen(s1ap.initiatingMessage)) { + var InitiatingMessage im := s1ap.initiatingMessage; + select (s1ap) { + case (tr_S1AP_InitialUE) { + return im.value_.InitialUEMessage.protocolIEs[0].value_.ENB_UE_S1AP_ID; + } + case (tr_S1AP_DlNasTransport) { + return im.value_.DownlinkNASTransport.protocolIEs[1].value_.ENB_UE_S1AP_ID; + } + case (tr_S1AP_UlNasTransport) { + return im.value_.UplinkNASTransport.protocolIEs[1].value_.ENB_UE_S1AP_ID; + } + case (tr_S1AP_IntialCtxSetupReq) { + return im.value_.initialContextSetupRequest.protocolIEs[1].value_.ENB_UE_S1AP_ID; + } + case (tr_S1AP_UeContextReleaseReq) { + return im.value_.UEContextReleaseRequest.protocolIEs[1].value_.ENB_UE_S1AP_ID; + } + case (tr_S1AP_UeContextReleaseCmd) { + if (ispresent(im.value_.uEContextReleaseCommand.protocolIEs[0].value_.uE_S1AP_IDs.uE_S1AP_ID_pair)) { + return im.value_.uEContextReleaseCommand.protocolIEs[0].value_.uE_S1AP_IDs.uE_S1AP_ID_pair.eNB_UE_S1AP_ID; + } else { + return omit; + } + } + case (tr_S1AP_ConnEstInd) { + return im.value_.ConnectionEstablishmentIndication.protocolIEs[1].value_.ENB_UE_S1AP_ID; + } + /* TODO */ + } + } else if (ischosen(s1ap.successfulOutcome)) { + var SuccessfulOutcome so := s1ap.successfulOutcome; + select (s1ap) { + case (tr_S1AP_InitialCtxSetupResp) { + return so.value_.initialContextSetupResponse.protocolIEs[1].value_.ENB_UE_S1AP_ID; + } + case (tr_S1AP_UeContextReleaseCompl) { + return so.value_.UEContextReleaseComplete.protocolIEs[1].value_.ENB_UE_S1AP_ID; + } + /* TODO */ + } + } else if (ischosen(s1ap.unsuccessfulOutcome)) { + var UnsuccessfulOutcome uo := s1ap.unsuccessfulOutcome; + select (s1ap) { + case (tr_S1AP_InitialCtxSetupFail) { + return uo.value_.initialContextSetupFailure.protocolIEs[1].value_.ENB_UE_S1AP_ID; + } + /* TODO */ + } + } + return omit; +} + +function f_S1AP_get_MME_UE_S1AP_ID(S1AP_PDU s1ap) return template (omit) MME_UE_S1AP_ID +{ + if (ischosen(s1ap.initiatingMessage)) { + var InitiatingMessage im := s1ap.initiatingMessage; + select (s1ap) { + case (tr_S1AP_DlNasTransport) { + return im.value_.DownlinkNASTransport.protocolIEs[0].value_.MME_UE_S1AP_ID; + } + case (tr_S1AP_UlNasTransport) { + return im.value_.UplinkNASTransport.protocolIEs[0].value_.MME_UE_S1AP_ID; + } + case (tr_S1AP_IntialCtxSetupReq) { + return im.value_.initialContextSetupRequest.protocolIEs[0].value_.MME_UE_S1AP_ID; + } + case (tr_S1AP_UeContextReleaseReq) { + return im.value_.UEContextReleaseRequest.protocolIEs[0].value_.MME_UE_S1AP_ID; + } + case (tr_S1AP_UeContextReleaseCmd) { + if (ispresent(im.value_.uEContextReleaseCommand.protocolIEs[0].value_.uE_S1AP_IDs.uE_S1AP_ID_pair)) { + return im.value_.uEContextReleaseCommand.protocolIEs[0].value_.uE_S1AP_IDs.uE_S1AP_ID_pair.mME_UE_S1AP_ID; + } else { + return im.value_.uEContextReleaseCommand.protocolIEs[0].value_.uE_S1AP_IDs.mME_UE_S1AP_ID; + } + } + case (tr_S1AP_ConnEstInd) { + return im.value_.ConnectionEstablishmentIndication.protocolIEs[0].value_.MME_UE_S1AP_ID; + } + /* TODO */ + } + } else if (ischosen(s1ap.successfulOutcome)) { + var SuccessfulOutcome so := s1ap.successfulOutcome; + select (s1ap) { + case (tr_S1AP_InitialCtxSetupResp) { + return so.value_.initialContextSetupResponse.protocolIEs[0].value_.MME_UE_S1AP_ID; + } + case (tr_S1AP_UeContextReleaseCompl) { + return so.value_.UEContextReleaseComplete.protocolIEs[0].value_.MME_UE_S1AP_ID; + } + /* TODO */ + } + } else if (ischosen(s1ap.unsuccessfulOutcome)) { + var UnsuccessfulOutcome uo := s1ap.unsuccessfulOutcome; + select (s1ap) { + case (tr_S1AP_InitialCtxSetupFail) { + return uo.value_.initialContextSetupFailure.protocolIEs[0].value_.MME_UE_S1AP_ID; + } + /* TODO */ + } + } + return omit; +} + +function f_S1AP_get_NAS_PDU(S1AP_PDU s1ap) return template (omit) NAS_PDU +{ + var integer i, j; + + if (ischosen(s1ap.initiatingMessage)) { + var InitiatingMessage im := s1ap.initiatingMessage; + select (s1ap) { + case (tr_S1AP_DlNasTransport) { + var DownlinkNASTransport msg := im.value_.DownlinkNASTransport; + for (i := 0; i < lengthof(msg.protocolIEs); i := i+1) { + if (msg.protocolIEs[i].id == id_NAS_PDU) { + return msg.protocolIEs[i].value_.NAS_PDU; + } + } + } + case (tr_S1AP_UlNasTransport) { + var UplinkNASTransport msg := im.value_.UplinkNASTransport; + for (i := 0; i < lengthof(msg.protocolIEs); i := i+1) { + if (msg.protocolIEs[i].id == id_NAS_PDU) { + return msg.protocolIEs[i].value_.NAS_PDU; + } + } + } + case (tr_S1AP_IntialCtxSetupReq) { + var InitialContextSetupRequest msg := im.value_.initialContextSetupRequest; + for (i := 0; i < lengthof(msg.protocolIEs); i := i+1) { + if (msg.protocolIEs[i].id == id_E_RABToBeSetupListCtxtSUReq) { + var E_RABToBeSetupListCtxtSUReq rab_req := msg.protocolIEs[i].value_.E_RABToBeSetupListCtxtSUReq; + for (j := 0; j < lengthof(rab_req); j := j+1) { + var E_RABToBeSetupItemCtxtSUReq it := rab_req[j].value_.E_RABToBeSetupItemCtxtSUReq; + return it.nAS_PDU; + } + } + } + return omit; + } + } + } + return omit; +} + +} diff --git a/mme/MME_Tests.ttcn b/mme/MME_Tests.ttcn index 2192775..302d996 100644 --- a/mme/MME_Tests.ttcn +++ b/mme/MME_Tests.ttcn @@ -16,6 +16,7 @@ import from Misc_Helpers all; import from S1AP_Types all; import from S1AP_Templates all; +import from S1AP_Functions all; import from S1AP_Emulation all; import from S1AP_PDU_Descriptions all; import from S1AP_IEs all; diff --git a/mme/gen_links.sh b/mme/gen_links.sh index d2b17ce..61f6f73 100755 --- a/mme/gen_links.sh +++ b/mme/gen_links.sh @@ -73,7 +73,7 @@ FILES="Misc_Helpers.ttcn General_Types.ttcn GSM_Types.ttcn Osmocom_Types.ttcn Native_Functions.ttcn Native_FunctionDefs.cc IPCP_Types.ttcn IPCP_Templates.ttcn " FILES+="SGsAP_Templates.ttcn SGsAP_CodecPort.ttcn SGsAP_CodecPort_CtrlFunct.ttcn SGsAP_CodecPort_CtrlFunctDef.cc SGsAP_Emulation.ttcn DNS_Helpers.ttcn " FILES+="L3_Templates.ttcn RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn " -FILES+="S1AP_CodecPort.ttcn S1AP_CodecPort_CtrlFunctDef.cc S1AP_CodecPort_CtrlFunct.ttcn S1AP_Emulation.ttcn " +FILES+="S1AP_CodecPort.ttcn S1AP_CodecPort_CtrlFunctDef.cc S1AP_CodecPort_CtrlFunct.ttcn S1AP_Functions.ttcn S1AP_Emulation.ttcn " FILES+="NAS_Templates.ttcn GTPv2_PrivateExtensions.ttcn GTPv2_Templates.ttcn " FILES+="DIAMETER_Types.ttcn DIAMETER_CodecPort.ttcn DIAMETER_CodecPort_CtrlFunct.ttcn DIAMETER_CodecPort_CtrlFunctDef.cc DIAMETER_Emulation.ttcn " FILES+="DIAMETER_Templates.ttcn DIAMETER_ts29_272_Templates.ttcn " -- To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/39848?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email Gerrit-MessageType: merged Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: Id3ba089140093490abd0307addeb5d7287dc5894 Gerrit-Change-Number: 39848 Gerrit-PatchSet: 4 Gerrit-Owner: fixeria <vyanits...@sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanits...@sysmocom.de> Gerrit-Reviewer: pespin <pes...@sysmocom.de> Gerrit-CC: laforge <lafo...@osmocom.org> Gerrit-CC: osmith <osm...@sysmocom.de>