<p>daniel <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/11452">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Pau Espin Pedrol: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">BTS_Tests: Use Misc_Helpers.f_shutdown consistently<br><br>Replace all calls to setverdict(fail) with f_shutdown() since I'd rather<br>fail and stop early in case we encounter an error.<br>Only replace setverdict(pass) with f_shutdown() if it is followed by<br>mtc.stop<br><br>Remove internal function f_shutdown and use the one from Misc_Helpers<br><br>Change-Id: Ia8b01a1876e969d6f0760ea625e4df83af4f54ca<br>---<br>M bts/BTS_Tests.ttcn<br>M bts/gen_links.sh<br>2 files changed, 131 insertions(+), 208 deletions(-)<br><br></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 fe0a933..5b073ef 100644</span><br><span>--- a/bts/BTS_Tests.ttcn</span><br><span>+++ b/bts/BTS_Tests.ttcn</span><br><span>@@ -1,5 +1,6 @@</span><br><span> module BTS_Tests {</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+import from Misc_Helpers all;</span><br><span> import from General_Types all;</span><br><span> import from GSM_Types all;</span><br><span> import from GSM_RR_Types all;</span><br><span>@@ -270,8 +271,7 @@</span><br><span>                pcu_last_info := sd.data;</span><br><span>            }</span><br><span>    [] pt.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(?, ?, ?))) -> value sd {</span><br><span style="color: hsl(0, 100%, 40%);">-             setverdict(fail, "Invalid PCU Version/BTS Number received");</span><br><span style="color: hsl(0, 100%, 40%);">-          mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Invalid PCU Version/BTS Number received");</span><br><span>             }</span><br><span> }</span><br><span> </span><br><span>@@ -289,8 +289,7 @@</span><br><span>     alt {</span><br><span>        [] as_pcu_info_ind(pt, pcu_conn_id, pcu_last_info);</span><br><span>  [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          setverdict(fail, "Timeout waiting for PCU INFO_IND");</span><br><span style="color: hsl(0, 100%, 40%);">-         mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for PCU INFO_IND");</span><br><span>            }</span><br><span>    }</span><br><span> }</span><br><span>@@ -341,8 +340,7 @@</span><br><span>         alt {</span><br><span>        [] RSL_CCHAN.receive(ASP_IPA_Event:{up_down := ASP_IPA_EVENT_UP});</span><br><span>   [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          setverdict(fail, "Timeout waiting for ASP_IPA_EVENT_UP");</span><br><span style="color: hsl(0, 100%, 40%);">-             mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for ASP_IPA_EVENT_UP");</span><br><span>                }</span><br><span>    }</span><br><span>    f_sleep(0.5);   /* workaround for OS#3000 */</span><br><span>@@ -366,12 +364,6 @@</span><br><span>  }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-function f_shutdown() runs on test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-       /* mtc.stop cleanly stops testcase execution to avoid unclean shutdown */</span><br><span style="color: hsl(0, 100%, 40%);">-       all component.stop;</span><br><span style="color: hsl(0, 100%, 40%);">-     mtc.stop;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /* Attach L1CTL to master test_CT (classic tests, non-handler mode) */</span><br><span> function f_init_l1ctl() runs on test_CT {</span><br><span>    map(self:L1CTL, system:L1CTL);</span><br><span>@@ -415,8 +407,7 @@</span><br><span> </span><br><span> private altstep as_Tguard() runs on ConnHdlr {</span><br><span>   [] g_Tguard.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-           setverdict(fail, "Tguard timeout");</span><br><span style="color: hsl(0, 100%, 40%);">-           mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Tguard timeout");</span><br><span>      }</span><br><span> }</span><br><span> </span><br><span>@@ -430,8 +421,7 @@</span><br><span>     res := TRXC_CodecPort_CtrlFunct.f_IPL4_connect(BB_TRXC, mp_bb_trxc_ip, mp_bb_trxc_port,</span><br><span>                                                      "", -1, -1, {udp:={}}, {});</span><br><span>        if (not ispresent(res.connId)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                setverdict(fail, "Could not connect to trx-control interface of trxcon, check your configuration");</span><br><span style="color: hsl(0, 100%, 40%);">-           mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Could not connect to trx-control interface of trxcon, check your configuration");</span><br><span>      }</span><br><span>    g_bb_trxc_conn_id := res.connId;</span><br><span> }</span><br><span>@@ -481,15 +471,13 @@</span><br><span>                setverdict(pass);</span><br><span>            }</span><br><span>    [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          setverdict(fail, "Timeout expecting " & id);</span><br><span style="color: hsl(0, 100%, 40%);">-              mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout expecting " & id);</span><br><span>                 }</span><br><span>    [not ignore_other] as_l1_sacch();</span><br><span>    [not ignore_other] as_meas_res();</span><br><span>    [not ignore_other] as_l1_dcch();</span><br><span>     [not ignore_other] RSL.receive {</span><br><span style="color: hsl(0, 100%, 40%);">-                setverdict(fail, "Unexpected RSL message received");</span><br><span style="color: hsl(0, 100%, 40%);">-          mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unexpected RSL message received");</span><br><span>             }</span><br><span>    [ignore_other] RSL.receive { repeat; }</span><br><span>       }</span><br><span>@@ -566,7 +554,7 @@</span><br><span>      f_init(testcasename());</span><br><span>      vc_conn := f_start_handler(refers(f_TC_chan_act_stress), pars);</span><br><span>      vc_conn.done;</span><br><span style="color: hsl(0, 100%, 40%);">-   f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> /* Test if re-activation of an already active channel fails as expected */</span><br><span>@@ -576,8 +564,7 @@</span><br><span>   RSL.send(ts_RSL_CHAN_ACT(g_chan_nr, g_pars.chan_mode));</span><br><span>      alt {</span><br><span>        [] RSL.receive(tr_RSL_CHAN_ACT_ACK(g_chan_nr)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                setverdict(fail, "Unexpected CHAN ACT ACK on double activation");</span><br><span style="color: hsl(0, 100%, 40%);">-             mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unexpected CHAN ACT ACK on double activation");</span><br><span>                }</span><br><span>    [] RSL.receive(tr_RSL_CHAN_ACT_NACK(g_chan_nr)) {</span><br><span>            setverdict(pass);</span><br><span>@@ -591,7 +578,7 @@</span><br><span>      f_init();</span><br><span>    vc_conn := f_start_handler(refers(f_TC_chan_act_react), pars);</span><br><span>       vc_conn.done;</span><br><span style="color: hsl(0, 100%, 40%);">-   f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> /* Attempt to de-activate a channel that's not active */</span><br><span>@@ -604,8 +591,7 @@</span><br><span>                 setverdict(pass);</span><br><span>            }</span><br><span>    [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          setverdict(fail, "Timeout expecting RF_CHAN_REL_ACK");</span><br><span style="color: hsl(0, 100%, 40%);">-                mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout expecting RF_CHAN_REL_ACK");</span><br><span>           }</span><br><span>    }</span><br><span> }</span><br><span>@@ -614,7 +600,7 @@</span><br><span>         f_init();</span><br><span>    var ConnHdlr vc_conn := f_start_handler(refers(f_TC_chan_deact_not_active), pars);</span><br><span>   vc_conn.done;</span><br><span style="color: hsl(0, 100%, 40%);">-   f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> /* attempt to activate channel with wrong RSL Channel Nr IE; expect NACK */</span><br><span>@@ -622,8 +608,7 @@</span><br><span>  RSL.send(ts_RSL_CHAN_ACT(g_chan_nr, g_pars.chan_mode));</span><br><span>      alt {</span><br><span>        [] RSL.receive(tr_RSL_CHAN_ACT_ACK(g_chan_nr)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                setverdict(fail, "Unexpected CHAN ACT ACK");</span><br><span style="color: hsl(0, 100%, 40%);">-          mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unexpected CHAN ACT ACK");</span><br><span>             }</span><br><span>    [] RSL.receive(tr_RSL_CHAN_ACT_NACK(g_chan_nr)) {</span><br><span>            setverdict(pass);</span><br><span>@@ -667,7 +652,7 @@</span><br><span>              vc_conn := f_start_handler(refers(f_TC_chan_act_wrong_nr), pars);</span><br><span>            vc_conn.done;</span><br><span>        }</span><br><span style="color: hsl(0, 100%, 40%);">-       f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> /* execute the same callback function on a variety of logical channels */</span><br><span>@@ -684,7 +669,7 @@</span><br><span>            vc_conn.done;</span><br><span>        }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> /***********************************************************************</span><br><span>@@ -696,8 +681,7 @@</span><br><span>     T_sacch.start;</span><br><span>       alt {</span><br><span>        [not exp] L1CTL.receive(tr_L1CTL_DATA_IND(g_chan_nr, tr_RslLinkID_SACCH(0))) {</span><br><span style="color: hsl(0, 100%, 40%);">-          setverdict(fail, "Received SACCH when not expecting it");</span><br><span style="color: hsl(0, 100%, 40%);">-             mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Received SACCH when not expecting it");</span><br><span>                }</span><br><span>    [not exp] T_sacch.timeout {</span><br><span>          setverdict(pass);</span><br><span>@@ -706,8 +690,7 @@</span><br><span>              setverdict(pass);</span><br><span>            }</span><br><span>    [exp] T_sacch.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-         setverdict(fail, "Timeout waiting for SACCH on ", g_chan_nr);</span><br><span style="color: hsl(0, 100%, 40%);">-         mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Timeout waiting for SACCH on ", g_chan_nr));</span><br><span>           }</span><br><span>    [] L1CTL.receive { repeat; }</span><br><span>         [] RSL.receive { repeat; }</span><br><span>@@ -750,7 +733,7 @@</span><br><span>             vc_conn.done;</span><br><span>        }</span><br><span>    /* TODO: do the above in parallel, rather than sequentially? */</span><br><span style="color: hsl(0, 100%, 40%);">- f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> /* verify that given SACCH payload is present */</span><br><span>@@ -771,8 +754,7 @@</span><br><span>             }</span><br><span>    [] L1CTL.receive { repeat; }</span><br><span>         [] T_sacch.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-            setverdict(fail, "Timeout waiting for SACCH ", l3_exp);</span><br><span style="color: hsl(0, 100%, 40%);">-               mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Timeout waiting for SACCH ", l3_exp));</span><br><span>                 }</span><br><span>    }</span><br><span> }</span><br><span>@@ -788,8 +770,7 @@</span><br><span>         [] L1CTL.receive(tr_L1CTL_DATA_IND(g_chan_nr, tr_RslLinkID_SACCH(0))) -> value dl {</span><br><span>               var octetstring l3 := substr(dl.payload.data_ind.payload, 4, 19);</span><br><span>            if (match(l3, l3_exp)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        setverdict(fail, "Received unexpected SACCH ", dl);</span><br><span style="color: hsl(0, 100%, 40%);">-                   mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Received unexpected SACCH ", dl));</span><br><span>             } else {</span><br><span>                     repeat;</span><br><span>              }</span><br><span>@@ -832,7 +813,7 @@</span><br><span>              vc_conn.done;</span><br><span>        }</span><br><span>    /* TODO: do the above in parallel, rather than sequentially? */</span><br><span style="color: hsl(0, 100%, 40%);">- f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> /* Test for lchan-specific SACCH INFO MODIFY (TS 48.058 4.12) */</span><br><span>@@ -880,7 +861,7 @@</span><br><span>             vc_conn.done;</span><br><span>        }</span><br><span>    /* TODO: do the above in parallel, rather than sequentially? */</span><br><span style="color: hsl(0, 100%, 40%);">- f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> /* Test SACCH scheduling of multiple different SI message types */</span><br><span>@@ -923,7 +904,7 @@</span><br><span>           vc_conn.done;</span><br><span>        }</span><br><span>    /* TODO: do the above in parallel, rather than sequentially? */</span><br><span style="color: hsl(0, 100%, 40%);">- f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> /* Test if SACH information is modified as expected */</span><br><span>@@ -969,7 +950,7 @@</span><br><span>               vc_conn.done;</span><br><span>        }</span><br><span>    /* TODO: do the above in parallel, rather than sequentially? */</span><br><span style="color: hsl(0, 100%, 40%);">- f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> /* TODO: Test for SACCH information present in RSL CHAN ACT (overrides FILLING) */</span><br><span>@@ -1017,8 +998,7 @@</span><br><span>          var OCT1 ra := f_rnd_ra_cs();</span><br><span>                var GsmFrameNumber fn := f_L1CTL_RACH(L1CTL, oct2int(ra));</span><br><span>           if (fn == fn_last) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    setverdict(fail, "Two RACH in same FN?!?");</span><br><span style="color: hsl(0, 100%, 40%);">-                   mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Two RACH in same FN?!?");</span><br><span>              }</span><br><span>            fn_last := fn;</span><br><span> </span><br><span>@@ -1029,18 +1009,16 @@</span><br><span>                         T.stop;</span><br><span>                      }</span><br><span>            [] RSL_CCHAN.receive(tr_RSL_UD(tr_RSL_CHAN_RQD(?, ?, ?))) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     setverdict(fail, "Unexpected CHAN RQD");</span><br><span style="color: hsl(0, 100%, 40%);">-                      mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unexpected CHAN RQD");</span><br><span>                         }</span><br><span>            [] RSL_CCHAN.receive { repeat; }</span><br><span>             [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-                  setverdict(fail, "Timeout waiting for CHAN RQD");</span><br><span style="color: hsl(0, 100%, 40%);">-                     mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for CHAN RQD");</span><br><span>                        }</span><br><span>            }</span><br><span>    }</span><br><span>    setverdict(pass);</span><br><span style="color: hsl(0, 100%, 40%);">-       f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> /* Send 1000 RACH Requests (flood ~ 89/s) and count if count(Abis) == count(Um) */</span><br><span>@@ -1055,8 +1033,7 @@</span><br><span>                 var OCT1 ra := f_rnd_ra_cs();</span><br><span>                var GsmFrameNumber fn := f_L1CTL_RACH(L1CTL, oct2int(ra));</span><br><span>           if (fn == fn_last) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    setverdict(fail, "Two RACH in same FN?!?");</span><br><span style="color: hsl(0, 100%, 40%);">-                   mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Two RACH in same FN?!?");</span><br><span>              }</span><br><span>            fn_last := fn;</span><br><span>       }</span><br><span>@@ -1075,9 +1052,9 @@</span><br><span>    if (rsl_chrqd == 1000) {</span><br><span>             setverdict(pass);</span><br><span>    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                setverdict(fail, "Received only ", rsl_chrqd, " out of 1000 RACH");</span><br><span style="color: hsl(120, 100%, 40%);">+               Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Received only ", rsl_chrqd, " out of 1000 RACH"));</span><br><span>   }</span><br><span style="color: hsl(0, 100%, 40%);">-       f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> private function f_main_trxc_connect() runs on test_CT {</span><br><span>@@ -1086,8 +1063,7 @@</span><br><span>   res := TRXC_CodecPort_CtrlFunct.f_IPL4_connect(BB_TRXC, mp_bb_trxc_ip, mp_bb_trxc_port,</span><br><span>                                                      "", -1, -1, {udp:={}}, {});</span><br><span>        if (not ispresent(res.connId)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                setverdict(fail, "Could not connect to trx-control interface of trxcon, check your configuration");</span><br><span style="color: hsl(0, 100%, 40%);">-           mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Could not connect to trx-control interface of trxcon, check your configuration");</span><br><span>      }</span><br><span>    g_bb_trxc_conn_id := res.connId;</span><br><span> }</span><br><span>@@ -1110,16 +1086,14 @@</span><br><span>              setverdict(pass);</span><br><span>            }</span><br><span>    [not expect_pass] RSL_CCHAN.receive(tr_RSL_UD(tr_RSL_CHAN_RQD(ra, fn))) {</span><br><span style="color: hsl(0, 100%, 40%);">-               setverdict(fail, "RACH passed but was expected to be dropped: ", toffs256);</span><br><span style="color: hsl(0, 100%, 40%);">-           mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("RACH passed but was expected to be dropped: ", toffs256));</span><br><span>             }</span><br><span>    [] RSL_CCHAN.receive { repeat; }</span><br><span>     [not expect_pass] T.timeout {</span><br><span>                setverdict(pass);</span><br><span>            }</span><br><span>    [expect_pass] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-               setverdict(fail, "Timeout waiting for CHAN RQD");</span><br><span style="color: hsl(0, 100%, 40%);">-             mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for CHAN RQD");</span><br><span>                }</span><br><span>    }</span><br><span> }</span><br><span>@@ -1146,7 +1120,7 @@</span><br><span>       /* more than 63 bits is not legal / permitted */</span><br><span>     f_rach_toffs(64*256, false);</span><br><span>         f_rach_toffs(127*256, false);</span><br><span style="color: hsl(0, 100%, 40%);">-   f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> /***********************************************************************</span><br><span>@@ -1322,17 +1296,14 @@</span><br><span>                         g_first_meas_res := false;</span><br><span>                   repeat;</span><br><span>              } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        setverdict(fail, "Received unspecific MEAS RES ", rsl);</span><br><span style="color: hsl(0, 100%, 40%);">-                       mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Received unspecific MEAS RES ", rsl));</span><br><span>                 }</span><br><span>            }</span><br><span>    [] RSL.receive(tr_RSL_MEAS_RES(?)) -> value rsl {</span><br><span style="color: hsl(0, 100%, 40%);">-            setverdict(fail, "Received unexpected MEAS RES ", rsl);</span><br><span style="color: hsl(0, 100%, 40%);">-               mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Received unexpected MEAS RES ", rsl));</span><br><span>                 }</span><br><span>    [g_Tmeas_exp.running] g_Tmeas_exp.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-             setverdict(fail, "Didn't receive expected measurement result")</span><br><span style="color: hsl(0, 100%, 40%);">-            mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Didn't receive expected measurement result")</span><br><span>               }</span><br><span> }</span><br><span> </span><br><span>@@ -1347,7 +1318,9 @@</span><br><span>   case (RSL_ALG_ID_A5_6) { return 6; }</span><br><span>         case (RSL_ALG_ID_A5_7) { return 7; }</span><br><span>         case else {</span><br><span style="color: hsl(0, 100%, 40%);">-             setverdict(fail, "Unknwon Algorithm ID");</span><br><span style="color: hsl(120, 100%, 40%);">+           Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unknwon Algorithm ID");</span><br><span style="color: hsl(120, 100%, 40%);">+         /* Make compiler happy by calling mtc.stop here. It is already</span><br><span style="color: hsl(120, 100%, 40%);">+                 * called in f_shutdown */</span><br><span>           mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span>@@ -1363,7 +1336,9 @@</span><br><span>    case (RSL_ALG_ID_A5_6) { return '101'B; }</span><br><span>    case (RSL_ALG_ID_A5_7) { return '110'B; }</span><br><span>    case else {</span><br><span style="color: hsl(0, 100%, 40%);">-             setverdict(fail, "Unknwon Algorithm ID");</span><br><span style="color: hsl(120, 100%, 40%);">+           Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unknwon Algorithm ID");</span><br><span style="color: hsl(120, 100%, 40%);">+         /* Make compiler happy by calling mtc.stop here. It is already</span><br><span style="color: hsl(120, 100%, 40%);">+                 * called in f_shutdown */</span><br><span>           mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span>@@ -1435,13 +1410,12 @@</span><br><span>  [] as_l1_dcch();</span><br><span>     [] L1CTL.receive { repeat; }</span><br><span>         [g_Tmeas_exp.running] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-               /* as_meas_res() would have done setverdict(fail) / mtc.stop in case</span><br><span style="color: hsl(120, 100%, 40%);">+          /* as_meas_res() would have done Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail) in case</span><br><span>           * of any earlier errors, so if we reach this timeout, we're good */</span><br><span>             setverdict(pass);</span><br><span>            }</span><br><span>    [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          setverdict(fail, "No MEAS RES received at all");</span><br><span style="color: hsl(0, 100%, 40%);">-              mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "No MEAS RES received at all");</span><br><span>                 }</span><br><span>    }</span><br><span>    f_rsl_chan_deact();</span><br><span>@@ -1457,7 +1431,7 @@</span><br><span>          vc_conn := f_start_handler(refers(f_TC_meas_res_periodic), pars);</span><br><span>            vc_conn.done;</span><br><span>        }</span><br><span style="color: hsl(0, 100%, 40%);">-       f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> testcase TC_meas_res_sign_tchh() runs on test_CT {</span><br><span>     var ConnHdlr vc_conn;</span><br><span>@@ -1468,7 +1442,7 @@</span><br><span>                vc_conn := f_start_handler(refers(f_TC_meas_res_periodic), pars);</span><br><span>            vc_conn.done;</span><br><span>        }</span><br><span style="color: hsl(0, 100%, 40%);">-       f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> testcase TC_meas_res_sign_sdcch4() runs on test_CT {</span><br><span>   var ConnHdlr vc_conn;</span><br><span>@@ -1479,7 +1453,7 @@</span><br><span>                vc_conn := f_start_handler(refers(f_TC_meas_res_periodic), pars);</span><br><span>            vc_conn.done;</span><br><span>        }</span><br><span style="color: hsl(0, 100%, 40%);">-       f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> testcase TC_meas_res_sign_sdcch8() runs on test_CT {</span><br><span>   var ConnHdlr vc_conn;</span><br><span>@@ -1490,7 +1464,7 @@</span><br><span>                vc_conn := f_start_handler(refers(f_TC_meas_res_periodic), pars);</span><br><span>            vc_conn.done;</span><br><span>        }</span><br><span style="color: hsl(0, 100%, 40%);">-       f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> testcase TC_meas_res_sign_tchh_toa256() runs on test_CT {</span><br><span>      var ConnHdlr vc_conn;</span><br><span>@@ -1503,7 +1477,7 @@</span><br><span>                vc_conn := f_start_handler(refers(f_TC_meas_res_periodic), pars);</span><br><span>            vc_conn.done;</span><br><span>        }</span><br><span style="color: hsl(0, 100%, 40%);">-       f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> </span><br><span>@@ -1524,8 +1498,7 @@</span><br><span>           }</span><br><span>    [] RSL.receive { repeat };</span><br><span>   [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          setverdict(fail, "No CONN FAIL IND received");</span><br><span style="color: hsl(0, 100%, 40%);">-                mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "No CONN FAIL IND received");</span><br><span>           }</span><br><span>    }</span><br><span>    f_rsl_chan_deact();</span><br><span>@@ -1570,8 +1543,7 @@</span><br><span>  fn_check.frame_nr := frame_nr_51;</span><br><span> </span><br><span>        if (bs_ag_blks_res < 0 or bs_ag_blks_res > 7) {</span><br><span style="color: hsl(0, 100%, 40%);">-           setverdict(fail, "bs_ag_blks_res out of valid range (0..7)");</span><br><span style="color: hsl(0, 100%, 40%);">-         mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "bs_ag_blks_res out of valid range (0..7)");</span><br><span>            return;</span><br><span>      }</span><br><span> </span><br><span>@@ -1600,8 +1572,7 @@</span><br><span>                return;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   setverdict(fail, "received paging on AGCH");</span><br><span style="color: hsl(0, 100%, 40%);">-  mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "received paging on AGCH");</span><br><span>     return;</span><br><span> }</span><br><span> </span><br><span>@@ -1716,8 +1687,7 @@</span><br><span>                     repeat;</span><br><span>                      }</span><br><span>            [not cfg.exp_overload]  RSL_CCHAN.receive(tr_RSL_UD(tr_RSL_PAGING_LOAD_IND(0))) {</span><br><span style="color: hsl(0, 100%, 40%);">-                       setverdict(fail, "Unexpected PCH Overload");</span><br><span style="color: hsl(0, 100%, 40%);">-                  mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unexpected PCH Overload");</span><br><span>                     }</span><br><span>            [cfg.exp_load_ind] RSL_CCHAN.receive(tr_RSL_UD(tr_RSL_PAGING_LOAD_IND)) {</span><br><span>                    log("Rx LOAD_IND");</span><br><span>@@ -1775,8 +1745,7 @@</span><br><span>        [] RSL_CCHAN.receive(tr_RSL_UD(tr_RSL_PAGING_LOAD_IND(65535))) { }</span><br><span>   [] RSL_CCHAN.receive(tr_RSL_UD(tr_RSL_PAGING_LOAD_IND)) { repeat; }</span><br><span>  [] T_wait.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-             setverdict(fail, "Waiting for empty paging queue");</span><br><span style="color: hsl(0, 100%, 40%);">-           mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Waiting for empty paging queue");</span><br><span>              }</span><br><span>    [] as_rsl_res_ind();</span><br><span>         }</span><br><span>@@ -1802,12 +1771,12 @@</span><br><span>  };</span><br><span>   var PagingTestState st := f_TC_paging(cfg);</span><br><span>  if (st.num_paging_sent != st.num_paging_rcv_ids) {</span><br><span style="color: hsl(0, 100%, 40%);">-              setverdict(fail, "Expected ", st.num_paging_sent, " pagings but have ",</span><br><span style="color: hsl(0, 100%, 40%);">-                        st.num_paging_rcv_ids);</span><br><span style="color: hsl(120, 100%, 40%);">+            Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Expected ", st.num_paging_sent, " pagings but have ",</span><br><span style="color: hsl(120, 100%, 40%);">+                    st.num_paging_rcv_ids));</span><br><span>  } else {</span><br><span>             setverdict(pass);</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> /* Create ~ 80% paging load (TMSI only) sustained for about 20s, verifying that</span><br><span>@@ -1826,12 +1795,12 @@</span><br><span>  };</span><br><span>   var PagingTestState st := f_TC_paging(cfg);</span><br><span>  if (st.num_paging_sent != st.num_paging_rcv_ids) {</span><br><span style="color: hsl(0, 100%, 40%);">-              setverdict(fail, "Expected ", st.num_paging_sent, " pagings but have ",</span><br><span style="color: hsl(0, 100%, 40%);">-                        st.num_paging_rcv_ids);</span><br><span style="color: hsl(120, 100%, 40%);">+            Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Expected ", st.num_paging_sent, " pagings but have ",</span><br><span style="color: hsl(120, 100%, 40%);">+                    st.num_paging_rcv_ids));</span><br><span>  } else {</span><br><span>             setverdict(pass);</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> /* Create ~ 200% paging load (IMSI only) sustained for about 20s, verifying that</span><br><span>@@ -1853,11 +1822,11 @@</span><br><span>          * slots and will fully drain that buffer before returning */</span><br><span>        var template integer tpl := (st.num_paging_sent*78/100 .. st.num_paging_sent *85/100);</span><br><span>       if (not match(st.num_paging_rcv_ids, tpl)) {</span><br><span style="color: hsl(0, 100%, 40%);">-            setverdict(fail, "Expected ", tpl, " pagings but have ", st.num_paging_rcv_ids);</span><br><span style="color: hsl(120, 100%, 40%);">+          Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Expected ", tpl, " pagings but have ", st.num_paging_rcv_ids));</span><br><span>      } else {</span><br><span>             setverdict(pass);</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> /* Create ~ 200% paging load (TMSI only) sustained for about 20s, verifying that</span><br><span>@@ -1879,11 +1848,11 @@</span><br><span>          * slots and will fully drain that buffer before returning */</span><br><span>        var template integer tpl := (st.num_paging_sent*64/100 .. st.num_paging_sent *72/100);</span><br><span>       if (not match(st.num_paging_rcv_ids, tpl)) {</span><br><span style="color: hsl(0, 100%, 40%);">-            setverdict(fail, "Expected ", tpl, " pagings but have ", st.num_paging_rcv_ids);</span><br><span style="color: hsl(120, 100%, 40%);">+          Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Expected ", tpl, " pagings but have ", st.num_paging_rcv_ids));</span><br><span>      } else {</span><br><span>             setverdict(pass);</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> </span><br><span>@@ -1946,8 +1915,7 @@</span><br><span>           var GsmRrMessage rr := dec_GsmRrMessage(l1_dl.payload.data_ind.payload);</span><br><span>             if (not match(rr, tr_IMM_ASS(42, ?, 5, ?, ?))) {</span><br><span>                     /* FIXME: Why are we seeing paging requests on PCH/AGCH? */</span><br><span style="color: hsl(0, 100%, 40%);">-                     //setverdict(fail, "Unexpected IMM-ASS values on AGCH: ", rr);</span><br><span style="color: hsl(0, 100%, 40%);">-                        //mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                   //Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Unexpected IMM-ASS values on AGCH: ", rr));</span><br><span>          } else {</span><br><span>                     num_rx := num_rx+1;</span><br><span>          }</span><br><span>@@ -1959,16 +1927,15 @@</span><br><span>  res_str := f_fmt_ia_stats(num_tx, num_rx, num_del);</span><br><span>  log("AGCH test: " & res_str);</span><br><span>  if (num_rx + num_del != num_tx) {</span><br><span style="color: hsl(0, 100%, 40%);">-               setverdict(fail, "RX + DEL != TX ?!?: " & res_str);</span><br><span style="color: hsl(0, 100%, 40%);">-               mtc.stop</span><br><span style="color: hsl(120, 100%, 40%);">+              Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "RX + DEL != TX ?!?: " & res_str);</span><br><span>  }</span><br><span>    rx_ratio := int2float(num_rx) / int2float(num_tx);</span><br><span>   if (rx_ratio < exp_pass*0.8 or rx_ratio > exp_pass*1.2) {</span><br><span style="color: hsl(0, 100%, 40%);">-         setverdict(fail, "RX ratio ("&float2str(rx_ratio)&") far from expected ("&float2str(exp_pass)&") " & res_str);</span><br><span style="color: hsl(120, 100%, 40%);">+              Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "RX ratio ("&float2str(rx_ratio)&") far from expected ("&float2str(exp_pass)&") " & res_str);</span><br><span>   } else {</span><br><span>             setverdict(pass);</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> /* send a long burst of 1000 IMM.ASS with 20ms spacing (50 per s); expect 75% of them to be deleted */</span><br><span>@@ -2021,8 +1988,7 @@</span><br><span> /* ensure a given TC slot of the SI vector contains given SI type at least once at TC */</span><br><span> function f_ensure_si_vec_contains(SystemInformationVectorPerTc arr, integer tc, RrMessageType key, boolean ext_bcch := false) {</span><br><span>      if (not f_si_vecslot_contains(arr[tc], key, ext_bcch)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                setverdict(fail, "No ", key, " in TC=", tc, "!");</span><br><span style="color: hsl(0, 100%, 40%);">-         mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("No ", key, " in TC=", tc, "!"));</span><br><span>   }</span><br><span> }</span><br><span> </span><br><span>@@ -2041,8 +2007,7 @@</span><br><span> function f_si_vecslot_contains_n_of_m(SystemInformationVector arr, RrMessageType key, boolean bcch_ext := false, integer n := 1, integer m := 4) return boolean {</span><br><span>      var integer count := 0;</span><br><span>      if (sizeof(arr) < m) {</span><br><span style="color: hsl(0, 100%, 40%);">-               setverdict(fail, "Error: Insufficient SI in array");</span><br><span style="color: hsl(0, 100%, 40%);">-          mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Error: Insufficient SI in array");</span><br><span>     }</span><br><span>    for (var integer i:= 0; i < m; i := i + 1) {</span><br><span>              var integer fn_mod51 := arr[i].frame_number mod 51;</span><br><span>@@ -2063,8 +2028,7 @@</span><br><span> /* ensure a given TC slot of the SI vector contains given SI type at least N out of M times at TC */</span><br><span> function f_ensure_si_vec_contains_n_of_m(SystemInformationVectorPerTc arr, integer tc, RrMessageType key, boolean ext_bcch := false, integer n, integer m) {</span><br><span>  if (not f_si_vecslot_contains_n_of_m(arr[tc], key, ext_bcch, n, m)) {</span><br><span style="color: hsl(0, 100%, 40%);">-           setverdict(fail, "Not ", n, "/", m, " of ", key, " in TC=", tc, "!");</span><br><span style="color: hsl(0, 100%, 40%);">-         mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Not ", n, "/", m, " of ", key, " in TC=", tc, "!"));</span><br><span>   }</span><br><span> }</span><br><span> </span><br><span>@@ -2085,8 +2049,7 @@</span><br><span> /* ensure a given TC slot of the SI vector contains only given SI type */</span><br><span> function f_ensure_si_vec_contains_only(SystemInformationVectorPerTc arr, integer tc, RrMessageType key, boolean ext_bcch := false) {</span><br><span>      if (not f_si_vecslot_contains_only(arr[tc], key, ext_bcch)) {</span><br><span style="color: hsl(0, 100%, 40%);">-           setverdict(fail, "Not all ", key, " in TC=", tc, "!");</span><br><span style="color: hsl(0, 100%, 40%);">-            mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Not all ", key, " in TC=", tc, "!"));</span><br><span>      }</span><br><span> }</span><br><span> </span><br><span>@@ -2115,8 +2078,7 @@</span><br><span>   var integer i;</span><br><span>       for (i := 0; i < sizeof(si_per_tc); i := i + 1) {</span><br><span>                 if (sizeof(si_per_tc[i]) == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        setverdict(fail, "No SI messages for TC=", i);</span><br><span style="color: hsl(0, 100%, 40%);">-                        mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("No SI messages for TC=", i));</span><br><span>          }</span><br><span>    }</span><br><span>    if (cfg.si1_present) {</span><br><span>@@ -2198,8 +2160,7 @@</span><br><span>                       f_ensure_si_vec_contains(si_per_tc, 0, SYSTEM_INFORMATION_TYPE_13, true);</span><br><span>            }</span><br><span>            if (f_si_vec_contains(si_per_tc, SYSTEM_INFORMATION_TYPE_13alt)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                      setverdict(fail, "Cannot have SI13alt and SI13");</span><br><span style="color: hsl(0, 100%, 40%);">-                     mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Cannot have SI13alt and SI13");</span><br><span>                }</span><br><span>    }</span><br><span>    if (cfg.si16_present or cfg.si17_present) {</span><br><span>@@ -2209,8 +2170,7 @@</span><br><span>                  testcase.stop("Error: Cannot have SI16/SI17 and SI22!");</span><br><span>           }</span><br><span>            if (f_si_vec_contains(si_per_tc, SYSTEM_INFORMATION_TYPE_22)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                 setverdict(fail, "Cannot have SI16/SI17 and SI22!");</span><br><span style="color: hsl(0, 100%, 40%);">-                  mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Cannot have SI16/SI17 and SI22!");</span><br><span>             }</span><br><span>            if (not cfg.bcch_extended) {</span><br><span>                         testcase.stop("Error: SI16/SI17 requires BCCH Extd!");</span><br><span>@@ -2255,8 +2215,7 @@</span><br><span>                     testcase.stop("Error: Cannot have SI13alt and SI13");</span><br><span>              }</span><br><span>            if (f_si_vec_contains(si_per_tc, SYSTEM_INFORMATION_TYPE_13)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                 setverdict(fail, "Cannot have SI13alt and SI13");</span><br><span style="color: hsl(0, 100%, 40%);">-                     mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Cannot have SI13alt and SI13");</span><br><span>                }</span><br><span>            if (not cfg.bcch_extended) {</span><br><span>                         f_ensure_si_vec_contains_n_of_m(si_per_tc, 4, SYSTEM_INFORMATION_TYPE_13alt, false, 1, 4);</span><br><span>@@ -2287,8 +2246,7 @@</span><br><span>           } else {</span><br><span>                     f_ensure_si_vec_contains_n_of_m(si_per_tc, 4, SYSTEM_INFORMATION_TYPE_21, true, 1, 4);</span><br><span>                       if (f_si_vecslot_contains(si_per_tc[4], SYSTEM_INFORMATION_TYPE_21)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                          setverdict(fail, "Cannot have SI21 on BCCH Norm if BCCH Extd enabled!");</span><br><span style="color: hsl(0, 100%, 40%);">-                              mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Cannot have SI21 on BCCH Norm if BCCH Extd enabled!");</span><br><span>                         }</span><br><span>            }</span><br><span>    }</span><br><span>@@ -2302,8 +2260,7 @@</span><br><span>            }</span><br><span>            if (f_si_vec_contains(si_per_tc, SYSTEM_INFORMATION_TYPE_16) or</span><br><span>                  f_si_vec_contains(si_per_tc, SYSTEM_INFORMATION_TYPE_17)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                 setverdict(fail, "Cannot have SI16/SI17 and SI22!");</span><br><span style="color: hsl(0, 100%, 40%);">-                  mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Cannot have SI16/SI17 and SI22!");</span><br><span>             }</span><br><span>            if (not cfg.bcch_extended) {</span><br><span>                         testcase.stop("Error: SI22 requires BCCH Extd!");</span><br><span>@@ -2375,7 +2332,7 @@</span><br><span>  f_init();</span><br><span>    /* 2+3+4 are mandatory and set in f_init() */</span><br><span>        f_TC_si_sched();</span><br><span style="color: hsl(0, 100%, 40%);">-        f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> testcase TC_si_sched_1() runs on test_CT {</span><br><span>@@ -2383,7 +2340,7 @@</span><br><span>         si_cfg.si1_present := true;</span><br><span>  f_rsl_bcch_fill_raw(RSL_SYSTEM_INFO_1, '5506198fb38000000000000000000000000000e504002b'O);</span><br><span>   f_TC_si_sched();</span><br><span style="color: hsl(0, 100%, 40%);">-        f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> testcase TC_si_sched_2bis() runs on test_CT {</span><br><span>@@ -2391,7 +2348,7 @@</span><br><span>      si_cfg.si2bis_present := true;</span><br><span>       f_rsl_bcch_fill_raw(RSL_SYSTEM_INFO_2bis, '550602bfe809b3ff00000000000000000000007900002b'O);</span><br><span>        f_TC_si_sched();</span><br><span style="color: hsl(0, 100%, 40%);">-        f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> testcase TC_si_sched_2ter() runs on test_CT {</span><br><span>@@ -2399,7 +2356,7 @@</span><br><span>      si_cfg.si2ter_present := true;</span><br><span>       f_rsl_bcch_fill_raw(RSL_SYSTEM_INFO_2ter, '010603bf66b0aa0a00000002000000000000002b2b2b2b'O);</span><br><span>        f_TC_si_sched();</span><br><span style="color: hsl(0, 100%, 40%);">-        f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> testcase TC_si_sched_2ter_2bis() runs on test_CT {</span><br><span>@@ -2409,7 +2366,7 @@</span><br><span>         si_cfg.si2ter_present := true;</span><br><span>       f_rsl_bcch_fill_raw(RSL_SYSTEM_INFO_2ter, '010603bf66b0aa0a00000002000000000000002b2b2b2b'O);</span><br><span>        f_TC_si_sched();</span><br><span style="color: hsl(0, 100%, 40%);">-        f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> testcase TC_si_sched_2quater() runs on test_CT {</span><br><span>@@ -2417,7 +2374,7 @@</span><br><span>   si_cfg.si2quater_present := true;</span><br><span>    f_rsl_bcch_fill_raw(RSL_SYSTEM_INFO_2quater, '050607a8a0364aa698d72ff424feee0506d5e7fff02043'O);</span><br><span>     f_TC_si_sched();</span><br><span style="color: hsl(0, 100%, 40%);">-        f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> testcase TC_si_sched_13() runs on test_CT {</span><br><span>@@ -2425,7 +2382,7 @@</span><br><span>        si_cfg.si13_present := true;</span><br><span>         f_rsl_bcch_fill_raw(RSL_SYSTEM_INFO_13, '0106009000185a6fc9e08410ab2b2b2b2b2b2b2b2b2b2b'O);</span><br><span>  f_TC_si_sched();</span><br><span style="color: hsl(0, 100%, 40%);">-        f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> testcase TC_si_sched_13_2bis_2ter_2quater() runs on test_CT {</span><br><span>@@ -2439,7 +2396,7 @@</span><br><span>      si_cfg.si13_present := true;</span><br><span>         f_rsl_bcch_fill_raw(RSL_SYSTEM_INFO_13, '0106009000185a6fc9e08410ab2b2b2b2b2b2b2b2b2b2b'O);</span><br><span>  f_TC_si_sched();</span><br><span style="color: hsl(0, 100%, 40%);">-        f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> </span><br><span>@@ -2449,7 +2406,7 @@</span><br><span>   //ts_RSL_BCCH_INFO(si_type, info);</span><br><span>   /* expect no ERROR REPORT after either of them *</span><br><span>     /* negative test: ensure ERROR REPORT on unsupported types */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> /***********************************************************************</span><br><span>@@ -2464,15 +2421,13 @@</span><br><span>                 setverdict(pass);</span><br><span>            }</span><br><span>    [] RSL_CCHAN.receive(tr_RSL_UD(tr_RSL_ERROR_REPORT(?))) {</span><br><span style="color: hsl(0, 100%, 40%);">-               setverdict(fail, "Wrong cause in RSL ERR REP");</span><br><span style="color: hsl(0, 100%, 40%);">-               mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Wrong cause in RSL ERR REP");</span><br><span>          }</span><br><span>    [] RSL_CCHAN.receive {</span><br><span>               repeat;</span><br><span>              }</span><br><span>    [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          setverdict(fail, "Timeout waiting for RSL ERR REP");</span><br><span style="color: hsl(0, 100%, 40%);">-          mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for RSL ERR REP");</span><br><span>             }</span><br><span>    }</span><br><span> }</span><br><span>@@ -2618,8 +2573,7 @@</span><br><span>       T.start;</span><br><span>     alt {</span><br><span>        [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RTS_REQ(bts_nr))) {</span><br><span style="color: hsl(0, 100%, 40%);">-           setverdict(fail, "PCU RTS.req before PDCH active?");</span><br><span style="color: hsl(0, 100%, 40%);">-          mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "PCU RTS.req before PDCH active?");</span><br><span>             }</span><br><span>    [] PCU.receive { repeat; }</span><br><span>   [] T.timeout { }</span><br><span>@@ -2636,17 +2590,14 @@</span><br><span>           }</span><br><span>    [not exp_success] PCU.receive(t_SD_PCUIF(g_pcu_conn_id,</span><br><span>                                               tr_PCUIF_RTS_REQ(bts_nr, trx_nr, ts_nr))) {</span><br><span style="color: hsl(0, 100%, 40%);">-            setverdict(fail, "Unexpected RTS.req for supposedly failing activation");</span><br><span style="color: hsl(0, 100%, 40%);">-             mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unexpected RTS.req for supposedly failing activation");</span><br><span>                }</span><br><span>    [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RTS_REQ)) {</span><br><span style="color: hsl(0, 100%, 40%);">-           setverdict(fail, "RTS.req for wrong TRX/TS");</span><br><span style="color: hsl(0, 100%, 40%);">-         mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "RTS.req for wrong TRX/TS");</span><br><span>            }</span><br><span>    [] PCU.receive { repeat; }</span><br><span>   [exp_success] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-               setverdict(fail, "Timeout waiting for PCU RTS.req");</span><br><span style="color: hsl(0, 100%, 40%);">-          mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for PCU RTS.req");</span><br><span>             }</span><br><span>    [not exp_success] T.timeout {</span><br><span>                setverdict(pass);</span><br><span>@@ -2666,8 +2617,7 @@</span><br><span>    T.start;</span><br><span>     alt {</span><br><span>        [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RTS_REQ(bts_nr, trx_nr, ts_nr))) {</span><br><span style="color: hsl(0, 100%, 40%);">-            setverdict(fail, "Received unexpected PCU RTS.req");</span><br><span style="color: hsl(0, 100%, 40%);">-          mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Received unexpected PCU RTS.req");</span><br><span>             }</span><br><span>    [] PCU.receive { repeat; }</span><br><span>   [] T.timeout {</span><br><span>@@ -2737,8 +2687,7 @@</span><br><span>               }</span><br><span>    [] PCU.receive { repeat; }</span><br><span>   [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          setverdict(fail, "Timeout waiting for SI13");</span><br><span style="color: hsl(0, 100%, 40%);">-         mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for SI13");</span><br><span>            }</span><br><span>    }</span><br><span> }</span><br><span>@@ -2771,8 +2720,7 @@</span><br><span>               }</span><br><span>    [] PCU.receive { repeat; }</span><br><span>   [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          setverdict(fail, "Timeout waiting for RTS.ind");</span><br><span style="color: hsl(0, 100%, 40%);">-              mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for RTS.ind");</span><br><span>                 }</span><br><span>    }</span><br><span> }</span><br><span>@@ -2845,8 +2793,7 @@</span><br><span>               }</span><br><span>    [] L1CTL.receive { repeat; }</span><br><span>         [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          setverdict(fail, "Timeout waiting for PCU-originated AGCH block on Um");</span><br><span style="color: hsl(0, 100%, 40%);">-              mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for PCU-originated AGCH block on Um");</span><br><span>                 }</span><br><span>    }</span><br><span> }</span><br><span>@@ -2870,8 +2817,7 @@</span><br><span>               }</span><br><span>    [] L1CTL.receive { repeat; }</span><br><span>         [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          setverdict(fail, "Timeout waiting for PCU-originated AGCH block on Um");</span><br><span style="color: hsl(0, 100%, 40%);">-              mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for PCU-originated AGCH block on Um");</span><br><span>                 }</span><br><span>    }</span><br><span> }</span><br><span>@@ -2887,8 +2833,7 @@</span><br><span>               var OCT1 ra := f_rnd_ra_ps();</span><br><span>                var GsmFrameNumber fn := f_L1CTL_RACH(L1CTL, oct2int(ra));</span><br><span>           if (fn == fn_last) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    setverdict(fail, "Two RACH in same FN?!?");</span><br><span style="color: hsl(0, 100%, 40%);">-                   mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Two RACH in same FN?!?");</span><br><span>              }</span><br><span>            fn_last := fn;</span><br><span> </span><br><span>@@ -2899,13 +2844,11 @@</span><br><span>                         T.stop;</span><br><span>                      }</span><br><span>            [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RACH_IND)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                  setverdict(fail, "Unexpected RACH IND");</span><br><span style="color: hsl(0, 100%, 40%);">-                      mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unexpected RACH IND");</span><br><span>                         }</span><br><span>            [] PCU.receive { repeat; }</span><br><span>           [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-                  setverdict(fail, "Timeout waiting for RACH IND");</span><br><span style="color: hsl(0, 100%, 40%);">-                     mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for RACH IND");</span><br><span>                        }</span><br><span>            }</span><br><span>    }</span><br><span>@@ -2943,13 +2886,11 @@</span><br><span>          [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_PAG_REQ(0, t_mi_lv))) {</span><br><span>                    }</span><br><span>            [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_PAG_REQ)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                   setverdict(fail, "Unexpected PAGING REQ");</span><br><span style="color: hsl(0, 100%, 40%);">-                    mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unexpected PAGING REQ");</span><br><span>                       }</span><br><span>            [] PCU.receive { repeat; }</span><br><span>           [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-                  setverdict(fail, "Timeout waiting for PAGING REQ");</span><br><span style="color: hsl(0, 100%, 40%);">-                   mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for PAGING REQ");</span><br><span>                      }</span><br><span>            }</span><br><span>    }</span><br><span>@@ -2970,8 +2911,7 @@</span><br><span>    alt {</span><br><span>        [] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {</span><br><span>               if (substr(sd.data.u.info_ind.trx[trx_nr].pdch_mask, g_chan_nr.tn, 1) != '1'B) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        setverdict(fail, "PCUIF_INFO_IND PDCH_MASK not '1' after PDCH ACT");</span><br><span style="color: hsl(0, 100%, 40%);">-                  mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "PCUIF_INFO_IND PDCH_MASK not '1' after PDCH ACT");</span><br><span>             }</span><br><span>            }</span><br><span>    [] PCU.receive { repeat; }</span><br><span>@@ -2991,8 +2931,7 @@</span><br><span>   alt {</span><br><span>        [] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {</span><br><span>               if (substr(sd.data.u.info_ind.trx[trx_nr].pdch_mask, g_chan_nr.tn, 1) != '0'B) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        setverdict(fail, "PCUIF_INFO_IND PDCH_MASK not '0' after PDCH DEACT");</span><br><span style="color: hsl(0, 100%, 40%);">-                        mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "PCUIF_INFO_IND PDCH_MASK not '0' after PDCH DEACT");</span><br><span>           }</span><br><span>            }</span><br><span>    [] PCU.receive { repeat; }</span><br><span>@@ -3154,8 +3093,7 @@</span><br><span>   alt {</span><br><span>        [] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {</span><br><span>               if (substr(sd.data.u.info_ind.trx[trx_nr].pdch_mask, g_chan_nr.tn, 1) != '1'B) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        setverdict(fail, "PCUIF_INFO_IND PDCH_MASK not '1' after PDCH ACT");</span><br><span style="color: hsl(0, 100%, 40%);">-                  mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "PCUIF_INFO_IND PDCH_MASK not '1' after PDCH ACT");</span><br><span>             }</span><br><span>            }</span><br><span>    [] PCU.receive { repeat; }</span><br><span>@@ -3177,8 +3115,7 @@</span><br><span>   alt {</span><br><span>        [] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {</span><br><span>               if (substr(sd.data.u.info_ind.trx[trx_nr].pdch_mask, g_chan_nr.tn, 1) != '0'B) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        setverdict(fail, "PCUIF_INFO_IND PDCH_MASK not '0' after PDCH DEACT");</span><br><span style="color: hsl(0, 100%, 40%);">-                        mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "PCUIF_INFO_IND PDCH_MASK not '0' after PDCH DEACT");</span><br><span>           }</span><br><span>            }</span><br><span>    [] PCU.receive { repeat; }</span><br><span>@@ -3263,8 +3200,7 @@</span><br><span>   alt {</span><br><span>        [] RSL.receive(tr_RSL_IPA_PDCH_ACT_NACK(g_chan_nr, ?));</span><br><span>      [] RSL.receive(tr_RSL_IPA_PDCH_ACT_ACK(g_chan_nr, ?)) {</span><br><span style="color: hsl(0, 100%, 40%);">-         setverdict(fail, "Unexpected PDCH ACT ACK");</span><br><span style="color: hsl(0, 100%, 40%);">-          mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unexpected PDCH ACT ACK");</span><br><span>             }</span><br><span>    [] RSL.receive { repeat; }</span><br><span>   }</span><br><span>@@ -3373,7 +3309,7 @@</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   f_shutdown();</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> /* test if SABM on Um triggers EST IND (TS 48.058 3.1) */</span><br><span>@@ -3395,23 +3331,20 @@</span><br><span>                if (tc.exp) {</span><br><span>                        setverdict(pass);</span><br><span>            } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        setverdict(fail, "Unexpected EST IND with L3 in ", tc);</span><br><span style="color: hsl(0, 100%, 40%);">-                       mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Unexpected EST IND with L3 in ", tc));</span><br><span>                 }</span><br><span>            }</span><br><span>    [tc.l3 == ''O] RSL.receive(tr_RSL_EST_IND_NOL3(g_chan_nr, tc.link_id)) {</span><br><span>             if (tc.exp) {</span><br><span>                        setverdict(pass);</span><br><span>            } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        setverdict(fail, "Unexpected EST IND without L3 in ", tc);</span><br><span style="color: hsl(0, 100%, 40%);">-                    mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Unexpected EST IND without L3 in ", tc));</span><br><span>              }</span><br><span>            }</span><br><span>    /* We also expect to receive the measurements */</span><br><span>     [] as_meas_res(verify_meas := false);</span><br><span>        [tc.exp] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-            setverdict(fail, "Timeout waiting for EST IND");</span><br><span style="color: hsl(0, 100%, 40%);">-              mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for EST IND");</span><br><span>                 }</span><br><span>    [not tc.exp] T.timeout {</span><br><span>             setverdict(pass);</span><br><span>@@ -3472,8 +3405,7 @@</span><br><span>            }</span><br><span>    [] L1CTL.receive { repeat; }</span><br><span>         [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          setverdict(fail, "Timeout waiting for SABM");</span><br><span style="color: hsl(0, 100%, 40%);">-         mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for SABM");</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span>@@ -3527,8 +3459,7 @@</span><br><span>        T.start;</span><br><span>     alt {</span><br><span>        [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          setverdict(fail, "Timeout waiting for LAPDm ", exp);</span><br><span style="color: hsl(0, 100%, 40%);">-          mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Timeout waiting for LAPDm ", exp));</span><br><span>            }</span><br><span>    [] as_l1_exp_lapdm(exp);</span><br><span>     }</span><br><span>@@ -3543,8 +3474,7 @@</span><br><span>    [l3 != ''O] RSL.receive(tr_RSL_EST_IND(g_chan_nr, link_id, l3));</span><br><span>     [l3 == ''O] RSL.receive(tr_RSL_EST_IND_NOL3(g_chan_nr, link_id));</span><br><span>    [] RSL.receive(tr_RSL_ERROR_IND(g_chan_nr, link_id, ?)) {</span><br><span style="color: hsl(0, 100%, 40%);">-               setverdict(fail, "Failing due to RSL_ERROR_IND");</span><br><span style="color: hsl(0, 100%, 40%);">-             mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Failing due to RSL_ERROR_IND");</span><br><span>                }</span><br><span>    [] RSL.receive { repeat; }</span><br><span>   }</span><br><span>@@ -3754,8 +3684,7 @@</span><br><span> private altstep as_rsl_any_ind(boolean exp_any) runs on ConnHdlr {</span><br><span>      [exp_any] RSL.receive { repeat; }</span><br><span>    [not exp_any] RSL.receive {</span><br><span style="color: hsl(0, 100%, 40%);">-             setverdict(fail, "Unexpected RSL message!");</span><br><span style="color: hsl(0, 100%, 40%);">-          mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unexpected RSL message!");</span><br><span>             }</span><br><span> }</span><br><span> </span><br><span>@@ -3777,8 +3706,7 @@</span><br><span>   [exp_sacch] as_meas_res(verify_meas := false);</span><br><span>       [] as_rsl_any_ind(exp_any);</span><br><span>  [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          setverdict(fail, "Timeout waiting for UNIT_DATA_IND");</span><br><span style="color: hsl(0, 100%, 40%);">-                mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for UNIT_DATA_IND");</span><br><span>           }</span><br><span>    }</span><br><span> }</span><br><span>@@ -3802,8 +3730,7 @@</span><br><span>       [exp_sacch] as_meas_res(verify_meas := false);</span><br><span>       [] as_rsl_any_ind(exp_any);</span><br><span>  [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          setverdict(fail, "Timeout waiting for DATA_IND");</span><br><span style="color: hsl(0, 100%, 40%);">-             mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for DATA_IND");</span><br><span>                }</span><br><span>    }</span><br><span> }</span><br><span>@@ -3910,14 +3837,12 @@</span><br><span>     if (ischosen(exp_match.ab)) {</span><br><span>                lf.ab := dec_LapdmFrameAB(enc);</span><br><span>      } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                setverdict(fail, "unsupported frame type");</span><br><span style="color: hsl(0, 100%, 40%);">-           mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "unsupported frame type");</span><br><span>      }</span><br><span> </span><br><span>        /* check if decoder result matches expectation */</span><br><span>    if (not match(lf, exp_match)) {</span><br><span style="color: hsl(0, 100%, 40%);">-         setverdict(fail, name, ": decoded LAPDm doesn't match");</span><br><span style="color: hsl(0, 100%, 40%);">-          mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str(name, ": decoded LAPDm doesn't match"));</span><br><span>    } else {</span><br><span>             log(name, ": matched");</span><br><span>            setverdict(pass);</span><br><span>@@ -3926,8 +3851,7 @@</span><br><span>    /* test if re-encoded frame equals original input */</span><br><span>         reenc := enc_LapdmFrame(lf);</span><br><span>         if (enc != reenc) {</span><br><span style="color: hsl(0, 100%, 40%);">-             setverdict(fail, name, ": re-encoded LAPDm frame doesn't match");</span><br><span style="color: hsl(0, 100%, 40%);">-         mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str(name, ": re-encoded LAPDm frame doesn't match"));</span><br><span>   } else {</span><br><span>             setverdict(pass);</span><br><span>    }</span><br><span>@@ -4025,7 +3949,7 @@</span><br><span>                            T.stop;</span><br><span>                              f_rsl_chan_deact();</span><br><span>                          f_L1CTL_DM_REL_REQ(L1CTL, g_chan_nr);</span><br><span style="color: hsl(0, 100%, 40%);">-                           setverdict(fail, "Received fill frame on non-TCH/F channel; DTX is only allowed on TCH/F!");</span><br><span style="color: hsl(120, 100%, 40%);">+                                Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Received fill frame on non-TCH/F channel; DTX is only allowed on TCH/F!");</span><br><span>                     }</span><br><span>                    if (fn > first_fn + frame_dtx_tchf_mod) {</span><br><span>                                 T.stop;</span><br><span>@@ -4039,7 +3963,7 @@</span><br><span>                              if (nfill_frames_sacch + nfill_frames_nonsacch < expected_fill_frames) {</span><br><span>                                  log("received only ", nfill_frames_sacch, "+", nfill_frames_nonsacch,</span><br><span>                                        " (SACCH+other) out of ", expected_fill_frames, " expected fill frames");</span><br><span style="color: hsl(0, 100%, 40%);">-                                       setverdict(fail, "Not enough fill frames received");</span><br><span style="color: hsl(120, 100%, 40%);">+                                        Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Not enough fill frames received");</span><br><span>                             } else {</span><br><span>                                     setverdict(pass);</span><br><span>                            }</span><br><span>@@ -4063,7 +3987,7 @@</span><br><span>                                " (mod ", block_dtx_tchf_mod, ": ", fn mod block_dtx_tchf_mod, ")");</span><br><span>                               f_rsl_chan_deact();</span><br><span>                          f_L1CTL_DM_REL_REQ(L1CTL, g_chan_nr);</span><br><span style="color: hsl(0, 100%, 40%);">-                           setverdict(fail, "Unexpected L2 fill frame received on Um");</span><br><span style="color: hsl(120, 100%, 40%);">+                                Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unexpected L2 fill frame received on Um");</span><br><span>                     }</span><br><span>            } else {</span><br><span>                     if (dl.dl_info.link_id.c == SACCH) {</span><br><span>@@ -4086,7 +4010,7 @@</span><br><span>                                 } else {</span><br><span>                                     f_rsl_chan_deact();</span><br><span>                                  f_L1CTL_DM_REL_REQ(L1CTL, g_chan_nr);</span><br><span style="color: hsl(0, 100%, 40%);">-                                   setverdict(fail, "Unknown channel type");</span><br><span style="color: hsl(120, 100%, 40%);">+                                   Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unknown channel type");</span><br><span>                                }</span><br><span> </span><br><span>                                f_rsl_chan_deact();</span><br><span>@@ -4097,7 +4021,7 @@</span><br><span>                          } else {</span><br><span>                                     log("received only ", nfill_frames_sacch, "+", nfill_frames_nonsacch,</span><br><span>                                        " (SACCH+other) out of ", expected_fill_frames, " expected fill frames");</span><br><span style="color: hsl(0, 100%, 40%);">-                                       setverdict(fail, "Not enough fill frames received");</span><br><span style="color: hsl(120, 100%, 40%);">+                                        Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Not enough fill frames received");</span><br><span>                             }</span><br><span>                    } else {</span><br><span>                             repeat;</span><br><span>@@ -4108,8 +4032,7 @@</span><br><span>      [] T.timeout {</span><br><span>               f_rsl_chan_deact();</span><br><span>          f_L1CTL_DM_REL_REQ(L1CTL, g_chan_nr);</span><br><span style="color: hsl(0, 100%, 40%);">-           setverdict(fail, "Timeout waiting for L2 fill frames on Um");</span><br><span style="color: hsl(0, 100%, 40%);">-         mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for L2 fill frames on Um");</span><br><span>    }</span><br><span>    }</span><br><span> }</span><br><span>diff --git a/bts/gen_links.sh b/bts/gen_links.sh</span><br><span>index 1ec6153..2a07f16 100755</span><br><span>--- a/bts/gen_links.sh</span><br><span>+++ b/bts/gen_links.sh</span><br><span>@@ -33,7 +33,7 @@</span><br><span> gen_links $DIR $FILES</span><br><span> </span><br><span> DIR=../library</span><br><span style="color: hsl(0, 100%, 40%);">-FILES="General_Types.ttcn GSM_Types.ttcn GSM_RR_Types.ttcn Osmocom_VTY_Functions.ttcn GSM_SystemInformation.ttcn Osmocom_Types.ttcn RLCMAC_Types.ttcn RLCMAC_CSN1_Types.ttcn RLCMAC_EncDec.cc L1CTL_Types.ttcn L1CTL_PortType.ttcn L1CTL_PortType_CtrlFunct.ttcn L1CTL_PortType_CtrlFunctDef.cc LAPDm_RAW_PT.ttcn LAPDm_Types.ttcn "</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="Misc_Helpers.ttcn General_Types.ttcn GSM_Types.ttcn GSM_RR_Types.ttcn Osmocom_VTY_Functions.ttcn GSM_SystemInformation.ttcn Osmocom_Types.ttcn RLCMAC_Types.ttcn RLCMAC_CSN1_Types.ttcn RLCMAC_EncDec.cc L1CTL_Types.ttcn L1CTL_PortType.ttcn L1CTL_PortType_CtrlFunct.ttcn L1CTL_PortType_CtrlFunctDef.cc LAPDm_RAW_PT.ttcn LAPDm_Types.ttcn "</span><br><span> #FILES+="NS_Emulation.ttcn NS_CodecPort.ttcn NS_CodecPort_CtrlFunct.ttcn NS_CodecPort_CtrlFunctDef.cc "</span><br><span> #FILES+="BSSGP_Emulation.ttcn Osmocom_Gb_Types.ttcn "</span><br><span> FILES+="IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp IPA_CodecPort.ttcn RSL_Types.ttcn RSL_Emulation.ttcn "</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11452">change 11452</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/11452"/><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: merged </div>
<div style="display:none"> Gerrit-Change-Id: Ia8b01a1876e969d6f0760ea625e4df83af4f54ca </div>
<div style="display:none"> Gerrit-Change-Number: 11452 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: daniel <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Pau Espin Pedrol <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: daniel <dwillmann@sysmocom.de> </div>