diff --git a/srsenb/hdr/phy/lte/cc_worker.h b/srsenb/hdr/phy/lte/cc_worker.h index d04b0b269..2edbe6547 100644 --- a/srsenb/hdr/phy/lte/cc_worker.h +++ b/srsenb/hdr/phy/lte/cc_worker.h @@ -60,7 +60,7 @@ private: int encode_pdsch(stack_interface_phy_lte::dl_sched_grant_t* grants, uint32_t nof_grants); int encode_pmch(stack_interface_phy_lte::dl_sched_grant_t* grant, srsran_mbsfn_cfg_t* mbsfn_cfg); - void decode_pusch_rnti(stack_interface_phy_lte::ul_sched_grant_t& ul_grant, + bool decode_pusch_rnti(stack_interface_phy_lte::ul_sched_grant_t& ul_grant, srsran_ul_cfg_t& ul_cfg, srsran_pusch_res_t& pusch_res); void decode_pusch(stack_interface_phy_lte::ul_sched_grant_t* grants, uint32_t nof_pusch); diff --git a/srsenb/src/phy/lte/cc_worker.cc b/srsenb/src/phy/lte/cc_worker.cc index 1f817fe4e..5a7478b7c 100644 --- a/srsenb/src/phy/lte/cc_worker.cc +++ b/srsenb/src/phy/lte/cc_worker.cc @@ -253,7 +253,7 @@ void cc_worker::work_dl(const srsran_dl_sf_cfg_t& dl_sf_cfg, } } -void cc_worker::decode_pusch_rnti(stack_interface_phy_lte::ul_sched_grant_t& ul_grant, +bool cc_worker::decode_pusch_rnti(stack_interface_phy_lte::ul_sched_grant_t& ul_grant, srsran_ul_cfg_t& ul_cfg, srsran_pusch_res_t& pusch_res) { @@ -261,19 +261,19 @@ void cc_worker::decode_pusch_rnti(stack_interface_phy_lte::ul_sched_grant_t& ul_ // Invalid RNTI if (rnti == SRSRAN_INVALID_RNTI) { - return; + return false; } // RNTI does not exist if (ue_db.count(rnti) == 0) { - return; + return false; } // Get UE configuration if (phy->ue_db.get_ul_config(rnti, cc_idx, ul_cfg) < SRSRAN_SUCCESS) { // It could happen that the UL configuration is missing due to intra-enb HO which is not an error Info("Failed retrieving UL configuration for cc=%d rnti=0x%x", cc_idx, rnti); - return; + return false; } // Fill UCI configuration @@ -284,7 +284,7 @@ void cc_worker::decode_pusch_rnti(stack_interface_phy_lte::ul_sched_grant_t& ul_ srsran_pusch_grant_t& grant = ul_cfg.pusch.grant; if (srsran_ra_ul_dci_to_grant(&enb_ul.cell, &ul_sf, &ul_cfg.hopping, &ul_grant.dci, &grant)) { Error("Computing PUSCH dci for RNTI %x", rnti); - return; + return false; } // Handle Format0 adaptive retx @@ -293,7 +293,7 @@ void cc_worker::decode_pusch_rnti(stack_interface_phy_lte::ul_sched_grant_t& ul_ int rv_idx = grant.tb.rv; if (phy->ue_db.get_last_ul_tb(rnti, cc_idx, ul_grant.pid, grant.tb) < SRSRAN_SUCCESS) { Error("Error retrieving last UL TB for RNTI %x, CC %d, PID %d", rnti, cc_idx, ul_grant.pid); - return; + return false; } grant.tb.rv = rv_idx; Info("Adaptive retx: rnti=0x%x, pid=%d, rv_idx=%d, mcs=%d, old_tbs=%d", @@ -314,7 +314,7 @@ void cc_worker::decode_pusch_rnti(stack_interface_phy_lte::ul_sched_grant_t& ul_ if (pusch_res.data) { if (srsran_enb_ul_get_pusch(&enb_ul, &ul_sf, &ul_cfg.pusch, &pusch_res)) { Error("Decoding PUSCH for RNTI %x", rnti); - return; + return false; } } // Save PHICH scheduling for this user. Each user can have just 1 PUSCH dci per TTI @@ -344,6 +344,7 @@ void cc_worker::decode_pusch_rnti(stack_interface_phy_lte::ul_sched_grant_t& ul_ // Save metrics stats ue_db[rnti]->metrics_ul(ul_grant.dci.tb.mcs_idx, 0, enb_ul.chest_res.snr_db, pusch_res.avg_iterations_block); } + return true; } void cc_worker::decode_pusch(stack_interface_phy_lte::ul_sched_grant_t* grants, uint32_t nof_pusch) @@ -358,7 +359,9 @@ void cc_worker::decode_pusch(stack_interface_phy_lte::ul_sched_grant_t* grants, srsran_ul_cfg_t ul_cfg = {}; // Decodes PUSCH for the given grant - decode_pusch_rnti(ul_grant, ul_cfg, pusch_res); + if (!decode_pusch_rnti(ul_grant, ul_cfg, pusch_res)) { + return; + } // Notify MAC new received data and HARQ Indication value if (ul_grant.data != nullptr) {