diff options
author | Harald Welte <laforge@gnumonks.org> | 2009-05-23 13:56:40 +0000 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2009-05-23 13:56:40 +0000 |
commit | be99149e72a22180a1b8acaa0a6182b02c5387c3 (patch) | |
tree | d1db473c5e38b8079bf3e9ec46641e156ea2ac45 | |
parent | c1d2aaecb57e00e07275c3618c85e1bf85a4dc1e (diff) |
add new function gsm_bts_by_lac() to search for BTS based on location area
-rw-r--r-- | include/openbsc/gsm_data.h | 2 | ||||
-rw-r--r-- | src/gsm_data.c | 27 |
2 files changed, 29 insertions, 0 deletions
diff --git a/include/openbsc/gsm_data.h b/include/openbsc/gsm_data.h index 4da9e3aa6..0e3a380d7 100644 --- a/include/openbsc/gsm_data.h +++ b/include/openbsc/gsm_data.h @@ -349,6 +349,8 @@ void set_ts_e1link(struct gsm_bts_trx_ts *ts, u_int8_t e1_nr, u_int8_t e1_ts, u_int8_t e1_ts_ss); enum gsm_bts_type parse_btstype(char *arg); char *btstype2str(enum gsm_bts_type type); +struct gsm_bts *gsm_bts_by_lac(struct gsm_network *net, unsigned int lac, + struct gsm_bts *start_bts); static inline int is_ipaccess_bts(struct gsm_bts *bts) { diff --git a/src/gsm_data.c b/src/gsm_data.c index f654d909f..78f976514 100644 --- a/src/gsm_data.c +++ b/src/gsm_data.c @@ -179,3 +179,30 @@ char *btstype2str(enum gsm_bts_type type) return "undefined"; return bts_types[type]; } + +/* Search for a BTS in the given Location Area; optionally start searching + * with start_bts (for continuing to search after the first result) */ +struct gsm_bts *gsm_bts_by_lac(struct gsm_network *net, unsigned int lac, + struct gsm_bts *start_bts) +{ + int i; + struct gsm_bts *bts; + int skip = 0; + + if (start_bts) + skip = 1; + + for (i = 0; i < net->num_bts; i++) { + bts = &net->bts[i]; + + if (skip) { + if (start_bts == bts) + skip = 0; + continue; + } + + if (bts->location_area_code == lac) + return bts; + } + return NULL; +} |