This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.
Jacob Erlbeck jerlbeck at sysmocom.deFrom: Holger Hans Peter Freyther <zecke at selfish.org> The iPhone5 (US) appears to have some issues with the SIs generated, or the nanoBTS is not sending them correctly. Add a configurable hack to put all bands into the SI2/SI5 message. It is enabled by the bts VTY command 'force-combined-si'. This is a quick change without much reflection and watching for side effects. I have verfied that a network with ARFCN 134 and neighbors ARFCN 130 and 512 do not get generate the SI2ter and announce everything inside the SI2. This patch is based on 'si: Add a hack to disable SI2ter/SI2bis/SI5ter/SI5bis messages'. Ticket: OW#1062 Sponsored-by: On-Waves ehf --- openbsc/include/openbsc/gsm_data_shared.h | 3 +++ openbsc/src/libbsc/bsc_vty.c | 27 +++++++++++++++++++++++++++ openbsc/src/libbsc/system_information.c | 3 +++ openbsc/tests/vty_test_runner.py | 18 ++++++++++++++++++ 4 files changed, 51 insertions(+) diff --git a/openbsc/include/openbsc/gsm_data_shared.h b/openbsc/include/openbsc/gsm_data_shared.h index b49a539..0922f78 100644 --- a/openbsc/include/openbsc/gsm_data_shared.h +++ b/openbsc/include/openbsc/gsm_data_shared.h @@ -670,6 +670,9 @@ struct gsm_bts { int num_trx; struct llist_head trx_list; + /* SI compatibility hacks */ + int force_combined_si; + #ifdef ROLE_BSC /* Abis NM queue */ struct llist_head abis_queue; diff --git a/openbsc/src/libbsc/bsc_vty.c b/openbsc/src/libbsc/bsc_vty.c index 7fa5ea7..4d09e15 100644 --- a/openbsc/src/libbsc/bsc_vty.c +++ b/openbsc/src/libbsc/bsc_vty.c @@ -636,6 +636,9 @@ static void config_write_bts_single(struct vty *vty, struct gsm_bts *bts) if (bts->excl_from_rf_lock) vty_out(vty, " rf-lock-exclude%s", VTY_NEWLINE); + vty_out(vty, " %sforce-combined-si%s", + bts->force_combined_si ? "" : "no ", VTY_NEWLINE); + config_write_bts_model(vty, bts); } @@ -2658,6 +2661,28 @@ DEFUN(cfg_bts_no_excl_rf_lock, return CMD_SUCCESS; } +#define FORCE_COMB_SI_STR "Force the generation of a single SI (no ter/bis)\n" + +DEFUN(cfg_bts_force_comb_si, + cfg_bts_force_comb_si_cmd, + "force-combined-si", + FORCE_COMB_SI_STR) +{ + struct gsm_bts *bts = vty->index; + bts->force_combined_si = 1; + return CMD_SUCCESS; +} + +DEFUN(cfg_bts_no_force_comb_si, + cfg_bts_no_force_comb_si_cmd, + "no force-combined-si", + NO_STR FORCE_COMB_SI_STR) +{ + struct gsm_bts *bts = vty->index; + bts->force_combined_si = 0; + return CMD_SUCCESS; +} + #define TRX_TEXT "Radio Transceiver\n" /* per TRX configuration */ @@ -3255,6 +3280,8 @@ int bsc_vty_init(const struct log_info *cat) install_element(BTS_NODE, &cfg_bts_si5_neigh_cmd); install_element(BTS_NODE, &cfg_bts_excl_rf_lock_cmd); install_element(BTS_NODE, &cfg_bts_no_excl_rf_lock_cmd); + install_element(BTS_NODE, &cfg_bts_force_comb_si_cmd); + install_element(BTS_NODE, &cfg_bts_no_force_comb_si_cmd); install_element(BTS_NODE, &cfg_trx_cmd); install_node(&trx_node, dummy_config_write); diff --git a/openbsc/src/libbsc/system_information.c b/openbsc/src/libbsc/system_information.c index c901a4a..5f46bf9 100644 --- a/openbsc/src/libbsc/system_information.c +++ b/openbsc/src/libbsc/system_information.c @@ -72,6 +72,9 @@ static int use_arfcn(const struct gsm_bts *bts, const int bis, const int ter, { if (!bis && !ter && band_compatible(bts, arfcn)) return 1; + if (bts->force_combined_si) + return 0; + /* Correct but somehow broken with either the nanoBTS or the iPhone5 */ if (bis && pgsm && band_compatible(bts, arfcn) && (arfcn < 1 || arfcn > 124)) return 1; if (ter && !band_compatible(bts, arfcn)) diff --git a/openbsc/tests/vty_test_runner.py b/openbsc/tests/vty_test_runner.py index 16eb213..47e1ad1 100644 --- a/openbsc/tests/vty_test_runner.py +++ b/openbsc/tests/vty_test_runner.py @@ -173,6 +173,24 @@ class TestVTYNITB(TestVTYGenericBSC): self.assertEquals(res.find('periodic location update 60'), -1) self.assert_(res.find('no periodic location update') > 0) + def testEnableDisableSiHacks(self): + self.vty.enable() + self.vty.command("configure terminal") + self.vty.command("network") + self.vty.command("bts 0") + + # Enable periodic lu.. + self.vty.verify("force-combined-si", ['']) + res = self.vty.command("write terminal") + self.assert_(res.find(' force-combined-si') > 0) + self.assertEquals(res.find('no force-combined-si'), -1) + + # Now disable it.. + self.vty.verify("no force-combined-si", ['']) + res = self.vty.command("write terminal") + self.assertEquals(res.find(' force-combined-si'), -1) + self.assert_(res.find('no force-combined-si') > 0) + def testRachAccessControlClass(self): self.vty.enable() self.vty.command("configure terminal") -- 1.7.9.5