diff --git a/lib/src/common/enb_events.cc b/lib/src/common/enb_events.cc index 9892ce123..642ea906f 100644 --- a/lib/src/common/enb_events.cc +++ b/lib/src/common/enb_events.cc @@ -13,6 +13,8 @@ #include "srsran/common/enb_events.h" #include "srsran/srslog/context.h" #include "srsran/srslog/log_channel.h" +#include +#include using namespace srsenb; @@ -82,8 +84,12 @@ DECLARE_METRIC("pci", metric_pci, uint32_t, ""); DECLARE_METRIC("cell_identity", metric_cell_identity, std::string, ""); DECLARE_METRIC("sib9_home_enb_name", metric_sib9_home_enb_name, std::string, ""); DECLARE_METRIC_SET("event_data", mset_sector_event, metric_pci, metric_cell_identity, metric_sib9_home_enb_name); -using sector_event_t = srslog:: - build_context_type; +using sector_event_t = srslog::build_context_type; /// Context for a RRC event. DECLARE_METRIC("asn1_type", metric_asn1_type, uint32_t, ""); @@ -95,21 +101,30 @@ DECLARE_METRIC_SET("event_data", metric_asn1_message, metric_asn1_type, metric_additional); -using rrc_event_t = srslog:: - build_context_type; +using rrc_event_t = srslog::build_context_type; /// Context for S1 context create/delete. DECLARE_METRIC("mme_ue_s1ap_id", metric_ue_mme_id, uint32_t, ""); DECLARE_METRIC("enb_ue_s1ap_id", metric_ue_enb_id, uint32_t, ""); DECLARE_METRIC_SET("event_data", mset_s1apctx_event, metric_ue_mme_id, metric_ue_enb_id, metric_rnti); -using s1apctx_event_t = srslog:: - build_context_type; +using s1apctx_event_t = srslog::build_context_type; /// Context for the RLF report event. DECLARE_METRIC_SET("event_data", mset_rlf_report_event, metric_asn1_length, metric_asn1_message, metric_rnti); using rlf_report_event_t = srslog::build_context_type; @@ -118,6 +133,7 @@ DECLARE_METRIC_SET("event_data", mset_meas_report_event, metric_asn1_length, met using meas_report_event_t = srslog::build_context_type; @@ -131,8 +147,12 @@ DECLARE_METRIC_SET("event_data", metric_target_pci, metric_target_earfcn, metric_new_ue_rnti); -using ho_cmd_t = srslog:: - build_context_type; +using ho_cmd_t = srslog::build_context_type; /// Context for the connection resume event. DECLARE_METRIC("resume_rnti", metric_resume_rnti, uint32_t, ""); @@ -140,6 +160,7 @@ DECLARE_METRIC_SET("event_data", mset_conn_resume_event, metric_rnti, metric_res using conn_resume_t = srslog::build_context_type; @@ -149,6 +170,7 @@ DECLARE_METRIC_SET("event_data", mset_rlf_detected_event, metric_rnti, metric_rl using rlf_detected_t = srslog::build_context_type; @@ -174,6 +196,7 @@ public: ctx.write("event"); ctx.write(get_time_stamp()); ctx.write(enb_cc_idx); + ctx.write(get_pci(enb_cc_idx)); ctx.write("rrc_log"); ctx.get().write(rnti); ctx.get().write(asn1.size()); @@ -190,6 +213,7 @@ public: ctx.write("event"); ctx.write(get_time_stamp()); ctx.write(enb_cc_idx); + ctx.write(get_pci(enb_cc_idx)); ctx.write("s1_context_create"); ctx.get().write(mme_id); ctx.get().write(enb_id); @@ -204,6 +228,7 @@ public: ctx.write("event"); ctx.write(get_time_stamp()); ctx.write(enb_cc_idx); + ctx.write(get_pci(enb_cc_idx)); ctx.write("s1_context_delete"); ctx.get().write(mme_id); ctx.get().write(enb_id); @@ -213,11 +238,14 @@ public: void log_sector_start(uint32_t cc_idx, uint32_t pci, uint32_t cell_id) override { + register_pci(cc_idx, pci); + sector_event_t ctx(""); ctx.write("event"); ctx.write(get_time_stamp()); ctx.write(cc_idx); + ctx.write(pci); ctx.write("sector_start"); ctx.get().write(pci); ctx.get().write(fmt::to_string(cell_id)); @@ -232,6 +260,7 @@ public: ctx.write("event"); ctx.write(get_time_stamp()); ctx.write(cc_idx); + ctx.write(get_pci(cc_idx)); ctx.write("sector_stop"); ctx.get().write(pci); ctx.get().write(fmt::to_string(cell_id)); @@ -251,6 +280,7 @@ public: ctx.write("event"); ctx.write(get_time_stamp()); ctx.write(enb_cc_idx); + ctx.write(get_pci(enb_cc_idx)); ctx.write("measurement_report"); ctx.get().write(asn1.size()); ctx.get().write(asn1); @@ -270,6 +300,7 @@ public: ctx.write("event"); ctx.write(get_time_stamp()); ctx.write(enb_cc_idx); + ctx.write(get_pci(enb_cc_idx)); ctx.write("rlf_report"); ctx.get().write(asn1.size()); ctx.get().write(asn1); @@ -284,6 +315,7 @@ public: ctx.write("event"); ctx.write(get_time_stamp()); ctx.write(enb_cc_idx); + ctx.write(get_pci(enb_cc_idx)); ctx.write("rlf_detected"); ctx.get().write(rnti); ctx.get().write(type); @@ -301,6 +333,7 @@ public: ctx.write("event"); ctx.write(get_time_stamp()); ctx.write(enb_cc_idx); + ctx.write(get_pci(enb_cc_idx)); ctx.write("ho_command"); ctx.get().write(rnti); ctx.get().write(target_pci); @@ -316,6 +349,7 @@ public: ctx.write("event"); ctx.write(get_time_stamp()); ctx.write(enb_cc_idx); + ctx.write(get_pci(enb_cc_idx)); ctx.write("connection_resume"); ctx.get().write(rnti); ctx.get().write(resume_rnti); @@ -323,8 +357,27 @@ public: } private: - srslog::log_channel& event_channel; - event_logger::asn1_output_format asn1_format; + /// Associates the corresponding cc_idx with its PCI. + void register_pci(uint32_t cc_idx, uint32_t pci) + { + std::lock_guard lock(m); + cc_idx_to_pci_map[cc_idx] = pci; + } + + /// Returns the PCI value associated to specified cc_idx, otherwise returns an invalid PCI value if not previous + /// association has been set. + uint32_t get_pci(uint32_t cc_idx) const + { + std::lock_guard lock(m); + auto it = cc_idx_to_pci_map.find(cc_idx); + return (it != cc_idx_to_pci_map.cend()) ? it->second : 999; + } + +private: + srslog::log_channel& event_channel; + event_logger::asn1_output_format asn1_format; + std::unordered_map cc_idx_to_pci_map; + mutable std::mutex m; }; } // namespace