aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2010-06-08 11:57:45 +0800
committerHolger Hans Peter Freyther <zecke@selfish.org>2010-06-08 12:16:17 +0800
commit4f5848dc91a1bf035cee3cf031c919dbd7943371 (patch)
tree619e88d9df2096a58bb93d177cdf3fa0b592e195 /openbsc/src
parent44752d9f849e6c75b8e922f975b10b1894d186e1 (diff)
abis_rsl: Allow to specify the release mode for a given channel.
This can be used by handover, early assignment to indicate the close of the old channel...
Diffstat (limited to 'openbsc/src')
-rw-r--r--openbsc/src/abis_rsl.c5
-rw-r--r--openbsc/src/chan_alloc.c2
2 files changed, 4 insertions, 3 deletions
diff --git a/openbsc/src/abis_rsl.c b/openbsc/src/abis_rsl.c
index f305bb1d4..451c80db2 100644
--- a/openbsc/src/abis_rsl.c
+++ b/openbsc/src/abis_rsl.c
@@ -752,14 +752,15 @@ int rsl_establish_request(struct gsm_lchan *lchan, u_int8_t link_id)
RELEASE CONFIRM, which we in turn use to trigger RSL CHANNEL RELEASE,
which in turn is acknowledged by RSL CHANNEL RELEASE ACK, which calls
lchan_free() */
-int rsl_release_request(struct gsm_lchan *lchan, u_int8_t link_id)
+int rsl_release_request(struct gsm_lchan *lchan, u_int8_t link_id, u_int8_t reason)
{
struct msgb *msg;
msg = rsl_rll_simple(RSL_MT_REL_REQ, lchan2chan_nr(lchan),
link_id, 0);
- msgb_tv_put(msg, RSL_IE_RELEASE_MODE, 0); /* normal release */
+ /* 0 is normal release, 1 is local end */
+ msgb_tv_put(msg, RSL_IE_RELEASE_MODE, reason);
/* FIXME: start some timer in case we don't receive a REL ACK ? */
diff --git a/openbsc/src/chan_alloc.c b/openbsc/src/chan_alloc.c
index 107abdc92..5a3e72771 100644
--- a/openbsc/src/chan_alloc.c
+++ b/openbsc/src/chan_alloc.c
@@ -363,7 +363,7 @@ int lchan_auto_release(struct gsm_lchan *lchan)
DEBUGP(DRLL, "%s Recycling Channel\n", gsm_lchan_name(lchan));
rsl_lchan_set_state(lchan, LCHAN_S_REL_REQ);
- rsl_release_request(lchan, 0);
+ rsl_release_request(lchan, 0, 0);
return 1;
}