<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/15985">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  pespin: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">stp: Add tests for running STP in M3UA ASP role<br><br>Change-Id: Ifec443858256ad79fbe29e26c609322809dd07b1<br>Related: OS#2005<br>---<br>M stp/STP_Tests_M3UA.ttcn<br>M stp/osmo-stp.cfg<br>2 files changed, 149 insertions(+), 3 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/stp/STP_Tests_M3UA.ttcn b/stp/STP_Tests_M3UA.ttcn</span><br><span>index 3415e52..5c15c6f 100644</span><br><span>--- a/stp/STP_Tests_M3UA.ttcn</span><br><span>+++ b/stp/STP_Tests_M3UA.ttcn</span><br><span>@@ -36,14 +36,20 @@</span><br><span> </span><br><span> modulepar {</span><br><span>         integer mp_stp_m3ua_port := 2905;</span><br><span style="color: hsl(120, 100%, 40%);">+     integer mp_stp_m3ua_clnt_port := 2906;</span><br><span>       integer mp_local_m3ua_port := 9999;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private const integer NR_M3UA := 3;</span><br><span style="color: hsl(120, 100%, 40%);">+private const integer NR_M3UA := 3;    /* number of M3UA clients in ATS */</span><br><span style="color: hsl(120, 100%, 40%);">+private const integer NR_M3UA_SRV := 1;    /* number of M3UA servres in ATS */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+private function M3UA_SRV(integer idx) return integer {</span><br><span style="color: hsl(120, 100%, 40%);">+        return NR_M3UA+idx;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> type component RAW_M3UA_CT extends Test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-      port M3UA_CODEC_PT M3UA[NR_M3UA];</span><br><span style="color: hsl(0, 100%, 40%);">-       var integer g_m3ua_conn_id[NR_M3UA];</span><br><span style="color: hsl(120, 100%, 40%);">+  port M3UA_CODEC_PT M3UA[NR_M3UA+NR_M3UA_SRV];</span><br><span style="color: hsl(120, 100%, 40%);">+ var integer g_m3ua_conn_id[NR_M3UA+NR_M3UA_SRV];</span><br><span> }</span><br><span> </span><br><span> private template PortEvent tr_SctpAssocChange := {</span><br><span>@@ -56,6 +62,10 @@</span><br><span>                 sctpPeerAddrChange := ?</span><br><span>      }</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+private template PortEvent tr_SctpConnOpened := {</span><br><span style="color: hsl(120, 100%, 40%);">+     connOpened := ?</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> private altstep as_m3ua_sctp() runs on RAW_M3UA_CT {</span><br><span>     [] any from M3UA.receive(tr_SctpAssocChange) { repeat; }</span><br><span>@@ -93,6 +103,16 @@</span><br><span>       g_m3ua_conn_id[i] := res.connId;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_M3UA_listen(integer i) runs on RAW_M3UA_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var Result res;</span><br><span style="color: hsl(120, 100%, 40%);">+       res := M3UA_CodecPort_CtrlFunct.f_IPL4_listen(M3UA[i], mp_local_ip, mp_local_m3ua_port+i,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     {sctp:=valueof(ts_SCTP)});</span><br><span style="color: hsl(120, 100%, 40%);">+    if (not ispresent(res.connId)) {</span><br><span style="color: hsl(120, 100%, 40%);">+              setverdict(fail, "Could not bind M3UA socket, check your configuration");</span><br><span style="color: hsl(120, 100%, 40%);">+   mtc.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> friend function f_init_m3ua() runs on RAW_M3UA_CT {</span><br><span>        var integer i;</span><br><span> </span><br><span>@@ -106,6 +126,26 @@</span><br><span>    }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_init_m3ua_srv() runs on RAW_M3UA_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   var integer i;</span><br><span style="color: hsl(120, 100%, 40%);">+        var PortEvent sctp_evt;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     for (i := NR_M3UA; i < NR_M3UA+NR_M3UA_SRV; i:=i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+              map(self:M3UA[i], system:M3UA_CODEC_PT);</span><br><span style="color: hsl(120, 100%, 40%);">+              /* bind+ listen */</span><br><span style="color: hsl(120, 100%, 40%);">+            f_M3UA_listen(i);</span><br><span style="color: hsl(120, 100%, 40%);">+             /* wait for accept() */</span><br><span style="color: hsl(120, 100%, 40%);">+               M3UA[i].receive(tr_SctpConnOpened) -> value sctp_evt {</span><br><span style="color: hsl(120, 100%, 40%);">+                     g_m3ua_conn_id[i] := sctp_evt.connOpened.connId;</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%);">+ * Test the STP in M3UA SG role (we are ASP)</span><br><span style="color: hsl(120, 100%, 40%);">+ ***********************************************************************/</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* perform an outbound ASP-UP procedure */</span><br><span> friend function f_M3UA_asp_up(integer idx, template (omit) OCT4 aspid := omit) runs on RAW_M3UA_CT {</span><br><span>  f_M3UA_send(idx, ts_M3UA_ASPUP(aspid));</span><br><span>@@ -417,6 +457,97 @@</span><br><span>       /* FIXME: we now may have changed the state on the STP side! */</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/***********************************************************************</span><br><span style="color: hsl(120, 100%, 40%);">+ * Test the STP in M3UA ASP role (we are SG)</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%);">+/* expect/perform an inbound ASP-UP procedure */</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_M3UA_CLNT_asp_up(integer idx, template OCT4 aspid := omit) runs on RAW_M3UA_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   f_M3UA_exp(idx, tr_M3UA_ASPUP(aspid));</span><br><span style="color: hsl(120, 100%, 40%);">+        f_M3UA_send(idx, ts_M3UA_ASPUP_ACK);</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%);">+/* expect/perform an inbound ASP-ACTIVATE procedure */</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_M3UA_CLNT_asp_act(integer idx, template M3UA_Traffic_Mode_Type tmt := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                              template (omit) OCT4 rctx := omit) runs on RAW_M3UA_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      f_M3UA_exp(idx, tr_M3UA_ASPAC(tmt, rctx));</span><br><span style="color: hsl(120, 100%, 40%);">+    f_M3UA_send(idx, ts_M3UA_ASPAC_ACK(tmt, rctx));</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%);">+/* expect/perform inbound ASP-UP and ASP-ACT, optionally send interemittent NOTIFY */</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_M3UA_CLNT_asp_up_act(integer idx, template M3UA_Traffic_Mode_Type tmt := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                            template OCT4 rctx := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   template (omit) OCT2 ntfy_after_up := c_M3UA_ST_I_AS_INACTIVE,</span><br><span style="color: hsl(120, 100%, 40%);">+                                template (omit) OCT2 ntfy_after_act := c_M3UA_ST_I_AS_ACTIVE)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on RAW_M3UA_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       f_M3UA_CLNT_asp_up(idx, omit);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (not istemplatekind(ntfy_after_up, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+            f_M3UA_send(idx, ts_M3UA_NOTIFY(c_M3UA_ST_T_STATE_CHG, ntfy_after_up, rctx));</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     f_M3UA_CLNT_asp_act(idx, tmt, rctx);</span><br><span style="color: hsl(120, 100%, 40%);">+  if (not istemplatekind(ntfy_after_act, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+           f_M3UA_send(idx, ts_M3UA_NOTIFY(c_M3UA_ST_T_STATE_CHG, ntfy_after_act, rctx));</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%);">+/* Expect inbound connection from ASP/SCTP-client, followed by ASP-UP */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_clnt_connect_asp_up() runs on RAW_M3UA_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init_m3ua();</span><br><span style="color: hsl(120, 100%, 40%);">+        f_init_m3ua_srv();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  f_M3UA_CLNT_asp_up(M3UA_SRV(0));</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%);">+/* Expect inbound connection from ASP/SCTP-client, followed by ASP-UP + ASP-ACT */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_clnt_asp_act() runs on RAW_M3UA_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init_m3ua();</span><br><span style="color: hsl(120, 100%, 40%);">+        f_init_m3ua_srv();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  f_M3UA_CLNT_asp_up_act(M3UA_SRV(0));</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 traffic being routed through "server" side STP (M3UA SG), coming back in "client"</span><br><span style="color: hsl(120, 100%, 40%);">+ * side STP (M3UA ASP) */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_clnt_sg_to_asp() runs on RAW_M3UA_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       var OCT4 rctx_sender := int2oct(1023, 4);</span><br><span style="color: hsl(120, 100%, 40%);">+     var OCT4 pc_sender := int2oct(23, 4);</span><br><span style="color: hsl(120, 100%, 40%);">+ var OCT4 rctx_receiver := int2oct(1055, 4);</span><br><span style="color: hsl(120, 100%, 40%);">+   var OCT4 pc_receiver := int2oct(55, 4);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init_m3ua();</span><br><span style="color: hsl(120, 100%, 40%);">+        f_M3UA_asp_up_act(0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_init_m3ua_srv();</span><br><span style="color: hsl(120, 100%, 40%);">+    f_M3UA_CLNT_asp_up_act(M3UA_SRV(0));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* verify traffic is routed from sender to [sole] receiver */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_test_traffic(0, rctx_sender, pc_sender, M3UA_SRV(0), rctx_receiver, pc_receiver);</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 traffic being routed through "client" side STP (M3UA ASP), coming back in "server"</span><br><span style="color: hsl(120, 100%, 40%);">+ * side STP (M3UA SG) */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_clnt_asp_to_sg() runs on RAW_M3UA_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        var OCT4 rctx_sender := int2oct(1055, 4);</span><br><span style="color: hsl(120, 100%, 40%);">+     var OCT4 pc_sender := int2oct(55, 4);</span><br><span style="color: hsl(120, 100%, 40%);">+ var OCT4 rctx_receiver := int2oct(1023, 4);</span><br><span style="color: hsl(120, 100%, 40%);">+   var OCT4 pc_receiver := int2oct(23, 4);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init_m3ua();</span><br><span style="color: hsl(120, 100%, 40%);">+        f_M3UA_asp_up_act(0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_init_m3ua_srv();</span><br><span style="color: hsl(120, 100%, 40%);">+    f_M3UA_CLNT_asp_up_act(M3UA_SRV(0));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* verify traffic is routed from sender to [sole] receiver */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_test_traffic(M3UA_SRV(0), rctx_sender, pc_sender, 0, rctx_receiver, pc_receiver);</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> control {</span><br><span>  /* M3UA Tests */</span><br><span>@@ -442,6 +573,12 @@</span><br><span>      /* TODO: test RKM with unsupported routing keys: NA, SI, OPC */</span><br><span>      /* TODO: register/unregister multiple routing contexts in one message; including mixed</span><br><span>                success/failure situations */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Test STP as SCTP client + M3UA ASP role */</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_clnt_connect_asp_up() );</span><br><span style="color: hsl(120, 100%, 40%);">+  execute( TC_clnt_asp_act() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_clnt_sg_to_asp() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_clnt_asp_to_sg() );</span><br><span> }</span><br><span> </span><br><span> </span><br><span>diff --git a/stp/osmo-stp.cfg b/stp/osmo-stp.cfg</span><br><span>index d5eccba..d8630d2 100644</span><br><span>--- a/stp/osmo-stp.cfg</span><br><span>+++ b/stp/osmo-stp.cfg</span><br><span>@@ -45,6 +45,11 @@</span><br><span>  asp asp-receiver1 10001 2905 m3ua</span><br><span>   local-ip 127.0.0.1</span><br><span>   remote-ip 127.0.0.1</span><br><span style="color: hsl(120, 100%, 40%);">+ asp asp-client0 10002 2906 m3ua</span><br><span style="color: hsl(120, 100%, 40%);">+  local-ip 127.0.0.1</span><br><span style="color: hsl(120, 100%, 40%);">+  remote-ip 127.0.0.1</span><br><span style="color: hsl(120, 100%, 40%);">+  sctp-role client</span><br><span style="color: hsl(120, 100%, 40%);">+  role asp</span><br><span>  as as-sender m3ua</span><br><span>   asp asp-sender</span><br><span>   routing-key 1023 23</span><br><span>@@ -54,9 +59,13 @@</span><br><span>  as mahlzeit ipa</span><br><span>   routing-key 0 5</span><br><span>   point-code override dpc 23</span><br><span style="color: hsl(120, 100%, 40%);">+ as as-client m3ua</span><br><span style="color: hsl(120, 100%, 40%);">+  routing-key 1055 55</span><br><span style="color: hsl(120, 100%, 40%);">+  asp asp-client0</span><br><span>  route-table system</span><br><span>   update route 23 16777215 linkset as-sender</span><br><span>   update route 42 16777215 linkset as-receiver</span><br><span style="color: hsl(120, 100%, 40%);">+  update route 55 16777215 linkset as-client</span><br><span>  listen m3ua 2905</span><br><span>   accept-asp-connections dynamic-permitted</span><br><span>  listen ipa 5000</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/15985">change 15985</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/+/15985"/><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: Ifec443858256ad79fbe29e26c609322809dd07b1 </div>
<div style="display:none"> Gerrit-Change-Number: 15985 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>