laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38217?usp=email )
(
3 is the latest approved patch-set. No files were changed between the latest approved patch-set and the submitted one. )Change subject: s1gw: add TC_e_rab_release_ind ......................................................................
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(-)
Approvals: laforge: Looks good to me, approved pespin: Looks good to me, but someone else must approve Jenkins Builder: Verified
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>