jolly submitted this change.

View Change



1 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted one.

Approvals: laforge: Looks good to me, but someone else must approve Jenkins Builder: Verified fixeria: Looks good to me, approved pespin: Looks good to me, but someone else must approve
ASCI: Select correct state when returning to idle or group receive mode

This fixes I05957182a57423ad947ab200b52f65fde859e110.

Related: OS#5364 and OS#6214
Change-Id: I626195161b987f1ba0065134afcf3936c9c090eb
---
M src/host/layer23/src/mobile/gsm48_mm.c
1 file changed, 26 insertions(+), 18 deletions(-)

diff --git a/src/host/layer23/src/mobile/gsm48_mm.c b/src/host/layer23/src/mobile/gsm48_mm.c
index afc83f7..e2924f7 100644
--- a/src/host/layer23/src/mobile/gsm48_mm.c
+++ b/src/host/layer23/src/mobile/gsm48_mm.c
@@ -1236,7 +1236,14 @@
struct gsm48_mmlayer *mm = &ms->mmlayer;
struct gsm322_cellsel *cs = &ms->cellsel;
struct gsm48_sysinfo *s = &cs->sel_si;
- bool vgcs = mm->vgcs.enabled;
+
+ /* When we are in group transmit mode, we return to group receive mode. */
+ if (mm->vgcs.enabled) {
+ LOGP(DMM, LOGL_INFO, "Return to group receive mode.\n");
+ new_mm_state(mm, GSM48_MM_ST_MM_IDLE, (mm->vgcs.normal_service) ? GSM48_MM_SST_RX_VGCS_NORMAL
+ : GSM48_MM_SST_RX_VGCS_LIMITED);
+ return 0;
+ }

if (cs->state != GSM322_C3_CAMPED_NORMALLY
&& cs->state != GSM322_C7_CAMPED_ANY_CELL) {
@@ -1286,9 +1293,7 @@
new_mm_state(mm, GSM48_MM_ST_MM_IDLE,
GSM48_MM_SST_ATTEMPT_UPDATE);
else
- new_mm_state(mm, GSM48_MM_ST_MM_IDLE,
- (vgcs) ? GSM48_MM_SST_RX_VGCS_NORMAL
- : GSM48_MM_SST_NORMAL_SERVICE);
+ new_mm_state(mm, GSM48_MM_ST_MM_IDLE, GSM48_MM_SST_NORMAL_SERVICE);

return 0;
}
@@ -1299,39 +1304,30 @@
if (gsm_subscr_is_forbidden_plmn(subscr, &cs->sel_cgi.lai.plmn)) {
/* location update not allowed */
LOGP(DMM, LOGL_INFO, "Loc. upd. not allowed PLMN.\n");
- new_mm_state(mm, GSM48_MM_ST_MM_IDLE,
- (vgcs) ? GSM48_MM_SST_RX_VGCS_LIMITED
- : GSM48_MM_SST_LIMITED_SERVICE);
+ new_mm_state(mm, GSM48_MM_ST_MM_IDLE, GSM48_MM_SST_LIMITED_SERVICE);
} else
if (gsm322_is_forbidden_la(ms, &cs->sel_cgi.lai)) {
/* location update not allowed */
LOGP(DMM, LOGL_INFO, "Loc. upd. not allowed LA.\n");
- new_mm_state(mm, GSM48_MM_ST_MM_IDLE,
- (vgcs) ? GSM48_MM_SST_RX_VGCS_LIMITED
- : GSM48_MM_SST_LIMITED_SERVICE);
+ new_mm_state(mm, GSM48_MM_ST_MM_IDLE, GSM48_MM_SST_LIMITED_SERVICE);
} else
/* 4.4.4.9 if cell is barred, don't start */
if ((!subscr->acc_barr && s->cell_barr)
|| (!subscr->acc_barr && !((subscr->acc_class & 0xfbff) &
(s->class_barr ^ 0xffff)))) {
LOGP(DMM, LOGL_INFO, "Loc. upd. no access.\n");
- new_mm_state(mm, GSM48_MM_ST_MM_IDLE,
- (vgcs) ? GSM48_MM_SST_RX_VGCS_LIMITED
- : GSM48_MM_SST_LIMITED_SERVICE);
+ new_mm_state(mm, GSM48_MM_ST_MM_IDLE, GSM48_MM_SST_LIMITED_SERVICE);
} else {
/* location update allowed */
LOGP(DMM, LOGL_INFO, "Loc. upd. allowed.\n");
new_mm_state(mm, GSM48_MM_ST_MM_IDLE,
- (vgcs) ? GSM48_MM_SST_RX_VGCS_LIMITED
- : GSM48_MM_SST_LIMITED_SERVICE);
+ GSM48_MM_SST_LOC_UPD_NEEDED);
}
} else {
/* location update not allowed */
LOGP(DMM, LOGL_INFO, "We are camping on any cell as returning "
"to MM IDLE\n");
- new_mm_state(mm, GSM48_MM_ST_MM_IDLE,
- (vgcs) ? GSM48_MM_SST_RX_VGCS_LIMITED
- : GSM48_MM_SST_LIMITED_SERVICE);
+ new_mm_state(mm, GSM48_MM_ST_MM_IDLE, GSM48_MM_SST_LIMITED_SERVICE);
}

return 0;

To view, visit change 34790. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: I626195161b987f1ba0065134afcf3936c9c090eb
Gerrit-Change-Number: 34790
Gerrit-PatchSet: 2
Gerrit-Owner: jolly <andreas@eversberg.eu>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de>
Gerrit-Reviewer: jolly <andreas@eversberg.eu>
Gerrit-Reviewer: laforge <laforge@osmocom.org>
Gerrit-Reviewer: pespin <pespin@sysmocom.de>
Gerrit-MessageType: merged