diff --git a/lib/include/srsran/common/enb_events.h b/lib/include/srsran/common/enb_events.h index e94aaab74..0361c87c2 100644 --- a/lib/include/srsran/common/enb_events.h +++ b/lib/include/srsran/common/enb_events.h @@ -81,12 +81,15 @@ class event_logger event_logger() = default; public: + /// ASN1 output printing format. + enum class asn1_output_format { text, octets }; + /// Returns the instance of the event logger. static event_logger_interface& get(); /// Uses the specified log channel for event logging. /// NOTE: This method is not thread safe. - static void configure(srslog::log_channel& c); + static void configure(srslog::log_channel& c, asn1_output_format asn1_format); private: static std::unique_ptr pimpl; diff --git a/lib/src/common/enb_events.cc b/lib/src/common/enb_events.cc index 51a165d8a..9892ce123 100644 --- a/lib/src/common/enb_events.cc +++ b/lib/src/common/enb_events.cc @@ -76,7 +76,6 @@ DECLARE_METRIC("rnti", metric_rnti, uint16_t, ""); /// ASN1 message metrics. DECLARE_METRIC("asn1_length", metric_asn1_length, uint32_t, ""); DECLARE_METRIC("asn1_message", metric_asn1_message, std::string, ""); -DECLARE_METRIC("asn1_message_txt", metric_asn1_message_txt, std::string, ""); //: TODO: /// Context for sector start/stop. DECLARE_METRIC("pci", metric_pci, uint32_t, ""); @@ -94,7 +93,6 @@ DECLARE_METRIC_SET("event_data", metric_rnti, metric_asn1_length, metric_asn1_message, - metric_asn1_message_txt, metric_asn1_type, metric_additional); using rrc_event_t = srslog:: @@ -158,7 +156,9 @@ using rlf_detected_t = srslog::build_context_type("event"); ctx.write(get_time_stamp()); ctx.write(enb_cc_idx); ctx.write("rrc_log"); ctx.get().write(rnti); - ctx.get().write(asn1_oct_str.size()); - ctx.get().write(asn1_oct_str); - ctx.get().write(asn1_txt_str); + ctx.get().write(asn1.size()); + ctx.get().write(asn1); ctx.get().write(type); ctx.get().write(additional_info); event_channel(ctx); @@ -245,12 +246,14 @@ public: { meas_report_event_t ctx(""); + const std::string& asn1 = (asn1_format == event_logger::asn1_output_format::octets) ? asn1_oct_str : asn1_txt_str; + ctx.write("event"); ctx.write(get_time_stamp()); ctx.write(enb_cc_idx); ctx.write("measurement_report"); - ctx.get().write(asn1_oct_str.size()); - ctx.get().write(asn1_oct_str); + ctx.get().write(asn1.size()); + ctx.get().write(asn1); ctx.get().write(rnti); event_channel(ctx); } @@ -262,12 +265,14 @@ public: { rlf_report_event_t ctx(""); + const std::string& asn1 = (asn1_format == event_logger::asn1_output_format::octets) ? asn1_oct_str : asn1_txt_str; + ctx.write("event"); ctx.write(get_time_stamp()); ctx.write(enb_cc_idx); ctx.write("rlf_report"); - ctx.get().write(asn1_oct_str.size()); - ctx.get().write(asn1_oct_str); + ctx.get().write(asn1.size()); + ctx.get().write(asn1); ctx.get().write(rnti); event_channel(ctx); } @@ -318,7 +323,8 @@ public: } private: - srslog::log_channel& event_channel; + srslog::log_channel& event_channel; + event_logger::asn1_output_format asn1_format; }; } // namespace @@ -330,7 +336,7 @@ event_logger_interface& event_logger::get() return *pimpl; } -void event_logger::configure(srslog::log_channel& c) +void event_logger::configure(srslog::log_channel& c, asn1_output_format asn1_format) { - pimpl = std::unique_ptr(new logging_event_logger(c)); + pimpl = std::unique_ptr(new logging_event_logger(c, asn1_format)); } diff --git a/srsenb/enb.conf.example b/srsenb/enb.conf.example index eeb99daf9..45aaaff21 100644 --- a/srsenb/enb.conf.example +++ b/srsenb/enb.conf.example @@ -325,7 +325,8 @@ enable = false # metrics_csv_filename: File path to use for CSV metrics. # report_json_enable: Write eNB report to JSON file (default disabled) # report_json_filename: Report JSON filename (default /tmp/enb_report.json) -# alarms_log_enable: Enable Alarms logging (default diabled) +# report_json_asn1_oct: Prints ASN1 messages encoded as an octet string instead of plain text in the JSON report file +# alarms_log_enable: Enable Alarms logging (default disabled) # alarms_filename: Alarms logging filename (default /tmp/alarms.log) # tracing_enable: Write source code tracing information to a file. # tracing_filename: File path to use for tracing information. @@ -357,6 +358,7 @@ enable = false #metrics_csv_filename = /tmp/enb_metrics.csv #report_json_enable = true #report_json_filename = /tmp/enb_report.json +#report_json_asn1_oct = false #alarms_log_enable = true #alarms_filename = /tmp/enb_alarms.log #tracing_enable = true diff --git a/srsenb/hdr/enb.h b/srsenb/hdr/enb.h index a04a72c43..57c400aee 100644 --- a/srsenb/hdr/enb.h +++ b/srsenb/hdr/enb.h @@ -85,6 +85,7 @@ struct general_args_t { std::string metrics_csv_filename; bool report_json_enable; std::string report_json_filename; + bool report_json_asn1_oct; bool alarms_log_enable; std::string alarms_filename; bool print_buffer_state; diff --git a/srsenb/src/main.cc b/srsenb/src/main.cc index a3f548623..79f036a3c 100644 --- a/srsenb/src/main.cc +++ b/srsenb/src/main.cc @@ -222,6 +222,7 @@ void parse_args(all_args_t* args, int argc, char* argv[]) ("expert.lte_sample_rates", bpo::value(&use_standard_lte_rates)->default_value(false), "Whether to use default LTE sample rates instead of shorter variants.") ("expert.report_json_enable", bpo::value(&args->general.report_json_enable)->default_value(false), "Write eNB report to JSON file (default disabled)") ("expert.report_json_filename", bpo::value(&args->general.report_json_filename)->default_value("/tmp/enb_report.json"), "Report JSON filename (default /tmp/enb_report.json)") + ("expert.report_json_asn1_oct", bpo::value(&args->general.report_json_asn1_oct)->default_value(false), "Prints ASN1 messages encoded as an octet string instead of plain text in the JSON report file") ("expert.alarms_log_enable", bpo::value(&args->general.alarms_log_enable)->default_value(false), "Enable Alarms logging (default diabled)") ("expert.alarms_filename", bpo::value(&args->general.alarms_filename)->default_value("/tmp/enb_alarms.log"), "Alarms logging filename (default /tmp/alarms.log)") ("expert.tracing_enable", bpo::value(&args->general.tracing_enable)->default_value(false), "Events tracing") @@ -578,7 +579,10 @@ int main(int argc, char* argv[]) // Configure the event logger just before starting the eNB class. if (args.general.report_json_enable) { - event_logger::configure(json_channel); + event_logger::asn1_output_format format = (args.general.report_json_asn1_oct) + ? event_logger::asn1_output_format::octets + : event_logger::asn1_output_format::text; + event_logger::configure(json_channel, format); } if (mlockall((uint32_t)MCL_CURRENT | (uint32_t)MCL_FUTURE) == -1) {