aboutsummaryrefslogtreecommitdiffstats
path: root/src/gprs/gprs_gmm.c
diff options
context:
space:
mode:
authorJonathan Santos <jrsantos@jonathanrsantos.com>2011-06-22 12:13:59 -0400
committerJonathan Santos <jrsantos@jonathanrsantos.com>2011-07-21 15:30:41 -0400
commite5b7ad8119837f68b3bc1e53beb8f03deff21938 (patch)
tree2d4944d9747d5ad82fe6a2d386d2dc0e0bd4b94e /src/gprs/gprs_gmm.c
parent5f7d3cd6d2c2790c186a6d83286b6f9ee68e5f71 (diff)
gprs: Reset LLC state when Timer 3350 expires
This works around a problem that occurs if a mobile loses packet data connectivity, e.g. moves out of coverage or switches over to a circuit-switched call, while a data transfer is occurring. The mobile would reset its LLC state, causing it to be unsynchronized with the SGSN. Therefore the SGSN would drop incoming frames until the sequence numbers matched. This workaround resets the LLC state in the SGSN if T3350 expires, indicating that Routing Area Updating Request, Attach Request, or P-TMSI Realloc Command has failed.
Diffstat (limited to 'src/gprs/gprs_gmm.c')
-rw-r--r--src/gprs/gprs_gmm.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/gprs/gprs_gmm.c b/src/gprs/gprs_gmm.c
index d6cd4125c..f98dcf0d4 100644
--- a/src/gprs/gprs_gmm.c
+++ b/src/gprs/gprs_gmm.c
@@ -1075,6 +1075,7 @@ static void mmctx_timer_cb(void *_mm)
if (mm->num_T_exp >= 5) {
LOGP(DMM, LOGL_NOTICE, "T3350 expired >= 5 times\n");
gprs_llgmm_resume(mm->llme);
+ gprs_llgmm_reset_state(mm->llme);
break;
}
/* re-transmit the respective msg and re-start timer */