pespin submitted this change.
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(-)
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>
To view, visit change 40893. To unsubscribe, or for help writing mail filters, visit settings.