aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Kluchnikov <kluchnikovi@gmail.com>2014-02-20 11:22:16 +0400
committerIvan Kluchnikov <kluchnikovi@gmail.com>2014-02-20 11:22:16 +0400
commit3247ffec30724ed65514b967d9e3fee57c8b73c0 (patch)
tree885847d7aa3294679b41cf4e66bcccee92fb1680
parent704c24608f148ac852b9d20c75741f701372b917 (diff)
gsm_data: Add search for TRX by ARFCN
-rw-r--r--openbsc/include/openbsc/gsm_data.h1
-rw-r--r--openbsc/src/libcommon/gsm_data.c11
2 files changed, 12 insertions, 0 deletions
diff --git a/openbsc/include/openbsc/gsm_data.h b/openbsc/include/openbsc/gsm_data.h
index 41fe3281f..d6a107fa9 100644
--- a/openbsc/include/openbsc/gsm_data.h
+++ b/openbsc/include/openbsc/gsm_data.h
@@ -424,6 +424,7 @@ void set_ts_e1link(struct gsm_bts_trx_ts *ts, uint8_t e1_nr,
void gsm_trx_lock_rf(struct gsm_bts_trx *trx, int locked);
int gsm_bts_has_feature(struct gsm_bts *bts, enum gsm_bts_features feat);
struct gsm_bts_trx *gsm_bts_trx_by_nr(struct gsm_bts *bts, int nr);
+struct gsm_bts_trx *gsm_bts_trx_by_arfcn(struct gsm_bts *bts, int arfcn);
/* generic E1 line operations for all ISDN-based BTS. */
extern struct e1inp_line_ops bts_isdn_e1inp_line_ops;
diff --git a/openbsc/src/libcommon/gsm_data.c b/openbsc/src/libcommon/gsm_data.c
index 5f7e32e73..9e3d360b6 100644
--- a/openbsc/src/libcommon/gsm_data.c
+++ b/openbsc/src/libcommon/gsm_data.c
@@ -225,6 +225,17 @@ struct gsm_bts_trx *gsm_bts_trx_by_nr(struct gsm_bts *bts, int nr)
return NULL;
}
+struct gsm_bts_trx *gsm_bts_trx_by_arfcn(struct gsm_bts *bts, int arfcn)
+{
+ struct gsm_bts_trx *trx;
+
+ llist_for_each_entry(trx, &bts->trx_list, list) {
+ if (trx->arfcn == arfcn)
+ return trx;
+ }
+ return NULL;
+}
+
/* 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,