pespin has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42478?usp=email )

Change subject: 5gc: Introduce test TC_pdu_sess_est_always_on
......................................................................

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(-)

Approvals:
  fixeria: Looks good to me, approved
  Jenkins Builder: Verified
  osmith: Looks good to me, but someone else must approve




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 https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42478?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I282e0c8072172fa633bf82ed6b9492b0bb4362cc
Gerrit-Change-Number: 42478
Gerrit-PatchSet: 5
Gerrit-Owner: pespin <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: osmith <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>

Reply via email to