fixeria submitted this change.

View Change

Approvals: fixeria: Looks good to me, approved Jenkins Builder: Verified pespin: Looks good to me, but someone else must approve laforge: Looks good to me, but someone else must approve
s1gw: ConnHdlr: allow passing {MME,ENB}-UE-S1AP-ID

This is needed for follow-up UEMux testcases, in which we spawn
multiple virtual UEs with unique {MME,ENB}-UE-S1AP-IDs.

Change-Id: Ife37c77cff348cdfbde191dbad6da816e68ca941
Related: SYS#7288
---
M s1gw/S1GW_ConnHdlr.ttcn
M s1gw/S1GW_Tests.ttcn
2 files changed, 177 insertions(+), 96 deletions(-)

diff --git a/s1gw/S1GW_ConnHdlr.ttcn b/s1gw/S1GW_ConnHdlr.ttcn
index d0dbc06..5c9e108 100644
--- a/s1gw/S1GW_ConnHdlr.ttcn
+++ b/s1gw/S1GW_ConnHdlr.ttcn
@@ -1,6 +1,6 @@
/* OsmoS1GW (S1AP Gateway) ConnHdlr
*
- * (C) 2024 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
+ * (C) 2024-2025 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
* Author: Vadim Yanitskiy <vyanitskiy@sysmocom.de>
*
* All rights reserved.
@@ -334,11 +334,12 @@
return -1; /* make compiler happy */
}

-function f_ConnHdlr_tx_erab_setup_req(in ERabList erabs)
+function f_ConnHdlr_tx_erab_setup_req(in ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id)
runs on ConnHdlr {
var template (value) E_RABToBeSetupListBearerSUReq items;
var template (value) E_RABLevelQoSParameters qos_params;
- var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx;

qos_params := valueof(ts_E_RABLevelQoSParameters);

@@ -356,13 +357,14 @@
items[i] := ts_S1AP_RABToBeSetupListBearerSUReq(item)[0];
}

- f_ConnHdlr_tx_s1ap_from_mme(ts_S1AP_RABSetupReq(g_pars.mme_ue_id, enb_ue_id, items));
+ f_ConnHdlr_tx_s1ap_from_mme(ts_S1AP_RABSetupReq(mme_ue_id, enb_ue_id, items));
}

-function f_ConnHdlr_rx_erab_setup_req(in ERabList erabs)
+function f_ConnHdlr_rx_erab_setup_req(in ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id)
runs on ConnHdlr return S1AP_PDU {
var template (present) E_RABToBeSetupListBearerSUReq items;
- var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx;
var S1AP_PDU pdu;

for (var integer i := 0; i < lengthof(erabs); i := i + 1) {
@@ -379,14 +381,15 @@
items[i] := tr_S1AP_RABToBeSetupListBearerSUReq(item)[0];
}

- f_ConnHdlr_rx_s1ap_from_mme(pdu, tr_S1AP_RABSetupReq(g_pars.mme_ue_id, enb_ue_id, items));
+ f_ConnHdlr_rx_s1ap_from_mme(pdu, tr_S1AP_RABSetupReq(mme_ue_id, enb_ue_id, items));
return pdu;
}

-function f_ConnHdlr_tx_erab_setup_rsp(in ERabList erabs)
+function f_ConnHdlr_tx_erab_setup_rsp(in ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id)
runs on ConnHdlr {
var template (value) E_RABSetupListBearerSURes items;
- var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx;

for (var integer i := 0; i < lengthof(erabs); i := i + 1) {
var template (value) E_RABSetupItemBearerSURes item;
@@ -400,13 +403,14 @@
items[i] := ts_S1AP_RABSetupListBearerSURes(item)[0];
}

- f_ConnHdlr_tx_s1ap_from_enb(ts_S1AP_RABSetupRsp(g_pars.mme_ue_id, enb_ue_id, items));
+ f_ConnHdlr_tx_s1ap_from_enb(ts_S1AP_RABSetupRsp(mme_ue_id, enb_ue_id, items));
}

-function f_ConnHdlr_rx_erab_setup_rsp(in ERabList erabs)
+function f_ConnHdlr_rx_erab_setup_rsp(in ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id)
runs on ConnHdlr return S1AP_PDU {
var template (present) E_RABSetupListBearerSURes items;
- var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx;
var S1AP_PDU pdu;

for (var integer i := 0; i < lengthof(erabs); i := i + 1) {
@@ -421,7 +425,7 @@
items[i] := tr_S1AP_RABSetupListBearerSURes(item)[0];
}

- f_ConnHdlr_rx_s1ap_from_enb(pdu, tr_S1AP_RABSetupRsp(g_pars.mme_ue_id, enb_ue_id, items));
+ f_ConnHdlr_rx_s1ap_from_enb(pdu, tr_S1AP_RABSetupRsp(mme_ue_id, enb_ue_id, items));
return pdu;
}

@@ -740,29 +744,32 @@
}

function f_ConnHdlr_tx_erab_release_cmd(in ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id,
S1AP_IEs.Cause cause := c_REL_CMD_CAUSE)
runs on ConnHdlr {
var template (value) E_RABList items := f_ts_E_RABList(erabs, cause);
- var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx;

- f_ConnHdlr_tx_s1ap_from_mme(ts_S1AP_RABReleaseCmd(g_pars.mme_ue_id, enb_ue_id, items));
+ f_ConnHdlr_tx_s1ap_from_mme(ts_S1AP_RABReleaseCmd(mme_ue_id, enb_ue_id, items));
}

function f_ConnHdlr_rx_erab_release_cmd(in ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id,
S1AP_IEs.Cause cause := c_REL_CMD_CAUSE)
runs on ConnHdlr return S1AP_PDU {
var template (present) E_RABList items := f_tr_E_RABList(erabs, cause);
- var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx;
var S1AP_PDU pdu;

- f_ConnHdlr_rx_s1ap_from_mme(pdu, tr_S1AP_RABReleaseCmd(g_pars.mme_ue_id, enb_ue_id, items));
+ f_ConnHdlr_rx_s1ap_from_mme(pdu, tr_S1AP_RABReleaseCmd(mme_ue_id, enb_ue_id, items));
return pdu;
}

-function f_ConnHdlr_tx_erab_release_rsp(in ERabList erabs)
+function f_ConnHdlr_tx_erab_release_rsp(in ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id)
runs on ConnHdlr {
var template (value) E_RABReleaseListBearerRelComp items;
- var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx;

for (var integer i := 0; i < lengthof(erabs); i := i + 1) {
var template (value) E_RABReleaseItemBearerRelComp item;
@@ -771,13 +778,14 @@
items[i] := ts_E_RABReleaseListBearerRelComp(item)[0];
}

- f_ConnHdlr_tx_s1ap_from_enb(ts_S1AP_RABReleaseRsp(g_pars.mme_ue_id, enb_ue_id, items));
+ f_ConnHdlr_tx_s1ap_from_enb(ts_S1AP_RABReleaseRsp(mme_ue_id, enb_ue_id, items));
}

-function f_ConnHdlr_rx_erab_release_rsp(in ERabList erabs)
+function f_ConnHdlr_rx_erab_release_rsp(in ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id)
runs on ConnHdlr return S1AP_PDU {
var template (present) E_RABReleaseListBearerRelComp items;
- var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx;
var S1AP_PDU pdu;

for (var integer i := 0; i < lengthof(erabs); i := i + 1) {
@@ -787,35 +795,38 @@
items[i] := tr_E_RABReleaseListBearerRelComp(item)[0];
}

- f_ConnHdlr_rx_s1ap_from_enb(pdu, tr_S1AP_RABReleaseRsp(g_pars.mme_ue_id, enb_ue_id, items));
+ f_ConnHdlr_rx_s1ap_from_enb(pdu, tr_S1AP_RABReleaseRsp(mme_ue_id, enb_ue_id, items));
return pdu;
}

function f_ConnHdlr_tx_erab_release_ind(in ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id,
S1AP_IEs.Cause cause := c_REL_CMD_CAUSE)
runs on ConnHdlr {
var template (value) E_RABList items := f_ts_E_RABList(erabs, cause);
- var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx;

- f_ConnHdlr_tx_s1ap_from_enb(ts_S1AP_RABReleaseInd(g_pars.mme_ue_id, enb_ue_id, items));
+ f_ConnHdlr_tx_s1ap_from_enb(ts_S1AP_RABReleaseInd(mme_ue_id, enb_ue_id, items));
}

function f_ConnHdlr_rx_erab_release_ind(in ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id,
S1AP_IEs.Cause cause := c_REL_CMD_CAUSE)
runs on ConnHdlr return S1AP_PDU {
var template (present) E_RABList items := f_tr_E_RABList(erabs, cause);
- var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx;
var S1AP_PDU pdu;

- f_ConnHdlr_rx_s1ap_from_enb(pdu, tr_S1AP_RABReleaseInd(g_pars.mme_ue_id, enb_ue_id, items));
+ f_ConnHdlr_rx_s1ap_from_enb(pdu, tr_S1AP_RABReleaseInd(mme_ue_id, enb_ue_id, items));
return pdu;
}

-function f_ConnHdlr_tx_initial_ctx_setup_req(in ERabList erabs)
+function f_ConnHdlr_tx_initial_ctx_setup_req(in ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id)
runs on ConnHdlr {
var template (value) E_RABToBeSetupListCtxtSUReq items;
var template (value) E_RABLevelQoSParameters qos_params;
- var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx;

qos_params := valueof(ts_E_RABLevelQoSParameters);

@@ -833,7 +844,7 @@
items[i] := ts_E_RABToBeSetupListCtxtSUReq(item)[0];
}

- f_ConnHdlr_tx_s1ap_from_mme(ts_S1AP_IntialCtxSetupReq(mme_id := g_pars.mme_ue_id,
+ f_ConnHdlr_tx_s1ap_from_mme(ts_S1AP_IntialCtxSetupReq(mme_id := mme_ue_id,
enb_id := enb_ue_id,
max_br := ts_UEAggregateMaximumBitrate,
rab_setup_items := items,
@@ -841,10 +852,11 @@
sec_key := f_rnd_bitstring(256)));
}

-function f_ConnHdlr_rx_initial_ctx_setup_req(in ERabList erabs)
+function f_ConnHdlr_rx_initial_ctx_setup_req(in ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id)
runs on ConnHdlr return S1AP_PDU {
var template (present) E_RABToBeSetupListCtxtSUReq items;
- var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx;
var S1AP_PDU pdu;

for (var integer i := 0; i < lengthof(erabs); i := i + 1) {
@@ -861,7 +873,7 @@
items[i] := tr_E_RABToBeSetupListCtxtSUReq(item)[0];
}

- f_ConnHdlr_rx_s1ap_from_mme(pdu, tr_S1AP_IntialCtxSetupReq(mme_id := g_pars.mme_ue_id,
+ f_ConnHdlr_rx_s1ap_from_mme(pdu, tr_S1AP_IntialCtxSetupReq(mme_id := mme_ue_id,
enb_id := enb_ue_id,
max_br := tr_UEAggregateMaximumBitrate,
rab_setup_items := items,
@@ -869,10 +881,11 @@
return pdu;
}

-function f_ConnHdlr_tx_initial_ctx_setup_rsp(in ERabList erabs)
+function f_ConnHdlr_tx_initial_ctx_setup_rsp(in ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id)
runs on ConnHdlr {
var template (value) E_RABSetupListCtxtSURes items;
- var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx;

for (var integer i := 0; i < lengthof(erabs); i := i + 1) {
var template (value) E_RABSetupItemCtxtSURes item;
@@ -886,13 +899,14 @@
items[i] := ts_S1AP_RABSetupListCtxtSURes(item)[0];
}

- f_ConnHdlr_tx_s1ap_from_enb(ts_S1AP_InitialCtxSetupResp(g_pars.mme_ue_id, enb_ue_id, items));
+ f_ConnHdlr_tx_s1ap_from_enb(ts_S1AP_InitialCtxSetupResp(mme_ue_id, enb_ue_id, items));
}

-function f_ConnHdlr_rx_initial_ctx_setup_rsp(in ERabList erabs)
+function f_ConnHdlr_rx_initial_ctx_setup_rsp(in ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id)
runs on ConnHdlr return S1AP_PDU {
var template (present) E_RABSetupListCtxtSURes items;
- var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx;
var S1AP_PDU pdu;

for (var integer i := 0; i < lengthof(erabs); i := i + 1) {
@@ -907,7 +921,7 @@
items[i] := tr_S1AP_RABSetupListCtxtSURes(item)[0];
}

- f_ConnHdlr_rx_s1ap_from_enb(pdu, tr_S1AP_InitialCtxSetupResp(g_pars.mme_ue_id, enb_ue_id, items));
+ f_ConnHdlr_rx_s1ap_from_enb(pdu, tr_S1AP_InitialCtxSetupResp(mme_ue_id, enb_ue_id, items));
return pdu;
}

@@ -1088,7 +1102,14 @@
}
}

-function f_ConnHdlr_erab_setup_req(inout ERabList erabs)
+function f_ConnHdlr_erab_setup_req_()
+runs on ConnHdlr {
+ f_ConnHdlr_erab_setup_req(g_pars.erabs, g_pars.idx, g_pars.mme_ue_id);
+}
+
+function f_ConnHdlr_erab_setup_req(inout ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id)
runs on ConnHdlr {
const OCT8 c_SEID0 := '0000000000000000'O;

@@ -1103,7 +1124,7 @@
f_PFCPEM_subscribe_seid(c_SEID0);

log("eNB <- [S1GW <- MME]: E-RAB SETUP REQUEST");
- f_ConnHdlr_tx_erab_setup_req(erabs);
+ f_ConnHdlr_tx_erab_setup_req(erabs, mme_ue_id, enb_ue_id);
f_ConnHdlr_session_establish(erabs);

/* We're done establishing PFCP sessions, so at this point we no longer expect to
@@ -1113,16 +1134,23 @@
f_Mutex_unlock(__BFILE__, __LINE__);

log("[eNB <- S1GW] <- MME: E-RAB SETUP REQUEST");
- f_ConnHdlr_rx_erab_setup_req(erabs);
+ f_ConnHdlr_rx_erab_setup_req(erabs, mme_ue_id, enb_ue_id);
}

-function f_ConnHdlr_erab_setup_rsp(in ERabList erabs)
+function f_ConnHdlr_erab_setup_rsp_()
+runs on ConnHdlr {
+ f_ConnHdlr_erab_setup_rsp(g_pars.erabs, g_pars.idx, g_pars.mme_ue_id);
+}
+
+function f_ConnHdlr_erab_setup_rsp(in ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id)
runs on ConnHdlr {
log("[eNB -> S1GW] -> MME: E-RAB SETUP RESPONSE");
- f_ConnHdlr_tx_erab_setup_rsp(erabs);
+ f_ConnHdlr_tx_erab_setup_rsp(erabs, mme_ue_id, enb_ue_id);
f_ConnHdlr_session_modify(erabs);
log("eNB -> [S1GW -> MME]: E-RAB SETUP RESPONSE");
- f_ConnHdlr_rx_erab_setup_rsp(erabs);
+ f_ConnHdlr_rx_erab_setup_rsp(erabs, mme_ue_id, enb_ue_id);
}

function f_ConnHdlr_erab_modify_req(in ERabList erabs)
@@ -1226,35 +1254,63 @@
f_ConnHdlr_rx_erab_modify_cnf(erabs_modified, erabs_not_modified, erabs_release);
}

+function f_ConnHdlr_erab_release_cmd_(S1AP_IEs.Cause cause := c_REL_CMD_CAUSE)
+runs on ConnHdlr {
+ f_ConnHdlr_erab_release_cmd(g_pars.erabs, g_pars.idx, g_pars.mme_ue_id);
+}
+
function f_ConnHdlr_erab_release_cmd(inout ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id,
S1AP_IEs.Cause cause := c_REL_CMD_CAUSE)
runs on ConnHdlr {
log("eNB <- [S1GW <- MME]: E-RAB RELEASE COMMAND");
- f_ConnHdlr_tx_erab_release_cmd(erabs, cause);
+ f_ConnHdlr_tx_erab_release_cmd(erabs, mme_ue_id, enb_ue_id, cause);
f_ConnHdlr_session_delete(erabs);
log("[eNB <- S1GW] <- MME: E-RAB RELEASE COMMAND");
- f_ConnHdlr_rx_erab_release_cmd(erabs, cause);
+ f_ConnHdlr_rx_erab_release_cmd(erabs, mme_ue_id, enb_ue_id, cause);
}

-function f_ConnHdlr_erab_release_rsp(inout ERabList erabs)
+function f_ConnHdlr_erab_release_rsp_()
+runs on ConnHdlr {
+ f_ConnHdlr_erab_release_rsp(g_pars.erabs, g_pars.idx, g_pars.mme_ue_id);
+}
+
+function f_ConnHdlr_erab_release_rsp(inout ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id)
runs on ConnHdlr {
log("[eNB -> S1GW] -> MME: E-RAB RELEASE RESPONSE");
- f_ConnHdlr_tx_erab_release_rsp(erabs);
+ f_ConnHdlr_tx_erab_release_rsp(erabs, mme_ue_id, enb_ue_id);
log("eNB -> [S1GW -> MME]: E-RAB RELEASE RESPONSE");
- f_ConnHdlr_rx_erab_release_rsp(erabs);
+ f_ConnHdlr_rx_erab_release_rsp(erabs, mme_ue_id, enb_ue_id);
+}
+
+function f_ConnHdlr_erab_release_ind_(S1AP_IEs.Cause cause := c_REL_CMD_CAUSE)
+runs on ConnHdlr {
+ f_ConnHdlr_erab_release_ind(g_pars.erabs, g_pars.idx, g_pars.mme_ue_id, cause);
}

function f_ConnHdlr_erab_release_ind(inout ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id,
S1AP_IEs.Cause cause := c_REL_CMD_CAUSE)
runs on ConnHdlr {
log("[eNB -> S1GW] -> MME: E-RAB RELEASE INDICATION");
- f_ConnHdlr_tx_erab_release_ind(erabs, cause);
+ f_ConnHdlr_tx_erab_release_ind(erabs, mme_ue_id, enb_ue_id, cause);
f_ConnHdlr_session_delete(erabs);
log("eNB -> [S1GW -> MME]: E-RAB RELEASE INDICATION");
- f_ConnHdlr_rx_erab_release_ind(erabs, cause);
+ f_ConnHdlr_rx_erab_release_ind(erabs, mme_ue_id, enb_ue_id, cause);
}

-function f_ConnHdlr_initial_ctx_setup_req(inout ERabList erabs)
+function f_ConnHdlr_initial_ctx_setup_req_()
+runs on ConnHdlr {
+ f_ConnHdlr_initial_ctx_setup_req(g_pars.erabs, g_pars.idx, g_pars.mme_ue_id);
+}
+
+function f_ConnHdlr_initial_ctx_setup_req(inout ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id)
runs on ConnHdlr {
const OCT8 c_SEID0 := '0000000000000000'O;

@@ -1269,7 +1325,7 @@
f_PFCPEM_subscribe_seid(c_SEID0);

log("eNB <- [S1GW <- MME]: INITIAL CONTEXT SETUP REQUEST");
- f_ConnHdlr_tx_initial_ctx_setup_req(erabs);
+ f_ConnHdlr_tx_initial_ctx_setup_req(erabs, mme_ue_id, enb_ue_id);
f_ConnHdlr_session_establish(erabs);

/* We're done establishing PFCP sessions, so at this point we no longer expect to
@@ -1279,37 +1335,58 @@
f_Mutex_unlock(__BFILE__, __LINE__);

log("[eNB <- S1GW] <- MME: INITIAL CONTEXT SETUP REQUEST");
- f_ConnHdlr_rx_initial_ctx_setup_req(erabs);
+ f_ConnHdlr_rx_initial_ctx_setup_req(erabs, mme_ue_id, enb_ue_id);
}

-function f_ConnHdlr_initial_ctx_setup_rsp(inout ERabList erabs)
+function f_ConnHdlr_initial_ctx_setup_rsp_()
+runs on ConnHdlr {
+ f_ConnHdlr_initial_ctx_setup_rsp(g_pars.erabs, g_pars.idx, g_pars.mme_ue_id);
+}
+
+function f_ConnHdlr_initial_ctx_setup_rsp(inout ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id)
runs on ConnHdlr {
log("[eNB -> S1GW] -> MME: INITIAL CONTEXT SETUP RESPONSE");
- f_ConnHdlr_tx_initial_ctx_setup_rsp(erabs);
+ f_ConnHdlr_tx_initial_ctx_setup_rsp(erabs, mme_ue_id, enb_ue_id);
f_ConnHdlr_session_modify(erabs);
log("eNB -> [S1GW -> MME]: INITIAL CONTEXT SETUP RESPONSE");
- f_ConnHdlr_rx_initial_ctx_setup_rsp(erabs);
+ f_ConnHdlr_rx_initial_ctx_setup_rsp(erabs, mme_ue_id, enb_ue_id);
}

-function f_ConnHdlr_ue_ctx_release_req(S1AP_IEs.Cause cause := c_REL_CMD_CAUSE)
+function f_ConnHdlr_ue_ctx_release_req_(S1AP_IEs.Cause cause := c_REL_CMD_CAUSE)
runs on ConnHdlr {
- var MME_UE_S1AP_ID mme_ue_id := g_pars.mme_ue_id;
- var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx;
+ f_ConnHdlr_ue_ctx_release_req(g_pars.erabs, g_pars.idx, g_pars.mme_ue_id, cause);
+}
+
+function f_ConnHdlr_ue_ctx_release_req(inout ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id,
+ S1AP_IEs.Cause cause := c_REL_CMD_CAUSE)
+runs on ConnHdlr {
var S1AP_PDU pdu;

log("[eNB -> S1GW] -> MME: UE CONTEXT RELEASE REQUEST");
f_ConnHdlr_tx_s1ap_from_enb(ts_S1AP_UeContextReleaseReq(mme_ue_id, enb_ue_id, cause));
- f_ConnHdlr_session_delete(g_pars.erabs);
+ f_ConnHdlr_session_delete(erabs);
log("eNB -> [S1GW -> MME]: UE CONTEXT RELEASE REQUEST");
f_ConnHdlr_rx_s1ap_from_enb(pdu, tr_S1AP_UeContextReleaseReq(mme_ue_id, enb_ue_id, cause));
}

-function f_ConnHdlr_ue_ctx_release_cmd(S1AP_IEs.Cause cause := c_REL_CMD_CAUSE)
+function f_ConnHdlr_ue_ctx_release_cmd_(S1AP_IEs.Cause cause := c_REL_CMD_CAUSE)
+runs on ConnHdlr {
+ f_ConnHdlr_ue_ctx_release_cmd(g_pars.erabs, g_pars.idx, g_pars.mme_ue_id, cause);
+}
+
+function f_ConnHdlr_ue_ctx_release_cmd(inout ERabList erabs,
+ MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id,
+ S1AP_IEs.Cause cause := c_REL_CMD_CAUSE)
runs on ConnHdlr {
var template (value) UE_S1AP_IDs ue_ids := {
uE_S1AP_ID_pair := {
- mME_UE_S1AP_ID := g_pars.mme_ue_id,
- eNB_UE_S1AP_ID := g_pars.idx,
+ mME_UE_S1AP_ID := mme_ue_id,
+ eNB_UE_S1AP_ID := enb_ue_id,
iE_Extensions := omit
}
};
@@ -1317,15 +1394,19 @@

log("eNB <- [S1GW <- MME]: UE CONTEXT RELEASE COMMAND");
f_ConnHdlr_tx_s1ap_from_mme(ts_S1AP_UeContextReleaseCmd(ue_ids, cause));
- f_ConnHdlr_session_delete(g_pars.erabs);
+ f_ConnHdlr_session_delete(erabs);
log("[eNB <- S1GW] <- MME: UE CONTEXT RELEASE COMMAND");
f_ConnHdlr_rx_s1ap_from_mme(pdu, tr_S1AP_UeContextReleaseCmd(ue_ids, cause));
}

-function f_ConnHdlr_ue_ctx_release_compl()
+function f_ConnHdlr_ue_ctx_release_compl_()
runs on ConnHdlr {
- var MME_UE_S1AP_ID mme_ue_id := g_pars.mme_ue_id;
- var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx;
+ f_ConnHdlr_ue_ctx_release_compl(g_pars.idx, g_pars.mme_ue_id);
+}
+
+function f_ConnHdlr_ue_ctx_release_compl(MME_UE_S1AP_ID mme_ue_id,
+ ENB_UE_S1AP_ID enb_ue_id)
+runs on ConnHdlr {
var S1AP_PDU pdu;

log("[eNB -> S1GW] -> MME: UE CONTEXT RELEASE COMPLETE");
diff --git a/s1gw/S1GW_Tests.ttcn b/s1gw/S1GW_Tests.ttcn
index f0b0826..6e08cd0 100644
--- a/s1gw/S1GW_Tests.ttcn
+++ b/s1gw/S1GW_Tests.ttcn
@@ -1,6 +1,6 @@
/* OsmoS1GW (S1AP Gateway) test suite in TTCN-3
*
- * (C) 2024 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
+ * (C) 2024-2025 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
* Author: Vadim Yanitskiy <vyanitskiy@sysmocom.de>
*
* All rights reserved.
@@ -385,10 +385,10 @@
f_ConnHdlr_s1ap_connect(mp_enb_bind_ip, mp_s1gw_enb_ip);
f_ConnHdlr_s1ap_setup(g_pars.genb_id);

- f_ConnHdlr_erab_setup_req(g_pars.erabs);
- f_ConnHdlr_erab_setup_rsp(g_pars.erabs);
- f_ConnHdlr_erab_release_cmd(g_pars.erabs);
- f_ConnHdlr_erab_release_rsp(g_pars.erabs);
+ f_ConnHdlr_erab_setup_req_();
+ f_ConnHdlr_erab_setup_rsp_();
+ f_ConnHdlr_erab_release_cmd_();
+ f_ConnHdlr_erab_release_rsp_();

f_ConnHdlr_s1ap_disconnect();
f_ConnHdlr_s1ap_unregister(g_pars.genb_id);
@@ -416,9 +416,9 @@
f_ConnHdlr_s1ap_connect(mp_enb_bind_ip, mp_s1gw_enb_ip);
f_ConnHdlr_s1ap_setup(g_pars.genb_id);

- f_ConnHdlr_erab_setup_req(g_pars.erabs);
- f_ConnHdlr_erab_setup_rsp(g_pars.erabs);
- f_ConnHdlr_erab_release_ind(g_pars.erabs);
+ f_ConnHdlr_erab_setup_req_();
+ f_ConnHdlr_erab_setup_rsp_();
+ f_ConnHdlr_erab_release_ind_();

f_ConnHdlr_s1ap_disconnect();
f_ConnHdlr_s1ap_unregister(g_pars.genb_id);
@@ -442,7 +442,7 @@
f_PFCPEM_subscribe_seid(erab.pfcp_loc_seid);

log("eNB <- [S1GW <- MME]: E-RAB SETUP REQUEST");
- f_ConnHdlr_tx_erab_setup_req({erab});
+ f_ConnHdlr_tx_erab_setup_req({erab}, g_pars.idx, g_pars.mme_ue_id);
log("UPF <- S1GW: PFCP Session Establishment Request");
var PDU_PFCP req := f_ConnHdlr_rx_session_establish_req(erab);
/* store peer's SEID, so that it can be used in outgoing PDUs later */
@@ -487,8 +487,8 @@
f_ConnHdlr_s1ap_connect(mp_enb_bind_ip, mp_s1gw_enb_ip);
f_ConnHdlr_s1ap_setup(g_pars.genb_id);

- f_ConnHdlr_erab_setup_req(g_pars.erabs);
- f_ConnHdlr_erab_setup_rsp(g_pars.erabs);
+ f_ConnHdlr_erab_setup_req_();
+ f_ConnHdlr_erab_setup_rsp_();

/* MME orders eNB to modify all 4 E-RABs */
f_ConnHdlr_erab_modify_req(g_pars.erabs);
@@ -496,8 +496,8 @@
f_ConnHdlr_erab_modify_rsp(erabs_modified := {1, 3},
erabs_failed := {0, 2});

- f_ConnHdlr_erab_release_cmd(g_pars.erabs);
- f_ConnHdlr_erab_release_rsp(g_pars.erabs);
+ f_ConnHdlr_erab_release_cmd_();
+ f_ConnHdlr_erab_release_rsp_();

f_ConnHdlr_s1ap_disconnect();
f_ConnHdlr_s1ap_unregister(g_pars.genb_id);
@@ -517,8 +517,8 @@
f_ConnHdlr_s1ap_connect(mp_enb_bind_ip, mp_s1gw_enb_ip);
f_ConnHdlr_s1ap_setup(g_pars.genb_id);

- f_ConnHdlr_erab_setup_req(g_pars.erabs);
- f_ConnHdlr_erab_setup_rsp(g_pars.erabs);
+ f_ConnHdlr_erab_setup_req_();
+ f_ConnHdlr_erab_setup_rsp_();

/* eNB wants to modify all E-RABs but E-RAB 4 */
f_ConnHdlr_erab_modify_ind(erabs_modified := {0, 1, 2, 3},
@@ -531,8 +531,8 @@
* which is expected to be forwarded unmodified */
f_ConnHdlr_erab_modify_cnf();

- f_ConnHdlr_erab_release_cmd(g_pars.erabs);
- f_ConnHdlr_erab_release_rsp(g_pars.erabs);
+ f_ConnHdlr_erab_release_cmd_();
+ f_ConnHdlr_erab_release_rsp_();

f_ConnHdlr_s1ap_disconnect();
f_ConnHdlr_s1ap_unregister(g_pars.genb_id);
@@ -552,8 +552,8 @@
f_ConnHdlr_s1ap_connect(mp_enb_bind_ip, mp_s1gw_enb_ip);
f_ConnHdlr_s1ap_setup(g_pars.genb_id);

- f_ConnHdlr_initial_ctx_setup_req(g_pars.erabs);
- f_ConnHdlr_initial_ctx_setup_rsp(g_pars.erabs);
+ f_ConnHdlr_initial_ctx_setup_req_();
+ f_ConnHdlr_initial_ctx_setup_rsp_();

f_ConnHdlr_s1ap_disconnect();
f_ConnHdlr_s1ap_unregister(g_pars.genb_id);
@@ -586,7 +586,7 @@
f_ConnHdlr_s1ap_setup(g_pars.genb_id);

/* Initiate E-RAB establishment by sending INITIAL CONTEXT SETUP */
- f_ConnHdlr_initial_ctx_setup_req(g_pars.erabs);
+ f_ConnHdlr_initial_ctx_setup_req_();
/* At this point, the associated PFCP session is created, but not modified yet.
* The E-RAB FSM in the IUT is waiting for INITIAL CONTEXT SETUP RESPONSE. */

@@ -617,9 +617,9 @@
f_ConnHdlr_s1ap_connect(mp_enb_bind_ip, mp_s1gw_enb_ip);
f_ConnHdlr_s1ap_setup(g_pars.genb_id);

- f_ConnHdlr_initial_ctx_setup_req(g_pars.erabs);
- f_ConnHdlr_initial_ctx_setup_rsp(g_pars.erabs);
- f_ConnHdlr_ue_ctx_release_req();
+ f_ConnHdlr_initial_ctx_setup_req_();
+ f_ConnHdlr_initial_ctx_setup_rsp_();
+ f_ConnHdlr_ue_ctx_release_req_();

f_ConnHdlr_s1ap_disconnect();
f_ConnHdlr_s1ap_unregister(g_pars.genb_id);
@@ -637,11 +637,11 @@
f_ConnHdlr_s1ap_connect(mp_enb_bind_ip, mp_s1gw_enb_ip);
f_ConnHdlr_s1ap_setup(g_pars.genb_id);

- f_ConnHdlr_initial_ctx_setup_req(g_pars.erabs);
- f_ConnHdlr_initial_ctx_setup_rsp(g_pars.erabs);
+ f_ConnHdlr_initial_ctx_setup_req_();
+ f_ConnHdlr_initial_ctx_setup_rsp_();

- f_ConnHdlr_ue_ctx_release_cmd();
- f_ConnHdlr_ue_ctx_release_compl();
+ f_ConnHdlr_ue_ctx_release_cmd_();
+ f_ConnHdlr_ue_ctx_release_compl_();

f_ConnHdlr_s1ap_disconnect();
f_ConnHdlr_s1ap_unregister(g_pars.genb_id);

To view, visit change 39881. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: merged
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ife37c77cff348cdfbde191dbad6da816e68ca941
Gerrit-Change-Number: 39881
Gerrit-PatchSet: 3
Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de>
Gerrit-Reviewer: laforge <laforge@osmocom.org>
Gerrit-Reviewer: pespin <pespin@sysmocom.de>