<p>dexter has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/10654">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">measurement: fix is_meas_overdue() and increase testcoverage<br><br>The tests TC_meas_res_sign_sdcch4 and TC_meas_res_sign_sdcch8 are<br>failing mainly because lchan->ts->nr is confused with lchan->nr.<br>There is also a small problem with one of the formulas that compute<br>fn_missed_end.<br><br>- Add explainatory comment to the lookup tables on what the index<br>  is refering to<br>- use lchan-nr instead of lchan->ts->nr when dealing with SDCCH/4/8<br>- simplfy and fix the formula<br>- increase the testcoverage of the unit tests, give SDCCH/4/8 also<br>  a thorough check.<br><br>Change-Id: I5d555a21003943bf720c53f3a611029ba45339a9<br>Related: OS#2975<br>---<br>M src/common/measurement.c<br>M tests/meas/meas_test.c<br>2 files changed, 231 insertions(+), 7 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/54/10654/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/common/measurement.c b/src/common/measurement.c</span><br><span>index cb45e6e..2a7d7de 100644</span><br><span>--- a/src/common/measurement.c</span><br><span>+++ b/src/common/measurement.c</span><br><span>@@ -114,7 +114,10 @@</span><br><span>  * 4           4 and 5                      52 to 51     64,  90,  12,  38</span><br><span>  * 5                         4 and 5        65 to 64     77,  103, 25,  51</span><br><span>  * 6           6 and 7                      78 to 77     90,  12,  38,  64</span><br><span style="color: hsl(0, 100%, 40%);">- * 7                         6 and 7        91 to 90     103, 25,  51,  77 */</span><br><span style="color: hsl(120, 100%, 40%);">+ * 7                         6 and 7        91 to 90     103, 25,  51,  77</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Note: The array index of the following three lookup tables refes to a</span><br><span style="color: hsl(120, 100%, 40%);">+ *       timeslot number. */</span><br><span> </span><br><span> static const uint8_t tchf_meas_rep_fn104[] = {</span><br><span>   [0] =   90,</span><br><span>@@ -155,7 +158,10 @@</span><br><span>  *</span><br><span>  * SDCCH/8          12 to 11</span><br><span>  * SDCCH/4          37 to 36</span><br><span style="color: hsl(0, 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%);">+ * Note: The array index of the following three lookup tables refes to a</span><br><span style="color: hsl(120, 100%, 40%);">+ *       subslot number. */</span><br><span> </span><br><span> /* FN of the first burst whose block completes before reaching fn%102=11 */</span><br><span> static const uint8_t sdcch8_meas_rep_fn102[] = {</span><br><span>@@ -308,6 +314,7 @@</span><br><span> {</span><br><span>         uint32_t fn_mod;</span><br><span>     uint32_t last_fn_mod;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint32_t fn_rounded;</span><br><span>         uint8_t interval_end;</span><br><span>        uint8_t modulus;</span><br><span>     const uint8_t *tbl;</span><br><span>@@ -338,12 +345,12 @@</span><br><span>  case GSM_PCHAN_SDCCH8_SACCH8C:</span><br><span>       case GSM_PCHAN_SDCCH8_SACCH8C_CBCH:</span><br><span>          modulus = 102;</span><br><span style="color: hsl(0, 100%, 40%);">-          interval_end = sdcch8_meas_rep_fn102[lchan->ts->nr];</span><br><span style="color: hsl(120, 100%, 40%);">+            interval_end = sdcch8_meas_rep_fn102[lchan->nr];</span><br><span>          break;</span><br><span>       case GSM_PCHAN_CCCH_SDCCH4:</span><br><span>  case GSM_PCHAN_CCCH_SDCCH4_CBCH:</span><br><span>             modulus = 102;</span><br><span style="color: hsl(0, 100%, 40%);">-          interval_end = sdcch4_meas_rep_fn102[lchan->ts->nr];</span><br><span style="color: hsl(120, 100%, 40%);">+            interval_end = sdcch4_meas_rep_fn102[lchan->nr];</span><br><span>          break;</span><br><span>       default:</span><br><span>             return false;</span><br><span>@@ -352,6 +359,7 @@</span><br><span> </span><br><span>      fn_mod = fn % modulus;</span><br><span>       last_fn_mod = lchan->meas.last_fn % modulus;</span><br><span style="color: hsl(120, 100%, 40%);">+       fn_rounded = fn - fn_mod;</span><br><span> </span><br><span>        if (fn_mod > last_fn_mod) {</span><br><span>               /* When the current frame number is larger then the last frame</span><br><span>@@ -359,7 +367,7 @@</span><br><span>                  * the two. If it does we calculate the absolute frame number</span><br><span>                 * position on which the interval should have ended. */</span><br><span>              if (interval_end > last_fn_mod && interval_end < fn_mod) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        *fn_missed_end = interval_end + fn - fn_mod;</span><br><span style="color: hsl(120, 100%, 40%);">+                  *fn_missed_end = interval_end + fn_rounded;</span><br><span>                  return true;</span><br><span>                 }</span><br><span>    } else {</span><br><span>@@ -372,7 +380,7 @@</span><br><span>                       if (fn < lchan->meas.last_fn)</span><br><span>                          *fn_missed_end = interval_end + GSM_MAX_FN - modulus;</span><br><span>                        else</span><br><span style="color: hsl(0, 100%, 40%);">-                            *fn_missed_end = interval_end + fn - modulus;</span><br><span style="color: hsl(120, 100%, 40%);">+                         *fn_missed_end = interval_end + fn_rounded - modulus;</span><br><span>                        return true;</span><br><span>                 }</span><br><span>            /* We also check the section that starts from the beginning of</span><br><span>@@ -381,7 +389,7 @@</span><br><span>                         if (fn < lchan->meas.last_fn)</span><br><span>                          *fn_missed_end = interval_end;</span><br><span>                       else</span><br><span style="color: hsl(0, 100%, 40%);">-                            *fn_missed_end = interval_end + fn - fn_mod;</span><br><span style="color: hsl(120, 100%, 40%);">+                          *fn_missed_end = interval_end + fn_rounded;</span><br><span>                  return true;</span><br><span>                 }</span><br><span>    }</span><br><span>diff --git a/tests/meas/meas_test.c b/tests/meas/meas_test.c</span><br><span>index ec89df9..d5900e9 100644</span><br><span>--- a/tests/meas/meas_test.c</span><br><span>+++ b/tests/meas/meas_test.c</span><br><span>@@ -482,6 +482,222 @@</span><br><span>       rc = is_meas_overdue(lchan, &fn_missed_end, GSM_MAX_FN - 1);</span><br><span>     OSMO_ASSERT(!rc);</span><br><span>    OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Missing period-end-trigger at fn=66, SDCCH/8, TS0, SS0 */</span><br><span style="color: hsl(120, 100%, 40%);">+  fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[0];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;</span><br><span style="color: hsl(120, 100%, 40%);">+    lchan->meas.last_fn = 47;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 15 + 102);</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_ASSERT(rc);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(fn_missed_end == 66);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Missing period-end-trigger at fn=70, SDCCH/8, TS0, SS1 */</span><br><span style="color: hsl(120, 100%, 40%);">+  fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[1];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;</span><br><span style="color: hsl(120, 100%, 40%);">+    lchan->meas.last_fn = 51;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 19 + 102);</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_ASSERT(rc);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(fn_missed_end == 70);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Missing period-end-trigger at fn=74, SDCCH/8, TS0, SS2 */</span><br><span style="color: hsl(120, 100%, 40%);">+  fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[2];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;</span><br><span style="color: hsl(120, 100%, 40%);">+    lchan->meas.last_fn = 55;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 23 + 102);</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_ASSERT(rc);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(fn_missed_end == 74);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Missing period-end-trigger at fn=78, SDCCH/8, TS0, SS3 */</span><br><span style="color: hsl(120, 100%, 40%);">+  fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[3];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;</span><br><span style="color: hsl(120, 100%, 40%);">+    lchan->meas.last_fn = 59;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 27 + 102);</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_ASSERT(rc);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(fn_missed_end == 78);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Missing period-end-trigger at fn=98, SDCCH/8, TS0, SS4 */</span><br><span style="color: hsl(120, 100%, 40%);">+  fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[4];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;</span><br><span style="color: hsl(120, 100%, 40%);">+    lchan->meas.last_fn = 82;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 31 + 102);</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_ASSERT(rc);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(fn_missed_end == 98);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Missing period-end-trigger at fn=102, SDCCH/8, TS0, SS5 */</span><br><span style="color: hsl(120, 100%, 40%);">+ fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[5];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;</span><br><span style="color: hsl(120, 100%, 40%);">+    lchan->meas.last_fn = 86;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 35 + 102);</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_ASSERT(rc);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(fn_missed_end == 102);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Missing period-end-trigger at fn=106, SDCCH/8, TS0, SS6 */</span><br><span style="color: hsl(120, 100%, 40%);">+ fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[6];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;</span><br><span style="color: hsl(120, 100%, 40%);">+    lchan->meas.last_fn = 90;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 39 + 102);</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_ASSERT(rc);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(fn_missed_end == 4 + 102);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Missing period-end-trigger at fn=200, SDCCH/8, TS0, SS7 */</span><br><span style="color: hsl(120, 100%, 40%);">+ fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[7];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;</span><br><span style="color: hsl(120, 100%, 40%);">+    lchan->meas.last_fn = 94;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 43 + 102);</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_ASSERT(rc);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(fn_missed_end == 8 + 102);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* No dropout, SDCCH/8, TS0, SS0 */</span><br><span style="color: hsl(120, 100%, 40%);">+   fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[0];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;</span><br><span style="color: hsl(120, 100%, 40%);">+    lchan->meas.last_fn = 47;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 66);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(!rc);</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* No dropout, SDCCH/8, TS0, SS1 */</span><br><span style="color: hsl(120, 100%, 40%);">+   fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[1];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;</span><br><span style="color: hsl(120, 100%, 40%);">+    lchan->meas.last_fn = 51;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 70);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(!rc);</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* No dropout, SDCCH/8, TS0, SS2 */</span><br><span style="color: hsl(120, 100%, 40%);">+   fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[2];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;</span><br><span style="color: hsl(120, 100%, 40%);">+    lchan->meas.last_fn = 55;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 74);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(!rc);</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* No dropout, SDCCH/8, TS0, SS3 */</span><br><span style="color: hsl(120, 100%, 40%);">+   fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[3];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;</span><br><span style="color: hsl(120, 100%, 40%);">+    lchan->meas.last_fn = 59;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 78);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(!rc);</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* No dropout, SDCCH/8, TS0, SS4 */</span><br><span style="color: hsl(120, 100%, 40%);">+   fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[4];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;</span><br><span style="color: hsl(120, 100%, 40%);">+    lchan->meas.last_fn = 82;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 98);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(!rc);</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* No dropout, SDCCH/8, TS0, SS5 */</span><br><span style="color: hsl(120, 100%, 40%);">+   fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[5];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;</span><br><span style="color: hsl(120, 100%, 40%);">+    lchan->meas.last_fn = 86;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 102);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(!rc);</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* No dropout, SDCCH/8, TS0, SS6 */</span><br><span style="color: hsl(120, 100%, 40%);">+   fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[6];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;</span><br><span style="color: hsl(120, 100%, 40%);">+    lchan->meas.last_fn = 90;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 4 + 102);</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(!rc);</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* No dropout, SDCCH/8, TS0, SS7 */</span><br><span style="color: hsl(120, 100%, 40%);">+   fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[7];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;</span><br><span style="color: hsl(120, 100%, 40%);">+    lchan->meas.last_fn = 94;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 8 + 102);</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(!rc);</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Missing period-end-trigger at fn=88, SDCCH/4, TS0, SS0 */</span><br><span style="color: hsl(120, 100%, 40%);">+  fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[0];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan->meas.last_fn = 57;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 37 + 102);</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_ASSERT(rc);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(fn_missed_end == 88);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Missing period-end-trigger at fn=92, SDCCH/4, TS0, SS1 */</span><br><span style="color: hsl(120, 100%, 40%);">+  fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[1];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan->meas.last_fn = 61;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 41 + 102);</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_ASSERT(rc);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(fn_missed_end == 92);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Missing period-end-trigger at fn=6, SDCCH/4, TS0, SS2 */</span><br><span style="color: hsl(120, 100%, 40%);">+   fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[2];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan->meas.last_fn = GSM_MAX_FN - 102 + 98;</span><br><span style="color: hsl(120, 100%, 40%);">+       rc = is_meas_overdue(lchan, &fn_missed_end, 47);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(rc);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(fn_missed_end == 6);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Missing period-end-trigger at fn=10, SDCCH/4, TS0, SS3 */</span><br><span style="color: hsl(120, 100%, 40%);">+  fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[3];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan->meas.last_fn = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+   rc = is_meas_overdue(lchan, &fn_missed_end, 51);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(rc);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(fn_missed_end == 10);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* No dropout, SDCCH/4, TS0, SS0 */</span><br><span style="color: hsl(120, 100%, 40%);">+   fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[0];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan->meas.last_fn = 57;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 88);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(!rc);</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* No dropout, SDCCH/4, TS0, SS1 */</span><br><span style="color: hsl(120, 100%, 40%);">+   fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[1];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan->meas.last_fn = 61;</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = is_meas_overdue(lchan, &fn_missed_end, 92);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(!rc);</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* No dropout, SDCCH/4, TS0, SS2 */</span><br><span style="color: hsl(120, 100%, 40%);">+   fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[2];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan->meas.last_fn = GSM_MAX_FN - 102 + 98;</span><br><span style="color: hsl(120, 100%, 40%);">+       rc = is_meas_overdue(lchan, &fn_missed_end, 6);</span><br><span style="color: hsl(120, 100%, 40%);">+   OSMO_ASSERT(!rc);</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* No dropout, SDCCH/4, TS0, SS3 */</span><br><span style="color: hsl(120, 100%, 40%);">+   fn_missed_end = LCHAN_FN_DUMMY;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan = &trx->ts[0].lchan[3];</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan->meas.last_fn = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+   rc = is_meas_overdue(lchan, &fn_missed_end, 10);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(!rc);</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);</span><br><span> }</span><br><span> </span><br><span> /* This tests the robustness of lchan_meas_process_measurement(). This is the</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/10654">change 10654</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/10654"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bts </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I5d555a21003943bf720c53f3a611029ba45339a9 </div>
<div style="display:none"> Gerrit-Change-Number: 10654 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>