From ae0f2362bb5a02ade62a02b73c4754922553d831 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 19 Jul 2009 18:36:49 +0200 Subject: send DEACTIVATE SACCH when sending RR CHANEL RELEASE As per specification, we first send the RR CHANNEL RELEASE to the MS, and then tell the BTS to disable the SACCH on that channel. --- openbsc/src/abis_rsl.c | 19 +++++++++++++++++++ openbsc/src/gsm_04_08.c | 6 +++++- 2 files changed, 24 insertions(+), 1 deletion(-) (limited to 'openbsc/src') diff --git a/openbsc/src/abis_rsl.c b/openbsc/src/abis_rsl.c index df95e7979..cc4a22934 100644 --- a/openbsc/src/abis_rsl.c +++ b/openbsc/src/abis_rsl.c @@ -652,6 +652,25 @@ int rsl_chan_mode_modify_req(struct gsm_lchan *lchan) return abis_rsl_sendmsg(msg); } +/* Chapter 8.4.5 */ +int rsl_deact_sacch(struct gsm_lchan *lchan) +{ + struct abis_rsl_dchan_hdr *dh; + struct msgb *msg = rsl_msgb_alloc(); + + dh = (struct abis_rsl_dchan_hdr *) msgb_put(msg, sizeof(*dh)); + init_dchan_hdr(dh, RSL_MT_DEACTIVATE_SACCH); + dh->chan_nr = lchan2chan_nr(lchan); + + msg->lchan = lchan; + msg->trx = lchan->ts->trx; + + DEBUGP(DRSL, "DEACTivate SACCH CMD channel=%s chan_nr=0x%02x\n", + gsm_ts_name(lchan->ts), dh->chan_nr); + + return abis_rsl_sendmsg(msg); +} + /* Chapter 9.1.7 of 04.08 */ int rsl_chan_release(struct gsm_lchan *lchan) { diff --git a/openbsc/src/gsm_04_08.c b/openbsc/src/gsm_04_08.c index 9fb53a723..df4d3c668 100644 --- a/openbsc/src/gsm_04_08.c +++ b/openbsc/src/gsm_04_08.c @@ -1769,7 +1769,11 @@ int gsm48_send_rr_release(struct gsm_lchan *lchan) DEBUGP(DRR, "Sending Channel Release: Chan: Number: %d Type: %d\n", lchan->nr, lchan->type); - return gsm48_sendmsg(msg); + /* Send actual release request to MS */ + gsm48_sendmsg(msg); + + /* Deactivate the SACCH on the BTS side */ + return rsl_deact_sacch(lchan); } /* Call Control */ -- cgit v1.2.3