sgsn: Change handling of missing mmctx in gsm48_rx_gmm_ra_upd_req
Currently the MM context is just overwritten by a call to sgsn_mm_ctx_by_tlli(msgb_tlli(msg), &old_ra_id) even if it has already been found by using the BSSGP info. With the changes made to sgsn_mm_ctx_by_tlli this will never find a MM context if the routing area has changed. If the routing area has not changed, the mmctx has already been found if it exists. This commit splits searching for an MM context (if it hasn't been found already) from checking, whether a found one can really be used. The actual search is removed, so that the MS will be forced to restart the attach procedure, which is less efficient but safe. Sponsored-by: On-Waves ehf
This commit is contained in:
parent
d58c033305
commit
d35957a7d9
|
@ -1164,9 +1164,21 @@ static int gsm48_rx_gmm_ra_upd_req(struct sgsn_mm_ctx *mmctx, struct msgb *msg,
|
|||
break;
|
||||
}
|
||||
|
||||
/* Look-up the MM context based on old RA-ID and TLLI */
|
||||
mmctx = sgsn_mm_ctx_by_tlli(msgb_tlli(msg), &old_ra_id);
|
||||
if (!mmctx || mmctx->mm_state == GMM_DEREGISTERED) {
|
||||
if (!mmctx) {
|
||||
/* BSSGP doesn't give us an mmctx */
|
||||
|
||||
/* TODO: Check if there is an MM CTX with old_ra_id and
|
||||
* the P-TMSI (if given, reguired for UMTS) or as last resort
|
||||
* if the TLLI matches foreign_tlli (P-TMSI). Note that this
|
||||
* is an optimization to avoid the RA reject (impl detached)
|
||||
* below, which will cause a new attach cycle. */
|
||||
}
|
||||
|
||||
if (!mmctx || !gprs_ra_id_equals(&mmctx->ra, &old_ra_id) ||
|
||||
mmctx->mm_state == GMM_DEREGISTERED)
|
||||
{
|
||||
/* We cannot use the mmctx */
|
||||
|
||||
/* send a XID reset to re-set all LLC sequence numbers
|
||||
* in the MS */
|
||||
LOGMMCTXP(LOGL_NOTICE, mmctx, "LLC XID RESET\n");
|
||||
|
|
Loading…
Reference in New Issue