diff options
author | Philipp Maier <pmaier@sysmocom.de> | 2018-02-06 17:31:50 +0100 |
---|---|---|
committer | Philipp Maier <pmaier@sysmocom.de> | 2018-02-06 19:39:57 +0100 |
commit | cc48efe40062d5730af5f820fc33ee0a3dcf6f1a (patch) | |
tree | 02de352c3384c0eca8ebe562e70408083c09ab5b /src/libbsc/abis_rsl.c | |
parent | 81dc9e74558ac9c62ce9a17c415963cdcaf1ecec (diff) |
abis_rsl: permit first EstablishInd only on SAPI=0
When the first EstablishInd (DCCH) is made by the MS, then it must by
definition happen on SAPI=0. The MS may establish multiple connection
on other SAPIs afterwards. At the moment osmo-bsc does not check the
SAPI when an EstablishInd message is received.
- For SAPIs other than 0, check if SAPI=0 has already been
established
See also TTCN3 testcases:
BSC_Tests.TC_rll_est_ind_inval_sapi1
BSC_Tests.TC_rll_est_ind_inval_sapi3
Change-Id: Ibf4fca0bd42dfe5bc63e8b08754ebbe0a5e252c3
Closes: OS#2750
Diffstat (limited to 'src/libbsc/abis_rsl.c')
-rw-r--r-- | src/libbsc/abis_rsl.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/libbsc/abis_rsl.c b/src/libbsc/abis_rsl.c index 3f8bbc904..189316631 100644 --- a/src/libbsc/abis_rsl.c +++ b/src/libbsc/abis_rsl.c @@ -2180,6 +2180,20 @@ static int abis_rsl_rx_rll(struct msgb *msg) case RSL_MT_EST_IND: DEBUGPC(DRLL, "ESTABLISH INDICATION\n"); /* lchan is established, stop T3101 */ + + /* Note: By definition the first Establish Indication must + * happen first on SAPI 0, once the connection on SAPI 0 is + * made, parallel connections on other SAPIs are permitted */ + if (sapi != 0 && msg->lchan->sapis[0] != LCHAN_SAPI_MS) { + LOGP(DRLL, LOGL_NOTICE, "MS attempted to establish DCCH on SAPI=%d (expected SAPI=0)\n", + rllh->link_id & 0x7); + + /* Note: We do not need to close the channel, + * since we might still get a proper Establish Ind. + * If not, T3101 will close the channel on timeout. */ + break; + } + msg->lchan->sapis[rllh->link_id & 0x7] = LCHAN_SAPI_MS; osmo_timer_del(&msg->lchan->T3101); if (msgb_l2len(msg) > |