From cfd94441a517dfa405860b5d4969c2fdfc8588e6 Mon Sep 17 00:00:00 2001 From: Pedro Alvarez Date: Mon, 15 Feb 2021 18:11:39 +0000 Subject: [PATCH] Added metrics to srsenb PDCP --- lib/include/srslte/interfaces/enb_metrics_interface.h | 6 ++++++ lib/src/upper/pdcp_entity_lte.cc | 1 - srsenb/hdr/stack/upper/pdcp.h | 4 ++++ srsenb/src/stack/enb_stack_lte.cc | 1 + srsenb/src/stack/upper/pdcp.cc | 10 ++++++++++ 5 files changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/include/srslte/interfaces/enb_metrics_interface.h b/lib/include/srslte/interfaces/enb_metrics_interface.h index 02168e874..6cc8f6170 100644 --- a/lib/include/srslte/interfaces/enb_metrics_interface.h +++ b/lib/include/srslte/interfaces/enb_metrics_interface.h @@ -22,6 +22,7 @@ #include "srsenb/hdr/stack/upper/s1ap_metrics.h" #include "srslte/common/metrics_hub.h" #include "srslte/radio/radio_metrics.h" +#include "srslte/upper/pdcp_metrics.h" #include "srslte/upper/rlc_metrics.h" #include "srsue/hdr/stack/upper/gw_metrics.h" @@ -31,10 +32,15 @@ struct rlc_metrics_t { std::vector ues; }; +struct pdcp_metrics_t { + std::vector ues; +}; + struct stack_metrics_t { mac_metrics_t mac; rrc_metrics_t rrc; rlc_metrics_t rlc; + pdcp_metrics_t pdcp; s1ap_metrics_t s1ap; }; diff --git a/lib/src/upper/pdcp_entity_lte.cc b/lib/src/upper/pdcp_entity_lte.cc index dc77f52a3..3d0094e8a 100644 --- a/lib/src/upper/pdcp_entity_lte.cc +++ b/lib/src/upper/pdcp_entity_lte.cc @@ -603,7 +603,6 @@ void pdcp_entity_lte::notify_delivery(const std::vector& pdcp_sns) .count()); metrics.num_tx_acked_bytes += it->second->N_bytes; metrics.num_tx_buffered_pdus_bytes -= it->second->N_bytes; - metrics.num_tx_buffered_pdus--; // If ACK'ed bytes are equal to (or exceed) PDU size, remove PDU and disarm timer. undelivered_sdus_queue.erase(sn); diff --git a/srsenb/hdr/stack/upper/pdcp.h b/srsenb/hdr/stack/upper/pdcp.h index 5f2a17d48..0f124519f 100644 --- a/srsenb/hdr/stack/upper/pdcp.h +++ b/srsenb/hdr/stack/upper/pdcp.h @@ -11,6 +11,7 @@ */ #include "srslte/common/timers.h" +#include "srslte/interfaces/enb_metrics_interface.h" #include "srslte/interfaces/enb_pdcp_interfaces.h" #include "srslte/interfaces/ue_interfaces.h" #include "srslte/srslog/srslog.h" @@ -57,6 +58,9 @@ public: // pdcp_interface_gtpu std::map get_buffered_pdus(uint16_t rnti, uint32_t lcid) override; + // Metrics + void get_metrics(pdcp_metrics_t& m, const uint32_t nof_tti); + private: class user_interface_rlc : public srsue::rlc_interface_pdcp { diff --git a/srsenb/src/stack/enb_stack_lte.cc b/srsenb/src/stack/enb_stack_lte.cc index b3bd8ccab..304b4184a 100644 --- a/srsenb/src/stack/enb_stack_lte.cc +++ b/srsenb/src/stack/enb_stack_lte.cc @@ -199,6 +199,7 @@ bool enb_stack_lte::get_metrics(stack_metrics_t* metrics) mac.get_metrics(metrics.mac); if (not metrics.mac.ues.empty()) { rlc.get_metrics(metrics.rlc, metrics.mac.ues[0].nof_tti); + pdcp.get_metrics(metrics.pdcp, metrics.mac.ues[0].nof_tti); } rrc.get_metrics(metrics.rrc); s1ap.get_metrics(metrics.s1ap); diff --git a/srsenb/src/stack/upper/pdcp.cc b/srsenb/src/stack/upper/pdcp.cc index ab833cb2f..e5d531c3e 100644 --- a/srsenb/src/stack/upper/pdcp.cc +++ b/srsenb/src/stack/upper/pdcp.cc @@ -225,4 +225,14 @@ std::string pdcp::user_interface_rrc::get_rb_name(uint32_t lcid) return to_string((rb_id_t)lcid); } +void pdcp::get_metrics(pdcp_metrics_t& m, const uint32_t nof_tti) +{ + m.ues.resize(users.size()); + size_t count = 0; + for (auto& user : users) { + user.second.pdcp->get_metrics(m.ues[count], nof_tti); + count++; + } +} + } // namespace srsenb