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