pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42418?usp=email )
Change subject: 5gc: Introduce test TC_secondary_rat_data_usage_report ......................................................................
5gc: Introduce test TC_secondary_rat_data_usage_report
Change-Id: I8a82b1a8bcea948356d819af5c4919ae3829e549 --- M 5gc/C5G_Tests.ttcn M 5gc/ConnHdlr.ttcn M 5gc/expected-results.xml M library/ngap/NGAP_EncDec.cc M library/ngap/NGAP_Types.ttcn 5 files changed, 73 insertions(+), 1 deletion(-)
Approvals: pespin: Looks good to me, approved osmith: Looks good to me, but someone else must approve Jenkins Builder: Verified fixeria: Looks good to me, but someone else must approve
diff --git a/5gc/C5G_Tests.ttcn b/5gc/C5G_Tests.ttcn index ddd000a..02ba9c3 100644 --- a/5gc/C5G_Tests.ttcn +++ b/5gc/C5G_Tests.ttcn @@ -911,6 +911,29 @@ vc_conn[1].done; }
+/* 3GPP TS 23.502 4.21 Secondary RAT Usage Data Reporting Procedure + * 3GPP TS 38.413 8.15.1 Secondary RAT Data Usage Report + */ +private function f_TC_secondary_rat_data_usage_report() runs on ConnHdlr { + f_register(); + f_pdu_sess_establish(); + f_sleep(1.0); + + f_secondary_rat_data_usage_report(); + + f_pdu_sess_release(); + f_deregister(); +} +testcase TC_secondary_rat_data_usage_report() 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_secondary_rat_data_usage_report), pars); + vc_conn.done; +} + control { execute( TC_ng_setup() ); execute( TC_ng_setup_unknown_global_gnb_id_plmn() ); @@ -940,6 +963,8 @@ execute( TC_handover_inter_ngran_xn() ); execute( TC_handover_inter_ngran_n2() ); execute( TC_handover_inter_ngran_n2_cancel() ); + + execute( TC_secondary_rat_data_usage_report() ); }
/* TODO: @@ -976,7 +1001,6 @@ * - 3GPP TS 23.502 4.13.6.2 Inter RAT Fallback in 5GC for IMS voice: Not supported by open5gs (https://github.com/open5gs/open5gs/issues/2534) * - 3GPP TS 23.502 4.13.6.3 Transfer of PDU session used for IMS voice from non-3GPP access to 5GS: Not supported by open5gs (https://github.com/open5gs/open5gs/issues/2534) * - 3GPP TS 23.502 4.14.1 RAN Initiated QoS Flow Mobility - * - 3GPP TS 23.502 4.21 Secondary RAT Usage Data Reporting Procedure * - 3GPP TS 23.502 Annex G (normative): Support of GERAN/UTRAN access by SMF+PGW-C * * - Emergency call (PDU Sess Establish "Request Type"="Emergency Request") diff --git a/5gc/ConnHdlr.ttcn b/5gc/ConnHdlr.ttcn index 7716cad..33c7669 100644 --- a/5gc/ConnHdlr.ttcn +++ b/5gc/ConnHdlr.ttcn @@ -838,6 +838,31 @@ NGAP.send(nas_ul_msg); }
+/* 3GPP TS 38.413 9.2.14.1 SECONDARY RAT DATA USAGE REPORT + * 3GPP TS 23.502 4.21 Secondary RAT Usage Data Reporting Procedure + * 3GPP TS 38.413 8.15.1 Secondary RAT Data Usage Report + **/ +function f_secondary_rat_data_usage_report() runs on ConnHdlr { + var template (value) SecondaryRATUsageInformation rat_use_info; + var template (value) SecondaryRATDataUsageReportTransfer transfer; + var octetstring transfer_enc; + var template (value) PDUSessionResourceSecondaryRATUsageItem it; + var template (value) NGAP_PDU tx_pdu; + + rat_use_info := m_secondaryRATUsageInformation(); + transfer := m_secondaryRATDataUsageReportTransfer(rat_use_info); + transfer_enc := enc_NGAP_SecondaryRATDataUsageReportTransfer(valueof(transfer)); + it := m_pPDUSessionResourceSecondaryRATUsageItem(g_pars.ue_pars.sess_pars.id, + transfer_enc); + + tx_pdu := m_ngap_initMsg( + m_n2_SecondaryRATDataUsageReport( + g_pars.ue_pars.amf_id, + g_pars.ue_pars.ran_id, + { it })); + NGAP.send(tx_pdu); +} + /* 3GPP TS 24.501 5.5.2.2 UE-initiated de-registration procedure, * 3GPP TS 23.502 4.2.2.3.2 UE-initiated Deregistration */ function f_deregister() runs on ConnHdlr { diff --git a/5gc/expected-results.xml b/5gc/expected-results.xml index 7dfbcfb..ed5ac2b 100644 --- a/5gc/expected-results.xml +++ b/5gc/expected-results.xml @@ -35,4 +35,5 @@ <testcase classname='C5G_Tests' name='TC_handover_inter_ngran_xn' time='MASKED'/> <testcase classname='C5G_Tests' name='TC_handover_inter_ngran_n2' time='MASKED'/> <testcase classname='C5G_Tests' name='TC_handover_inter_ngran_n2_cancel' time='MASKED'/> + <testcase classname='C5G_Tests' name='TC_secondary_rat_data_usage_report' time='MASKED'/> </testsuite> diff --git a/library/ngap/NGAP_EncDec.cc b/library/ngap/NGAP_EncDec.cc index b024c32..64c9755 100644 --- a/library/ngap/NGAP_EncDec.cc +++ b/library/ngap/NGAP_EncDec.cc @@ -189,4 +189,24 @@ return ret; }
+OCTETSTRING enc__NGAP__SecondaryRATDataUsageReportTransfer(const NGAP__IEs::SecondaryRATDataUsageReportTransfer &p) +{ + TTCN_Buffer TTCN_buf; + TTCN_buf.clear(); + p.encode(NGAP__IEs::SecondaryRATDataUsageReportTransfer_descr_, TTCN_buf, + TTCN_EncDec::CT_PER, PER_ALIGNED); + return OCTETSTRING(TTCN_buf.get_len(), TTCN_buf.get_data()); +} + +NGAP__IEs::SecondaryRATDataUsageReportTransfer dec__NGAP__SecondaryRATDataUsageReportTransfer(const OCTETSTRING &stream) +{ + NGAP__IEs::SecondaryRATDataUsageReportTransfer ret; + TTCN_Buffer TTCN_buf; + TTCN_buf.clear(); + TTCN_buf.put_os(stream); + ret.decode(NGAP__IEs::SecondaryRATDataUsageReportTransfer_descr_, TTCN_buf, + TTCN_EncDec::CT_PER, PER_ALIGNED); + return ret; +} + } diff --git a/library/ngap/NGAP_Types.ttcn b/library/ngap/NGAP_Types.ttcn index e4a9f4e..86851f5 100644 --- a/library/ngap/NGAP_Types.ttcn +++ b/library/ngap/NGAP_Types.ttcn @@ -30,4 +30,6 @@ external function enc_NGAP_HandoverRequestAcknowledgeTransfer(NGAP_IEs.HandoverRequestAcknowledgeTransfer p) return octetstring; external function dec_NGAP_HandoverRequestAcknowledgeTransfer(in octetstring pdu) return NGAP_IEs.HandoverRequestAcknowledgeTransfer;
+ external function enc_NGAP_SecondaryRATDataUsageReportTransfer(NGAP_IEs.SecondaryRATDataUsageReportTransfer p) return octetstring; + external function dec_NGAP_SecondaryRATDataUsageReportTransfer(in octetstring pdu) return NGAP_IEs.SecondaryRATDataUsageReportTransfer; }