laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38145?usp=email )
Change subject: s1gw: TC_e_rab_setup: also test E-RAB release ......................................................................
s1gw: TC_e_rab_setup: also test E-RAB release
* s1ap: add E-RAB RELEASE API * pfcp: add PFCP Session Deletion API * s1gw: make use of this API in TC_e_rab_setup
Change-Id: Id995c51d8ac76316f41ef49d35380a2521d5ae19 --- M s1gw/S1GW_ConnHdlr.ttcn M s1gw/S1GW_Tests.ttcn 2 files changed, 70 insertions(+), 0 deletions(-)
Approvals: pespin: Looks good to me, approved laforge: 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 cd61123..5b2e7bb 100644 --- a/s1gw/S1GW_ConnHdlr.ttcn +++ b/s1gw/S1GW_ConnHdlr.ttcn @@ -303,6 +303,7 @@ };
private const MME_UE_S1AP_ID c_MME_UE_ID := 4242; +private const S1AP_IEs.Cause c_REL_CMD_CAUSE := { nas := normal_release };
function f_ConnHdlr_tx_erab_setup_req(in ERabList erabs, MME_UE_S1AP_ID mme_ue_id := c_MME_UE_ID) @@ -399,6 +400,42 @@ 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; + var template (value) E_RABList items; + + for (var integer i := 0; i < lengthof(erabs); i := i + 1) { + var template (value) E_RABItem item; + + item := ts_E_RABItem(erabs[i].erab_id, cause); + items[i] := ts_E_RABList(item)[0]; + } + + 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 ENB_UE_S1AP_ID enb_ue_id := g_pars.idx; + 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; + + item := ts_E_RABItem(erabs[i].erab_id, cause); + items[i] := tr_E_RABList(item)[0]; + } + + f_ConnHdlr_rx_s1ap_from_mme(pdu, tr_S1AP_RABReleaseCmd(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); @@ -504,6 +541,24 @@ PFCP.send(resp); }
+function f_ConnHdlr_rx_session_delete_req(in ERab erab) +runs on ConnHdlr return PDU_PFCP { + /* The final Session Deletion Request PDU */ + var template (present) PDU_PFCP tr_pdu; + tr_pdu := tr_PFCP_Session_Del_Req(erab.pfcp_loc_seid); + return f_ConnHdlr_pfcp_expect(tr_pdu); +} + +function f_ConnHdlr_tx_session_delete_resp(in ERab erab, + in PDU_PFCP req) +runs on ConnHdlr { + /* The final Session Deletion Response PDU */ + var template (value) PDU_PFCP resp; + resp := ts_PFCP_Session_Del_Resp(seq_nr := req.sequence_number, + seid := erab.pfcp_rem_seid); + PFCP.send(resp); +} + function f_ConnHdlr_erab_setup_req(inout ERabList erabs) runs on ConnHdlr { log("eNB <- [S1GW <- MME]: E-RAB SETUP REQUEST"); @@ -534,4 +589,17 @@ f_ConnHdlr_rx_erab_setup_rsp(erabs); }
+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); + 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]); + log("UPF -> S1GW: PFCP Session Deletion Response for E-RAB ID ", erabs[i].erab_id); + f_ConnHdlr_tx_session_delete_resp(erabs[i], pdu); + } + f_ConnHdlr_rx_erab_release_cmd(erabs, cause); +} + } diff --git a/s1gw/S1GW_Tests.ttcn b/s1gw/S1GW_Tests.ttcn index fb4ee9b..ebeda6d 100644 --- a/s1gw/S1GW_Tests.ttcn +++ b/s1gw/S1GW_Tests.ttcn @@ -277,6 +277,7 @@ vc_conn.done; }
+/* Test E-RAB SETUP [and RELEASE] procedures */ function f_TC_e_rab_setup(charstring id) runs on ConnHdlr { f_ConnHdlr_register_pfcp(); f_ConnHdlr_s1ap_register(g_pars.genb_id); @@ -285,6 +286,7 @@
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_s1ap_disconnect(); f_ConnHdlr_s1ap_unregister(g_pars.genb_id);