pespin submitted this change.
5gc: Introduce test TC_pdu_sess_est_always_on
This feature is right now not implemented in open5gs and hence the test
is expected to fail, since it returns no AlwaysOn Indication in PDU
Session Establishment Accept.
Change-Id: I282e0c8072172fa633bf82ed6b9492b0bb4362cc
---
M 5gc/C5G_Tests.ttcn
M 5gc/ConnHdlr.ttcn
M 5gc/expected-results.xml
3 files changed, 52 insertions(+), 9 deletions(-)
diff --git a/5gc/C5G_Tests.ttcn b/5gc/C5G_Tests.ttcn
index 0aa24a5..b871b42 100644
--- a/5gc/C5G_Tests.ttcn
+++ b/5gc/C5G_Tests.ttcn
@@ -396,6 +396,36 @@
vc_conn.done;
}
+/* 3GPP TS 24.501 8.3.1.7 Always-on PDU session requested (see also 9.11.4.4)
+ * 3GPP TS 24.501 8.3.2.6 Always-on PDU session indication (see also 9.11.4.3) */
+private function f_TC_pdu_sess_est_always_on() runs on ConnHdlr {
+ var NG_PDU_SESSION_ESTABLISHMENT_ACCEPT sess_acc;
+
+ f_register();
+ sess_acc := f_pdu_sess_establish(p_AlwaysOnPDUSessionReq := crs_AlwaysOn('1'B),
+ configure_userplane := false);
+
+ if (not ispresent(sess_acc.alwaysOnPDUSessionInd)) {
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
+ "Requested Always-on PDU but got no Always-on Indication");
+ } else if(match(sess_acc.alwaysOnPDUSessionInd, cs_AlwaysOnNotAllowed)) {
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
+ "Requested Always-on PDU but got Always-on Not Allowed");
+ }
+
+ f_pdu_sess_release();
+ f_deregister();
+}
+testcase TC_pdu_sess_est_always_on() 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_pdu_sess_est_always_on), pars);
+ vc_conn.done;
+}
+
private function f_TC_register_ping4() runs on ConnHdlr {
f_register();
f_pdu_sess_establish(pdu_sess_type := c_PDU_SessionType_IPv4);
@@ -1046,6 +1076,7 @@
execute( TC_ue_context_release_no_pdu_session() );
execute( TC_ue_context_release_with_pdu_session() );
execute( TC_pdu_sess_modification() );
+ execute( TC_pdu_sess_est_always_on() );
execute( TC_ng_register_ping4() );
execute( TC_ng_register_ping4_256() );
@@ -1119,7 +1150,6 @@
* - VoLTE:
* -- " If the UE requested P-CSCF discovery then the message shall also include the P-CSCF IP address(es) as determined by the SMF and as described in clause 5.16.3.4 of TS 23.50"
* - Fill in PCO during PDU Sess Establish Req.
- * - "If the PDU Session being established was requested to be an always-on PDU Session, the SMF shall indicate whether the request is accepted by including an Always-on PDU Session Granted indication in the PDU Session Establishment Accept message"
*/
}
diff --git a/5gc/ConnHdlr.ttcn b/5gc/ConnHdlr.ttcn
index a90bc64..69daa3e 100644
--- a/5gc/ConnHdlr.ttcn
+++ b/5gc/ConnHdlr.ttcn
@@ -544,20 +544,24 @@
log("Using IPv6 global address: ", g_pars.ue_pars.sess_pars.ue_ip6);
}
-/* 3GPP TS 23.502 4.3.2.2 UE Requested PDU Session Establishment */
+/* 3GPP TS 23.502 4.3.2.2 UE Requested PDU Session Establishment
+ * 3GPP TS 24.501 8.3.1 PDU session establishment request */
function f_pdu_sess_establish(BIT3 request_type := c_RequestType_initial_request,
BIT3 pdu_sess_type := c_PDU_SessionType_IPv4,
- boolean configure_userplane := true) runs on ConnHdlr {
+ template (omit) AlwaysOnPDUSessionReq p_AlwaysOnPDUSessionReq := omit,
+ boolean configure_userplane := true) runs on ConnHdlr return NG_PDU_SESSION_ESTABLISHMENT_ACCEPT {
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;
var ProcedureTransactionIdentifier pti := f_next_pti();
var OCT1 pdu_sess_id := int2oct(g_pars.ue_pars.sess_pars.id, 1);
+ var NG_PDU_SESSION_ESTABLISHMENT_ACCEPT sess_acc;
nas_ul_msg := cs_NG_PDU_SESSION_ESTABLISHMENT_REQUEST(cs_NG_PDU_SessionIdV(pdu_sess_id), pti,
p_IntegrityProtMaxDataRate := cs_IntegrityProtMaxDataRateV('FF'O, 'FF'O),
p_PDU_SessionType := cs_PDU_SessionTypeTV(pdu_sess_type),
- p_SSC_Mode := cs_SSC_ModeTV('001'B));
+ p_SSC_Mode := cs_SSC_ModeTV('001'B),
+ p_AlwaysOnPDUSessionReq := p_AlwaysOnPDUSessionReq);
nas_pdu := enc_NG_NAS_UL_Message_Type(valueof(nas_ul_msg));
nas_ul_msg := cs_NG_UL_NAS_TRANSPORT(cs_PayloadContainerType(tsc_PayloadContainerESMMsg),
cs_PayloadContainerLV(nas_pdu),
@@ -571,18 +575,20 @@
NGAP.receive(cr_NG_DL_NAS_TRANSPORT) -> value rx_nas;
inner_nas := f_dec_NG_NAS_DL_Message_Payload_Container(rx_nas.dl_Nas_Transport.payloadContainerType.container,
rx_nas.dl_Nas_Transport.payload.payload);
- g_pars.ue_pars.sess_pars.qos_rules := inner_nas.pdu_Session_Establishment_Accept.authorizedQoSRules.listofQoSRules;
+ sess_acc := inner_nas.pdu_Session_Establishment_Accept;
+
+ g_pars.ue_pars.sess_pars.qos_rules := sess_acc.authorizedQoSRules.listofQoSRules;
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);
select (pdu_sess_type) {
case (c_PDU_SessionType_IPv4) {
- g_pars.ue_pars.sess_pars.ue_ip4 := f_inet_ntoa(inner_nas.pdu_Session_Establishment_Accept.pduAddress.adressInfo);
+ g_pars.ue_pars.sess_pars.ue_ip4 := f_inet_ntoa(sess_acc.pduAddress.adressInfo);
log("5GC assigned UE IPv4 address: ", g_pars.ue_pars.sess_pars.ue_ip4);
if (configure_userplane) {
f_pdu_sess_create_tun(IPV4);
}
}
case (c_PDU_SessionType_IPv6) {
- g_pars.ue_pars.sess_pars.ipv6_interface_id := inner_nas.pdu_Session_Establishment_Accept.pduAddress.adressInfo
+ g_pars.ue_pars.sess_pars.ipv6_interface_id := sess_acc.pduAddress.adressInfo
log("5GC assigned IPv6 Interface Id: ", g_pars.ue_pars.sess_pars.ipv6_interface_id);
/* Use the link-local address for now: */
var octetstring ll_addr := 'FE80000000000000'O & g_pars.ue_pars.sess_pars.ipv6_interface_id;
@@ -594,8 +600,8 @@
}
}
case (c_PDU_SessionType_IPv4v6) {
- var octetstring eua_v6 := substr(inner_nas.pdu_Session_Establishment_Accept.pduAddress.adressInfo, 0, 8);
- var octetstring eua_v4 := substr(inner_nas.pdu_Session_Establishment_Accept.pduAddress.adressInfo, 8, 4);
+ var octetstring eua_v6 := substr(sess_acc.pduAddress.adressInfo, 0, 8);
+ var octetstring eua_v4 := substr(sess_acc.pduAddress.adressInfo, 8, 4);
g_pars.ue_pars.sess_pars.ue_ip4 := f_inet_ntoa(eua_v4);
log("5GC assigned UE IPv4 address: ", g_pars.ue_pars.sess_pars.ue_ip4);
g_pars.ue_pars.sess_pars.ipv6_interface_id := eua_v6;
@@ -612,6 +618,8 @@
setverdict(fail, "PDU Session Type not implemented");
}
}
+
+ return sess_acc;
}
private function f_pdu_handle_session_resource_modify_item_qos_flow_list(QosFlowAddOrModifyRequestList qos_flow_req_li) runs on ConnHdlr return QosFlowAddOrModifyResponseList
diff --git a/5gc/expected-results.xml b/5gc/expected-results.xml
index 8581cf0..155fd95 100644
--- a/5gc/expected-results.xml
+++ b/5gc/expected-results.xml
@@ -8,6 +8,11 @@
<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_pdu_sess_modification' time='MASKED'/>
+ <testcase classname='C5G_Tests' name='TC_pdu_sess_est_always_on' time='MASKED'>
+ <failure type='fail-verdict'>"C5G_Tests.ttcn:MASKED : Requested Always-on PDU and got no Always-on Indication"
+ C5G_Tests.ttcn:MASKED TC_pdu_sess_est_always_on testcase
+ </failure>
+ </testcase>
<testcase classname='C5G_Tests' name='TC_ng_register_ping4' time='MASKED'/>
<testcase classname='C5G_Tests' name='TC_ng_register_ping4_256' time='MASKED'/>
<testcase classname='C5G_Tests' name='TC_ng_register_ping6' time='MASKED'/>
To view, visit change 42478. To unsubscribe, or for help writing mail filters, visit settings.