<p>Max <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/13067">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Harald Welte: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">MCS: move HeaderType enum outside of class definition<br><br>Move functions which compute number of blocks or bits depending on<br>header type and corresponding enum outside of GprsCodingScheme<br>class. This will allows us to use standard libosmocore value_sting<br>functions in upcoming patches for IA Rest Octet encoding/decoding.<br><br>Change-Id: Id0873f85e1f16a72e17e7fbc4ad76b194917067f<br>---<br>M debian/copyright<br>M src/Makefile.am<br>A src/coding_scheme.c<br>M src/coding_scheme.h<br>M src/decoding.cpp<br>M src/encoding.cpp<br>M src/gprs_bssgp_pcu.cpp<br>M src/gprs_coding_scheme.cpp<br>M src/gprs_coding_scheme.h<br>M src/rlc.cpp<br>M src/tbf_dl.cpp<br>M tests/edge/EdgeTest.cpp<br>12 files changed, 126 insertions(+), 92 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/debian/copyright b/debian/copyright</span><br><span>index 2e800a7..0069d0c 100644</span><br><span>--- a/debian/copyright</span><br><span>+++ b/debian/copyright</span><br><span>@@ -15,6 +15,7 @@</span><br><span>            src/gprs_ms.h</span><br><span>            src/gprs_coding_scheme.cpp</span><br><span>            src/gprs_coding_scheme.h</span><br><span style="color: hsl(120, 100%, 40%);">+           src/coding_scheme.c</span><br><span>            src/coding_scheme.h</span><br><span>            src/cxx_linuxlist.h</span><br><span>            src/pcu_vty_functions.cpp</span><br><span>diff --git a/src/Makefile.am b/src/Makefile.am</span><br><span>index eb4a2bb..51b047e 100644</span><br><span>--- a/src/Makefile.am</span><br><span>+++ b/src/Makefile.am</span><br><span>@@ -63,6 +63,7 @@</span><br><span>   rlc.cpp \</span><br><span>    osmobts_sock.cpp \</span><br><span>   gprs_codel.c \</span><br><span style="color: hsl(120, 100%, 40%);">+        coding_scheme.c \</span><br><span>    gprs_coding_scheme.cpp \</span><br><span>     egprs_rlc_compression.cpp</span><br><span> </span><br><span>diff --git a/src/coding_scheme.c b/src/coding_scheme.c</span><br><span>new file mode 100644</span><br><span>index 0000000..a6f2905</span><br><span>--- /dev/null</span><br><span>+++ b/src/coding_scheme.c</span><br><span>@@ -0,0 +1,65 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/* coding_scheme.c</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (C) 2019 by sysmocom s.f.m.c. GmbH</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or</span><br><span style="color: hsl(120, 100%, 40%);">+ * modify it under the terms of the GNU General Public License</span><br><span style="color: hsl(120, 100%, 40%);">+ * as published by the Free Software Foundation; either version 2</span><br><span style="color: hsl(120, 100%, 40%);">+ * of the License, or (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * You should have received a copy of the GNU General Public License</span><br><span style="color: hsl(120, 100%, 40%);">+ * along with this program; if not, write to the Free Software</span><br><span style="color: hsl(120, 100%, 40%);">+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.</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%);">+#include <stdint.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdbool.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/utils.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include "coding_scheme.h"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static struct {</span><br><span style="color: hsl(120, 100%, 40%);">+  struct {</span><br><span style="color: hsl(120, 100%, 40%);">+              uint8_t data_header_bits;</span><br><span style="color: hsl(120, 100%, 40%);">+     } uplink, downlink;</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t data_block_header_bits;</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t num_blocks;</span><br><span style="color: hsl(120, 100%, 40%);">+   const char *name;</span><br><span style="color: hsl(120, 100%, 40%);">+} hdr_type_info[NUM_HEADER_TYPES] = {</span><br><span style="color: hsl(120, 100%, 40%);">+      { { 0 },         { 0 },         0, 0, "INVALID" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { { 1 * 8 + 0 }, { 1 * 8 + 0 }, 0, 0, "CONTROL" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { { 3 * 8 + 0 }, { 3 * 8 + 0 }, 0, 1, "GPRS_DATA" },</span><br><span style="color: hsl(120, 100%, 40%);">+        { { 5 * 8 + 6 }, { 5 * 8 + 0 }, 2, 2, "EGPRS_DATA_TYPE1" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { { 4 * 8 + 5 }, { 3 * 8 + 4 }, 2, 1, "EGPRS_DATA_TYPE2" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { { 3 * 8 + 7 }, { 3 * 8 + 7 }, 2, 1, "EGPRS_DATA_TYPE3" },</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%);">+uint8_t num_data_blocks(enum HeaderType ht)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   OSMO_ASSERT(ht < NUM_HEADER_TYPES);</span><br><span style="color: hsl(120, 100%, 40%);">+        return hdr_type_info[ht].num_blocks;</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%);">+uint8_t num_data_header_bits_UL(enum HeaderType ht)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(ht < NUM_HEADER_TYPES);</span><br><span style="color: hsl(120, 100%, 40%);">+        return hdr_type_info[ht].uplink.data_header_bits;</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%);">+uint8_t num_data_header_bits_DL(enum HeaderType ht)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_ASSERT(ht < NUM_HEADER_TYPES);</span><br><span style="color: hsl(120, 100%, 40%);">+        return hdr_type_info[ht].downlink.data_header_bits;</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%);">+uint8_t num_data_block_header_bits(enum HeaderType ht)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   OSMO_ASSERT(ht < NUM_HEADER_TYPES);</span><br><span style="color: hsl(120, 100%, 40%);">+        return hdr_type_info[ht].data_block_header_bits;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/coding_scheme.h b/src/coding_scheme.h</span><br><span>index 3705ea4..b0b85e3 100644</span><br><span>--- a/src/coding_scheme.h</span><br><span>+++ b/src/coding_scheme.h</span><br><span>@@ -27,3 +27,20 @@</span><br><span>    MCS1, MCS2, MCS3, MCS4, MCS5, MCS6, MCS7, MCS8, MCS9,</span><br><span>        NUM_SCHEMES</span><br><span> };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+enum HeaderType {</span><br><span style="color: hsl(120, 100%, 40%);">+        HEADER_INVALID,</span><br><span style="color: hsl(120, 100%, 40%);">+       HEADER_GPRS_CONTROL,</span><br><span style="color: hsl(120, 100%, 40%);">+  HEADER_GPRS_DATA,</span><br><span style="color: hsl(120, 100%, 40%);">+     HEADER_EGPRS_DATA_TYPE_1,</span><br><span style="color: hsl(120, 100%, 40%);">+     HEADER_EGPRS_DATA_TYPE_2,</span><br><span style="color: hsl(120, 100%, 40%);">+     HEADER_EGPRS_DATA_TYPE_3,</span><br><span style="color: hsl(120, 100%, 40%);">+     NUM_HEADER_TYPES</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%);">+enum HeaderType headerTypeData(enum CodingScheme mcs);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+uint8_t num_data_blocks(enum HeaderType ht);</span><br><span style="color: hsl(120, 100%, 40%);">+uint8_t num_data_header_bits_UL(enum HeaderType ht);</span><br><span style="color: hsl(120, 100%, 40%);">+uint8_t num_data_header_bits_DL(enum HeaderType ht);</span><br><span style="color: hsl(120, 100%, 40%);">+uint8_t num_data_block_header_bits(enum HeaderType ht);</span><br><span>diff --git a/src/decoding.cpp b/src/decoding.cpp</span><br><span>index 0dbb10a..3410291 100644</span><br><span>--- a/src/decoding.cpp</span><br><span>+++ b/src/decoding.cpp</span><br><span>@@ -355,16 +355,16 @@</span><br><span> {</span><br><span>        unsigned int cur_bit = 0;</span><br><span>    switch(cs.headerTypeData()) {</span><br><span style="color: hsl(0, 100%, 40%);">-   case GprsCodingScheme::HEADER_GPRS_DATA :</span><br><span style="color: hsl(120, 100%, 40%);">+     case HEADER_GPRS_DATA :</span><br><span>              cur_bit = rlc_parse_ul_data_header_gprs(rlc, data, cs);</span><br><span>              break;</span><br><span style="color: hsl(0, 100%, 40%);">-  case GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_3 :</span><br><span style="color: hsl(120, 100%, 40%);">+     case HEADER_EGPRS_DATA_TYPE_3 :</span><br><span>              cur_bit = rlc_parse_ul_data_header_egprs_type_3(rlc, data, cs);</span><br><span>              break;</span><br><span style="color: hsl(0, 100%, 40%);">-  case GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_2 :</span><br><span style="color: hsl(120, 100%, 40%);">+     case HEADER_EGPRS_DATA_TYPE_2 :</span><br><span>              cur_bit = rlc_parse_ul_data_header_egprs_type_2(rlc, data, cs);</span><br><span>              break;</span><br><span style="color: hsl(0, 100%, 40%);">-  case GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_1 :</span><br><span style="color: hsl(120, 100%, 40%);">+     case HEADER_EGPRS_DATA_TYPE_1 :</span><br><span>              cur_bit = rlc_parse_ul_data_header_egprs_type_1(rlc, data, cs);</span><br><span>              break;</span><br><span>       default:</span><br><span>diff --git a/src/encoding.cpp b/src/encoding.cpp</span><br><span>index 019de52..58df95f 100644</span><br><span>--- a/src/encoding.cpp</span><br><span>+++ b/src/encoding.cpp</span><br><span>@@ -1118,7 +1118,7 @@</span><br><span>        unsigned int bsn_delta;</span><br><span> </span><br><span>  switch(cs.headerTypeData()) {</span><br><span style="color: hsl(0, 100%, 40%);">-   case GprsCodingScheme::HEADER_GPRS_DATA:</span><br><span style="color: hsl(120, 100%, 40%);">+      case HEADER_GPRS_DATA:</span><br><span>               gprs = static_cast<struct rlc_dl_header *></span><br><span>                     ((void *)data);</span><br><span> </span><br><span>@@ -1134,7 +1134,7 @@</span><br><span>          gprs->bsn   = rlc->block_info[0].bsn;</span><br><span>          break;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      case GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_1:</span><br><span style="color: hsl(120, 100%, 40%);">+      case HEADER_EGPRS_DATA_TYPE_1:</span><br><span>               egprs1 = static_cast<struct gprs_rlc_dl_header_egprs_1 *></span><br><span>                      ((void *)data);</span><br><span> </span><br><span>@@ -1173,7 +1173,7 @@</span><br><span>          data[offs] = (data[offs] & 0b11110011) | e_fbi_header;</span><br><span>           break;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      case GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_2:</span><br><span style="color: hsl(120, 100%, 40%);">+      case HEADER_EGPRS_DATA_TYPE_2:</span><br><span>               egprs2 = static_cast<struct gprs_rlc_dl_header_egprs_2 *></span><br><span>                      ((void *)data);</span><br><span> </span><br><span>@@ -1197,7 +1197,7 @@</span><br><span>          data[offs] = (data[offs] & 0b11001111) | e_fbi_header;</span><br><span>           break;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      case GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_3:</span><br><span style="color: hsl(120, 100%, 40%);">+      case HEADER_EGPRS_DATA_TYPE_3:</span><br><span>               egprs3 = static_cast<struct gprs_rlc_dl_header_egprs_3 *></span><br><span>                      ((void *)data);</span><br><span> </span><br><span>diff --git a/src/gprs_bssgp_pcu.cpp b/src/gprs_bssgp_pcu.cpp</span><br><span>index f63fac3..7ac5ab1 100644</span><br><span>--- a/src/gprs_bssgp_pcu.cpp</span><br><span>+++ b/src/gprs_bssgp_pcu.cpp</span><br><span>@@ -26,6 +26,7 @@</span><br><span> #include <tbf.h></span><br><span> #include <gprs_coding_scheme.h></span><br><span> #include <pdch.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include "coding_scheme.h"</span><br><span> </span><br><span> #define BSSGP_TIMER_T1  30      /* Guards the (un)blocking procedures */</span><br><span> #define BSSGP_TIMER_T2      30      /* Guards the reset procedure */</span><br><span>@@ -607,7 +608,7 @@</span><br><span> </span><br><span> static uint32_t gprs_bssgp_max_leak_rate(GprsCodingScheme cs, int num_pdch)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  int bytes_per_rlc_block = cs.maxDataBlockBytes() * cs.numDataBlocks();</span><br><span style="color: hsl(120, 100%, 40%);">+        int bytes_per_rlc_block = cs.maxDataBlockBytes() * num_data_blocks(cs.headerTypeData());</span><br><span> </span><br><span>         /* n byte payload per 20ms */</span><br><span>        return bytes_per_rlc_block * (1000 / 20) * num_pdch;</span><br><span>diff --git a/src/gprs_coding_scheme.cpp b/src/gprs_coding_scheme.cpp</span><br><span>index c0955d3..0616a49 100644</span><br><span>--- a/src/gprs_coding_scheme.cpp</span><br><span>+++ b/src/gprs_coding_scheme.cpp</span><br><span>@@ -82,55 +82,39 @@</span><br><span>      uint8_t data_bytes;</span><br><span>  uint8_t optional_padding_bits;</span><br><span>       const char *name;</span><br><span style="color: hsl(0, 100%, 40%);">-       GprsCodingScheme::HeaderType data_hdr;</span><br><span style="color: hsl(120, 100%, 40%);">+        enum HeaderType data_hdr;</span><br><span>    enum Family family;</span><br><span> } mcs_info[NUM_SCHEMES] = {</span><br><span>   {{0, 0},   {0, 0},    0,  0, "UNKNOWN",</span><br><span style="color: hsl(0, 100%, 40%);">-               GprsCodingScheme::HEADER_INVALID, FAMILY_INVALID},</span><br><span style="color: hsl(120, 100%, 40%);">+            HEADER_INVALID, FAMILY_INVALID},</span><br><span>     {{23, 0},  {23, 0},  20,  0, "CS-1",</span><br><span style="color: hsl(0, 100%, 40%);">-          GprsCodingScheme::HEADER_GPRS_DATA, FAMILY_INVALID},</span><br><span style="color: hsl(120, 100%, 40%);">+          HEADER_GPRS_DATA, FAMILY_INVALID},</span><br><span>   {{33, 7},  {33, 7},  30,  0, "CS-2",</span><br><span style="color: hsl(0, 100%, 40%);">-          GprsCodingScheme::HEADER_GPRS_DATA, FAMILY_INVALID},</span><br><span style="color: hsl(120, 100%, 40%);">+          HEADER_GPRS_DATA, FAMILY_INVALID},</span><br><span>   {{39, 3},  {39, 3},  36,  0, "CS-3",</span><br><span style="color: hsl(0, 100%, 40%);">-          GprsCodingScheme::HEADER_GPRS_DATA, FAMILY_INVALID},</span><br><span style="color: hsl(120, 100%, 40%);">+          HEADER_GPRS_DATA, FAMILY_INVALID},</span><br><span>   {{53, 7},  {53, 7},  50,  0, "CS-4",</span><br><span style="color: hsl(0, 100%, 40%);">-          GprsCodingScheme::HEADER_GPRS_DATA, FAMILY_INVALID},</span><br><span style="color: hsl(120, 100%, 40%);">+          HEADER_GPRS_DATA, FAMILY_INVALID},</span><br><span> </span><br><span>       {{26, 1},  {26, 1},  22,  0, "MCS-1",</span><br><span style="color: hsl(0, 100%, 40%);">-         GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_3, FAMILY_C},</span><br><span style="color: hsl(120, 100%, 40%);">+                HEADER_EGPRS_DATA_TYPE_3, FAMILY_C},</span><br><span>         {{32, 1},  {32, 1},  28,  0, "MCS-2",</span><br><span style="color: hsl(0, 100%, 40%);">-         GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_3, FAMILY_B},</span><br><span style="color: hsl(120, 100%, 40%);">+                HEADER_EGPRS_DATA_TYPE_3, FAMILY_B},</span><br><span>         {{41, 1},  {41, 1},  37, 48, "MCS-3",</span><br><span style="color: hsl(0, 100%, 40%);">-         GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_3, FAMILY_A},</span><br><span style="color: hsl(120, 100%, 40%);">+                HEADER_EGPRS_DATA_TYPE_3, FAMILY_A},</span><br><span>         {{48, 1},  {48, 1},  44,  0, "MCS-4",</span><br><span style="color: hsl(0, 100%, 40%);">-         GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_3, FAMILY_C},</span><br><span style="color: hsl(120, 100%, 40%);">+                HEADER_EGPRS_DATA_TYPE_3, FAMILY_C},</span><br><span> </span><br><span>     {{60, 7},  {59, 6},  56,  0, "MCS-5",</span><br><span style="color: hsl(0, 100%, 40%);">-         GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_2, FAMILY_B},</span><br><span style="color: hsl(120, 100%, 40%);">+                HEADER_EGPRS_DATA_TYPE_2, FAMILY_B},</span><br><span>         {{78, 7},  {77, 6},  74, 48, "MCS-6",</span><br><span style="color: hsl(0, 100%, 40%);">-         GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_2, FAMILY_A},</span><br><span style="color: hsl(120, 100%, 40%);">+                HEADER_EGPRS_DATA_TYPE_2, FAMILY_A},</span><br><span>         {{118, 2}, {117, 4}, 56,  0, "MCS-7",</span><br><span style="color: hsl(0, 100%, 40%);">-         GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_1, FAMILY_B},</span><br><span style="color: hsl(120, 100%, 40%);">+                HEADER_EGPRS_DATA_TYPE_1, FAMILY_B},</span><br><span>         {{142, 2}, {141, 4}, 68,  0, "MCS-8",</span><br><span style="color: hsl(0, 100%, 40%);">-         GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_1, FAMILY_A},</span><br><span style="color: hsl(120, 100%, 40%);">+                HEADER_EGPRS_DATA_TYPE_1, FAMILY_A},</span><br><span>         {{154, 2}, {153, 4}, 74,  0, "MCS-9",</span><br><span style="color: hsl(0, 100%, 40%);">-         GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_1, FAMILY_A},</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static struct {</span><br><span style="color: hsl(0, 100%, 40%);">- struct {</span><br><span style="color: hsl(0, 100%, 40%);">-                uint8_t data_header_bits;</span><br><span style="color: hsl(0, 100%, 40%);">-       } uplink, downlink;</span><br><span style="color: hsl(0, 100%, 40%);">-     uint8_t data_block_header_bits;</span><br><span style="color: hsl(0, 100%, 40%);">- uint8_t num_blocks;</span><br><span style="color: hsl(0, 100%, 40%);">-     const char *name;</span><br><span style="color: hsl(0, 100%, 40%);">-} hdr_type_info[GprsCodingScheme::NUM_HEADER_TYPES] = {</span><br><span style="color: hsl(0, 100%, 40%);">-        {{0},       {0},       0, 0, "INVALID"},</span><br><span style="color: hsl(0, 100%, 40%);">-      {{1*8 + 0}, {1*8 + 0}, 0, 0, "CONTROL"},</span><br><span style="color: hsl(0, 100%, 40%);">-      {{3*8 + 0}, {3*8 + 0}, 0, 1, "GPRS_DATA"},</span><br><span style="color: hsl(0, 100%, 40%);">-    {{5*8 + 6}, {5*8 + 0}, 2, 2, "EGPRS_DATA_TYPE1"},</span><br><span style="color: hsl(0, 100%, 40%);">-     {{4*8 + 5}, {3*8 + 4}, 2, 1, "EGPRS_DATA_TYPE2"},</span><br><span style="color: hsl(0, 100%, 40%);">-     {{3*8 + 7}, {3*8 + 7}, 2, 1, "EGPRS_DATA_TYPE3"},</span><br><span style="color: hsl(120, 100%, 40%);">+           HEADER_EGPRS_DATA_TYPE_1, FAMILY_A},</span><br><span> };</span><br><span> </span><br><span> GprsCodingScheme GprsCodingScheme::getBySizeUL(unsigned size)</span><br><span>@@ -210,32 +194,12 @@</span><br><span>      return mcs_info[m_scheme].optional_padding_bits;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-uint8_t GprsCodingScheme::numDataBlocks() const</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       return hdr_type_info[headerTypeData()].num_blocks;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-uint8_t GprsCodingScheme::numDataHeaderBitsUL() const</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       return hdr_type_info[headerTypeData()].uplink.data_header_bits;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-uint8_t GprsCodingScheme::numDataHeaderBitsDL() const</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-  return hdr_type_info[headerTypeData()].downlink.data_header_bits;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-uint8_t GprsCodingScheme::numDataBlockHeaderBits() const</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-     return hdr_type_info[headerTypeData()].data_block_header_bits;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> const char *GprsCodingScheme::name() const</span><br><span> {</span><br><span>   return mcs_info[m_scheme].name;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-GprsCodingScheme::HeaderType GprsCodingScheme::headerTypeData() const</span><br><span style="color: hsl(120, 100%, 40%);">+enum HeaderType GprsCodingScheme::headerTypeData() const</span><br><span> {</span><br><span>         return mcs_info[m_scheme].data_hdr;</span><br><span> }</span><br><span>diff --git a/src/gprs_coding_scheme.h b/src/gprs_coding_scheme.h</span><br><span>index 80f8502..56ee002 100644</span><br><span>--- a/src/gprs_coding_scheme.h</span><br><span>+++ b/src/gprs_coding_scheme.h</span><br><span>@@ -40,16 +40,6 @@</span><br><span>           EGPRS,</span><br><span>       };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  enum HeaderType {</span><br><span style="color: hsl(0, 100%, 40%);">-               HEADER_INVALID,</span><br><span style="color: hsl(0, 100%, 40%);">-         HEADER_GPRS_CONTROL,</span><br><span style="color: hsl(0, 100%, 40%);">-            HEADER_GPRS_DATA,</span><br><span style="color: hsl(0, 100%, 40%);">-               HEADER_EGPRS_DATA_TYPE_1,</span><br><span style="color: hsl(0, 100%, 40%);">-               HEADER_EGPRS_DATA_TYPE_2,</span><br><span style="color: hsl(0, 100%, 40%);">-               HEADER_EGPRS_DATA_TYPE_3,</span><br><span style="color: hsl(0, 100%, 40%);">-               NUM_HEADER_TYPES</span><br><span style="color: hsl(0, 100%, 40%);">-        };</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>   GprsCodingScheme(CodingScheme s = UNKNOWN);</span><br><span> </span><br><span>      operator bool() const {return m_scheme != UNKNOWN;}</span><br><span>@@ -83,13 +73,9 @@</span><br><span>     uint8_t spareBitsUL() const;</span><br><span>         uint8_t spareBitsDL() const;</span><br><span>         uint8_t maxDataBlockBytes() const;</span><br><span style="color: hsl(0, 100%, 40%);">-      uint8_t numDataBlocks() const;</span><br><span style="color: hsl(0, 100%, 40%);">-  uint8_t numDataHeaderBitsUL() const;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint8_t numDataHeaderBitsDL() const;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint8_t numDataBlockHeaderBits() const;</span><br><span>      uint8_t optionalPaddingBits() const;</span><br><span>         const char *name() const;</span><br><span style="color: hsl(0, 100%, 40%);">-       HeaderType headerTypeData() const;</span><br><span style="color: hsl(120, 100%, 40%);">+    enum HeaderType headerTypeData() const;</span><br><span> </span><br><span>  static GprsCodingScheme getBySizeUL(unsigned size);</span><br><span>  static GprsCodingScheme getGprsByNum(unsigned num);</span><br><span>diff --git a/src/rlc.cpp b/src/rlc.cpp</span><br><span>index 323fde4..e5067c9 100644</span><br><span>--- a/src/rlc.cpp</span><br><span>+++ b/src/rlc.cpp</span><br><span>@@ -336,7 +336,7 @@</span><br><span>   rlc->es_p = 0;</span><br><span>    rlc->rrbp = 0;</span><br><span>    rlc->pr = 0;</span><br><span style="color: hsl(0, 100%, 40%);">- rlc->num_data_blocks = cs.numDataBlocks();</span><br><span style="color: hsl(120, 100%, 40%);">+ rlc->num_data_blocks = num_data_blocks(cs.headerTypeData());</span><br><span>      rlc->with_padding = with_padding;</span><br><span> </span><br><span>     OSMO_ASSERT(rlc->num_data_blocks <= ARRAY_SIZE(rlc->block_info));</span><br><span>@@ -347,7 +347,7 @@</span><br><span> </span><br><span>                 rlc->data_offs_bits[i] =</span><br><span>                  header_bits + padding_bits +</span><br><span style="color: hsl(0, 100%, 40%);">-                    (i+1) * cs.numDataBlockHeaderBits() +</span><br><span style="color: hsl(120, 100%, 40%);">+                 (i+1) * num_data_block_header_bits(cs.headerTypeData()) +</span><br><span>                    i * 8 * rlc->block_info[0].data_len;</span><br><span>      }</span><br><span> }</span><br><span>@@ -356,7 +356,7 @@</span><br><span>         GprsCodingScheme cs, bool with_padding, const unsigned int spb)</span><br><span> {</span><br><span>         return gprs_rlc_data_header_init(rlc, cs, with_padding,</span><br><span style="color: hsl(0, 100%, 40%);">-         cs.numDataHeaderBitsDL(), spb);</span><br><span style="color: hsl(120, 100%, 40%);">+                                        num_data_header_bits_DL(cs.headerTypeData()), spb);</span><br><span> }</span><br><span> </span><br><span> void gprs_rlc_data_info_init_ul(struct gprs_rlc_data_info *rlc,</span><br><span>@@ -367,7 +367,7 @@</span><br><span>        * for both DL and UL</span><br><span>         */</span><br><span>  return gprs_rlc_data_header_init(rlc, cs, with_padding,</span><br><span style="color: hsl(0, 100%, 40%);">-         cs.numDataHeaderBitsUL(), 0);</span><br><span style="color: hsl(120, 100%, 40%);">+                                  num_data_header_bits_UL(cs.headerTypeData()), 0);</span><br><span> }</span><br><span> </span><br><span> void gprs_rlc_data_block_info_init(struct gprs_rlc_data_block_info *rdbi,</span><br><span>diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp</span><br><span>index 7b0052f..2f4781c 100644</span><br><span>--- a/src/tbf_dl.cpp</span><br><span>+++ b/src/tbf_dl.cpp</span><br><span>@@ -457,7 +457,7 @@</span><br><span>          bts->rlc_resent();</span><br><span>        }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   *may_combine = m_rlc.block(bsn)->cs_current_trans.numDataBlocks() > 1;</span><br><span style="color: hsl(120, 100%, 40%);">+  *may_combine = num_data_blocks(m_rlc.block(bsn)->cs_current_trans.headerTypeData()) > 1;</span><br><span> </span><br><span>   return bsn;</span><br><span> }</span><br><span>@@ -1259,7 +1259,7 @@</span><br><span>      * MCS4: second segment starts at 44/2 = 22</span><br><span>   */</span><br><span>  if (cs_current_trans.headerTypeData() ==</span><br><span style="color: hsl(0, 100%, 40%);">-                        GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_3) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 HEADER_EGPRS_DATA_TYPE_3) {</span><br><span>          if (*block_status_dl == EGPRS_RESEG_FIRST_SEG_SENT) {</span><br><span>                        switch (CodingScheme(cs_init)) {</span><br><span>                     case MCS6 :</span><br><span>@@ -1287,9 +1287,9 @@</span><br><span>                  }</span><br><span>                    return EGPRS_RESEG_SECOND_SEG_SENT;</span><br><span>          } else if ((cs_init.headerTypeData() ==</span><br><span style="color: hsl(0, 100%, 40%);">-                         GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_1) ||</span><br><span style="color: hsl(120, 100%, 40%);">+                                HEADER_EGPRS_DATA_TYPE_1) ||</span><br><span>                         (cs_init.headerTypeData() ==</span><br><span style="color: hsl(0, 100%, 40%);">-                            GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_2)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                HEADER_EGPRS_DATA_TYPE_2)) {</span><br><span>                         return EGPRS_RESEG_FIRST_SEG_SENT;</span><br><span>           } else if ((CodingScheme(cs_init) ==</span><br><span>                                         MCS4) &&</span><br><span>@@ -1327,7 +1327,7 @@</span><br><span> </span><br><span>         /* Table 10.4.8b.1 of 44.060 */</span><br><span>      if (cs_current_trans.headerTypeData() ==</span><br><span style="color: hsl(0, 100%, 40%);">-                        GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_3) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 HEADER_EGPRS_DATA_TYPE_3) {</span><br><span>  /*</span><br><span>    * if we are sending the second segment the spb should be 3</span><br><span>   * other wise it should be 2</span><br><span>@@ -1338,9 +1338,9 @@</span><br><span>                         bts->spb_downlink_second_segment();</span><br><span>                       return EGPRS_RLCMAC_DL_SEC_SEG;</span><br><span>              } else if ((cs_init.headerTypeData() ==</span><br><span style="color: hsl(0, 100%, 40%);">-                         GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_1) ||</span><br><span style="color: hsl(120, 100%, 40%);">+                                HEADER_EGPRS_DATA_TYPE_1) ||</span><br><span>                         (cs_init.headerTypeData() ==</span><br><span style="color: hsl(0, 100%, 40%);">-                            GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_2)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                HEADER_EGPRS_DATA_TYPE_2)) {</span><br><span>                         bts->spb_downlink_first_segment();</span><br><span>                        return EGPRS_RLCMAC_DL_FIRST_SEG;</span><br><span>            } else if ((CodingScheme(cs_init) ==</span><br><span>diff --git a/tests/edge/EdgeTest.cpp b/tests/edge/EdgeTest.cpp</span><br><span>index 9db90ca..23abada 100644</span><br><span>--- a/tests/edge/EdgeTest.cpp</span><br><span>+++ b/tests/edge/EdgeTest.cpp</span><br><span>@@ -71,8 +71,8 @@</span><br><span>    OSMO_ASSERT(expected_size == cs.sizeDL());</span><br><span> </span><br><span>       /* Check data block sizes */</span><br><span style="color: hsl(0, 100%, 40%);">-    OSMO_ASSERT(cs.maxDataBlockBytes() * cs.numDataBlocks() < cs.maxBytesDL());</span><br><span style="color: hsl(0, 100%, 40%);">-  OSMO_ASSERT(cs.maxDataBlockBytes() * cs.numDataBlocks() < cs.maxBytesUL());</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_ASSERT(cs.maxDataBlockBytes() * num_data_blocks(cs.headerTypeData()) < cs.maxBytesDL());</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(cs.maxDataBlockBytes() * num_data_blocks(cs.headerTypeData()) < cs.maxBytesUL());</span><br><span> </span><br><span>         /* Check inc/dec */</span><br><span>  new_cs = cs;</span><br><span>@@ -168,8 +168,7 @@</span><br><span>           last_size_DL = current_cs.maxBytesDL();</span><br><span> </span><br><span>          /* Check header types */</span><br><span style="color: hsl(0, 100%, 40%);">-                OSMO_ASSERT(current_cs.headerTypeData() ==</span><br><span style="color: hsl(0, 100%, 40%);">-                      GprsCodingScheme::HEADER_GPRS_DATA);</span><br><span style="color: hsl(120, 100%, 40%);">+          OSMO_ASSERT(current_cs.headerTypeData() == HEADER_GPRS_DATA);</span><br><span> </span><br><span>            check_coding_scheme(current_cs, GprsCodingScheme::GPRS);</span><br><span>     }</span><br><span>@@ -1099,7 +1098,7 @@</span><br><span>                    test_block[cs.maxDataBlockBytes()-1] = pattern ^ 0xff;</span><br><span> </span><br><span>                   for (block_idx = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-                             block_idx < cs.numDataBlocks();</span><br><span style="color: hsl(120, 100%, 40%);">+                            block_idx < num_data_blocks(cs.headerTypeData());</span><br><span>                                 block_idx++)</span><br><span>                         {</span><br><span>                            struct gprs_rlc_data_info rlc;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/13067">change 13067</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/13067"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-pcu </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: Id0873f85e1f16a72e17e7fbc4ad76b194917067f </div>
<div style="display:none"> Gerrit-Change-Number: 13067 </div>
<div style="display:none"> Gerrit-PatchSet: 8 </div>
<div style="display:none"> Gerrit-Owner: Max <msuraev@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Daniel Willmann <dwillmann@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: Max <msuraev@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Pau Espin Pedrol <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: osmith <osmith@sysmocom.de> </div>