<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>