diff options
-rw-r--r-- | include/osmocom/bsc/gsm_data.h | 3 | ||||
-rw-r--r-- | src/osmo-bsc/bsc_init.c | 16 | ||||
-rw-r--r-- | src/osmo-bsc/bsc_vty.c | 36 | ||||
-rw-r--r-- | src/osmo-bsc/gsm_data.c | 1 |
4 files changed, 50 insertions, 6 deletions
diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h index e57da55c0..738bad349 100644 --- a/include/osmocom/bsc/gsm_data.h +++ b/include/osmocom/bsc/gsm_data.h @@ -981,6 +981,9 @@ struct gsm_bts { /* offsets used while generating SI2quater */ size_t e_offset; size_t u_offset; + /* 3GPP TS 08.58 §8.5.1 BCCH INFORMATION. Some nanoBTS fail upon + * receival of empty SI disabling unsupported SI. see OS#3707. */ + bool si_unused_send_empty; /* ip.accesss Unit ID's have Site/BTS/TRX layout */ union { diff --git a/src/osmo-bsc/bsc_init.c b/src/osmo-bsc/bsc_init.c index 2f44b200a..7d29d4fbe 100644 --- a/src/osmo-bsc/bsc_init.c +++ b/src/osmo-bsc/bsc_init.c @@ -173,12 +173,16 @@ int gsm_bts_trx_set_system_infos(struct gsm_bts_trx *trx) for (n = 0; n < n_si; n++) { i = gen_si[n]; - /* if we don't currently have this SI, we send a zero-length - * RSL BCCH FILLING / SACCH FILLING * in order to deactivate - * the SI, in case it might have previously been active */ - if (!GSM_BTS_HAS_SI(bts, i)) - rc = rsl_si(trx, i, 0); - else + /* 3GPP TS 08.58 §8.5.1 BCCH INFORMATION. If we don't currently + * have this SI, we send a zero-length RSL BCCH FILLING / + * SACCH FILLING in order to deactivate the SI, in case it + * might have previously been active */ + if (!GSM_BTS_HAS_SI(bts, i)) { + if (bts->si_unused_send_empty) + rc = rsl_si(trx, i, 0); + else + rc = 0; /* some nanoBTS fw don't like receiving empty unsupported SI */ + } else rc = rsl_si(trx, i, si_len[i]); if (rc < 0) return rc; diff --git a/src/osmo-bsc/bsc_vty.c b/src/osmo-bsc/bsc_vty.c index 8c7d8e19d..032305e4b 100644 --- a/src/osmo-bsc/bsc_vty.c +++ b/src/osmo-bsc/bsc_vty.c @@ -874,6 +874,8 @@ static void config_write_bts_single(struct vty *vty, struct gsm_bts *bts) } vty_out(vty, " access-control-class-ramping-step-size %u%s", acc_ramp_get_step_size(&bts->acc_ramp), VTY_NEWLINE); + if (!bts->si_unused_send_empty) + vty_out(vty, " no system-information unused-send-empty%s", VTY_NEWLINE); for (i = SYSINFO_TYPE_1; i < _MAX_SYSINFO_TYPE; i++) { if (bts->si_mode_static & (1 << i)) { vty_out(vty, " system-information %s mode static%s", @@ -3087,6 +3089,38 @@ DEFUN(cfg_bts_si_static, cfg_bts_si_static_cmd, return CMD_SUCCESS; } +DEFUN(cfg_bts_si_unused_send_empty, cfg_bts_si_unused_send_empty_cmd, + "system-information unused-send-empty", + SI_TEXT + "Send BCCH Info with empty 'Full BCCH Info' TLV to notify disabled SI. " + "Some nanoBTS fw versions are known to fail upon receival of these messages.\n") +{ + struct gsm_bts *bts = vty->index; + + bts->si_unused_send_empty = true; + + return CMD_SUCCESS; +} + +DEFUN(cfg_bts_no_si_unused_send_empty, cfg_bts_no_si_unused_send_empty_cmd, + "no system-information unused-send-empty", + NO_STR SI_TEXT + "Avoid sending BCCH Info with empty 'Full BCCH Info' TLV to notify disabled SI. " + "Some nanoBTS fw versions are known to fail upon receival of these messages.\n") +{ + struct gsm_bts *bts = vty->index; + + if (!is_ipaccess_bts(bts) || is_sysmobts_v2(bts)) { + vty_out(vty, "This command is only intended for ipaccess nanoBTS. See OS#3707.%s", + VTY_NEWLINE); + return CMD_WARNING; + } + + bts->si_unused_send_empty = false; + + return CMD_SUCCESS; +} + DEFUN(cfg_bts_early_cm, cfg_bts_early_cm_cmd, "early-classmark-sending (allowed|forbidden)", "Early Classmark Sending\n" @@ -5132,6 +5166,8 @@ int bsc_vty_init(struct gsm_network *network) install_element(BTS_NODE, &cfg_bts_pag_free_cmd); install_element(BTS_NODE, &cfg_bts_si_mode_cmd); install_element(BTS_NODE, &cfg_bts_si_static_cmd); + install_element(BTS_NODE, &cfg_bts_si_unused_send_empty_cmd); + install_element(BTS_NODE, &cfg_bts_no_si_unused_send_empty_cmd); install_element(BTS_NODE, &cfg_bts_early_cm_cmd); install_element(BTS_NODE, &cfg_bts_early_cm_3g_cmd); install_element(BTS_NODE, &cfg_bts_neigh_mode_cmd); diff --git a/src/osmo-bsc/gsm_data.c b/src/osmo-bsc/gsm_data.c index 0f76a2746..7eee918b9 100644 --- a/src/osmo-bsc/gsm_data.c +++ b/src/osmo-bsc/gsm_data.c @@ -856,6 +856,7 @@ struct gsm_bts *gsm_bts_alloc(struct gsm_network *net, uint8_t bts_num) bts->gprs.ctrl_ack_type_use_block = true; /* use RLC/MAC control block */ bts->neigh_list_manual_mode = NL_MODE_AUTOMATIC; bts->early_classmark_allowed_3g = true; /* 3g Early Classmark Sending controlled by bts->early_classmark_allowed param */ + bts->si_unused_send_empty = true; bts->si_common.cell_sel_par.cell_resel_hyst = 2; /* 4 dB */ bts->si_common.cell_sel_par.rxlev_acc_min = 0; bts->si_common.si2quater_neigh_list.arfcn = bts->si_common.data.earfcn_list; |