<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/19210">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  pespin: Looks good to me, but someone else must approve
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">RR Release Cell selection IE: fix repeated EARFCNs encoding<br><br>3GPP 44.018 10.5.2.1e defines the EARFCNs encoded in the 'Cell selection<br>indicator after release of all TCH and SDCCH IE' as follows:<br><br>  <Cell Selection Indicator after release of all TCH and SDCCH value part> ::=<br>  [...]<br>  | 011 { 1 <E-UTRAN Description : < E-UTRAN Description struct >> } ** 0<br><br>So after a 3-bit discriminator of '3' there can be multiple E-UTRAN<br>Descriptions, and each of them starts with a '1' bit to indicate that another<br>item follows. Finally there is a '0' bit to indicate the list end.<br><br>Before this patch, osmo-bsc only encoded the first '1' bit, and failed to<br>repeat this before each following E-UTRAN Description. Fix that by moving the<br>'1' encoding into the loop.<br><br>The final '0' was missing. Add it.<br><br>With these changes, adjust the size calculation in<br>CELL_SEL_IND_AFTER_REL_MAX_BITS to match.<br><br>Also fix CELL_SEL_IND_AFTER_REL_MAX_BYTES by using OSMO_BYTES_FOR_BITS()<br>instead of the inaccurate (n/8)+1.<br><br>A test for this is in I882c5e1f70bcc4833fc837a95c900ce291919cc5<br>(osmo-ttcn3-hacks).<br><br>Related: SYS#4871 SYS#4872<br>Change-Id: I59e427e4ebb1c6af99b27a15c40fed82457ac8ab<br>---<br>M src/osmo-bsc/gsm_04_08_rr.c<br>1 file changed, 8 insertions(+), 4 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo-bsc/gsm_04_08_rr.c b/src/osmo-bsc/gsm_04_08_rr.c</span><br><span>index f47c31f..f425b16 100644</span><br><span>--- a/src/osmo-bsc/gsm_04_08_rr.c</span><br><span>+++ b/src/osmo-bsc/gsm_04_08_rr.c</span><br><span>@@ -238,8 +238,8 @@</span><br><span> }</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define CELL_SEL_IND_AFTER_REL_MAX_BITS    (4+MAX_EARFCN_LIST*19)</span><br><span style="color: hsl(0, 100%, 40%);">-#define CELL_SEL_IND_AFTER_REL_MAX_BYTES ((CELL_SEL_IND_AFTER_REL_MAX_BITS/8)+1)</span><br><span style="color: hsl(120, 100%, 40%);">+#define CELL_SEL_IND_AFTER_REL_MAX_BITS (3+MAX_EARFCN_LIST*20+1)</span><br><span style="color: hsl(120, 100%, 40%);">+#define CELL_SEL_IND_AFTER_REL_MAX_BYTES OSMO_BYTES_FOR_BITS(CELL_SEL_IND_AFTER_REL_MAX_BITS)</span><br><span> </span><br><span> /* Generate a CSN.1 encoded "Cell Selection Indicator after release of all TCH and SDCCH"</span><br><span>  * as per TF 44.018 version 15.3.0 Table 10.5.2.1e.1.  This only generates the "value"</span><br><span>@@ -255,17 +255,18 @@</span><br><span> </span><br><span>   /* E-UTRAN Description */</span><br><span>    bitvec_set_uint(&bv, 3, 3);</span><br><span style="color: hsl(0, 100%, 40%);">- bitvec_set_bit(&bv, 1);</span><br><span> </span><br><span>      for (i = 0; i < MAX_EARFCN_LIST; i++) {</span><br><span>           const struct osmo_earfcn_si2q *e = &bts->si_common.si2quater_neigh_list;</span><br><span>              if (e->arfcn[i] == OSMO_EARFCN_INVALID)</span><br><span>                   continue;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-           if (bitvec_tailroom_bits(&bv) < 19) {</span><br><span style="color: hsl(120, 100%, 40%);">+          /* tailroom must fit one more EARFCN (20 bits), plus the final list term bit. */</span><br><span style="color: hsl(120, 100%, 40%);">+              if (bitvec_tailroom_bits(&bv) < 21) {</span><br><span>                         LOGP(DRR, LOGL_NOTICE, "%s: Not enough room to store EARFCN %u in the "</span><br><span>                            "Cell Selection Indicator IE\n", gsm_bts_name(bts), e->arfcn[i]);</span><br><span>               } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      bitvec_set_bit(&bv, 1);</span><br><span>                  bitvec_set_uint(&bv, e->arfcn[i], 16);</span><br><span>                        /* No "Measurement Bandwidth" */</span><br><span>                   bitvec_set_bit(&bv, 0);</span><br><span>@@ -276,6 +277,9 @@</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* list term */</span><br><span style="color: hsl(120, 100%, 40%);">+       bitvec_set_bit(&bv, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>        rc = bitvec_used_bytes(&bv);</span><br><span> </span><br><span>         if (rc == 1) {</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/19210">change 19210</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/c/osmo-bsc/+/19210"/><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-Change-Id: I59e427e4ebb1c6af99b27a15c40fed82457ac8ab </div>
<div style="display:none"> Gerrit-Change-Number: 19210 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>