fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/39881?usp=email )
Change subject: s1gw: ConnHdlr: allow passing {MME,ENB}-UE-S1AP-ID ......................................................................
s1gw: ConnHdlr: allow passing {MME,ENB}-UE-S1AP-ID
Change-Id: Ife37c77cff348cdfbde191dbad6da816e68ca941 --- M s1gw/S1GW_ConnHdlr.ttcn M s1gw/S1GW_Tests.ttcn 2 files changed, 109 insertions(+), 62 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/81/39881/1
diff --git a/s1gw/S1GW_ConnHdlr.ttcn b/s1gw/S1GW_ConnHdlr.ttcn index d0dbc06..99cbe6e 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,27 +795,29 @@ 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; }
@@ -1088,7 +1098,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 +1120,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 +1130,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,32 +1250,53 @@ 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) @@ -1291,7 +1336,8 @@ f_ConnHdlr_rx_initial_ctx_setup_rsp(erabs); }
-function f_ConnHdlr_ue_ctx_release_req(S1AP_IEs.Cause cause := c_REL_CMD_CAUSE) +function f_ConnHdlr_ue_ctx_release_req(inout ERabList erabs, + 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; @@ -1299,12 +1345,13 @@
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(inout ERabList erabs, + S1AP_IEs.Cause cause := c_REL_CMD_CAUSE) runs on ConnHdlr { var template (value) UE_S1AP_IDs ue_ids := { uE_S1AP_ID_pair := { @@ -1317,7 +1364,7 @@
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)); } diff --git a/s1gw/S1GW_Tests.ttcn b/s1gw/S1GW_Tests.ttcn index f0b0826..be10799 100644 --- a/s1gw/S1GW_Tests.ttcn +++ b/s1gw/S1GW_Tests.ttcn @@ -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); @@ -619,7 +619,7 @@
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_ue_ctx_release_req(g_pars.erabs);
f_ConnHdlr_s1ap_disconnect(); f_ConnHdlr_s1ap_unregister(g_pars.genb_id); @@ -640,7 +640,7 @@ f_ConnHdlr_initial_ctx_setup_req(g_pars.erabs); f_ConnHdlr_initial_ctx_setup_rsp(g_pars.erabs);
- f_ConnHdlr_ue_ctx_release_cmd(); + f_ConnHdlr_ue_ctx_release_cmd(g_pars.erabs); f_ConnHdlr_ue_ctx_release_compl();
f_ConnHdlr_s1ap_disconnect();