diff options
authorDaniel Willmann <dwillmann@sysmocom.de>2016-01-25 16:49:53 +0100
committerDaniel Willmann <dwillmann@sysmocom.de>2016-02-04 15:52:19 +0100
commit98d311e061aff138d1af45e962118c9ee5d4d941 (patch)
parent8c2e6de5dca4a3777ceab141d7df77bcedefd9a0 (diff)
gprs_gmm: Fix bit mask when determining update/attach type
Bit 4 is reserved in 3GPP TS 04.08 so exclude it from the type. In 3GPP TS 24.008 it indicates if a follow-on request is pending by the MS, but only in Iu mode. According to the spec it is not required to react to that request with a follow-on proceed so this field can be ignored for now. See 3GPP TS 24.008 Ch. 4.4: "Unless it has specific permission from the network (follow-on proceed) the mobile station side should await the release of the RR connection used for a MM specific procedure before a new MM specific procedure or MM connection establishment is started." as well as Ch. "If the network wishes to prolong the RR connection to allow the mobile station to initiate MM connection establishment (for example if the mobile station has indicated in the LOCATION UPDATING REQUEST that it has a follow-on request pending) the network shall send "follow on proceed" in the LOCATION UPDATING ACCEPT and start timer T3255."
1 files changed, 6 insertions, 2 deletions
diff --git a/openbsc/src/gprs/gprs_gmm.c b/openbsc/src/gprs/gprs_gmm.c
index 6c2213fb6..87cc7cf46 100644
--- a/openbsc/src/gprs/gprs_gmm.c
+++ b/openbsc/src/gprs/gprs_gmm.c
@@ -864,8 +864,10 @@ static int gsm48_rx_gmm_att_req(struct sgsn_mm_ctx *ctx, struct msgb *msg,
goto err_inval;
cur += msnc_len;
+ /* TODO: In iu mode - handle follow-on request */
/* aTTACH Type */
- att_type = *cur++ & 0x0f;
+ att_type = *cur++ & 0x07;
/* DRX parameter */
drx_par = *cur++ << 8;
@@ -1169,8 +1171,10 @@ static int gsm48_rx_gmm_ra_upd_req(struct sgsn_mm_ctx *mmctx, struct msgb *msg,
enum gsm48_gmm_cause reject_cause;
int rc;
+ /* TODO: In iu mode - handle follow-on request */
/* Update Type */
- upd_type = *cur++ & 0x0f;
+ upd_type = *cur++ & 0x07;
get_value_string(gprs_upd_t_strs, upd_type));