pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/40893?usp=email )
Change subject: 5gc: Add tests for UE release context request procedure ......................................................................
5gc: Add tests for UE release context request procedure
Change-Id: Icaaeb2923fdcaba47a72ed0aedc5661f68c03774 --- M 5gc/C5G_Tests.ttcn M 5gc/ConnHdlr.ttcn M 5gc/expected-results.xml 3 files changed, 72 insertions(+), 6 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved fixeria: Looks good to me, but someone else must approve
diff --git a/5gc/C5G_Tests.ttcn b/5gc/C5G_Tests.ttcn index f72fef8..f9a9057 100644 --- a/5gc/C5G_Tests.ttcn +++ b/5gc/C5G_Tests.ttcn @@ -330,6 +330,36 @@ vc_conn.done; }
+/* 3GPP TS 23.502 4.2.6 AN Release */ +private function f_TC_ue_context_release_no_pdu_session() runs on ConnHdlr { + f_register(); + f_ue_context_release(); +} +testcase TC_ue_context_release_no_pdu_session() runs on MTC_CT { + f_init(); + f_ngap_setup(0); + + var ConnHdlrPars pars := f_init_pars(ue_idx := 0); + var ConnHdlr vc_conn; + vc_conn := f_start_handler_with_pars(refers(f_TC_ue_context_release_no_pdu_session), pars); + vc_conn.done; +} +private function f_TC_ue_context_release_with_pdu_session() runs on ConnHdlr { + f_register(); + f_pdu_sess_establish(false); + f_sleep(1.0); + f_ue_context_release(); +} +testcase TC_ue_context_release_with_pdu_session() runs on MTC_CT { + f_init(); + f_ngap_setup(0); + + var ConnHdlrPars pars := f_init_pars(ue_idx := 0); + var ConnHdlr vc_conn; + vc_conn := f_start_handler_with_pars(refers(f_TC_ue_context_release_with_pdu_session), pars); + vc_conn.done; +} + private function f_TC_register_ping4() runs on ConnHdlr { f_register(); f_pdu_sess_establish(); @@ -371,6 +401,8 @@ execute( TC_ng_setup_wrong_tac() ); execute( TC_ng_register() ); execute( TC_periodic_registration_updating() ); + execute( TC_ue_context_release_no_pdu_session() ); + execute( TC_ue_context_release_with_pdu_session() ); execute( TC_ng_register_ping4() ); execute( TC_ng_register_ping4_256() ); } diff --git a/5gc/ConnHdlr.ttcn b/5gc/ConnHdlr.ttcn index dbec212..ccee880 100644 --- a/5gc/ConnHdlr.ttcn +++ b/5gc/ConnHdlr.ttcn @@ -313,6 +313,7 @@ return li_resp; }
+/* 3GPP TS 23.502 Figure 4.3.2.2.1-1 steps 12-14. */ private altstep as_ngap_handle_InitialCtxReq_withPDUSessionList() runs on ConnHdlr { var NGAP_PDU rx_ngap; var template (present) NGAP_PDU exp_ngap := @@ -336,7 +337,8 @@ } }
-function f_pdu_sess_establish() runs on ConnHdlr { +/* 3GPP TS 23.502 4.3.2.2 UE Requested PDU Session Establishment */ +function f_pdu_sess_establish(boolean configure_userplane := true) runs on ConnHdlr { var template (value) NG_NAS_UL_Message_Type nas_ul_msg; var NAS_PDU nas_pdu; var NG_NAS_DL_Message_Type rx_nas, inner_nas; @@ -364,7 +366,9 @@ log("5GC assigned CN GTPU Address: ", g_pars.ue_pars.sess_pars.cn_gtpu_ip, " TEID: ", g_pars.ue_pars.sess_pars.cn_gtpu_teid); log("5GC assigned UE IP address: ", g_pars.ue_pars.sess_pars.ue_ip);
- f_pdu_sess_create_tun(); + if (configure_userplane) { + f_pdu_sess_create_tun(); + } }
function f_register() runs on ConnHdlr { @@ -455,13 +459,14 @@ }
/* 3GPP TS 38.413 8.3.3 UE Context Release (AMF initiated) */ -private altstep as_ngap_handle_UeContextReleaseCmd() runs on ConnHdlr { +private altstep as_ngap_handle_UeContextReleaseCmd(template (present) Cause exp_cause := ?) runs on ConnHdlr { var NGAP_PDU rx_ngap; var template (present) NGAP_PDU exp_ngap := mw_ngap_initMsg(mw_n2_UEContextReleaseCommand( mw_uE_NGAP_IDs_uE_NGAP_ID_pair( mw_uE_NGAP_ID_pair(g_pars.ue_pars.amf_id, - g_pars.ue_pars.ran_id)))); + g_pars.ue_pars.ran_id)), + p_cause := exp_cause));
[] NGAP.receive(exp_ngap) -> value rx_ngap { NGAP.send(m_ngap_succMsg(f_ts_n2_UEContextReleaseComplete(g_pars.ue_pars.amf_id, @@ -470,6 +475,31 @@ } }
+/* 3GPP TS 38.413 8.3.2 UE Context Release Request (NG-RAN node initiated), + * 3GPP TS 23.502 4.2.6 AN Release */ +function f_ue_context_release(template (value) Cause cause := m_cause_radioNetwork(unspecified)) runs on ConnHdlr { + var template (value) NGAP_PDU tx_pdu; + + if (ispresent(g_pars.ue_pars.sess_pars.cn_gtpu_teid)) { + var template (value) PDUSessionResourceListCxtRelReq li_req; + var template (value) PDUSessionResourceItemCxtRelReq it_req; + it_req := m_pDUSessionResourceItemCxtRelReq(g_pars.ue_pars.sess_pars.id); + li_req := { it_req }; + tx_pdu := m_ngap_initMsg(m_n2_UEContextReleaseRequest_withPDUSessionList( + g_pars.ue_pars.amf_id, + g_pars.ue_pars.ran_id, + li_req, + cause)); + } else { + tx_pdu := m_ngap_initMsg(m_n2_UEContextReleaseRequest( + g_pars.ue_pars.amf_id, + g_pars.ue_pars.ran_id, + cause)); + } + NGAP.send(tx_pdu); + as_ngap_handle_UeContextReleaseCmd(exp_cause := cause); +} + /* Handle a PDUSessionResourceSetupRequestTransfer contained inside NGAP InitialContextSetupRequest and return a Result for InitialContextSetupResponse */ private function f_pdu_handle_session_resource_released_item(PDUSessionResourceToReleaseItemRelCmd cmd) runs on ConnHdlr return PDUSessionResourceReleasedItemRelRes { @@ -525,7 +555,7 @@ } }
-function f_pdu_sess_release() runs on ConnHdlr { +function f_pdu_sess_release(boolean configure_userplane := true) runs on ConnHdlr { var template (value) NG_NAS_UL_Message_Type nas_ul_msg; var NAS_PDU nas_pdu; var NG_NAS_DL_Message_Type rx_nas, inner_nas; @@ -565,7 +595,9 @@ p_PDU_SessionId := cs_NG_PDU_SessionIdTV(pdu_sess_id)); NGAP.send(nas_ul_msg);
- f_pdu_sess_delete_tun(); + if (configure_userplane) { + f_pdu_sess_delete_tun(); + } }
function f_pdu_sess_create_tun() runs on ConnHdlr { diff --git a/5gc/expected-results.xml b/5gc/expected-results.xml index a94eb6f..99ded9c 100644 --- a/5gc/expected-results.xml +++ b/5gc/expected-results.xml @@ -5,6 +5,8 @@ <testcase classname='C5G_Tests' name='TC_ng_setup' time='MASKED'/> <testcase classname='C5G_Tests' name='TC_ng_register' time='MASKED'/> <testcase classname='C5G_Tests' name='TC_periodic_registration_updating' time='MASKED'/> + <testcase classname='C5G_Tests' name='TC_ue_context_release_no_pdu_session' time='MASKED'/> + <testcase classname='C5G_Tests' name='TC_ue_context_release_with_pdu_session' time='MASKED'/> <testcase classname='C5G_Tests' name='TC_ng_register_ping4' time='MASKED'/> <testcase classname='C5G_Tests' name='TC_ng_register_ping4_256' time='MASKED'/> </testsuite>