From b5e879db475d6f74dd17881792860e249d1cfecb Mon Sep 17 00:00:00 2001 From: Xavier Arteaga Date: Tue, 13 Apr 2021 12:21:26 +0200 Subject: [PATCH] SRSUE: review metrics interfaces --- srsue/hdr/phy/phy.h | 2 +- srsue/hdr/phy/phy_metrics.h | 12 +++---- srsue/hdr/phy/ue_lte_phy_base.h | 2 +- srsue/hdr/phy/ue_nr_phy_base.h | 2 +- srsue/hdr/phy/ue_phy_base.h | 2 +- srsue/hdr/phy/vnf_phy_nr.h | 2 +- srsue/src/metrics_csv.cc | 4 +-- srsue/src/phy/phy.cc | 50 +++++++++++++++------------ srsue/src/phy/vnf_phy_nr.cc | 2 +- srsue/src/ue.cc | 4 +-- srsue/test/ttcn3/hdr/lte_ttcn3_phy.h | 2 +- srsue/test/ttcn3/src/lte_ttcn3_phy.cc | 2 +- 12 files changed, 46 insertions(+), 40 deletions(-) diff --git a/srsue/hdr/phy/phy.h b/srsue/hdr/phy/phy.h index badf53a71..127253345 100644 --- a/srsue/hdr/phy/phy.h +++ b/srsue/hdr/phy/phy.h @@ -91,7 +91,7 @@ public: void wait_initialize() final; bool is_initiated(); - void get_metrics(const std::string& rat, phy_metrics_t* m) final; + void get_metrics(const srsran::srsran_rat_t& rat, phy_metrics_t* m) final; void srsran_phy_logger(phy_logger_level_t log_level, char* str); void enable_pregen_signals(bool enable) final; diff --git a/srsue/hdr/phy/phy_metrics.h b/srsue/hdr/phy/phy_metrics.h index c1334d4c2..c5ba106e9 100644 --- a/srsue/hdr/phy/phy_metrics.h +++ b/srsue/hdr/phy/phy_metrics.h @@ -14,12 +14,12 @@ #define SRSUE_PHY_METRICS_H #include "srsran/srsran.h" -#include +#include namespace srsue { struct info_metrics_t { - typedef srsran::circular_array array_t; + typedef std::array array_t; uint32_t pci; uint32_t dl_earfcn; @@ -31,7 +31,7 @@ struct info_metrics_t { } while (false) struct sync_metrics_t { - typedef srsran::circular_array array_t; + typedef std::array array_t; float ta_us; float distance_km; @@ -64,7 +64,7 @@ private: }; struct ch_metrics_t { - typedef srsran::circular_array array_t; + typedef std::array array_t; float n; float sinr; @@ -106,7 +106,7 @@ private: }; struct dl_metrics_t { - typedef srsran::circular_array array_t; + typedef std::array array_t; float fec_iters; float mcs; @@ -133,7 +133,7 @@ private: }; struct ul_metrics_t { - typedef srsran::circular_array array_t; + typedef std::array array_t; float mcs; float power; diff --git a/srsue/hdr/phy/ue_lte_phy_base.h b/srsue/hdr/phy/ue_lte_phy_base.h index f3a4c696c..a664e3d57 100644 --- a/srsue/hdr/phy/ue_lte_phy_base.h +++ b/srsue/hdr/phy/ue_lte_phy_base.h @@ -40,7 +40,7 @@ public: virtual void wait_initialize() = 0; virtual void start_plot() = 0; - virtual void get_metrics(const std::string& rat, phy_metrics_t* m) = 0; + virtual void get_metrics(const srsran::srsran_rat_t& rat, phy_metrics_t* m) = 0; }; } // namespace srsue diff --git a/srsue/hdr/phy/ue_nr_phy_base.h b/srsue/hdr/phy/ue_nr_phy_base.h index d89845017..4fab4e9d1 100644 --- a/srsue/hdr/phy/ue_nr_phy_base.h +++ b/srsue/hdr/phy/ue_nr_phy_base.h @@ -38,7 +38,7 @@ public: virtual void set_earfcn(std::vector earfcns) = 0; - virtual void get_metrics(const std::string& rat, phy_metrics_t* m) = 0; + virtual void get_metrics(const srsran::srsran_rat_t& rat, phy_metrics_t* m) = 0; }; } // namespace srsue diff --git a/srsue/hdr/phy/ue_phy_base.h b/srsue/hdr/phy/ue_phy_base.h index a0b3ae976..07104184d 100644 --- a/srsue/hdr/phy/ue_phy_base.h +++ b/srsue/hdr/phy/ue_phy_base.h @@ -38,7 +38,7 @@ public: virtual void wait_initialize() = 0; virtual void start_plot() = 0; - virtual void get_metrics(const std::string& rat, phy_metrics_t* m) = 0; + virtual void get_metrics(const srsran::srsran_rat_t& rat, phy_metrics_t* m) = 0; }; } // namespace srsue diff --git a/srsue/hdr/phy/vnf_phy_nr.h b/srsue/hdr/phy/vnf_phy_nr.h index 46ec99612..a09f5568e 100644 --- a/srsue/hdr/phy/vnf_phy_nr.h +++ b/srsue/hdr/phy/vnf_phy_nr.h @@ -38,7 +38,7 @@ public: void stop() override; void wait_initialize() override; - void get_metrics(const std::string& rat, phy_metrics_t* m) override; + void get_metrics(const srsran::srsran_rat_t& rat, phy_metrics_t* m) override; std::string get_type() override { return "vnf_nr"; }; diff --git a/srsue/src/metrics_csv.cc b/srsue/src/metrics_csv.cc index 50eee86bd..fada41ecb 100644 --- a/srsue/src/metrics_csv.cc +++ b/srsue/src/metrics_csv.cc @@ -197,10 +197,10 @@ void metrics_csv::set_metrics(const ue_metrics_t& metrics, const uint32_t period } // Metrics for NR carrier - for (uint32_t r = 0; r < metrics.phy.nof_active_cc; r++) { + for (uint32_t r = 0; r < metrics.phy_nr.nof_active_cc; r++) { set_metrics_helper(metrics.rf, metrics.sys, - metrics.phy, + metrics.phy_nr, metrics.stack.mac_nr, metrics.stack.rrc, metrics.phy.nof_active_cc + r, // NR carrier offset diff --git a/srsue/src/phy/phy.cc b/srsue/src/phy/phy.cc index 0c4089094..6ce9d4f5d 100644 --- a/srsue/src/phy/phy.cc +++ b/srsue/src/phy/phy.cc @@ -184,34 +184,40 @@ void phy::stop() } } -void phy::get_metrics(const std::string& rat, phy_metrics_t* m) +void phy::get_metrics(const srsran::srsran_rat_t& rat, phy_metrics_t* m) { + // Zero structure by default + *m = {}; + + // Get LTE metrics + if (rat == srsran::srsran_rat_t::lte && args.nof_lte_carriers > 0) { + uint32_t dl_earfcn = 0; + srsran_cell_t cell = {}; + sfsync.get_current_cell(&cell, &dl_earfcn); + m->info[0].pci = cell.id; + m->info[0].dl_earfcn = dl_earfcn; + + for (uint32_t i = 1; i < args.nof_lte_carriers; i++) { + m->info[i].dl_earfcn = common.cell_state.get_earfcn(i); + m->info[i].pci = common.cell_state.get_pci(i); + } + + common.get_ch_metrics(m->ch); + common.get_dl_metrics(m->dl); + common.get_ul_metrics(m->ul); + common.get_sync_metrics(m->sync); + m->nof_active_cc = args.nof_lte_carriers; + return; + } + // Get NR metrics - if (rat == "nr" and args.nof_nr_carriers > 0) { + if (rat == srsran::srsran_rat_t::nr && args.nof_nr_carriers > 0) { nr_workers.get_metrics(*m); return; } - if (rat != "lte") { - *m = {}; - return; - } - uint32_t dl_earfcn = 0; - srsran_cell_t cell = {}; - sfsync.get_current_cell(&cell, &dl_earfcn); - m->info[0].pci = cell.id; - m->info[0].dl_earfcn = dl_earfcn; - - for (uint32_t i = 1; i < args.nof_lte_carriers; i++) { - m->info[i].dl_earfcn = common.cell_state.get_earfcn(i); - m->info[i].pci = common.cell_state.get_pci(i); - } - - common.get_ch_metrics(m->ch); - common.get_dl_metrics(m->dl); - common.get_ul_metrics(m->ul); - common.get_sync_metrics(m->sync); - m->nof_active_cc = args.nof_lte_carriers; + // Add other RAT here + // ... } void phy::set_timeadv_rar(uint32_t tti, uint32_t ta_cmd) diff --git a/srsue/src/phy/vnf_phy_nr.cc b/srsue/src/phy/vnf_phy_nr.cc index c057cf5c3..8b62baa86 100644 --- a/srsue/src/phy/vnf_phy_nr.cc +++ b/srsue/src/phy/vnf_phy_nr.cc @@ -61,7 +61,7 @@ void vnf_phy_nr::start_plot() {} void vnf_phy_nr::wait_initialize() {} -void vnf_phy_nr::get_metrics(const std::string& rat, phy_metrics_t* m) {} +void vnf_phy_nr::get_metrics(const srsran::srsran_rat_t& rat, phy_metrics_t* m) {} int vnf_phy_nr::tx_request(const tx_request_t& request) { diff --git a/srsue/src/ue.cc b/srsue/src/ue.cc index 6f8a94149..b125be16d 100644 --- a/srsue/src/ue.cc +++ b/srsue/src/ue.cc @@ -330,8 +330,8 @@ void ue::start_plot() bool ue::get_metrics(ue_metrics_t* m) { bzero(m, sizeof(ue_metrics_t)); - phy->get_metrics("lte", &m->phy); - phy->get_metrics("nr", &m->phy_nr); + phy->get_metrics(srsran::srsran_rat_t::lte, &m->phy); + phy->get_metrics(srsran::srsran_rat_t::nr, &m->phy_nr); radio->get_metrics(&m->rf); stack->get_metrics(&m->stack); gw_inst->get_metrics(m->gw, m->stack.mac[0].nof_tti); diff --git a/srsue/test/ttcn3/hdr/lte_ttcn3_phy.h b/srsue/test/ttcn3/hdr/lte_ttcn3_phy.h index ab25e4b51..c25bb2da0 100644 --- a/srsue/test/ttcn3/hdr/lte_ttcn3_phy.h +++ b/srsue/test/ttcn3/hdr/lte_ttcn3_phy.h @@ -48,7 +48,7 @@ public: void stop() override; void wait_initialize() override; void start_plot() override; - void get_metrics(const std::string& rat, phy_metrics_t* m) override; + void get_metrics(const srsran::srsran_rat_t& rat, phy_metrics_t* m) override; std::string get_type() override; // The interface for the SS diff --git a/srsue/test/ttcn3/src/lte_ttcn3_phy.cc b/srsue/test/ttcn3/src/lte_ttcn3_phy.cc index 433728fc5..8c45a6bcd 100644 --- a/srsue/test/ttcn3/src/lte_ttcn3_phy.cc +++ b/srsue/test/ttcn3/src/lte_ttcn3_phy.cc @@ -50,7 +50,7 @@ void lte_ttcn3_phy::wait_initialize() {} void lte_ttcn3_phy::start_plot() {} -void lte_ttcn3_phy::get_metrics(const std::string& rat, phy_metrics_t* m) {} +void lte_ttcn3_phy::get_metrics(const srsran::srsran_rat_t& rat, phy_metrics_t* m) {} // The interface for the SS void lte_ttcn3_phy::set_cell_map(const cell_list_t& cells_)