aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2021-01-28 00:07:32 +0100
committerNeels Hofmeyr <neels@hofmeyr.de>2021-01-28 23:57:10 +0100
commit10272f77022c9a803e356900d1eb7dfa2164d41b (patch)
treea12dbfa79d57e9319ff53fc87b016cababc5b698
parenta666f713ecedf97efe1b76ad0f32c13cc209bcec (diff)
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
-rw-r--r--src/common/rsl.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/common/rsl.c b/src/common/rsl.c
index b4df22cd..01a0ab48 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;