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.
master
Andre Puschmann 4 years ago
parent 6773f6d02f
commit 2be85217fd

@ -47,6 +47,7 @@ public:
rlc_interface_mac* rlc,
mac_interface_demux* mac,
srslte::timer_handler::unique_timer* time_alignment_timer);
void reset();
bool process_pdus();
uint8_t* request_buffer(uint32_t len);
@ -77,14 +78,14 @@ private:
srslte::sch_pdu mac_msg;
srslte::mch_pdu mch_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(srslte::sch_pdu* pdu);
void process_mch_pdu(srslte::mch_pdu* pdu);
bool process_ce(srslte::sch_subh* subheader);
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;

@ -30,16 +30,7 @@
namespace srsue {
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_),
rlc(NULL),
is_uecrid_successful(false),
phy_h(nullptr),
time_alignment_timer(nullptr),
mac(nullptr)
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_)
{}
void demux::init(phy_interface_mac_common* phy_,
@ -52,7 +43,12 @@ void demux::init(phy_interface_mac_common* phy_,
mac = mac_;
time_alignment_timer = time_alignment_timer_;
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()

@ -167,6 +167,8 @@ void mac::reset()
mux_unit.msg3_flush();
mux_unit.reset();
demux_unit.reset();
ra_procedure.reset();
sr_procedure.reset();
bsr_procedure.reset();

Loading…
Cancel
Save