aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2014-01-19 17:10:50 +0100
committerHarald Welte <laforge@gnumonks.org>2014-01-19 17:32:56 +0100
commit903aaea6689cc08c0e33fb05659c808a5e5f754f (patch)
tree6481e4cab3ef7dd62eccc037230c66f75aca6d44 /openbsc/src
parentcd4e74df95e0bbb18a46062d028f7e726f8916d4 (diff)
Do not expect all BTSs support TSC != BCC
We introduce a new feature indicating if the given BTS model supports a TSC that is different from the BCC (lower 3 bits of BSIC).
Diffstat (limited to 'openbsc/src')
-rw-r--r--openbsc/src/libbsc/bsc_vty.c23
-rw-r--r--openbsc/src/libbsc/bts_ericsson_rbs2000.c1
-rw-r--r--openbsc/src/libbsc/bts_ipaccess_nanobts.c1
-rw-r--r--openbsc/src/libbsc/bts_nokia_site.c1
-rw-r--r--openbsc/src/libbsc/bts_siemens_bs11.c1
-rw-r--r--openbsc/src/libbsc/bts_sysmobts.c1
6 files changed, 27 insertions, 1 deletions
diff --git a/openbsc/src/libbsc/bsc_vty.c b/openbsc/src/libbsc/bsc_vty.c
index 3b85892e0..b906c2ee3 100644
--- a/openbsc/src/libbsc/bsc_vty.c
+++ b/openbsc/src/libbsc/bsc_vty.c
@@ -491,8 +491,10 @@ static void config_write_bts_single(struct vty *vty, struct gsm_bts *bts)
vty_out(vty, " cell_identity %u%s", bts->cell_identity, VTY_NEWLINE);
vty_out(vty, " location_area_code %u%s", bts->location_area_code,
VTY_NEWLINE);
- vty_out(vty, " training_sequence_code %u%s", bts->tsc, VTY_NEWLINE);
vty_out(vty, " base_station_id_code %u%s", bts->bsic, VTY_NEWLINE);
+ if (bts->tsc != (bts->bsic & 7))
+ vty_out(vty, " training_sequence_code %u%s", bts->tsc,
+ VTY_NEWLINE);
if (bts->tz.override != 0) {
if (bts->tz.dst)
vty_out(vty, " timezone %d %d %d%s",
@@ -1634,6 +1636,13 @@ DEFUN(cfg_bts_tsc,
struct gsm_bts *bts = vty->index;
int tsc = atoi(argv[0]);
+ if (!gsm_bts_has_feature(bts, BTS_FEAT_MULTI_TSC)) {
+ vty_out(vty, "%% This BTS does not support a TSC != BCC, "
+ "falling back to BCC%s", VTY_NEWLINE);
+ bts->tsc = bts->bsic & 7;
+ return CMD_WARNING;
+ }
+
bts->tsc = tsc;
return CMD_SUCCESS;
@@ -1655,6 +1664,11 @@ DEFUN(cfg_bts_bsic,
}
bts->bsic = bsic;
+ /* automatically re-configuer the TSC if we change the BCC
+ * which is the lower 3 bits of the BSIC */
+ if (!gsm_bts_has_feature(bts, BTS_FEAT_MULTI_TSC))
+ bts->tsc = bts->bsic & 7;
+
return CMD_SUCCESS;
}
@@ -2977,6 +2991,13 @@ DEFUN(cfg_ts_tsc,
{
struct gsm_bts_trx_ts *ts = vty->index;
+ if (!gsm_bts_has_feature(ts->trx->bts, BTS_FEAT_MULTI_TSC)) {
+ vty_out(vty, "%% This BTS does not support a TSC != BCC, "
+ "falling back to BCC%s", VTY_NEWLINE);
+ ts->tsc = -1;
+ return CMD_WARNING;
+ }
+
ts->tsc = atoi(argv[0]);
return CMD_SUCCESS;
diff --git a/openbsc/src/libbsc/bts_ericsson_rbs2000.c b/openbsc/src/libbsc/bts_ericsson_rbs2000.c
index ba5ebe576..7f056f12d 100644
--- a/openbsc/src/libbsc/bts_ericsson_rbs2000.c
+++ b/openbsc/src/libbsc/bts_ericsson_rbs2000.c
@@ -262,6 +262,7 @@ static int bts_model_rbs2k_start(struct gsm_network *net)
gsm_btsmodel_set_feature(&model_rbs2k, BTS_FEAT_HOPPING);
gsm_btsmodel_set_feature(&model_rbs2k, BTS_FEAT_HSCSD);
+ gsm_btsmodel_set_feature(&model_rbs2k, BTS_FEAT_MULTI_TSC);
osmo_signal_register_handler(SS_L_INPUT, inp_sig_cb, NULL);
osmo_signal_register_handler(SS_L_GLOBAL, gbl_sig_cb, NULL);
diff --git a/openbsc/src/libbsc/bts_ipaccess_nanobts.c b/openbsc/src/libbsc/bts_ipaccess_nanobts.c
index dfc8d16fe..c2541273a 100644
--- a/openbsc/src/libbsc/bts_ipaccess_nanobts.c
+++ b/openbsc/src/libbsc/bts_ipaccess_nanobts.c
@@ -510,6 +510,7 @@ int bts_model_nanobts_init(void)
gsm_btsmodel_set_feature(&bts_model_nanobts, BTS_FEAT_GPRS);
gsm_btsmodel_set_feature(&bts_model_nanobts, BTS_FEAT_EGPRS);
+ gsm_btsmodel_set_feature(&bts_model_nanobts, BTS_FEAT_MULTI_TSC);
return gsm_bts_model_register(&bts_model_nanobts);
}
diff --git a/openbsc/src/libbsc/bts_nokia_site.c b/openbsc/src/libbsc/bts_nokia_site.c
index 36e3fac4f..376a04889 100644
--- a/openbsc/src/libbsc/bts_nokia_site.c
+++ b/openbsc/src/libbsc/bts_nokia_site.c
@@ -1724,6 +1724,7 @@ static int bts_model_nokia_site_start(struct gsm_network *net)
gsm_btsmodel_set_feature(&model_nokia_site, BTS_FEAT_HOPPING);
gsm_btsmodel_set_feature(&model_nokia_site, BTS_FEAT_HSCSD);
+ gsm_btsmodel_set_feature(&model_nokia_site, BTS_FEAT_MULTI_TSC);
osmo_signal_register_handler(SS_L_INPUT, inp_sig_cb, NULL);
osmo_signal_register_handler(SS_L_GLOBAL, gbl_sig_cb, NULL);
diff --git a/openbsc/src/libbsc/bts_siemens_bs11.c b/openbsc/src/libbsc/bts_siemens_bs11.c
index 101e996dd..160563b0f 100644
--- a/openbsc/src/libbsc/bts_siemens_bs11.c
+++ b/openbsc/src/libbsc/bts_siemens_bs11.c
@@ -594,6 +594,7 @@ static int bts_model_bs11_start(struct gsm_network *net)
gsm_btsmodel_set_feature(&model_bs11, BTS_FEAT_HOPPING);
gsm_btsmodel_set_feature(&model_bs11, BTS_FEAT_HSCSD);
+ gsm_btsmodel_set_feature(&model_bs11, BTS_FEAT_MULTI_TSC);
osmo_signal_register_handler(SS_L_INPUT, inp_sig_cb, NULL);
osmo_signal_register_handler(SS_L_GLOBAL, gbl_sig_cb, NULL);
diff --git a/openbsc/src/libbsc/bts_sysmobts.c b/openbsc/src/libbsc/bts_sysmobts.c
index 754e277e5..e1bf661fc 100644
--- a/openbsc/src/libbsc/bts_sysmobts.c
+++ b/openbsc/src/libbsc/bts_sysmobts.c
@@ -51,6 +51,7 @@ int bts_model_sysmobts_init(void)
model_sysmobts.features.data = &model_sysmobts._features_data[0];
model_sysmobts.features.data_len =
sizeof(model_sysmobts._features_data);
+ memset(model_sysmobts.features.data, 0, sizeof(model_sysmobts.features.data_len));
gsm_btsmodel_set_feature(&model_sysmobts, BTS_FEAT_GPRS);
gsm_btsmodel_set_feature(&model_sysmobts, BTS_FEAT_EGPRS);