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