SRSUE: RRC blocks MAC RA procedure during reestablishment

This commit is contained in:
Xavier Arteaga 2019-11-26 18:48:51 +01:00 committed by Xavier Arteaga
parent ff2c0cd115
commit 67935d2b99
4 changed files with 29 additions and 15 deletions

View File

@ -453,6 +453,7 @@ public:
virtual void reconfiguration(const uint32_t& cc_idx, const bool& enable) = 0;
virtual void reset() = 0;
virtual void wait_uplink() = 0;
virtual void set_enable_ra_proc(bool en) = 0;
};
/** PHY interface

View File

@ -86,6 +86,7 @@ public:
void reconfiguration(const uint32_t& cc_idx, const bool& enable);
void reset();
void wait_uplink();
void set_enable_ra_proc(bool en) { enable_ra_proc = en; };
/******** set/get MAC configuration ****************/
void set_config(mac_cfg_t& mac_cfg);
@ -175,6 +176,7 @@ private:
mac_metrics_t metrics[SRSLTE_MAX_CARRIERS] = {};
bool initialized = false;
bool enable_ra_proc = true;
};
} // namespace srsue

View File

@ -227,8 +227,10 @@ void mac::run_tti(const uint32_t tti)
sr_procedure.step(tti);
// Check SR if we need to start RA
if (sr_procedure.need_random_access()) {
ra_procedure.start_mac_order();
if (enable_ra_proc) {
if (sr_procedure.need_random_access()) {
ra_procedure.start_mac_order();
}
}
ra_procedure.step(tti);

View File

@ -908,6 +908,7 @@ proc_outcome_t rrc::connection_reest_proc::init(asn1::rrc::reest_cause_e cause)
}
// reset MAC;
rrc_ptr->mac->set_enable_ra_proc(false); // Prevent MAC from running RA procedure
rrc_ptr->mac->reset();
// apply the default physical channel configuration as specified in 9.2.4;
@ -1031,24 +1032,32 @@ srslte::proc_outcome_t rrc::connection_reest_proc::cell_criteria()
proc_outcome_t rrc::connection_reest_proc::step()
{
proc_outcome_t ret = proc_outcome_t::yield;
// Abort procedure if T311 expires
if (!rrc_ptr->t311.is_running()) {
Info("T311 expired. Aborting.\n");
return proc_outcome_t::success;
ret = proc_outcome_t::success;
} else {
/*
* Implementation of procedure in 3GPP 36.331 Section 5.3.7.3: Actions following cell selection while T311 is
* running
*/
switch (state) {
case state_t::cell_reselection:
ret = step_cell_reselection();
break;
case state_t::cell_configuration:
ret = step_cell_configuration();
break;
}
}
if (ret != proc_outcome_t::yield) {
rrc_ptr->mac->set_enable_ra_proc(true);
}
/*
* Implementation of procedure in 3GPP 36.331 Section 5.3.7.3: Actions following cell selection while T311 is running
*/
switch (state) {
case state_t::cell_reselection:
return step_cell_reselection();
case state_t::cell_configuration:
return step_cell_configuration();
}
return proc_outcome_t::error;
return ret;
}
} // namespace srsue