From fa5d2f5e22b6a0a68140b92a71fd9a722a4ae2f0 Mon Sep 17 00:00:00 2001
From: Lionel Gauthier <lionel.gauthier@eurecom.fr>
Date: Thu, 28 May 2015 13:08:53 +0000
Subject: [PATCH] Add subframe in some proc calls

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7480 818b1a75-f10b-46b9-bf7c-635c3b92a50f
---
 openair1/SCHED/phy_procedures_lte_eNb.c       |  6 +-
 openair2/COMMON/commonDef.h                   | 57 +++++++++++++++++++
 openair2/COMMON/mac_messages_types.h          |  4 ++
 openair2/LAYER2/MAC/eNB_scheduler_ulsch.c     | 14 +++--
 openair2/LAYER2/MAC/proto.h                   |  2 +-
 openair2/LAYER2/MAC/rar_tools.c               |  4 +-
 openair2/LAYER2/MAC/ue_procedures.c           | 18 +++---
 openair2/PHY_INTERFACE/defs.h                 |  2 +-
 .../L2_INTERFACE/openair_rrc_L2_interface.c   |  3 +-
 .../L2_INTERFACE/openair_rrc_L2_interface.h   |  1 +
 openair2/RRC/LITE/L2_interface.c              | 25 ++++----
 openair2/RRC/LITE/proto.h                     |  1 +
 12 files changed, 102 insertions(+), 35 deletions(-)

diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index ed6737a884..b3cf48c5a6 100755
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -3639,7 +3639,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
 #endif
           mac_xface->rx_sdu(phy_vars_eNB->Mod_id,
                             phy_vars_eNB->CC_id,
-                            frame,
+                            frame,subframe,
                             phy_vars_eNB->ulsch_eNB[i]->rnti,
                             phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b,
                             phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3,
@@ -3717,7 +3717,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
           //    if (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->calibration_flag == 0) {
           mac_xface->rx_sdu(phy_vars_eNB->Mod_id,
                             phy_vars_eNB->CC_id,
-                            frame,
+                            frame,subframe,
                             phy_vars_eNB->ulsch_eNB[i]->rnti,
                             phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b,
                             phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3,
@@ -4207,7 +4207,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
           if (phy_vars_eNB->cba_last_reception[i%num_active_cba_groups] == 0 ) {
             mac_xface->rx_sdu(phy_vars_eNB->Mod_id,
                               phy_vars_eNB->CC_id,
-                              frame,
+                              frame,subframe,
                               phy_vars_eNB->ulsch_eNB[i]->rnti,
                               phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b,
                               phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3,
diff --git a/openair2/COMMON/commonDef.h b/openair2/COMMON/commonDef.h
index d3efb9bb07..5c094d10fc 100644
--- a/openair2/COMMON/commonDef.h
+++ b/openair2/COMMON/commonDef.h
@@ -136,6 +136,32 @@ typedef struct {
   } u;
 } imsi_t;
 
+#define NAS_IMSI2STR(iMsI_t_PtR,iMsI_sTr, MaXlEn) \
+        {\
+          int l_offset = 0;\
+          int l_ret    = 0;\
+          l_ret = snprintf(iMsI_sTr + l_offset, MaXlEn - l_offset, "%u%u%u%u%u",\
+	    		  iMsI_t_PtR->u.num.digit1, iMsI_t_PtR->u.num.digit2,\
+	    		  iMsI_t_PtR->u.num.digit3, iMsI_t_PtR->u.num.digit4,\
+	    		  iMsI_t_PtR->u.num.digit5);\
+	      if ((iMsI_t_PtR->u.num.digit6 != 0xf)  && (l_ret > 0)) {\
+	    	l_offset += l_ret;\
+	    	l_ret = snprintf(iMsI_sTr + l_offset, MaXlEn - l_offset,  "%u", iMsI_t_PtR->u.num.digit6);\
+	      }\
+	      if (l_ret > 0) {\
+	    	l_offset += l_ret;\
+	    	l_ret = snprintf(iMsI_sTr + l_offset, MaXlEn - l_offset, "%u%u%u%u%u%u%u%u",\
+	    		  iMsI_t_PtR->u.num.digit7, iMsI_t_PtR->u.num.digit8,\
+	    		  iMsI_t_PtR->u.num.digit9, iMsI_t_PtR->u.num.digit10,\
+	    		  iMsI_t_PtR->u.num.digit11, iMsI_t_PtR->u.num.digit12,\
+	    		  iMsI_t_PtR->u.num.digit13, iMsI_t_PtR->u.num.digit14);\
+	      }\
+	      if ((iMsI_t_PtR->u.num.digit15 != 0xf)   && (l_ret > 0)) {\
+	    	l_offset += l_ret;\
+	    	l_ret = snprintf(iMsI_sTr + l_offset, MaXlEn - l_offset, "%u", iMsI_t_PtR->u.num.digit15);\
+	      }\
+	    }
+
 /*
  * Mobile subscriber dialing number
  */
@@ -230,6 +256,37 @@ typedef struct {
   UInt32_t m_tmsi;    /* M-Temporary Mobile Subscriber Identity   */
 } GUTI_t;
 
+#define GUTI2STR(GuTi_PtR, GuTi_StR, MaXlEn) \
+        {\
+          int l_offset = 0;\
+          int l_ret    = 0;\
+          l_ret += snprintf(GuTi_StR + l_offset,MaXlEn-l_offset, "%03u.",\
+	    		  GuTi_PtR->gummei.plmn.MCCdigit3 * 100 +\
+                  GuTi_PtR->gummei.plmn.MCCdigit2 * 10 +\
+                  GuTi_PtR->gummei.plmn.MCCdigit1);\
+          if (l_ret > 0) {\
+        	l_offset += l_ret;\
+          }  else {\
+        	l_offset = MaXlEn;\
+          }\
+          if (GuTi_PtR->gummei.plmn.MNCdigit1 != 0xf) {\
+              l_ret += snprintf(GuTi_StR + l_offset,MaXlEn-l_offset, "%03u|%04x|%02x|%08x",\
+    	    		  GuTi_PtR->gummei.plmn.MNCdigit3 * 100 +\
+                      GuTi_PtR->gummei.plmn.MNCdigit2 * 10 +\
+                      GuTi_PtR->gummei.plmn.MNCdigit1,\
+                      GuTi_PtR->gummei.MMEgid,\
+                      GuTi_PtR->gummei.MMEcode,\
+                      GuTi_PtR->m_tmsi);\
+          } else {\
+              l_ret += snprintf(GuTi_StR + l_offset,MaXlEn-l_offset, "%02u|%04x|%02x|%08x",\
+                      GuTi_PtR->gummei.plmn.MNCdigit2 * 10 +\
+                      GuTi_PtR->gummei.plmn.MNCdigit1,\
+                      GuTi_PtR->gummei.MMEgid,\
+                      GuTi_PtR->gummei.MMEcode,\
+                      GuTi_PtR->m_tmsi);\
+	    }
+
+
 /* Checks PLMN validity */
 #define PLMN_IS_VALID(plmn) (((plmn).MCCdigit1 &    \
                               (plmn).MCCdigit2 &    \
diff --git a/openair2/COMMON/mac_messages_types.h b/openair2/COMMON/mac_messages_types.h
index 9de402edb5..9b8bac373f 100644
--- a/openair2/COMMON/mac_messages_types.h
+++ b/openair2/COMMON/mac_messages_types.h
@@ -61,6 +61,7 @@
 // Messages between RRC and MAC layers
 typedef struct RrcMacInSyncInd_s {
   uint32_t  frame;
+  uint8_t   sub_frame;
   uint16_t  enb_index;
 } RrcMacInSyncInd;
 
@@ -75,6 +76,7 @@ typedef struct RrcMacBcchDataReq_s {
 
 typedef struct RrcMacBcchDataInd_s {
   uint32_t  frame;
+  uint8_t   sub_frame;
   uint32_t  sdu_size;
   uint8_t   sdu[BCCH_SDU_SIZE];
   uint8_t   enb_index;
@@ -95,6 +97,7 @@ typedef struct RrcMacCcchDataCnf_s {
 
 typedef struct RrcMacCcchDataInd_s {
   uint32_t  frame;
+  uint8_t   sub_frame;
   uint16_t  rnti;
   uint32_t  sdu_size;
   uint8_t   sdu[CCCH_SDU_SIZE];
@@ -112,6 +115,7 @@ typedef struct RrcMacMcchDataReq_s {
 
 typedef struct RrcMacMcchDataInd_s {
   uint32_t  frame;
+  uint8_t   sub_frame;
   uint32_t  sdu_size;
   uint8_t   sdu[MCCH_SDU_SIZE];
   uint8_t   enb_index;
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
index 0191317e6e..a70a7eae9b 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
@@ -73,6 +73,7 @@ void rx_sdu(
   const module_id_t enb_mod_idP,
   const int         CC_idP,
   const frame_t     frameP,
+  const sub_frame_t subframeP,
   const rnti_t      rntiP,
   uint8_t          *sduP,
   const uint16_t    sdu_lenP,
@@ -96,8 +97,14 @@ void rx_sdu(
     }
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU,1);
+  if (opt_enabled == 1) {
+    trace_pdu(0, sduP,sdu_lenP, 0, 2, rntiP,frameP, 0,0);
+    LOG_D(OPT,"[eNB %d][ULSCH] Frame %d  rnti %x  with size %d\n",
+    		  enb_mod_idP, frameP, rntiP, rx_lengths[ii]);
+  }
 
   LOG_D(MAC,"[eNB %d] CC_id %d Received ULSCH sdu from PHY (rnti %x, UE_id %d), parsing header\n",enb_mod_idP,CC_idP,rntiP,UE_id);
+
   payload_ptr = parse_ulsch_header(sduP,&num_ce,&num_sdu,rx_ces,rx_lcids,rx_lengths,sdu_lenP);
 
   // control element
@@ -230,7 +237,7 @@ void rx_sdu(
             mac_rrc_data_ind(
               enb_mod_idP,
               CC_idP,
-              frameP,
+              frameP,subframeP,
               rntiP,
               CCCH,
               (uint8_t*)payload_ptr,
@@ -247,9 +254,7 @@ void rx_sdu(
           eNB->common_channels[CC_idP].RA_template[ii].generate_Msg4 = 1;
           eNB->common_channels[CC_idP].RA_template[ii].wait_ack_Msg4 = 0;
 
-
         } // if process is active
-
       } // loop on RA processes
 
       break;
@@ -276,7 +281,7 @@ void rx_sdu(
         mac_rlc_data_ind(
           enb_mod_idP,
           rntiP,
-	  enb_mod_idP,
+	      enb_mod_idP,
           frameP,
           ENB_FLAG_YES,
           MBMS_FLAG_NO,
@@ -287,7 +292,6 @@ void rx_sdu(
           NULL);//(unsigned int*)crc_status);
         UE_list->eNB_UE_stats[CC_idP][UE_id].num_pdu_rx[rx_lcids[i]]+=1;
         UE_list->eNB_UE_stats[CC_idP][UE_id].num_bytes_rx[rx_lcids[i]]+=rx_lengths[i];
-
       }
 
       //      }
diff --git a/openair2/LAYER2/MAC/proto.h b/openair2/LAYER2/MAC/proto.h
index ed6b168300..c9a00e09fe 100644
--- a/openair2/LAYER2/MAC/proto.h
+++ b/openair2/LAYER2/MAC/proto.h
@@ -275,7 +275,7 @@ void cancel_ra_proc(module_id_t module_idP,int CC_id,frame_t frameP, uint16_t pr
 @param harq_pid Index of harq process corresponding to this sdu
 @param msg3_flag flag indicating that this sdu is msg3
 */
-void rx_sdu(const module_id_t module_idP, const int CC_id,const frame_t frameP, const rnti_t rnti, uint8_t *sdu, const uint16_t sdu_len, const int harq_pid,uint8_t *msg3_flag);
+void rx_sdu(const module_id_t module_idP, const int CC_id,const frame_t frameP, const sub_frame_t subframeP, const rnti_t rnti, uint8_t *sdu, const uint16_t sdu_len, const int harq_pid,uint8_t *msg3_flag);
 
 /* \brief Function to indicate a scheduled schduling request (SR) was received by eNB.
 @param Mod_id Instance ID of eNB
diff --git a/openair2/LAYER2/MAC/rar_tools.c b/openair2/LAYER2/MAC/rar_tools.c
index 3b960c2cca..fb6dc870e6 100644
--- a/openair2/LAYER2/MAC/rar_tools.c
+++ b/openair2/LAYER2/MAC/rar_tools.c
@@ -123,9 +123,8 @@ unsigned short fill_rar(
         eNB_mac_inst[module_idP].common_channels[CC_id].RA_template[ra_idx].rnti,
         rarh->RAPID,eNB_mac_inst[module_idP].common_channels[CC_id].RA_template[0].preamble_index,
         eNB_mac_inst[module_idP].common_channels[CC_id].RA_template[ra_idx].timing_offset);
-#if defined(USER_MODE) && defined(OAI_EMU)
 
-  if (oai_emulation.info.opt_enabled) {
+  if (opt_enabled) {
     trace_pdu(1, dlsch_buffer, input_buffer_length, module_idP, 2, 1,
               eNB_mac_inst[module_idP].subframe, 0, 0);
     LOG_D(OPT,"[eNB %d][RAPROC] CC_id %d RAR Frame %d trace pdu for rnti %x and  rapid %d size %d\n",
@@ -133,7 +132,6 @@ unsigned short fill_rar(
           rarh->RAPID, input_buffer_length);
   }
 
-#endif
   return(eNB_mac_inst[module_idP].common_channels[CC_id].RA_template[ra_idx].rnti);
 }
 
diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c
index 053d78052c..ceaa663537 100644
--- a/openair2/LAYER2/MAC/ue_procedures.c
+++ b/openair2/LAYER2/MAC/ue_procedures.c
@@ -322,14 +322,12 @@ ue_send_sdu(
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_SDU, VCD_FUNCTION_IN);
 
   LOG_T(MAC,"sdu: %x.%x.%x\n",sdu[0],sdu[1],sdu[2]);
-#if defined(USER_MODE) && defined(OAI_EMU)
 
-  if (oai_emulation.info.opt_enabled) {
+  if (opt_enabled) {
     trace_pdu(1, sdu, sdu_len, module_idP, 3, UE_mac_inst[module_idP].crnti,
               UE_mac_inst[module_idP].subframe, 0, 0);
   }
 
-#endif
   payload_ptr = parse_header(sdu,&num_ce,&num_sdu,rx_ces,rx_lcids,rx_lengths,sdu_len);
 
 #ifdef DEBUG_HEADER_PARSING
@@ -422,7 +420,7 @@ ue_send_sdu(
 #endif
       mac_rrc_data_ind(module_idP,
                        CC_id,
-                       frameP,
+                       frameP,0, // unknown subframe
                        UE_mac_inst[module_idP].crnti,
                        CCCH,
                        (uint8_t*)payload_ptr,
@@ -500,7 +498,7 @@ void ue_decode_si(module_id_t module_idP,int CC_id,frame_t frameP, uint8_t eNB_i
 
   mac_rrc_data_ind(module_idP,
                    CC_id,
-                   frameP,
+                   frameP,0, // unknown subframe
                    SI_RNTI,
                    BCCH,
                    (uint8_t *)pdu,
@@ -593,7 +591,7 @@ void ue_send_mch_sdu(module_id_t module_idP, uint8_t CC_id, frame_t frameP, uint
       LOG_I(MAC,"[UE %d] Frame %d : SDU %d MCH->MCCH for sync area %d (eNB %d, %d bytes)\n",module_idP,frameP, i, sync_area, eNB_index, rx_lengths[i]);
       mac_rrc_data_ind(module_idP,
                        CC_id,
-                       frameP,
+                       frameP,0, // unknown subframe
                        M_RNTI,
                        MCCH,
                        payload_ptr, rx_lengths[i], 0, eNB_index, sync_area);
@@ -1449,15 +1447,13 @@ void ue_get_sdu(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_t subf
     ulsch_buffer[payload_offset+sdu_length_total+j] = (char)(taus()&0xff);
   }
 
-#if defined(USER_MODE) && defined(OAI_EMU)
 
-  if (oai_emulation.info.opt_enabled) {
+  if (opt_enabled) {
     trace_pdu(0, ulsch_buffer, buflen, module_idP, 3, UE_mac_inst[module_idP].crnti, subframe, 0, 0);
+    LOG_D(OPT,"[UE %d][ULSCH] Frame %d trace pdu for rnti %x  with size %d\n",
+          module_idP, frameP, UE_mac_inst[module_idP].crnti, buflen);
   }
 
-  LOG_D(OPT,"[UE %d][ULSCH] Frame %d trace pdu for rnti %x  with size %d\n",
-        module_idP, frameP, UE_mac_inst[module_idP].crnti, buflen);
-#endif
 
   LOG_D(MAC,"[UE %d][SR] Gave SDU to PHY, clearing any scheduling request\n",
         module_idP,payload_offset, sdu_length_total);
diff --git a/openair2/PHY_INTERFACE/defs.h b/openair2/PHY_INTERFACE/defs.h
index 003ed636df..4eddea349e 100755
--- a/openair2/PHY_INTERFACE/defs.h
+++ b/openair2/PHY_INTERFACE/defs.h
@@ -87,7 +87,7 @@ typedef struct {
   uint8_t* (*get_dlsch_sdu)(module_id_t Mod_id,int CC_id,frame_t frameP,rnti_t rnti,uint8_t TB_index);
 
   /// Send ULSCH sdu to MAC for given rnti
-  void (*rx_sdu)(module_id_t Mod_id,int CC_id,frame_t frameP,rnti_t rnti, uint8_t *sdu,uint16_t sdu_len, int harq_pid,uint8_t *msg3_flag);
+  void (*rx_sdu)(module_id_t Mod_id,int CC_id,frame_t frameP, sub_frame_t sub_frameP,rnti_t rnti, uint8_t *sdu,uint16_t sdu_len, int harq_pid,uint8_t *msg3_flag);
 
   /// Indicate failure to synch to external source
   void (*mrbch_phy_sync_failure) (module_id_t Mod_id,frame_t frameP, uint8_t free_eNB_index);
diff --git a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c
index 203dc43650..fe71e4bd4c 100644
--- a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c
+++ b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c
@@ -120,6 +120,7 @@ mac_rrc_data_ind(
   const module_id_t     module_idP,
   const int             CC_idP,
   const frame_t         frameP,
+  const sub_frame_t     subframeP,
   const rnti_t          rntiP,
   const rb_id_t         srb_idP,
   const uint8_t        *sduP,
@@ -133,7 +134,7 @@ mac_rrc_data_ind(
   return(mac_rrc_lite_data_ind(
            module_idP,
            CC_idP,
-           frameP,
+           frameP,subframeP,
            rntiP,
            srb_idP,
            sduP,
diff --git a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h
index c7c4b02fe0..15807ddb83 100644
--- a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h
+++ b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h
@@ -59,6 +59,7 @@ mac_rrc_data_ind(
   const module_id_t     module_idP,
   const int             CC_idP,
   const frame_t         frameP,
+  const sub_frame_t     sub_frameP,
   const rnti_t          rntiP,
   const rb_id_t         srb_idP,
   const uint8_t        *sduP,
diff --git a/openair2/RRC/LITE/L2_interface.c b/openair2/RRC/LITE/L2_interface.c
index 5d21bfc02c..738a30aab0 100644
--- a/openair2/RRC/LITE/L2_interface.c
+++ b/openair2/RRC/LITE/L2_interface.c
@@ -341,6 +341,7 @@ mac_rrc_lite_data_ind(
   const module_id_t     module_idP,
   const int             CC_id,
   const frame_t         frameP,
+  const sub_frame_t     sub_frameP,
   const rnti_t          rntiP,
   const rb_id_t         srb_idP,
   const uint8_t*        sduP,
@@ -357,7 +358,7 @@ mac_rrc_lite_data_ind(
   /*
   int si_window;
    */
-  PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, eNB_flagP, rntiP, frameP, 0,eNB_indexP);
+  PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, eNB_flagP, rntiP, frameP, sub_frameP,eNB_indexP);
 
   if(eNB_flagP == ENB_FLAG_NO) {
     if(srb_idP == BCCH) {
@@ -377,12 +378,13 @@ mac_rrc_lite_data_ind(
 
         message_p = itti_alloc_new_message (TASK_MAC_UE, RRC_MAC_BCCH_DATA_IND);
         memset (RRC_MAC_BCCH_DATA_IND (message_p).sdu, 0, BCCH_SDU_SIZE);
-        RRC_MAC_BCCH_DATA_IND (message_p).frame = frameP;
-        RRC_MAC_BCCH_DATA_IND (message_p).sdu_size = sdu_size;
+        RRC_MAC_BCCH_DATA_IND (message_p).frame     = frameP;
+        RRC_MAC_BCCH_DATA_IND (message_p).sub_frame = sub_frameP;
+        RRC_MAC_BCCH_DATA_IND (message_p).sdu_size  = sdu_size;
         memcpy (RRC_MAC_BCCH_DATA_IND (message_p).sdu, sduP, sdu_size);
         RRC_MAC_BCCH_DATA_IND (message_p).enb_index = eNB_indexP;
-        RRC_MAC_BCCH_DATA_IND (message_p).rsrq = 30 /* TODO change phy to report rspq */;
-        RRC_MAC_BCCH_DATA_IND (message_p).rsrp = 45 /* TODO change phy to report rspp */;
+        RRC_MAC_BCCH_DATA_IND (message_p).rsrq      = 30 /* TODO change phy to report rspq */;
+        RRC_MAC_BCCH_DATA_IND (message_p).rsrp      = 45 /* TODO change phy to report rspp */;
 
         itti_send_msg_to_task (TASK_RRC_UE, ctxt.instance, message_p);
       }
@@ -410,8 +412,9 @@ mac_rrc_lite_data_ind(
           message_p = itti_alloc_new_message (TASK_MAC_UE, RRC_MAC_CCCH_DATA_IND);
           memset (RRC_MAC_CCCH_DATA_IND (message_p).sdu, 0, CCCH_SDU_SIZE);
           memcpy (RRC_MAC_CCCH_DATA_IND (message_p).sdu, sduP, sdu_size);
-          RRC_MAC_CCCH_DATA_IND (message_p).frame = frameP;
-          RRC_MAC_CCCH_DATA_IND (message_p).sdu_size = sdu_size;
+          RRC_MAC_CCCH_DATA_IND (message_p).frame     = frameP;
+          RRC_MAC_CCCH_DATA_IND (message_p).sub_frame = sub_frameP;
+          RRC_MAC_CCCH_DATA_IND (message_p).sdu_size  = sdu_size;
           RRC_MAC_CCCH_DATA_IND (message_p).enb_index = eNB_indexP;
           RRC_MAC_CCCH_DATA_IND (message_p).rnti      = rntiP;
           itti_send_msg_to_task (TASK_RRC_UE, ctxt.instance, message_p);
@@ -443,6 +446,7 @@ mac_rrc_lite_data_ind(
 
         message_p = itti_alloc_new_message (TASK_MAC_UE, RRC_MAC_MCCH_DATA_IND);
         RRC_MAC_MCCH_DATA_IND (message_p).frame           = frameP;
+        RRC_MAC_MCCH_DATA_IND (message_p).sub_frame       = sub_frameP;
         RRC_MAC_MCCH_DATA_IND (message_p).sdu_size        = sdu_lenP;
         memset (RRC_MAC_MCCH_DATA_IND (message_p).sdu, 0, MCCH_SDU_SIZE);
         memcpy (RRC_MAC_MCCH_DATA_IND (message_p).sdu, sduP, sdu_lenP);
@@ -474,9 +478,10 @@ mac_rrc_lite_data_ind(
       }
 
       message_p = itti_alloc_new_message (TASK_MAC_ENB, RRC_MAC_CCCH_DATA_IND);
-      RRC_MAC_CCCH_DATA_IND (message_p).frame = frameP;
-      RRC_MAC_CCCH_DATA_IND (message_p).rnti  = rntiP;
-      RRC_MAC_CCCH_DATA_IND (message_p).sdu_size = sdu_size;
+      RRC_MAC_CCCH_DATA_IND (message_p).frame     = frameP;
+      RRC_MAC_CCCH_DATA_IND (message_p).sub_frame = sub_frameP;
+      RRC_MAC_CCCH_DATA_IND (message_p).rnti      = rntiP;
+      RRC_MAC_CCCH_DATA_IND (message_p).sdu_size  = sdu_size;
       RRC_MAC_CCCH_DATA_IND (message_p).CC_id = CC_id;
       memset (RRC_MAC_CCCH_DATA_IND (message_p).sdu, 0, CCCH_SDU_SIZE);
       memcpy (RRC_MAC_CCCH_DATA_IND (message_p).sdu, sduP, sdu_size);
diff --git a/openair2/RRC/LITE/proto.h b/openair2/RRC/LITE/proto.h
index c87df0fa4c..398c126653 100644
--- a/openair2/RRC/LITE/proto.h
+++ b/openair2/RRC/LITE/proto.h
@@ -312,6 +312,7 @@ mac_rrc_lite_data_ind(
   const module_id_t     module_idP,
   const int         CC_id,
   const frame_t         frameP,
+  const sub_frame_t     sub_frameP,
   const rnti_t          rntiP,
   const rb_id_t         srb_idP,
   const uint8_t*        sduP,
-- 
GitLab