This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Max gerrit-no-reply at lists.osmocom.orgHello 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 (#5).
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#2282
---
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, 147 insertions(+), 146 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/07/3807/5
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..47a892d 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] 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;
@@ -847,7 +866,7 @@
}
/* Step 2a: Find usable TRX and TFI */
- tfi = tfi_find_free(bts->bts, ms, tbf->direction, use_trx, &trx_no);
+ tfi = tfi_find_free(bts->bts, trx, ms, tbf->direction, use_trx, &trx_no);
if (tfi < 0) {
LOGP(DRLCMAC, LOGL_NOTICE, "- Failed to allocate a TFI\n");
return tfi;
@@ -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: 5
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Owner: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Holger Freyther <holger at freyther.de>
Gerrit-Reviewer: Jenkins Builder