From 7091bbde2281917bc60bfe55818a71539d83761c Mon Sep 17 00:00:00 2001 From: Alexander Couzens Date: Sat, 24 Aug 2019 16:04:38 +0200 Subject: gsm48_rx_gmm_att_req(): cleanup old state Change-Id: If65b0ff1e82a87107960cb7ccb29cb907f1055d4 --- src/gprs/gprs_gmm.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/gprs/gprs_gmm.c b/src/gprs/gprs_gmm.c index d93d307b2..06b992141 100644 --- a/src/gprs/gprs_gmm.c +++ b/src/gprs/gprs_gmm.c @@ -1561,6 +1561,21 @@ static int gsm48_rx_gmm_att_req(struct sgsn_mm_ctx *ctx, struct msgb *msg, goto rejected; } + /* Iu -> GERAN transition */ + if (ctx->ran_type == MM_CTX_T_UTRAN_Iu && + !MSG_IU_UE_CTX(msg)) { + mmctx_cleanup_utran(ctx); + ctx->ran_type = MM_CTX_T_GERAN_Gb; + if (!ctx->gb.llme) + ctx->gb.llme = llme; + } else if (ctx->ran_type == MM_CTX_T_GERAN_Gb && + MSG_IU_UE_CTX(msg)) { + /* 2G -> 3G transition */ + mmctx_cleanup_geran(ctx); + ctx->iu.ue_ctx = MSG_IU_UE_CTX(msg); + ctx->ran_type = MM_CTX_T_UTRAN_Iu; + } + msgid2mmctx(ctx, msg); /* Update MM Context with currient RA and Cell ID */ ctx->ra = ra_id; -- cgit v1.2.3