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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Convert gprs_bssgp_pcu.cpp to C<br><br>There's no real use of C++ in that file, and it causes problems when<br>using llist_head entry macros in future patches adding initial support<br>for multiple BTS in PCU object, so let's move it to plain C.<br><br>Change-Id: Ic771a89fd78b5e66151a5384f0ff6a8895589466<br>---<br>M src/Makefile.am<br>M src/decoding.cpp<br>M src/decoding.h<br>R src/gprs_bssgp_pcu.c<br>M src/gprs_bssgp_pcu.h<br>M src/gprs_rlcmac.h<br>M src/pdch.cpp<br>M src/rlc.h<br>M src/tbf_dl.cpp<br>M src/tbf_dl.h<br>M tests/rlcmac/RLCMACTest.cpp<br>M tests/tbf/TbfTest.cpp<br>12 files changed, 91 insertions(+), 59 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/Makefile.am b/src/Makefile.am</span><br><span>index 05fac55..60f05a5 100644</span><br><span>--- a/src/Makefile.am</span><br><span>+++ b/src/Makefile.am</span><br><span>@@ -42,7 +42,7 @@</span><br><span>   gprs_debug.cpp \</span><br><span>     csn1.c \</span><br><span>     gsm_rlcmac.c \</span><br><span style="color: hsl(0, 100%, 40%);">-  gprs_bssgp_pcu.cpp \</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs_bssgp_pcu.c \</span><br><span>   gprs_rlcmac.cpp \</span><br><span>    gprs_rlcmac_sched.cpp \</span><br><span>      gprs_rlcmac_meas.cpp \</span><br><span>diff --git a/src/decoding.cpp b/src/decoding.cpp</span><br><span>index 0437994..e40496d 100644</span><br><span>--- a/src/decoding.cpp</span><br><span>+++ b/src/decoding.cpp</span><br><span>@@ -291,7 +291,7 @@</span><br><span>    return num_chunks;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-uint8_t Decoding::get_ms_class_by_capability(MS_Radio_Access_capability_t *cap)</span><br><span style="color: hsl(120, 100%, 40%);">+uint8_t get_ms_class_by_capability(MS_Radio_Access_capability_t *cap)</span><br><span> {</span><br><span>       int i;</span><br><span> </span><br><span>@@ -306,7 +306,7 @@</span><br><span>     return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-uint8_t Decoding::get_egprs_ms_class_by_capability(MS_Radio_Access_capability_t *cap)</span><br><span style="color: hsl(120, 100%, 40%);">+uint8_t get_egprs_ms_class_by_capability(MS_Radio_Access_capability_t *cap)</span><br><span> {</span><br><span>    int i;</span><br><span> </span><br><span>diff --git a/src/decoding.h b/src/decoding.h</span><br><span>index 23d3e17..28af3c4 100644</span><br><span>--- a/src/decoding.h</span><br><span>+++ b/src/decoding.h</span><br><span>@@ -19,16 +19,23 @@</span><br><span>  */</span><br><span> #pragma once</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef __cplusplus</span><br><span> extern "C" {</span><br><span style="color: hsl(0, 100%, 40%);">-#include "gsm_rlcmac.h"</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#include "rlc.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "gsm_rlcmac.h"</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%);">+#ifdef __cplusplus</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span> </span><br><span> #include <stdint.h></span><br><span> </span><br><span> struct bitvec;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef __cplusplus</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> class Decoding {</span><br><span> public:</span><br><span>     /* represents (parts) LLC PDUs within one RLC Data block */</span><br><span>@@ -42,8 +49,6 @@</span><br><span>              const struct gprs_rlc_data_block_info *rdbi,</span><br><span>                 enum CodingScheme cs, const uint8_t *data, RlcData *chunks,</span><br><span>          unsigned int chunks_size, uint32_t *tlli);</span><br><span style="color: hsl(0, 100%, 40%);">-      static uint8_t get_ms_class_by_capability(MS_Radio_Access_capability_t *cap);</span><br><span style="color: hsl(0, 100%, 40%);">-   static uint8_t get_egprs_ms_class_by_capability(MS_Radio_Access_capability_t *cap);</span><br><span> </span><br><span>      static void extract_rbb(const uint8_t *rbb, char *extracted_rbb);</span><br><span>    static void extract_rbb(const struct bitvec *rbb, char *show_rbb);</span><br><span>@@ -82,3 +87,16 @@</span><br><span>              bitvec *bits, int *bsn_begin, int *bsn_end,</span><br><span>          gprs_rlc_dl_window *window);</span><br><span> };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#endif /* #ifdef __cplusplus */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef __cplusplus</span><br><span style="color: hsl(120, 100%, 40%);">+extern "C" {</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+uint8_t get_ms_class_by_capability(MS_Radio_Access_capability_t *cap);</span><br><span style="color: hsl(120, 100%, 40%);">+uint8_t get_egprs_ms_class_by_capability(MS_Radio_Access_capability_t *cap);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef __cplusplus</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span>diff --git a/src/gprs_bssgp_pcu.cpp b/src/gprs_bssgp_pcu.c</span><br><span>similarity index 97%</span><br><span>rename from src/gprs_bssgp_pcu.cpp</span><br><span>rename to src/gprs_bssgp_pcu.c</span><br><span>index 997cb1b..288bc45 100644</span><br><span>--- a/src/gprs_bssgp_pcu.cpp</span><br><span>+++ b/src/gprs_bssgp_pcu.c</span><br><span>@@ -28,14 +28,15 @@</span><br><span> #include <pdch.h></span><br><span> #include <decoding.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-extern "C" {</span><br><span style="color: hsl(0, 100%, 40%);">-    #include <osmocom/gsm/protocol/gsm_23_003.h></span><br><span style="color: hsl(0, 100%, 40%);">-      #include <osmocom/gprs/protocol/gsm_08_16.h></span><br><span style="color: hsl(0, 100%, 40%);">-      #include <osmocom/core/utils.h></span><br><span style="color: hsl(0, 100%, 40%);">-   #include <osmocom/gsm/gsm48.h></span><br><span style="color: hsl(0, 100%, 40%);">-    #include "coding_scheme.h"</span><br><span style="color: hsl(0, 100%, 40%);">-    #include "tbf_dl.h"</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gprs/gprs_ns2.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/protocol/gsm_23_003.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gprs/protocol/gsm_08_16.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/utils.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/gsm48.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include "coding_scheme.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "tbf_dl.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "llc.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "gprs_rlcmac.h"</span><br><span> </span><br><span> /* Tuning parameters for BSSGP flow control */</span><br><span> #define FC_DEFAULT_LIFE_TIME_SECS 10                /* experimental value, 10s */</span><br><span>@@ -55,7 +56,7 @@</span><br><span> </span><br><span> static int parse_ra_cap(struct tlv_parsed *tp, MS_Radio_Access_capability_t *rac)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- bitvec *block;</span><br><span style="color: hsl(120, 100%, 40%);">+        struct bitvec *block;</span><br><span>        uint8_t cap_len;</span><br><span>     uint8_t *cap;</span><br><span> </span><br><span>@@ -132,9 +133,8 @@</span><br><span>      /* parse ms radio access capability */</span><br><span>       if (parse_ra_cap(tp, &rac) >= 0) {</span><br><span>            /* Get the EGPRS class from the RA capability */</span><br><span style="color: hsl(0, 100%, 40%);">-                ms_class = Decoding::get_ms_class_by_capability(&rac);</span><br><span style="color: hsl(0, 100%, 40%);">-              egprs_ms_class =</span><br><span style="color: hsl(0, 100%, 40%);">-                        Decoding::get_egprs_ms_class_by_capability(&rac);</span><br><span style="color: hsl(120, 100%, 40%);">+         ms_class = get_ms_class_by_capability(&rac);</span><br><span style="color: hsl(120, 100%, 40%);">+              egprs_ms_class = get_egprs_ms_class_by_capability(&rac);</span><br><span>                 LOGP(DBSSGP, LOGL_DEBUG, "Got downlink MS class %d/%d\n",</span><br><span>                  ms_class, egprs_ms_class);</span><br><span>   }</span><br><span>@@ -166,7 +166,7 @@</span><br><span> </span><br><span>  LOGP(DBSSGP, LOGL_INFO, "LLC [SGSN -> PCU] = TLLI: 0x%08x IMSI: %s len: %d\n", tlli, mi_imsi.imsi, len);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       return gprs_rlcmac_dl_tbf::handle(the_pcu->bssgp.bts, tlli, tlli_old, mi_imsi.imsi,</span><br><span style="color: hsl(120, 100%, 40%);">+        return dl_tbf_handle(the_pcu->bssgp.bts, tlli, tlli_old, mi_imsi.imsi,</span><br><span>                    ms_class, egprs_ms_class, delay_csec, data, len);</span><br><span> }</span><br><span> </span><br><span>@@ -620,7 +620,7 @@</span><br><span>             LOGP(DPCU, LOGL_DEBUG,</span><br><span>                    "NS: %s Unknown prim %s / %d from NS\n",</span><br><span>                   get_value_string(osmo_prim_op_names, oph->operation),</span><br><span style="color: hsl(0, 100%, 40%);">-                gprs_ns2_prim_str((gprs_ns2_prim) oph->primitive), oph->primitive);</span><br><span style="color: hsl(120, 100%, 40%);">+                     gprs_ns2_prim_str((enum gprs_ns2_prim) oph->primitive), oph->primitive);</span><br><span>          break;</span><br><span>       }</span><br><span> </span><br><span>@@ -654,7 +654,7 @@</span><br><span>          for (ts_no = 0; ts_no < ARRAY_SIZE(trx->pdch); ++ts_no) {</span><br><span>                      const struct gprs_rlcmac_pdch *pdch = &trx->pdch[ts_no];</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                     if (pdch->is_enabled())</span><br><span style="color: hsl(120, 100%, 40%);">+                    if (pdch->m_is_enabled)</span><br><span>                           num_pdch += 1;</span><br><span>               }</span><br><span>    }</span><br><span>@@ -853,7 +853,7 @@</span><br><span> </span><br><span>  if (ms_leak_rate == 0) {</span><br><span>             int ms_num_pdch;</span><br><span style="color: hsl(0, 100%, 40%);">-                int max_pdch = gprs_alloc_max_dl_slots_per_ms(bts);</span><br><span style="color: hsl(120, 100%, 40%);">+           int max_pdch = gprs_alloc_max_dl_slots_per_ms(bts, 0);</span><br><span> </span><br><span>           if (num_pdch < 0)</span><br><span>                         num_pdch = count_pdch(bts);</span><br><span>@@ -1029,8 +1029,9 @@</span><br><span> static int ns_conf_vc_cb(struct gprs_ns2_vc *nsvc, void *ctx)</span><br><span> {</span><br><span>    struct nsvc_cb *data = (struct nsvc_cb *) ctx;</span><br><span style="color: hsl(120, 100%, 40%);">+        unsigned int i;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     for (unsigned int i = 0; i < PCU_IF_NUM_NSVC; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+       for (i = 0; i < PCU_IF_NUM_NSVC; i++) {</span><br><span>           if (!(data->valid & (1 << i)))</span><br><span>                  continue;</span><br><span>            if (data->found & (1 << i))</span><br><span>@@ -1070,7 +1071,8 @@</span><br><span>     } else if (the_pcu->vty.ns_dialect == NS2_DIALECT_SNS) {</span><br><span>          /* SNS: check if the initial nsvc is the same, if not recreate it */</span><br><span>                 const struct osmo_sockaddr *initial = gprs_ns2_nse_sns_remote(bts->nse);</span><br><span style="color: hsl(0, 100%, 40%);">-             for (unsigned int i = 0; i < PCU_IF_NUM_NSVC; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+               unsigned int i;</span><br><span style="color: hsl(120, 100%, 40%);">+               for (i = 0; i < PCU_IF_NUM_NSVC; i++) {</span><br><span>                   if (!(valid & (1 << i)))</span><br><span>                           continue;</span><br><span> </span><br><span>diff --git a/src/gprs_bssgp_pcu.h b/src/gprs_bssgp_pcu.h</span><br><span>index 080893f..df22541 100644</span><br><span>--- a/src/gprs_bssgp_pcu.h</span><br><span>+++ b/src/gprs_bssgp_pcu.h</span><br><span>@@ -21,7 +21,6 @@</span><br><span> #ifndef GPRS_BSSGP_PCU_H</span><br><span> #define GPRS_BSSGP_PCU_H</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> #ifdef __cplusplus</span><br><span> extern "C" {</span><br><span> #endif</span><br><span>@@ -40,6 +39,7 @@</span><br><span> #include <gprs_debug.h></span><br><span> </span><br><span> #include <time.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <unistd.h></span><br><span> </span><br><span> #define QOS_PROFILE 4</span><br><span> #define BSSGP_HDR_LEN 53</span><br><span>diff --git a/src/gprs_rlcmac.h b/src/gprs_rlcmac.h</span><br><span>index d779d08..a5d1d30 100644</span><br><span>--- a/src/gprs_rlcmac.h</span><br><span>+++ b/src/gprs_rlcmac.h</span><br><span>@@ -22,16 +22,20 @@</span><br><span> #define GPRS_RLCMAC_H</span><br><span> </span><br><span> #include <stdbool.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdint.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#ifdef __cplusplus</span><br><span> #include <pcu_l1_if.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef __cplusplus</span><br><span> extern "C" {</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span> #include <osmocom/core/linuxlist.h></span><br><span> #include <osmocom/core/timer.h></span><br><span> #include <osmocom/core/bitvec.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/gsm48.h></span><br><span> #include <osmocom/pcu/pcuif_proto.h></span><br><span> #include "gsm_rlcmac.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef __cplusplus</span><br><span> }</span><br><span> #endif</span><br><span> </span><br><span>@@ -92,17 +96,12 @@</span><br><span> </span><br><span> int gprs_rlcmac_tx_ul_ud(gprs_rlcmac_tbf *tbf);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int gprs_rlcmac_paging_request(const struct osmo_mobile_identity *mi, uint16_t pgroup);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> struct msgb *gprs_rlcmac_app_info_msg(const struct gsm_pcu_if_app_info_req *req);</span><br><span> </span><br><span> int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_bts *bts,</span><br><span>     uint8_t trx, uint8_t ts,</span><br><span>         uint32_t fn, uint8_t block_nr);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int gprs_alloc_max_dl_slots_per_ms(const struct gprs_rlcmac_bts *bts,</span><br><span style="color: hsl(0, 100%, 40%);">-    uint8_t ms_class = 0);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> extern "C" {</span><br><span> #endif</span><br><span> int alloc_algorithm_a(struct gprs_rlcmac_bts *bts, struct GprsMs *ms, struct gprs_rlcmac_tbf *tbf, bool single,</span><br><span>@@ -113,8 +112,12 @@</span><br><span> </span><br><span> int alloc_algorithm_dynamic(struct gprs_rlcmac_bts *bts, struct GprsMs *ms, struct gprs_rlcmac_tbf *tbf, bool single,</span><br><span>                        int8_t use_trx);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int gprs_rlcmac_paging_request(const struct osmo_mobile_identity *mi, uint16_t pgroup);</span><br><span style="color: hsl(120, 100%, 40%);">+int gprs_alloc_max_dl_slots_per_ms(const struct gprs_rlcmac_bts *bts, uint8_t ms_class);</span><br><span> #ifdef __cplusplus</span><br><span> }</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #endif // GPRS_RLCMAC_H</span><br><span>diff --git a/src/pdch.cpp b/src/pdch.cpp</span><br><span>index 9dd4072..c48c63f 100644</span><br><span>--- a/src/pdch.cpp</span><br><span>+++ b/src/pdch.cpp</span><br><span>@@ -596,8 +596,8 @@</span><br><span> </span><br><span>               if (request->Exist_MS_Radio_Access_capability2) {</span><br><span>                         uint8_t ms_class, egprs_ms_class;</span><br><span style="color: hsl(0, 100%, 40%);">-                       ms_class = Decoding::get_ms_class_by_capability(&request->MS_Radio_Access_capability2);</span><br><span style="color: hsl(0, 100%, 40%);">-                  egprs_ms_class = Decoding::get_egprs_ms_class_by_capability(&request->MS_Radio_Access_capability2);</span><br><span style="color: hsl(120, 100%, 40%);">+                    ms_class = get_ms_class_by_capability(&request->MS_Radio_Access_capability2);</span><br><span style="color: hsl(120, 100%, 40%);">+                  egprs_ms_class = get_egprs_ms_class_by_capability(&request->MS_Radio_Access_capability2);</span><br><span>                     if (ms_class)</span><br><span>                                ms_set_ms_class(ms, ms_class);</span><br><span>                       if (egprs_ms_class)</span><br><span>diff --git a/src/rlc.h b/src/rlc.h</span><br><span>index eb79430..187a70e 100644</span><br><span>--- a/src/rlc.h</span><br><span>+++ b/src/rlc.h</span><br><span>@@ -18,13 +18,17 @@</span><br><span>  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.</span><br><span>  */</span><br><span> #pragma once</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef __cplusplus</span><br><span> extern "C" {</span><br><span style="color: hsl(0, 100%, 40%);">-#include "coding_scheme.h"</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include "coding_scheme.h"</span><br><span> #include <osmocom/core/endian.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef __cplusplus</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #include <stdint.h></span><br><span> #include <string.h></span><br><span> </span><br><span>diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp</span><br><span>index 962c31d..87c897f 100644</span><br><span>--- a/src/tbf_dl.cpp</span><br><span>+++ b/src/tbf_dl.cpp</span><br><span>@@ -278,11 +278,11 @@</span><br><span> /**</span><br><span>  * TODO: split into unit test-able parts...</span><br><span>  */</span><br><span style="color: hsl(0, 100%, 40%);">-int gprs_rlcmac_dl_tbf::handle(struct gprs_rlcmac_bts *bts,</span><br><span style="color: hsl(0, 100%, 40%);">-              const uint32_t tlli, const uint32_t tlli_old, const char *imsi,</span><br><span style="color: hsl(0, 100%, 40%);">-         uint8_t ms_class, uint8_t egprs_ms_class,</span><br><span style="color: hsl(0, 100%, 40%);">-               const uint16_t delay_csec,</span><br><span style="color: hsl(0, 100%, 40%);">-              const uint8_t *data, const uint16_t len)</span><br><span style="color: hsl(120, 100%, 40%);">+int dl_tbf_handle(struct gprs_rlcmac_bts *bts,</span><br><span style="color: hsl(120, 100%, 40%);">+                const uint32_t tlli, const uint32_t tlli_old, const char *imsi,</span><br><span style="color: hsl(120, 100%, 40%);">+               uint8_t ms_class, uint8_t egprs_ms_class,</span><br><span style="color: hsl(120, 100%, 40%);">+             const uint16_t delay_csec,</span><br><span style="color: hsl(120, 100%, 40%);">+            const uint8_t *data, const uint16_t len)</span><br><span> {</span><br><span>      struct gprs_rlcmac_dl_tbf *dl_tbf = NULL;</span><br><span>    int rc;</span><br><span>diff --git a/src/tbf_dl.h b/src/tbf_dl.h</span><br><span>index e29bb3f..58d863b 100644</span><br><span>--- a/src/tbf_dl.h</span><br><span>+++ b/src/tbf_dl.h</span><br><span>@@ -23,6 +23,8 @@</span><br><span> </span><br><span> #include "tbf.h"</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdint.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*</span><br><span>  * TBF instance</span><br><span>  */</span><br><span>@@ -42,12 +44,6 @@</span><br><span>     gprs_rlcmac_dl_tbf(struct gprs_rlcmac_bts *bts, GprsMs *ms);</span><br><span>         gprs_rlc_window *window();</span><br><span>   void cleanup();</span><br><span style="color: hsl(0, 100%, 40%);">- /* dispatch Unitdata.DL messages */</span><br><span style="color: hsl(0, 100%, 40%);">-     static int handle(struct gprs_rlcmac_bts *bts,</span><br><span style="color: hsl(0, 100%, 40%);">-          const uint32_t tlli, const uint32_t old_tlli,</span><br><span style="color: hsl(0, 100%, 40%);">-           const char *imsi, const uint8_t ms_class,</span><br><span style="color: hsl(0, 100%, 40%);">-               const uint8_t egprs_ms_class, const uint16_t delay_csec,</span><br><span style="color: hsl(0, 100%, 40%);">-                const uint8_t *data, const uint16_t len);</span><br><span> </span><br><span>        int append_data(uint16_t pdu_delay_csec,</span><br><span>                     const uint8_t *data, uint16_t len);</span><br><span>@@ -151,7 +147,16 @@</span><br><span> #ifdef __cplusplus</span><br><span> extern "C" {</span><br><span> #endif</span><br><span style="color: hsl(120, 100%, 40%);">+struct gprs_rlcmac_bts;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> struct gprs_rlcmac_dl_tbf *as_dl_tbf(struct gprs_rlcmac_tbf *tbf);</span><br><span style="color: hsl(120, 100%, 40%);">+/* dispatch Unitdata.DL messages */</span><br><span style="color: hsl(120, 100%, 40%);">+int dl_tbf_handle(struct gprs_rlcmac_bts *bts,</span><br><span style="color: hsl(120, 100%, 40%);">+              const uint32_t tlli, const uint32_t old_tlli,</span><br><span style="color: hsl(120, 100%, 40%);">+                 const char *imsi, const uint8_t ms_class,</span><br><span style="color: hsl(120, 100%, 40%);">+             const uint8_t egprs_ms_class, const uint16_t delay_csec,</span><br><span style="color: hsl(120, 100%, 40%);">+              const uint8_t *data, const uint16_t len);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #ifdef __cplusplus</span><br><span> }</span><br><span> #endif</span><br><span>diff --git a/tests/rlcmac/RLCMACTest.cpp b/tests/rlcmac/RLCMACTest.cpp</span><br><span>index 140b2f2..c6ad192 100644</span><br><span>--- a/tests/rlcmac/RLCMACTest.cpp</span><br><span>+++ b/tests/rlcmac/RLCMACTest.cpp</span><br><span>@@ -259,8 +259,8 @@</span><br><span>         OSMO_ASSERT(data.Count_MS_RA_capability_value == 1);</span><br><span> </span><br><span>         /* Make sure GPRS / EGPRS multislot class is parsed correctly */</span><br><span style="color: hsl(0, 100%, 40%);">-        printf("GPRS multislot class = %u\n", Decoding::get_ms_class_by_capability(&data));</span><br><span style="color: hsl(0, 100%, 40%);">-        printf("EGPRS multislot class = %u\n", Decoding::get_egprs_ms_class_by_capability(&data));</span><br><span style="color: hsl(120, 100%, 40%);">+        printf("GPRS multislot class = %u\n", get_ms_class_by_capability(&data));</span><br><span style="color: hsl(120, 100%, 40%);">+        printf("EGPRS multislot class = %u\n", get_egprs_ms_class_by_capability(&data));</span><br><span> </span><br><span>         /* Test encoding of decoded MS RA Capability */</span><br><span>         printf("=== Test encoding of MS RA Capability ===\n");</span><br><span>@@ -466,8 +466,8 @@</span><br><span>         OSMO_ASSERT(data.Count_MS_RA_capability_value == 3);</span><br><span> </span><br><span>     /* Make sure GPRS / EGPRS multislot class is parsed correctly */</span><br><span style="color: hsl(0, 100%, 40%);">-        printf("GPRS multislot class = %u\n", Decoding::get_ms_class_by_capability(&data));</span><br><span style="color: hsl(0, 100%, 40%);">-       printf("EGPRS multislot class = %u\n", Decoding::get_egprs_ms_class_by_capability(&data));</span><br><span style="color: hsl(120, 100%, 40%);">+      printf("GPRS multislot class = %u\n", get_ms_class_by_capability(&data));</span><br><span style="color: hsl(120, 100%, 40%);">+       printf("EGPRS multislot class = %u\n", get_egprs_ms_class_by_capability(&data));</span><br><span> </span><br><span>   bitvec_free(bv_dec);</span><br><span> }</span><br><span>diff --git a/tests/tbf/TbfTest.cpp b/tests/tbf/TbfTest.cpp</span><br><span>index ef26862..fbcb503 100644</span><br><span>--- a/tests/tbf/TbfTest.cpp</span><br><span>+++ b/tests/tbf/TbfTest.cpp</span><br><span>@@ -500,7 +500,7 @@</span><br><span> </span><br><span>                 snprintf(imsi, sizeof(imsi), "001001%09d", i);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            rc = gprs_rlcmac_dl_tbf::handle(bts, tlli, 0, imsi, ms_class, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+              rc = dl_tbf_handle(bts, tlli, 0, imsi, ms_class, 0,</span><br><span>                  delay_csec, buf, sizeof(buf));</span><br><span> </span><br><span>           if (rc < 0)</span><br><span>@@ -545,7 +545,7 @@</span><br><span> </span><br><span>     /* Handle LLC frame 1 */</span><br><span>     memset(buf, 1, sizeof(buf));</span><br><span style="color: hsl(0, 100%, 40%);">-    rc = gprs_rlcmac_dl_tbf::handle(bts, tlli, 0, imsi, ms_class, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+      rc = dl_tbf_handle(bts, tlli, 0, imsi, ms_class, 0,</span><br><span>          delay_csec, buf, sizeof(buf));</span><br><span>       OSMO_ASSERT(rc >= 0);</span><br><span> </span><br><span>@@ -556,7 +556,7 @@</span><br><span> </span><br><span>       /* Handle LLC frame 2 */</span><br><span>     memset(buf, 2, sizeof(buf));</span><br><span style="color: hsl(0, 100%, 40%);">-    rc = gprs_rlcmac_dl_tbf::handle(bts, tlli, 0, imsi, ms_class, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+      rc = dl_tbf_handle(bts, tlli, 0, imsi, ms_class, 0,</span><br><span>          delay_csec, buf, sizeof(buf));</span><br><span>       OSMO_ASSERT(rc >= 0);</span><br><span> </span><br><span>@@ -565,7 +565,7 @@</span><br><span> </span><br><span>       /* Handle LLC frame 3 */</span><br><span>     memset(buf, 3, sizeof(buf));</span><br><span style="color: hsl(0, 100%, 40%);">-    rc = gprs_rlcmac_dl_tbf::handle(bts, tlli, 0, imsi, ms_class, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+      rc = dl_tbf_handle(bts, tlli, 0, imsi, ms_class, 0,</span><br><span>          delay_csec, buf, sizeof(buf));</span><br><span>       OSMO_ASSERT(rc >= 0);</span><br><span> </span><br><span>@@ -1651,7 +1651,7 @@</span><br><span> </span><br><span>     ms = bts_ms_store(bts)->get_ms(tlli, 0, imsi);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   gprs_rlcmac_dl_tbf::handle(bts, tlli, 0, imsi, 0, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+  dl_tbf_handle(bts, tlli, 0, imsi, 0, 0,</span><br><span>              1000, data, data_size);</span><br><span> </span><br><span>  ms = bts_ms_by_imsi(bts, imsi);</span><br><span>@@ -2206,7 +2206,7 @@</span><br><span>      gprs_bssgp_init(bts, 3234, 3234, 1, 1, false, 0, 0, 0);</span><br><span> </span><br><span>  /* Does not support EGPRS */</span><br><span style="color: hsl(0, 100%, 40%);">-    rc = gprs_rlcmac_dl_tbf::handle(bts, tlli, 0, imsi, ms_class, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+      rc = dl_tbf_handle(bts, tlli, 0, imsi, ms_class, 0,</span><br><span>          delay_csec, buf, sizeof(buf));</span><br><span> </span><br><span>   OSMO_ASSERT(rc == 0);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/22295">change 22295</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-pcu/+/22295"/><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-Change-Id: Ic771a89fd78b5e66151a5384f0ff6a8895589466 </div>
<div style="display:none"> Gerrit-Change-Number: 22295 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>