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'/>