diff options
author | Jonathan Santos <jrsantos@jonathanrsantos.com> | 2011-06-10 17:25:48 -0400 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2011-10-16 21:36:26 +0200 |
commit | 30754ddfa952059c6539d3382a6920eff7e91c1e (patch) | |
tree | 8e52c97c2f831147ff47d1af3ae31c4cd7809984 /openbsc/src/gprs/gprs_gmm.c | |
parent | 6352889113c7b3424db1132ca9a521be6a10ed74 (diff) |
gprs: Suspend user data transmission during Routing Area Updating
TS 24.008 version 9.5.0 Release 9 sec 4.7.5:
In A/Gb mode, user data transmission in the MS shall be
suspended during the routing area updating procedure, except
if the routing area updating procedure is triggered by a PS
handover procedure as described in 3GPP TS 43.129 [113];
user data reception shall be possible. User data transmission
in the network may be suspended during the routing area
updating procedure.
Diffstat (limited to 'openbsc/src/gprs/gprs_gmm.c')
-rw-r--r-- | openbsc/src/gprs/gprs_gmm.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/openbsc/src/gprs/gprs_gmm.c b/openbsc/src/gprs/gprs_gmm.c index 471a66197..d1858e9e5 100644 --- a/openbsc/src/gprs/gprs_gmm.c +++ b/openbsc/src/gprs/gprs_gmm.c @@ -967,6 +967,8 @@ static int gsm48_rx_gmm_ra_upd_req(struct sgsn_mm_ctx *mmctx, struct msgb *msg, return gsm48_tx_gmm_ra_upd_rej(msg, GMM_CAUSE_MS_ID_NOT_DERIVED); } + gprs_llgmm_suspend(mmctx->llme); + /* Store new BVCI/NSEI in MM context (FIXME: delay until we ack?) */ msgid2mmctx(mmctx, msg); /* Bump the statistics of received signalling msgs for this MM context */ @@ -1075,6 +1077,7 @@ static int gsm0408_rcv_gmm(struct sgsn_mm_ctx *mmctx, struct msgb *msg, mmctx->tlli = mmctx->tlli_new; gprs_llgmm_assign(mmctx->llme, 0xffffffff, mmctx->tlli_new, GPRS_ALGO_GEA0, NULL); + gprs_llgmm_resume(mmctx->llme); rc = 0; break; case GSM48_MT_GMM_PTMSI_REALL_COMPL: @@ -1109,6 +1112,7 @@ static void mmctx_timer_cb(void *_mm) case 3350: /* waiting for ATTACH COMPLETE */ if (mm->num_T_exp >= 5) { LOGP(DMM, LOGL_NOTICE, "T3350 expired >= 5 times\n"); + gprs_llgmm_resume(mm->llme); break; } /* re-transmit the respective msg and re-start timer */ |