alloc: Do not use masking for multislot class type 2 MS
Currently the masks are computed equally for each class type. This
does not make much sense for class type 2 MS, since those are capable
to work in full duplex mode.
This commit sets the masks to 0xff for class type 2 MS.
Sponsored-by: On-Waves ehf
diff --git a/src/gprs_rlcmac_ts_alloc.cpp b/src/gprs_rlcmac_ts_alloc.cpp
index f6d8647..b9d4e41 100644
--- a/src/gprs_rlcmac_ts_alloc.cpp
+++ b/src/gprs_rlcmac_ts_alloc.cpp
@@ -447,11 +447,19 @@
uint16_t tx_valid_win = (1 << num_tx) - 1;
uint8_t rx_mask[MASK_TR+1];
- rx_mask[MASK_TT] = (0x100 >> OSMO_MAX(Ttb, Tta)) - 1;
- rx_mask[MASK_TT] &= ~((1 << (Trb + num_tx)) - 1);
+ if (ms_class->type == 1) {
+ rx_mask[MASK_TT] = (0x100 >> OSMO_MAX(Ttb, Tta)) - 1;
+ rx_mask[MASK_TT] &= ~((1 << (Trb + num_tx)) - 1);
+ rx_mask[MASK_TR] = (0x100 >> Ttb) - 1;
+ rx_mask[MASK_TR] &=
+ ~((1 << (OSMO_MAX(Trb, Tra) + num_tx)) - 1);
+ } else {
+ /* Class type 2 MS have independant RX and TX */
+ rx_mask[MASK_TT] = 0xff;
+ rx_mask[MASK_TR] = 0xff;
+ }
+
rx_mask[MASK_TT] = (rx_mask[MASK_TT] << 3) | (rx_mask[MASK_TT] >> 5);
- rx_mask[MASK_TR] = (0x100 >> Ttb) - 1;
- rx_mask[MASK_TR] &= ~((1 << (OSMO_MAX(Trb, Tra) + num_tx)) - 1);
rx_mask[MASK_TR] = (rx_mask[MASK_TR] << 3) | (rx_mask[MASK_TR] >> 5);
/* Rotate group of TX slots: UUU-----, -UUU----, ..., UU-----U */
diff --git a/tests/alloc/AllocTest.ok b/tests/alloc/AllocTest.ok
index cdc6335..79b5dbf 100644
--- a/tests/alloc/AllocTest.ok
+++ b/tests/alloc/AllocTest.ok
@@ -449,15 +449,15 @@
PDCH[5] is control_ts for DL
PDCH[5] is first common for DL
Testing jolly example
-PDCH[2] is used for UL
-PDCH[2] is control_ts for UL
-PDCH[2] is first common for UL
+PDCH[1] is used for UL
+PDCH[1] is control_ts for UL
+PDCH[1] is first common for UL
PDCH[1] is used for DL
PDCH[2] is used for DL
PDCH[3] is used for DL
PDCH[4] is used for DL
-PDCH[2] is control_ts for DL
-PDCH[2] is first common for DL
+PDCH[1] is control_ts for DL
+PDCH[1] is first common for DL
Going to test multislot assignment MS_CLASS=15
Testing UL then DL assignment.
PDCH[5] is used for UL
@@ -481,15 +481,15 @@
PDCH[5] is control_ts for DL
PDCH[5] is first common for DL
Testing jolly example
-PDCH[2] is used for UL
-PDCH[2] is control_ts for UL
-PDCH[2] is first common for UL
+PDCH[1] is used for UL
+PDCH[1] is control_ts for UL
+PDCH[1] is first common for UL
PDCH[1] is used for DL
PDCH[2] is used for DL
PDCH[3] is used for DL
PDCH[4] is used for DL
-PDCH[2] is control_ts for DL
-PDCH[2] is first common for DL
+PDCH[1] is control_ts for DL
+PDCH[1] is first common for DL
Going to test multislot assignment MS_CLASS=16
Testing UL then DL assignment.
PDCH[5] is used for UL
@@ -513,15 +513,15 @@
PDCH[5] is control_ts for DL
PDCH[5] is first common for DL
Testing jolly example
-PDCH[2] is used for UL
-PDCH[2] is control_ts for UL
-PDCH[2] is first common for UL
+PDCH[1] is used for UL
+PDCH[1] is control_ts for UL
+PDCH[1] is first common for UL
PDCH[1] is used for DL
PDCH[2] is used for DL
PDCH[3] is used for DL
PDCH[4] is used for DL
-PDCH[2] is control_ts for DL
-PDCH[2] is first common for DL
+PDCH[1] is control_ts for DL
+PDCH[1] is first common for DL
Going to test multislot assignment MS_CLASS=17
Testing UL then DL assignment.
PDCH[5] is used for UL
@@ -545,15 +545,15 @@
PDCH[5] is control_ts for DL
PDCH[5] is first common for DL
Testing jolly example
-PDCH[2] is used for UL
-PDCH[2] is control_ts for UL
-PDCH[2] is first common for UL
+PDCH[1] is used for UL
+PDCH[1] is control_ts for UL
+PDCH[1] is first common for UL
PDCH[1] is used for DL
PDCH[2] is used for DL
PDCH[3] is used for DL
PDCH[4] is used for DL
-PDCH[2] is control_ts for DL
-PDCH[2] is first common for DL
+PDCH[1] is control_ts for DL
+PDCH[1] is first common for DL
Going to test multislot assignment MS_CLASS=18
Testing UL then DL assignment.
PDCH[5] is used for UL
@@ -577,15 +577,15 @@
PDCH[5] is control_ts for DL
PDCH[5] is first common for DL
Testing jolly example
-PDCH[2] is used for UL
-PDCH[2] is control_ts for UL
-PDCH[2] is first common for UL
+PDCH[1] is used for UL
+PDCH[1] is control_ts for UL
+PDCH[1] is first common for UL
PDCH[1] is used for DL
PDCH[2] is used for DL
PDCH[3] is used for DL
PDCH[4] is used for DL
-PDCH[2] is control_ts for DL
-PDCH[2] is first common for DL
+PDCH[1] is control_ts for DL
+PDCH[1] is first common for DL
Going to test multislot assignment MS_CLASS=19
Testing UL then DL assignment.
PDCH[5] is used for UL
@@ -8740,15 +8740,15 @@
TBF[12] class 13 reserves ...CDD..
TBF[13] class 14 reserves ....DCDD
TBF[14] class 15 reserves ...DDDDC
- TBF[15] class 16 reserves ...DDCDD
- TBF[16] class 17 reserves ...DDDCD
- TBF[17] class 18 reserves ...DDDDC
- TBF[18] class 19 reserves ...DCDD.
- TBF[19] class 20 reserves ....DCDD
- TBF[20] class 21 reserves ...DCDD.
- TBF[21] class 22 reserves ....DDCD
- TBF[22] class 23 reserves ...DCDD.
- TBF[23] class 24 reserves ....DCDD
+ TBF[15] class 16 reserves ...CDDDD
+ TBF[16] class 17 reserves ...DCDDD
+ TBF[17] class 18 reserves ...DDCDD
+ TBF[18] class 19 reserves ....DDCD
+ TBF[19] class 20 reserves ...DCDD.
+ TBF[20] class 21 reserves ....DCDD
+ TBF[21] class 22 reserves ...DCDD.
+ TBF[22] class 23 reserves ....DDCD
+ TBF[23] class 24 reserves ...DDCD.
TBF[24] class 25 reserves ....DDCD
TBF[25] class 26 reserves ...DCDD.
TBF[26] class 27 reserves ....DCDD
@@ -8756,7 +8756,7 @@
TBF[28] class 29 reserves .....DDC
TBF[29] class 1 reserves ...C....
TBF[30] class 2 reserves ......DC
- TBF[31] class 3 reserves ...C....
+ TBF[31] class 3 reserves ......DC
Successfully allocated 32 UL TBFs
Going to test assignment with many TBF, algorithm A (DL and UL)
TBF[0] class 1 reserves ...C....