diff --git a/lib/include/srslte/upper/pdcp_entity_base.h b/lib/include/srslte/upper/pdcp_entity_base.h index a56d74d7d..0e04a09b2 100644 --- a/lib/include/srslte/upper/pdcp_entity_base.h +++ b/lib/include/srslte/upper/pdcp_entity_base.h @@ -126,6 +126,10 @@ public: uint32_t SN(uint32_t count); uint32_t COUNT(uint32_t hfn, uint32_t sn); + // Metrics helpers + virtual pdcp_bearer_metrics_t get_metrics() = 0; + virtual void reset_metrics() = 0; + protected: srslog::basic_logger& logger; srslte::task_sched_handle task_sched; @@ -163,6 +167,9 @@ protected: void write_data_header(const srslte::unique_byte_buffer_t& sdu, uint32_t count); void extract_mac(const unique_byte_buffer_t& pdu, uint8_t* mac); void append_mac(const unique_byte_buffer_t& sdu, uint8_t* mac); + + // Metrics helpers + pdcp_bearer_metrics_t metrics = {}; }; inline uint32_t pdcp_entity_base::HFN(uint32_t count) diff --git a/lib/include/srslte/upper/pdcp_entity_lte.h b/lib/include/srslte/upper/pdcp_entity_lte.h index bb2b69aae..7db530b04 100644 --- a/lib/include/srslte/upper/pdcp_entity_lte.h +++ b/lib/include/srslte/upper/pdcp_entity_lte.h @@ -75,6 +75,10 @@ public: // Getter for the number of discard timers. Used for debugging. uint32_t nof_discard_timers() { return discard_timers_map.size(); } + // Metrics helpers + pdcp_bearer_metrics_t get_metrics() override; + void reset_metrics() override; + private: srsue::rlc_interface_pdcp* rlc = nullptr; srsue::rrc_interface_pdcp* rrc = nullptr; diff --git a/lib/include/srslte/upper/pdcp_entity_nr.h b/lib/include/srslte/upper/pdcp_entity_nr.h index fd02e3cc6..9eee0d748 100644 --- a/lib/include/srslte/upper/pdcp_entity_nr.h +++ b/lib/include/srslte/upper/pdcp_entity_nr.h @@ -60,7 +60,9 @@ public: void get_bearer_state(pdcp_lte_state_t* state) override; void set_bearer_state(const pdcp_lte_state_t& state) override; - void send_status_report() override {} + void send_status_report() override {} + pdcp_bearer_metrics_t get_metrics() override; + void reset_metrics() override; std::map get_buffered_pdus() override { return {}; } diff --git a/lib/src/upper/pdcp_entity_lte.cc b/lib/src/upper/pdcp_entity_lte.cc index e6099c501..88c9f60d6 100644 --- a/lib/src/upper/pdcp_entity_lte.cc +++ b/lib/src/upper/pdcp_entity_lte.cc @@ -548,6 +548,10 @@ bool pdcp_entity_lte::store_sdu(uint32_t tx_count, const unique_byte_buffer_t& s memcpy(sdu_copy->msg, sdu->msg, sdu->N_bytes); sdu_copy->N_bytes = sdu->N_bytes; + // Metrics + metrics.num_tx_buffered_pdus++; + metrics.num_tx_buffered_pdus_bytes += sdu->N_bytes; + undelivered_sdus_queue.insert(std::make_pair(tx_count, std::move(sdu_copy))); return true; } @@ -651,4 +655,17 @@ std::map pdcp_entity_lte::get_buffered_p return cpy; } +/**************************************************************************** + * Metrics helpers + ***************************************************************************/ +pdcp_bearer_metrics_t pdcp_entity_lte::get_metrics() +{ + return metrics; +} + +void pdcp_entity_lte::reset_metrics() +{ + metrics = {}; +} + } // namespace srslte diff --git a/lib/src/upper/pdcp_entity_nr.cc b/lib/src/upper/pdcp_entity_nr.cc index b646ff829..52862282f 100644 --- a/lib/src/upper/pdcp_entity_nr.cc +++ b/lib/src/upper/pdcp_entity_nr.cc @@ -286,4 +286,15 @@ void pdcp_entity_nr::set_bearer_state(const pdcp_lte_state_t& state) // TODO } +pdcp_bearer_metrics_t pdcp_entity_nr::get_metrics() +{ + // TODO + return metrics; +} + +void pdcp_entity_nr::reset_metrics() +{ + metrics = {}; +} + } // namespace srslte