diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2009-10-01 04:07:15 +0200 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2009-10-01 04:07:15 +0200 |
commit | e48b9562a4c08f3f9942b357f13e9381f7dea987 (patch) | |
tree | f15d7ebd4ae4c14b50cc85c1a154b0f88e35a772 /openbsc/src | |
parent | 86538c7fab5abf47be9258fce1b564908f0b4b2d (diff) |
[lac] Do not use the reserved LAC 0x0 for two different things
We are using LAC=0 for remembering that a GSM subscriber is
detached. I recently added code to gsm_bts_by_lac that will
return every BTS in case the lac is 0. Harald highlightes
that we would now search for detached subscribers at every
BTS of our network which is clearly not what we want.
Introduce two defines for the two reserved LAC, add a
pointer to the specification, check that our config files
do not contain these reserved values, use the define
and change gsm_bts_by_lac to use the other define.
Diffstat (limited to 'openbsc/src')
-rw-r--r-- | openbsc/src/gsm_data.c | 2 | ||||
-rw-r--r-- | openbsc/src/gsm_subscriber.c | 2 | ||||
-rw-r--r-- | openbsc/src/vty_interface.c | 7 |
3 files changed, 9 insertions, 2 deletions
diff --git a/openbsc/src/gsm_data.c b/openbsc/src/gsm_data.c index 9db246cec..a50ba8c20 100644 --- a/openbsc/src/gsm_data.c +++ b/openbsc/src/gsm_data.c @@ -274,7 +274,7 @@ struct gsm_bts *gsm_bts_by_lac(struct gsm_network *net, unsigned int lac, continue; } - if (lac == 0 || bts->location_area_code == lac) + if (lac == GSM_LAC_RESERVED_ALL_BTS || bts->location_area_code == lac) return bts; } return NULL; diff --git a/openbsc/src/gsm_subscriber.c b/openbsc/src/gsm_subscriber.c index a4e35c7b1..c81b522d4 100644 --- a/openbsc/src/gsm_subscriber.c +++ b/openbsc/src/gsm_subscriber.c @@ -105,7 +105,7 @@ int subscr_update(struct gsm_subscriber *s, struct gsm_bts *bts, int reason) case GSM_SUBSCRIBER_UPDATE_DETACHED: /* Only detach if we are currently in this area */ if (bts->location_area_code == s->lac) - s->lac = 0; + s->lac = GSM_LAC_RESERVED_DETACHED; dispatch_signal(SS_SUBSCR, S_SUBSCR_DETACHED, s); break; default: diff --git a/openbsc/src/vty_interface.c b/openbsc/src/vty_interface.c index 79124d934..d6f1bb54e 100644 --- a/openbsc/src/vty_interface.c +++ b/openbsc/src/vty_interface.c @@ -872,6 +872,13 @@ DEFUN(cfg_bts_lac, lac, VTY_NEWLINE); return CMD_WARNING; } + + if (lac == GSM_LAC_RESERVED_DETACHED || lac == GSM_LAC_RESERVED_ALL_BTS) { + vty_out(vty, "%% LAC %d is reserved by GSM 04.08%s", + lac, VTY_NEWLINE); + return CMD_WARNING; + } + bts->location_area_code = lac; return CMD_SUCCESS; |