aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/abis_rsl.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2009-08-10 11:43:22 +0200
committerHarald Welte <laforge@gnumonks.org>2009-08-10 11:43:22 +0200
commit115d1036d6ecc52356a73a45e7eec118ce0ba510 (patch)
treefefacbfc0327a968b8fbb98b4fb2306a1489d458 /openbsc/src/abis_rsl.c
parentf1676e5f9d2991e6b15de39456321952d13327db (diff)
rename rsl_channel_release to rsl_rf_channel_release
and add some more comments to help understand the complex release procedures.
Diffstat (limited to 'openbsc/src/abis_rsl.c')
-rw-r--r--openbsc/src/abis_rsl.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/openbsc/src/abis_rsl.c b/openbsc/src/abis_rsl.c
index 3dae952b1..2f334360b 100644
--- a/openbsc/src/abis_rsl.c
+++ b/openbsc/src/abis_rsl.c
@@ -631,7 +631,7 @@ int rsl_chan_mode_modify_req(struct gsm_lchan *lchan)
return abis_rsl_sendmsg(msg);
}
-/* Chapter 8.4.5 */
+/* Chapter 8.4.5 / 4.6: Deactivate the SACCH after 04.08 RR CHAN RELEASE */
int rsl_deact_sacch(struct gsm_lchan *lchan)
{
struct abis_rsl_dchan_hdr *dh;
@@ -650,8 +650,8 @@ int rsl_deact_sacch(struct gsm_lchan *lchan)
return abis_rsl_sendmsg(msg);
}
-/* Chapter 9.1.7 of 04.08 */
-int rsl_chan_release(struct gsm_lchan *lchan)
+/* Chapter 8.4.14 / 4.7: Tell BTS to release the radio channel */
+int rsl_rf_chan_release(struct gsm_lchan *lchan)
{
struct abis_rsl_dchan_hdr *dh;
struct msgb *msg = rsl_msgb_alloc();
@@ -663,9 +663,10 @@ int rsl_chan_release(struct gsm_lchan *lchan)
msg->lchan = lchan;
msg->trx = lchan->ts->trx;
- DEBUGP(DRSL, "Channel Release CMD channel=%s chan_nr=0x%02x\n",
+ DEBUGP(DRSL, "RF Channel Release CMD channel=%s chan_nr=0x%02x\n",
gsm_ts_name(lchan->ts), dh->chan_nr);
+ /* BTS will respond by RF CHAN REL ACK */
return abis_rsl_sendmsg(msg);
}
@@ -885,7 +886,7 @@ static int rsl_rx_conn_fail(struct msgb *msg)
DEBUGPC(DRSL, "RELEASING.\n");
/* FIXME: only free it after channel release ACK */
- return rsl_chan_release(msg->lchan);
+ return rsl_rf_chan_release(msg->lchan);
}
static int rsl_rx_meas_res(struct msgb *msg)
@@ -1038,7 +1039,7 @@ static void t3101_expired(void *data)
{
struct gsm_lchan *lchan = data;
- rsl_chan_release(lchan);
+ rsl_rf_chan_release(lchan);
}
/* MS has requested a channel on the RACH */
@@ -1193,7 +1194,7 @@ static int rsl_rx_rll_err_ind(struct msgb *msg)
rll_indication(msg->lchan, rllh->link_id, BSC_RLLR_IND_ERR_IND);
if (rlm_cause[1] == RLL_CAUSE_T200_EXPIRED)
- return rsl_chan_release(msg->lchan);
+ return rsl_rf_chan_release(msg->lchan);
return 0;
}
@@ -1246,14 +1247,18 @@ static int abis_rsl_rx_rll(struct msgb *msg)
rll_indication(msg->lchan, rllh->link_id,
BSC_RLLR_IND_REL_IND);
/* we can now releae the channel on the BTS/Abis side */
- rsl_chan_release(msg->lchan);
+ /* FIXME: officially we need to start T3111 and wait for
+ * some grace period */
+ rsl_rf_chan_release(msg->lchan);
break;
case RSL_MT_REL_CONF:
/* BTS informs us of having received UA from MS,
* in response to DISC that we've sent earlier */
DEBUGPC(DRLL, "RELEASE CONFIRMATION\n");
/* we can now releae the channel on the BTS/Abis side */
- rsl_chan_release(msg->lchan);
+ /* FIXME: officially we need to start T3111 and wait for
+ * some grace period */
+ rsl_rf_chan_release(msg->lchan);
break;
case RSL_MT_ERROR_IND:
rc = rsl_rx_rll_err_ind(msg);