mirror of https://github.com/PentHertz/srsLTE.git
mac,ue: reset demux when restting MAC
this potentially fixes the issue we see during HO and RLF under high DL load. The issue happens because buffered DL PDUs are delivered to RLC after reestablishing RLC that confuse the receiving RLC entity bc the sequence numbers are very high, as opposed to begin with zero again after reestablishment.
This commit is contained in:
parent
6773f6d02f
commit
2be85217fd
|
@ -47,6 +47,7 @@ public:
|
||||||
rlc_interface_mac* rlc,
|
rlc_interface_mac* rlc,
|
||||||
mac_interface_demux* mac,
|
mac_interface_demux* mac,
|
||||||
srslte::timer_handler::unique_timer* time_alignment_timer);
|
srslte::timer_handler::unique_timer* time_alignment_timer);
|
||||||
|
void reset();
|
||||||
|
|
||||||
bool process_pdus();
|
bool process_pdus();
|
||||||
uint8_t* request_buffer(uint32_t len);
|
uint8_t* request_buffer(uint32_t len);
|
||||||
|
@ -77,14 +78,14 @@ private:
|
||||||
srslte::sch_pdu mac_msg;
|
srslte::sch_pdu mac_msg;
|
||||||
srslte::mch_pdu mch_mac_msg;
|
srslte::mch_pdu mch_mac_msg;
|
||||||
srslte::sch_pdu pending_mac_msg;
|
srslte::sch_pdu pending_mac_msg;
|
||||||
uint8_t mch_lcids[SRSLTE_N_MCH_LCIDS];
|
uint8_t mch_lcids[SRSLTE_N_MCH_LCIDS] = {};
|
||||||
void process_sch_pdu_rt(uint8_t* buff, uint32_t nof_bytes);
|
void process_sch_pdu_rt(uint8_t* buff, uint32_t nof_bytes);
|
||||||
void process_sch_pdu(srslte::sch_pdu* pdu);
|
void process_sch_pdu(srslte::sch_pdu* pdu);
|
||||||
void process_mch_pdu(srslte::mch_pdu* pdu);
|
void process_mch_pdu(srslte::mch_pdu* pdu);
|
||||||
bool process_ce(srslte::sch_subh* subheader);
|
bool process_ce(srslte::sch_subh* subheader);
|
||||||
void parse_ta_cmd(srslte::sch_subh* subh);
|
void parse_ta_cmd(srslte::sch_subh* subh);
|
||||||
|
|
||||||
bool is_uecrid_successful;
|
bool is_uecrid_successful = false;
|
||||||
|
|
||||||
srslte::timer_handler::unique_timer* time_alignment_timer = nullptr;
|
srslte::timer_handler::unique_timer* time_alignment_timer = nullptr;
|
||||||
|
|
||||||
|
|
|
@ -30,16 +30,7 @@
|
||||||
|
|
||||||
namespace srsue {
|
namespace srsue {
|
||||||
|
|
||||||
demux::demux(log_ref log_h_) :
|
demux::demux(log_ref log_h_) : log_h(log_h_), mac_msg(20, log_h_), mch_mac_msg(20, log_h_), pending_mac_msg(20, log_h_)
|
||||||
log_h(log_h_),
|
|
||||||
mac_msg(20, log_h_),
|
|
||||||
mch_mac_msg(20, log_h_),
|
|
||||||
pending_mac_msg(20, log_h_),
|
|
||||||
rlc(NULL),
|
|
||||||
is_uecrid_successful(false),
|
|
||||||
phy_h(nullptr),
|
|
||||||
time_alignment_timer(nullptr),
|
|
||||||
mac(nullptr)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
void demux::init(phy_interface_mac_common* phy_,
|
void demux::init(phy_interface_mac_common* phy_,
|
||||||
|
@ -52,7 +43,12 @@ void demux::init(phy_interface_mac_common* phy_,
|
||||||
mac = mac_;
|
mac = mac_;
|
||||||
time_alignment_timer = time_alignment_timer_;
|
time_alignment_timer = time_alignment_timer_;
|
||||||
pdus.init(this, log_h);
|
pdus.init(this, log_h);
|
||||||
bzero(&mch_lcids, SRSLTE_N_MCH_LCIDS);
|
}
|
||||||
|
|
||||||
|
void demux::reset()
|
||||||
|
{
|
||||||
|
// flush all buffered PDUs
|
||||||
|
pdus.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool demux::get_uecrid_successful()
|
bool demux::get_uecrid_successful()
|
||||||
|
|
|
@ -167,6 +167,8 @@ void mac::reset()
|
||||||
mux_unit.msg3_flush();
|
mux_unit.msg3_flush();
|
||||||
mux_unit.reset();
|
mux_unit.reset();
|
||||||
|
|
||||||
|
demux_unit.reset();
|
||||||
|
|
||||||
ra_procedure.reset();
|
ra_procedure.reset();
|
||||||
sr_procedure.reset();
|
sr_procedure.reset();
|
||||||
bsr_procedure.reset();
|
bsr_procedure.reset();
|
||||||
|
|
Loading…
Reference in New Issue