summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndreas.Eversberg <jolly@eversberg.eu>2010-06-20 16:23:30 +0000
committerAndreas.Eversberg <jolly@eversberg.eu>2010-06-20 16:23:30 +0000
commit05d6b5d21345fe0c794f4a9b33421c61ded09e65 (patch)
tree5b5dd961a212461150e2a4570f61bdd8def4ca04 /src
parent7bde7938ae721845d9c0744852d35fecdf9afd9c (diff)
layer23 radio ressource: Added signal loss condition in release state.
Diffstat (limited to 'src')
-rw-r--r--src/host/layer23/src/gsm48_rr.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/host/layer23/src/gsm48_rr.c b/src/host/layer23/src/gsm48_rr.c
index df86f2a0..b8e407b3 100644
--- a/src/host/layer23/src/gsm48_rr.c
+++ b/src/host/layer23/src/gsm48_rr.c
@@ -2852,18 +2852,24 @@ int gsm48_rr_los(struct osmocom_ms *ms)
LOGP(DSUM, LOGL_INFO, "Radio link lost signal\n");
- if (rr->state == GSM48_RR_ST_CONN_PEND) {
+ /* stop T3211 if running */
+ stop_rr_t3110(rr);
+
+ switch(rr->state) {
+ case GSM48_RR_ST_CONN_PEND:
LOGP(DRR, LOGL_INFO, "LOS during RACH request\n");
/* stop pending RACH timer */
stop_rr_t3126(rr);
- } else {
+ break;
+ case GSM48_RR_ST_DEDICATED:
LOGP(DRR, LOGL_INFO, "LOS during dedicated mode, release "
"locally\n");
new_rr_state(rr, GSM48_RR_ST_REL_PEND);
/* release message */
+ rel_local:
nmsg = gsm48_l3_msgb_alloc();
if (!nmsg)
return -ENOMEM;
@@ -2872,6 +2878,19 @@ int gsm48_rr_los(struct osmocom_ms *ms)
mode[1] = 1; /* local release */
/* start release */
return gsm48_send_rsl(ms, RSL_MT_REL_REQ, nmsg);
+ case GSM48_RR_ST_REL_PEND:
+ LOGP(DRR, LOGL_INFO, "LOS during RR release procedure, release "
+ "locally\n");
+
+ /* stop pending RACH timer */
+ stop_rr_t3110(rr);
+
+ /* release locally */
+ goto rel_local;
+ default:
+ /* this should not happen */
+ LOGP(DRR, LOGL_ERROR, "LOS in IDLE state, ignoring\n");
+ return -EINVAL;
}
/* send inication to upper layer */