aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2009-10-01 04:07:15 +0200
committerHolger Hans Peter Freyther <zecke@selfish.org>2009-10-01 04:07:15 +0200
commite48b9562a4c08f3f9942b357f13e9381f7dea987 (patch)
treef15d7ebd4ae4c14b50cc85c1a154b0f88e35a772 /openbsc/src
parent86538c7fab5abf47be9258fce1b564908f0b4b2d (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.c2
-rw-r--r--openbsc/src/gsm_subscriber.c2
-rw-r--r--openbsc/src/vty_interface.c7
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;