From 47d29b9d3fd8f5c9f0152beb026ec8da62fa6f3f Mon Sep 17 00:00:00 2001 From: laurent <laurent.thomas@open-cells.com> Date: Thu, 1 Aug 2019 10:45:25 +0200 Subject: [PATCH] Create DL sub header --- SystemX-tutorial-design.odt | Bin 54430 -> 55501 bytes cmake_targets/CMakeLists.txt | 2 +- executables/{dl_fs6.c => main-fs6.c} | 99 +++++++++++++++------ executables/split_headers.h | 8 +- openair1/PHY/LTE_TRANSPORT/dci_tools.c | 12 +-- openair1/PHY/LTE_TRANSPORT/transport_eNB.h | 6 +- openair1/SCHED/phy_procedures_lte_eNb.c | 6 +- 7 files changed, 90 insertions(+), 43 deletions(-) rename executables/{dl_fs6.c => main-fs6.c} (92%) diff --git a/SystemX-tutorial-design.odt b/SystemX-tutorial-design.odt index 788f9de955d3891f294a4efd08686925c6834e61..42e195ac112b370ff7d48cfbb5e083d9cfaecf6e 100644 GIT binary patch delta 21677 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�e+QF_zHp1N4uo9b0i5eK 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 delta 20589 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 diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 177de04a2..62b592673 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -2094,7 +2094,7 @@ target_link_libraries (lte-softmodem add_executable(ocp-softmodem ${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c ${OPENAIR_DIR}/executables/main-ocp.c - ${OPENAIR_DIR}/executables/dl_fs6.c + ${OPENAIR_DIR}/executables/main-fs6.c ${OPENAIR_DIR}/executables/transport_split.c ${OPENAIR_TARGETS}/RT/USER/lte-softmodem.c ${OPENAIR_TARGETS}/RT/USER/lte-softmodem-common.c diff --git a/executables/dl_fs6.c b/executables/main-fs6.c similarity index 92% rename from executables/dl_fs6.c rename to executables/main-fs6.c index 3b20ac9c7..16a0cd305 100644 --- a/executables/dl_fs6.c +++ b/executables/main-fs6.c @@ -175,7 +175,7 @@ void pusch_procedures_extract(uint8_t *bufferZone, int bufSize, PHY_VARS_eNB *eN for (int i = 0; i < NUMBER_OF_UE_MAX; i++) { LTE_eNB_ULSCH_t *ulsch = eNB->ulsch[i]; - if (ulsch->ue_type > 0) + if (ulsch->ue_type > NOCE) harq_pid = 0; else harq_pid= subframe2harq_pid(&eNB->frame_parms,frame,subframe); @@ -232,14 +232,12 @@ void pusch_procedures_extract(uint8_t *bufferZone, int bufSize, PHY_VARS_eNB *eN } } -void phy_procedures_eNB_uespec_RX_extract(uint8_t *buf, int bufSize, PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) { +void phy_procedures_eNB_uespec_RX_extract(uint8_t *bufferZone, int bufSize, PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) { //RX processing for ue-specific resources (i LTE_DL_FRAME_PARMS *fp = &eNB->frame_parms; const int subframe = proc->subframe_rx; const int frame = proc->frame_rx; /* TODO: use correct rxdata */ - T (T_ENB_PHY_INPUT_SIGNAL, T_INT (eNB->Mod_id), T_INT (frame), T_INT (subframe), T_INT (0), - T_BUFFER (&eNB->RU_list[0]->common.rxdata[0][subframe * eNB->frame_parms.samples_per_tti], eNB->frame_parms.samples_per_tti * 4)); if ((fp->frame_type == TDD) && (subframe_select(fp,subframe)!=SF_UL)) return; @@ -257,7 +255,7 @@ void phy_procedures_eNB_uespec_RX_extract(uint8_t *buf, int bufSize, PHY_VARS_eN uci_procedures (eNB, proc); if (NFAPI_MODE==NFAPI_MONOLITHIC || NFAPI_MODE==NFAPI_MODE_PNF) { // If PNF or monolithic - pusch_procedures_extract(buf, bufSize, eNB,proc); + pusch_procedures_extract(bufferZone, bufSize, eNB,proc); } lte_eNB_I0_measurements (eNB, subframe, 0, eNB->first_run_I0_measurements); @@ -277,9 +275,6 @@ void phy_procedures_eNB_uespec_RX_extract(uint8_t *buf, int bufSize, PHY_VARS_eN LOG_I (PHY, "max_I0 %d, min_I0 %d\n", max_I0, min_I0); } - commonUDP_t *header=(commonUDP_t *) buf; - header->contentBytes=1000; - header->nbBlocks=1; return; } @@ -293,7 +288,7 @@ void pusch_procedures_process(uint8_t *bufferZone, int bufSize, PHY_VARS_eNB *eN for (int i = 0; i < NUMBER_OF_UE_MAX; i++) { LTE_eNB_ULSCH_t *ulsch = eNB->ulsch[i]; - if (ulsch->ue_type > 0) harq_pid = 0; + if (ulsch->ue_type > NOCE) harq_pid = 0; else harq_pid=harq_pid0; LTE_UL_eNB_HARQ_t *ulsch_harq = ulsch->harq_processes[harq_pid]; @@ -454,6 +449,35 @@ void phy_procedures_eNB_TX_process(uint8_t *bufferZone, int nbBlocks, PHY_VARS_e eNB->pdcch_vars[subframe&1].num_dci=header->num_dci; uint8_t num_mdci = eNB->mpdcch_vars[subframe&1].num_dci = header->num_mdci; + // Remove all scheduled DL, we will populate from the CU sending + for (int UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) { + LTE_eNB_DLSCH_t *dlsch0 = eNB->dlsch[UE_id][0]; + + if ( dlsch0 && dlsch0->rnti>0 ) { +#ifdef PHY_TX_THREAD + dlsch0->active[subframe] = 0; +#else + dlsch0->active = 0; +#endif + } + } + + void *bufPtr=bufferZone; + + for (int i=0; i < nbBlocks; i++) { //nbBlocks is the actual received blocks + fs6_dl_uespec_t *dlPtr=(fs6_dl_uespec_t *)(commonUDPdata(bufPtr)+sizeof(fs6_dl_t)); +#ifdef PHY_TX_THREAD + eNB->dlsch[dlPtr->UE_id][0]->active[subframe] = 1; +#else + eNB->dlsch[dlPtr->UE_id][0]->active = 1; +#endif + eNB->dlsch[dlPtr->UE_id][0]->harq_ids[frame%2][subframe]=dlPtr->harq_pid; + eNB->dlsch[dlPtr->UE_id][0]->rnti=dlPtr->rnti; + memcpy(eNB->dlsch[dlPtr->UE_id][0]->harq_processes[dlPtr->harq_pid]->e, + commonUDPdata(((uint8_t *)dlPtr)+sizeof(fs6_dl_t)), dlPtr->dataLen); + bufPtr+=alignedSize(bufPtr); + } + if (do_meas==1) { start_meas(&eNB->phy_proc_tx); start_meas(&eNB->dlsch_common_and_dci); @@ -476,8 +500,8 @@ void phy_procedures_eNB_TX_process(uint8_t *bufferZone, int nbBlocks, PHY_VARS_e // clear previous allocation information for all UEs for (int i = 0; i < NUMBER_OF_UE_MAX; i++) { - if (eNB->dlsch[i][0]) - eNB->dlsch[i][0]->subframe_tx[subframe] = 0; + //if (eNB->dlsch[i][0]) + //eNB->dlsch[i][0]->subframe_tx[subframe] = 0; } if (NFAPI_MODE==NFAPI_MONOLITHIC || NFAPI_MODE==NFAPI_MODE_PNF) { @@ -500,10 +524,17 @@ void phy_procedures_eNB_TX_process(uint8_t *bufferZone, int nbBlocks, PHY_VARS_e } for (int UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) { - if (header->UE_dl_active[UE_id]) { // if we generate dlsch, we must generate pdsch - LTE_eNB_DLSCH_t *dlsch0 = eNB->dlsch[UE_id][0]; - LTE_eNB_DLSCH_t *dlsch1 = eNB->dlsch[UE_id][1]; - int harq_pid=dlsch0->harq_ids[frame%2][subframe]=header->UE_dl_active[UE_id]; + LTE_eNB_DLSCH_t *dlsch0 = eNB->dlsch[UE_id][0]; + LTE_eNB_DLSCH_t *dlsch1 = eNB->dlsch[UE_id][1]; + + if ((dlsch0)&&(dlsch0->rnti>0)&& +#ifdef PHY_TX_THREAD + (dlsch0->active[subframe] == 1) +#else + (dlsch0->active == 1) +#endif + ) { + int harq_pid=dlsch0->harq_ids[frame%2][subframe]; pdsch_procedures(eNB, proc, harq_pid, @@ -518,7 +549,7 @@ void phy_procedures_eNB_TX_process(uint8_t *bufferZone, int nbBlocks, PHY_VARS_e AMP); } -void appendFs6DLUE(uint8_t *bufferZone, uint8_t *UEdata, int UEdataLen) { +void appendFs6DLUE(uint8_t *bufferZone, int UE_id, int8_t harq_pid, uint16_t rnti, uint8_t *UEdata, int UEdataLen) { commonUDP_t *FirstUDPheader=(commonUDP_t *) bufferZone; // move to the end uint8_t *firstFreeByte=bufferZone; @@ -534,10 +565,14 @@ void appendFs6DLUE(uint8_t *bufferZone, uint8_t *UEdata, int UEdataLen) { commonUDP_t *newUDPheader=(commonUDP_t *) firstFreeByte; FirstUDPheader->nbBlocks++; newUDPheader->blockID=curBlock; - newUDPheader->contentBytes=sizeof(fs6_dl_t)+UEdataLen; + newUDPheader->contentBytes=sizeof(fs6_dl_t)+sizeof(fs6_dl_uespec_t) + UEdataLen; // We skip the fs6 DL header, that is populated by caller // This header will be duplicated during sending - memcpy(commonUDPdata(firstFreeByte+sizeof(fs6_dl_t)), UEdata, UEdataLen); + fs6_dl_uespec_t *tmp=(fs6_dl_uespec_t *) firstFreeByte+sizeof(fs6_dl_t); + tmp->UE_id=UE_id; + tmp->harq_pid=harq_pid; + tmp->rnti=rnti; + memcpy(commonUDPdata(((uint8_t *)tmp)+sizeof(fs6_dl_uespec_t)), UEdata, UEdataLen); } void phy_procedures_eNB_TX_extract(uint8_t *bufferZone, PHY_VARS_eNB *eNB, L1_rxtx_proc_t *proc, int do_meas, uint8_t *buf, int bufSize) { @@ -558,8 +593,8 @@ void phy_procedures_eNB_TX_extract(uint8_t *bufferZone, PHY_VARS_eNB *eNB, L1_rx // clear previous allocation information for all UEs for (int i = 0; i < NUMBER_OF_UE_MAX; i++) { - if (eNB->dlsch[i][0]) - eNB->dlsch[i][0]->subframe_tx[subframe] = 0; + //if (eNB->dlsch[i][0]) + //eNB->dlsch[i][0]->subframe_tx[subframe] = 0; } /* TODO: check the following test - in the meantime it is put back as it was before */ @@ -569,7 +604,8 @@ void phy_procedures_eNB_TX_extract(uint8_t *bufferZone, PHY_VARS_eNB *eNB, L1_rx for (int i=0; i<NUMBER_OF_UE_MAX; i++) { int harq_pid; - if (eNB->ulsch[i] && eNB->ulsch[i]->ue_type >0) + if (eNB->ulsch[i] && eNB->ulsch[i]->ue_type > NOCE) + // LTE-M case harq_pid = 0; else header->UE_ul_active[i] = harq_pid = subframe2harq_pid(fp,header->ul_frame,header->ul_subframe); @@ -608,7 +644,7 @@ void phy_procedures_eNB_TX_extract(uint8_t *bufferZone, PHY_VARS_eNB *eNB, L1_rx uint8_t num_pdcch_symbols = eNB->pdcch_vars[subframe&1].num_pdcch_symbols; uint8_t num_dci = eNB->pdcch_vars[subframe&1].num_dci; - uint8_t num_mdci = eNB->mpdcch_vars[subframe&1].num_dci; + uint8_t num_mdci = eNB->mpdcch_vars[subframe&1].num_dci; LOG_D(PHY,"num_pdcch_symbols %"PRIu8",number dci %"PRIu8"\n",num_pdcch_symbols, num_dci); if (NFAPI_MODE==NFAPI_MONOLITHIC || NFAPI_MODE==NFAPI_MODE_PNF) { @@ -626,8 +662,7 @@ void phy_procedures_eNB_TX_extract(uint8_t *bufferZone, PHY_VARS_eNB *eNB, L1_rx LTE_eNB_DLSCH_t *dlsch0; for (int UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) { - dlsch0 = eNB->dlsch[UE_id][0]; - header->UE_dl_active[UE_id]=-1; + LTE_eNB_DLSCH_t *dlsch0 = eNB->dlsch[UE_id][0]; if ((dlsch0)&&(dlsch0->rnti>0)&& #ifdef PHY_TX_THREAD @@ -641,7 +676,7 @@ void phy_procedures_eNB_TX_extract(uint8_t *bufferZone, PHY_VARS_eNB *eNB, L1_rx AssertFatal(harq_pid>=0,"harq_pid is negative\n"); if (harq_pid>=8) { - if (dlsch0->ue_type==0) + if (dlsch0->ue_type == NOCE) LOG_E(PHY,"harq_pid:%d corrupt must be 0-7 UE_id:%d frame:%d subframe:%d rnti:%x [ %1d.%1d.%1d.%1d.%1d.%1d.%1d.%1d\n", harq_pid,UE_id,frame,subframe,dlsch0->rnti, dlsch0->harq_ids[frame%2][0], dlsch0->harq_ids[frame%2][1], @@ -652,8 +687,6 @@ void phy_procedures_eNB_TX_extract(uint8_t *bufferZone, PHY_VARS_eNB *eNB, L1_rx dlsch0->harq_ids[frame%2][6], dlsch0->harq_ids[frame%2][7]); } else { - header->UE_dl_active[UE_id]=harq_pid; - if (dlsch_procedures(eNB, proc, harq_pid, @@ -673,6 +706,9 @@ void phy_procedures_eNB_TX_extract(uint8_t *bufferZone, PHY_VARS_eNB *eNB, L1_rx */ LTE_DL_eNB_HARQ_t *dlsch_harq=dlsch0->harq_processes[harq_pid]; appendFs6DLUE(bufferZone, + UE_id, + harq_pid, + dlsch0->rnti, dlsch0->harq_processes[harq_pid]->e, get_G(fp, dlsch_harq->nb_rb, @@ -693,7 +729,7 @@ void phy_procedures_eNB_TX_extract(uint8_t *bufferZone, PHY_VARS_eNB *eNB, L1_rx #endif ) { // clear subframe TX flag since UE is not scheduled for PDSCH in this subframe (so that we don't look for PUCCH later) - dlsch0->subframe_tx[subframe]=0; + //dlsch0->subframe_tx[subframe]=0; } } @@ -791,12 +827,17 @@ void UL_cu_fs6(RU_t *ru,int frame, int subframe, uint64_t TS) { commonUDP_t *UDPheader=(commonUDP_t *) bufferZone; int nb_blocks=receiveSubFrame(&sockFS6, TS, bufferZone, sizeof(bufferZone) ); + if (nb_blocks ==0) { + LOG_W(PHY, "CU lost a subframe\n"); + return; + } + if (nb_blocks != UDPheader->nbBlocks ) LOG_W(PHY, "received %d blocks for %d expected\n", nb_blocks, UDPheader->nbBlocks); // Fixme: datamodel issue PHY_VARS_eNB *eNB = RC.eNB[0][0]; - L1_proc_t *proc = &eNB->proc; + L1_proc_t *proc = &eNB->proc; prach_eNB_process(bufferZone, sizeof(bufferZone), eNB,NULL,proc->frame_rx,proc->subframe_rx); release_UE_in_freeList(eNB->Mod_id); diff --git a/executables/split_headers.h b/executables/split_headers.h index 4cb2f4a5c..35e2e78d3 100644 --- a/executables/split_headers.h +++ b/executables/split_headers.h @@ -53,13 +53,19 @@ typedef struct { DCI_ALLOC_t dci_alloc[32]; int num_mdci; int amp; - int8_t UE_dl_active[NUMBER_OF_UE_MAX]; // the HARQ id for this UE (-1: disabled) int8_t UE_ul_active[NUMBER_OF_UE_MAX]; int8_t UE_ul_first_rb[NUMBER_OF_UE_MAX]; // int8_t UE_ul_last_rb[NUMBER_OF_UE_MAX]; // LTE_eNB_PHICH phich_vars; } fs6_dl_t; +typedef struct { + int UE_id; + int8_t harq_pid; + uint16_t rnti; + int dataLen; +} fs6_dl_uespec_t; + bool createUDPsock (char *sourceIP, char *sourcePort, char *destIP, char *destPort, UDPsock_t *result); int receiveSubFrame(UDPsock_t *sock, uint64_t expectedTS, void *bufferZone, int bufferSize); int sendSubFrame(UDPsock_t *sock, void *bufferZone, ssize_t secondHeaderSize); diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c index 29bbd774a..476e255fe 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c @@ -307,7 +307,7 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,L1_rxtx_proc_t dlsch0_harq->codeword = 0; dlsch1_harq = dlsch1->harq_processes[rel8->harq_process]; dlsch1_harq->codeword = 1; - dlsch0->subframe_tx[subframe] = 1; + //dlsch0->subframe_tx[subframe] = 1; LOG_D(PHY,"NFAPI: SFN/SF:%04d%d proc:TX:SFN/SF:%04d%d dlsch0[rnti:%x harq_mask:%04x] dci_pdu[rnti:%x rnti_type:%d harq_process:%d ndi1:%d] dlsch0_harq[round:%d harq_mask:%x ndi:%d]\n", frame,subframe, @@ -658,7 +658,7 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,L1_rxtx_proc_t dlsch0_harq->codeword = 0; // printf("DCI: Setting subframe_tx for subframe %d\n",subframe); - dlsch0->subframe_tx[subframe] = 1; + //dlsch0->subframe_tx[subframe] = 1; conv_rballoc (rel8->resource_allocation_type, rel8->resource_block_coding, fp->N_RB_DL, dlsch0_harq->rb_alloc); @@ -868,7 +868,7 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,L1_rxtx_proc_t dlsch0_harq = dlsch0->harq_processes[rel8->harq_process]; dlsch1_harq = dlsch1->harq_processes[rel8->harq_process]; - dlsch0->subframe_tx[subframe] = 1; + //dlsch0->subframe_tx[subframe] = 1; dlsch0->harq_ids[frame%2][subframe] = rel8->harq_process; dlsch1->harq_ids[frame%2][subframe] = rel8->harq_process; @@ -1316,7 +1316,7 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,L1_rxtx_proc_t } if (dlsch0 != NULL) { - dlsch0->subframe_tx[subframe] = 1; + //dlsch0->subframe_tx[subframe] = 1; dlsch0->harq_ids[frame%2][subframe] = rel8->harq_process; } @@ -1723,7 +1723,7 @@ void fill_mdci_and_dlsch(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc,mDCI_ALLOC_t *dc dlsch0_harq->codeword = 0; // printf("DCI: Setting subframe_tx for subframe %d\n",subframe); - dlsch0->subframe_tx[(subframe + 2) % 10] = 1; + //dlsch0->subframe_tx[(subframe + 2) % 10] = 1; LOG_D(PHY,"PDSCH : resource_block_coding %x\n",rel13->resource_block_coding); conv_eMTC_rballoc (rel13->resource_block_coding, @@ -1746,7 +1746,7 @@ void fill_mdci_and_dlsch(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc,mDCI_ALLOC_t *dc dlsch0_harq->dl_power_off = 1; - dlsch0->subframe_tx[subframe] = 1; + //dlsch0->subframe_tx[subframe] = 1; if (dlsch0->rnti != rel13->rnti) { // if rnti of dlsch is not the same as in the config, this is a new entry dlsch0_harq->round = 0; dlsch0->harq_mask =0; diff --git a/openair1/PHY/LTE_TRANSPORT/transport_eNB.h b/openair1/PHY/LTE_TRANSPORT/transport_eNB.h index 9e8685732..196bfcaaf 100644 --- a/openair1/PHY/LTE_TRANSPORT/transport_eNB.h +++ b/openair1/PHY/LTE_TRANSPORT/transport_eNB.h @@ -154,11 +154,11 @@ typedef struct { uint8_t active; #endif /// indicator of UE type (0 = LTE, 1,2 = Cat-M) - int ue_type; + UE_type_t ue_type; /// HARQ process mask, indicates which processes are currently active uint16_t harq_mask; /// Indicator of TX activation per subframe. Used during PUCCH detection for ACK/NAK. - uint8_t subframe_tx[10]; + //uint8_t subframe_tx[10]; /// First CCE of last PDSCH scheduling per subframe. Again used during PUCCH detection for ACK/NAK. uint8_t nCCE[10]; /// Process ID's per subframe. Used to associate received ACKs on PUSCH/PUCCH to DLSCH harq process ids @@ -450,7 +450,7 @@ typedef struct { typedef struct { #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0)) /// UE type (normal, CEModeA, CEModeB) - uint8_t ue_type; + UE_type_t ue_type; #endif /// HARQ process mask, indicates which processes are currently active uint16_t harq_mask; diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index c4e162ec6..261e09273 100644 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -410,8 +410,8 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, // clear previous allocation information for all UEs for (i = 0; i < NUMBER_OF_UE_MAX; i++) { - if (eNB->dlsch[i][0]) - eNB->dlsch[i][0]->subframe_tx[subframe] = 0; + //if (eNB->dlsch[i][0]) + //eNB->dlsch[i][0]->subframe_tx[subframe] = 0; } /* TODO: check the following test - in the meantime it is put back as it was before */ @@ -548,7 +548,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, #endif ) { // clear subframe TX flag since UE is not scheduled for PDSCH in this subframe (so that we don't look for PUCCH later) - dlsch0->subframe_tx[subframe]=0; + //dlsch0->subframe_tx[subframe]=0; } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH,0); -- 2.26.2