aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2020-06-09 04:01:47 +0700
committerfixeria <vyanitskiy@sysmocom.de>2020-06-12 06:55:05 +0000
commitf896d64e22f4e7efcfc186b8a0d4baffd229e8b1 (patch)
tree95c9159f1adbd517bb71cf61f73976e0606bc285 /src
parent578156b815530fbaf14037217197b77edca3fee0 (diff)
osmo-bts-trx/scheduler: properly handle NOPE.ind during handover
Looking at GSMTAP during handover, I've noticed many packets on RACH looking pretty much like false positives, all with RA=0x00. I correlated GSMTAP traces with TRXD traces, and figured out that they all are triggered by NOPE indications from osmo-trx. Since a NOPE.ind carries no valid burst, all its bits are set to zero. Funny enough, this sequence is still decoded just fine as a valid RACH, so that's why we see it on GSMTAP. Later on it gets rejected by L1SAP due to bad RSSI, ToA, and/or C/I ratio. The is a side effect of [1]. In order to ensure proper Uplink measurement reporting during handover, including the time before the handover RACH is received, let's treat and handle NOPE indications as Normal Bursts. [1] Ice45d5986610d9bcef2a7e41f0a395ec779e3928 Change-Id: Ic69f3bc2b776a23374c28a6884080a54bc16ef5f Related: OS#4592
Diffstat (limited to 'src')
-rw-r--r--src/osmo-bts-trx/scheduler_trx.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/osmo-bts-trx/scheduler_trx.c b/src/osmo-bts-trx/scheduler_trx.c
index 8a2bb123..97b590db 100644
--- a/src/osmo-bts-trx/scheduler_trx.c
+++ b/src/osmo-bts-trx/scheduler_trx.c
@@ -917,8 +917,9 @@ int rx_data_fn(struct l1sched_trx *l1t, enum trx_chan_type chan,
uint16_t ber10k;
int rc;
- /* handle RACH, if handover RACH detection is turned on */
- if (chan_state->ho_rach_detect == 1)
+ /* If handover RACH detection is turned on, treat this burst as an Access Burst.
+ * Handle NOPE.ind as usually to ensure proper Uplink measurement reporting. */
+ if (chan_state->ho_rach_detect == 1 && ~bi->flags & TRX_BI_F_NOPE_IND)
return rx_rach_fn(l1t, chan, bid, bi);
LOGL1S(DL1P, LOGL_DEBUG, l1t, bi->tn, chan, bi->fn,
@@ -1142,8 +1143,9 @@ int rx_tchf_fn(struct l1sched_trx *l1t, enum trx_chan_type chan,
uint8_t is_sub = 0;
uint8_t ft;
- /* handle rach, if handover rach detection is turned on */
- if (chan_state->ho_rach_detect == 1)
+ /* If handover RACH detection is turned on, treat this burst as an Access Burst.
+ * Handle NOPE.ind as usually to ensure proper Uplink measurement reporting. */
+ if (chan_state->ho_rach_detect == 1 && ~bi->flags & TRX_BI_F_NOPE_IND)
return rx_rach_fn(l1t, chan, bid, bi);
LOGL1S(DL1P, LOGL_DEBUG, l1t, bi->tn, chan, bi->fn,
@@ -1384,8 +1386,9 @@ int rx_tchh_fn(struct l1sched_trx *l1t, enum trx_chan_type chan,
uint8_t is_sub = 0;
uint8_t ft;
- /* handle RACH, if handover RACH detection is turned on */
- if (chan_state->ho_rach_detect == 1)
+ /* If handover RACH detection is turned on, treat this burst as an Access Burst.
+ * Handle NOPE.ind as usually to ensure proper Uplink measurement reporting. */
+ if (chan_state->ho_rach_detect == 1 && ~bi->flags & TRX_BI_F_NOPE_IND)
return rx_rach_fn(l1t, chan, bid, bi);
LOGL1S(DL1P, LOGL_DEBUG, l1t, bi->tn, chan, bi->fn,