<p>Harald Welte has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/9293">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">BSSAP/IPA integration: Wait for SCCPLite to be established<br><br>Before this patch, we had some problems related to synchronization<br>between the IPA transport, SCCP emulation and BSSAP layer in SCCPlite<br>configurations.<br><br>This code ensures that f_bssap_init() will block until the IPA<br>connection (client or server) is established, and then start the SCCP<br>and BSSAP emulation components in the right order.<br><br>This in turn ensures that the initial BSSMAP RESET that we're sending<br>from the TTCN-3 side is only sent once the IPA connection is fully<br>established, and the CCM Identity handshake has happened before.<br><br>Change-Id: I483ddd45c1cf631a5a9d8f862b6ca728b38bdc14<br>Related: OS#2544<br>---<br>M library/BSSAP_Adapter.ttcn<br>M library/IPA_Emulation.ttcnpp<br>2 files changed, 44 insertions(+), 4 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/93/9293/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/BSSAP_Adapter.ttcn b/library/BSSAP_Adapter.ttcn</span><br><span>index 1a9fdb4..7404a6f 100644</span><br><span>--- a/library/BSSAP_Adapter.ttcn</span><br><span>+++ b/library/BSSAP_Adapter.ttcn</span><br><span>@@ -28,8 +28,9 @@</span><br><span> </span><br><span> type record BSSAP_Adapter {</span><br><span>        /* component references */</span><br><span style="color: hsl(0, 100%, 40%);">-      M3UA_CT vc_M3UA, /* only in 3GPP AoIP */</span><br><span style="color: hsl(0, 100%, 40%);">-        IPA_Emulation_CT vc_IPA, /* only in SCCPliste */</span><br><span style="color: hsl(120, 100%, 40%);">+      M3UA_CT vc_M3UA,                /* only in 3GPP AoIP */</span><br><span style="color: hsl(120, 100%, 40%);">+       IPA_Emulation_CT vc_IPA,        /* only in SCCPlite */</span><br><span style="color: hsl(120, 100%, 40%);">+        IPA_EventWaiter_CT vc_WAIT,     /* only in SCCPlite */</span><br><span>       SCCP_CT vc_SCCP,</span><br><span> </span><br><span>         MSC_SCCP_MTP3_parameters sccp_pars,</span><br><span>@@ -114,18 +115,32 @@</span><br><span>          map(ba.vc_IPA:IPA_PORT, system:IPA_CODEC_PT);</span><br><span>                /* connect MTP3 service provider (IPA) to lower side of SCCP */</span><br><span>              connect(ba.vc_IPA:MTP3_SP_PORT, ba.vc_SCCP:MTP3_SCCP_PORT);</span><br><span style="color: hsl(120, 100%, 40%);">+           /* connect waiter to general IPA port (for ASP_IPA_Event) */</span><br><span style="color: hsl(120, 100%, 40%);">+          ba.vc_WAIT := IPA_EventWaiter_CT.create(id & "-IPA-WAIT");</span><br><span style="color: hsl(120, 100%, 40%);">+              connect(ba.vc_IPA:IPA_SP_PORT, ba.vc_WAIT:IPA_SP_PORT);</span><br><span style="color: hsl(120, 100%, 40%);">+               ba.vc_WAIT.start(IPA_Emulation.waiter_main());</span><br><span>               ba.vc_IPA.start(IPA_Emulation.main_server(cfg.sctp_addr.local_ip_addr,</span><br><span>                                                       cfg.sctp_addr.local_sctp_port));</span><br><span style="color: hsl(120, 100%, 40%);">+              /* wait until we received an IPA CCM ID_ACK */</span><br><span style="color: hsl(120, 100%, 40%);">+                ba.vc_WAIT.done;</span><br><span style="color: hsl(120, 100%, 40%);">+              disconnect(ba.vc_IPA:IPA_SP_PORT, ba.vc_WAIT:IPA_SP_PORT);</span><br><span>           }</span><br><span>    case (BSSAP_TRANSPORT_SCCPlite_CLIENT) {</span><br><span>             ba.vc_IPA := IPA_Emulation_CT.create(id & "-IPA");</span><br><span>             map(ba.vc_IPA:IPA_PORT, system:IPA_CODEC_PT);</span><br><span>                /* connect MTP3 service provider (IPA) to lower side of SCCP */</span><br><span>              connect(ba.vc_IPA:MTP3_SP_PORT, ba.vc_SCCP:MTP3_SCCP_PORT);</span><br><span style="color: hsl(120, 100%, 40%);">+           /* connect waiter to general IPA port (for ASP_IPA_Event) */</span><br><span style="color: hsl(120, 100%, 40%);">+          ba.vc_WAIT := IPA_EventWaiter_CT.create(id & "-IPA-WAIT");</span><br><span style="color: hsl(120, 100%, 40%);">+              connect(ba.vc_IPA:IPA_SP_PORT, ba.vc_WAIT:IPA_SP_PORT);</span><br><span style="color: hsl(120, 100%, 40%);">+               ba.vc_WAIT.start(IPA_Emulation.waiter_main());</span><br><span>               ba.vc_IPA.start(IPA_Emulation.main_client(cfg.sctp_addr.remote_ip_addr,</span><br><span>                                                      cfg.sctp_addr.remote_sctp_port,</span><br><span>                                                      cfg.sctp_addr.local_ip_addr,</span><br><span>                                                         cfg.sctp_addr.local_sctp_port));</span><br><span style="color: hsl(120, 100%, 40%);">+              /* wait until we received an IPA CCM ID_ACK */</span><br><span style="color: hsl(120, 100%, 40%);">+                ba.vc_WAIT.done;</span><br><span style="color: hsl(120, 100%, 40%);">+              disconnect(ba.vc_IPA:IPA_SP_PORT, ba.vc_WAIT:IPA_SP_PORT);</span><br><span>           }</span><br><span>    case else {</span><br><span>          setverdict(fail, "Unsuppored BSSAP_Transport");</span><br><span>@@ -133,8 +148,6 @@</span><br><span>              }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   ba.vc_SCCP.start(SCCPStart(ba.sccp_pars));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>   if (isvalue(ops)) {</span><br><span>          timer T := 5.0;</span><br><span>              T.start;</span><br><span>@@ -145,6 +158,9 @@</span><br><span>               /* start the BSSMAP emulation */</span><br><span>             ba.vc_BSSMAP.start(BSSMAP_Emulation.main(valueof(ops), ""));</span><br><span>       }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   ba.vc_SCCP.start(SCCPStart(ba.sccp_pars));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> }</span><br><span> </span><br><span> </span><br><span>diff --git a/library/IPA_Emulation.ttcnpp b/library/IPA_Emulation.ttcnpp</span><br><span>index 41a3968..df2b15e 100644</span><br><span>--- a/library/IPA_Emulation.ttcnpp</span><br><span>+++ b/library/IPA_Emulation.ttcnpp</span><br><span>@@ -243,6 +243,9 @@</span><br><span> }</span><br><span> </span><br><span> private function f_send_IPA_EVT(template ASP_IPA_Event evt) runs on IPA_Emulation_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       if (IPA_SP_PORT.checkstate("Connected")) {</span><br><span style="color: hsl(120, 100%, 40%);">+          IPA_SP_PORT.send(evt);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> #ifdef IPA_EMULATION_RSL</span><br><span>        if (IPA_RSL_PORT.checkstate("Connected")) {</span><br><span>                IPA_RSL_PORT.send(evt);</span><br><span>@@ -368,6 +371,7 @@</span><br><span>                         * the TCP connection is established.  Other implementations may differ.</span><br><span>                      * We currently ignore it completely - but actually we should make sure that</span><br><span>                          * one ID_ACK is received by the server at some point */</span><br><span style="color: hsl(120, 100%, 40%);">+                      f_send_IPA_EVT(t_ASP_IPA_EVT_UD(ASP_IPA_EVENT_ID_ACK));</span><br><span>              }</span><br><span>            case (IPAC_MSGT_ID_RESP) {</span><br><span>                   log("IPA ID RESP: ", ccm.u.resp);</span><br><span>@@ -635,4 +639,24 @@</span><br><span>   }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/***********************************************************************</span><br><span style="color: hsl(120, 100%, 40%);">+ * IPA Event waiter component. Wait for ASP_IPA_EVENT_ID_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%);">+type component IPA_EventWaiter_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  port IPA_SP_PT IPA_SP_PORT;</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 waiter_main(template ASP_IPA_Event wait_for := t_ASP_IPA_EVT_UD(ASP_IPA_EVENT_ID_ACK))</span><br><span style="color: hsl(120, 100%, 40%);">+runs on IPA_EventWaiter_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] IPA_SP_PORT.receive(wait_for) {</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%);">+     [] IPA_SP_PORT.receive { repeat; }</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> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/9293">change 9293</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/9293"/><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: I483ddd45c1cf631a5a9d8f862b6ca728b38bdc14 </div>
<div style="display:none"> Gerrit-Change-Number: 9293 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>