SRSUE: RRC blocks MAC RA procedure during reestablishment

master
Xavier Arteaga 5 years ago committed by Xavier Arteaga
parent ff2c0cd115
commit 67935d2b99

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

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

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

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

Loading…
Cancel
Save