pespin submitted this change.
5gc: Introduce tests TC_ng_register_ping46(_256)
Depends: osmo-uecups.git Change-Id Ic2da7a761a8df7e006fc02ca6557a48f371e4151
Change-Id: I9cb250f07ac356b7345a570ed71590f041168ed2
---
M 5gc/C5G_Tests.ttcn
M 5gc/ConnHdlr.ttcn
M 5gc/expected-results.xml
M deps/Makefile
4 files changed, 113 insertions(+), 31 deletions(-)
diff --git a/5gc/C5G_Tests.ttcn b/5gc/C5G_Tests.ttcn
index 7274daf..0aa24a5 100644
--- a/5gc/C5G_Tests.ttcn
+++ b/5gc/C5G_Tests.ttcn
@@ -91,7 +91,8 @@
cn_gtpu_ip := omit,
cn_gtpu_teid := omit,
qos_rules := omit,
- ue_ip := omit,
+ ue_ip4 := omit,
+ ue_ip6 := omit,
ipv6_interface_id := omit
};
@@ -399,7 +400,7 @@
f_register();
f_pdu_sess_establish(pdu_sess_type := c_PDU_SessionType_IPv4);
f_sleep(1.0);
- f_ping4(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
+ f_ping(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
f_pdu_sess_release();
f_deregister();
}
@@ -433,7 +434,7 @@
f_register();
f_pdu_sess_establish(pdu_sess_type := c_PDU_SessionType_IPv6);
f_sleep(1.0);
- f_ping4(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
+ f_ping(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
f_pdu_sess_release();
f_deregister();
}
@@ -465,6 +466,44 @@
}
}
+private function f_TC_register_ping46() runs on ConnHdlr {
+ f_register();
+ f_pdu_sess_establish(pdu_sess_type := c_PDU_SessionType_IPv4v6);
+ f_sleep(1.0);
+ f_ping(mp_ping_hostname);
+ /* Give some extra time for previous commands on all ConnHdlr finish,
+ * so we don't run out of PIDs in the PID table of GTPv1U_Emulation: */
+ f_sleep(5.0);
+ f_ping(mp_ping_hostname6);
+ f_pdu_sess_release();
+ f_deregister();
+}
+testcase TC_ng_register_ping46() 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_register_ping46), pars);
+ vc_conn.done;
+}
+testcase TC_ng_register_ping46_256() runs on MTC_CT {
+ var ConnHdlr vc_conn[256];
+ var integer i;
+
+ f_init();
+ f_ngap_setup(0);
+
+ for (i := 0; i < sizeof(vc_conn); i := i + 1) {
+ var ConnHdlrPars pars := f_init_pars(ue_idx := i);
+ vc_conn[i] := f_start_handler_with_pars(refers(f_TC_register_ping46), pars);
+ }
+
+ for (i := 0; i < sizeof(vc_conn); i := i + 1) {
+ vc_conn[i].done;
+ }
+}
+
/* 3GPP TS 23.502 4.2.3.2 UE Triggered Service Request.
* UE signals the active session as active, and it has UL data for it */
private function f_TC_ue_service_request_cm_idle_ul_data() runs on ConnHdlr {
@@ -565,7 +604,7 @@
/* NOTE: In theory we should generate DL-originated traffic here, but since
* UPF let our UL traffic pass (bug?), make use of it to generate some DL
* traffic (ping reply) triggering the Paging: */
- var integer pid := f_ping4_async(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname, interval := 1, count := 1);
+ var integer pid := f_ping_async(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname, interval := 1, count := 1);
NGAP.receive(mw_ngap_initMsg(mw_n2_Paging(?, ?)));
log("Rx Paging")
@@ -666,7 +705,7 @@
f_register(exp_registration_accept := exp_registration_accept);
f_pdu_sess_establish(request_type := c_RequestType_initial_emergency_request);
f_sleep(1.0);
- f_ping4(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
+ f_ping(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
f_pdu_sess_release();
f_deregister();
}
@@ -733,7 +772,7 @@
exp_registration_accept := exp_registration_accept);
f_pdu_sess_establish(request_type := c_RequestType_initial_emergency_request);
f_sleep(1.0);
- f_ping4(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
+ f_ping(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
f_pdu_sess_release();
f_deregister();
}
@@ -752,7 +791,7 @@
f_register();
f_pdu_sess_establish();
f_sleep(1.0);
- f_ping4(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
+ f_ping(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
var NG_NAS_UE_State nus := f_ngap_obtain_nus(g_pars.ue_pars.ran_id);
@@ -775,7 +814,8 @@
g_pars.ue_pars.sess_pars.cn_gtpu_ip := ho_xn_pars.sess_pars.cn_gtpu_ip;
g_pars.ue_pars.sess_pars.cn_gtpu_teid := ho_xn_pars.sess_pars.cn_gtpu_teid;
g_pars.ue_pars.sess_pars.qos_rules := ho_xn_pars.sess_pars.qos_rules;
- g_pars.ue_pars.sess_pars.ue_ip := ho_xn_pars.sess_pars.ue_ip;
+ g_pars.ue_pars.sess_pars.ue_ip4 := ho_xn_pars.sess_pars.ue_ip4;
+ g_pars.ue_pars.sess_pars.ue_ip6 := ho_xn_pars.sess_pars.ue_ip6;
g_pars.kset_id := ho_xn_pars.kset_id;
f_n2_path_switch(ho_xn_pars.source_amf_id);
@@ -783,7 +823,7 @@
f_sleep(1.0);
f_pdu_sess_create_tun();
- f_ping4(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
+ f_ping(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
f_pdu_sess_release();
f_deregister();
@@ -815,7 +855,7 @@
f_register();
f_pdu_sess_establish();
f_sleep(1.0);
- f_ping4(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
+ f_ping(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
var NG_NAS_UE_State nus := f_ngap_obtain_nus(g_pars.ue_pars.ran_id);
@@ -850,7 +890,8 @@
g_pars.ue_pars.pti := ho_n2_pars.pti;
g_pars.ue_pars.sess_pars.id := ho_n2_pars.sess_pars.id;
g_pars.ue_pars.sess_pars.qos_rules := ho_n2_pars.sess_pars.qos_rules;
- g_pars.ue_pars.sess_pars.ue_ip := ho_n2_pars.sess_pars.ue_ip;
+ g_pars.ue_pars.sess_pars.ue_ip4 := ho_n2_pars.sess_pars.ue_ip4;
+ g_pars.ue_pars.sess_pars.ue_ip6 := ho_n2_pars.sess_pars.ue_ip6;
g_pars.kset_id := ho_n2_pars.kset_id;
@@ -867,7 +908,7 @@
f_sleep(1.0);
f_pdu_sess_create_tun();
- f_ping4(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
+ f_ping(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
f_pdu_sess_release();
f_deregister();
@@ -899,7 +940,7 @@
f_register();
f_pdu_sess_establish();
f_sleep(1.0);
- f_ping4(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
+ f_ping(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
/* 3GPP TS 23.502 4.9.1.3.2 step 1: */
f_n2_handover_required(m_targetID_targetRANNodeID(m_targetRANNodeID(g_pars.ngran_pars[1].global_ngran_id,
@@ -911,7 +952,7 @@
f_n2_handover_cancel();
/* Test UE can still use the network after HO cancel: */
- f_ping4(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
+ f_ping(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname);
f_pdu_sess_release();
f_deregister();
@@ -1012,6 +1053,9 @@
execute( TC_ng_register_ping6() );
execute( TC_ng_register_ping6_256() );
+ execute( TC_ng_register_ping46() );
+ execute( TC_ng_register_ping46_256() );
+
execute( TC_ue_service_request_cm_idle_ul_data() );
execute( TC_ue_service_request_cm_idle_inact_sess() );
execute( TC_ue_service_request_cm_idle_unknown_sess_active() );
@@ -1072,7 +1116,6 @@
* - 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)
*
* - Emergency call (PDU Sess Establish "Request Type"="Emergency Request")
- * - PDU Session Type IPv4v6
* - 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 cfd8c5a..a90bc64 100644
--- a/5gc/ConnHdlr.ttcn
+++ b/5gc/ConnHdlr.ttcn
@@ -73,7 +73,8 @@
charstring cn_gtpu_ip optional,
OCT4 cn_gtpu_teid optional,
QoS_RuleList qos_rules optional,
- charstring ue_ip optional,
+ charstring ue_ip4 optional,
+ charstring ue_ip6 optional,
octetstring ipv6_interface_id optional
};
@@ -539,8 +540,8 @@
log("5GC assigned IPv6 global prefix: ", ipv6slaac_ind.ipv6_prefix, " -> ", f_inet6_ntoa(ipv6slaac_ind.ipv6_prefix & '0000000000000000'O));
/* Use the first global IPv6 address in the IPv6 prefix picked by osmo-uecups: */
- g_pars.ue_pars.sess_pars.ue_ip := f_inet6_ntoa(ipv6slaac_ind.ipv6_user_addr);
- log("Using IPv6 global address: ", g_pars.ue_pars.sess_pars.ue_ip);
+ g_pars.ue_pars.sess_pars.ue_ip6 := f_inet6_ntoa(ipv6slaac_ind.ipv6_user_addr);
+ 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 */
@@ -574,8 +575,8 @@
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_ip := f_inet_ntoa(inner_nas.pdu_Session_Establishment_Accept.pduAddress.adressInfo);
- log("5GC assigned UE IPv4 address: ", g_pars.ue_pars.sess_pars.ue_ip);
+ g_pars.ue_pars.sess_pars.ue_ip4 := f_inet_ntoa(inner_nas.pdu_Session_Establishment_Accept.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);
}
@@ -585,13 +586,28 @@
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;
- g_pars.ue_pars.sess_pars.ue_ip := f_inet6_ntoa(ll_addr);
- log("5GC assigned IPv6 link-local Address: ", g_pars.ue_pars.sess_pars.ue_ip);
+ g_pars.ue_pars.sess_pars.ue_ip6 := f_inet6_ntoa(ll_addr);
+ log("5GC assigned IPv6 link-local Address: ", g_pars.ue_pars.sess_pars.ue_ip6);
if (configure_userplane) {
f_pdu_sess_create_tun(IPV6);
f_perform_ipv6_slaac();
}
}
+ 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);
+ 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;
+ log("5GC assigned IPv6 Interface Id: ", g_pars.ue_pars.sess_pars.ipv6_interface_id);
+ var octetstring ll_addr := 'FE80000000000000'O & g_pars.ue_pars.sess_pars.ipv6_interface_id;
+ g_pars.ue_pars.sess_pars.ue_ip6 := f_inet6_ntoa(ll_addr);
+ log("5GC assigned IPv6 link-local Address: ", g_pars.ue_pars.sess_pars.ue_ip6);
+ if (configure_userplane) {
+ f_pdu_sess_create_tun(IPV4V6);
+ f_perform_ipv6_slaac();
+ }
+ }
case (?) {
setverdict(fail, "PDU Session Type not implemented");
}
@@ -1291,7 +1307,8 @@
}
g_pars.ue_pars.sess_pars.qos_rules := omit;
- g_pars.ue_pars.sess_pars.ue_ip := omit;
+ g_pars.ue_pars.sess_pars.ue_ip4 := omit;
+ g_pars.ue_pars.sess_pars.ue_ip6 := omit;
nas_ul_msg := cs_NG_PDU_SESSION_RELEASE_COMPLETE(cs_NG_PDU_SessionIdV(pdu_sess_id), pti,
p_Cause := cs_GMM_GSM_Cause('59'O, cause_val));
@@ -1310,7 +1327,7 @@
var template (value) UECUPS_GtpExtHdr gtp_ext_hdr;
var template (value) UECUPS_CreateTun uecups_create;
var template (value) UECUPS_GtpExtHdr_PduSessContainer pdu_sess_cont;
- var template (value) OCT4_16n user_addr;
+ var template (value) OCT4_20n user_addr;
/* First of all, register the local TEID in the GTPv1U_Emulation: */
f_gtp1u_register_teid(g_pars.ue_pars.sess_pars.ran_gtpu_teid);
@@ -1321,10 +1338,14 @@
select (valueof(user_addr_type)) {
case (IPV4) {
- user_addr := f_inet_addr(g_pars.ue_pars.sess_pars.ue_ip);
+ user_addr := f_inet_addr(g_pars.ue_pars.sess_pars.ue_ip4);
}
case (IPV6) {
- user_addr := f_inet6_addr(g_pars.ue_pars.sess_pars.ue_ip);
+ user_addr := f_inet6_addr(g_pars.ue_pars.sess_pars.ue_ip6);
+ }
+ case (IPV4V6) {
+ user_addr := f_inet_addr(g_pars.ue_pars.sess_pars.ue_ip4) &
+ f_inet6_addr(g_pars.ue_pars.sess_pars.ue_ip6);
}
}
@@ -1373,21 +1394,37 @@
}
/* execute ping command and wait for result */
-function f_ping4(charstring host, integer interval := 1, integer count := 10) runs on ConnHdlr
+function f_ping(charstring host, integer interval := 1, integer count := 10) runs on ConnHdlr
{
/* command will be filled in by f_gtp1u_ping4() below: */
var UECUPS_StartProgram sprog := f_run_prog_init("");
- f_gtp1u_ping4(sprog, host, interval, count, g_pars.ue_pars.sess_pars.ue_ip,
+ var charstring bind_addr;
+
+ if (f_addr_is_ipv6(host)) {
+ bind_addr := g_pars.ue_pars.sess_pars.ue_ip6;
+ } else {
+ bind_addr := g_pars.ue_pars.sess_pars.ue_ip4;
+ }
+
+ f_gtp1u_ping4(sprog, host, interval, count, bind_addr,
redirect_output := true,
redirect_output_path_prefix := f_run_prog_unique_log_path());
}
-function f_ping4_async(charstring host, integer interval := 1, integer count := 10) runs on ConnHdlr return integer
+function f_ping_async(charstring host, integer interval := 1, integer count := 10) runs on ConnHdlr return integer
{
/* command will be filled in by f_gtp1u_ping4() below: */
var UECUPS_StartProgram sprog := f_run_prog_init("");
+ var charstring bind_addr;
+
+ if (f_addr_is_ipv6(host)) {
+ bind_addr := g_pars.ue_pars.sess_pars.ue_ip6;
+ } else {
+ bind_addr := g_pars.ue_pars.sess_pars.ue_ip4;
+ }
+
var integer pid := f_gtp1u_ping4_async(sprog, host,
- interval, count, g_pars.ue_pars.sess_pars.ue_ip,
+ interval, count, bind_addr,
redirect_output := true,
redirect_output_path_prefix := f_run_prog_unique_log_path());
return pid;
diff --git a/5gc/expected-results.xml b/5gc/expected-results.xml
index 9827df5..8581cf0 100644
--- a/5gc/expected-results.xml
+++ b/5gc/expected-results.xml
@@ -12,6 +12,8 @@
<testcase classname='C5G_Tests' name='TC_ng_register_ping4_256' time='MASKED'/>
<testcase classname='C5G_Tests' name='TC_ng_register_ping6' time='MASKED'/>
<testcase classname='C5G_Tests' name='TC_ng_register_ping6_256' time='MASKED'/>
+ <testcase classname='C5G_Tests' name='TC_ng_register_ping46' time='MASKED'/>
+ <testcase classname='C5G_Tests' name='TC_ng_register_ping46_256' time='MASKED'/>
<testcase classname='C5G_Tests' name='TC_ue_service_request_cm_idle_ul_data' time='MASKED'/>
<testcase classname='C5G_Tests' name='TC_ue_service_request_cm_idle_inact_sess' time='MASKED'/>
<testcase classname='C5G_Tests' name='TC_ue_service_request_cm_idle_unknown_sess_active' time='MASKED'/>
diff --git a/deps/Makefile b/deps/Makefile
index d7aeed1..61dfe48 100644
--- a/deps/Makefile
+++ b/deps/Makefile
@@ -124,7 +124,7 @@
titan.TestPorts.UDPasp_commit= 54176e95850654e5e8b0ffa2f1b5f35c412b949c
titan.TestPorts.UNIX_DOMAIN_SOCKETasp_commit= R.2.A-13-gd34ab71
titan.TestPorts.USB_commit= a9470fdc99c82fbf988f4508c3161118c9106e28
-osmo-uecups_commit= ca90fa48b8d44e241f55b1d15c9b7c8631ac4e69
+osmo-uecups_commit= ee9b225a66c2f84bcdcaf2fc27ee73d6aeb33b8e
all: $(foreach dir,$(ALL_REPOS),$(dir)/update)
clean: $(foreach dir,$(ALL_REPOS),$(dir)/clean)
To view, visit change 42473. To unsubscribe, or for help writing mail filters, visit settings.