diff options
author | Andreas.Eversberg <jolly@eversberg.eu> | 2010-06-20 16:23:30 +0000 |
---|---|---|
committer | Andreas.Eversberg <jolly@eversberg.eu> | 2010-06-20 16:23:30 +0000 |
commit | 05d6b5d21345fe0c794f4a9b33421c61ded09e65 (patch) | |
tree | 5b5dd961a212461150e2a4570f61bdd8def4ca04 /src | |
parent | 7bde7938ae721845d9c0744852d35fecdf9afd9c (diff) |
layer23 radio ressource: Added signal loss condition in release state.
Diffstat (limited to 'src')
-rw-r--r-- | src/host/layer23/src/gsm48_rr.c | 23 |
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 */ |