From 30754ddfa952059c6539d3382a6920eff7e91c1e Mon Sep 17 00:00:00 2001 From: Jonathan Santos Date: Fri, 10 Jun 2011 17:25:48 -0400 Subject: 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. --- openbsc/src/gprs/gprs_llc.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'openbsc/src/gprs/gprs_llc.c') diff --git a/openbsc/src/gprs/gprs_llc.c b/openbsc/src/gprs/gprs_llc.c index 8e13c6157..be2e92a9c 100644 --- a/openbsc/src/gprs/gprs_llc.c +++ b/openbsc/src/gprs/gprs_llc.c @@ -352,6 +352,12 @@ int gprs_llc_tx_ui(struct msgb *msg, uint8_t sapi, int command, return -EFBIG; } + if ((sapi != GPRS_SAPI_GMM) && lle->llme->suspended) { + LOGP(DLLC, LOGL_DEBUG, "LLC TX: suspended TLLI 0x08x, " + "dropping UI frame\n", msgb_tlli(msg)); + return 0; + } + /* Update LLE's (BVCI, NSEI) tuple */ lle->llme->bvci = msgb_bvci(msg); lle->llme->nsei = msgb_nsei(msg); @@ -902,6 +908,18 @@ int gprs_llgmm_reset(struct gprs_llc_llme *llme) return gprs_llc_tx_xid(&llme->lle[1], msg, 1); } +int gprs_llgmm_suspend(struct gprs_llc_llme* llme) +{ + llme->suspended = 1; + return 0; +} + +int gprs_llgmm_resume(struct gprs_llc_llme* llme) +{ + llme->suspended = 0; + return 0; +} + int gprs_llc_init(const char *cipher_plugin_path) { return gprs_cipher_load(cipher_plugin_path); -- cgit v1.2.3