pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42460?usp=email )


Change subject: 5gc: Introduce tests TC_ng_register_ping6(_256)
......................................................................

5gc: Introduce tests TC_ng_register_ping6(_256)

Change-Id: Iedf3697265b91bdda85e8d32402345ea8d58dc9f
---
M 5gc/C5G_Tests.ttcn
M 5gc/ConnHdlr.ttcn
M 5gc/expected-results.xml
M 5gc/open5gs/open5gs-upf.yaml
M 5gc/testenv.sh
5 files changed, 109 insertions(+), 12 deletions(-)



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

diff --git a/5gc/C5G_Tests.ttcn b/5gc/C5G_Tests.ttcn
index e90369f..c58d411 100644
--- a/5gc/C5G_Tests.ttcn
+++ b/5gc/C5G_Tests.ttcn
@@ -65,6 +65,7 @@
        charstring mp_apn := "internet";
        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_run_prog_log_path := "/tmp";
        charstring mp_run_prog_as_user := "osmocom";
@@ -90,7 +91,8 @@
        cn_gtpu_ip := omit,
        cn_gtpu_teid := omit,
        qos_rules := omit,
-       ue_ip := omit
+       ue_ip := omit,
+       ipv6_interface_id := omit
 };

 template (value) UeParams ts_UeParams(integer idx) :=
@@ -427,6 +429,42 @@
        }
 }

+private function f_TC_register_ping6() runs on ConnHdlr {
+       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_pdu_sess_release();
+       f_deregister();
+}
+testcase TC_ng_register_ping6() runs on MTC_CT {
+       f_init();
+       f_ngap_setup(0);
+
+       var ConnHdlrPars pars := f_init_pars(ue_idx := 0);
+       pars.ue_pars.sess_pars.run_prog_pars.ping_hostname := mp_ping_hostname6;
+       var ConnHdlr vc_conn;
+       vc_conn := f_start_handler_with_pars(refers(f_TC_register_ping6), pars);
+       vc_conn.done;
+}
+testcase TC_ng_register_ping6_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);
+               pars.ue_pars.sess_pars.run_prog_pars.ping_hostname := 
mp_ping_hostname6;
+               vc_conn[i] := 
f_start_handler_with_pars(refers(f_TC_register_ping6), 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 {
@@ -971,6 +1009,9 @@
        execute( TC_ng_register_ping4() );
        execute( TC_ng_register_ping4_256() );

+       execute( TC_ng_register_ping6() );
+       execute( TC_ng_register_ping6_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() );
diff --git a/5gc/ConnHdlr.ttcn b/5gc/ConnHdlr.ttcn
index 8937465..cf56caa 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_ip optional,
+       octetstring ipv6_interface_id optional
 };

 /* parameters of emulated UE */
@@ -525,6 +526,23 @@
        }
 }

+private function f_perform_ipv6_slaac() runs on ConnHdlr
+{
+       var UECUPS_IPv6SLAACInd ipv6slaac_ind;
+       var template (value) UECUPS_IPv6SLAAC ipv6slaac;
+       ipv6slaac := ts_UECUPS_IPv6SLAAC(
+               local_gtp_ep := 
valueof(ts_UECUPS_SockAddr(f_inet_addr(g_pars.ue_pars.sess_pars.ran_gtpu_ip))),
+               rx_teid := oct2int(g_pars.ue_pars.sess_pars.ran_gtpu_teid)
+       );
+       f_gtp1u_ipv6_slaac(ipv6slaac);
+       GTP1U[0].receive(UECUPS_IPv6SLAACInd:?) -> value ipv6slaac_ind;
+       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);
+}
+
 /* 3GPP TS 23.502 4.3.2.2 UE Requested PDU Session Establishment */
 function f_pdu_sess_establish(BIT3 request_type := 
c_RequestType_initial_request,
                              BIT3 pdu_sess_type := c_PDU_SessionType_IPv4,
@@ -553,12 +571,30 @@
        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;
-       g_pars.ue_pars.sess_pars.ue_ip := 
f_inet_ntoa(inner_nas.pdu_Session_Establishment_Accept.pduAddress.adressInfo);
        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);
-       log("5GC assigned UE IP address: ", g_pars.ue_pars.sess_pars.ue_ip);
-
-       if (configure_userplane) {
-               f_pdu_sess_create_tun();
+       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);
+               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
+               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);
+               if (configure_userplane) {
+                       f_pdu_sess_create_tun(IPV6);
+                       f_perform_ipv6_slaac();
+               }
+       }
+       case (?) {
+               setverdict(fail, "PDU Session Type not implemented");
+       }
        }
 }

@@ -1270,20 +1306,34 @@
        }
 }

-function f_pdu_sess_create_tun() runs on ConnHdlr {
+function f_pdu_sess_create_tun(template (value) UECUPS_AddrType user_addr_type 
:= IPV4) runs on ConnHdlr {
        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;
+
+       /* First of all, register the local TEID in the GTPv1U_Emulation: */
+       f_gtp1u_register_teid(g_pars.ue_pars.sess_pars.ran_gtpu_teid);

        pdu_sess_cont := 
ts_UECUPS_GtpExtHdr_PduSessContainer(UECUPS_GtpExtHdr_PduSessContainer_Type_ul_pdu_sess_info,
                                                              
oct2int(g_pars.ue_pars.sess_pars.qos_rules[0].identifier));
        gtp_ext_hdr := ts_UECUPS_GtpExtHdr(pdu_session_container := 
pdu_sess_cont);

+       select (valueof(user_addr_type)) {
+       case (IPV4) {
+               user_addr := f_inet_addr(g_pars.ue_pars.sess_pars.ue_ip);
+               }
+       case (IPV6) {
+               //user_addr := g_pars.ue_pars.sess_pars.ipv6_interface_id;
+               user_addr := f_inet6_addr(g_pars.ue_pars.sess_pars.ue_ip);
+               }
+       }
+
        uecups_create := ts_UECUPS_CreateTun(
                tx_teid := oct2int(g_pars.ue_pars.sess_pars.cn_gtpu_teid),
                rx_teid := oct2int(g_pars.ue_pars.sess_pars.ran_gtpu_teid),
-               user_addr_type := IPV4,
-               user_addr := f_inet_addr(g_pars.ue_pars.sess_pars.ue_ip),
+               user_addr_type := user_addr_type,
+               user_addr := user_addr,
                local_gtp_ep := 
valueof(ts_UECUPS_SockAddr(f_inet_addr(g_pars.ue_pars.sess_pars.ran_gtpu_ip))),
                remote_gtp_ep := 
valueof(ts_UECUPS_SockAddr(f_inet_addr(g_pars.ue_pars.sess_pars.cn_gtpu_ip))),
                tun_dev_name := 
g_pars.ue_pars.sess_pars.run_prog_pars.tun_dev_name,
diff --git a/5gc/expected-results.xml b/5gc/expected-results.xml
index bc47001..9827df5 100644
--- a/5gc/expected-results.xml
+++ b/5gc/expected-results.xml
@@ -10,6 +10,8 @@
   <testcase classname='C5G_Tests' name='TC_pdu_sess_modification' 
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'/>
+  <testcase classname='C5G_Tests' name='TC_ng_register_ping6_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/5gc/open5gs/open5gs-upf.yaml b/5gc/open5gs/open5gs-upf.yaml
index c6c86d4..29c88a6 100644
--- a/5gc/open5gs/open5gs-upf.yaml
+++ b/5gc/open5gs/open5gs-upf.yaml
@@ -22,8 +22,8 @@
       gateway: 10.45.0.1
       dnn: internet
       dev: ogstun46
-    - subnet: cafe::/64
-      gateway: cafe::1
+    - subnet: 2001:db8:cafe::/48
+      gateway: 2001:db8:cafe::1
       dnn: internet
       dev: ogstun46
   metrics:
diff --git a/5gc/testenv.sh b/5gc/testenv.sh
index 25e1b71..b12a2c3 100755
--- a/5gc/testenv.sh
+++ b/5gc/testenv.sh
@@ -38,6 +38,10 @@
        sudo ip link set ogstun4 up
        sudo ip link set ogstun6 up
        sudo ip link set ogstun46 up
+
+       # The IPv4 route is added automatically when setting the interface addr 
above:
+       sudo ip route add "10.45.0.0/16" dev "ogstun46" || true
+       sudo ip -6 route add "2001:db8:cafe::/48" dev "ogstun46" || true
 }

 del_tun() {

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42460?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: Iedf3697265b91bdda85e8d32402345ea8d58dc9f
Gerrit-Change-Number: 42460
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>

Reply via email to