From 43d12970a2cc4baff6e1ed7a9b1ac5bd548c3358 Mon Sep 17 00:00:00 2001
From: Cedric Roux <cedric.roux@eurecom.fr>
Date: Fri, 6 Oct 2017 16:40:27 +0200
Subject: [PATCH] bugfix: fix TX pdu_index usage (maybe still not correct)

---
 openair1/SCHED/fapi_l1.c                       | 3 ++-
 openair2/LAYER2/MAC/eNB_scheduler_RA.c         | 7 ++++---
 openair2/LAYER2/MAC/eNB_scheduler_dlsch.c      | 5 ++---
 openair2/LAYER2/MAC/eNB_scheduler_primitives.c | 4 ++--
 openair2/LAYER2/MAC/proto.h                    | 2 +-
 5 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/openair1/SCHED/fapi_l1.c b/openair1/SCHED/fapi_l1.c
index 02458f210e7..f54607c6b1a 100644
--- a/openair1/SCHED/fapi_l1.c
+++ b/openair1/SCHED/fapi_l1.c
@@ -651,7 +651,8 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
                   dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks);
       handle_nfapi_dlsch_pdu(eNB,proc,dl_config_pdu,
                              dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks-1,
-                             TX_req->tx_request_body.tx_pdu_list[dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index].segments[0].segment_data);
+                             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index == -1 ? NULL
+                               : TX_req->tx_request_body.tx_pdu_list[dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index].segments[0].segment_data);
       /*
       if (dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti == eNB->preamble_list[0].preamble_rel8.rnti) {// is RAR pdu
         LOG_D(PHY,"Frame %d, Subframe %d: Received LTE RAR pdu, programming based on UL Grant\n",frame,subframe);
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_RA.c b/openair2/LAYER2/MAC/eNB_scheduler_RA.c
index 6d1be4c4e69..8feedc983de 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_RA.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_RA.c
@@ -914,7 +914,7 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 	  fill_nfapi_dlsch_config(eNB,
 				  dl_req,
 				  RA_template->msg4_TBsize,
-				  eNB->pdu_index[CC_idP]++,
+				  eNB->pdu_index[CC_idP],
 				  RA_template->rnti,
 				  2,                           // resource_allocation_type : format 1A/1B/1D
 				  0,                           // virtual_resource_block_assignment_flag : localized
@@ -940,8 +940,9 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 	  eNB->TX_req[CC_idP].sfn_sf = fill_nfapi_tx_req(&eNB->TX_req[CC_idP].tx_request_body,
 							 (frameP*10)+subframeP,
 							 rrc_sdu_length,
-							 &eNB->pdu_index[CC_idP],
+							 eNB->pdu_index[CC_idP],
 							 eNB->UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0]); 
+	  eNB->pdu_index[CC_idP]++;
 
 	  LOG_D(MAC,"Filling UCI ACK/NAK information, cce_idx %d\n",dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.cce_idx);
 	  // Program PUCCH1a for ACK/NAK
@@ -1073,7 +1074,7 @@ void check_Msg4_retransmission(module_id_t module_idP,int CC_idP,frame_t frameP,
 	    fill_nfapi_dlsch_config(eNB,
 				    dl_req,
 				    RA_template->msg4_TBsize,
-				    eNB->pdu_index[CC_idP]++,
+				    -1                           /* retransmission, no pdu_index */,
 				    RA_template->rnti,
 				    2,                           // resource_allocation_type : format 1A/1B/1D
 				    0,                           // virtual_resource_block_assignment_flag : localized
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
index a59fdb7750a..d3d63400fa6 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
@@ -753,7 +753,7 @@ schedule_ue_spec(
 
 	      fill_nfapi_dlsch_config(eNB,dl_req,
 				      TBS,
-				      eNB->pdu_index[CC_id],
+				      -1            /* retransmission, no pdu_index */,
 				      rnti,
 				      0, // type 0 allocation from 7.1.6 in 36.213
 				      0, // virtual_resource_block_assignment_flag, unused here
@@ -778,7 +778,6 @@ schedule_ue_spec(
 
 	      LOG_D(MAC,"Filled NFAPI configuration for DCI/DLSCH %d, retransmission round %d\n",eNB->pdu_index[CC_id],round);
 
-	      eNB->pdu_index[CC_id]++;
 	      program_dlsch_acknak(module_idP,CC_id,UE_id,frameP,subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.cce_idx);
 	      // No TX request for retransmission (check if null request for FAPI)
 	    }
@@ -1277,7 +1276,7 @@ schedule_ue_spec(
 	    eNB->TX_req[CC_id].sfn_sf = fill_nfapi_tx_req(&eNB->TX_req[CC_id].tx_request_body,
 							  (frameP*10)+subframeP,
 							  TBS,
-							  &eNB->pdu_index[CC_id],
+							  eNB->pdu_index[CC_id],
 							  eNB->UE_list.DLSCH_pdu[CC_id][0][(unsigned char)UE_id].payload[0]);
 	    
 	    LOG_D(MAC,"Filled NFAPI configuration for DCI/DLSCH/TXREQ %d, new SDU\n",eNB->pdu_index[CC_id]);
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
index f1d08a4929f..b4b35b968cd 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
@@ -1300,12 +1300,12 @@ void fill_nfapi_dlsch_config(eNB_MAC_INST *eNB,
   dl_req->number_pdu++;
 }
 
-uint16_t fill_nfapi_tx_req(nfapi_tx_request_body_t *tx_req_body,uint16_t absSF,uint16_t pdu_length, uint16_t *pdu_index, uint8_t *pdu)
+uint16_t fill_nfapi_tx_req(nfapi_tx_request_body_t *tx_req_body,uint16_t absSF,uint16_t pdu_length, uint16_t pdu_index, uint8_t *pdu)
 {
   nfapi_tx_request_pdu_t *TX_req        = &tx_req_body->tx_pdu_list[tx_req_body->number_of_pdus];
   LOG_D(MAC,"Filling TX_req %d for pdu length %d\n",tx_req_body->number_of_pdus,pdu_length);
   TX_req->pdu_length                    = pdu_length;
-  TX_req->pdu_index                     = *pdu_index++;
+  TX_req->pdu_index                     = pdu_index;
   TX_req->num_segments                  = 1;
   TX_req->segments[0].segment_length    = pdu_length;
   TX_req->segments[0].segment_data      = pdu;
diff --git a/openair2/LAYER2/MAC/proto.h b/openair2/LAYER2/MAC/proto.h
index 7e9c036f265..2bad81d52c4 100644
--- a/openair2/LAYER2/MAC/proto.h
+++ b/openair2/LAYER2/MAC/proto.h
@@ -950,7 +950,7 @@ void extract_pucch_csi(module_id_t mod_idP,int CC_idP,int UE_id, frame_t frameP,
 
 void extract_pusch_csi(module_id_t mod_idP,int CC_idP,int UE_id, frame_t frameP,sub_frame_t subframeP,uint8_t *pdu, uint8_t length);
 
-uint16_t fill_nfapi_tx_req(nfapi_tx_request_body_t *tx_req_body,uint16_t absSF,uint16_t pdu_length, uint16_t *pdu_index, uint8_t *pdu );
+uint16_t fill_nfapi_tx_req(nfapi_tx_request_body_t *tx_req_body,uint16_t absSF,uint16_t pdu_length, uint16_t pdu_index, uint8_t *pdu );
 
 void fill_nfapi_ulsch_config_request_rel8(nfapi_ul_config_request_pdu_t  *ul_config_pdu,
 					  uint8_t                        cqi_req,
-- 
GitLab