<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/15430">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">PCU_Tests_RAW.ttcn: initial version of component RAW_PCU_BTS_CT<br><br>The purpose of RAW_PCU_BTS_CT is to emulate the BTS by sending<br>TDMA frame clock and RTS (Ready To Send) indications, so that<br>we can build new test cases on top of it, and move both<br>osmo-bts-virtual and virt_phy out of the scope of IUT.<br><br>== Current state<br><br>  - After creation, the component starts a listening UNIX socket<br>    and waits for a connection from OsmoPCU.<br>  - As soon as OsmoPCU is connected, we wait for the TXT.ind with<br>    its version, and respond with INFO.ind (SI13).<br>  - After sending the INFO.ind, we start TDMA clock timer that<br>    triggers transmission of TIME.ind messages at the beginning<br>    of every MAC block.<br><br>== What's missing?<br><br>  - TDMA clock timer generates tons of logging messages, so<br>    we probably want to move it into a separate component.<br>  - Sending of RTS indications for free DL blocks.<br>  - We may need to handle OsmoPCU disconnection.<br><br>Change-Id: I63a23abebab88fd5318eb4d907d6028e7c38e9a3<br>---<br>M pcu/PCU_Tests_RAW.ttcn<br>1 file changed, 84 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/30/15430/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 dcd1f96..c3537d4 100644</span><br><span>--- a/pcu/PCU_Tests_RAW.ttcn</span><br><span>+++ b/pcu/PCU_Tests_RAW.ttcn</span><br><span>@@ -477,6 +477,89 @@</span><br><span>  }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated pcu_if_state {</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Server started, waiting for connection from the BTS */</span><br><span style="color: hsl(120, 100%, 40%);">+     PCU_IF_ST_INIT,</span><br><span style="color: hsl(120, 100%, 40%);">+       /* The BTS is connected and wants TIME.ind / RTS.ind from us */</span><br><span style="color: hsl(120, 100%, 40%);">+       PCU_IF_ST_CONNECTED</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 RAW_PCU_BTS_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     /* TDMA frame clock generator. One TDMA frame is 4.615 ms long */</span><br><span style="color: hsl(120, 100%, 40%);">+     timer T_TDMAClock := 4.615 / 1000.0;</span><br><span style="color: hsl(120, 100%, 40%);">+  var integer tdma_abs_fn := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ var integer tdma_rel_fn := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* PCU interface (UNIX domain socket) */</span><br><span style="color: hsl(120, 100%, 40%);">+      var pcu_if_state g_pcu_conn_state := PCU_IF_ST_INIT;</span><br><span style="color: hsl(120, 100%, 40%);">+  var ConnectionId g_pcu_conn_id := -1;</span><br><span style="color: hsl(120, 100%, 40%);">+ port PCUIF_CODEC_PT PCU;</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%);">+private function f_bts_ct_handler(integer bts_nr, charstring pcu_sock_path)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on RAW_PCU_BTS_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Port mappings */</span><br><span style="color: hsl(120, 100%, 40%);">+   map(self:PCU, system:PCU);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Init the Unix Domain Socket */</span><br><span style="color: hsl(120, 100%, 40%);">+     log("Init PCU interface on '" & pcu_sock_path & "'");</span><br><span style="color: hsl(120, 100%, 40%);">+     g_pcu_conn_id := f_pcuif_listen(PCU, pcu_sock_path);</span><br><span style="color: hsl(120, 100%, 40%);">+  PCU.receive(UD_connected:?);</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%);">+ /* Wait for PCU_VERSION and return INFO_IND */</span><br><span style="color: hsl(120, 100%, 40%);">+        [g_pcu_conn_state == PCU_IF_ST_INIT] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_TXT_IND(0, PCU_VERSION, ?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+            log("OsmoPCU is now connected, sending INFO.ind");</span><br><span style="color: hsl(120, 100%, 40%);">+          g_pcu_conn_state := PCU_IF_ST_CONNECTED;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+            /* FIXME: make sure to use parameters from mp_gb_cfg.cell_id in the PCU INFO IND */</span><br><span style="color: hsl(120, 100%, 40%);">+           PCU.send(t_SD_PCUIF(g_pcu_conn_id, ts_PCUIF_INFO_IND(</span><br><span style="color: hsl(120, 100%, 40%);">+                 bts_nr := bts_nr, nsei := mp_nsconfig.nsei,</span><br><span style="color: hsl(120, 100%, 40%);">+                   nsvci := mp_nsconfig.nsvci, bvci := mp_gb_cfg.bvci,</span><br><span style="color: hsl(120, 100%, 40%);">+                   local_port := mp_nsconfig.remote_udp_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                    remote_port := mp_nsconfig.local_udp_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                    remote_ip := f_inet_haddr(mp_nsconfig.local_ip))));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+         /* Start TDMA clock timer */</span><br><span style="color: hsl(120, 100%, 40%);">+          T_TDMAClock.start;</span><br><span style="color: hsl(120, 100%, 40%);">+            repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     /* TODO: separate component for the clock module */</span><br><span style="color: hsl(120, 100%, 40%);">+   [g_pcu_conn_state == PCU_IF_ST_CONNECTED] T_TDMAClock.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+               /* We don't really need to send every frame to OsmoPCU, because</span><br><span style="color: hsl(120, 100%, 40%);">+            * it omits frame numbers not starting at a MAC block. */</span><br><span style="color: hsl(120, 100%, 40%);">+             if (tdma_rel_fn == 0 or tdma_rel_fn == 4 or tdma_rel_fn == 8) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       // log("Sending clock indication fn=", tdma_abs_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+                        PCU.send(t_SD_PCUIF(g_pcu_conn_id, ts_PCUIF_TIME_IND(bts_nr, tdma_abs_fn)));</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%);">+           /* TDMA hyperframe period is (2048 * 51 * 26) frames */</span><br><span style="color: hsl(120, 100%, 40%);">+               if (tdma_abs_fn == (2048 * 51 * 26)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        tdma_abs_fn := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+                     tdma_rel_fn := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      tdma_abs_fn := tdma_abs_fn + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                       tdma_rel_fn := tdma_abs_fn mod 13;</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%);">+           /* Keep it going */</span><br><span style="color: hsl(120, 100%, 40%);">+           T_TDMAClock.start;</span><br><span style="color: hsl(120, 100%, 40%);">+            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 style="color: hsl(120, 100%, 40%);">+testcase TC_bts_ct_tuwat() runs on RAW_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      var RAW_PCU_BTS_CT vc_EUSE;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Init NS codec (emulate SGSN) */</span><br><span style="color: hsl(120, 100%, 40%);">+    f_init_ns_codec();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_EUSE := RAW_PCU_BTS_CT.create("BTS-" & testcasename());</span><br><span style="color: hsl(120, 100%, 40%);">+      vc_EUSE.start(f_bts_ct_handler(0, mp_pcu_sock_path));</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_EUSE.done;</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_ns_reset() );</span><br><span>    execute( TC_ns_reset_retrans() );</span><br><span>@@ -491,6 +574,7 @@</span><br><span> </span><br><span>  /* Timing Advance tests (see GSM TS 43.064, section 6) */</span><br><span>    execute( TC_ta_init_prach() );</span><br><span style="color: hsl(120, 100%, 40%);">+        execute( TC_bts_ct_tuwat() );</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/c/osmo-ttcn3-hacks/+/15430">change 15430</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/+/15430"/><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: I63a23abebab88fd5318eb4d907d6028e7c38e9a3 </div>
<div style="display:none"> Gerrit-Change-Number: 15430 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>