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 <laforge(a)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 <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-CC: laforge <laforge(a)osmocom.org>
Gerrit-CC: osmith <osmith(a)sysmocom.de>