From 10272f77022c9a803e356900d1eb7dfa2164d41b Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Thu, 28 Jan 2021 00:07:32 +0100 Subject: [PATCH] chan activ: activate DL SACCH only when TA is known A channel activation for handover to another cell does not know the Timing Advance until the handover RACH is received. It does not make much sense to enable downlink SACCH without an accurate TA. If the BSC omits the Access Delay IE (a.k.a. the Timing Advance), do not enable downlink SACCH. This is expected to happen only for inter-cell handover. In all other situations, the TA should be known either from a Channel Request RACH for Immediate Assignment, or from the previous lchan on the same cell upon Assignment / intra-cell handover. Related: OS#4008 OS#4009 SYS#5192 Change-Id: I170b63c9856230d5f1a10654a9d950ada8e730d7 --- src/common/rsl.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/common/rsl.c b/src/common/rsl.c index b4df22cd2..01a0ab485 100644 --- a/src/common/rsl.c +++ b/src/common/rsl.c @@ -1545,11 +1545,23 @@ static int rsl_rx_chan_activ(struct msgb *msg) } /* Indicate which SAPIs should be enabled before the first RACH is received, for handover. See 3GPP TS 48.058 - * 4.1.3 and 4.1.4. */ + * 4.1.3 and 4.1.4. + * + * | | Access || transmit | activate | This implementation + * | MS Power | Delay || on main channel | dl SACCH | activates DL SACCH + * ----------------------------------------------------------------------------------------- + * async ho no * --> yes no no + * async ho yes * --> yes may be started no + * async ho yes yes --> yes may be started yes + * sync ho no no --> yes no no + * sync ho yes no --> yes may be started no + * sync ho yes yes --> yes shall be started yes + */ switch (type) { case RSL_ACT_INTER_ASYNC: case RSL_ACT_INTER_SYNC: - lchan->want_dl_sacch_active = TLVP_PRES_LEN(&tp, RSL_IE_MS_POWER, 1); + lchan->want_dl_sacch_active = (TLVP_PRES_LEN(&tp, RSL_IE_MS_POWER, 1) + && TLVP_PRES_LEN(&tp, RSL_IE_ACCESS_DELAY, 1)); break; default: lchan->want_dl_sacch_active = true;