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
This commit is contained in:
Neels Hofmeyr 2021-01-28 00:07:32 +01:00
parent a666f713ec
commit 10272f7702
1 changed files with 14 additions and 2 deletions

View File

@ -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;