From 1cf21de48fe354d364f8b930448ec788553275c7 Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Wed, 5 Dec 2018 13:38:10 +0100 Subject: Add VTY option to avoid sending empty Full BCCH Info for disabled SI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit According to 3GPP TS 08.58 §8.5.1 BCCH INFORMATION: "If the Full BCCH information element is not included this indicates that transmission of the indicated SYSTEM INFORMATION message shall be stopped." However, some ipaccess nanoBTS firmware versions are known to not support some SI elements and also to dislike receiving BCCH Information for those SI, even if received with empty BCCH Information meaning they should not be used. Upon receival of this kind of message, nanoBTS sends a Failure Report with following text: Type=processing failure, Severity=critical failure, Probable cause=Manufacturer specific values: Fatal software error, Additional Text=l2_bch.c:1149 **** ** l2_bch.c#1149:BCHbcchSItypeValid( prim_p->infoType ) ** IPA_SW_FATAL_ERROR ** In task "TRX Proc:L2_BCH" @ (325). **** This kind of issue only appears with some fw versions, since it's known to work fine in other ones, so let's not disable this kind of mesage by default on all BTs of type "nanobts". Instead, add a VTY command that allows disabling this kind of message in order to be able to operate those nanoBTS units. Fixes: OS#3707 Change-Id: Idec1daabc21de4eea5c55edd1dbb0e0775720fc7 --- include/osmocom/bsc/gsm_data.h | 3 +++ src/osmo-bsc/bsc_init.c | 16 ++++++++++------ src/osmo-bsc/bsc_vty.c | 36 ++++++++++++++++++++++++++++++++++++ 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; -- cgit v1.2.3