Change in osmo-bts[master]: measurement: fix is_meas_overdue() and increase testcoverage

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

dexter gerrit-no-reply at lists.osmocom.org
Tue Aug 28 15:06:18 UTC 2018


dexter has uploaded this change for review. ( https://gerrit.osmocom.org/10654


Change subject: measurement: fix is_meas_overdue() and increase testcoverage
......................................................................

measurement: fix is_meas_overdue() and increase testcoverage

The tests TC_meas_res_sign_sdcch4 and TC_meas_res_sign_sdcch8 are
failing mainly because lchan->ts->nr is confused with lchan->nr.
There is also a small problem with one of the formulas that compute
fn_missed_end.

- Add explainatory comment to the lookup tables on what the index
  is refering to
- use lchan-nr instead of lchan->ts->nr when dealing with SDCCH/4/8
- simplfy and fix the formula
- increase the testcoverage of the unit tests, give SDCCH/4/8 also
  a thorough check.

Change-Id: I5d555a21003943bf720c53f3a611029ba45339a9
Related: OS#2975
---
M src/common/measurement.c
M tests/meas/meas_test.c
2 files changed, 231 insertions(+), 7 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/54/10654/1

diff --git a/src/common/measurement.c b/src/common/measurement.c
index cb45e6e..2a7d7de 100644
--- a/src/common/measurement.c
+++ b/src/common/measurement.c
@@ -114,7 +114,10 @@
  * 4           4 and 5                      52 to 51     64,  90,  12,  38
  * 5                         4 and 5        65 to 64     77,  103, 25,  51
  * 6           6 and 7                      78 to 77     90,  12,  38,  64
- * 7                         6 and 7        91 to 90     103, 25,  51,  77 */
+ * 7                         6 and 7        91 to 90     103, 25,  51,  77
+ *
+ * Note: The array index of the following three lookup tables refes to a
+ *       timeslot number. */
 
 static const uint8_t tchf_meas_rep_fn104[] = {
 	[0] =	90,
@@ -155,7 +158,10 @@
  *
  * SDCCH/8		12 to 11
  * SDCCH/4		37 to 36
- */
+ *
+ *
+ * Note: The array index of the following three lookup tables refes to a
+ *       subslot number. */
 
 /* FN of the first burst whose block completes before reaching fn%102=11 */
 static const uint8_t sdcch8_meas_rep_fn102[] = {
@@ -308,6 +314,7 @@
 {
 	uint32_t fn_mod;
 	uint32_t last_fn_mod;
+	uint32_t fn_rounded;
 	uint8_t interval_end;
 	uint8_t modulus;
 	const uint8_t *tbl;
@@ -338,12 +345,12 @@
 	case GSM_PCHAN_SDCCH8_SACCH8C:
 	case GSM_PCHAN_SDCCH8_SACCH8C_CBCH:
 		modulus = 102;
-		interval_end = sdcch8_meas_rep_fn102[lchan->ts->nr];
+		interval_end = sdcch8_meas_rep_fn102[lchan->nr];
 		break;
 	case GSM_PCHAN_CCCH_SDCCH4:
 	case GSM_PCHAN_CCCH_SDCCH4_CBCH:
 		modulus = 102;
-		interval_end = sdcch4_meas_rep_fn102[lchan->ts->nr];
+		interval_end = sdcch4_meas_rep_fn102[lchan->nr];
 		break;
 	default:
 		return false;
@@ -352,6 +359,7 @@
 
 	fn_mod = fn % modulus;
 	last_fn_mod = lchan->meas.last_fn % modulus;
+	fn_rounded = fn - fn_mod;
 
 	if (fn_mod > last_fn_mod) {
 		/* When the current frame number is larger then the last frame
@@ -359,7 +367,7 @@
 		 * the two. If it does we calculate the absolute frame number
 		 * position on which the interval should have ended. */
 		if (interval_end > last_fn_mod && interval_end < fn_mod) {
-			*fn_missed_end = interval_end + fn - fn_mod;
+			*fn_missed_end = interval_end + fn_rounded;
 			return true;
 		}
 	} else {
@@ -372,7 +380,7 @@
 			if (fn < lchan->meas.last_fn)
 				*fn_missed_end = interval_end + GSM_MAX_FN - modulus;
 			else
-				*fn_missed_end = interval_end + fn - modulus;
+				*fn_missed_end = interval_end + fn_rounded - modulus;
 			return true;
 		}
 		/* We also check the section that starts from the beginning of
@@ -381,7 +389,7 @@
 			if (fn < lchan->meas.last_fn)
 				*fn_missed_end = interval_end;
 			else
-				*fn_missed_end = interval_end + fn - fn_mod;
+				*fn_missed_end = interval_end + fn_rounded;
 			return true;
 		}
 	}
diff --git a/tests/meas/meas_test.c b/tests/meas/meas_test.c
index ec89df9..d5900e9 100644
--- a/tests/meas/meas_test.c
+++ b/tests/meas/meas_test.c
@@ -482,6 +482,222 @@
 	rc = is_meas_overdue(lchan, &fn_missed_end, GSM_MAX_FN - 1);
 	OSMO_ASSERT(!rc);
 	OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);
+
+	/* Missing period-end-trigger at fn=66, SDCCH/8, TS0, SS0 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	lchan->meas.last_fn = 47;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 15 + 102);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 66);
+
+	/* Missing period-end-trigger at fn=70, SDCCH/8, TS0, SS1 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	lchan->meas.last_fn = 51;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 19 + 102);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 70);
+
+	/* Missing period-end-trigger at fn=74, SDCCH/8, TS0, SS2 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[2];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	lchan->meas.last_fn = 55;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 23 + 102);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 74);
+
+	/* Missing period-end-trigger at fn=78, SDCCH/8, TS0, SS3 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[3];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	lchan->meas.last_fn = 59;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 27 + 102);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 78);
+
+	/* Missing period-end-trigger at fn=98, SDCCH/8, TS0, SS4 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[4];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	lchan->meas.last_fn = 82;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 31 + 102);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 98);
+
+	/* Missing period-end-trigger at fn=102, SDCCH/8, TS0, SS5 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[5];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	lchan->meas.last_fn = 86;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 35 + 102);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 102);
+
+	/* Missing period-end-trigger at fn=106, SDCCH/8, TS0, SS6 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[6];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	lchan->meas.last_fn = 90;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 39 + 102);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 4 + 102);
+
+	/* Missing period-end-trigger at fn=200, SDCCH/8, TS0, SS7 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[7];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	lchan->meas.last_fn = 94;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 43 + 102);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 8 + 102);
+
+	/* No dropout, SDCCH/8, TS0, SS0 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	lchan->meas.last_fn = 47;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 66);
+	OSMO_ASSERT(!rc);
+	OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);
+
+	/* No dropout, SDCCH/8, TS0, SS1 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	lchan->meas.last_fn = 51;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 70);
+	OSMO_ASSERT(!rc);
+	OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);
+
+	/* No dropout, SDCCH/8, TS0, SS2 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[2];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	lchan->meas.last_fn = 55;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 74);
+	OSMO_ASSERT(!rc);
+	OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);
+
+	/* No dropout, SDCCH/8, TS0, SS3 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[3];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	lchan->meas.last_fn = 59;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 78);
+	OSMO_ASSERT(!rc);
+	OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);
+
+	/* No dropout, SDCCH/8, TS0, SS4 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[4];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	lchan->meas.last_fn = 82;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 98);
+	OSMO_ASSERT(!rc);
+	OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);
+
+	/* No dropout, SDCCH/8, TS0, SS5 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[5];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	lchan->meas.last_fn = 86;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 102);
+	OSMO_ASSERT(!rc);
+	OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);
+
+	/* No dropout, SDCCH/8, TS0, SS6 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[6];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	lchan->meas.last_fn = 90;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 4 + 102);
+	OSMO_ASSERT(!rc);
+	OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);
+
+	/* No dropout, SDCCH/8, TS0, SS7 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[7];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	lchan->meas.last_fn = 94;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 8 + 102);
+	OSMO_ASSERT(!rc);
+	OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);
+
+	/* Missing period-end-trigger at fn=88, SDCCH/4, TS0, SS0 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;
+	lchan->meas.last_fn = 57;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 37 + 102);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 88);
+
+	/* Missing period-end-trigger at fn=92, SDCCH/4, TS0, SS1 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;
+	lchan->meas.last_fn = 61;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 41 + 102);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 92);
+
+	/* Missing period-end-trigger at fn=6, SDCCH/4, TS0, SS2 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[2];
+	lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;
+	lchan->meas.last_fn = GSM_MAX_FN - 102 + 98;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 47);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 6);
+
+	/* Missing period-end-trigger at fn=10, SDCCH/4, TS0, SS3 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[3];
+	lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;
+	lchan->meas.last_fn = 0;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 51);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 10);
+
+	/* No dropout, SDCCH/4, TS0, SS0 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;
+	lchan->meas.last_fn = 57;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 88);
+	OSMO_ASSERT(!rc);
+	OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);
+
+	/* No dropout, SDCCH/4, TS0, SS1 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;
+	lchan->meas.last_fn = 61;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 92);
+	OSMO_ASSERT(!rc);
+	OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);
+
+	/* No dropout, SDCCH/4, TS0, SS2 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[2];
+	lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;
+	lchan->meas.last_fn = GSM_MAX_FN - 102 + 98;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 6);
+	OSMO_ASSERT(!rc);
+	OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);
+
+	/* No dropout, SDCCH/4, TS0, SS3 */
+	fn_missed_end = LCHAN_FN_DUMMY;
+	lchan = &trx->ts[0].lchan[3];
+	lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;
+	lchan->meas.last_fn = 0;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 10);
+	OSMO_ASSERT(!rc);
+	OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);
 }
 
 /* This tests the robustness of lchan_meas_process_measurement(). This is the

-- 
To view, visit https://gerrit.osmocom.org/10654
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I5d555a21003943bf720c53f3a611029ba45339a9
Gerrit-Change-Number: 10654
Gerrit-PatchSet: 1
Gerrit-Owner: dexter <pmaier at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20180828/e015e13c/attachment.htm>


More information about the gerrit-log mailing list