prevent the scheduler from allocating data on SCell UL if not supported by UE

master
Ismael Gomez 2 years ago committed by Piotr
parent 4cc86455c3
commit 13d6517631

@ -66,6 +66,7 @@ struct cell_cfg_t {
asn1::rrc::mob_ctrl_info_s::t304_e_ t304; asn1::rrc::mob_ctrl_info_s::t304_e_ t304;
std::vector<scell_cfg_t> scell_list; std::vector<scell_cfg_t> scell_list;
rrc_meas_cfg_t meas_cfg; rrc_meas_cfg_t meas_cfg;
bool barred;
}; };
typedef std::vector<cell_cfg_t> cell_list_t; typedef std::vector<cell_cfg_t> cell_list_t;

@ -140,6 +140,7 @@ public:
struct ue_cfg_t { struct ue_cfg_t {
struct cc_cfg_t { struct cc_cfg_t {
bool active = false; bool active = false;
bool ul_disabled = false;
uint32_t enb_cc_idx = 0; ///< eNB CC index uint32_t enb_cc_idx = 0; ///< eNB CC index
srsran_dl_cfg_t dl_cfg = {}; srsran_dl_cfg_t dl_cfg = {};
uint32_t aperiodic_cqi_period = 0; // if 0 is periodic CQI uint32_t aperiodic_cqi_period = 0; // if 0 is periodic CQI

@ -1505,6 +1505,10 @@ static int parse_cell_list(all_args_t* args, rrc_cfg_t* rrc_cfg, Setting& root)
HANDLEPARSERCODE(parse_meas_report_desc(&cell_cfg.meas_cfg, cellroot)); HANDLEPARSERCODE(parse_meas_report_desc(&cell_cfg.meas_cfg, cellroot));
} }
if (cellroot.exists("barred") and cellroot["barred"]) {
cell_cfg.barred = true;
}
if (cellroot.exists("scell_list")) { if (cellroot.exists("scell_list")) {
HANDLEPARSERCODE(parse_scell_list(cell_cfg, cellroot)); HANDLEPARSERCODE(parse_scell_list(cell_cfg, cellroot));
} }

@ -61,7 +61,10 @@ void sched_time_pf::new_tti(sched_ue_list& ue_db, sf_sched* tti_sched)
dl_queue.push(&it->second); dl_queue.push(&it->second);
} }
if (it->second.ul_h != nullptr) { if (it->second.ul_h != nullptr) {
ul_queue.push(&it->second); // Allocate only if UL carrier is enabled
if (!u.second->get_ue_cfg().supported_cc_list[cc_cfg->enb_cc_idx].ul_disabled) {
ul_queue.push(&it->second);
}
} }
} }
} }

@ -121,6 +121,10 @@ void sched_time_rr::sched_ul_newtxs(sched_ue_list& ue_db, sf_sched* tti_sched, s
iter = ue_db.begin(); // wrap around iter = ue_db.begin(); // wrap around
} }
sched_ue& user = *iter->second; sched_ue& user = *iter->second;
// Allocate only if UL carrier is enabled
if (user.get_ue_cfg().supported_cc_list[cc_cfg->enb_cc_idx].ul_disabled) {
continue;
}
const ul_harq_proc* h = get_ul_newtx_harq(user, tti_sched); const ul_harq_proc* h = get_ul_newtx_harq(user, tti_sched);
// Check if there is a empty harq // Check if there is a empty harq
if (h == nullptr) { if (h == nullptr) {

@ -457,9 +457,10 @@ void ue_cfg_apply_reconf_complete_updates(ue_cfg_t& ue_cfg,
if (scell.scell_idx_r10 >= ue_cfg.supported_cc_list.size()) { if (scell.scell_idx_r10 >= ue_cfg.supported_cc_list.size()) {
ue_cfg.supported_cc_list.resize(scell.scell_idx_r10 + 1); ue_cfg.supported_cc_list.resize(scell.scell_idx_r10 + 1);
} }
auto& mac_scell = ue_cfg.supported_cc_list[scell.scell_idx_r10]; auto& mac_scell = ue_cfg.supported_cc_list[scell.scell_idx_r10];
mac_scell.active = true; mac_scell.active = true;
mac_scell.enb_cc_idx = ue_cell_list.get_ue_cc_idx(scell.scell_idx_r10)->cell_common->enb_cc_idx; mac_scell.ul_disabled = !scell.rr_cfg_common_scell_r10.ul_cfg_r10.ul_freq_info_r10.ul_carrier_freq_r10_present;
mac_scell.enb_cc_idx = ue_cell_list.get_ue_cc_idx(scell.scell_idx_r10)->cell_common->enb_cc_idx;
if (scell.rr_cfg_ded_scell_r10_present and scell.rr_cfg_ded_scell_r10.phys_cfg_ded_scell_r10_present and if (scell.rr_cfg_ded_scell_r10_present and scell.rr_cfg_ded_scell_r10.phys_cfg_ded_scell_r10_present and
scell.rr_cfg_ded_scell_r10.phys_cfg_ded_scell_r10.ul_cfg_r10_present) { scell.rr_cfg_ded_scell_r10.phys_cfg_ded_scell_r10.ul_cfg_r10_present) {

@ -44,6 +44,12 @@ enb_cell_common_list::enb_cell_common_list(const rrc_cfg_t& cfg_) : cfg(cfg_)
// Update DL EARFCN // Update DL EARFCN
new_cell->sib1.freq_band_ind = (uint8_t)srsran_band_get_band(new_cell->cell_cfg.dl_earfcn); new_cell->sib1.freq_band_ind = (uint8_t)srsran_band_get_band(new_cell->cell_cfg.dl_earfcn);
if (new_cell->cell_cfg.barred) {
cell_access->cell_barred.value = sib_type1_s::cell_access_related_info_s_::cell_barred_opts::barred;
} else {
cell_access->cell_barred.value = sib_type1_s::cell_access_related_info_s_::cell_barred_opts::not_barred;
}
// Set Cell SIB2 // Set Cell SIB2
// update PRACH root seq index for this cell // update PRACH root seq index for this cell
new_cell->sib2 = cfg.sibs[1].sib2(); new_cell->sib2 = cfg.sibs[1].sib2();

Loading…
Cancel
Save