<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/13012">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">PCU: Add tests for SNS with separate signalling/data NS-VC, ADD, DEL<br><br>Change-Id: Ie1d14a901b354daa4e3796fe66e7390d87c7e778<br>Related: OS#3617<br>---<br>M library/Osmocom_Gb_Types.ttcn<br>M pcu/PCU_Tests_RAW_SNS.ttcn<br>2 files changed, 220 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn</span><br><span>index 86b4d49..a0242c3 100644</span><br><span>--- a/library/Osmocom_Gb_Types.ttcn</span><br><span>+++ b/library/Osmocom_Gb_Types.ttcn</span><br><span>@@ -116,6 +116,41 @@</span><br><span>              return ret;</span><br><span>  }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ function ts_SNS_IP_ADDR(template (omit) IPAddress ip) return template (omit) IP_Address_NS {</span><br><span style="color: hsl(120, 100%, 40%);">+          var template (omit) IP_Address_NS ret;</span><br><span style="color: hsl(120, 100%, 40%);">+                if (istemplatekind(ip, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+          } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      ret.iEI := '0B'O;</span><br><span style="color: hsl(120, 100%, 40%);">+                     ret.ipAddress := ip;</span><br><span style="color: hsl(120, 100%, 40%);">+                  if (ischosen(ip.ip4Address)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                ret.addressType := '01'O;</span><br><span style="color: hsl(120, 100%, 40%);">+                     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              ret.addressType := '02'O;</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%);">+             return ret;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     function tr_SNS_IP_ADDR(template IPAddress ip) return template IP_Address_NS {</span><br><span style="color: hsl(120, 100%, 40%);">+                var template IP_Address_NS ret;</span><br><span style="color: hsl(120, 100%, 40%);">+               ret.iEI := '0B'O;</span><br><span style="color: hsl(120, 100%, 40%);">+             if (istemplatekind(ip, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+          } else if (istemplatekind(ip, "*")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       return *;</span><br><span style="color: hsl(120, 100%, 40%);">+             } else if (istemplatekind(ip, "?")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       return ?;</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      ret.ipAddress := ip;</span><br><span style="color: hsl(120, 100%, 40%);">+                  if (ischosen(ip.ip4Address)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                ret.addressType := '01'O;</span><br><span style="color: hsl(120, 100%, 40%);">+                     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              ret.addressType := '02'O;</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%);">+             return ret;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  private function f_oct_or_wc(template integer inp, integer len) return template octetstring {</span><br><span>                if (istemplatekind(inp, "omit")) {</span><br><span>                         return omit;</span><br><span>@@ -475,6 +510,8 @@</span><br><span>           var template ListofIP6Elements r;</span><br><span>            if (istemplatekind(elem, "omit")) {</span><br><span>                        return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+          } else if (istemplatekind(elem, "*")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     return *;</span><br><span>            } else {</span><br><span>                     r := {</span><br><span>                               iEI := '06'O,</span><br><span>@@ -526,6 +563,92 @@</span><br><span>                 }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) PDU_NS ts_SNS_ADD(Nsei nsei, uint8_t trans_id,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          template (omit) IP4_Elements v4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      template (omit) IP6_Elements v6 := omit) := {</span><br><span style="color: hsl(120, 100%, 40%);">+              pDU_SNS_Add := {</span><br><span style="color: hsl(120, 100%, 40%);">+                      nsPduType := '0D'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                   nSEI_NS := ts_NS_IE_NSEI(nsei),</span><br><span style="color: hsl(120, 100%, 40%);">+                       transactionID := trans_id,</span><br><span style="color: hsl(120, 100%, 40%);">+                    listofIP4Elements := ts_SNS_IE_ListIP4(v4),</span><br><span style="color: hsl(120, 100%, 40%);">+                   listofIP6Elements := ts_SNS_IE_ListIP6(v6)</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%);">+     template PDU_NS tr_SNS_ADD(template Nsei nsei, template uint8_t trans_id,</span><br><span style="color: hsl(120, 100%, 40%);">+                                template IP4_Elements v4,</span><br><span style="color: hsl(120, 100%, 40%);">+                             template IP6_Elements v6 := omit) := {</span><br><span style="color: hsl(120, 100%, 40%);">+             pDU_SNS_Add := {</span><br><span style="color: hsl(120, 100%, 40%);">+                      nsPduType := '0D'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                   nSEI_NS := tr_NS_IE_NSEI(nsei),</span><br><span style="color: hsl(120, 100%, 40%);">+                       transactionID := trans_id,</span><br><span style="color: hsl(120, 100%, 40%);">+                    listofIP4Elements := tr_SNS_IE_ListIP4(v4),</span><br><span style="color: hsl(120, 100%, 40%);">+                   listofIP6Elements := tr_SNS_IE_ListIP6(v6)</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 style="color: hsl(120, 100%, 40%);">+   template (value) PDU_NS ts_SNS_DEL(Nsei nsei, uint8_t trans_id,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          template (omit) IPAddress ip_sns,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     template (omit) IP4_Elements v4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      template (omit) IP6_Elements v6 := omit) := {</span><br><span style="color: hsl(120, 100%, 40%);">+              pDU_SNS_Delete := {</span><br><span style="color: hsl(120, 100%, 40%);">+                   nsPduType := '11'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                   nSEI_NS := ts_NS_IE_NSEI(nsei),</span><br><span style="color: hsl(120, 100%, 40%);">+                       transactionID := trans_id,</span><br><span style="color: hsl(120, 100%, 40%);">+                    iP_Address_NS := ts_SNS_IP_ADDR(ip_sns),</span><br><span style="color: hsl(120, 100%, 40%);">+                      listofIP4Elements := ts_SNS_IE_ListIP4(v4),</span><br><span style="color: hsl(120, 100%, 40%);">+                   listofIP6Elements := ts_SNS_IE_ListIP6(v6)</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%);">+     template PDU_NS tr_SNS_DEL(template Nsei nsei, template uint8_t trans_id,</span><br><span style="color: hsl(120, 100%, 40%);">+                                template IPAddress ip_sns,</span><br><span style="color: hsl(120, 100%, 40%);">+                            template IP4_Elements v4,</span><br><span style="color: hsl(120, 100%, 40%);">+                             template IP6_Elements v6 := omit) := {</span><br><span style="color: hsl(120, 100%, 40%);">+             pDU_SNS_Delete := {</span><br><span style="color: hsl(120, 100%, 40%);">+                   nsPduType := '11'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                   nSEI_NS := tr_NS_IE_NSEI(nsei),</span><br><span style="color: hsl(120, 100%, 40%);">+                       transactionID := trans_id,</span><br><span style="color: hsl(120, 100%, 40%);">+                    iP_Address_NS := tr_SNS_IP_ADDR(ip_sns),</span><br><span style="color: hsl(120, 100%, 40%);">+                      listofIP4Elements := tr_SNS_IE_ListIP4(v4),</span><br><span style="color: hsl(120, 100%, 40%);">+                   listofIP6Elements := tr_SNS_IE_ListIP6(v6)</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 style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) PDU_NS ts_SNS_ACK(Nsei nsei, uint8_t trans_id,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          template (omit) NsCause cause := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        template (omit) IP4_Elements v4 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      template (omit) IP6_Elements v6 := omit) := {</span><br><span style="color: hsl(120, 100%, 40%);">+              pDU_SNS_Ack := {</span><br><span style="color: hsl(120, 100%, 40%);">+                      nsPduType := '0C'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                   nSEI_NS := ts_NS_IE_NSEI(nsei),</span><br><span style="color: hsl(120, 100%, 40%);">+                       transactionID := trans_id,</span><br><span style="color: hsl(120, 100%, 40%);">+                    causeNS := ts_NS_IE_CAUSE_omit(cause),</span><br><span style="color: hsl(120, 100%, 40%);">+                        iP_Address_NS := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                        listofIP4Elements := ts_SNS_IE_ListIP4(v4),</span><br><span style="color: hsl(120, 100%, 40%);">+                   listofIP6Elements := ts_SNS_IE_ListIP6(v6)</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%);">+     template PDU_NS tr_SNS_ACK(template Nsei nsei, template uint8_t trans_id := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                           template NsCause cause := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                       template IP4_Elements v4 := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        template IP6_Elements v6 := *) := {</span><br><span style="color: hsl(120, 100%, 40%);">+                pDU_SNS_Ack := {</span><br><span style="color: hsl(120, 100%, 40%);">+                      nsPduType := '0C'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                   nSEI_NS := tr_NS_IE_NSEI(nsei),</span><br><span style="color: hsl(120, 100%, 40%);">+                       transactionID := trans_id,</span><br><span style="color: hsl(120, 100%, 40%);">+                    causeNS := tr_NS_IE_CAUSE(cause),</span><br><span style="color: hsl(120, 100%, 40%);">+                     iP_Address_NS := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                        listofIP4Elements := tr_SNS_IE_ListIP4(v4),</span><br><span style="color: hsl(120, 100%, 40%);">+                   listofIP6Elements := tr_SNS_IE_ListIP6(v6)</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 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 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>      type record BssgpCellId {</span><br><span>            RoutingAreaIdentification       ra_id,</span><br><span>               CellIdentity                    cell_id</span><br><span>diff --git a/pcu/PCU_Tests_RAW_SNS.ttcn b/pcu/PCU_Tests_RAW_SNS.ttcn</span><br><span>index fb4d8f7..41a4059 100644</span><br><span>--- a/pcu/PCU_Tests_RAW_SNS.ttcn</span><br><span>+++ b/pcu/PCU_Tests_RAW_SNS.ttcn</span><br><span>@@ -67,6 +67,29 @@</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 style="color: hsl(120, 100%, 40%);">+function f_outgoing_sns_add(integer idx_add, uint8_t w_sig := 1, uint8_t w_user := 1, integer idx := 0)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on RAW_NS_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   log("f_outgoing_sns_add(idx_add=", idx_add, ")");</span><br><span style="color: hsl(120, 100%, 40%);">+ var PDU_NS rx;</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%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+function f_outgoing_sns_del(integer idx_del, uint8_t w_sig := 1, uint8_t w_user := 1, integer idx := 0)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on RAW_NS_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    log("f_outgoing_sns_del(idx_del=", idx_del, ")");</span><br><span style="color: hsl(120, 100%, 40%);">+ var PDU_NS rx;</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%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> /* PCU-originated SNS-SIZE: successful case */</span><br><span> testcase TC_sns_po_size_success() runs on RAW_NS_CT {</span><br><span>@@ -130,17 +153,89 @@</span><br><span>        as_rx_bvc_unblock_tx_ack(mp_gb_cfg.bvci, oneshot := true);</span><br><span> </span><br><span>       /* wait for one FLOW-CONTROL BVC and then ACK any further in the future */</span><br><span style="color: hsl(0, 100%, 40%);">-      as_rx_bvc_fc_tx_ack(mp_gb_cfg.bvci, oneshot := true);</span><br><span style="color: hsl(0, 100%, 40%);">-   activate(as_rx_bvc_fc_tx_ack(mp_gb_cfg.bvci));</span><br><span style="color: hsl(120, 100%, 40%);">+        as_rx_bvc_fc_tx_ack(mp_gb_cfg.bvci, oneshot := true, idx := 1);</span><br><span style="color: hsl(120, 100%, 40%);">+       activate(as_rx_bvc_fc_tx_ack(mp_gb_cfg.bvci, idx := 1));</span><br><span>     setverdict(pass);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_sns_bringup_1c1u() runs on RAW_NS_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Activate two NS codec ports */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init_ns_codec();</span><br><span style="color: hsl(120, 100%, 40%);">+    f_init_ns_codec(1);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init_pcuif();</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Perform Size + BSS-originated config */</span><br><span style="color: hsl(120, 100%, 40%);">+    f_incoming_sns_size();</span><br><span style="color: hsl(120, 100%, 40%);">+        f_incoming_sns_config();</span><br><span style="color: hsl(120, 100%, 40%);">+      /* perform SGSN-originated config using idx==0 for signalling and idx==1 for user traffic */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_outgoing_sns_config_1c1u();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* wait for one ALIVE cycle, then ACK any further ALIVE in the background</span><br><span style="color: hsl(120, 100%, 40%);">+      * for both NS-VCs */</span><br><span style="color: hsl(120, 100%, 40%);">+ as_rx_alive_tx_ack(oneshot := true, idx := 0);</span><br><span style="color: hsl(120, 100%, 40%);">+        activate(as_rx_alive_tx_ack(idx := 0));</span><br><span style="color: hsl(120, 100%, 40%);">+       as_rx_alive_tx_ack(oneshot := true, idx := 1);</span><br><span style="color: hsl(120, 100%, 40%);">+        activate(as_rx_alive_tx_ack(idx := 1));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* perform outgoing ALIVE procedure for both NS-VCs */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_outgoing_ns_alive(0);</span><br><span style="color: hsl(120, 100%, 40%);">+       f_outgoing_ns_alive(1);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Expect BVC-RESET for signaling (0) and ptp BVCI */</span><br><span style="color: hsl(120, 100%, 40%);">+ as_rx_bvc_reset_tx_ack(0, oneshot := true);</span><br><span style="color: hsl(120, 100%, 40%);">+   as_rx_bvc_reset_tx_ack(mp_gb_cfg.bvci, oneshot := true);</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Expect UNBLOCK for ptp BVCI on signaling NS-VC (idx==0) */</span><br><span style="color: hsl(120, 100%, 40%);">+ as_rx_bvc_unblock_tx_ack(mp_gb_cfg.bvci, oneshot := true);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* wait for one FLOW-CONTROL BVC and then ACK any further in the future. Flow</span><br><span style="color: hsl(120, 100%, 40%);">+  * control happens on the p-t-p BVCI and hence on index 1 */</span><br><span style="color: hsl(120, 100%, 40%);">+  as_rx_bvc_fc_tx_ack(mp_gb_cfg.bvci, oneshot := true, idx := 1);</span><br><span style="color: hsl(120, 100%, 40%);">+       activate(as_rx_bvc_fc_tx_ack(mp_gb_cfg.bvci, idx := 1));</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%);">+/* Test full IP-SNS bring-up with two NS-VCs, one sig-only and one user-only */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_sns_1c1u() runs on RAW_NS_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    f_sns_bringup_1c1u();</span><br><span style="color: hsl(120, 100%, 40%);">+ setverdict(pass);</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%);">+/* Test adding new IP endpoints at runtime */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_sns_add() runs on RAW_NS_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sns_bringup_1c1u();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* crate another NS codec port on the tester side */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_init_ns_codec(2);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ f_outgoing_sns_add(idx_add := 2, w_sig := 0, w_user := 1, idx := 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* wait for one ALIVE cycle, then ACK any further ALIVE in the background */</span><br><span style="color: hsl(120, 100%, 40%);">+  as_rx_alive_tx_ack(oneshot := true, idx := 2);</span><br><span style="color: hsl(120, 100%, 40%);">+        activate(as_rx_alive_tx_ack(idx := 2));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     f_outgoing_ns_alive(2);</span><br><span style="color: hsl(120, 100%, 40%);">+       /* TODO: Should we expect FLOW-CONTROL BVC here too? */</span><br><span style="color: hsl(120, 100%, 40%);">+       setverdict(pass);</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%);">+/* Test deleting IP endpoints at runtime */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_sns_del() runs on RAW_NS_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        f_sns_bringup_1c1u();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_outgoing_sns_del(idx_del := 1, w_sig := 0, w_user := 1, idx := 0);</span><br><span style="color: hsl(120, 100%, 40%);">+  /* FIXME: ensure we don't receive anything on just-deleted NS-VC anymore */</span><br><span style="color: hsl(120, 100%, 40%);">+       setverdict(pass);</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 style="color: hsl(120, 100%, 40%);">+</span><br><span> control {</span><br><span>      execute( TC_sns_po_size_success() );</span><br><span>         execute( TC_sns_po_size_nack() );</span><br><span>    execute( TC_sns_po_config_success() );</span><br><span>       execute( TC_sns_po_config_nack() );</span><br><span>  execute( TC_sns_so_config_success() );</span><br><span style="color: hsl(120, 100%, 40%);">+        execute( TC_sns_1c1u() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_sns_add() );</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_sns_del() );</span><br><span> }</span><br><span> </span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/13012">change 13012</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/13012"/><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-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: Ie1d14a901b354daa4e3796fe66e7390d87c7e778 </div>
<div style="display:none"> Gerrit-Change-Number: 13012 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>