From 4d685a00360a9e62a64ce85931ec098cc4600421 Mon Sep 17 00:00:00 2001
From: matzakos <panagiotis.matzakos@eurecom.fr>
Date: Tue, 2 Mar 2021 20:15:46 +0100
Subject: [PATCH] Proper separation of handling DCCH SRB1 and DTCH LCIDs at MAC
 gNB

-Remove redundant calls to mac_rlc_data_ind for DTCH case
---
 .../LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c   | 117 ++++++++----------
 1 file changed, 54 insertions(+), 63 deletions(-)

diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
index 289f0268dd..db775f458f 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
@@ -179,6 +179,29 @@ void nr_process_mac_pdu(
         	//  end of MAC PDU, can ignore the rest.
         	break;
 
+        case UL_SCH_LCID_SRB1:
+          if(((NR_MAC_SUBHEADER_SHORT *)pdu_ptr)->F){
+            //mac_sdu_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pdu_ptr)->L2)<<8;
+            mac_subheader_len = 3;
+            mac_sdu_len = ((uint16_t)(((NR_MAC_SUBHEADER_LONG *) pdu_ptr)->L1 & 0x7f) << 8)
+                | ((uint16_t)((NR_MAC_SUBHEADER_LONG *) pdu_ptr)->L2 & 0xff);
+          } else {
+            mac_sdu_len = (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pdu_ptr)->L;
+            mac_subheader_len = 2;
+          }
+          LOG_I(MAC, "[UE %d] Frame %d : ULSCH -> UL-DCCH %d (gNB %d, %d bytes), rnti: %d \n", module_idP, frameP, rx_lcid, module_idP, mac_sdu_len, rnti);
+          mac_rlc_data_ind(module_idP,
+              rnti,
+              module_idP,
+              frameP,
+              ENB_FLAG_YES,
+              MBMS_FLAG_NO,
+              rx_lcid,
+              (char *) (pdu_ptr + mac_subheader_len),
+              mac_sdu_len,
+              1,
+              NULL);
+          break;
        case UL_SCH_LCID_SRB2:
               // todo
               break;
@@ -192,70 +215,38 @@ void nr_process_mac_pdu(
               // todo
               mac_subheader_len = 2;
               break;
-
-        // MAC SDUs
-        case UL_SCH_LCID_SRB1:
-          //break;
         case UL_SCH_LCID_DTCH:
-                //  check if LCID is valid at current time.
-                if(((NR_MAC_SUBHEADER_SHORT *)pdu_ptr)->F){
-                    //mac_sdu_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pdu_ptr)->L2)<<8;
-                    mac_subheader_len = 3;
-                    mac_sdu_len = ((uint16_t)(((NR_MAC_SUBHEADER_LONG *) pdu_ptr)->L1 & 0x7f) << 8)
-                    | ((uint16_t)((NR_MAC_SUBHEADER_LONG *) pdu_ptr)->L2 & 0xff);
-
-                } else {
-                  mac_sdu_len = (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pdu_ptr)->L;
-                  mac_subheader_len = 2;
-                }
-
-                LOG_I(MAC, "[UE %d] Frame %d : ULSCH -> UL-DTCH %d (gNB %d, %d bytes)\n", module_idP, frameP, rx_lcid, module_idP, mac_sdu_len);
-		int UE_id = find_nr_UE_id(module_idP, rnti);
-		RC.nrmac[module_idP]->UE_info.mac_stats[UE_id].lc_bytes_rx[rx_lcid] += mac_sdu_len;
-                #if defined(ENABLE_MAC_PAYLOAD_DEBUG)
-		    log_dump(MAC, pdu_ptr + mac_subheader_len, 32, LOG_DUMP_CHAR, "\n");
-
-                #endif
-                if(IS_SOFTMODEM_NOS1){
-                  mac_rlc_data_ind(module_idP,
-                      0x1234,
-                      module_idP,
-                      frameP,
-                      ENB_FLAG_YES,
-                      MBMS_FLAG_NO,
-                      rx_lcid,
-                      (char *) (pdu_ptr + mac_subheader_len),
-                      mac_sdu_len,
-                      1,
-                      NULL);
-                }
-                else{
-                  mac_rlc_data_ind(module_idP,
-                      0x1234,
-                      module_idP,
-                      frameP,
-                      ENB_FLAG_YES,
-                      MBMS_FLAG_NO,
-                      rx_lcid,
-                      (char *) (pdu_ptr + mac_subheader_len),
-                      mac_sdu_len,
-                      1,
-                      NULL);
-                }
-
-                mac_rlc_data_ind(module_idP,
-                                 rnti,
-                                 module_idP,
-                                 frameP,
-                                 ENB_FLAG_YES,
-                                 MBMS_FLAG_NO,
-                                 rx_lcid,
-                                 (char *) (pdu_ptr + mac_subheader_len),
-                                 mac_sdu_len,
-                                 1,
-                                 NULL);
-
-            break;
+          //  check if LCID is valid at current time.
+          if(((NR_MAC_SUBHEADER_SHORT *)pdu_ptr)->F){
+            //mac_sdu_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pdu_ptr)->L2)<<8;
+            mac_subheader_len = 3;
+            mac_sdu_len = ((uint16_t)(((NR_MAC_SUBHEADER_LONG *) pdu_ptr)->L1 & 0x7f) << 8)
+                        | ((uint16_t)((NR_MAC_SUBHEADER_LONG *) pdu_ptr)->L2 & 0xff);
+
+          } else {
+            mac_sdu_len = (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pdu_ptr)->L;
+            mac_subheader_len = 2;
+          }
+
+          LOG_I(MAC, "[UE %d] Frame %d : ULSCH -> UL-DTCH %d (gNB %d, %d bytes)\n", module_idP, frameP, rx_lcid, module_idP, mac_sdu_len);
+          int UE_id = find_nr_UE_id(module_idP, rnti);
+          RC.nrmac[module_idP]->UE_info.mac_stats[UE_id].lc_bytes_rx[rx_lcid] += mac_sdu_len;
+          #if defined(ENABLE_MAC_PAYLOAD_DEBUG)
+          log_dump(MAC, pdu_ptr + mac_subheader_len, 32, LOG_DUMP_CHAR, "\n");
+
+          #endif
+          mac_rlc_data_ind(module_idP,
+              rnti,
+              module_idP,
+              frameP,
+              ENB_FLAG_YES,
+              MBMS_FLAG_NO,
+              rx_lcid,
+              (char *) (pdu_ptr + mac_subheader_len),
+              mac_sdu_len,
+              1,
+              NULL);
+          break;
 
         default:
         	return;
-- 
2.26.2