diff options
-rw-r--r-- | src/gprs_rlcmac_ts_alloc.cpp | 18 | ||||
-rw-r--r-- | tests/alloc/AllocTest.ok | 112 |
2 files changed, 73 insertions, 57 deletions
diff --git a/src/gprs_rlcmac_ts_alloc.cpp b/src/gprs_rlcmac_ts_alloc.cpp index ffbbe2b..e2c2a0f 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 542c74b..046b51a 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 |