From ce4526a93528950580485c17467e6b63e0ce05f5 Mon Sep 17 00:00:00 2001 From: David Rupprecht Date: Thu, 3 Dec 2020 15:14:02 +0100 Subject: [PATCH] Extended measurements interrat nr r15 testcase with measurements --- srsue/hdr/stack/rrc/rrc_meas.h | 19 +++++++++-------- srsue/src/stack/rrc/rrc_meas.cc | 34 +++++++++++++++++++++++++++---- srsue/test/upper/rrc_meas_test.cc | 30 +++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 12 deletions(-) diff --git a/srsue/hdr/stack/rrc/rrc_meas.h b/srsue/hdr/stack/rrc/rrc_meas.h index f81730ead..935d3747d 100644 --- a/srsue/hdr/stack/rrc/rrc_meas.h +++ b/srsue/hdr/stack/rrc/rrc_meas.h @@ -99,15 +99,7 @@ private: void ho_reest_finish(const uint32_t src_earfcn, const uint32_t dst_earfcn); bool parse_meas_config(const meas_cfg_s* meas_config, bool is_ho_reest, uint32_t src_earfcn); void eval_triggers(); - void eval_triggers_eutra(uint32_t meas_id, - report_cfg_eutra_s& report_cfg, - meas_obj_eutra_s& meas_obj, - meas_cell_eutra* serv_cell, - float Ofs, - float Ocs); void report_triggers(); - void report_triggers_eutra(uint32_t meas_id, report_cfg_eutra_s& report_cfg, meas_obj_eutra_s& meas_obj); - private: void remove_varmeas_report(const uint32_t meas_id); @@ -130,6 +122,17 @@ private: void reportConfig_addmod_interrat(const report_cfg_to_add_mod_s& l); bool reportConfig_addmod_to_reportConfigList(const report_cfg_to_add_mod_s& l); + void eval_triggers_eutra(uint32_t meas_id, + report_cfg_eutra_s& report_cfg, + meas_obj_eutra_s& meas_obj, + meas_cell_eutra* serv_cell, + float Ofs, + float Ocs); + void eval_triggers_interrat_nr(uint32_t meas_id, report_cfg_inter_rat_s& report_cfg, meas_obj_nr_r15_s& meas_obj); + + void report_triggers_eutra(uint32_t meas_id, report_cfg_eutra_s& report_cfg, meas_obj_eutra_s& meas_obj); + void report_triggers_interrat_nr(uint32_t meas_id, report_cfg_inter_rat_s& report_cfg, meas_obj_nr_r15_s& meas_obj); + class cell_trigger_state { public: diff --git a/srsue/src/stack/rrc/rrc_meas.cc b/srsue/src/stack/rrc/rrc_meas.cc index 72bf45fa0..36db6cdb0 100644 --- a/srsue/src/stack/rrc/rrc_meas.cc +++ b/srsue/src/stack/rrc/rrc_meas.cc @@ -463,6 +463,11 @@ void rrc::rrc_meas::var_meas_cfg::report_triggers_eutra(uint32_t meas } } +void rrc::rrc_meas::var_meas_cfg::report_triggers_interrat_nr(uint32_t meas_id, + report_cfg_inter_rat_s& report_cfg, + meas_obj_nr_r15_s& meas_obj) +{} + void rrc::rrc_meas::var_meas_cfg::report_triggers() { // for each measId included in the measIdList within VarMeasConfig @@ -478,6 +483,11 @@ void rrc::rrc_meas::var_meas_cfg::report_triggers() if (meas_obj.meas_obj.type().value == meas_obj_to_add_mod_s::meas_obj_c_::types_opts::meas_obj_eutra && report_cfg.report_cfg.type().value == report_cfg_to_add_mod_s::report_cfg_c_::types::report_cfg_eutra) { report_triggers_eutra(m.first, report_cfg.report_cfg.report_cfg_eutra(), meas_obj.meas_obj.meas_obj_eutra()); + } else if (meas_obj.meas_obj.type().value == meas_obj_to_add_mod_s::meas_obj_c_::types_opts::meas_obj_nr_r15 && + report_cfg.report_cfg.type().value == + report_cfg_to_add_mod_s::report_cfg_c_::types::report_cfg_inter_rat) { + report_triggers_interrat_nr( + m.first, report_cfg.report_cfg.report_cfg_inter_rat(), meas_obj.meas_obj.meas_obj_nr_r15()); } else { log_h->error("Unsupported combination of measurement object type %s and report config type %s \n", meas_obj.meas_obj.type().to_string().c_str(), @@ -624,6 +634,10 @@ void rrc::rrc_meas::var_meas_cfg::eval_triggers_eutra(uint32_t meas_i } } +void rrc::rrc_meas::var_meas_cfg::eval_triggers_interrat_nr(uint32_t meas_id, + report_cfg_inter_rat_s& report_cfg, + meas_obj_nr_r15_s& meas_obj) +{} /* Evaluate event trigger conditions for each cell 5.5.4 */ void rrc::rrc_meas::var_meas_cfg::eval_triggers() { @@ -661,10 +675,22 @@ void rrc::rrc_meas::var_meas_cfg::eval_triggers() m.second.meas_obj_id, m.second.report_cfg_id); - report_cfg_eutra_s& report_cfg = reportConfigList.at(m.second.report_cfg_id).report_cfg.report_cfg_eutra(); - meas_obj_eutra_s& meas_obj = measObjectsList.at(m.second.meas_obj_id).meas_obj.meas_obj_eutra(); - - eval_triggers_eutra(m.first, report_cfg, meas_obj, serv_cell, Ofs, Ocs); + report_cfg_to_add_mod_s& report_cfg = reportConfigList.at(m.second.report_cfg_id); + meas_obj_to_add_mod_s& meas_obj = measObjectsList.at(m.second.meas_obj_id); + if (meas_obj.meas_obj.type().value == meas_obj_to_add_mod_s::meas_obj_c_::types_opts::meas_obj_eutra && + report_cfg.report_cfg.type().value == report_cfg_to_add_mod_s::report_cfg_c_::types::report_cfg_eutra) { + eval_triggers_eutra( + m.first, report_cfg.report_cfg.report_cfg_eutra(), meas_obj.meas_obj.meas_obj_eutra(), serv_cell, Ofs, Ocs); + } else if (meas_obj.meas_obj.type().value == meas_obj_to_add_mod_s::meas_obj_c_::types_opts::meas_obj_nr_r15 && + report_cfg.report_cfg.type().value == + report_cfg_to_add_mod_s::report_cfg_c_::types::report_cfg_inter_rat) + eval_triggers_interrat_nr( + m.first, report_cfg.report_cfg.report_cfg_inter_rat(), meas_obj.meas_obj.meas_obj_nr_r15()); + else { + log_h->error("Unsupported combination of measurement object type %s and report config type %s \n", + meas_obj.meas_obj.type().to_string().c_str(), + report_cfg.report_cfg.type().to_string().c_str()); + } } } diff --git a/srsue/test/upper/rrc_meas_test.cc b/srsue/test/upper/rrc_meas_test.cc index 19dce4120..db002f74f 100644 --- a/srsue/test/upper/rrc_meas_test.cc +++ b/srsue/test/upper/rrc_meas_test.cc @@ -317,6 +317,20 @@ public: run_tti(1); } +#ifdef HAVE_5GNR + void add_neighbour_cell_nr(uint32_t pci, uint32_t earfcn, float rsrp = 0) + { + std::vector phy_meas = {}; + phy_meas_nr_t meas = {}; + meas.pci_nr = pci; + meas.arfcn_nr = earfcn; + meas.rsrp = rsrp; + phy_meas.push_back(meas); // neighbour cell + new_cell_meas_nr(phy_meas); + run_tti(1); + } +#endif + using rrc::has_neighbour_cell; using rrc::is_serving_cell; using rrc::start_cell_select; @@ -1171,6 +1185,8 @@ int meas_obj_inter_rat_nr_test() rep.report_cfg.report_cfg_inter_rat().trigger_type.set_event(); rep.report_cfg.report_cfg_inter_rat().trigger_type.event().event_id.set_event_b1_nr_r15(); rep.report_cfg.report_cfg_inter_rat().trigger_type.event().event_id.event_b1_nr_r15().b1_thres_nr_r15.set_nr_rsrp_r15(); + rep.report_cfg.report_cfg_inter_rat().trigger_type.event().event_id.event_b1_nr_r15().b1_thres_nr_r15.nr_rsrp_r15() = + 56; rep.report_cfg.report_cfg_inter_rat().trigger_type.event().event_id.event_b1_nr_r15().report_on_leave_r15 = true; rep.report_cfg.report_cfg_inter_rat().trigger_type.event().hysteresis = 0; rep.report_cfg.report_cfg_inter_rat().trigger_type.event().time_to_trigger = asn1::rrc::time_to_trigger_opts::options::ms100; @@ -1195,6 +1211,20 @@ int meas_obj_inter_rat_nr_test() // Just test it doesn't crash TESTASSERT(rrctest.send_meas_cfg(rrc_conn_recfg)); TESTASSERT(rrctest.phytest.meas_nof_freqs() == 0); + +#ifdef HAVE_5GNR + + rrctest.add_neighbour_cell(2, 300, 2.0); + rrctest.set_serving_cell(2, 300); + rrctest.add_neighbour_cell_nr(500, 631680, -60.0); + int ttt_iters = 100 + 1; // 100 ms + + for (int i = 0; i < ttt_iters; i++) { + log1->info("Report %d/%d enter condition is true\n", i, ttt_iters); + rrctest.add_neighbour_cell_nr(500, 631680, -60.0); + } + +#endif return SRSLTE_SUCCESS; }