Hello Harald Welte, Jenkins Builder,

I'd like you to reexamine a change.  Please visit

    https://gerrit.osmocom.org/3807

to look at the new patch set (#3).

Simplify TS alloc: adjust function signatures

* drop unused parameters (from both functions and structs)
* document used parameters and return values
* tighten types used for parameters
* use consistent formatting
* constify function parameters where appropriate

Tests are adjusted accordingly but test results are left untouched to
avoid regressions.

Change-Id: I39d81ab64ff790b9c4c2d0312a574485cd83e755
Related: OS#2400
---
M src/bts.cpp
M src/bts.h
M src/gprs_rlcmac.h
M src/gprs_rlcmac_ts_alloc.cpp
M src/tbf.cpp
M src/tbf.h
M src/tbf_dl.cpp
M tests/alloc/AllocTest.cpp
M tests/tbf/TbfTest.cpp
9 files changed, 146 insertions(+), 145 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/07/3807/3

diff --git a/src/bts.cpp b/src/bts.cpp
index b768569..0046238 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -439,10 +439,9 @@
  * a TRX. The first TRX that contains such an TFI is returned. Negative values
  * indicate errors.
  */
-int BTS::tfi_find_free(enum gprs_rlcmac_tbf_direction dir,
-               uint8_t *_trx, int8_t use_trx)
+int BTS::tfi_find_free(enum gprs_rlcmac_tbf_direction dir, uint8_t *_trx, 
int8_t use_trx) const
 {
-       struct gprs_rlcmac_pdch *pdch;
+       const struct gprs_rlcmac_pdch *pdch;
        uint32_t free_tfis;
        bool has_pdch = false;
        uint8_t trx_from, trx_to, trx, ts, tfi;
@@ -652,12 +651,11 @@
                /* FIXME: Copy and paste with other routines.. */
 
                if (is_11bit) {
-                       tbf = tbf_alloc_ul_tbf(&m_bts, NULL, -1, 0,
-                               ms_class, 1);
+                       tbf = tbf_alloc_ul_tbf(&m_bts, NULL, -1, 0, ms_class, 
true);
                } else {
                        /* set class to 0, since we don't know the multislot
                         * class yet */
-                       tbf = tbf_alloc_ul_tbf(&m_bts, NULL, -1, 0, 0, 1);
+                       tbf = tbf_alloc_ul_tbf(&m_bts, NULL, -1, 0, 0, true);
                }
 
                if (!tbf) {
diff --git a/src/bts.h b/src/bts.h
index d65cd2f..b3a8027 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -204,11 +204,9 @@
        struct gsmtap_inst *gsmtap;
        uint32_t gsmtap_categ_mask;
        struct gprs_rlcmac_trx trx[8];
-       int (*alloc_algorithm)(struct gprs_rlcmac_bts *bts,
-               struct GprsMs *ms,
-               struct gprs_rlcmac_tbf *tbf, uint32_t cust, uint8_t single,
-               int use_tbf);
-       uint32_t alloc_algorithm_curst; /* options to customize algorithm */
+       int (*alloc_algorithm)(struct gprs_rlcmac_bts *bts, struct GprsMs *ms, 
struct gprs_rlcmac_tbf *tbf,
+                              bool single, int8_t use_tbf);
+
        uint8_t force_two_phase;
        uint8_t alpha, gamma;
        uint8_t egprs_enabled;
@@ -366,7 +364,7 @@
        gprs_rlcmac_dl_tbf *dl_tbf_by_tfi(uint8_t tfi, uint8_t trx, uint8_t ts);
        gprs_rlcmac_ul_tbf *ul_tbf_by_tfi(uint8_t tfi, uint8_t trx, uint8_t ts);
 
-       int tfi_find_free(enum gprs_rlcmac_tbf_direction dir, uint8_t *_trx, 
int8_t use_trx);
+       int tfi_find_free(enum gprs_rlcmac_tbf_direction dir, uint8_t *_trx, 
int8_t use_trx) const;
 
        int rcv_imm_ass_cnf(const uint8_t *data, uint32_t fn);
        uint8_t is_single_block(uint16_t ra, enum ph_burst_type burst_type,
diff --git a/src/gprs_rlcmac.h b/src/gprs_rlcmac.h
index be1e686..c16a954 100644
--- a/src/gprs_rlcmac.h
+++ b/src/gprs_rlcmac.h
@@ -21,6 +21,8 @@
 #ifndef GPRS_RLCMAC_H
 #define GPRS_RLCMAC_H
 
+#include <stdbool.h>
+
 #ifdef __cplusplus
 #include <gsm_rlcmac.h>
 #include <gsm_timer.h>
@@ -98,20 +100,14 @@
 
 extern "C" {
 #endif
-int alloc_algorithm_a(struct gprs_rlcmac_bts *bts,
-       struct GprsMs *ms,
-       struct gprs_rlcmac_tbf *tbf, uint32_t cust, uint8_t single,
-       int use_trx);
+int alloc_algorithm_a(struct gprs_rlcmac_bts *bts, struct GprsMs *ms, struct 
gprs_rlcmac_tbf *tbf, bool single,
+                     int8_t use_trx);
 
-int alloc_algorithm_b(struct gprs_rlcmac_bts *bts,
-       struct GprsMs *ms,
-       struct gprs_rlcmac_tbf *tbf, uint32_t cust, uint8_t single,
-       int use_trx);
+int alloc_algorithm_b(struct gprs_rlcmac_bts *bts, struct GprsMs *ms, struct 
gprs_rlcmac_tbf *tbf, bool single,
+                     int8_t use_trx);
 
-int alloc_algorithm_dynamic(struct gprs_rlcmac_bts *bts,
-       struct GprsMs *ms,
-       struct gprs_rlcmac_tbf *tbf, uint32_t cust, uint8_t single,
-       int use_trx);
+int alloc_algorithm_dynamic(struct gprs_rlcmac_bts *bts, struct GprsMs *ms, 
struct gprs_rlcmac_tbf *tbf, bool single,
+                           int8_t use_trx);
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/gprs_rlcmac_ts_alloc.cpp b/src/gprs_rlcmac_ts_alloc.cpp
index 57197b2..ba9734f 100644
--- a/src/gprs_rlcmac_ts_alloc.cpp
+++ b/src/gprs_rlcmac_ts_alloc.cpp
@@ -103,7 +103,7 @@
        return was_set;
 }
 
-static inline int8_t find_free_usf(struct gprs_rlcmac_pdch *pdch)
+static inline int8_t find_free_usf(const struct gprs_rlcmac_pdch *pdch)
 {
        uint8_t usf_map = 0;
        uint8_t usf;
@@ -121,13 +121,11 @@
        return -1;
 }
 
-static inline int8_t find_free_tfi(struct gprs_rlcmac_pdch *pdch,
-       enum gprs_rlcmac_tbf_direction dir)
+static inline int8_t find_free_tfi(const struct gprs_rlcmac_pdch *pdch, enum 
gprs_rlcmac_tbf_direction dir)
 {
-       uint32_t tfi_map = 0;
+       uint32_t tfi_map = pdch->assigned_tfi(dir);
        int8_t tfi;
 
-       tfi_map = pdch->assigned_tfi(dir);
        if (tfi_map == 0xffffffffUL)
                return -1;
 
@@ -140,16 +138,15 @@
        return -1;
 }
 
-static int find_possible_pdchs(struct gprs_rlcmac_trx *trx,
-       size_t max_slots,
-       uint8_t mask, const char *mask_reason = NULL)
+static int find_possible_pdchs(const struct gprs_rlcmac_trx *trx, size_t 
max_slots, uint8_t mask,
+                              const char *mask_reason = NULL)
 {
        unsigned ts;
        int valid_ts_set = 0;
        int8_t last_tsc = -1; /* must be signed */
 
        for (ts = 0; ts < ARRAY_SIZE(trx->pdch); ts++) {
-               struct gprs_rlcmac_pdch *pdch;
+               const struct gprs_rlcmac_pdch *pdch;
 
                pdch = &trx->pdch[ts];
                if (!pdch->is_enabled()) {
@@ -187,22 +184,19 @@
        return valid_ts_set;
 }
 
-static int compute_usage_by_num_tbfs(struct gprs_rlcmac_pdch *pdch,
-       enum gprs_rlcmac_tbf_direction dir)
+static int compute_usage_by_num_tbfs(const struct gprs_rlcmac_pdch *pdch, enum 
gprs_rlcmac_tbf_direction dir)
 {
        return pdch->num_tbfs(dir);
 }
 
-static int compute_usage_by_reservation(struct gprs_rlcmac_pdch *pdch,
-       enum gprs_rlcmac_tbf_direction)
+static int compute_usage_by_reservation(const struct gprs_rlcmac_pdch *pdch, 
enum gprs_rlcmac_tbf_direction)
 {
        return
                pdch->num_reserved(GPRS_RLCMAC_DL_TBF) +
                pdch->num_reserved(GPRS_RLCMAC_UL_TBF);
 }
 
-static int compute_usage_for_algo_a(struct gprs_rlcmac_pdch *pdch,
-       enum gprs_rlcmac_tbf_direction dir)
+static int compute_usage_for_algo_a(const struct gprs_rlcmac_pdch *pdch, enum 
gprs_rlcmac_tbf_direction dir)
 {
        int usage =
                pdch->num_tbfs(GPRS_RLCMAC_DL_TBF) +
@@ -217,11 +211,19 @@
 
 }
 
-static int find_least_busy_pdch(struct gprs_rlcmac_trx *trx,
-       enum gprs_rlcmac_tbf_direction dir,
-       uint8_t mask,
-       int (*fn)(struct gprs_rlcmac_pdch *, enum gprs_rlcmac_tbf_direction 
dir),
-       int *free_tfi = 0, int *free_usf = 0)
+/*! Return the TS which corresponds to least busy PDCH
+ *
+ *  \param[in] trx Pointer to TRX object
+ *  \param[in] dir TBF direction
+ *  \param[in] mask set of available timeslots
+ *  \param[in] fn Function pointer to function which computes number of 
associated TBFs
+ *  \param[out] free_tfi Free TFI
+ *  \param[out] free_usf Free USF
+ *  \returns TS number or -1 if unable to find
+ */
+static int find_least_busy_pdch(const struct gprs_rlcmac_trx *trx, enum 
gprs_rlcmac_tbf_direction dir, uint8_t mask,
+                               int (*fn)(const struct gprs_rlcmac_pdch *, enum 
gprs_rlcmac_tbf_direction dir),
+                               int *free_tfi = 0, int *free_usf = 0)
 {
        unsigned ts;
        int min_used = INT_MAX;
@@ -230,7 +232,7 @@
        int min_usf = -1;
 
        for (ts = 0; ts < ARRAY_SIZE(trx->pdch); ts++) {
-               struct gprs_rlcmac_pdch *pdch = &trx->pdch[ts];
+               const struct gprs_rlcmac_pdch *pdch = &trx->pdch[ts];
                int num_tbfs;
                int usf = -1; /* must be signed */
                int tfi = -1;
@@ -300,30 +302,23 @@
        pdch->attach_tbf(tbf);
 }
 
-static void assign_uplink_tbf_usf(
-                               struct gprs_rlcmac_pdch *pdch,
-                               struct gprs_rlcmac_ul_tbf *tbf,
-                               int tfi, int8_t usf)
+static void assign_uplink_tbf_usf(struct gprs_rlcmac_pdch *pdch, struct 
gprs_rlcmac_ul_tbf *tbf, uint8_t tfi, int8_t usf)
 {
        tbf->m_tfi = tfi;
        tbf->m_usf[pdch->ts_no] = usf;
        attach_tbf_to_pdch(pdch, tbf);
 }
 
-static void assign_dlink_tbf(
-                               struct gprs_rlcmac_pdch *pdch,
-                               struct gprs_rlcmac_dl_tbf *tbf,
-                               int tfi)
+static void assign_dlink_tbf(struct gprs_rlcmac_pdch *pdch, struct 
gprs_rlcmac_dl_tbf *tbf, uint8_t tfi)
 {
        tbf->m_tfi = tfi;
        attach_tbf_to_pdch(pdch, tbf);
 }
 
-static int find_trx(BTS *bts, const GprsMs *ms, int use_trx)
+static int find_trx(const struct gprs_rlcmac_bts *bts_data, const GprsMs *ms, 
int8_t use_trx)
 {
        unsigned trx_no;
        unsigned ts;
-       struct gprs_rlcmac_bts *bts_data = bts->bts_data();
 
        /* We must use the TRX currently actively used by an MS */
        if (ms && ms->current_trx())
@@ -334,9 +329,9 @@
 
        /* Find the first TRX that has a PDCH with a free UL and DL TFI */
        for (trx_no = 0; trx_no < ARRAY_SIZE(bts_data->trx); trx_no += 1) {
-               struct gprs_rlcmac_trx *trx = &bts_data->trx[trx_no];
+               const struct gprs_rlcmac_trx *trx = &bts_data->trx[trx_no];
                for (ts = 0; ts < ARRAY_SIZE(trx->pdch); ts++) {
-                       struct gprs_rlcmac_pdch *pdch = &trx->pdch[ts];
+                       const struct gprs_rlcmac_pdch *pdch = &trx->pdch[ts];
                        if (!pdch->is_enabled())
                                continue;
 
@@ -353,32 +348,41 @@
        return -EBUSY;
 }
 
-static struct gprs_rlcmac_pdch * find_idle_pdch(BTS *bts)
+static bool idle_pdch_avail(const struct gprs_rlcmac_bts *bts_data)
 {
        unsigned trx_no;
        unsigned ts;
-       struct gprs_rlcmac_bts *bts_data = bts->bts_data();
 
        /* Find the first PDCH with an unused DL TS */
        for (trx_no = 0; trx_no < ARRAY_SIZE(bts_data->trx); trx_no += 1) {
-               struct gprs_rlcmac_trx *trx = &bts_data->trx[trx_no];
+               const struct gprs_rlcmac_trx *trx = &bts_data->trx[trx_no];
                for (ts = 0; ts < ARRAY_SIZE(trx->pdch); ts++) {
-                       struct gprs_rlcmac_pdch *pdch = &trx->pdch[ts];
+                       const struct gprs_rlcmac_pdch *pdch = &trx->pdch[ts];
                        if (!pdch->is_enabled())
                                continue;
 
                        if (pdch->num_tbfs(GPRS_RLCMAC_DL_TBF) > 
PDCH_IDLE_TBF_THRESH)
                                continue;
 
-                       return pdch;
+                       return true;
                }
        }
 
-       return NULL;
+       return false;
 }
 
-static int tfi_find_free(BTS *bts, const GprsMs *ms,
-       enum gprs_rlcmac_tbf_direction dir, int use_trx, int *trx_no_)
+/*! Return free TFI
+ *
+ *  \param[in,out] bts Pointer to BTS struct
+ *  \param[in] trx Pointer to TRX struct
+ *  \param[in] ms Pointer to MS object
+ *  \param[in] dir DL or UL direction
+ *  \param[in] use_trx which TRX to use or -1 if it should be selected based 
on what MS uses
+ *  \param[out] trx_no_ TRX number on which TFI was found
+ *  \returns negative error code or 0 on success
+ */
+static int tfi_find_free(const BTS *bts, const gprs_rlcmac_trx *trx, const 
GprsMs *ms,
+                        enum gprs_rlcmac_tbf_direction dir, int8_t use_trx, 
uint8_t *trx_no_)
 {
        int tfi;
        uint8_t trx_no;
@@ -396,14 +400,19 @@
        return tfi;
 }
 
-/* Slot Allocation: Algorithm A
+/*! Slot Allocation: Algorithm A
  *
  * Assign single slot for uplink and downlink
+ *
+ *  \param[in,out] bts Pointer to BTS struct
+ *  \param[in,out] ms_ Pointer to MS object
+ *  \param[in,out] tbf_ Pointer to TBF struct
+ *  \param[in] single flag indicating if we should force single-slot allocation
+ *  \param[in] use_trx which TRX to use or -1 if it should be selected during 
allocation
+ *  \returns negative error code or 0 on success
  */
-int alloc_algorithm_a(struct gprs_rlcmac_bts *bts,
-       GprsMs *ms_,
-       struct gprs_rlcmac_tbf *tbf_, uint32_t cust, uint8_t single,
-       int use_trx)
+int alloc_algorithm_a(struct gprs_rlcmac_bts *bts, GprsMs *ms_, struct 
gprs_rlcmac_tbf *tbf_, bool single,
+                     int8_t use_trx)
 {
        struct gprs_rlcmac_pdch *pdch;
        int ts = -1;
@@ -420,7 +429,7 @@
        LOGP(DRLCMAC, LOGL_DEBUG, "Slot Allocation (Algorithm A) for class "
                "%d\n", tbf->ms_class());
 
-       trx_no = find_trx(bts->bts, ms, use_trx);
+       trx_no = find_trx(bts, ms, use_trx);
        if (trx_no < 0) {
                LOGP(DRLCMAC, LOGL_NOTICE,
                        "- Failed to find a usable TRX (TFI exhausted)\n");
@@ -488,9 +497,15 @@
        return 0;
 }
 
-static int find_multi_slots(struct gprs_rlcmac_bts *bts,
-       struct gprs_rlcmac_trx *trx,
-       const GprsMs *ms, uint8_t *ul_slots, uint8_t *dl_slots)
+/*! Find set of slots available for allocation while taking MS class into 
account
+ *
+ *  \param[in] trx Pointer to TRX object
+ *  \param[in] ms Pointer to MS object
+ *  \param[in,out] ul_slots set of UL timeslots
+ *  \param[in,out] dl_slots set of DL timeslots
+ *  \returns negative error code or 0 on success
+ */
+static int find_multi_slots(const struct gprs_rlcmac_trx *trx, const GprsMs 
*ms, uint8_t *ul_slots, uint8_t *dl_slots)
 {
        const struct gprs_ms_multislot_class *ms_class;
        uint8_t Tx, Sum;        /* Maximum Number of Slots: RX, Tx, Sum Rx+Tx */
@@ -747,7 +762,7 @@
 
                for (ts = 0; ts < ARRAY_SIZE(trx->pdch); ts++) {
                        int c;
-                       struct gprs_rlcmac_pdch *pdch = &trx->pdch[ts];
+                       const struct gprs_rlcmac_pdch *pdch = &trx->pdch[ts];
                        if (rx_window & (1 << ts)) {
                                c = 32 - pdch->num_reserved(GPRS_RLCMAC_DL_TBF);
                                c = OSMO_MAX(c, 1);
@@ -796,15 +811,20 @@
        return 0;
 }
 
-/* Slot Allocation: Algorithm B
+/*! Slot Allocation: Algorithm B
  *
  * Assign as many downlink slots as possible.
  * Assign one uplink slot. (With free USF)
  *
+ *  \param[in,out] bts Pointer to BTS struct
+ *  \param[in,out] ms_ Pointer to MS object
+ *  \param[in,out] tbf_ Pointer to TBF struct
+ *  \param[in] single flag indicating if we should force single-slot allocation
+ *  \param[in] use_trx which TRX to use or -1 if it should be selected during 
allocation
+ *  \returns negative error code or 0 on success
  */
-int alloc_algorithm_b(struct gprs_rlcmac_bts *bts,
-       GprsMs *ms_, struct gprs_rlcmac_tbf *tbf_,
-       uint32_t cust, uint8_t single, int use_trx)
+int alloc_algorithm_b(struct gprs_rlcmac_bts *bts, GprsMs *ms_, struct 
gprs_rlcmac_tbf *tbf_, bool single,
+                     int8_t use_trx)
 {
        uint8_t dl_slots;
        uint8_t ul_slots;
@@ -812,14 +832,13 @@
        uint8_t reserved_ul_slots;
        int8_t first_common_ts;
        uint8_t slotcount = 0;
-       uint8_t avail_count = 0;
+       uint8_t avail_count = 0, trx_no;
        char slot_info[9] = {0};
        int ts;
        int first_ts = -1;
        int usf[8] = {-1, -1, -1, -1, -1, -1, -1, -1};
        int rc;
        int tfi;
-       int trx_no;
        const GprsMs *ms = ms_;
        const gprs_rlcmac_tbf *tbf = tbf_;
        gprs_rlcmac_trx *trx;
@@ -858,7 +877,7 @@
                trx = &bts->trx[trx_no];
 
        if (!dl_slots || !ul_slots) {
-               rc = find_multi_slots(bts, trx, ms, &ul_slots, &dl_slots);
+               rc = find_multi_slots(trx, ms, &ul_slots, &dl_slots);
                if (rc < 0)
                        return rc;
 
@@ -1025,7 +1044,7 @@
        return 0;
 }
 
-/* Slot Allocation: Algorithm dynamic
+/*! Slot Allocation: Algorithm dynamic
  *
  * This meta algorithm automatically selects on of the other algorithms based
  * on the current system state.
@@ -1033,22 +1052,27 @@
  * The goal is to support as many MS and TBF as possible. On low usage, the
  * goal is to provide the highest possible bandwidth per MS.
  *
+ *  \param[in,out] bts Pointer to BTS struct
+ *  \param[in,out] ms_ Pointer to MS object
+ *  \param[in,out] tbf_ Pointer to TBF struct
+ *  \param[in] single flag indicating if we should force single-slot allocation
+ *  \param[in] use_trx which TRX to use or -1 if it should be selected during 
allocation
+ *  \returns negative error code or 0 on success
  */
-int alloc_algorithm_dynamic(struct gprs_rlcmac_bts *bts,
-       GprsMs *ms_, struct gprs_rlcmac_tbf *tbf_,
-       uint32_t cust, uint8_t single, int use_trx)
+int alloc_algorithm_dynamic(struct gprs_rlcmac_bts *bts, GprsMs *ms_, struct 
gprs_rlcmac_tbf *tbf_, bool single,
+                           int8_t use_trx)
 {
        int rc;
 
        /* Reset load_is_high if there is at least one idle PDCH */
        if (bts->multislot_disabled) {
-               bts->multislot_disabled = find_idle_pdch(bts->bts) == NULL;
+               bts->multislot_disabled = !idle_pdch_avail(bts);
                if (!bts->multislot_disabled)
                        LOGP(DRLCMAC, LOGL_DEBUG, "Enabling algorithm B\n");
        }
 
        if (!bts->multislot_disabled) {
-               rc = alloc_algorithm_b(bts, ms_, tbf_, cust, single, use_trx);
+               rc = alloc_algorithm_b(bts, ms_, tbf_, single, use_trx);
                if (rc >= 0)
                        return rc;
 
@@ -1057,8 +1081,7 @@
                bts->multislot_disabled = 1;
        }
 
-       rc = alloc_algorithm_a(bts, ms_, tbf_, cust, single, use_trx);
-       return rc;
+       return alloc_algorithm_a(bts, ms_, tbf_, single, use_trx);
 }
 
 int gprs_alloc_max_dl_slots_per_ms(struct gprs_rlcmac_bts *bts, uint8_t 
ms_class)
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 8e54157..6c840aa 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -385,7 +385,7 @@
 /* FIXME: Copy and paste with tbf_new_dl_assignment */
        /* create new TBF, use same TRX as DL TBF */
        /* use multislot class of downlink TBF */
-       tbf = tbf_alloc_ul_tbf(bts, ms, use_trx, ms_class, egprs_ms_class, 0);
+       tbf = tbf_alloc_ul_tbf(bts, ms, use_trx, ms_class, egprs_ms_class, 
false);
        if (!tbf) {
                LOGP(DRLCMAC, LOGL_NOTICE, "No PDCH resource\n");
                /* FIXME: send reject */
@@ -489,8 +489,7 @@
                return -EINVAL;
 
        tbf_unlink_pdch(this);
-       rc = bts_data->alloc_algorithm(bts_data, ms(), this,
-               bts_data->alloc_algorithm_curst, 0, -1);
+       rc = bts_data->alloc_algorithm(bts_data, ms(), this, 0, -1);
        /* if no resource */
        if (rc < 0) {
                LOGP(DRLCMAC, LOGL_ERROR, "No resource after update???\n");
@@ -752,9 +751,8 @@
                LOGP(DRLCMAC, LOGL_ERROR, "- Poll Timeout, but no event!\n");
 }
 
-static int setup_tbf(struct gprs_rlcmac_tbf *tbf,
-       GprsMs *ms, int8_t use_trx,
-       uint8_t ms_class, uint8_t egprs_ms_class, uint8_t single_slot)
+static int setup_tbf(struct gprs_rlcmac_tbf *tbf, GprsMs *ms, int8_t use_trx, 
uint8_t ms_class, uint8_t egprs_ms_class,
+                    bool single_slot)
 {
        int rc;
        struct gprs_rlcmac_bts *bts;
@@ -769,8 +767,7 @@
        tbf->m_created_ts = time(NULL);
        tbf->set_ms_class(ms_class);
        /* select algorithm */
-       rc = bts->alloc_algorithm(bts, ms, tbf, bts->alloc_algorithm_curst,
-               single_slot, use_trx);
+       rc = bts->alloc_algorithm(bts, ms, tbf, single_slot, use_trx);
        /* if no resource */
        if (rc < 0) {
                return -1;
@@ -830,9 +827,8 @@
        }
 }
 
-struct gprs_rlcmac_ul_tbf *tbf_alloc_ul_tbf(struct gprs_rlcmac_bts *bts,
-       GprsMs *ms, int8_t use_trx,
-       uint8_t ms_class, uint8_t egprs_ms_class, uint8_t single_slot)
+struct gprs_rlcmac_ul_tbf *tbf_alloc_ul_tbf(struct gprs_rlcmac_bts *bts, 
GprsMs *ms, int8_t use_trx, uint8_t ms_class,
+                                           uint8_t egprs_ms_class, bool 
single_slot)
 {
        struct gprs_rlcmac_ul_tbf *tbf;
        int rc;
@@ -921,9 +917,8 @@
        return 0;
 }
 
-struct gprs_rlcmac_dl_tbf *tbf_alloc_dl_tbf(struct gprs_rlcmac_bts *bts,
-       GprsMs *ms, int8_t use_trx,
-       uint8_t ms_class, uint8_t egprs_ms_class, uint8_t single_slot)
+struct gprs_rlcmac_dl_tbf *tbf_alloc_dl_tbf(struct gprs_rlcmac_bts *bts, 
GprsMs *ms, int8_t use_trx, uint8_t ms_class,
+                                           uint8_t egprs_ms_class, bool 
single_slot)
 {
        struct gprs_rlcmac_dl_tbf *tbf;
        int rc;
@@ -1314,9 +1309,8 @@
 
        bts->tbf_reused();
 
-       new_tbf = tbf_alloc_dl_tbf(bts->bts_data(), ms(),
-               this->trx->trx_no, ms_class(),
-               ms() ?  ms()->egprs_ms_class() : 0, 0);
+       new_tbf = tbf_alloc_dl_tbf(bts->bts_data(), ms(), this->trx->trx_no, 
ms_class(),
+                                  ms() ?  ms()->egprs_ms_class() : 0, false);
 
        if (!new_tbf) {
                LOGP(DRLCMAC, LOGL_NOTICE, "No PDCH resource\n");
diff --git a/src/tbf.h b/src/tbf.h
index 95e1e89..8f92149 100644
--- a/src/tbf.h
+++ b/src/tbf.h
@@ -314,13 +314,11 @@
        int8_t use_trx, uint8_t ms_class, uint8_t egprs_ms_class,
        uint32_t tlli, uint8_t ta, GprsMs *ms);
 
-struct gprs_rlcmac_ul_tbf *tbf_alloc_ul_tbf(struct gprs_rlcmac_bts *bts,
-       GprsMs *ms, int8_t use_trx,
-       uint8_t ms_class, uint8_t egprs_ms_class, uint8_t single_slot);
+struct gprs_rlcmac_ul_tbf *tbf_alloc_ul_tbf(struct gprs_rlcmac_bts *bts, 
GprsMs *ms, int8_t use_trx, uint8_t ms_class,
+                                           uint8_t egprs_ms_class, bool 
single_slot);
 
-struct gprs_rlcmac_dl_tbf *tbf_alloc_dl_tbf(struct gprs_rlcmac_bts *bts,
-       GprsMs *ms, int8_t use_trx,
-       uint8_t ms_class, uint8_t egprs_ms_class, uint8_t single_slot);
+struct gprs_rlcmac_dl_tbf *tbf_alloc_dl_tbf(struct gprs_rlcmac_bts *bts, 
GprsMs *ms, int8_t use_trx, uint8_t ms_class,
+                                           uint8_t egprs_ms_class, bool 
single_slot);
 
 void tbf_free(struct gprs_rlcmac_tbf *tbf);
 
diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp
index 1dd7dd8..26250ab 100644
--- a/src/tbf_dl.cpp
+++ b/src/tbf_dl.cpp
@@ -118,7 +118,7 @@
                                const uint8_t egprs_ms_class,
                                struct gprs_rlcmac_dl_tbf **tbf)
 {
-       uint8_t ss;
+       bool ss;
        int8_t use_trx;
        uint16_t ta = GSM48_TA_INVALID;
        struct gprs_rlcmac_ul_tbf *ul_tbf = NULL, *old_ul_tbf;
@@ -136,11 +136,11 @@
        if (ul_tbf && ul_tbf->m_contention_resolution_done
         && !ul_tbf->m_final_ack_sent) {
                use_trx = ul_tbf->trx->trx_no;
-               ss = 0;
+               ss = false;
                old_ul_tbf = ul_tbf;
        } else {
                use_trx = -1;
-               ss = 1; /* PCH assignment only allows one timeslot */
+               ss = true; /* PCH assignment only allows one timeslot */
                old_ul_tbf = NULL;
        }
 
diff --git a/tests/alloc/AllocTest.cpp b/tests/alloc/AllocTest.cpp
index e26c432..271f966 100644
--- a/tests/alloc/AllocTest.cpp
+++ b/tests/alloc/AllocTest.cpp
@@ -39,7 +39,7 @@
 static gprs_rlcmac_tbf *tbf_alloc(struct gprs_rlcmac_bts *bts,
                GprsMs *ms, gprs_rlcmac_tbf_direction dir,
                uint8_t use_trx,
-               uint8_t ms_class, uint8_t egprs_ms_class, uint8_t single_slot)
+               uint8_t ms_class, uint8_t egprs_ms_class, bool single_slot)
 {
        if (dir == GPRS_RLCMAC_UL_TBF)
                return tbf_alloc_ul_tbf(bts, ms, use_trx,
@@ -202,7 +202,7 @@
                trx->pdch[6].enable();
                trx->pdch[7].enable();
 
-               ul_tbf = tbf_alloc_ul_tbf(bts, NULL, -1, ms_class, 0, 1);
+               ul_tbf = tbf_alloc_ul_tbf(bts, NULL, -1, ms_class, 0, true);
                OSMO_ASSERT(ul_tbf);
                OSMO_ASSERT(ul_tbf->ms());
                OSMO_ASSERT(ul_tbf->ms()->current_trx());
@@ -210,7 +210,7 @@
                dump_assignment(ul_tbf, "UL");
 
                /* assume final ack has not been sent */
-               dl_tbf = tbf_alloc_dl_tbf(bts, ul_tbf->ms(), trx_no, ms_class, 
0, 0);
+               dl_tbf = tbf_alloc_dl_tbf(bts, ul_tbf->ms(), trx_no, ms_class, 
0, false);
                OSMO_ASSERT(dl_tbf);
                dump_assignment(dl_tbf, "DL");
 
@@ -244,7 +244,7 @@
                trx->pdch[6].enable();
                trx->pdch[7].enable();
 
-               dl_tbf = tbf_alloc_dl_tbf(bts, NULL, -1, ms_class, 0, 1);
+               dl_tbf = tbf_alloc_dl_tbf(bts, NULL, -1, ms_class, 0, true);
                dl_tbf->update_ms(0x23, GPRS_RLCMAC_DL_TBF);
                OSMO_ASSERT(dl_tbf);
                OSMO_ASSERT(dl_tbf->ms());
@@ -252,7 +252,7 @@
                trx_no = dl_tbf->ms()->current_trx()->trx_no;
                dump_assignment(dl_tbf, "DL");
 
-               ul_tbf = tbf_alloc_ul_tbf(bts, dl_tbf->ms(), trx_no, ms_class, 
0, 0);
+               ul_tbf = tbf_alloc_ul_tbf(bts, dl_tbf->ms(), trx_no, ms_class, 
0, false);
                ul_tbf->update_ms(0x23, GPRS_RLCMAC_UL_TBF);
                ul_tbf->m_contention_resolution_done = 1;
                OSMO_ASSERT(ul_tbf);
@@ -294,7 +294,7 @@
 
                tfi = the_bts.tfi_find_free(GPRS_RLCMAC_UL_TBF, &trx_no, -1);
                OSMO_ASSERT(tfi >= 0);
-               ul_tbf = tbf_alloc_ul_tbf(bts, NULL, .1, ms_class, 0, 0);
+               ul_tbf = tbf_alloc_ul_tbf(bts, NULL, .1, ms_class, 0, false);
                OSMO_ASSERT(ul_tbf);
                OSMO_ASSERT(ul_tbf->ms());
                OSMO_ASSERT(ul_tbf->ms()->current_trx());
@@ -302,7 +302,7 @@
                dump_assignment(ul_tbf, "UL");
 
                /* assume final ack has not been sent */
-               dl_tbf = tbf_alloc_dl_tbf(bts, ul_tbf->ms(), trx_no, ms_class, 
0, 0);
+               dl_tbf = tbf_alloc_dl_tbf(bts, ul_tbf->ms(), trx_no, ms_class, 
0, false);
                OSMO_ASSERT(dl_tbf);
                dump_assignment(dl_tbf, "DL");
 
@@ -357,14 +357,14 @@
                ENABLE_PDCH(6, ts6, trx);
                ENABLE_PDCH(7, ts7, trx);
 
-               ul_tbf = tbf_alloc_ul_tbf(bts, NULL, -1, ms_class, 0, 1);
+               ul_tbf = tbf_alloc_ul_tbf(bts, NULL, -1, ms_class, 0, true);
                OSMO_ASSERT(ul_tbf->ms());
                OSMO_ASSERT(ul_tbf->ms()->current_trx());
                trx_no = ul_tbf->ms()->current_trx()->trx_no;
                OSMO_ASSERT(ul_tbf);
 
                /* assume final ack has not been sent */
-               dl_tbf = tbf_alloc_dl_tbf(bts, ul_tbf->ms(), trx_no, ms_class, 
0, 0);
+               dl_tbf = tbf_alloc_dl_tbf(bts, ul_tbf->ms(), trx_no, ms_class, 
0, false);
                OSMO_ASSERT(dl_tbf);
 
                /* verify that both are on the same ts */
@@ -401,14 +401,14 @@
                ENABLE_PDCH(6, ts6, trx);
                ENABLE_PDCH(7, ts7, trx);
 
-               dl_tbf = tbf_alloc_dl_tbf(bts, NULL, -1, ms_class, 0, 1);
+               dl_tbf = tbf_alloc_dl_tbf(bts, NULL, -1, ms_class, 0, true);
                OSMO_ASSERT(dl_tbf);
                OSMO_ASSERT(dl_tbf->ms());
                OSMO_ASSERT(dl_tbf->ms()->current_trx());
                trx_no = dl_tbf->ms()->current_trx()->trx_no;
                dl_tbf->update_ms(0x23, GPRS_RLCMAC_DL_TBF);
 
-               ul_tbf = tbf_alloc_ul_tbf(bts, dl_tbf->ms(), trx_no, ms_class, 
0, 0);
+               ul_tbf = tbf_alloc_ul_tbf(bts, dl_tbf->ms(), trx_no, ms_class, 
0, false);
                OSMO_ASSERT(ul_tbf);
                ul_tbf->update_ms(0x23, GPRS_RLCMAC_UL_TBF);
                ul_tbf->m_contention_resolution_done = 1;
@@ -452,10 +452,8 @@
        test_all_alloc_b();
 }
 
-typedef int (*algo_t)(struct gprs_rlcmac_bts *bts,
-               struct GprsMs *ms,
-               struct gprs_rlcmac_tbf *tbf, uint32_t cust, uint8_t single,
-               int use_trx);
+typedef int (*algo_t)(struct gprs_rlcmac_bts *bts, struct GprsMs *ms, struct 
gprs_rlcmac_tbf *tbf, bool single,
+                     int8_t use_trx);
 
 static char get_dir_char(uint8_t mask, uint8_t tx, uint8_t rx, uint8_t busy)
 {
@@ -497,7 +495,7 @@
        case TEST_MODE_UL_AND_DL:
                if (ms && ms->ul_tbf())
                        tbf_free(ms->ul_tbf());
-               tbf = tbf_alloc_ul_tbf(bts, ms, trx_no, ms_class, 0, 0);
+               tbf = tbf_alloc_ul_tbf(bts, ms, trx_no, ms_class, 0, false);
                if (tbf == NULL)
                        return NULL;
                break;
@@ -506,7 +504,7 @@
        case TEST_MODE_DL_AND_UL:
                if (ms && ms->dl_tbf())
                        tbf_free(ms->dl_tbf());
-               tbf = tbf_alloc_dl_tbf(bts, ms, trx_no, ms_class, 0, 0);
+               tbf = tbf_alloc_dl_tbf(bts, ms, trx_no, ms_class, 0, false);
                if (tbf == NULL)
                        return NULL;
        }
@@ -813,7 +811,7 @@
        trx->pdch[6].enable();
        trx->pdch[7].enable();
 
-       dl_tbf1 = tbf_alloc_dl_tbf(bts, NULL, 0, ms_class, egprs_ms_class, 0);
+       dl_tbf1 = tbf_alloc_dl_tbf(bts, NULL, 0, ms_class, egprs_ms_class, 
false);
        OSMO_ASSERT(dl_tbf1);
 
        for (int i = 0; i < 8; i++) {
@@ -823,7 +821,7 @@
        OSMO_ASSERT(numTs1 == 4);
        printf("TBF1: numTs(%d)\n", numTs1);
 
-       dl_tbf2 = tbf_alloc_dl_tbf(bts, NULL, 0, ms_class, egprs_ms_class, 0);
+       dl_tbf2 = tbf_alloc_dl_tbf(bts, NULL, 0, ms_class, egprs_ms_class, 
false);
        OSMO_ASSERT(dl_tbf2);
 
        for (int i = 0; i < 8; i++) {
diff --git a/tests/tbf/TbfTest.cpp b/tests/tbf/TbfTest.cpp
index 0db7fde..43a6142 100644
--- a/tests/tbf/TbfTest.cpp
+++ b/tests/tbf/TbfTest.cpp
@@ -81,16 +81,12 @@
        /*
         * Make a uplink and downlink allocation
         */
-       gprs_rlcmac_tbf *dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(),
-                                               NULL,
-                                               0, 0, 0, 0);
+       gprs_rlcmac_tbf *dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, 0, 
0, 0, false);
        OSMO_ASSERT(dl_tbf != NULL);
        dl_tbf->update_ms(0x2342, GPRS_RLCMAC_DL_TBF);
        dl_tbf->set_ta(4);
 
-       gprs_rlcmac_tbf *ul_tbf = tbf_alloc_ul_tbf(the_bts.bts_data(),
-                                               dl_tbf->ms(),
-                                               0, 0, 0, 0);
+       gprs_rlcmac_tbf *ul_tbf = tbf_alloc_ul_tbf(the_bts.bts_data(), 
dl_tbf->ms(), 0, 0, 0, false);
        OSMO_ASSERT(ul_tbf != NULL);
        ul_tbf->update_ms(0x2342, GPRS_RLCMAC_UL_TBF);
 
@@ -170,7 +166,7 @@
 
        tfi = the_bts->tfi_find_free(GPRS_RLCMAC_DL_TBF, &trx_no, -1);
        OSMO_ASSERT(tfi >= 0);
-       dl_tbf = tbf_alloc_dl_tbf(bts, NULL, trx_no, ms_class, egprs_ms_class, 
1);
+       dl_tbf = tbf_alloc_dl_tbf(bts, NULL, trx_no, ms_class, egprs_ms_class, 
true);
        dl_tbf->set_ta(0);
        check_tbf(dl_tbf);
 
@@ -2209,7 +2205,7 @@
                1234, 1234, 1234, 1, 1, 0, 0, 0);
 
        /* Does no support EGPRS */
-       dl_tbf = tbf_alloc_dl_tbf(bts, NULL, 0, ms_class, 0, 0);
+       dl_tbf = tbf_alloc_dl_tbf(bts, NULL, 0, ms_class, 0, false);
        OSMO_ASSERT(dl_tbf != NULL);
        fprintf(stderr, "DL TBF slots: 0x%02x, N: %d, WS: %d\n",
                dl_tbf->dl_slots(),
@@ -2223,7 +2219,7 @@
        bts->egprs_enabled = 1;
 
        /* Does support EGPRS */
-       dl_tbf = tbf_alloc_dl_tbf(bts, NULL, 0, ms_class, ms_class, 0);
+       dl_tbf = tbf_alloc_dl_tbf(bts, NULL, 0, ms_class, ms_class, false);
 
        OSMO_ASSERT(dl_tbf != NULL);
        fprintf(stderr, "DL TBF slots: 0x%02x, N: %d, WS: %d\n",
@@ -2267,7 +2263,7 @@
        bts->egprs_enabled = 1;
 
        /* Does support EGPRS */
-       dl_tbf = tbf_alloc_dl_tbf(bts, NULL, 0, ms_class, ms_class, 1);
+       dl_tbf = tbf_alloc_dl_tbf(bts, NULL, 0, ms_class, ms_class, true);
 
        OSMO_ASSERT(dl_tbf != NULL);
        fprintf(stderr, "DL TBF slots: 0x%02x, N: %d, WS: %d\n",

-- 
To view, visit https://gerrit.osmocom.org/3807
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I39d81ab64ff790b9c4c2d0312a574485cd83e755
Gerrit-PatchSet: 3
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Owner: Max <[email protected]>
Gerrit-Reviewer: Harald Welte <[email protected]>
Gerrit-Reviewer: Holger Freyther <[email protected]>
Gerrit-Reviewer: Jenkins Builder

Reply via email to