<p>lynxis lazus has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20003">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">PCU: add IPv6 support for SNS<br><br>With PCUIF 10 the remote can be IPv4 or IPv6.<br>Add all missing parts including SNS IPv6 elements,<br>the support to omit IPv4 elements and a PCU_Tests_SNSv6.cfg<br>configuration to run all tests with IPv6<br><br>Change-Id: I43d64caca600fff78f3fbbb3e8179f447f235d46<br>---<br>M library/NS_Emulation.ttcn<br>M library/Osmocom_Gb_Types.ttcn<br>M pcu/PCU_Tests_SNS.ttcn<br>A pcu/PCU_Tests_SNSv6.cfg<br>4 files changed, 183 insertions(+), 40 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/03/20003/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/NS_Emulation.ttcn b/library/NS_Emulation.ttcn</span><br><span>index 6f9bc39..ebacac1 100644</span><br><span>--- a/library/NS_Emulation.ttcn</span><br><span>+++ b/library/NS_Emulation.ttcn</span><br><span>@@ -232,7 +232,7 @@</span><br><span>                        setverdict(fail, "SNS-SIZE from unexpected NSEI");</span><br><span>                         self.stop;</span><br><span>           }</span><br><span style="color: hsl(0, 100%, 40%);">-               [] NSCP.receive(t_NS_RecvFrom(tr_SNS_CONFIG(config.nsei, true,</span><br><span style="color: hsl(120, 100%, 40%);">+                [config.remote_proto == PCUIF_ADDR_TYPE_IPV4] NSCP.receive(t_NS_RecvFrom(tr_SNS_CONFIG(config.nsei, true,</span><br><span>                                {tr_SNS_IPv4(config.remote_ip, config.remote_udp_port)}))) -> value rf {</span><br><span>                      /* blindly acknowledge whatever the PCU sends */</span><br><span>                     NSCP.send(t_NS_Send(g_conn_id, ts_SNS_CONFIG_ACK(config.nsei, omit)));</span><br><span>@@ -249,6 +249,23 @@</span><br><span>                                }</span><br><span>                    }</span><br><span>            }</span><br><span style="color: hsl(120, 100%, 40%);">+             [config.remote_proto == PCUIF_ADDR_TYPE_IPV6] NSCP.receive(t_NS_RecvFrom(tr_SNS_CONFIG(config.nsei, true, omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   {tr_SNS_IPv6(config.remote_ip, config.remote_udp_port)}))) -> value rf {</span><br><span style="color: hsl(120, 100%, 40%);">+                       /* blindly acknowledge whatever the PCU sends */</span><br><span style="color: hsl(120, 100%, 40%);">+                      NSCP.send(t_NS_Send(g_conn_id, ts_SNS_CONFIG_ACK(config.nsei, omit)));</span><br><span style="color: hsl(120, 100%, 40%);">+                        /* send a SNS-CONFIG in response and expect a SNS-CONFIG-ACK */</span><br><span style="color: hsl(120, 100%, 40%);">+                       var IP6_Elements v6 := { valueof(ts_SNS_IPv6(config.local_ip, config.local_udp_port)) };</span><br><span style="color: hsl(120, 100%, 40%);">+                      NSCP.send(t_NS_Send(g_conn_id, ts_SNS_CONFIG(config.nsei, true, omit, v6)));</span><br><span style="color: hsl(120, 100%, 40%);">+                  alt {</span><br><span style="color: hsl(120, 100%, 40%);">+                 [] NSCP.receive(t_NS_RecvFrom(tr_SNS_CONFIG_ACK(config.nsei, omit))) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                /* success */</span><br><span style="color: hsl(120, 100%, 40%);">+                         }</span><br><span style="color: hsl(120, 100%, 40%);">+                     [] NSCP.receive(t_NS_RecvFrom(tr_SNS_CONFIG_ACK(config.nsei, ?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+                           setverdict(fail, "Unexpected SNS-CONFIG-NACK");</span><br><span style="color: hsl(120, 100%, 40%);">+                             self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                            }</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>            [] NSCP.receive(t_NS_RecvFrom(tr_SNS_CONFIG(config.nsei, false, ?))) { /* ignore */}</span><br><span>                 [] NSCP.receive(t_NS_RecvFrom(tr_SNS_CONFIG(config.nsei, true, ?))) {</span><br><span>                        setverdict(fail, "Unexpected SNS-CONFIG content");</span><br><span>diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn</span><br><span>index 3aeba8f..a2b9499 100644</span><br><span>--- a/library/Osmocom_Gb_Types.ttcn</span><br><span>+++ b/library/Osmocom_Gb_Types.ttcn</span><br><span>@@ -230,6 +230,40 @@</span><br><span>                 return e;</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) IP6_Element ts_SNS_IPv6(charstring ip, integer udp_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                                              uint8_t sig_weight := 1, uint8_t data_weight := 1) := {</span><br><span style="color: hsl(120, 100%, 40%);">+              ipAddress := f_inet6_addr(ip),</span><br><span style="color: hsl(120, 100%, 40%);">+                uDP_Port := int2oct(udp_port, 2),</span><br><span style="color: hsl(120, 100%, 40%);">+             signallingWeight := int2oct(sig_weight, 1),</span><br><span style="color: hsl(120, 100%, 40%);">+           dataWeight := int2oct(data_weight, 1)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     function tr_SNS_IPv6(template charstring ip, template integer udp_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                               template uint8_t sig_weight := ?, template uint8_t data_weight := ?)</span><br><span style="color: hsl(120, 100%, 40%);">+  return template IP6_Element {</span><br><span style="color: hsl(120, 100%, 40%);">+         var template IP6_Element e;</span><br><span style="color: hsl(120, 100%, 40%);">+           if (istemplatekind(ip, "?")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      e.ipAddress := ?;</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      e.ipAddress := f_inet6_addr(valueof(ip));</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (istemplatekind(udp_port, "?")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        e.uDP_Port := ?;</span><br><span style="color: hsl(120, 100%, 40%);">+              } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      e.uDP_Port := int2oct(valueof(udp_port), 2);</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (istemplatekind(sig_weight, "?")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      e.signallingWeight := ?;</span><br><span style="color: hsl(120, 100%, 40%);">+              } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      e.signallingWeight := int2oct(valueof(sig_weight), 1);</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (istemplatekind(data_weight, "?")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     e.dataWeight := ?;</span><br><span style="color: hsl(120, 100%, 40%);">+            } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      e.dataWeight := int2oct(valueof(data_weight), 1);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+             return e;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span>      template (value) PDU_NS ts_NS_RESET(NsCause cause, Nsvci nsvci, Nsei nsei) := {</span><br><span>              pDU_NS_Reset := {</span><br><span>@@ -526,7 +560,7 @@</span><br><span>      }</span><br><span> </span><br><span>        template (value) PDU_NS ts_SNS_CONFIG(Nsei nsei, boolean end_flag,</span><br><span style="color: hsl(0, 100%, 40%);">-                                      template (omit) IP4_Elements v4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      template (omit) IP4_Elements v4 := omit,</span><br><span>                                     template (omit) IP6_Elements v6 := omit) := {</span><br><span>                pDU_SNS_Config := {</span><br><span>                  nsPduType := '0F'O,</span><br><span>@@ -537,7 +571,7 @@</span><br><span>            }</span><br><span>    }</span><br><span>    template PDU_NS tr_SNS_CONFIG(template Nsei nsei, template boolean end_flag,</span><br><span style="color: hsl(0, 100%, 40%);">-                                    template IP4_Elements v4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     template IP4_Elements v4 := omit,</span><br><span>                                    template IP6_Elements v6 := omit) := {</span><br><span>               pDU_SNS_Config := {</span><br><span>                  nsPduType := '0F'O,</span><br><span>diff --git a/pcu/PCU_Tests_SNS.ttcn b/pcu/PCU_Tests_SNS.ttcn</span><br><span>index fc98979..957b56b 100644</span><br><span>--- a/pcu/PCU_Tests_SNS.ttcn</span><br><span>+++ b/pcu/PCU_Tests_SNS.ttcn</span><br><span>@@ -26,9 +26,16 @@</span><br><span> runs on RAW_NS_CT {</span><br><span>         log("f_incoming_sns_size(idx=", idx, ")");</span><br><span>       var PDU_NS rx;</span><br><span style="color: hsl(0, 100%, 40%);">-  /* expect one single SNS-SIZE with RESET flag; one remote v4 EP; no v6 EP */</span><br><span style="color: hsl(0, 100%, 40%);">-    rx := f_ns_exp(tr_SNS_SIZE(g_nsconfig[idx].nsei, rst_flag := true, max_nsvcs := 8,</span><br><span style="color: hsl(0, 100%, 40%);">-                                 num_v4 := 4, num_v6 := omit), idx);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mp_nsconfig.remote_proto == PCUIF_ADDR_TYPE_IPV4) {</span><br><span style="color: hsl(120, 100%, 40%);">+               /* expect one single SNS-SIZE with RESET flag; one remote v4 EP; no v6 EP */</span><br><span style="color: hsl(120, 100%, 40%);">+          rx := f_ns_exp(tr_SNS_SIZE(g_nsconfig[idx].nsei, rst_flag := true, max_nsvcs := 8,</span><br><span style="color: hsl(120, 100%, 40%);">+                                       num_v4 := 4, num_v6 := omit), idx);</span><br><span style="color: hsl(120, 100%, 40%);">+        } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* expect one single SNS-SIZE with RESET flag; no v4 EP; one remote v6 EP */</span><br><span style="color: hsl(120, 100%, 40%);">+          rx := f_ns_exp(tr_SNS_SIZE(g_nsconfig[idx].nsei, rst_flag := true, max_nsvcs := 8,</span><br><span style="color: hsl(120, 100%, 40%);">+                                       num_v4 := omit, num_v6 := 4), idx);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span>    NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_SIZE_ACK(g_nsconfig[idx].nsei, cause)));</span><br><span> }</span><br><span> </span><br><span>@@ -37,9 +44,15 @@</span><br><span> runs on RAW_NS_CT {</span><br><span>     log("f_outgoing_sns_size(idx=", idx, ")");</span><br><span>       var PDU_NS rx;</span><br><span style="color: hsl(0, 100%, 40%);">-  NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_SIZE(g_nsconfig[idx].nsei, rst_flag := true, max_nsvcs := 1,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                 num_v4 := 1, num_v6 := omit)</span><br><span style="color: hsl(0, 100%, 40%);">-                            ));</span><br><span style="color: hsl(120, 100%, 40%);">+   if (mp_nsconfig.remote_proto == PCUIF_ADDR_TYPE_IPV4) {</span><br><span style="color: hsl(120, 100%, 40%);">+               NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_SIZE(g_nsconfig[idx].nsei, rst_flag := true, max_nsvcs := 1,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                               num_v4 := 1, num_v6 := omit)</span><br><span style="color: hsl(120, 100%, 40%);">+                                  ));</span><br><span style="color: hsl(120, 100%, 40%);">+   } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_SIZE(g_nsconfig[idx].nsei, rst_flag := true, max_nsvcs := 1,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                               num_v4 := omit, num_v6 := 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                                  ));</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span>    /* expect one single SNS-SIZE with RESET flag; one remote v4 EP; no v6 EP */</span><br><span>         rx := f_ns_exp(tr_SNS_SIZE_ACK(g_nsconfig[idx].nsei, cause), idx);</span><br><span> }</span><br><span>@@ -49,9 +62,16 @@</span><br><span> runs on RAW_NS_CT {</span><br><span>  log("f_incoming_sns_config(idx=", idx, ")");</span><br><span>     var PDU_NS rx;</span><br><span style="color: hsl(0, 100%, 40%);">-  var template IP4_Elements v4_elem := { tr_SNS_IPv4(mp_nsconfig.remote_ip,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                          mp_nsconfig.remote_udp_port) };</span><br><span style="color: hsl(0, 100%, 40%);">-      rx := f_ns_exp(tr_SNS_CONFIG(g_nsconfig[idx].nsei, end_flag := true, v4 := v4_elem), idx);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (mp_nsconfig.remote_proto == PCUIF_ADDR_TYPE_IPV4) {</span><br><span style="color: hsl(120, 100%, 40%);">+               var template IP4_Elements v4_elem := { tr_SNS_IPv4(mp_nsconfig.remote_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                mp_nsconfig.remote_udp_port) };</span><br><span style="color: hsl(120, 100%, 40%);">+            rx := f_ns_exp(tr_SNS_CONFIG(g_nsconfig[idx].nsei, end_flag := true, v4 := v4_elem), idx);</span><br><span style="color: hsl(120, 100%, 40%);">+    } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              var template IP6_Elements v6_elem := { tr_SNS_IPv6(mp_nsconfig.remote_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                mp_nsconfig.remote_udp_port) };</span><br><span style="color: hsl(120, 100%, 40%);">+            rx := f_ns_exp(tr_SNS_CONFIG(g_nsconfig[idx].nsei, end_flag := true, v6 := v6_elem), idx);</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG_ACK(g_nsconfig[idx].nsei, cause)));</span><br><span> }</span><br><span> </span><br><span>@@ -60,9 +80,15 @@</span><br><span> runs on RAW_NS_CT {</span><br><span>   log("f_outgoing_sns_config(idx=", idx, ")");</span><br><span>     var PDU_NS rx;</span><br><span style="color: hsl(0, 100%, 40%);">-  var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx].local_ip,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                       g_nsconfig[idx].local_udp_port) }</span><br><span style="color: hsl(0, 100%, 40%);">-  NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, v4)));</span><br><span style="color: hsl(120, 100%, 40%);">+  if (mp_nsconfig.remote_proto == PCUIF_ADDR_TYPE_IPV4) {</span><br><span style="color: hsl(120, 100%, 40%);">+               var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx].local_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                     g_nsconfig[idx].local_udp_port) }</span><br><span style="color: hsl(120, 100%, 40%);">+                NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, v4)));</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              var template (omit) IP6_Elements v6 := { ts_SNS_IPv6(g_nsconfig[idx].local_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                     g_nsconfig[idx].local_udp_port) }</span><br><span style="color: hsl(120, 100%, 40%);">+                NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, omit, v6)));</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span>    rx := f_ns_exp(tr_SNS_CONFIG_ACK(g_nsconfig[idx].nsei, cause), idx);</span><br><span> }</span><br><span> </span><br><span>@@ -71,11 +97,19 @@</span><br><span> runs on RAW_NS_CT {</span><br><span>   log("f_outgoing_sns_config_1c1u(idx=", idx, ")");</span><br><span>        var PDU_NS rx;</span><br><span style="color: hsl(0, 100%, 40%);">-  var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[0].local_ip,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                         g_nsconfig[0].local_udp_port, 1, 0),</span><br><span style="color: hsl(0, 100%, 40%);">-                                                ts_SNS_IPv4(g_nsconfig[1].local_ip,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                         g_nsconfig[1].local_udp_port, 0, 1) };</span><br><span style="color: hsl(0, 100%, 40%);">-     NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, v4)));</span><br><span style="color: hsl(120, 100%, 40%);">+  if (mp_nsconfig.remote_proto == PCUIF_ADDR_TYPE_IPV4) {</span><br><span style="color: hsl(120, 100%, 40%);">+               var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[0].local_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                               g_nsconfig[0].local_udp_port, 1, 0),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                      ts_SNS_IPv4(g_nsconfig[1].local_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                               g_nsconfig[1].local_udp_port, 0, 1) };</span><br><span style="color: hsl(120, 100%, 40%);">+           NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, v4)));</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              var template (omit) IP6_Elements v6 := { ts_SNS_IPv6(g_nsconfig[0].local_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                               g_nsconfig[0].local_udp_port, 1, 0),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                      ts_SNS_IPv6(g_nsconfig[1].local_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                               g_nsconfig[1].local_udp_port, 0, 1) };</span><br><span style="color: hsl(120, 100%, 40%);">+           NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, omit, v6)));</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span>    rx := f_ns_exp(tr_SNS_CONFIG_ACK(g_nsconfig[idx].nsei, cause), idx);</span><br><span> }</span><br><span> </span><br><span>@@ -84,11 +118,19 @@</span><br><span> runs on RAW_NS_CT {</span><br><span>  log("f_outgoing_sns_config_1c1u_separate(idx=", idx, ")");</span><br><span>       var PDU_NS rx;</span><br><span style="color: hsl(0, 100%, 40%);">-  var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[1].local_ip,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                         g_nsconfig[1].local_udp_port, 1, 0),</span><br><span style="color: hsl(0, 100%, 40%);">-                                                ts_SNS_IPv4(g_nsconfig[2].local_ip,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                         g_nsconfig[2].local_udp_port, 0, 1) };</span><br><span style="color: hsl(0, 100%, 40%);">-     NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, v4)));</span><br><span style="color: hsl(120, 100%, 40%);">+  if (mp_nsconfig.remote_proto == PCUIF_ADDR_TYPE_IPV4) {</span><br><span style="color: hsl(120, 100%, 40%);">+               var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[1].local_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                               g_nsconfig[1].local_udp_port, 1, 0),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                      ts_SNS_IPv4(g_nsconfig[2].local_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                               g_nsconfig[2].local_udp_port, 0, 1) };</span><br><span style="color: hsl(120, 100%, 40%);">+           NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, v4)));</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              var template (omit) IP6_Elements v6 := { ts_SNS_IPv6(g_nsconfig[1].local_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                               g_nsconfig[1].local_udp_port, 1, 0),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                      ts_SNS_IPv6(g_nsconfig[2].local_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                               g_nsconfig[2].local_udp_port, 0, 1) };</span><br><span style="color: hsl(120, 100%, 40%);">+           NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, omit, v6)));</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span>    rx := f_ns_exp(tr_SNS_CONFIG_ACK(g_nsconfig[idx].nsei, cause), idx);</span><br><span> }</span><br><span> </span><br><span>@@ -96,33 +138,57 @@</span><br><span> runs on RAW_NS_CT {</span><br><span>  log("f_outgoing_sns_add(idx_add=", idx_add, ")");</span><br><span>        var PDU_NS rx;</span><br><span style="color: hsl(0, 100%, 40%);">-  var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx_add].local_ip,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                           g_nsconfig[idx_add].local_udp_port,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                             w_sig, w_user) };</span><br><span style="color: hsl(0, 100%, 40%);">-  NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_ADD(g_nsconfig[idx].nsei, 23, v4)));</span><br><span style="color: hsl(0, 100%, 40%);">- rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 23, omit, v4));</span><br><span style="color: hsl(120, 100%, 40%);">+       if (mp_nsconfig.remote_proto == PCUIF_ADDR_TYPE_IPV4) {</span><br><span style="color: hsl(120, 100%, 40%);">+               var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx_add].local_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                 g_nsconfig[idx_add].local_udp_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                   w_sig, w_user) };</span><br><span style="color: hsl(120, 100%, 40%);">+                NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_ADD(g_nsconfig[idx].nsei, 23, v4)));</span><br><span style="color: hsl(120, 100%, 40%);">+               rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 23, omit, v4));</span><br><span style="color: hsl(120, 100%, 40%);">+       } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              var template (omit) IP6_Elements v6 := { ts_SNS_IPv6(g_nsconfig[idx_add].local_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                 g_nsconfig[idx_add].local_udp_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                   w_sig, w_user) };</span><br><span style="color: hsl(120, 100%, 40%);">+                NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_ADD(g_nsconfig[idx].nsei, 23, omit, v6)));</span><br><span style="color: hsl(120, 100%, 40%);">+         rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 23, omit, omit, v6));</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> }</span><br><span> </span><br><span> function f_outgoing_sns_del(integer idx_del, uint8_t w_sig := 1, uint8_t w_user := 1, integer idx := 0)</span><br><span> runs on RAW_NS_CT {</span><br><span>         log("f_outgoing_sns_del(idx_del=", idx_del, ")");</span><br><span>        var PDU_NS rx;</span><br><span style="color: hsl(0, 100%, 40%);">-  var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx_del].local_ip,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                           g_nsconfig[idx_del].local_udp_port,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                             w_sig, w_user) };</span><br><span style="color: hsl(0, 100%, 40%);">-  NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_DEL(g_nsconfig[idx].nsei, 24, omit, v4)));</span><br><span style="color: hsl(0, 100%, 40%);">-   rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 24, omit, v4));</span><br><span style="color: hsl(120, 100%, 40%);">+       if (mp_nsconfig.remote_proto == PCUIF_ADDR_TYPE_IPV4) {</span><br><span style="color: hsl(120, 100%, 40%);">+               var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx_del].local_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                 g_nsconfig[idx_del].local_udp_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                   w_sig, w_user) };</span><br><span style="color: hsl(120, 100%, 40%);">+                NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_DEL(g_nsconfig[idx].nsei, 24, omit, v4)));</span><br><span style="color: hsl(120, 100%, 40%);">+         rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 24, omit, v4));</span><br><span style="color: hsl(120, 100%, 40%);">+       } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              var template (omit) IP6_Elements v6 := { ts_SNS_IPv6(g_nsconfig[idx_del].local_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                 g_nsconfig[idx_del].local_udp_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                   w_sig, w_user) };</span><br><span style="color: hsl(120, 100%, 40%);">+                NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_DEL(g_nsconfig[idx].nsei, 24, omit, omit, v6)));</span><br><span style="color: hsl(120, 100%, 40%);">+           rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 24, omit, omit, v6));</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> }</span><br><span> </span><br><span> function f_outgoing_sns_chg_weight(integer idx_chg, uint8_t w_sig, uint8_t w_user, integer idx := 0)</span><br><span> runs on RAW_NS_CT {</span><br><span>    log("f_outgoing_sns_chg_weight(idx_chg=", idx_chg, ")");</span><br><span>         var PDU_NS rx;</span><br><span style="color: hsl(0, 100%, 40%);">-  var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx_chg].local_ip,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                           g_nsconfig[idx_chg].local_udp_port,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                             w_sig, w_user) };</span><br><span style="color: hsl(0, 100%, 40%);">-  NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CHG_WEIGHT(g_nsconfig[idx].nsei, 25, v4)));</span><br><span style="color: hsl(0, 100%, 40%);">-  rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 25, omit, v4));</span><br><span style="color: hsl(120, 100%, 40%);">+       if (mp_nsconfig.remote_proto == PCUIF_ADDR_TYPE_IPV4) {</span><br><span style="color: hsl(120, 100%, 40%);">+               var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx_chg].local_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                 g_nsconfig[idx_chg].local_udp_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                   w_sig, w_user) };</span><br><span style="color: hsl(120, 100%, 40%);">+                NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CHG_WEIGHT(g_nsconfig[idx].nsei, 25, v4)));</span><br><span style="color: hsl(120, 100%, 40%);">+                rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 25, omit, v4));</span><br><span style="color: hsl(120, 100%, 40%);">+       } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              var template (omit) IP6_Elements v6 := { ts_SNS_IPv6(g_nsconfig[idx_chg].local_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                 g_nsconfig[idx_chg].local_udp_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                   w_sig, w_user) };</span><br><span style="color: hsl(120, 100%, 40%);">+                NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CHG_WEIGHT(g_nsconfig[idx].nsei, 25, omit, v6)));</span><br><span style="color: hsl(120, 100%, 40%);">+          rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 25, omit, omit, v6));</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> }</span><br><span> </span><br><span> </span><br><span>diff --git a/pcu/PCU_Tests_SNSv6.cfg b/pcu/PCU_Tests_SNSv6.cfg</span><br><span>new file mode 100644</span><br><span>index 0000000..b50dacc</span><br><span>--- /dev/null</span><br><span>+++ b/pcu/PCU_Tests_SNSv6.cfg</span><br><span>@@ -0,0 +1,26 @@</span><br><span style="color: hsl(120, 100%, 40%);">+[ORDERED_INCLUDE]</span><br><span style="color: hsl(120, 100%, 40%);">+# Common configuration, shared between test suites</span><br><span style="color: hsl(120, 100%, 40%);">+"../Common.cfg"</span><br><span style="color: hsl(120, 100%, 40%);">+# testsuite specific configuration, not expected to change</span><br><span style="color: hsl(120, 100%, 40%);">+"./PCU_Tests.default"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[LOGGING]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[MODULE_PARAMETERS]</span><br><span style="color: hsl(120, 100%, 40%);">+SGSN_Components.mp_nsconfig := {</span><br><span style="color: hsl(120, 100%, 40%);">+       remote_proto == PCUIF_ADDR_TYPE_IPV6,</span><br><span style="color: hsl(120, 100%, 40%);">+ local_ip := "::1",</span><br><span style="color: hsl(120, 100%, 40%);">+  local_udp_port := 23000,</span><br><span style="color: hsl(120, 100%, 40%);">+      remote_ip := "::1",</span><br><span style="color: hsl(120, 100%, 40%);">+ remote_udp_port := 22000,</span><br><span style="color: hsl(120, 100%, 40%);">+     nsvci := 1234,</span><br><span style="color: hsl(120, 100%, 40%);">+        nsei := 1234</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+PCUIF_Types.mp_pcuif_version := 10</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[TESTPORT_PARAMETERS]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[MAIN_CONTROLLER]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[EXECUTE]</span><br><span style="color: hsl(120, 100%, 40%);">+PCU_Tests_SNS.control</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20003">change 20003</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20003"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I43d64caca600fff78f3fbbb3e8179f447f235d46 </div>
<div style="display:none"> Gerrit-Change-Number: 20003 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>