common/rsl.c: RSL_IE_HANDO_REF is mandatory for handover CHAN ACT

According to 3GPP TS 48.058, section 8.4.1, the Handover Reference
element must be included if channel activation type is 'handover'.
Let's properly reject CHANnel ACTivation messages with missing
RSL_IE_HANDO_REF. Otherwise such requests are misinterpreted
as regular (non-handover) channel requests.

Found using TC_ho_rach() TTCN-3 test case.

Change-Id: I9c50e1dbeb54c5470560adcdfb2bdf5abbe47993
This commit is contained in:
Vadim Yanitskiy 2019-06-02 01:15:19 +07:00 committed by Harald Welte
parent 8ec940ce9a
commit aaca1217be
1 changed files with 7 additions and 3 deletions

View File

@ -1090,9 +1090,13 @@ static int rsl_rx_chan_activ(struct msgb *msg)
memset(&lchan->encr, 0, sizeof(lchan->encr));
/* 9.3.9 Handover Reference */
if ((type == RSL_ACT_INTER_ASYNC ||
type == RSL_ACT_INTER_SYNC) &&
TLVP_PRES_LEN(&tp, RSL_IE_HANDO_REF, 1)) {
if ((type == RSL_ACT_INTER_ASYNC || type == RSL_ACT_INTER_SYNC)) {
/* According to 8.4.1, the Handover Reference element is included
* if activation type is handover. Assuming it's mandatory. */
if (!TLVP_PRES_LEN(&tp, RSL_IE_HANDO_REF, 1)) {
LOGPLCHAN(lchan, DRSL, LOGL_NOTICE, "Missing Handover Reference IE\n");
return rsl_tx_chan_act_nack(lchan, RSL_ERR_MAND_IE_ERROR);
}
lchan->ho.active = HANDOVER_ENABLED;
lchan->ho.ref = *TLVP_VAL(&tp, RSL_IE_HANDO_REF);
}