reestablish pdcp bearers is required in case of AM bearers

This commit is contained in:
Francisco Paisana 2020-10-01 15:21:10 +01:00
parent 079ae70e64
commit 137e554eb3
5 changed files with 12 additions and 3 deletions

View File

@ -373,6 +373,7 @@ public:
virtual void enable_encryption(uint16_t rnti, uint32_t lcid) = 0;
virtual bool get_bearer_state(uint16_t rnti, uint32_t lcid, srslte::pdcp_lte_state_t* state) = 0;
virtual bool set_bearer_state(uint16_t rnti, uint32_t lcid, const srslte::pdcp_lte_state_t& state) = 0;
virtual void reestablish(uint16_t rnti) = 0;
};
// PDCP interface for RLC

View File

@ -54,6 +54,7 @@ public:
void enable_encryption(uint16_t rnti, uint32_t lcid) override;
bool get_bearer_state(uint16_t rnti, uint32_t lcid, srslte::pdcp_lte_state_t* state) override;
bool set_bearer_state(uint16_t rnti, uint32_t lcid, const srslte::pdcp_lte_state_t& state) override;
void reestablish(uint16_t rnti) override;
private:
class user_interface_rlc : public srsue::rlc_interface_pdcp

View File

@ -1314,7 +1314,6 @@ void rrc::ue::rrc_mobility::intraenb_ho_st::enter(rrc_mobility* f, const ho_meas
/* Freeze all DRBs. SRBs DL are needed for sending the HO Cmd */
for (const drb_to_add_mod_s& drb : f->rrc_ue->bearer_list.get_established_drbs()) {
f->rrc_enb->pdcp->del_bearer(f->rrc_ue->rnti, drb.drb_id + 2);
f->rrc_enb->mac->bearer_ue_rem(f->rrc_ue->rnti, drb.drb_id + 2);
}
sched_interface::ue_bearer_cfg_t bcfg = {};
@ -1342,8 +1341,7 @@ void rrc::ue::rrc_mobility::handle_crnti_ce(intraenb_ho_st& s, const user_crnti_
if (is_first_crnti_ce) {
// Need to reset SNs of bearers.
rrc_enb->pdcp->rem_user(rrc_ue->rnti);
rrc_enb->pdcp->add_user(rrc_ue->rnti);
rrc_enb->pdcp->reestablish(rrc_ue->rnti);
rrc_enb->rlc->reestablish(rrc_ue->rnti);
// Change PCell in MAC/Scheduler

View File

@ -135,6 +135,14 @@ bool pdcp::set_bearer_state(uint16_t rnti, uint32_t lcid, const srslte::pdcp_lte
return users[rnti].pdcp->set_bearer_state(lcid, state);
}
void pdcp::reestablish(uint16_t rnti)
{
if (users.count(rnti) == 0) {
return;
}
users[rnti].pdcp->reestablish();
}
void pdcp::write_pdu(uint16_t rnti, uint32_t lcid, srslte::unique_byte_buffer_t sdu)
{
if (users.count(rnti)) {

View File

@ -74,6 +74,7 @@ public:
void enable_encryption(uint16_t rnti, uint32_t lcid) override {}
bool get_bearer_state(uint16_t rnti, uint32_t lcid, srslte::pdcp_lte_state_t* state) override { return true; }
bool set_bearer_state(uint16_t rnti, uint32_t lcid, const srslte::pdcp_lte_state_t& state) override { return true; }
void reestablish(uint16_t rnti) override {}
};
class s1ap_dummy : public s1ap_interface_rrc