aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2021-03-25 17:55:42 +0100
committerPau Espin Pedrol <pespin@sysmocom.de>2021-03-25 17:58:07 +0100
commite8cd6856a5598e00421e3ed53fa9d87a684dcfda (patch)
tree179cc7896dafafffc07555450815be1dbd11c58d
parentc67c90b47e58c087f306f0601fa39fcdb3d8fd4f (diff)
mm_iu: Expect E_PMM_PS_ATTACH when in ST_PMM_IDLE
It can happen that the MS tries to attach while SGSN's MM Iu state is ST_PMM_IDLE (eg because UE was hard rebooted). Since Attach is a specific case of getting a Connection Established, also allow it as a trigger to transit to state ST_PMM_CONNECTED. Related: SYS#5389 Change-Id: Ia74a062ddc3052faad569f1428f0ddd02e5b188d
-rw-r--r--src/sgsn/gprs_mm_state_iu_fsm.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/sgsn/gprs_mm_state_iu_fsm.c b/src/sgsn/gprs_mm_state_iu_fsm.c
index e571026c8..69b4ef008 100644
--- a/src/sgsn/gprs_mm_state_iu_fsm.c
+++ b/src/sgsn/gprs_mm_state_iu_fsm.c
@@ -81,6 +81,7 @@ static void st_pmm_idle_on_enter(struct osmo_fsm_inst *fi, uint32_t prev_state)
static void st_pmm_idle(struct osmo_fsm_inst *fi, uint32_t event, void *data)
{
switch(event) {
+ case E_PMM_PS_ATTACH:
case E_PMM_PS_CONN_ESTABLISH:
mm_state_iu_fsm_state_chg(fi, ST_PMM_CONNECTED);
break;
@@ -117,7 +118,10 @@ static struct osmo_fsm_state mm_state_iu_fsm_states[] = {
.action = st_pmm_connected,
},
[ST_PMM_IDLE] = {
- .in_event_mask = X(E_PMM_IMPLICIT_DETACH) | X(E_PMM_PS_CONN_ESTABLISH),
+ .in_event_mask =
+ X(E_PMM_IMPLICIT_DETACH) |
+ X(E_PMM_PS_CONN_ESTABLISH) |
+ X(E_PMM_PS_ATTACH),
.out_state_mask = X(ST_PMM_DETACHED) | X(ST_PMM_CONNECTED),
.name = "Idle",
.onenter = st_pmm_idle_on_enter,