laforge has submitted this change. ( 
https://gerrit.osmocom.org/c/osmocom-bb/+/41357?usp=email )

Change subject: Omit all-zero octets in MS Classmark 3
......................................................................

Omit all-zero octets in MS Classmark 3

TS 24.008 Clause 10.5.7.1 allows us to omit all-zero octets at the end
of the information element. The decoder will add them if needed.

Older specs tell us to include the supported bands, a5 bits and radio
capability. Therefore we don't omit them, even if their encoded octets
are all-zero.

Change-Id: I3f05893e60f37f349b77fbd15a20b7708c4c3481
---
M src/host/layer23/src/mobile/gsm48_rr.c
1 file changed, 13 insertions(+), 0 deletions(-)

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




diff --git a/src/host/layer23/src/mobile/gsm48_rr.c 
b/src/host/layer23/src/mobile/gsm48_rr.c
index 1750c57..c04193c 100644
--- a/src/host/layer23/src/mobile/gsm48_rr.c
+++ b/src/host/layer23/src/mobile/gsm48_rr.c
@@ -1270,6 +1270,7 @@
        struct gsm_support *sup = &ms->support;
        struct gsm_settings *set = &ms->settings;
        struct bitvec bv;
+       int minimum_len;

        memset(&bv, 0, sizeof(bv));
        bv.data = buf;
@@ -1328,6 +1329,8 @@
                bitvec_set_uint(&bv, 0, 4);
                bitvec_set_uint(&bv, set->class_900, 4);
        }
+       /* These octets above shall be included according to GSM 04.08 Version 
5.3.0. */
+       minimum_len = (bv.cur_bit + 7) >> 3;
        /* r support */
        if (set->r_gsm) {
                bitvec_set_bit(&bv, ONE);
@@ -1442,6 +1445,16 @@
        *len = (bv.cur_bit + 7) >> 3;
        bitvec_fill(&bv, (*len*8) - bv.cur_bit, ZERO);

+       /* Remove all all-zero octets at the end. See the rule in Clause 
10.5.7.1:
+          "Typically, the number of spare bits at the end is the minimum to 
reach an octet boundary.
+           The receiver may add any number of bits set to "0" at the end of 
the received string
+           if needed for correct decoding."
+          GSM 04.08 Version 5.3.0 states that spare octets after "octet 3" and 
"octet 3bis" may be omitted.
+          Note that "octet 3" refers to the first value (buf[0]) in this TLV 
information element.
+        */
+       while (*len > minimum_len && buf[*len - 1] == 0x00)
+               (*len)--;
+
        return 0;
 }


--
To view, visit https://gerrit.osmocom.org/c/osmocom-bb/+/41357?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: I3f05893e60f37f349b77fbd15a20b7708c4c3481
Gerrit-Change-Number: 41357
Gerrit-PatchSet: 1
Gerrit-Owner: jolly <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>

Reply via email to