aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gprs_rlcmac_ts_alloc.cpp18
-rw-r--r--tests/alloc/AllocTest.ok112
2 files changed, 73 insertions, 57 deletions
diff --git a/src/gprs_rlcmac_ts_alloc.cpp b/src/gprs_rlcmac_ts_alloc.cpp
index ffbbe2b8..e2c2a0f4 100644
--- a/src/gprs_rlcmac_ts_alloc.cpp
+++ b/src/gprs_rlcmac_ts_alloc.cpp
@@ -211,6 +211,22 @@ static int compute_usage_by_reservation(struct gprs_rlcmac_pdch *pdch,
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)
+{
+ int usage =
+ pdch->num_tbfs(GPRS_RLCMAC_DL_TBF) +
+ pdch->num_tbfs(GPRS_RLCMAC_UL_TBF) +
+ compute_usage_by_reservation(pdch, dir);
+
+ if (pdch->assigned_tfi(reverse(dir)) == 0xffffffff)
+ /* No TFI in the opposite direction, avoid it */
+ usage += 32;
+
+ return usage;
+
+}
+
static int find_least_busy_pdch(struct gprs_rlcmac_trx *trx,
enum gprs_rlcmac_tbf_direction dir,
uint8_t mask,
@@ -417,7 +433,7 @@ int alloc_algorithm_a(struct gprs_rlcmac_bts *bts,
return -EINVAL;
ts = find_least_busy_pdch(trx, tbf->direction, mask,
- compute_usage_by_reservation,
+ compute_usage_for_algo_a,
&tfi, &usf);
if (tbf->direction == GPRS_RLCMAC_UL_TBF && usf < 0) {
diff --git a/tests/alloc/AllocTest.ok b/tests/alloc/AllocTest.ok
index 542c74bd..046b51a1 100644
--- a/tests/alloc/AllocTest.ok
+++ b/tests/alloc/AllocTest.ok
@@ -9610,72 +9610,72 @@ Going to test assignment with many TBF, algorithm dynamic class 10 (DL ONLY)
TBF[30] class 10 reserves ...CD...
TBF[31] class 10 reserves ...CD...
TBF[1] class 10 reserves ...C....
- TBF[3] class 10 reserves ...C....
- TBF[5] class 10 reserves ...C....
TBF[0] class 10 reserves .......C
- TBF[7] class 10 reserves ...C....
+ TBF[3] class 10 reserves ...C....
TBF[2] class 10 reserves .......C
- TBF[9] class 10 reserves ...C....
+ TBF[5] class 10 reserves ...C....
TBF[2] class 10 reserves ......C.
TBF[4] class 10 reserves .......C
- TBF[11] class 10 reserves ...C....
+ TBF[7] class 10 reserves ...C....
TBF[4] class 10 reserves ......C.
- TBF[1] class 10 reserves ....C...
TBF[6] class 10 reserves .......C
- TBF[13] class 10 reserves ...C....
+ TBF[9] class 10 reserves ...C....
+ TBF[1] class 10 reserves ....C...
TBF[6] class 10 reserves ......C.
- TBF[3] class 10 reserves ....C...
TBF[8] class 10 reserves .......C
- TBF[15] class 10 reserves ...C....
+ TBF[11] class 10 reserves ...C....
+ TBF[3] class 10 reserves ....C...
TBF[8] class 10 reserves ......C.
- TBF[5] class 10 reserves ....C...
- TBF[22] class 10 reserves .....C..
TBF[10] class 10 reserves .......C
- TBF[17] class 10 reserves ...C....
+ TBF[13] class 10 reserves ...C....
+ TBF[5] class 10 reserves ....C...
TBF[10] class 10 reserves ......C.
- TBF[7] class 10 reserves ....C...
- TBF[24] class 10 reserves .....C..
TBF[12] class 10 reserves .......C
- TBF[19] class 10 reserves ...C....
+ TBF[15] class 10 reserves ...C....
+ TBF[7] class 10 reserves ....C...
TBF[12] class 10 reserves ......C.
- TBF[9] class 10 reserves ....C...
- TBF[25] class 10 reserves .....C..
TBF[14] class 10 reserves .......C
- TBF[21] class 10 reserves ...C....
+ TBF[17] class 10 reserves ...C....
+ TBF[9] class 10 reserves ....C...
+ TBF[22] class 10 reserves .....C..
TBF[14] class 10 reserves ......C.
- TBF[11] class 10 reserves ....C...
- TBF[27] class 10 reserves .....C..
TBF[16] class 10 reserves .......C
- TBF[23] class 10 reserves ...C....
+ TBF[19] class 10 reserves ...C....
+ TBF[11] class 10 reserves ....C...
+ TBF[24] class 10 reserves .....C..
TBF[16] class 10 reserves ......C.
- TBF[13] class 10 reserves ....C...
- TBF[30] class 10 reserves .....C..
TBF[18] class 10 reserves .......C
- TBF[26] class 10 reserves ...C....
+ TBF[21] class 10 reserves ...C....
+ TBF[13] class 10 reserves ....C...
+ TBF[25] class 10 reserves .....C..
TBF[18] class 10 reserves ......C.
- TBF[15] class 10 reserves ....C...
- TBF[31] class 10 reserves .....C..
TBF[20] class 10 reserves .......C
- TBF[28] class 10 reserves ...C....
+ TBF[23] class 10 reserves ...C....
+ TBF[15] class 10 reserves ....C...
+ TBF[27] class 10 reserves .....C..
TBF[20] class 10 reserves ......C.
- TBF[17] class 10 reserves ....C...
TBF[22] class 10 reserves .......C
- TBF[29] class 10 reserves ...C....
+ TBF[26] class 10 reserves ...C....
+ TBF[17] class 10 reserves ....C...
+ TBF[30] class 10 reserves .....C..
TBF[22] class 10 reserves ......C.
- TBF[19] class 10 reserves ....C...
TBF[24] class 10 reserves .......C
+ TBF[28] class 10 reserves ...C....
+ TBF[19] class 10 reserves ....C...
+ TBF[31] class 10 reserves .....C..
TBF[24] class 10 reserves ......C.
- TBF[21] class 10 reserves ....C...
TBF[25] class 10 reserves .......C
+ TBF[29] class 10 reserves ...C....
+ TBF[21] class 10 reserves ....C...
TBF[25] class 10 reserves ......C.
- TBF[23] class 10 reserves ....C...
TBF[27] class 10 reserves .......C
+ TBF[23] class 10 reserves ....C...
TBF[27] class 10 reserves ......C.
- TBF[26] class 10 reserves ....C...
TBF[28] class 10 reserves .......C
+ TBF[26] class 10 reserves ....C...
TBF[30] class 10 reserves ......C.
- TBF[29] class 10 reserves ....C...
TBF[30] class 10 reserves .......C
+ TBF[29] class 10 reserves ....C...
TBF[31] class 10 reserves ......C.
TBF[31] class 10 reserves .......C
Successfully allocated 101 UL TBFs
@@ -10591,38 +10591,38 @@ Going to test assignment with many connections, algorithm dynamic
TBF[25] class 26 reserves ...CD...
TBF[10] class 27 reserves ......C.
TBF[21] class 28 reserves ...C....
- TBF[12] class 29 reserves ....C...
- TBF[11] class 1 reserves ......C.
+ TBF[11] class 29 reserves ......C.
+ TBF[12] class 1 reserves ....C...
TBF[22] class 2 reserves ...C....
- TBF[13] class 3 reserves ....C...
- TBF[12] class 4 reserves ......C.
+ TBF[12] class 3 reserves ......C.
+ TBF[13] class 4 reserves ....C...
TBF[24] class 5 reserves ...C....
- TBF[18] class 6 reserves ....C...
- TBF[13] class 7 reserves ......C.
- TBF[19] class 8 reserves .......C
+ TBF[13] class 6 reserves ......C.
+ TBF[19] class 7 reserves .......C
+ TBF[18] class 8 reserves ....C...
TBF[26] class 9 reserves ...C....
- TBF[19] class 10 reserves ....C...
- TBF[18] class 11 reserves ......C.
- TBF[20] class 12 reserves .......C
+ TBF[18] class 10 reserves ......C.
+ TBF[20] class 11 reserves .......C
+ TBF[19] class 12 reserves ....C...
TBF[27] class 13 reserves ...C....
- TBF[26] class 14 reserves ....C...
- TBF[19] class 15 reserves ......C.
- TBF[21] class 16 reserves .......C
+ TBF[19] class 14 reserves ......C.
+ TBF[21] class 15 reserves .......C
+ TBF[26] class 16 reserves ....C...
TBF[28] class 17 reserves ...C....
TBF[19] class 18 reserves .....C..
- TBF[29] class 19 reserves ....C...
- TBF[20] class 20 reserves ......C.
- TBF[23] class 21 reserves .......C
+ TBF[20] class 19 reserves ......C.
+ TBF[23] class 20 reserves .......C
+ TBF[29] class 21 reserves ....C...
TBF[29] class 22 reserves ...C....
TBF[25] class 23 reserves .....C..
- TBF[30] class 24 reserves ....C...
- TBF[21] class 25 reserves ......C.
- TBF[24] class 26 reserves .......C
+ TBF[21] class 24 reserves ......C.
+ TBF[24] class 25 reserves .......C
+ TBF[30] class 26 reserves ....C...
TBF[30] class 27 reserves ...C....
TBF[31] class 28 reserves .....C..
- TBF[31] class 29 reserves ....C...
- TBF[23] class 1 reserves ......C.
- TBF[25] class 2 reserves .......C
+ TBF[23] class 29 reserves ......C.
+ TBF[25] class 1 reserves .......C
+ TBF[31] class 2 reserves ....C...
TBF[31] class 3 reserves ...C....
TBF[25] class 4 reserves ......C.
TBF[28] class 5 reserves .......C