<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/26137">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">BTS_Tests: add test cases for Temporary ACCH Overpower<br><br>Change-Id: Ibdb94aa2779ae4b08f08cfef78c2959ae451a784<br>Related: SYS#5319<br>---<br>M bts/BTS_Tests.ttcn<br>M library/GSM_RR_Types.ttcn<br>2 files changed, 329 insertions(+), 1 deletion(-)<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/37/26137/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 7476a0c..14cee45 100644</span><br><span>--- a/bts/BTS_Tests.ttcn</span><br><span>+++ b/bts/BTS_Tests.ttcn</span><br><span>@@ -317,7 +317,8 @@</span><br><span> </span><br><span> /* Test-specific parameters */</span><br><span> friend type union TestSpecUnion {</span><br><span style="color: hsl(0, 100%, 40%);">-   RllTestCase rll</span><br><span style="color: hsl(120, 100%, 40%);">+       RllTestCase rll,</span><br><span style="color: hsl(120, 100%, 40%);">+      TopTestCase top</span><br><span> }</span><br><span> </span><br><span> private template (value) RachControlParameters ts_RachCtrl_default := {</span><br><span>@@ -773,6 +774,43 @@</span><br><span>   var RSL_Message rx := f_rsl_transceive_ret(tx, exp_rx, id, ignore_other);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Send the given measurement results to the IUT over the Um interface,</span><br><span style="color: hsl(120, 100%, 40%);">+ * wait for the IUT to receive then and forward over the A-bis/RSL interface. */</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_transceive_meas_rep(template (value) MeasurementResults meas_res)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+        var template (value) SacchL1Header l1h;</span><br><span style="color: hsl(120, 100%, 40%);">+       var octetstring l2, l3;</span><br><span style="color: hsl(120, 100%, 40%);">+       timer T;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* RR Measurement Report to be sent */</span><br><span style="color: hsl(120, 100%, 40%);">+        var GsmRrL3Message meas_rep := {</span><br><span style="color: hsl(120, 100%, 40%);">+              header := valueof(t_RrL3Header(MEASUREMENT_REPORT)),</span><br><span style="color: hsl(120, 100%, 40%);">+          payload := { meas_rep := { meas_res := valueof(meas_res) } }</span><br><span style="color: hsl(120, 100%, 40%);">+  };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* TITAN has weird (and often unusable) padding model, so we pad here manaully */</span><br><span style="color: hsl(120, 100%, 40%);">+     l3 := f_pad_oct(enc_GsmRrL3Message(meas_rep), 18, '00'O);</span><br><span style="color: hsl(120, 100%, 40%);">+     l2 := f_pad_oct(enc_LapdmFrameAB(valueof(ts_LAPDm_AB(0, meas_rep))), 21, '00'O);</span><br><span style="color: hsl(120, 100%, 40%);">+      l1h := ts_SacchL1Header(g_pars.l1_pars.ms_power_level, false,</span><br><span style="color: hsl(120, 100%, 40%);">+                         g_pars.l1_pars.ms_actual_ta);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Send RR Measurement Report over the Um interface */</span><br><span style="color: hsl(120, 100%, 40%);">+        L1CTL.send(ts_L1CTL_DATA_REQ_SACCH(g_chan_nr, ts_RslLinkID_SACCH(0), l1h, l2));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Expect MEASurement RESult on the A-bis/RSL interface */</span><br><span style="color: hsl(120, 100%, 40%);">+    T.start(2.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] RSL.receive(tr_RSL_MEAS_RES_OSMO(g_chan_nr, l3_info := l3)) {</span><br><span style="color: hsl(120, 100%, 40%);">+              setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] RSL.receive { repeat; }</span><br><span style="color: hsl(120, 100%, 40%);">+    [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "Timeout waiting for RSL MEASurement RESult");</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> friend function f_rsl_chan_act(RSL_IE_ChannelMode mode,</span><br><span>                           boolean encr_enable := false,</span><br><span>                                RSL_IE_List more_ies := {},</span><br><span>@@ -7956,6 +7994,269 @@</span><br><span>         Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private type record TopTestCase {</span><br><span style="color: hsl(120, 100%, 40%);">+     RSL_IE_BS_Power         bs_power,</span><br><span style="color: hsl(120, 100%, 40%);">+     RSL_IE_OSMO_TopAcchCap  top_cap,</span><br><span style="color: hsl(120, 100%, 40%);">+      record of TopTestStep   steps</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+private type record TopTestStep {</span><br><span style="color: hsl(120, 100%, 40%);">+  MeasurementResults      meas_res optional,</span><br><span style="color: hsl(120, 100%, 40%);">+    GsmRxLev                overpower_sacch,</span><br><span style="color: hsl(120, 100%, 40%);">+      GsmRxLev                overpower_facch</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_rxlev_match(template (present) RslLinkId link_id,</span><br><span style="color: hsl(120, 100%, 40%);">+                          template (present) GsmRxLev rxlev)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+ var L1ctlDlMessage dl := f_L1CTL_rx_data(L1CTL, g_chan_nr, link_id);</span><br><span style="color: hsl(120, 100%, 40%);">+  if (not match(dl.dl_info.rx_level, rxlev)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          setverdict(fail, "RxLev(", link_id, ") := ", dl.dl_info.rx_level,</span><br><span style="color: hsl(120, 100%, 40%);">+                          " does not match expected RxLev := ", rxlev);</span><br><span style="color: hsl(120, 100%, 40%);">+              Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_acch_overpower(charstring id) runs on ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+        var TopTestCase tc := g_pars.spec.top;</span><br><span style="color: hsl(120, 100%, 40%);">+        var GsmRxLev rxlev_dcch;</span><br><span style="color: hsl(120, 100%, 40%);">+      var L1ctlDlMessage dl;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Wait for Pau ramping to complete */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_sleep(6.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_l1_tune(L1CTL);</span><br><span style="color: hsl(120, 100%, 40%);">+     L1CTL.clear;</span><br><span style="color: hsl(120, 100%, 40%);">+  RSL.clear;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Measure RxLev(BCCH), calculate RxLev(DCCH) */</span><br><span style="color: hsl(120, 100%, 40%);">+      dl := f_L1CTL_rx_data(L1CTL, t_RslChanNr_BCCH(0));</span><br><span style="color: hsl(120, 100%, 40%);">+    rxlev_dcch := dl.dl_info.rx_level - (tc.bs_power.power_level * 2);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  log("RxLev(BCCH) := ", dl.dl_info.rx_level);</span><br><span style="color: hsl(120, 100%, 40%);">+        log("Expected RxLev(DCCH) := ", rxlev_dcch);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Additional IEs for the CHANnel ACTIVation message */</span><br><span style="color: hsl(120, 100%, 40%);">+       var template (value) RSL_IE_List ies := {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Employ BS power control in static mode */</span><br><span style="color: hsl(120, 100%, 40%);">+          t_RSL_IE(RSL_IE_MS_POWER, RSL_IE_Body:{</span><br><span style="color: hsl(120, 100%, 40%);">+                       bs_power := tc.bs_power</span><br><span style="color: hsl(120, 100%, 40%);">+               }),</span><br><span style="color: hsl(120, 100%, 40%);">+           /* Indicate the given Temporary Overpower capability */</span><br><span style="color: hsl(120, 100%, 40%);">+               t_RSL_IE(RSL_IE_OSMO_TOP_ACCH_CAP, RSL_IE_Body:{</span><br><span style="color: hsl(120, 100%, 40%);">+                      top_acch_cap := tc.top_cap</span><br><span style="color: hsl(120, 100%, 40%);">+            })</span><br><span style="color: hsl(120, 100%, 40%);">+    };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Establish a dedicated channel */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_est_dchan(more_ies := valueof(ies));</span><br><span style="color: hsl(120, 100%, 40%);">+        L1CTL.clear;</span><br><span style="color: hsl(120, 100%, 40%);">+  RSL.clear;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  for (var integer i := 0; i < lengthof(tc.steps); i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+             var TopTestStep step := tc.steps[i];</span><br><span style="color: hsl(120, 100%, 40%);">+          var GsmRxLev rxlev_facch := rxlev_dcch + step.overpower_facch;</span><br><span style="color: hsl(120, 100%, 40%);">+                var GsmRxLev rxlev_sacch := rxlev_dcch + step.overpower_sacch;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              log("Executing step[", i, "] := ", step);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Send RR Measurement Report (if present) */</span><br><span style="color: hsl(120, 100%, 40%);">+         if (ispresent(step.meas_res)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       f_transceive_meas_rep(step.meas_res);</span><br><span style="color: hsl(120, 100%, 40%);">+                 f_sleep(0.480 * 2.0);</span><br><span style="color: hsl(120, 100%, 40%);">+                 L1CTL.clear;</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           /* Check RxLev on both FACCH and SACCH */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_rxlev_match(tr_RslLinkID_DCCH(?), rxlev_facch);</span><br><span style="color: hsl(120, 100%, 40%);">+             f_rxlev_match(tr_RslLinkID_SACCH(?), rxlev_sacch);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+          setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_acch_overpower_rxqual_thresh() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    var ConnHdlrPars pars;</span><br><span style="color: hsl(120, 100%, 40%);">+        var ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Verify lower and upper RxQual thresholds */</span><br><span style="color: hsl(120, 100%, 40%);">+        var template TopTestCase top := {</span><br><span style="color: hsl(120, 100%, 40%);">+             bs_power := ts_RSL_IE_BS_Power(4), /* 4 x 2dB = 2dB */</span><br><span style="color: hsl(120, 100%, 40%);">+                top_cap := ts_RSL_IE_OSMO_TopAcchCap(4), /* 4dB */</span><br><span style="color: hsl(120, 100%, 40%);">+            steps := {</span><br><span style="color: hsl(120, 100%, 40%);">+                    /* Channel established, no overpower */</span><br><span style="color: hsl(120, 100%, 40%);">+                       { meas_res := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                     overpower_sacch := 0, overpower_facch := 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                     /* Worst possible RxQual value, overpower of 4dB */</span><br><span style="color: hsl(120, 100%, 40%);">+                   { meas_res := ts_MeasurementResults(rxq_f := 7),</span><br><span style="color: hsl(120, 100%, 40%);">+                        overpower_sacch := 4, overpower_facch := 4 },</span><br><span style="color: hsl(120, 100%, 40%);">+                       /* Worst possible RxQual value, disabling overpower */</span><br><span style="color: hsl(120, 100%, 40%);">+                        { meas_res := ts_MeasurementResults(rxq_f := 0),</span><br><span style="color: hsl(120, 100%, 40%);">+                        overpower_sacch := 0, overpower_facch := 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                     /* Lower threshold not reached, no overpower */</span><br><span style="color: hsl(120, 100%, 40%);">+                       { meas_res := ts_MeasurementResults(rxq_f := 1),</span><br><span style="color: hsl(120, 100%, 40%);">+                        overpower_sacch := 0, overpower_facch := 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+                       /* Lower threshold not reached, no overpower */</span><br><span style="color: hsl(120, 100%, 40%);">+                       { meas_res := ts_MeasurementResults(rxq_f := 2),</span><br><span style="color: hsl(120, 100%, 40%);">+                        overpower_sacch := 0, overpower_facch := 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+                       /* Lower threshold reached, overpower of 4dB */</span><br><span style="color: hsl(120, 100%, 40%);">+                       { meas_res := ts_MeasurementResults(rxq_f := 4),</span><br><span style="color: hsl(120, 100%, 40%);">+                        overpower_sacch := 4, overpower_facch := 4 },</span><br><span style="color: hsl(120, 100%, 40%);">+                       /* Upper threshold not reached, keeping overpower */</span><br><span style="color: hsl(120, 100%, 40%);">+                  { meas_res := ts_MeasurementResults(rxq_f := 3),</span><br><span style="color: hsl(120, 100%, 40%);">+                        overpower_sacch := 4, overpower_facch := 4 },</span><br><span style="color: hsl(120, 100%, 40%);">+                       /* Upper threshold reached, disabling overpower */</span><br><span style="color: hsl(120, 100%, 40%);">+                    { meas_res := ts_MeasurementResults(rxq_f := 3),</span><br><span style="color: hsl(120, 100%, 40%);">+                        overpower_sacch := 0, overpower_facch := 0 }</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+     };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  pars := valueof(t_Pars(t_RslChanNr_Bm(0), ts_RSL_ChanMode_SIGN,</span><br><span style="color: hsl(120, 100%, 40%);">+                              spec := { top := top }, trx_nr := 1));</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_conn := f_start_handler(refers(f_TC_acch_overpower), pars);</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_acch_overpower_rxqual_thresh_dtx() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    var ConnHdlrPars pars;</span><br><span style="color: hsl(120, 100%, 40%);">+        var ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Verify handling of FULL and SUB values */</span><br><span style="color: hsl(120, 100%, 40%);">+  var template TopTestCase top := {</span><br><span style="color: hsl(120, 100%, 40%);">+             bs_power := ts_RSL_IE_BS_Power(4), /* 4 x 2dB = 2dB */</span><br><span style="color: hsl(120, 100%, 40%);">+                top_cap := ts_RSL_IE_OSMO_TopAcchCap(4), /* 4dB */</span><br><span style="color: hsl(120, 100%, 40%);">+            steps := {</span><br><span style="color: hsl(120, 100%, 40%);">+                    /* Channel established, no overpower */</span><br><span style="color: hsl(120, 100%, 40%);">+                       { meas_res := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                     overpower_sacch := 0, overpower_facch := 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                     /* Invalid measurement results, no overpower */</span><br><span style="color: hsl(120, 100%, 40%);">+                       { meas_res := ts_MeasurementResults(rxq_f := 7,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                           rxq_s := 7,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                           valid := false),</span><br><span style="color: hsl(120, 100%, 40%);">+                    overpower_sacch := 0, overpower_facch := 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                     /* DTXu was in use, no overpower */</span><br><span style="color: hsl(120, 100%, 40%);">+                   { meas_res := ts_MeasurementResults(rxq_f := 7,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                           rxq_s := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                           dtx_used := true),</span><br><span style="color: hsl(120, 100%, 40%);">+                          overpower_sacch := 0, overpower_facch := 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+                       /* DTXu was in use, overpower of 4 dB */</span><br><span style="color: hsl(120, 100%, 40%);">+                      { meas_res := ts_MeasurementResults(rxq_f := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                           rxq_s := 7,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                           dtx_used := true),</span><br><span style="color: hsl(120, 100%, 40%);">+                          overpower_sacch := 4, overpower_facch := 4 },</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  pars := valueof(t_Pars(t_RslChanNr_Bm(0), ts_RSL_ChanMode_SIGN,</span><br><span style="color: hsl(120, 100%, 40%);">+                              spec := { top := top }, trx_nr := 1));</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_conn := f_start_handler(refers(f_TC_acch_overpower), pars);</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_acch_overpower_always_on_facch() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      var ConnHdlrPars pars;</span><br><span style="color: hsl(120, 100%, 40%);">+        var ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Overpower is always on, SACCH disabled */</span><br><span style="color: hsl(120, 100%, 40%);">+  var template TopTestCase top := {</span><br><span style="color: hsl(120, 100%, 40%);">+             bs_power := ts_RSL_IE_BS_Power(4), /* 4 x 2dB = 8dB */</span><br><span style="color: hsl(120, 100%, 40%);">+                top_cap := ts_RSL_IE_OSMO_TopAcchCap(overpower := 4, /* 4dB */</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     rxqual := 0, /* always on */</span><br><span style="color: hsl(120, 100%, 40%);">+                                                  sacch_enable := false),</span><br><span style="color: hsl(120, 100%, 40%);">+          steps := {</span><br><span style="color: hsl(120, 100%, 40%);">+                    /* Channel established, FACCH overpower */</span><br><span style="color: hsl(120, 100%, 40%);">+                    { meas_res := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                     overpower_sacch := 0, overpower_facch := 4 },</span><br><span style="color: hsl(120, 100%, 40%);">+                       /* MS indicates good RxQual, no difference */</span><br><span style="color: hsl(120, 100%, 40%);">+                 { meas_res := ts_MeasurementResults(rxq_f := 0),</span><br><span style="color: hsl(120, 100%, 40%);">+                        overpower_sacch := 0, overpower_facch := 4 },</span><br><span style="color: hsl(120, 100%, 40%);">+                       /* MS indicates bad RxQual, no difference */</span><br><span style="color: hsl(120, 100%, 40%);">+                  { meas_res := ts_MeasurementResults(rxq_f := 7),</span><br><span style="color: hsl(120, 100%, 40%);">+                        overpower_sacch := 0, overpower_facch := 4 }</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+     };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  pars := valueof(t_Pars(t_RslChanNr_Bm(0), ts_RSL_ChanMode_SIGN,</span><br><span style="color: hsl(120, 100%, 40%);">+                              spec := { top := top }, trx_nr := 1));</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_conn := f_start_handler(refers(f_TC_acch_overpower), pars);</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_acch_overpower_always_on_sacch() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      var ConnHdlrPars pars;</span><br><span style="color: hsl(120, 100%, 40%);">+        var ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Overpower is always on, FACCH disabled */</span><br><span style="color: hsl(120, 100%, 40%);">+  var template TopTestCase top := {</span><br><span style="color: hsl(120, 100%, 40%);">+             bs_power := ts_RSL_IE_BS_Power(4), /* 4 x 2dB = 8dB */</span><br><span style="color: hsl(120, 100%, 40%);">+                top_cap := ts_RSL_IE_OSMO_TopAcchCap(overpower := 4, /* 4dB */</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     rxqual := 0, /* always on */</span><br><span style="color: hsl(120, 100%, 40%);">+                                                  facch_enable := false),</span><br><span style="color: hsl(120, 100%, 40%);">+          steps := {</span><br><span style="color: hsl(120, 100%, 40%);">+                    /* Channel established, SACCH overpower */</span><br><span style="color: hsl(120, 100%, 40%);">+                    { meas_res := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                     overpower_sacch := 4, overpower_facch := 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+                       /* MS indicates good RxQual, no difference */</span><br><span style="color: hsl(120, 100%, 40%);">+                 { meas_res := ts_MeasurementResults(rxq_f := 0),</span><br><span style="color: hsl(120, 100%, 40%);">+                        overpower_sacch := 4, overpower_facch := 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+                       /* MS indicates bad RxQual, no difference */</span><br><span style="color: hsl(120, 100%, 40%);">+                  { meas_res := ts_MeasurementResults(rxq_f := 7),</span><br><span style="color: hsl(120, 100%, 40%);">+                        overpower_sacch := 4, overpower_facch := 0 }</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+     };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  pars := valueof(t_Pars(t_RslChanNr_Bm(0), ts_RSL_ChanMode_SIGN,</span><br><span style="color: hsl(120, 100%, 40%);">+                              spec := { top := top }, trx_nr := 1));</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_conn := f_start_handler(refers(f_TC_acch_overpower), pars);</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_acch_overpower_limit() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        var ConnHdlrPars pars;</span><br><span style="color: hsl(120, 100%, 40%);">+        var ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Overpower higher than current power reduction level (2dB) */</span><br><span style="color: hsl(120, 100%, 40%);">+       var template TopTestCase top := {</span><br><span style="color: hsl(120, 100%, 40%);">+             bs_power := ts_RSL_IE_BS_Power(1), /* 1 x 2dB = 2dB */</span><br><span style="color: hsl(120, 100%, 40%);">+                top_cap := ts_RSL_IE_OSMO_TopAcchCap(overpower := 4, /* 4dB */</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     rxqual := 0 /* always on */),</span><br><span style="color: hsl(120, 100%, 40%);">+            steps := {</span><br><span style="color: hsl(120, 100%, 40%);">+                    /* Channel established, ACCH overpower of 2dB */</span><br><span style="color: hsl(120, 100%, 40%);">+                      { meas_res := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                     overpower_sacch := 2, overpower_facch := 2 },</span><br><span style="color: hsl(120, 100%, 40%);">+                       /* MS indicates good RxQual, no difference */</span><br><span style="color: hsl(120, 100%, 40%);">+                 { meas_res := ts_MeasurementResults(rxq_f := 0),</span><br><span style="color: hsl(120, 100%, 40%);">+                        overpower_sacch := 2, overpower_facch := 2 },</span><br><span style="color: hsl(120, 100%, 40%);">+                       /* MS indicates bad RxQual, no difference */</span><br><span style="color: hsl(120, 100%, 40%);">+                  { meas_res := ts_MeasurementResults(rxq_f := 7),</span><br><span style="color: hsl(120, 100%, 40%);">+                        overpower_sacch := 2, overpower_facch := 2 }</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+     };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  pars := valueof(t_Pars(t_RslChanNr_Bm(0), ts_RSL_ChanMode_SIGN,</span><br><span style="color: hsl(120, 100%, 40%);">+                              spec := { top := top }, trx_nr := 1));</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_conn := f_start_handler(refers(f_TC_acch_overpower), pars);</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* test generation of RLL ERR IND based on Um errors (TS 48.058 3.9) */</span><br><span> /*     protocol error as per 44.006 */</span><br><span> /*   link layer failure (repetition of I-frame N200 times without ACK */</span><br><span>@@ -8160,6 +8461,12 @@</span><br><span> </span><br><span>     execute( TC_early_immediate_assignment() );</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_acch_overpower_rxqual_thresh() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_acch_overpower_rxqual_thresh_dtx() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_acch_overpower_always_on_facch() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_acch_overpower_always_on_sacch() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_acch_overpower_limit() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>      /* BEWARE: these test cases can potentially break the IUT or cause</span><br><span>    * weird/unexpected behavior.  Ensure that they are executed last. */</span><br><span>        execute( TC_dyn_osmo_pdch_tchh_race_act() );</span><br><span>diff --git a/library/GSM_RR_Types.ttcn b/library/GSM_RR_Types.ttcn</span><br><span>index f45784c..980020e 100644</span><br><span>--- a/library/GSM_RR_Types.ttcn</span><br><span>+++ b/library/GSM_RR_Types.ttcn</span><br><span>@@ -1104,6 +1104,27 @@</span><br><span>               }</span><br><span>    };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        template (value) MeasurementResults</span><br><span style="color: hsl(120, 100%, 40%);">+   ts_MeasurementResults(template (value) uint6_t rxl_f := 63,</span><br><span style="color: hsl(120, 100%, 40%);">+                         template (value) uint6_t rxl_s := 63,</span><br><span style="color: hsl(120, 100%, 40%);">+                         template (value) uint3_t rxq_f := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                          template (value) uint3_t rxq_s := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                          boolean dtx_used := false,</span><br><span style="color: hsl(120, 100%, 40%);">+                            boolean valid := true,</span><br><span style="color: hsl(120, 100%, 40%);">+                        template (omit) NcellReports reps := omit) := {</span><br><span style="color: hsl(120, 100%, 40%);">+         ba_used := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+              dtx_used := bool2bit(dtx_used),</span><br><span style="color: hsl(120, 100%, 40%);">+               rxlev_full_srv_cell := rxl_f,</span><br><span style="color: hsl(120, 100%, 40%);">+         threeg_ba_used := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+               meas_valid := bool2bit(not valid),</span><br><span style="color: hsl(120, 100%, 40%);">+            rxlev_sub_srv_cell := rxl_s,</span><br><span style="color: hsl(120, 100%, 40%);">+          si23_ba_used := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+         rxqual_full_srv_cell := rxq_f,</span><br><span style="color: hsl(120, 100%, 40%);">+                rxqual_sub_srv_cell := rxq_s,</span><br><span style="color: hsl(120, 100%, 40%);">+         no_ncell_m := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+              ncell_reports := reps</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         template (value) GsmRrL3Message ts_MEAS_REP(boolean valid,</span><br><span>                                               template (value) uint6_t rxl_f,</span><br><span>                                              template (value) uint6_t rxl_s,</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/26137">change 26137</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/+/26137"/><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: Ibdb94aa2779ae4b08f08cfef78c2959ae451a784 </div>
<div style="display:none"> Gerrit-Change-Number: 26137 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>