Skip to content

Commit 95aeb2d

Browse files
committed
config: added YAML writter to the CU and DU application configurations
1 parent eaa8e15 commit 95aeb2d

25 files changed

+337
-209
lines changed

apps/cu/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ add_executable(srscu
1010
cu.cpp
1111
cu_appconfig_cli11_schema.cpp
1212
cu_appconfig_validator.cpp
13+
cu_appconfig_yaml_writer.cpp
1314
cu_worker_manager.cpp
1415
)
1516

apps/cu/cu.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,11 @@
6060
#include "apps/services/application_message_banners.h"
6161
#include "apps/services/application_tracer.h"
6262
#include "apps/services/stdin_command_dispatcher.h"
63+
#include "apps/units/cu_cp/cu_cp_unit_config_yaml_writer.h"
64+
#include "apps/units/cu_up/cu_up_unit_config_yaml_writer.h"
6365
#include "cu_appconfig.h"
6466
#include "cu_appconfig_validator.h"
67+
#include "cu_appconfig_yaml_writer.h"
6568

6669
#include <atomic>
6770
#include <thread>
@@ -213,7 +216,11 @@ int main(int argc, char** argv)
213216
// Log input configuration.
214217
srslog::basic_logger& config_logger = srslog::fetch_basic_logger("CONFIG");
215218
if (config_logger.debug.enabled()) {
216-
config_logger.debug("Input configuration (all values): \n{}", app.config_to_str(true, false));
219+
YAML::Node node;
220+
fill_cu_appconfig_in_yaml_schema(node, cu_cfg);
221+
fill_cu_up_config_in_yaml_schema(node, cu_up_config);
222+
fill_cu_cp_config_in_yaml_schema(node, cu_cp_config);
223+
config_logger.debug("Input configuration (all values): \n{}", YAML::Dump(node));
217224
} else {
218225
config_logger.info("Input configuration (only non-default values): \n{}", app.config_to_str(false, false));
219226
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
*
3+
* Copyright 2021-2024 Software Radio Systems Limited
4+
*
5+
* By using this file, you agree to the terms and conditions set
6+
* forth in the LICENSE file which can be found at the top level of
7+
* the distribution.
8+
*
9+
*/
10+
11+
#include "cu_appconfig_yaml_writer.h"
12+
#include "apps/services/logger/logger_appconfig_yaml_writer.h"
13+
#include "cu_appconfig.h"
14+
15+
using namespace srsran;
16+
17+
static void fill_cu_appconfig_buffer_pool_section(YAML::Node node, const buffer_pool_appconfig& config)
18+
{
19+
node["nof_segments"] = config.nof_segments;
20+
node["segment_size"] = config.segment_size;
21+
}
22+
23+
static void fill_cu_appconfig_f1ap_section(YAML::Node node, const srs_cu::cu_f1ap_appconfig& config)
24+
{
25+
YAML::Node cu_cp_node = node["cu_cp"];
26+
YAML::Node f1ap_node = cu_cp_node["f1ap"];
27+
f1ap_node["bind_address"] = config.bind_addr;
28+
}
29+
30+
static void fill_cu_appconfig_nru_section(YAML::Node node, const srs_cu::cu_nru_appconfig& config)
31+
{
32+
YAML::Node cu_up_node = node["cu_up"];
33+
YAML::Node nru_node = cu_up_node["nru"];
34+
nru_node["udp_max_rx_msgs"] = config.udp_rx_max_msgs;
35+
nru_node["bind_addr"] = config.bind_addr;
36+
}
37+
38+
void srsran::fill_cu_appconfig_in_yaml_schema(YAML::Node& node, const cu_appconfig& config)
39+
{
40+
fill_logger_appconfig_in_yaml_schema(node, config.log_cfg);
41+
fill_cu_appconfig_buffer_pool_section(node["buffer_pool"], config.buffer_pool_config);
42+
fill_cu_appconfig_f1ap_section(node, config.f1ap_cfg);
43+
fill_cu_appconfig_nru_section(node, config.nru_cfg);
44+
}

apps/cu/cu_appconfig_yaml_writer.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/*
2+
*
3+
* Copyright 2021-2024 Software Radio Systems Limited
4+
*
5+
* By using this file, you agree to the terms and conditions set
6+
* forth in the LICENSE file which can be found at the top level of
7+
* the distribution.
8+
*
9+
*/
10+
11+
#pragma once
12+
13+
#include <yaml-cpp/yaml.h>
14+
15+
namespace srsran {
16+
17+
struct cu_appconfig;
18+
19+
/// Fills the given node with the CU application configuration values.
20+
void fill_cu_appconfig_in_yaml_schema(YAML::Node& node, const cu_appconfig& config);
21+
22+
} // namespace srsran

apps/du/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ add_executable(srsdu
1111
du_appconfig_cli11_schema.cpp
1212
du_appconfig_validators.cpp
1313
du_appconfig_translators.cpp
14+
du_appconfig_yaml_writer.cpp
1415
../gnb/adapters/e2_gateway_remote_connector.cpp # TODO: Delete
1516
)
1617

apps/du/du.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141

4242
// Include ThreadSanitizer (TSAN) options if thread sanitization is enabled.
4343
// This include is not unused - it helps prevent false alarms from the thread sanitizer.
44+
#include "du_appconfig_yaml_writer.h"
45+
4446
#include "srsran/support/tsan_options.h"
4547

4648
#include <atomic>
@@ -54,6 +56,7 @@
5456
#include "apps/units/flexible_du/du_high/pcap_factory.h"
5557
#include "apps/units/flexible_du/split_dynamic/dynamic_du_unit_cli11_schema.h"
5658
#include "apps/units/flexible_du/split_dynamic/dynamic_du_unit_config_validator.h"
59+
#include "apps/units/flexible_du/split_dynamic/dynamic_du_unit_config_yaml_writer.h"
5760
#include "apps/units/flexible_du/split_dynamic/dynamic_du_unit_logger_registrator.h"
5861

5962
#ifdef DPDK_FOUND
@@ -188,7 +191,10 @@ int main(int argc, char** argv)
188191
// Log input configuration.
189192
srslog::basic_logger& config_logger = srslog::fetch_basic_logger("CONFIG");
190193
if (config_logger.debug.enabled()) {
191-
config_logger.debug("Input configuration (all values): \n{}", app.config_to_str(true, false));
194+
YAML::Node node;
195+
fill_du_appconfig_in_yaml_schema(node, du_cfg);
196+
fill_dynamic_du_unit_config_in_yaml_schema(node, du_unit_cfg);
197+
config_logger.debug("Input configuration (all values): \n{}", YAML::Dump(node));
192198
} else {
193199
config_logger.info("Input configuration (only non-default values): \n{}", app.config_to_str(false, false));
194200
}
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
/*
2+
*
3+
* Copyright 2021-2024 Software Radio Systems Limited
4+
*
5+
* By using this file, you agree to the terms and conditions set
6+
* forth in the LICENSE file which can be found at the top level of
7+
* the distribution.
8+
*
9+
*/
10+
11+
#include "du_appconfig_yaml_writer.h"
12+
#include "apps/services/logger/logger_appconfig_yaml_writer.h"
13+
#include "du_appconfig.h"
14+
15+
using namespace srsran;
16+
17+
static void fill_du_appconfig_metrics_section(YAML::Node node, const srs_du::metrics_appconfig& config)
18+
{
19+
node["enable_json_metrics"] = config.enable_json_metrics;
20+
node["addr"] = config.addr;
21+
node["port"] = config.port;
22+
node["autostart_stdout_metrics"] = config.autostart_stdout_metrics;
23+
node["stdout_metrics_period"] = config.stdout_metrics_period;
24+
}
25+
26+
static void fill_du_appconfig_e2_section(YAML::Node node, const e2_appconfig& config)
27+
{
28+
node["enable_du_e2"] = config.enable_du_e2;
29+
node["addr"] = config.ip_addr;
30+
node["port"] = config.port;
31+
node["bind_addr"] = config.bind_addr;
32+
node["sctp_rto_initial"] = config.sctp_rto_initial;
33+
node["sctp_rto_min"] = config.sctp_rto_min;
34+
node["sctp_rto_max"] = config.sctp_rto_max;
35+
node["sctp_init_max_attempts"] = config.sctp_init_max_attempts;
36+
node["sctp_max_init_timeo"] = config.sctp_max_init_timeo;
37+
node["e2sm_kpm_enabled"] = config.e2sm_kpm_enabled;
38+
node["e2sm_rc_enabled"] = config.e2sm_rc_enabled;
39+
}
40+
41+
static void fill_du_appconfig_hal_section(YAML::Node node, const std::optional<hal_appconfig>& config)
42+
{
43+
if (!config.has_value()) {
44+
return;
45+
}
46+
YAML::Node hal_node = node["hal"];
47+
hal_node["eal_args"] = config.value().eal_args;
48+
}
49+
50+
static void fill_du_appconfig_expert_execution_section(YAML::Node node, const expert_execution_appconfig& config)
51+
{
52+
{
53+
YAML::Node affinities_node = node["affinities"];
54+
55+
if (config.affinities.isolated_cpus.has_value()) {
56+
affinities_node["isolated_cpus"] =
57+
fmt::format("{:,}", span<const size_t>(config.affinities.isolated_cpus.value().get_cpu_ids()));
58+
}
59+
60+
if (config.affinities.low_priority_cpu_cfg.mask.any()) {
61+
affinities_node["low_priority_cpus"] =
62+
fmt::format("{:,}", span<const size_t>(config.affinities.low_priority_cpu_cfg.mask.get_cpu_ids()));
63+
}
64+
affinities_node["low_priority_pinning"] = to_string(config.affinities.low_priority_cpu_cfg.pinning_policy);
65+
}
66+
67+
{
68+
YAML::Node threads_node = node["threads"];
69+
YAML::Node non_rt_node = threads_node["non_rt"];
70+
non_rt_node["nof_non_rt_threads"] = config.threads.non_rt_threads.nof_non_rt_threads;
71+
}
72+
}
73+
74+
static void fill_du_appconfig_buffer_pool_section(YAML::Node node, const buffer_pool_appconfig& config)
75+
{
76+
node["nof_segments"] = config.nof_segments;
77+
node["segment_size"] = config.segment_size;
78+
}
79+
80+
static void fill_du_appconfig_nru_section(YAML::Node node, const srs_du::nru_appconfig& config)
81+
{
82+
node["queue_size"] = config.pdu_queue_size;
83+
node["bind_addr"] = config.bind_address;
84+
}
85+
86+
static void fill_du_appconfig_f1ap_section(YAML::Node node, const srs_du::f1ap_appconfig& config)
87+
{
88+
node["cu_cp_addr"] = config.cu_cp_address;
89+
node["bind_addr"] = config.bind_address;
90+
}
91+
92+
void srsran::fill_du_appconfig_in_yaml_schema(YAML::Node& node, const du_appconfig& config)
93+
{
94+
fill_logger_appconfig_in_yaml_schema(node, config.log_cfg);
95+
fill_du_appconfig_metrics_section(node["metrics"], config.metrics_cfg);
96+
fill_du_appconfig_e2_section(node["e2"], config.e2_cfg);
97+
fill_du_appconfig_hal_section(node, config.hal_config);
98+
fill_du_appconfig_expert_execution_section(node["expert_execution"], config.expert_execution_cfg);
99+
fill_du_appconfig_buffer_pool_section(node["buffer_pool"], config.buffer_pool_config);
100+
fill_du_appconfig_nru_section(node["nru"], config.nru_cfg);
101+
fill_du_appconfig_f1ap_section(node["f1ap"], config.f1ap_cfg);
102+
}

apps/du/du_appconfig_yaml_writer.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/*
2+
*
3+
* Copyright 2021-2024 Software Radio Systems Limited
4+
*
5+
* By using this file, you agree to the terms and conditions set
6+
* forth in the LICENSE file which can be found at the top level of
7+
* the distribution.
8+
*
9+
*/
10+
11+
#pragma once
12+
13+
#include <yaml-cpp/yaml.h>
14+
15+
namespace srsran {
16+
17+
struct du_appconfig;
18+
19+
/// Fills the given node with the DU application configuration values.
20+
void fill_du_appconfig_in_yaml_schema(YAML::Node& node, const du_appconfig& config);
21+
22+
} // namespace srsran

apps/gnb/gnb.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -245,18 +245,12 @@ int main(int argc, char** argv)
245245
// Log input configuration.
246246
srslog::basic_logger& config_logger = srslog::fetch_basic_logger("CONFIG");
247247
if (config_logger.debug.enabled()) {
248-
// Refesh defaults in case some parameters may have changed after the autoderivation process.
249-
refresh_defaults(app);
250-
config_logger.debug("Input configuration (all values): \n{}", app.config_to_str(true, false));
251-
252-
config_logger.debug("NOW IT GOES THE MANUAL CONFIG");
253248
YAML::Node node;
254249
fill_gnb_appconfig_in_yaml_schema(node, gnb_cfg);
255250
fill_cu_up_config_in_yaml_schema(node, cu_up_config);
256251
fill_cu_cp_config_in_yaml_schema(node, cu_cp_config);
257252
fill_dynamic_du_unit_config_in_yaml_schema(node, du_unit_cfg);
258-
config_logger.debug("CU-UP config values: \n{}", YAML::Dump(node));
259-
253+
config_logger.debug("Input configuration (all values): \n{}", YAML::Dump(node));
260254
} else {
261255
config_logger.info("Input configuration (only non-default values): \n{}", app.config_to_str(false, false));
262256
}

apps/gnb/gnb_appconfig_yaml_writer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ static void fill_gnb_appconfig_expert_execution_section(YAML::Node node, const e
5959
}
6060

6161
if (config.affinities.low_priority_cpu_cfg.mask.any()) {
62-
affinities_node["l2_cell_cpus"] =
62+
affinities_node["low_priority_cpus"] =
6363
fmt::format("{:,}", span<const size_t>(config.affinities.low_priority_cpu_cfg.mask.get_cpu_ids()));
6464
}
6565
affinities_node["low_priority_pinning"] = to_string(config.affinities.low_priority_cpu_cfg.pinning_policy);
@@ -90,4 +90,4 @@ void srsran::fill_gnb_appconfig_in_yaml_schema(YAML::Node& node, const gnb_appco
9090
fill_gnb_appconfig_hal_section(node, config.hal_config);
9191
fill_gnb_appconfig_expert_execution_section(node["expert_execution"], config.expert_execution_cfg);
9292
fill_gnb_appconfig_buffer_pool_section(node["buffer_pool"], config.buffer_pool_config);
93-
}
93+
}

0 commit comments

Comments
 (0)