aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Kluchnikov <kluchnikovi@gmail.com>2014-02-20 11:05:52 +0400
committerIvan Kluchnikov <kluchnikovi@gmail.com>2014-02-20 11:05:52 +0400
commit704c24608f148ac852b9d20c75741f701372b917 (patch)
treeea8276bd574afaac31ba17e170ce8417d9ef8dc4
parenta9fae1ae66df57f76a0aedbd0b56228959d37d56 (diff)
bsc_init: Check BTS configuration, BTS should not use duplicate ARFCNs
-rw-r--r--openbsc/src/libbsc/bsc_init.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/openbsc/src/libbsc/bsc_init.c b/openbsc/src/libbsc/bsc_init.c
index 8fd72cf46..cd5ee58d9 100644
--- a/openbsc/src/libbsc/bsc_init.c
+++ b/openbsc/src/libbsc/bsc_init.c
@@ -351,6 +351,8 @@ static int inp_sig_cb(unsigned int subsys, unsigned int signal,
static int bootstrap_bts(struct gsm_bts *bts)
{
int i, n;
+ struct gsm_bts_trx *cur_trx;
+ struct gsm_bts_trx *trx;
if (bts->model->start && !bts->model->started) {
int ret = bts->model->start(bts->network);
@@ -394,6 +396,17 @@ static int bootstrap_bts(struct gsm_bts *bts)
return -EINVAL;
}
+ llist_for_each_entry(cur_trx, &bts->trx_list, list) {
+ llist_for_each_entry(trx, &bts->trx_list, list) {
+ if ((cur_trx->arfcn == trx->arfcn) && (cur_trx->nr != trx->nr)) {
+ LOGP(DNM, LOGL_ERROR, "BTS should not use duplicate ARFCNs. "
+ "Duplicate ARFCN = %d BTS = %d TRX = %d TRX = %d\n",
+ trx->arfcn, bts->nr, cur_trx->nr, trx->nr);
+ return -EINVAL;
+ }
+ }
+ }
+
if (bts->network->auth_policy == GSM_AUTH_POLICY_ACCEPT_ALL &&
!bts->si_common.rach_control.cell_bar)
LOGP(DNM, LOGL_ERROR, "\nWARNING: You are running an 'accept-all' "