gprs: Fix bug that caused TLLI to change prematurely
This commit is contained in:
parent
fe7724f1d4
commit
bd92172bf4
|
@ -740,10 +740,6 @@ static int gsm48_rx_gmm_att_req(struct sgsn_mm_ctx *ctx, struct msgb *msg,
|
|||
* foreign TLLI to local TLLI */
|
||||
ctx->tlli_new = gprs_tmsi2tlli(ctx->p_tmsi, TLLI_LOCAL);
|
||||
|
||||
/* Inform LLC layer about new TLLI but keep old active */
|
||||
gprs_llgmm_assign(ctx->llme, ctx->tlli, ctx->tlli_new,
|
||||
GPRS_ALGO_GEA0, NULL);
|
||||
|
||||
DEBUGPC(DMM, "\n");
|
||||
return ctx ? gsm48_gmm_authorize(ctx, GMM_T3350_MODE_ATT) : 0;
|
||||
|
||||
|
@ -953,10 +949,6 @@ static int gsm48_rx_gmm_ra_upd_req(struct sgsn_mm_ctx *mmctx, struct msgb *msg,
|
|||
* foreign TLLI to local TLLI */
|
||||
mmctx->tlli_new = gprs_tmsi2tlli(mmctx->p_tmsi, TLLI_LOCAL);
|
||||
|
||||
/* Inform LLC layer about new TLLI but keep old active */
|
||||
gprs_llgmm_assign(mmctx->llme, mmctx->tlli, mmctx->tlli_new,
|
||||
GPRS_ALGO_GEA0, NULL);
|
||||
|
||||
/* Look at PDP Context Status IE and see if MS's view of
|
||||
* activated/deactivated NSAPIs agrees with our view */
|
||||
if (TLVP_PRESENT(&tp, GSM48_IE_GMM_PDP_CTX_STATUS)) {
|
||||
|
@ -1016,6 +1008,9 @@ static int gsm0408_rcv_gmm(struct sgsn_mm_ctx *mmctx, struct msgb *msg,
|
|||
DEBUGP(DMM, "-> ATTACH COMPLETE\n");
|
||||
mmctx_timer_stop(mmctx, 3350);
|
||||
mmctx->p_tmsi_old = 0;
|
||||
/* Inform LLC layer about new TLLI but keep old active */
|
||||
gprs_llgmm_assign(mmctx->llme, mmctx->tlli, mmctx->tlli_new,
|
||||
GPRS_ALGO_GEA0, NULL);
|
||||
mmctx->tlli = mmctx->tlli_new;
|
||||
break;
|
||||
case GSM48_MT_GMM_RA_UPD_COMPL:
|
||||
|
@ -1023,12 +1018,18 @@ static int gsm0408_rcv_gmm(struct sgsn_mm_ctx *mmctx, struct msgb *msg,
|
|||
DEBUGP(DMM, "-> ROUTEING AREA UPDATE COMPLETE\n");
|
||||
mmctx_timer_stop(mmctx, 3350);
|
||||
mmctx->p_tmsi_old = 0;
|
||||
/* Inform LLC layer about new TLLI but keep old active */
|
||||
gprs_llgmm_assign(mmctx->llme, mmctx->tlli, mmctx->tlli_new,
|
||||
GPRS_ALGO_GEA0, NULL);
|
||||
mmctx->tlli = mmctx->tlli_new;
|
||||
break;
|
||||
case GSM48_MT_GMM_PTMSI_REALL_COMPL:
|
||||
DEBUGP(DMM, "-> PTMSI REALLLICATION COMPLETE\n");
|
||||
mmctx_timer_stop(mmctx, 3350);
|
||||
mmctx->p_tmsi_old = 0;
|
||||
/* Inform LLC layer about new TLLI but keep old active */
|
||||
gprs_llgmm_assign(mmctx->llme, mmctx->tlli, mmctx->tlli_new,
|
||||
GPRS_ALGO_GEA0, NULL);
|
||||
mmctx->tlli = mmctx->tlli_new;
|
||||
break;
|
||||
case GSM48_MT_GMM_AUTH_CIPH_RESP:
|
||||
|
|
|
@ -108,7 +108,6 @@ struct sgsn_mm_ctx *sgsn_mm_ctx_by_tlli(uint32_t tlli,
|
|||
llist_for_each_entry(ctx, &sgsn_mm_ctxts, list) {
|
||||
if ((ctx->p_tmsi | 0xC0000000) == tlli ||
|
||||
(ctx->p_tmsi_old && (ctx->p_tmsi_old | 0xC0000000) == tlli)) {
|
||||
ctx->tlli = tlli;
|
||||
return ctx;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue