fixeria has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-bsc/+/27383 )

Change subject: bitvec2freq_list(): fix handling of E-GSM ARFCNs
......................................................................

bitvec2freq_list(): fix handling of E-GSM ARFCNs

According to 3GPP TS 44.018, section 10.5.2.1b.2, only ARFCN values
in range 1..124 can be encoded using the 'bit map 0' format.  Before
this patch, ARFCN values belonging to E-GSM band (0, 975..1023) were
ignored in bitvec2freq_list(), and thus not present in the resulting
Cell Channel Description IE.

Change-Id: I17739e6845cd84e2a81bc406dd532541f7c52cb6
Related: SYS#5854
---
M src/osmo-bsc/system_information.c
M tests/gsm0408/gsm0408_test.ok
2 files changed, 19 insertions(+), 10 deletions(-)

Approvals:
  Jenkins Builder: Verified
  pespin: Looks good to me, but someone else must approve
  fixeria: Looks good to me, approved



diff --git a/src/osmo-bsc/system_information.c 
b/src/osmo-bsc/system_information.c
index 974af3a..e1b369d 100644
--- a/src/osmo-bsc/system_information.c
+++ b/src/osmo-bsc/system_information.c
@@ -504,20 +504,29 @@
        bool pgsm = false;
        memset(chan_list, 0, 16);

-       if (bts->band == GSM_BAND_900
-        && bts->c0->arfcn >= 1 && bts->c0->arfcn <= 124)
+       /* According to 3GPP TS 44.018, section 10.5.2.1b.2, only ARFCN values
+        * in range 1..124 can be encoded using the 'bit map 0' format. */
+       if (bts->band == GSM_BAND_900)
                pgsm = true;
+       /* Check presence of E-GSM ARFCN 0 */
+       if (pgsm && bitvec_get_bit_pos(bv, 0) == ONE)
+               pgsm = false;
+       /* Check presence of E-GSM ARFCNs 975..1023 */
+       for (i = 975; pgsm && i <= 1023; i++) {
+               if (bitvec_get_bit_pos(bv, i) == ONE)
+                       pgsm = false;
+       }
+
        /* P-GSM-only handsets only support 'bit map 0 format' */
        if (!bis && !ter && pgsm) {
                chan_list[0] = 0;

-               for (i = 0; i < bv->data_len*8; i++) {
-                       if (i >= 1 && i <= 124
-                        && bitvec_get_bit_pos(bv, i)) {
-                               rc = freq_list_bm0_set_arfcn(chan_list, i);
-                               if (rc < 0)
-                                       return rc;
-                       }
+               for (i = 1; i <= 124; i++) {
+                       if (!bitvec_get_bit_pos(bv, i))
+                               continue;
+                       rc = freq_list_bm0_set_arfcn(chan_list, i);
+                       if (rc < 0)
+                               return rc;
                }
                return 0;
        }
diff --git a/tests/gsm0408/gsm0408_test.ok b/tests/gsm0408/gsm0408_test.ok
index 26ec931..1a8389d 100644
--- a/tests/gsm0408/gsm0408_test.ok
+++ b/tests/gsm0408/gsm0408_test.ok
@@ -191,6 +191,6 @@
 Testing generation of the Cell Channel Description IE:
 Case a) only the BCCH carrier: 10
 Case b) more carriers from P-GSM band: 1 3 10 64 99 124
-Case c) more carriers from E-GSM band: 1 3 10 64 99 124
+Case c) more carriers from E-GSM band: 0 3 10 64 99 124 975 1001 1023
 BTS deallocated OK in test_cell_chan_desc()
 Done.

--
To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/27383
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bsc
Gerrit-Branch: 2021q4
Gerrit-Change-Id: I17739e6845cd84e2a81bc406dd532541f7c52cb6
Gerrit-Change-Number: 27383
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-MessageType: merged

Reply via email to