summaryrefslogtreecommitdiffstats
path: root/src/host/layer23/src/mobile/gsm322.c
diff options
context:
space:
mode:
authorAndreas.Eversberg <jolly@eversberg.eu>2010-10-13 18:30:59 +0000
committerAndreas.Eversberg <jolly@eversberg.eu>2010-10-13 18:30:59 +0000
commit3318b3f6227e1ce912ace5a3a4a3c269056177ae (patch)
tree1cc4500e12da4ff3136ff8cda76538b4682575e4 /src/host/layer23/src/mobile/gsm322.c
parentacbe0f858d6de48723984e4dfa67bfa38e8345d2 (diff)
[layer23] Fix of signal loss handling
The cell must be kept "selected" in case of loosing radio link. It is required to perform reselection of that cell or of the given neighbor cells.
Diffstat (limited to 'src/host/layer23/src/mobile/gsm322.c')
-rw-r--r--src/host/layer23/src/mobile/gsm322.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/host/layer23/src/mobile/gsm322.c b/src/host/layer23/src/mobile/gsm322.c
index deed6a6f..e3ddab0b 100644
--- a/src/host/layer23/src/mobile/gsm322.c
+++ b/src/host/layer23/src/mobile/gsm322.c
@@ -2506,15 +2506,16 @@ static void gsm322_cs_loss(void *arg)
LOGP(DCS, LOGL_INFO, "Loss of CCCH.\n");
- /* unset selected cell */
- gsm322_unselect_cell(cs);
-
if (cs->state == GSM322_C3_CAMPED_NORMALLY
|| cs->state == GSM322_C7_CAMPED_ANY_CELL) {
if (rr->state == GSM48_RR_ST_IDLE) {
struct msgb *nmsg;
- LOGP(DCS, LOGL_INFO, "Trigger re-selection.\n");
+ LOGP(DCS, LOGL_INFO, "Loss of CCCH, Trigger "
+ "re-selection.\n");
+
+ /* unset selected cell */
+ gsm322_unselect_cell(cs);
nmsg = gsm322_msgb_alloc(GSM322_EVENT_CELL_RESEL);
if (!nmsg)
@@ -2522,7 +2523,11 @@ static void gsm322_cs_loss(void *arg)
gsm322_c_event(ms, nmsg);
msgb_free(nmsg);
} else {
- LOGP(DCS, LOGL_INFO, "Trigger RR abort.\n");
+ LOGP(DCS, LOGL_INFO, "Loss of SACCH, Trigger RR "
+ "abort.\n");
+
+ /* keep cell info for re-selection */
+
gsm48_rr_los(ms);
/* be shure that nothing else is done after here
* because the function call above may cause