pespin has uploaded this change for review. ( 
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

Change-Id: I282e0c8072172fa633bf82ed6b9492b0bb4362cc
---
M 5gc/C5G_Tests.ttcn
M 5gc/ConnHdlr.ttcn
M 5gc/expected-results.xml
3 files changed, 49 insertions(+), 7 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks 
refs/changes/78/42478/1

diff --git a/5gc/C5G_Tests.ttcn b/5gc/C5G_Tests.ttcn
index 0aa24a5..4ef546d 100644
--- a/5gc/C5G_Tests.ttcn
+++ b/5gc/C5G_Tests.ttcn
@@ -396,6 +396,27 @@
        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 {
+       f_register();
+       f_pdu_sess_establish(p_AlwaysOnPDUSessionReq := crs_AlwaysOn('1'B),
+                            configure_userplane := false);
+       f_sleep(1.0);
+       f_pdu_sess_modify();
+       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 +1067,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() );
diff --git a/5gc/ConnHdlr.ttcn b/5gc/ConnHdlr.ttcn
index a90bc64..2b4209f 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,
+                             template (omit) AlwaysOnPDUSessionReq 
p_AlwaysOnPDUSessionReq := omit,
                              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;
        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,29 @@
        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;
+
+       /* PDU Session Establisment Accept Checks: */
+       if (isvalue(p_AlwaysOnPDUSessionReq)) {
+               if (not ispresent(sess_acc.alwaysOnPDUSessionInd)) {
+                       Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, 
log2str("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, 
log2str("Requested Always-on PDU but got Always-on Not Allowed"));
+               }
+       }
+
+       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 +609,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;
diff --git a/5gc/expected-results.xml b/5gc/expected-results.xml
index 8581cf0..f7850a8 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'>"ConnHdlr.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: newchange
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I282e0c8072172fa633bf82ed6b9492b0bb4362cc
Gerrit-Change-Number: 42478
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>

Reply via email to