laforge submitted this change.

View Change



3 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted one.

Approvals: laforge: Looks good to me, approved pespin: Looks good to me, but someone else must approve Jenkins Builder: Verified
s1gw: add TC_e_rab_release_ind

Change-Id: Icc28a596b7646441761cc3f56653c5f7b3ddaaca
---
M s1gw/S1GW_ConnHdlr.ttcn
M s1gw/S1GW_Tests.ttcn
M s1gw/expected-results.xml
3 files changed, 95 insertions(+), 18 deletions(-)

diff --git a/s1gw/S1GW_ConnHdlr.ttcn b/s1gw/S1GW_ConnHdlr.ttcn
index e4dc35b..a37cdd7 100644
--- a/s1gw/S1GW_ConnHdlr.ttcn
+++ b/s1gw/S1GW_ConnHdlr.ttcn
@@ -394,11 +394,9 @@
return pdu;
}

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

for (var integer i := 0; i < lengthof(erabs); i := i + 1) {
@@ -408,16 +406,12 @@
items[i] := ts_E_RABList(item)[0];
}

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

for (var integer i := 0; i < lengthof(erabs); i := i + 1) {
var template (present) E_RABItem item;
@@ -426,10 +420,53 @@
items[i] := tr_E_RABList(item)[0];
}

+ return items;
+}
+
+function f_ConnHdlr_tx_erab_release_cmd(in ERabList erabs,
+ S1AP_IEs.Cause cause := c_REL_CMD_CAUSE,
+ MME_UE_S1AP_ID mme_ue_id := c_MME_UE_ID)
+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(mme_ue_id, enb_ue_id, items));
+}
+
+function f_ConnHdlr_rx_erab_release_cmd(in ERabList erabs,
+ S1AP_IEs.Cause cause := c_REL_CMD_CAUSE,
+ MME_UE_S1AP_ID mme_ue_id := c_MME_UE_ID)
+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(mme_ue_id, enb_ue_id, items));
return pdu;
}

+function f_ConnHdlr_tx_erab_release_ind(in ERabList erabs,
+ S1AP_IEs.Cause cause := c_REL_CMD_CAUSE,
+ MME_UE_S1AP_ID mme_ue_id := c_MME_UE_ID)
+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(mme_ue_id, enb_ue_id, items));
+}
+
+function f_ConnHdlr_rx_erab_release_ind(in ERabList erabs,
+ S1AP_IEs.Cause cause := c_REL_CMD_CAUSE,
+ MME_UE_S1AP_ID mme_ue_id := c_MME_UE_ID)
+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(mme_ue_id, enb_ue_id, items));
+ return pdu;
+}
+
function f_ConnHdlr_rx_session_establish_req(in ERab erab)
runs on ConnHdlr return PDU_PFCP {
var OCT4 addr := f_inet_addr(g_pars.pfcp_rem_addr);
@@ -604,10 +641,8 @@
f_ConnHdlr_rx_erab_setup_rsp(erabs);
}

-function f_ConnHdlr_erab_release_cmd(inout ERabList erabs,
- S1AP_IEs.Cause cause := c_REL_CMD_CAUSE)
+private function f_ConnHdlr_session_delete(inout ERabList erabs)
runs on ConnHdlr {
- f_ConnHdlr_tx_erab_release_cmd(erabs, cause);
for (var integer i := 0; i < lengthof(erabs); i := i + 1) {
log("UPF <- S1GW: PFCP Session Deletion Request for E-RAB ID ", erabs[i].erab_id);
var PDU_PFCP pdu := f_ConnHdlr_rx_session_delete_req(erabs[i]);
@@ -616,7 +651,24 @@
/* ask PFCPEM to *not* route PDUs with this SEID to us */
f_PFCPEM_unsubscribe_seid(erabs[i].pfcp_loc_seid);
}
+}
+
+function f_ConnHdlr_erab_release_cmd(inout ERabList erabs,
+ S1AP_IEs.Cause cause := c_REL_CMD_CAUSE)
+runs on ConnHdlr {
+ f_ConnHdlr_tx_erab_release_cmd(erabs, cause);
+ f_ConnHdlr_session_delete(erabs);
f_ConnHdlr_rx_erab_release_cmd(erabs, cause);
}

+function f_ConnHdlr_erab_release_ind(inout ERabList erabs,
+ 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_session_delete(erabs);
+ log("eNB -> [S1GW -> MME]: E-RAB RELEASE INDICATION");
+ f_ConnHdlr_rx_erab_release_ind(erabs, cause);
+}
+
}
diff --git a/s1gw/S1GW_Tests.ttcn b/s1gw/S1GW_Tests.ttcn
index 940944a..8a259d3 100644
--- a/s1gw/S1GW_Tests.ttcn
+++ b/s1gw/S1GW_Tests.ttcn
@@ -299,7 +299,7 @@
vc_conn.done;
}

-/* Test E-RAB SETUP [and RELEASE] procedures */
+/* Test E-RAB SETUP and RELEASE.cmd procedures */
function f_TC_e_rab_setup(charstring id) runs on ConnHdlr {
f_ConnHdlr_s1ap_register(g_pars.genb_id);
f_ConnHdlr_s1ap_connect(mp_enb_bind_ip, mp_s1gw_enb_ip);
@@ -342,6 +342,29 @@
f_TC_e_rab_setup_exec(num_enbs := mp_multi_enb_num, num_erabs := 3);
}

+/* Test E-RAB SETUP and RELEASE.ind procedures */
+function f_TC_e_rab_release_ind(charstring id) runs on ConnHdlr {
+ f_ConnHdlr_s1ap_register(g_pars.genb_id);
+ 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_s1ap_disconnect();
+ f_ConnHdlr_s1ap_unregister(g_pars.genb_id);
+}
+testcase TC_e_rab_release_ind() runs on test_CT {
+ var ConnHdlrPars pars := valueof(t_ConnHdlrPars);
+ var ConnHdlr vc_conn;
+
+ f_init();
+
+ vc_conn := f_ConnHdlr_spawn(refers(f_TC_e_rab_release_ind), pars);
+ vc_conn.done;
+}
+
function f_TC_pfcp_heartbeat(charstring id) runs on ConnHdlr {
var integer rts := f_PFCPEM_get_recovery_timestamp();
var PDU_PFCP pfcp_pdu;
@@ -374,6 +397,7 @@
execute( TC_e_rab_setup3() );
execute( TC_e_rab_setup_multi() );
execute( TC_e_rab_setup3_multi() );
+ execute( TC_e_rab_release_ind() );
execute( TC_pfcp_heartbeat() );
}

diff --git a/s1gw/expected-results.xml b/s1gw/expected-results.xml
index 99a75d5..9075dc3 100644
--- a/s1gw/expected-results.xml
+++ b/s1gw/expected-results.xml
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<testsuite name='S1GW_Tests' tests='9' failures='0' errors='0' skipped='0' inconc='0' time='MASKED'>
+<testsuite name='S1GW_Tests' tests='10' failures='0' errors='0' skipped='0' inconc='0' time='MASKED'>
<testcase classname='S1GW_Tests' name='TC_setup' time='MASKED'/>
<testcase classname='S1GW_Tests' name='TC_setup_multi' time='MASKED'/>
<testcase classname='S1GW_Tests' name='TC_conn_term_by_mme' time='MASKED'/>
@@ -8,5 +8,6 @@
<testcase classname='S1GW_Tests' name='TC_e_rab_setup3' time='MASKED'/>
<testcase classname='S1GW_Tests' name='TC_e_rab_setup_multi' time='MASKED'/>
<testcase classname='S1GW_Tests' name='TC_e_rab_setup3_multi' time='MASKED'/>
+ <testcase classname='S1GW_Tests' name='TC_e_rab_release_ind' time='MASKED'/>
<testcase classname='S1GW_Tests' name='TC_pfcp_heartbeat' time='MASKED'/>
</testsuite>

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

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