From c26072a77f4353f257b5ec9664da2b588e65accf Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Thu, 25 Mar 2021 16:57:22 +0100 Subject: gmm_fsm: Expect E_GMM_COMMON_PROC_INIT_REQ when in ST_GMM_COMMON_PROC_INIT Due to whatever errors, the MS may re-init the Common Procedure by retransmitting a GPRS Attach Request while we are for instance aiting for Identity to be resolved. See this log: MM(---/ffffffff) -> GMM ATTACH REQUEST MI(3903513414) type="GPRS attach" GMM(gmm_fsm)[0x8136110]{Deregistered}: Allocated GMM_ATTACH_REQ_FSM(gb_gmm_req)[0x81383c0]{Init}: Allocated MM_STATE_Gb[0x8138ac0]{Idle}: Allocated MM_STATE_Iu[0x8138bb0]{Detached}: Allocated GMM(gmm_fsm)[0x8136110]{Deregistered}: Received Event E_GMM_COMMON_PROC_INIT_REQ GMM(gmm_fsm)[0x8136110]{Deregistered}: state_chg to CommonProcedureInitiated GMM_ATTACH_REQ_FSM(gb_gmm_req)[0x81383c0]{Init}: Received Event E_ATTACH_REQ_RECV GMM_ATTACH_REQ_FSM(gb_gmm_req)[0x81383c0]{Init}: state_chg to CheckIdentity MM(/fba673a2) <- GPRS IDENTITY REQUEST: mi_type=IMEI UE(0x2){001-01-10422-99} Received GSM 04.08 message type 0x16, but no MM context available GMM_ATTACH_REQ_FSM(gb_gmm_req)[0x81383c0]{CheckIdentity}: Timeout of T3370 MM(/fba673a2) <- GPRS IDENTITY REQUEST: mi_type=IMEI [Failure to handle GSM48_MT_GMM_ID_RESP and subsequent retransmission of GPRS IDENTITY REQUEST happens a couple times here] MM(---/ffffffff) -> GMM ATTACH REQUEST MI(3903513414) type="GPRS attach" GMM(gmm_fsm)[0x8136110]{CommonProcedureInitiated}: Received Event E_GMM_COMMON_PROC_INIT_REQ GMM(gmm_fsm)[0x8136110]{CommonProcedureInitiated}: Event E_GMM_COMMON_PROC_INIT_REQ not permitted GMM_ATTACH_REQ_FSM(gb_gmm_req)[0x81383c0]{CheckIdentity}: Received Event E_ATTACH_REQ_RECV [Here IDENTITY REQUEST is sent again, and this time MS answers ID RESPONSE back and goes forward] Related: SYS#5389 Change-Id: I93d7d6bc694c84223a11d075d24c234b82b73389 --- src/sgsn/gprs_gmm_fsm.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/sgsn/gprs_gmm_fsm.c b/src/sgsn/gprs_gmm_fsm.c index 886726c68..caec5864c 100644 --- a/src/sgsn/gprs_gmm_fsm.c +++ b/src/sgsn/gprs_gmm_fsm.c @@ -57,6 +57,10 @@ static void st_gmm_deregistered(struct osmo_fsm_inst *fi, uint32_t event, void * static void st_gmm_common_proc_init(struct osmo_fsm_inst *fi, uint32_t event, void *data) { switch(event) { + case E_GMM_COMMON_PROC_INIT_REQ: + /* MS may retransmit GPRS Attach Request if for some reason + * CommonProcedure didn't go forward correctly */ + break; /* TODO: events not used case E_GMM_LOWER_LAYER_FAILED: case E_GMM_COMMON_PROC_FAILED: @@ -126,7 +130,8 @@ static struct osmo_fsm_state gmm_fsm_states[] = { /* X(E_GMM_LOWER_LAYER_FAILED) | */ /* X(E_GMM_COMMON_PROC_FAILED) | */ X(E_GMM_COMMON_PROC_SUCCESS) | - X(E_GMM_ATTACH_SUCCESS), + X(E_GMM_ATTACH_SUCCESS) | + X(E_GMM_COMMON_PROC_INIT_REQ), .out_state_mask = X(ST_GMM_DEREGISTERED) | X(ST_GMM_REGISTERED_NORMAL), -- cgit v1.2.3