From 1a87c1b1891262e063d3bc862a8a1babef943f74 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 14 Dec 2015 15:26:07 +0100 Subject: LaPDm: Refuse SUSPEND/RESUME/RECONNECT in BTS mode The primitives for SUSPEND, RESUME and RECONNECT are only permitted on the MS side of the LAPDm link, not on the BTS side. So we should check for this and reject, accordingly. --- src/gsm/lapdm.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/gsm/lapdm.c b/src/gsm/lapdm.c index 54d3a0b8..d44335fe 100644 --- a/src/gsm/lapdm.c +++ b/src/gsm/lapdm.c @@ -1092,6 +1092,23 @@ static int rslms_rx_rll(struct msgb *msg, struct lapdm_channel *lc) else le = &lc->lapdm_dcch; + /* 4.1.1.5 / 4.1.1.6 / 4.1.1.7 all only exist on MS side, not + * BTS side */ + if (le->mode == LAPDM_MODE_BTS) { + switch (msg_type) { + case RSL_MT_SUSP_REQ: + case RSL_MT_RES_REQ: + case RSL_MT_RECON_REQ: + LOGP(DLLAPD, LOGL_NOTICE, "(%p) RLL Message '%s' unsupported in BTS side LAPDm\n", + lc->name, rsl_msg_name(msg_type)); + msgb_free(msg); + return -EINVAL; + break; + default: + break; + } + } + /* G.2.1 No action shall be taken on frames containing an unallocated * SAPI. */ -- cgit v1.2.3