From 903aaea6689cc08c0e33fb05659c808a5e5f754f Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 19 Jan 2014 17:10:50 +0100 Subject: 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). --- openbsc/include/openbsc/gsm_data_shared.h | 1 + openbsc/src/libbsc/bsc_vty.c | 23 ++++++++++++++++++++++- openbsc/src/libbsc/bts_ericsson_rbs2000.c | 1 + openbsc/src/libbsc/bts_ipaccess_nanobts.c | 1 + openbsc/src/libbsc/bts_nokia_site.c | 1 + openbsc/src/libbsc/bts_siemens_bs11.c | 1 + openbsc/src/libbsc/bts_sysmobts.c | 1 + 7 files changed, 28 insertions(+), 1 deletion(-) diff --git a/openbsc/include/openbsc/gsm_data_shared.h b/openbsc/include/openbsc/gsm_data_shared.h index ae9e7d867..6eafed8c1 100644 --- a/openbsc/include/openbsc/gsm_data_shared.h +++ b/openbsc/include/openbsc/gsm_data_shared.h @@ -436,6 +436,7 @@ enum gsm_bts_features { BTS_FEAT_EGPRS, BTS_FEAT_ECSD, BTS_FEAT_HOPPING, + BTS_FEAT_MULTI_TSC, }; /* 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); -- cgit v1.2.3