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....