diff options
author | Vadim Yanitskiy <vyanitskiy@sysmocom.de> | 2020-06-09 04:01:47 +0700 |
---|---|---|
committer | fixeria <vyanitskiy@sysmocom.de> | 2020-06-12 06:55:05 +0000 |
commit | f896d64e22f4e7efcfc186b8a0d4baffd229e8b1 (patch) | |
tree | 95c9159f1adbd517bb71cf61f73976e0606bc285 /src | |
parent | 578156b815530fbaf14037217197b77edca3fee0 (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.c | 15 |
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, |