aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <axilirator@gmail.com>2019-06-02 01:15:19 +0700
committerHarald Welte <laforge@gnumonks.org>2019-06-01 19:23:42 +0000
commitaaca1217be46fe93ae99e4ab1c921834d2b3f4fe (patch)
treee2ebbced6d560f15edae71e916eeb05fa93828ba
parent8ec940ce9a8ba21d112406d9e993e1341ad58f24 (diff)
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
-rw-r--r--src/common/rsl.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/common/rsl.c b/src/common/rsl.c
index b96182ff..410b38a7 100644
--- a/src/common/rsl.c
+++ b/src/common/rsl.c
@@ -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);
}