pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42482?usp=email )
Change subject: 5gc: Introduce test TC_pdu_sess_est_pco_pcscf ......................................................................
5gc: Introduce test TC_pdu_sess_est_pco_pcscf
Our deps/nas fork is modified to fix multiple incorrect definitions around ProtocolContainer record.
Change-Id: Ic7b22ad647bcac944551ac1c29080f895ca72cf8 --- M 5gc/C5G_Tests.ttcn M 5gc/ConnHdlr.ttcn M 5gc/expected-results.xml M 5gc/open5gs/open5gs-smf.yaml M deps/Makefile M library/NG_NAS_Osmo_Templates.ttcn 6 files changed, 59 insertions(+), 9 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/82/42482/1
diff --git a/5gc/C5G_Tests.ttcn b/5gc/C5G_Tests.ttcn index 2bcc1d3..f710141 100644 --- a/5gc/C5G_Tests.ttcn +++ b/5gc/C5G_Tests.ttcn @@ -66,6 +66,8 @@ charstring mp_local_gtpu_ip := "127.0.0.20"; charstring mp_ping_hostname := "10.45.0.1"; charstring mp_ping_hostname6 := "cafe::1"; + charstring mp_pcscf_hostname4 := "127.0.0.7"; + charstring mp_pcscf_hostname6 := "fd02:db8:18::7";
charstring mp_run_prog_log_path := "/tmp"; charstring mp_run_prog_as_user := "osmocom"; @@ -398,6 +400,42 @@
/* 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_pco_pcscf() runs on ConnHdlr { + var template (value) ExtdProtocolConfigOptions pco_req; + var template (present) ExtdProtocolConfigOptions pco_exp; + var NG_PDU_SESSION_ESTABLISHMENT_ACCEPT sess_acc; + + f_register(); + pco_req := cs_ExtdPCO('0000'O, + { valueof(cs_ProtocolContainer('000C'O, ''O)), + valueof(cs_ProtocolContainer('0001'O, ''O)) }); + pco_exp := cr_ExtdPCO(?, + { valueof(cs_ProtocolContainer('000C'O, f_inet_addr(C5G_Tests.mp_pcscf_hostname4))), + valueof(cs_ProtocolContainer('0001'O, f_inet6_addr(C5G_Tests.mp_pcscf_hostname6))) }); + + sess_acc := f_pdu_sess_establish(p_ExtdPCO := pco_req, configure_userplane := false); + + if (not match(sess_acc.extdProtocolConfigurationOptions, pco_exp)) { + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, + log2str("Requested ExtPCO ", pco_req, " expected ", pco_exp, + " got ", sess_acc.extdProtocolConfigurationOptions)); + } + + f_pdu_sess_release(); + f_deregister(); +} +testcase TC_pdu_sess_est_pco_pcscf() 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_pco_pcscf), pars); + 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;
@@ -1077,6 +1115,7 @@ execute( TC_ue_context_release_with_pdu_session() ); execute( TC_pdu_sess_modification() ); execute( TC_pdu_sess_est_always_on() ); + execute( TC_pdu_sess_est_pco_pcscf() );
execute( TC_ng_register_ping4() ); execute( TC_ng_register_ping4_256() ); @@ -1145,10 +1184,6 @@ * - 3GPP TS 23.632 5.3.3 Mobility from EPC to 5GC: Not supported by open5gs (missing Nhss interface use in UDM) * - 3GPP TS 23.632 5.2.3 Vector Generation in UDM/ARPF: Not supported by open5gs (missing Nudm_UEAuthentication_GetHssAv in UDM) * - 3GPP TS 23.502 Annex G (normative): Support of GERAN/UTRAN access by SMF+PGW-C: Not supported by open5gs (Gn<->N7 (to PCF) in open5gs-smfd) - * - * - 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. */
} diff --git a/5gc/ConnHdlr.ttcn b/5gc/ConnHdlr.ttcn index 69daa3e..5294b50 100644 --- a/5gc/ConnHdlr.ttcn +++ b/5gc/ConnHdlr.ttcn @@ -549,6 +549,7 @@ 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, + template (omit) ExtdProtocolConfigOptions p_ExtdPCO := 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; @@ -561,7 +562,8 @@ 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_AlwaysOnPDUSessionReq := p_AlwaysOnPDUSessionReq); + p_AlwaysOnPDUSessionReq := p_AlwaysOnPDUSessionReq, + p_ExtdPCO := p_ExtdPCO); 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), diff --git a/5gc/expected-results.xml b/5gc/expected-results.xml index 155fd95..bbdc0b2 100644 --- a/5gc/expected-results.xml +++ b/5gc/expected-results.xml @@ -13,6 +13,7 @@ C5G_Tests.ttcn:MASKED TC_pdu_sess_est_always_on testcase </failure> </testcase> + <testcase classname='C5G_Tests' name='TC_pdu_sess_est_pco_pcscf' time='MASKED'/> <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'/> diff --git a/5gc/open5gs/open5gs-smf.yaml b/5gc/open5gs/open5gs-smf.yaml index f925af1..8792971 100644 --- a/5gc/open5gs/open5gs-smf.yaml +++ b/5gc/open5gs/open5gs-smf.yaml @@ -46,9 +46,9 @@ - 2001:4860:4860::8888 - 2001:4860:4860::8844 mtu: 1400 -# p-cscf: -# - 127.0.0.1 -# - ::1 + p-cscf: + - 127.0.0.7 + - fd02:db8:18::7 # ctf: # enabled: auto # auto(default)|yes|no freeDiameter: open5gs-smf-freediameter.conf diff --git a/deps/Makefile b/deps/Makefile index 61dfe48..49f601b 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -72,7 +72,7 @@
# Use tag names from 'git describe --tags' or commit hashes. This way we get # exact commits of deps when doing regression testing. -nas_commit= 60a69a44cc6bbb32d96aecc4e355128ac5f95a5e +nas_commit= c8fb0b1dd96f45fbfdc93ffc73ffb3ca6ced47cc titan.Libraries.TCCUsefulFunctions_commit= R.35.B-6-gb3687da titan.ProtocolEmulations.M3UA_commit= a70095b9113b23d2ea2405a5775befec18dd0fe0 titan.ProtocolEmulations.SCCP_commit= 744f3eeb58d7b5bc372c9fd01db737a20bae069a diff --git a/library/NG_NAS_Osmo_Templates.ttcn b/library/NG_NAS_Osmo_Templates.ttcn index 7edb9f5..92e59c7 100644 --- a/library/NG_NAS_Osmo_Templates.ttcn +++ b/library/NG_NAS_Osmo_Templates.ttcn @@ -20,6 +20,18 @@
import from NG_NAS_Osmo_Types all;
+/* 24.301 cl. 9.9.4.26 */ +template (present) ExtdProtocolConfigOptions cr_ExtdPCO(template (present) Type6Length_Type p_Length := ?, + template NAS_ExtdProtocolConfigOptions_Type p_ProtocolContainers := *) := +{ + iei := '7B'O, + iel := p_Length, + ext := '1'B, + spare := tsc_Spare4, + configProtocol := tsc_Spare3, + pco := p_ProtocolContainers + }; + /* 24.501 cl. 9.11.3.54 */ template (value) NG_UE_SecurityCapability cs_NG_UE_SecurityCapabilityTLV(template (value) O1_Type ngeaCap := 'f0'O,