jolly has uploaded this change for review. (
https://gerrit.osmocom.org/c/osmocom-bb/+/34791?usp=email )
Change subject: ASCI: Change state correctly when leaving group mode
......................................................................
ASCI: Change state correctly when leaving group mode
Use new_mm_state() to leave group mode. This will trigger IMSI detach
when returning to IDLE mode, if it has been delayed.
Related: OS#5364
Change-Id: I3c83c9e0fe10b35d60d125df6929fcb5ddc35f1a
---
M src/host/layer23/src/mobile/gsm48_mm.c
1 file changed, 21 insertions(+), 4 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/91/34791/1
diff --git a/src/host/layer23/src/mobile/gsm48_mm.c
b/src/host/layer23/src/mobile/gsm48_mm.c
index 1a6d711..599d80b 100644
--- a/src/host/layer23/src/mobile/gsm48_mm.c
+++ b/src/host/layer23/src/mobile/gsm48_mm.c
@@ -1125,6 +1125,8 @@
if (!nmsg)
return;
gsm48_mmevent_msg(ms, nmsg);
+ /* Stop here and wait for the IMSI_DETACH event beeing handled. */
+ return;
}
/* 4.4.2 start T3212 in MM IDLE mode if not started or has expired */
@@ -2153,6 +2155,8 @@
struct gsm48_mmxx_hdr *nmmh;
int msg_type;
+ LOGP(DMM, LOGL_INFO, "IMSI detach delayed until group receive/transmit mode is
left.\n");
+
/* remember to detach later */
mm->delay_detach = 1;
@@ -3889,9 +3893,9 @@
/* Change mode back to normal or limited service. */
if (mm->substate == GSM48_MM_SST_RX_VGCS_LIMITED)
- mm->substate = GSM48_MM_SST_LIMITED_SERVICE;
+ new_mm_state(mm, GSM48_MM_ST_MM_IDLE, GSM48_MM_SST_LIMITED_SERVICE);
if (mm->substate == GSM48_MM_SST_RX_VGCS_NORMAL)
- mm->substate = GSM48_MM_SST_NORMAL_SERVICE;
+ new_mm_state(mm, GSM48_MM_ST_MM_IDLE, GSM48_MM_SST_NORMAL_SERVICE);
/* Return IDLE, if not already. Also select the sub-state to use. */
gsm48_mm_return_idle(ms, NULL);
@@ -3937,9 +3941,9 @@
/* Change mode back to normal or limited service. */
if (mm->substate == GSM48_MM_SST_RX_VGCS_LIMITED)
- mm->substate = GSM48_MM_SST_LIMITED_SERVICE;
+ new_mm_state(mm, GSM48_MM_ST_MM_IDLE, GSM48_MM_SST_LIMITED_SERVICE);
if (mm->substate == GSM48_MM_SST_RX_VGCS_NORMAL)
- mm->substate = GSM48_MM_SST_NORMAL_SERVICE;
+ new_mm_state(mm, GSM48_MM_ST_MM_IDLE, GSM48_MM_SST_NORMAL_SERVICE);
/* We are already IDLE. Also select the sub-state to use. */
gsm48_mm_return_idle(ms, NULL);
--
To view, visit
https://gerrit.osmocom.org/c/osmocom-bb/+/34791?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: I3c83c9e0fe10b35d60d125df6929fcb5ddc35f1a
Gerrit-Change-Number: 34791
Gerrit-PatchSet: 1
Gerrit-Owner: jolly <andreas(a)eversberg.eu>
Gerrit-MessageType: newchange