mirror of https://github.com/PentHertz/srsLTE.git
enb,rrc: disable SRB2 in mac controller during handover. This is to
avoid transporting NAS messages before we received the RRC Reconf complete and the HO is finished.
This commit is contained in:
parent
d62266ec58
commit
981e682d2e
|
@ -61,6 +61,7 @@ public:
|
|||
bool is_crnti_set() const { return crnti_set; }
|
||||
|
||||
void set_scell_activation(const std::bitset<SRSRAN_MAX_CARRIERS>& scell_mask);
|
||||
void set_srb2_activation(bool active);
|
||||
void set_drb_activation(bool active);
|
||||
|
||||
void update_mac();
|
||||
|
|
|
@ -137,6 +137,9 @@ int mac_controller::handle_crnti_ce(uint32_t temp_crnti)
|
|||
current_sched_ue_cfg.ue_bearers[i] = next_sched_ue_cfg.ue_bearers[i];
|
||||
}
|
||||
|
||||
// keep SRB2 disabled until RRCReconfComplete is received
|
||||
set_srb2_activation(false);
|
||||
|
||||
return mac->ue_set_crnti(temp_crnti, rnti, current_sched_ue_cfg);
|
||||
}
|
||||
|
||||
|
@ -220,7 +223,10 @@ void mac_controller::handle_con_reconf_complete()
|
|||
{
|
||||
current_sched_ue_cfg = next_sched_ue_cfg;
|
||||
|
||||
// Setup all bearers
|
||||
// Setup SRB2
|
||||
set_srb2_activation(true);
|
||||
|
||||
// Setup all data bearers
|
||||
apply_current_bearers_cfg();
|
||||
|
||||
// Apply SCell+Bearer changes to MAC
|
||||
|
@ -256,7 +262,9 @@ void mac_controller::handle_target_enb_ho_cmd(const asn1::rrc::rrc_conn_recfg_r8
|
|||
ue_cfg_apply_capabilities(next_sched_ue_cfg, *rrc_cfg, uecaps);
|
||||
ue_cfg_apply_reconf_complete_updates(next_sched_ue_cfg, conn_recfg, ue_cell_list);
|
||||
|
||||
// Temporarily freeze new allocations for DRBs (SRBs are needed to send RRC Reconf Message)
|
||||
// Temporarily freeze SRB2 and DRBs. SRB1 is needed to send
|
||||
// RRC Reconfiguration and receive RRC Reconfiguration Complete
|
||||
set_srb2_activation(false);
|
||||
set_drb_activation(false);
|
||||
|
||||
// Apply changes to MAC scheduler
|
||||
|
@ -320,6 +328,12 @@ void mac_controller::set_scell_activation(const std::bitset<SRSRAN_MAX_CARRIERS>
|
|||
}
|
||||
}
|
||||
|
||||
void mac_controller::set_srb2_activation(bool active)
|
||||
{
|
||||
current_sched_ue_cfg.ue_bearers[srb_to_lcid(lte_srb::srb2)].direction =
|
||||
active ? mac_lc_ch_cfg_t::BOTH : mac_lc_ch_cfg_t::IDLE;
|
||||
}
|
||||
|
||||
void mac_controller::set_drb_activation(bool active)
|
||||
{
|
||||
for (const drb_to_add_mod_s& drb : bearer_list.get_established_drbs()) {
|
||||
|
|
|
@ -324,18 +324,17 @@ int test_s1ap_tenb_mobility(test_event test_params)
|
|||
TESTASSERT(mac_ue.supported_cc_list[0].enb_cc_idx == 0);
|
||||
TESTASSERT(mac_ue.ue_bearers[srb_to_lcid(lte_srb::srb0)].direction == mac_lc_ch_cfg_t::BOTH);
|
||||
TESTASSERT(mac_ue.ue_bearers[srb_to_lcid(lte_srb::srb1)].direction == mac_lc_ch_cfg_t::BOTH);
|
||||
TESTASSERT(mac_ue.ue_bearers[srb_to_lcid(lte_srb::srb2)].direction == mac_lc_ch_cfg_t::BOTH);
|
||||
TESTASSERT(mac_ue.ue_bearers[srb_to_lcid(lte_srb::srb2)].direction == mac_lc_ch_cfg_t::IDLE);
|
||||
TESTASSERT(mac_ue.ue_bearers[drb_to_lcid(lte_drb::drb1)].direction == mac_lc_ch_cfg_t::IDLE);
|
||||
|
||||
tester.tic();
|
||||
TESTASSERT(tester.rrc.get_nof_users() == 1);
|
||||
TESTASSERT(tester.mac.ue_db.count(0x46));
|
||||
// auto& mac_ue = tester.mac.ue_db[0x46];
|
||||
TESTASSERT(mac_ue.supported_cc_list[0].active);
|
||||
TESTASSERT(mac_ue.supported_cc_list[0].enb_cc_idx == 0);
|
||||
TESTASSERT(mac_ue.ue_bearers[srb_to_lcid(lte_srb::srb0)].direction == mac_lc_ch_cfg_t::BOTH);
|
||||
TESTASSERT(mac_ue.ue_bearers[srb_to_lcid(lte_srb::srb1)].direction == mac_lc_ch_cfg_t::BOTH);
|
||||
TESTASSERT(mac_ue.ue_bearers[srb_to_lcid(lte_srb::srb2)].direction == mac_lc_ch_cfg_t::BOTH);
|
||||
TESTASSERT(mac_ue.ue_bearers[srb_to_lcid(lte_srb::srb2)].direction == mac_lc_ch_cfg_t::IDLE);
|
||||
TESTASSERT(mac_ue.ue_bearers[drb_to_lcid(lte_drb::drb1)].direction == mac_lc_ch_cfg_t::IDLE);
|
||||
// Check Security Configuration
|
||||
TESTASSERT(tester.pdcp.bearers.count(0x46));
|
||||
|
@ -354,7 +353,7 @@ int test_s1ap_tenb_mobility(test_event test_params)
|
|||
TESTASSERT(tester.pdcp.bearers[0x46][srb_to_lcid(lte_srb::srb1)].sec_cfg.integ_algo == as_sec_cfg.integ_algo);
|
||||
|
||||
TESTASSERT(mac_ue.ue_bearers[srb_to_lcid(lte_srb::srb1)].direction == mac_lc_ch_cfg_t::BOTH);
|
||||
TESTASSERT(mac_ue.ue_bearers[srb_to_lcid(lte_srb::srb2)].direction == mac_lc_ch_cfg_t::BOTH);
|
||||
TESTASSERT(mac_ue.ue_bearers[srb_to_lcid(lte_srb::srb2)].direction == mac_lc_ch_cfg_t::IDLE);
|
||||
TESTASSERT(mac_ue.ue_bearers[drb_to_lcid(lte_drb::drb1)].direction == mac_lc_ch_cfg_t::IDLE);
|
||||
|
||||
// Check if S1AP Handover Request ACK send is called
|
||||
|
@ -373,7 +372,7 @@ int test_s1ap_tenb_mobility(test_event test_params)
|
|||
auto& recfg_r8 = dl_dcch_msg.msg.c1().rrc_conn_recfg().crit_exts.c1().rrc_conn_recfg_r8();
|
||||
|
||||
TESTASSERT(mac_ue.ue_bearers[srb_to_lcid(lte_srb::srb1)].direction == mac_lc_ch_cfg_t::BOTH);
|
||||
TESTASSERT(mac_ue.ue_bearers[srb_to_lcid(lte_srb::srb2)].direction == mac_lc_ch_cfg_t::BOTH);
|
||||
TESTASSERT(mac_ue.ue_bearers[srb_to_lcid(lte_srb::srb2)].direction == mac_lc_ch_cfg_t::IDLE);
|
||||
TESTASSERT(mac_ue.ue_bearers[drb_to_lcid(lte_drb::drb1)].direction == mac_lc_ch_cfg_t::IDLE);
|
||||
|
||||
// Receives MMEStatusTransfer
|
||||
|
@ -393,7 +392,7 @@ int test_s1ap_tenb_mobility(test_event test_params)
|
|||
TESTASSERT(tester.pdcp.bearers[0x46][3].state.rx_hfn == 4);
|
||||
|
||||
TESTASSERT(mac_ue.ue_bearers[srb_to_lcid(lte_srb::srb1)].direction == mac_lc_ch_cfg_t::BOTH);
|
||||
TESTASSERT(mac_ue.ue_bearers[srb_to_lcid(lte_srb::srb2)].direction == mac_lc_ch_cfg_t::BOTH);
|
||||
TESTASSERT(mac_ue.ue_bearers[srb_to_lcid(lte_srb::srb2)].direction == mac_lc_ch_cfg_t::IDLE);
|
||||
TESTASSERT(mac_ue.ue_bearers[drb_to_lcid(lte_drb::drb1)].direction == mac_lc_ch_cfg_t::IDLE);
|
||||
|
||||
// user PRACHs and sends C-RNTI CE
|
||||
|
@ -511,7 +510,8 @@ int test_intraenb_mobility(srsran::log_sink_spy& spy, test_event test_params)
|
|||
TESTASSERT(tester.phy.last_cfg[0].enb_cc_idx == ue_cfg->supported_cc_list[0].enb_cc_idx);
|
||||
TESTASSERT(ue_cfg->ue_bearers[srb_to_lcid(lte_srb::srb0)].direction == srsenb::mac_lc_ch_cfg_t::BOTH);
|
||||
TESTASSERT(ue_cfg->ue_bearers[srb_to_lcid(lte_srb::srb1)].direction == srsenb::mac_lc_ch_cfg_t::BOTH);
|
||||
TESTASSERT(ue_cfg->ue_bearers[srb_to_lcid(lte_srb::srb2)].direction == srsenb::mac_lc_ch_cfg_t::BOTH);
|
||||
TESTASSERT(ue_cfg->ue_bearers[srb_to_lcid(lte_srb::srb2)].direction == srsenb::mac_lc_ch_cfg_t::IDLE);
|
||||
TESTASSERT(ue_cfg->ue_bearers[drb_to_lcid(lte_drb::drb1)].direction == srsenb::mac_lc_ch_cfg_t::IDLE);
|
||||
|
||||
/* Test Case: The UE receives a duplicate C-RNTI CE. Nothing should happen */
|
||||
if (test_params == test_event::duplicate_crnti_ce) {
|
||||
|
@ -525,7 +525,8 @@ int test_intraenb_mobility(srsran::log_sink_spy& spy, test_event test_params)
|
|||
/* Test Case: Terminate first Handover. No extra messages should be sent DL. SR/CQI resources match recfg message */
|
||||
uint8_t recfg_complete[] = {0x10, 0x00};
|
||||
copy_msg_to_buffer(pdu, recfg_complete);
|
||||
tester.rrc.write_pdu(tester.rnti, srb_to_lcid(lte_srb::srb2), std::move(pdu));
|
||||
tester.rrc.write_pdu(tester.rnti, srb_to_lcid(lte_srb::srb1), std::move(pdu));
|
||||
tester.tic();
|
||||
TESTASSERT(tester.pdcp.last_sdu.sdu == nullptr);
|
||||
ue_cfg = &tester.mac.ue_db[tester.rnti];
|
||||
TESTASSERT(ue_cfg->pucch_cfg.sr_configured);
|
||||
|
@ -534,6 +535,10 @@ int test_intraenb_mobility(srsran::log_sink_spy& spy, test_event test_params)
|
|||
TESTASSERT(ue_cfg->supported_cc_list[0].dl_cfg.cqi_report.pmi_idx ==
|
||||
phy_cfg_ded.cqi_report_cfg.cqi_report_periodic.setup().cqi_pmi_cfg_idx);
|
||||
TESTASSERT(ue_cfg->pucch_cfg.n_pucch == phy_cfg_ded.cqi_report_cfg.cqi_report_periodic.setup().cqi_pucch_res_idx);
|
||||
TESTASSERT(ue_cfg->ue_bearers[srb_to_lcid(lte_srb::srb0)].direction == srsenb::mac_lc_ch_cfg_t::BOTH);
|
||||
TESTASSERT(ue_cfg->ue_bearers[srb_to_lcid(lte_srb::srb1)].direction == srsenb::mac_lc_ch_cfg_t::BOTH);
|
||||
TESTASSERT(ue_cfg->ue_bearers[srb_to_lcid(lte_srb::srb2)].direction == srsenb::mac_lc_ch_cfg_t::BOTH);
|
||||
TESTASSERT(ue_cfg->ue_bearers[drb_to_lcid(lte_drb::drb1)].direction == srsenb::mac_lc_ch_cfg_t::BOTH);
|
||||
|
||||
/* Test Case: The RRC should be able to start a new handover */
|
||||
uint8_t meas_report[] = {0x08, 0x10, 0x38, 0x74, 0x00, 0x05, 0xBC, 0x80}; // PCI == 1
|
||||
|
|
Loading…
Reference in New Issue