<p>Harald Welte has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/13292">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pcu: Test SNS where initial IP/port is not part of configured NS-VCs<br><br>As per section 6.2.1 of 3GPP TS 48.016, the initial IP/port where the<br>SNS SIZE/CONFIG procedures are being performed is not automatically part<br>of the later NS-VCs.  This means we shall not perform the NS-ALIVE<br>procedure or any other procedure beyond SNS with that specific endpoint.<br><br>This adds a new TC_sns_1c1u_separate() to test for this behavior.<br><br>Change-Id: Ie2a017250ca1d5386e2cf42d1945e61d170ac92d<br>Related: OS#3844<br>---<br>M pcu/PCU_Tests_RAW.ttcn<br>M pcu/PCU_Tests_RAW_SNS.ttcn<br>2 files changed, 91 insertions(+), 0 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/92/13292/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/pcu/PCU_Tests_RAW.ttcn b/pcu/PCU_Tests_RAW.ttcn</span><br><span>index 923b086..a30829e 100644</span><br><span>--- a/pcu/PCU_Tests_RAW.ttcn</span><br><span>+++ b/pcu/PCU_Tests_RAW.ttcn</span><br><span>@@ -124,6 +124,37 @@</span><br><span>  }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* perform outbound NS-ALIVE procedure */</span><br><span style="color: hsl(120, 100%, 40%);">+function f_outgoing_ns_alive_no_ack(integer idx := 0, float tout := 10.0) runs on RAW_NS_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  timer T := tout;</span><br><span style="color: hsl(120, 100%, 40%);">+      NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], t_NS_ALIVE));</span><br><span style="color: hsl(120, 100%, 40%);">+     T.start;</span><br><span style="color: hsl(120, 100%, 40%);">+      alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] NSCP[idx].receive(t_NS_RecvFrom(t_NS_ALIVE_ACK)) {</span><br><span style="color: hsl(120, 100%, 40%);">+         setverdict(fail, "Received unexpected NS-ALIVE ACK");</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] NSCP[idx].receive { repeat; }</span><br><span style="color: hsl(120, 100%, 40%);">+      [] T.timeout {</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 style="color: hsl(120, 100%, 40%);">+/* ensure no matching message is received within 'tout' */</span><br><span style="color: hsl(120, 100%, 40%);">+function f_ensure_no_ns(template PDU_NS ns := ?, integer idx := 0, float tout := 3.0)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on RAW_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      timer T := tout;</span><br><span style="color: hsl(120, 100%, 40%);">+      T.start;</span><br><span style="color: hsl(120, 100%, 40%);">+      alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] NSCP[idx].receive(t_NS_RecvFrom(ns)) {</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(fail, "NS-ALIVE from unconfigured (possibly initial) endpoint");</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] T.timeout {</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> /* perform outbound NS-BLOCK procedure */</span><br><span> function f_outgoing_ns_block(NsCause cause, integer idx := 0) runs on RAW_NS_CT {</span><br><span>     NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_NS_BLOCK(cause, g_nsconfig[idx].nsvci)));</span><br><span>diff --git a/pcu/PCU_Tests_RAW_SNS.ttcn b/pcu/PCU_Tests_RAW_SNS.ttcn</span><br><span>index cc3cb5b..a216dbe 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,19 @@</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%);">+/* perform outbound SNS-CONFIG procedure (separate endpoints: 1 for control, 1 for user */</span><br><span style="color: hsl(120, 100%, 40%);">+function f_outgoing_sns_config_1c1u_separate(template (omit) NsCause cause := omit, 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_config_1c1u_separate(idx=", idx, ")");</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[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%);">+  rx := f_ns_exp(tr_SNS_CONFIG_ACK(g_nsconfig[idx].nsei, cause), idx);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> function f_outgoing_sns_add(integer idx_add, 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_add(idx_add=", idx_add, ")");</span><br><span>@@ -211,6 +224,52 @@</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_separate() runs on RAW_Test_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_ns_codec(2);</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_separate();</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 := 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%);">+       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%);">+       /* ensure there's no NS-ALIVE received on idx==0 */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ensure_no_ns(t_NS_ALIVE, idx := 0);</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(1);</span><br><span style="color: hsl(120, 100%, 40%);">+       f_outgoing_ns_alive(2);</span><br><span style="color: hsl(120, 100%, 40%);">+       /* ensure there's no response to NS-ALIVE sent on idx==0 */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_outgoing_ns_alive_no_ack(idx := 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Expect BVC-RESET for signaling BVCI=0 and ptp BVCI */</span><br><span style="color: hsl(120, 100%, 40%);">+      as_rx_bvc_reset_tx_ack(0, oneshot := true, idx := 1);</span><br><span style="color: hsl(120, 100%, 40%);">+ as_rx_bvc_reset_tx_ack(mp_gb_cfg.bvci, oneshot := true, idx := 1);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Expect UNBLOCK for ptp BVCI on signaling NS-VC (idx==1) */</span><br><span style="color: hsl(120, 100%, 40%);">+ as_rx_bvc_unblock_tx_ack(mp_gb_cfg.bvci, oneshot := true, idx := 1);</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 := 2);</span><br><span style="color: hsl(120, 100%, 40%);">+       activate(as_rx_bvc_fc_tx_ack(mp_gb_cfg.bvci, idx := 2));</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 - and where</span><br><span style="color: hsl(120, 100%, 40%);">+ * the initial IP/port for the SNS procedure is *not* part of the NS-VCs later */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_sns_1c1u_separate() runs on RAW_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     f_sns_bringup_1c1u_separate();</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> /* Test adding new IP endpoints at runtime */</span><br><span> testcase TC_sns_add() runs on RAW_Test_CT {</span><br><span>       f_sns_bringup_1c1u();</span><br><span>@@ -281,6 +340,7 @@</span><br><span>  execute( TC_sns_po_config_nack() );</span><br><span>  execute( TC_sns_so_config_success() );</span><br><span>       execute( TC_sns_1c1u() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_sns_1c1u_separate() );</span><br><span>   execute( TC_sns_add() );</span><br><span>     execute( TC_sns_del() );</span><br><span>     execute( TC_sns_chg_weight() );</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/13292">change 13292</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/13292"/><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: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ie2a017250ca1d5386e2cf42d1945e61d170ac92d </div>
<div style="display:none"> Gerrit-Change-Number: 13292 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>