Change in osmo-bts[master]: measurement: make sure measurement interval end is detected

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
Fri Aug 17 14:54:28 UTC 2018


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


Change subject: measurement: make sure measurement interval end is detected
......................................................................

measurement: make sure measurement interval end is detected

the measurement interval end is detected by using the measurement
indication that is related to the SACCH block as a trigger to start the
computation. If the measurement indication for the SACCH gets lost
because the block could not be received then the processing is not
executed. This may cause wrong results or when it happens condecutively
an overflow of the measurement sample buffer.

- Store the frame number of the last received measurement indication
- Use the stored frame number to check if an interval was crossed when
  the next measurement indication is received. If we detect that we
  missed the interval, catch up by running the computation and
  start the next interval.

Change-Id: I3a86cd8185cc6b94258373fe929f0c2f1cf27cfa
Related: OS#2975
---
M include/osmo-bts/gsm_data_shared.h
M include/osmo-bts/measurement.h
M src/common/measurement.c
M tests/meas/meas_test.c
M tests/meas/meas_test.ok
5 files changed, 881 insertions(+), 5 deletions(-)



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

diff --git a/include/osmo-bts/gsm_data_shared.h b/include/osmo-bts/gsm_data_shared.h
index baa0145..c460ea0 100644
--- a/include/osmo-bts/gsm_data_shared.h
+++ b/include/osmo-bts/gsm_data_shared.h
@@ -260,6 +260,8 @@
 		uint8_t l1_info[2];
 		struct gsm_meas_rep_unidir ul_res;
 		int16_t ms_toa256;
+		/* Frame number of the last mesaurement indication receceived */
+		uint32_t last_fn;
 		/* Osmocom extended measurement results, see LC_UL_M_F_EXTD_VALID */
 		struct {
 			/* minimum value of toa256 during measurement period */
diff --git a/include/osmo-bts/measurement.h b/include/osmo-bts/measurement.h
index 283b0ff..30b244b 100644
--- a/include/osmo-bts/measurement.h
+++ b/include/osmo-bts/measurement.h
@@ -10,4 +10,6 @@
 
 void lchan_meas_process_measurement(struct gsm_lchan *lchan, struct bts_ul_meas *ulm, uint32_t fn);
 
+bool is_meas_overdue(struct gsm_lchan *lchan, uint32_t *fn_missed_end, uint32_t fn);
+
 #endif
diff --git a/src/common/measurement.c b/src/common/measurement.c
index a75b54d..061608b 100644
--- a/src/common/measurement.c
+++ b/src/common/measurement.c
@@ -271,7 +271,32 @@
 	return rc;
 }
 
-/* receive a L1 uplink measurement from L1 */
+/* Check if a measurement period is overdue. This situation may occur when the
+ * SACCH frame that closes the measurement interval was not received. Then the
+ * end of the measurement will not be detected. Using this function we can
+ * detect if we missed a measurement period end and we also find the frame
+ * number of the lost SACCH frame. (this function is only used internally,
+ * it is public to call it from unit-tests) */
+bool is_meas_overdue(struct gsm_lchan *lchan, uint32_t *fn_missed_end, uint32_t fn)
+{
+	unsigned int i;
+	unsigned int distance;
+
+	distance = abs(fn - lchan->meas.last_fn);
+	for (i = 1; i < distance; i++) {
+		if (is_meas_complete(lchan, i + lchan->meas.last_fn)) {
+			*fn_missed_end = i + lchan->meas.last_fn;
+			return true;
+		}
+	}
+
+	/* No missed interval ends - everything ok */
+	*fn_missed_end = 0;
+	return false;
+}
+
+/* receive a L1 uplink measurement from L1 (this function is only used
+ * internally, it is public to call it from unit-tests)  */
 int lchan_new_ul_meas(struct gsm_lchan *lchan, struct bts_ul_meas *ulm, uint32_t fn)
 {
 	if (lchan->state != LCHAN_S_ACTIVE) {
@@ -299,6 +324,8 @@
 	memcpy(&lchan->meas.uplink[lchan->meas.num_ul_meas++], ulm,
 		sizeof(*ulm));
 
+	lchan->meas.last_fn = fn;
+
 	return 0;
 }
 
@@ -484,9 +511,29 @@
  * interval. */
 void lchan_meas_process_measurement(struct gsm_lchan *lchan, struct bts_ul_meas *ulm, uint32_t fn)
 {
-	lchan_new_ul_meas(lchan, ulm, fn);
+	uint32_t fn_missed_end;
+	bool missed_end;
 
-	/* Check measurement period end and prepare the UL
-	 * measurment report at Meas period End */
-	lchan_meas_check_compute(lchan, fn);
+	/* The measurement processing detects the end of a measurement period
+	 * by checking if the received measurement sample is from a SACCH
+	 * block. If so, then the measurement computation is performed and the
+	 * next cycle starts. However, when the SACCH block is not received
+	 * then the associated measurement indication is also skipped. Because
+	 * of this we must check now if the measurement interval ended between
+	 * the last and the current call of this function */
+	missed_end = is_meas_overdue(lchan, &fn_missed_end, fn);
+
+	if (missed_end) {
+		DEBUGPFN(DMEAS, fn, "%s measurement interval ending missed, catching up...\n", gsm_lchan_name(lchan));
+		/* We missed the end of the interval. Do the computation now
+		 * and add the uplink measurement we got as the first sample
+		 * of a new interval */
+		lchan_meas_check_compute(lchan, fn_missed_end);
+		lchan_new_ul_meas(lchan, ulm, fn);
+	} else {
+		/* This is the normal case, we first add the measurement sample
+		 * to the current interva and run the check+computation */
+		lchan_new_ul_meas(lchan, ulm, fn);
+		lchan_meas_check_compute(lchan, fn);
+	}
 }
diff --git a/tests/meas/meas_test.c b/tests/meas/meas_test.c
index 2ba44d3..734ca89 100644
--- a/tests/meas/meas_test.c
+++ b/tests/meas/meas_test.c
@@ -117,6 +117,342 @@
 
 }
 
+/* This tests the function is_meas_overdue() and since is_meas_overdue()
+ * internally makes use of is_meas_complete(), this also gives
+ * is_meas_complete() a detailed check. */
+static void test_is_meas_overdue(void)
+{
+	struct gsm_lchan *lchan;
+	bool rc;
+	uint32_t fn_missed_end;
+	unsigned int i;
+
+	printf("\n\n");
+	printf("===========================================================\n");
+	printf("Testing is_meas_overdue() and is_meas_complete()\n");
+
+	/* Missing period-end-trigger at fn=12, TCH/F, TS0 */
+	lchan = &trx->ts[0].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_F;
+	lchan->meas.last_fn = 95;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 17 + 104);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 12 + 104);
+
+	/* Missing period-end-trigger at fn=12, TCH/H, TS0 */
+	lchan = &trx->ts[0].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 95;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 17 + 104);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 12 + 104);
+
+	/* Missing period-end-trigger at fn=12, TCH/H, TS1 */
+	lchan = &trx->ts[1].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 95;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 17 + 104);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 12 + 104);
+
+	/* Missing period-end-trigger at fn=25, TCH/F, TS1 */
+	lchan = &trx->ts[1].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_F;
+	lchan->meas.last_fn = 21;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 30);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 25);
+
+	/* Missing period-end-trigger at fn=25, TCH/H, TS1 */
+	lchan = &trx->ts[0].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 21;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 30);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 25);
+
+	/* Missing period-end-trigger at fn=25, TCH/H, TS1 */
+	lchan = &trx->ts[1].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 21;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 30);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 25);
+
+	/* Missing period-end-trigger at fn=38, TCH/F, TS2 */
+	lchan = &trx->ts[2].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_F;
+	lchan->meas.last_fn = 34;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 43);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 38);
+
+	/* Missing period-end-trigger at fn=38, TCH/H, TS2 */
+	lchan = &trx->ts[2].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 34;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 43);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 38);
+
+	/* Missing period-end-trigger at fn=38, TCH/H, TS2 */
+	lchan = &trx->ts[3].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 34;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 43);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 38);
+
+	/* Missing period-end-trigger at fn=51, TCH/F, TS3 */
+	lchan = &trx->ts[3].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_F;
+	lchan->meas.last_fn = 47;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 52);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 51);
+
+	/* Missing period-end-trigger at fn=51, TCH/H, TS3 */
+	lchan = &trx->ts[2].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 47;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 52);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 51);
+
+	/* Missing period-end-trigger at fn=51, TCH/H, TS3 */
+	lchan = &trx->ts[3].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 47;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 52);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 51);
+
+	/* Missing period-end-trigger at fn=64, TCH/F, TS4 */
+	lchan = &trx->ts[4].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_F;
+	lchan->meas.last_fn = 60;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 69);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 64);
+
+	/* Missing period-end-trigger at fn=64, TCH/H, TS4 */
+	lchan = &trx->ts[4].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 60;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 69);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 64);
+
+	/* Missing period-end-trigger at fn=64, TCH/H, TS4 */
+	lchan = &trx->ts[5].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 60;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 69);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 64);
+
+	/* Missing period-end-trigger at fn=77, TCH/F, TS5 */
+	lchan = &trx->ts[5].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_F;
+	lchan->meas.last_fn = 73;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 78);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 77);
+
+	/* Missing period-end-trigger at fn=77, TCH/H, TS5 */
+	lchan = &trx->ts[4].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 73;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 78);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 77);
+
+	/* Missing period-end-trigger at fn=77, TCH/H, TS5 */
+	lchan = &trx->ts[5].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 73;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 78);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 77);
+
+	/* Missing period-end-trigger at fn=90, TCH/F, TS6 */
+	lchan = &trx->ts[6].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_F;
+	lchan->meas.last_fn = 86;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 91);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 90);
+
+	/* Missing period-end-trigger at fn=90, TCH/F, TS6 */
+	lchan = &trx->ts[6].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 86;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 91);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 90);
+
+	/* Missing period-end-trigger at fn=90, TCH/F, TS6 */
+	lchan = &trx->ts[7].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 86;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 91);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 90);
+
+	/* Missing period-end-trigger at fn=103, TCH/F, TS7 */
+	lchan = &trx->ts[7].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_F;
+	lchan->meas.last_fn = 99;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 0);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 103);
+
+	/* Missing period-end-trigger at fn=103, TCH/F, TS7 */
+	lchan = &trx->ts[6].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 99;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 0);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 103);
+
+	/* Missing period-end-trigger at fn=103, TCH/F, TS7 */
+	lchan = &trx->ts[7].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 99;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 0);
+	OSMO_ASSERT(rc);
+	OSMO_ASSERT(fn_missed_end == 103);
+
+	/* Dropout inside the interval, no period-end-trigger missed */
+	lchan = &trx->ts[2].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 56;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 69);
+	OSMO_ASSERT(!rc);
+	OSMO_ASSERT(fn_missed_end == 0);
+
+	/* No dropout, but right after period-end-trigger */
+	lchan = &trx->ts[2].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 38;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 39);
+	OSMO_ASSERT(!rc);
+	OSMO_ASSERT(fn_missed_end == 0);
+
+	/* No dropout, two neigbouring frames at random position
+	 * (should not happen in the real world) */
+	lchan = &trx->ts[2].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 43;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 44);
+	OSMO_ASSERT(!rc);
+	OSMO_ASSERT(fn_missed_end == 0);
+
+	/* No dropout, Two neigbouring frames (period end, right side) */
+	lchan = &trx->ts[2].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 38;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 39);
+	OSMO_ASSERT(!rc);
+	OSMO_ASSERT(fn_missed_end == 0);
+
+	/* No dropout, Two neigbouring frames (period end, left side,
+	 * should not happen in the real world) */
+	lchan = &trx->ts[2].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 37;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 38);
+	OSMO_ASSERT(!rc);
+	OSMO_ASSERT(fn_missed_end == 0);
+
+	/* No dropout, test directly on a the trigger frame */
+	lchan = &trx->ts[2].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 34;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 38);
+	OSMO_ASSERT(!rc);
+	OSMO_ASSERT(fn_missed_end == 0);
+
+	/* No dropout, previous frame is trigger frame
+	 * (should not happen in the real world) */
+	lchan = &trx->ts[2].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	lchan->meas.last_fn = 38;
+	rc = is_meas_overdue(lchan, &fn_missed_end, 38);
+	OSMO_ASSERT(!rc);
+	OSMO_ASSERT(fn_missed_end == 0);
+
+	/* Missing period-end-trigger at fn=38+i*104, TCH/F, TS2 to
+	 * see the modulus is correct. */
+	for (i = 0; i < 100; i++) {
+		lchan = &trx->ts[2].lchan[0];
+		lchan->ts->pchan = GSM_PCHAN_TCH_F;
+		lchan->meas.last_fn = 34 + 104 * 1;
+		rc = is_meas_overdue(lchan, &fn_missed_end, 43 + 104 * 1);
+		OSMO_ASSERT(rc);
+		OSMO_ASSERT(fn_missed_end == 38 + 104 * 1);
+	}
+}
+
+/* This tests the robustness of lchan_meas_process_measurement(). This is the
+ * function that is called from l1_sap.c each time a measurement indication is
+ * received. The process must still go on when measurement indications (blocks)
+ * are lost or otherwise spaced out. Even the complete absence of the
+ * measurement indications from the SACCH which are used to detect the interval
+ * end must not keep the interval from beeing processed. */
+void test_lchan_meas_process_measurement(bool no_sacch, bool dropouts)
+{
+	struct gsm_lchan *lchan = &trx->ts[2].lchan[0];
+	unsigned int i;
+	unsigned int k = 0;
+	unsigned int fn = 0;
+	struct bts_ul_meas ulm;
+
+	printf("\n\n");
+	printf("===========================================================\n");
+	printf("Testing lchan_meas_process_measurement()\n");
+	if (no_sacch)
+		printf(" * SACCH blocks not generated.\n");
+	if (dropouts)
+		printf
+		    (" * Simulate dropouts by leaving out every 4th measurement\n");
+
+	ulm.ber10k = 0;
+	ulm.ta_offs_256bits = 256;
+	ulm.c_i = 0;
+	ulm.is_sub = 0;
+	ulm.inv_rssi = 90;
+
+	lchan->ts->pchan = GSM_PCHAN_TCH_F;
+	reset_lchan_meas(lchan);
+
+	/* feed uplink measurements into the code */
+	for (i = 0; i < 100; i++) {
+
+		if (dropouts == false || i % 4)
+			lchan_meas_process_measurement(lchan, &ulm, fn);
+		else
+			printf
+			    ("(leaving out measurement sample for frame number %u)\n",
+			     fn);
+
+		fn += 4;
+		if (k == 2) {
+			fn++;
+			k = 0;
+		} else
+			k++;
+
+		if (fn % 104 == 39 && no_sacch == false) {
+			printf
+			    ("(now adding measurement sample for SACCH block)\n");
+			lchan_meas_process_measurement(lchan, &ulm, fn - 1);
+		} else
+			printf
+			    ("(leaving out measurement sample for SACCH block)\n");
+	}
+}
+
 int main(int argc, char **argv)
 {
 	void *tall_bts_ctx;
@@ -172,6 +508,17 @@
 	test_meas_compute(&mtc4);
 	test_meas_compute(&mtc5);
 
+	printf("\n");
+	printf("***************************************************\n");
+	printf("*** MEASUREMENT INTERVAL ENDING DETECTION TESTS ***\n");
+	printf("***************************************************\n");
+
+	test_is_meas_overdue();
+	test_lchan_meas_process_measurement(false, false);
+	test_lchan_meas_process_measurement(true, false);
+	test_lchan_meas_process_measurement(false, true);
+	test_lchan_meas_process_measurement(true, true);
+
 	printf("Success\n");
 
 	return 0;
diff --git a/tests/meas/meas_test.ok b/tests/meas/meas_test.ok
index 026899d..77b652e 100644
--- a/tests/meas/meas_test.ok
+++ b/tests/meas/meas_test.ok
@@ -573,4 +573,482 @@
 meas.ext.toa256_std_dev  |      0 |      0
 meas.ul_res.full.rx_lev  |     20 |     20
 meas.ul_res.full.rx_qual |      0 |      0
+
+***************************************************
+*** MEASUREMENT INTERVAL ENDING DETECTION TESTS ***
+***************************************************
+
+
+===========================================================
+Testing is_meas_overdue() and is_meas_complete()
+
+
+===========================================================
+Testing lchan_meas_process_measurement()
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(now adding measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(now adding measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(now adding measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(now adding measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+
+
+===========================================================
+Testing lchan_meas_process_measurement()
+ * SACCH blocks not generated.
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+
+
+===========================================================
+Testing lchan_meas_process_measurement()
+ * Simulate dropouts by leaving out every 4th measurement
+(leaving out measurement sample for frame number 0)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 17)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 34)
+(now adding measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 52)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 69)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 86)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 104)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 121)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 138)
+(now adding measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 156)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 173)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 190)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 208)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 225)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 242)
+(now adding measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 260)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 277)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 294)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 312)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 329)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 346)
+(now adding measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 364)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 381)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 398)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 416)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+
+
+===========================================================
+Testing lchan_meas_process_measurement()
+ * SACCH blocks not generated.
+ * Simulate dropouts by leaving out every 4th measurement
+(leaving out measurement sample for frame number 0)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 17)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 34)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 52)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 69)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 86)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 104)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 121)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 138)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 156)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 173)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 190)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 208)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 225)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 242)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 260)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 277)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 294)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 312)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 329)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 346)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 364)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 381)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 398)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for frame number 416)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
+(leaving out measurement sample for SACCH block)
 Success

-- 
To view, visit https://gerrit.osmocom.org/10492
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: I3a86cd8185cc6b94258373fe929f0c2f1cf27cfa
Gerrit-Change-Number: 10492
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/20180817/e299feee/attachment.htm>


More information about the gerrit-log mailing list