si: Add a config option to disable SI2ter/SI2bis/SI5ter/SI5bis messages
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 conceptually based on 'si: Add a hack to disable SI2ter/SI2bis/SI5ter/SI5bis messages' (692daaf2d2). Ticket: OW#1062 Sponsored-by: On-Waves ehf
This commit is contained in:
parent
a83d511b61
commit
65d114fe43
|
@ -676,6 +676,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;
|
||||
|
|
|
@ -645,6 +645,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);
|
||||
}
|
||||
|
||||
|
@ -2667,6 +2670,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;
|
||||
}
|
||||
|
||||
static void _get_codec_from_arg(struct vty *vty, int argc, const char *argv[])
|
||||
{
|
||||
struct gsm_bts *bts = vty->index;
|
||||
|
@ -3331,6 +3356,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_bts_codec0_cmd);
|
||||
install_element(BTS_NODE, &cfg_bts_codec1_cmd);
|
||||
install_element(BTS_NODE, &cfg_bts_codec2_cmd);
|
||||
|
|
|
@ -70,8 +70,11 @@ static int is_dcs_net(const struct gsm_bts *bts)
|
|||
static int use_arfcn(const struct gsm_bts *bts, const int bis, const int ter,
|
||||
const int pgsm, const int arfcn)
|
||||
{
|
||||
if (bts->force_combined_si)
|
||||
return !bis && !ter;
|
||||
if (!bis && !ter && band_compatible(bts, arfcn))
|
||||
return 1;
|
||||
/* 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))
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Reference in New Issue