<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14370">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">BTS_Tests.ttcn: fix TRXC port mapping between test_CT and ConnHdlr<br><br>Before this patch, sending special TRXC commands to FakeTRX, such as<br>FAKE_TOA and FAKE_RSSI, from ConnHdlr resulted in a receive timeout<br>waiting for the response.<br><br>As it turned out, both the test_CT and the ConnHdlr have a TRXC port,<br>as depending on the test one would want to globally control it<br>from test_CT or from within a ConnHdlr.<br><br>However, only one of the two should be active (connected) at any given<br>point in time. Otherwise we'll have two UDP sockets on the same bind<br>port, and it's more or less random on which of them it ends up.<br><br>Let's add an optional parameter 'trxc_comp', which would indicate<br>whether we need to control TRXC from ConnHdlr or not.<br><br>Let's get rid of both f_trxc_connect() and f_main_trxc_connect(),<br>which basically do the same, but run on different components.<br><br>Change-Id: Ie7d311bf8f03bf9b1d29b5bb28ffad793f215fd1<br>Closes: OS#4039<br>---<br>M bts/BTS_Tests.ttcn<br>1 file changed, 35 insertions(+), 37 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/70/14370/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn</span><br><span>index ba67889..b9091cc 100644</span><br><span>--- a/bts/BTS_Tests.ttcn</span><br><span>+++ b/bts/BTS_Tests.ttcn</span><br><span>@@ -117,7 +117,7 @@</span><br><span>   /* L1CTL port (for classic tests) */</span><br><span>         port L1CTL_PT L1CTL;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* TRXC port (for classic tests) */</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Optional TRXC connection to FakeTRX (BTS side) */</span><br><span>         port TRXC_CODEC_PT BTS_TRXC;</span><br><span>         var integer g_bts_trxc_conn_id;</span><br><span> </span><br><span>@@ -160,6 +160,7 @@</span><br><span> type component ConnHdlr extends RSL_DchanHdlr, lapdm_test_CT {</span><br><span>  port L1CTL_PT L1CTL;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+      /* Optional TRXC connection to FakeTRX (BTS side) */</span><br><span>         port TRXC_CODEC_PT BTS_TRXC;</span><br><span>         var integer g_bts_trxc_conn_id;</span><br><span> </span><br><span>@@ -333,6 +334,22 @@</span><br><span>   }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_init_trxc(TRXC_CODEC_PT pt, charstring id,</span><br><span style="color: hsl(120, 100%, 40%);">+                          out integer trxc_conn_id) {</span><br><span style="color: hsl(120, 100%, 40%);">+      var Result res;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     map(self:BTS_TRXC, system:BTS_TRXC);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        res := TRXC_CodecPort_CtrlFunct.f_IPL4_connect(pt, mp_bts_trxc_ip, mp_bts_trxc_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 "", -1, -1, { udp := {} }, {});</span><br><span style="color: hsl(120, 100%, 40%);">+      if (not ispresent(res.connId)) {</span><br><span style="color: hsl(120, 100%, 40%);">+              Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    "Could not connect to the control (TRXC) interface " &</span><br><span style="color: hsl(120, 100%, 40%);">+                                  "of FakeTRX, check your configuration");</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+     trxc_conn_id := res.connId;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* global init function */</span><br><span> function f_init() runs on test_CT {</span><br><span>        var charstring id := testcasename();</span><br><span>@@ -399,7 +416,7 @@</span><br><span>   if (mp_bts_trxc_port != -1) {</span><br><span>                var TrxcMessage ret;</span><br><span>                 /* start with a default moderate timing offset equalling TA=2 */</span><br><span style="color: hsl(0, 100%, 40%);">-                f_main_trxc_connect();</span><br><span style="color: hsl(120, 100%, 40%);">+                f_init_trxc(BTS_TRXC, id, g_bts_trxc_conn_id);</span><br><span>               ret := f_TRXC_transceive(BTS_TRXC, g_bts_trxc_conn_id, valueof(ts_TRXC_FAKE_TIMING(2*256)));</span><br><span>         }</span><br><span> </span><br><span>@@ -417,7 +434,9 @@</span><br><span> type function void_fn(charstring id) runs on ConnHdlr;</span><br><span> </span><br><span> /* create a new test component */</span><br><span style="color: hsl(0, 100%, 40%);">-function f_start_handler(void_fn fn, ConnHdlrPars pars, boolean pcu_comp := false)</span><br><span style="color: hsl(120, 100%, 40%);">+function f_start_handler(void_fn fn, ConnHdlrPars pars,</span><br><span style="color: hsl(120, 100%, 40%);">+                      boolean pcu_comp := false,</span><br><span style="color: hsl(120, 100%, 40%);">+                    boolean trxc_comp := false)</span><br><span> runs on test_CT return ConnHdlr {</span><br><span>    var charstring id := testcasename();</span><br><span>         var ConnHdlr vc_conn;</span><br><span>@@ -426,13 +445,18 @@</span><br><span>        /* connect to RSL Emulation main component */</span><br><span>        connect(vc_conn:RSL, vc_RSL:CLIENT_PT);</span><br><span>      connect(vc_conn:RSL_PROC, vc_RSL:RSL_PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* The ConnHdlr component may want to talk to some ports directly,</span><br><span style="color: hsl(120, 100%, 40%);">+     * so we disconnect it from the test_CT and connect it to the component.</span><br><span style="color: hsl(120, 100%, 40%);">+       * This obviously only works for one component, i.e. no concurrency. */</span><br><span>      if (pcu_comp) {</span><br><span style="color: hsl(0, 100%, 40%);">-         /* the ConnHdlr component wants to talk directly to the PCU, so disconnect</span><br><span style="color: hsl(0, 100%, 40%);">-               * it from the test_CT and connect it to the component.  This obviously only</span><br><span style="color: hsl(0, 100%, 40%);">-             * works for one component, i.e. no concurrency */</span><br><span>           unmap(self:PCU, system:PCU);</span><br><span>                 map(vc_conn:PCU, system:PCU);</span><br><span>        }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (trxc_comp) {</span><br><span style="color: hsl(120, 100%, 40%);">+              unmap(self:BTS_TRXC, system:BTS_TRXC);</span><br><span style="color: hsl(120, 100%, 40%);">+                map(vc_conn:BTS_TRXC, system:BTS_TRXC);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span> </span><br><span>        vc_conn.start(f_handler_init(fn, id, pars));</span><br><span>         return vc_conn;</span><br><span>@@ -459,19 +483,6 @@</span><br><span>       f_L1CTL_FBSB(L1CTL, { false, mp_trx0_arfcn }, ccch_mode, mp_rxlev_exp);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_trxc_connect() runs on ConnHdlr {</span><br><span style="color: hsl(0, 100%, 40%);">-    map(self:BTS_TRXC, system:BTS_TRXC);</span><br><span style="color: hsl(0, 100%, 40%);">-    var Result res;</span><br><span style="color: hsl(0, 100%, 40%);">- res := TRXC_CodecPort_CtrlFunct.f_IPL4_connect(BTS_TRXC, mp_bts_trxc_ip, mp_bts_trxc_port,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                      "", -1, -1, {udp:={}}, {});</span><br><span style="color: hsl(0, 100%, 40%);">-   if (not ispresent(res.connId)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,</span><br><span style="color: hsl(0, 100%, 40%);">-                                      "Could not connect to the control (TRXC) interface " &</span><br><span style="color: hsl(0, 100%, 40%);">-                                    "of FakeTRX, check your configuration");</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-       g_bts_trxc_conn_id := res.connId;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> private function f_trxc_fake_rssi(TRXC_RSSI rssi) runs on ConnHdlr {</span><br><span>   var TrxcMessage ret;</span><br><span>         ret := f_TRXC_transceive(BTS_TRXC, g_bts_trxc_conn_id, valueof(ts_TRXC_FAKE_RSSI(rssi)));</span><br><span>@@ -492,7 +503,7 @@</span><br><span>      f_connect_reset(L1CTL);</span><br><span> </span><br><span>  if (mp_bts_trxc_port != -1) {</span><br><span style="color: hsl(0, 100%, 40%);">-           f_trxc_connect();</span><br><span style="color: hsl(120, 100%, 40%);">+             f_init_trxc(BTS_TRXC, id, g_bts_trxc_conn_id);</span><br><span>       }</span><br><span> </span><br><span>        g_Tguard.start(pars.t_guard);</span><br><span>@@ -1430,21 +1441,6 @@</span><br><span>       Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_main_trxc_connect() runs on test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-  map(self:BTS_TRXC, system:BTS_TRXC);</span><br><span style="color: hsl(0, 100%, 40%);">-    var Result res;</span><br><span style="color: hsl(0, 100%, 40%);">- res := TRXC_CodecPort_CtrlFunct.f_IPL4_connect(BTS_TRXC, mp_bts_trxc_ip, mp_bts_trxc_port,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                      "", -1, -1, {udp:={}}, {});</span><br><span style="color: hsl(0, 100%, 40%);">-   if (not ispresent(res.connId)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,</span><br><span style="color: hsl(0, 100%, 40%);">-                                      "Could not connect to the control (TRXC) interface " &</span><br><span style="color: hsl(0, 100%, 40%);">-                                    "of FakeTRX, check your configuration");</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-       g_bts_trxc_conn_id := res.connId;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> private function f_rach_toffs(int16_t toffs256, boolean expect_pass) runs on test_CT {</span><br><span>         var TrxcMessage ret;</span><br><span>         /* tell fake_trx to use a given timing offset for all bursts */</span><br><span>@@ -1897,7 +1893,8 @@</span><br><span>      f_init();</span><br><span>    for (var integer tn := 1; tn <= 4; tn := tn+1) {</span><br><span>          pars := valueof(t_Pars(t_RslChanNr_Bm(tn), ts_RSL_ChanMode_SIGN));</span><br><span style="color: hsl(0, 100%, 40%);">-              vc_conn := f_start_handler(refers(f_TC_meas_res_periodic), pars);</span><br><span style="color: hsl(120, 100%, 40%);">+             vc_conn := f_start_handler(refers(f_TC_meas_res_periodic), pars,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         pcu_comp := false, trxc_comp := true);</span><br><span>            vc_conn.done;</span><br><span>        }</span><br><span>    Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span>@@ -2064,7 +2061,8 @@</span><br><span>        var ConnHdlrPars pars;</span><br><span>       f_init();</span><br><span>    pars := valueof(t_Pars(t_RslChanNr_Bm(1), ts_RSL_ChanMode_SIGN));</span><br><span style="color: hsl(0, 100%, 40%);">-       vc_conn := f_start_handler(refers(f_tc_rsl_chan_initial_ta), pars);</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_conn := f_start_handler(refers(f_tc_rsl_chan_initial_ta), pars,</span><br><span style="color: hsl(120, 100%, 40%);">+                               pcu_comp := false, trxc_comp := true);</span><br><span>    vc_conn.done;</span><br><span>        Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14370">change 14370</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/+/14370"/><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: Ie7d311bf8f03bf9b1d29b5bb28ffad793f215fd1 </div>
<div style="display:none"> Gerrit-Change-Number: 14370 </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>