<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/12133">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Harald Welte: Looks good to me, approved
  Stefan Sperling: Looks good to me, but someone else must approve
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add VTY option to avoid sending empty Full BCCH Info for disabled SI<br><br>According to 3GPP TS 08.58 §8.5.1 BCCH INFORMATION:<br>"If the Full BCCH information element is not included this indicates that<br>transmission of the indicated SYSTEM INFORMATION message shall be stopped."<br><br>However, some ipaccess nanoBTS firmware versions are known to not support<br>some SI elements and also to dislike receiving BCCH Information for those SI,<br>even if received with empty BCCH Information meaning they should not be used.<br><br>Upon receival of this kind of message, nanoBTS sends a Failure Report<br>with following text:<br>Type=processing failure, Severity=critical failure, Probable cause=Manufacturer specific values: Fatal software error, Additional Text=l2_bch.c:1149<br>****<br>** l2_bch.c#1149:BCHbcchSItypeValid( prim_p->infoType )<br>** IPA_SW_FATAL_ERROR<br>** In task "TRX Proc:L2_BCH" @ (325).<br>****<br><br>This kind of issue only appears with some fw versions, since it's known<br>to work fine in other ones, so let's not disable this kind of mesage by<br>default on all BTs of type "nanobts".<br><br>Instead, add a VTY command that allows disabling this kind of message in<br>order to be able to operate those nanoBTS units.<br><br>Fixes: OS#3707<br>Change-Id: Idec1daabc21de4eea5c55edd1dbb0e0775720fc7<br>---<br>M include/osmocom/bsc/gsm_data.h<br>M src/osmo-bsc/bsc_init.c<br>M src/osmo-bsc/bsc_vty.c<br>M src/osmo-bsc/gsm_data.c<br>4 files changed, 50 insertions(+), 6 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h</span><br><span>index e57da55..738bad3 100644</span><br><span>--- a/include/osmocom/bsc/gsm_data.h</span><br><span>+++ b/include/osmocom/bsc/gsm_data.h</span><br><span>@@ -981,6 +981,9 @@</span><br><span>      /* offsets used while generating SI2quater */</span><br><span>        size_t e_offset;</span><br><span>     size_t u_offset;</span><br><span style="color: hsl(120, 100%, 40%);">+      /* 3GPP TS 08.58 §8.5.1 BCCH INFORMATION. Some nanoBTS fail upon</span><br><span style="color: hsl(120, 100%, 40%);">+      * receival of empty SI disabling unsupported SI. see OS#3707. */</span><br><span style="color: hsl(120, 100%, 40%);">+     bool si_unused_send_empty;</span><br><span> </span><br><span>       /* ip.accesss Unit ID's have Site/BTS/TRX layout */</span><br><span>      union {</span><br><span>diff --git a/src/osmo-bsc/bsc_init.c b/src/osmo-bsc/bsc_init.c</span><br><span>index 2f44b20..7d29d4f 100644</span><br><span>--- a/src/osmo-bsc/bsc_init.c</span><br><span>+++ b/src/osmo-bsc/bsc_init.c</span><br><span>@@ -173,12 +173,16 @@</span><br><span> </span><br><span>         for (n = 0; n < n_si; n++) {</span><br><span>              i = gen_si[n];</span><br><span style="color: hsl(0, 100%, 40%);">-          /* if we don't currently have this SI, we send a zero-length</span><br><span style="color: hsl(0, 100%, 40%);">-                 * RSL BCCH FILLING / SACCH FILLING * in order to deactivate</span><br><span style="color: hsl(0, 100%, 40%);">-             * the SI, in case it might have previously been active */</span><br><span style="color: hsl(0, 100%, 40%);">-              if (!GSM_BTS_HAS_SI(bts, i))</span><br><span style="color: hsl(0, 100%, 40%);">-                    rc = rsl_si(trx, i, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-         else</span><br><span style="color: hsl(120, 100%, 40%);">+          /* 3GPP TS 08.58 §8.5.1 BCCH INFORMATION. If we don't currently</span><br><span style="color: hsl(120, 100%, 40%);">+           * have this SI, we send a zero-length RSL BCCH FILLING /</span><br><span style="color: hsl(120, 100%, 40%);">+              * SACCH FILLING in order to deactivate the SI, in case it</span><br><span style="color: hsl(120, 100%, 40%);">+             * might have previously been active */</span><br><span style="color: hsl(120, 100%, 40%);">+               if (!GSM_BTS_HAS_SI(bts, i)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        if (bts->si_unused_send_empty)</span><br><span style="color: hsl(120, 100%, 40%);">+                             rc = rsl_si(trx, i, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+                       else</span><br><span style="color: hsl(120, 100%, 40%);">+                          rc = 0; /* some nanoBTS fw don't like receiving empty unsupported SI */</span><br><span style="color: hsl(120, 100%, 40%);">+           } else</span><br><span>                       rc = rsl_si(trx, i, si_len[i]);</span><br><span>              if (rc < 0)</span><br><span>                       return rc;</span><br><span>diff --git a/src/osmo-bsc/bsc_vty.c b/src/osmo-bsc/bsc_vty.c</span><br><span>index 8c7d8e1..032305e 100644</span><br><span>--- a/src/osmo-bsc/bsc_vty.c</span><br><span>+++ b/src/osmo-bsc/bsc_vty.c</span><br><span>@@ -874,6 +874,8 @@</span><br><span>        }</span><br><span>    vty_out(vty, "  access-control-class-ramping-step-size %u%s", acc_ramp_get_step_size(&bts->acc_ramp),</span><br><span>               VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!bts->si_unused_send_empty)</span><br><span style="color: hsl(120, 100%, 40%);">+            vty_out(vty, "  no system-information unused-send-empty%s", VTY_NEWLINE);</span><br><span>  for (i = SYSINFO_TYPE_1; i < _MAX_SYSINFO_TYPE; i++) {</span><br><span>            if (bts->si_mode_static & (1 << i)) {</span><br><span>                   vty_out(vty, "  system-information %s mode static%s",</span><br><span>@@ -3087,6 +3089,38 @@</span><br><span>     return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_bts_si_unused_send_empty, cfg_bts_si_unused_send_empty_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+   "system-information unused-send-empty",</span><br><span style="color: hsl(120, 100%, 40%);">+     SI_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+       "Send BCCH Info with empty 'Full BCCH Info' TLV to notify disabled SI. "</span><br><span style="color: hsl(120, 100%, 40%);">+    "Some nanoBTS fw versions are known to fail upon receival of these messages.\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_bts *bts = vty->index;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        bts->si_unused_send_empty = true;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_bts_no_si_unused_send_empty, cfg_bts_no_si_unused_send_empty_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ "no system-information unused-send-empty",</span><br><span style="color: hsl(120, 100%, 40%);">+  NO_STR SI_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+        "Avoid sending BCCH Info with empty 'Full BCCH Info' TLV to notify disabled SI. "</span><br><span style="color: hsl(120, 100%, 40%);">+   "Some nanoBTS fw versions are known to fail upon receival of these messages.\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_bts *bts = vty->index;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        if (!is_ipaccess_bts(bts) || is_sysmobts_v2(bts)) {</span><br><span style="color: hsl(120, 100%, 40%);">+           vty_out(vty, "This command is only intended for ipaccess nanoBTS. See OS#3707.%s",</span><br><span style="color: hsl(120, 100%, 40%);">+                  VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+         return CMD_WARNING;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   bts->si_unused_send_empty = false;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> DEFUN(cfg_bts_early_cm, cfg_bts_early_cm_cmd,</span><br><span>    "early-classmark-sending (allowed|forbidden)",</span><br><span>     "Early Classmark Sending\n"</span><br><span>@@ -5132,6 +5166,8 @@</span><br><span>        install_element(BTS_NODE, &cfg_bts_pag_free_cmd);</span><br><span>        install_element(BTS_NODE, &cfg_bts_si_mode_cmd);</span><br><span>         install_element(BTS_NODE, &cfg_bts_si_static_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+        install_element(BTS_NODE, &cfg_bts_si_unused_send_empty_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+     install_element(BTS_NODE, &cfg_bts_no_si_unused_send_empty_cmd);</span><br><span>         install_element(BTS_NODE, &cfg_bts_early_cm_cmd);</span><br><span>        install_element(BTS_NODE, &cfg_bts_early_cm_3g_cmd);</span><br><span>     install_element(BTS_NODE, &cfg_bts_neigh_mode_cmd);</span><br><span>diff --git a/src/osmo-bsc/gsm_data.c b/src/osmo-bsc/gsm_data.c</span><br><span>index 0f76a27..7eee918 100644</span><br><span>--- a/src/osmo-bsc/gsm_data.c</span><br><span>+++ b/src/osmo-bsc/gsm_data.c</span><br><span>@@ -856,6 +856,7 @@</span><br><span>       bts->gprs.ctrl_ack_type_use_block = true; /* use RLC/MAC control block */</span><br><span>         bts->neigh_list_manual_mode = NL_MODE_AUTOMATIC;</span><br><span>  bts->early_classmark_allowed_3g = true; /* 3g Early Classmark Sending controlled by bts->early_classmark_allowed param */</span><br><span style="color: hsl(120, 100%, 40%);">+       bts->si_unused_send_empty = true;</span><br><span>         bts->si_common.cell_sel_par.cell_resel_hyst = 2; /* 4 dB */</span><br><span>       bts->si_common.cell_sel_par.rxlev_acc_min = 0;</span><br><span>    bts->si_common.si2quater_neigh_list.arfcn = bts->si_common.data.earfcn_list;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12133">change 12133</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/12133"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: Idec1daabc21de4eea5c55edd1dbb0e0775720fc7 </div>
<div style="display:none"> Gerrit-Change-Number: 12133 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: Pau Espin Pedrol <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Pau Espin Pedrol <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Stefan Sperling <stsp@stsp.name> </div>
<div style="display:none"> Gerrit-Reviewer: Vadim Yanitskiy <axilirator@gmail.com> </div>