@@ -52,24 +52,44 @@ static du_low_configuration create_du_low_config(const gnb_appconfig&
5252 return du_lo_cfg;
5353}
5454
55- std::vector<std::unique_ptr<du>> srsran::make_gnb_dus (const gnb_appconfig& gnb_cfg,
56- worker_manager& workers,
57- upper_phy_rg_gateway& rg_gateway,
58- upper_phy_rx_symbol_request_notifier& rx_symbol_request_notifier,
59- srs_du::f1c_connection_client& f1c_client_handler,
60- srs_du::f1u_du_gateway& f1u_gw,
61- timer_manager& timer_mng,
62- mac_pcap& mac_p,
63- gnb_console_helper& console_helper,
64- e2_connection_client& e2_client_handler,
65- e2_du_metrics_manager& e2_du_metric_manager,
66- metrics_hub& metrics_hub)
55+ std::vector<std::unique_ptr<du>>
56+ srsran::make_gnb_dus (const gnb_appconfig& gnb_cfg,
57+ worker_manager& workers,
58+ upper_phy_rg_gateway& rg_gateway,
59+ upper_phy_rx_symbol_request_notifier& rx_symbol_request_notifier,
60+ srs_du::f1c_connection_client& f1c_client_handler,
61+ srs_du::f1u_du_gateway& f1u_gw,
62+ timer_manager& timer_mng,
63+ mac_pcap& mac_p,
64+ gnb_console_helper& console_helper,
65+ e2_connection_client& e2_client_handler,
66+ std::vector<std::unique_ptr<e2_du_metrics_manager>>& e2_du_metric_managers,
67+ metrics_hub& metrics_hub)
6768{
6869 // DU cell config
6970 std::vector<du_cell_config> du_cells = generate_du_cell_config (gnb_cfg);
7071 console_helper.set_cells (du_cells);
71- metrics_hub.add_subscriber (console_helper.get_metrics_notifier ());
7272
73+ // Set up metrics hub with DU sources and e2 subscribers if enabled.
74+ for (unsigned i = 0 ; i < gnb_cfg.cells_cfg .size (); i++) {
75+ std::string source_name = " DU " + std::to_string (i);
76+ unsigned source_idx = metrics_hub.add_source (source_name);
77+ if (gnb_cfg.e2_cfg .enable_du_e2 ) {
78+ e2_du_metric_managers.push_back (std::make_unique<e2_du_metrics_manager>());
79+ auto sub = metrics_hub.add_subscriber (*e2_du_metric_managers.back ().get ());
80+ metrics_hub.connect_subscriber_to_source (source_idx, sub);
81+ }
82+ }
83+ // This source will aggregate the metrics from all DU sources.
84+ unsigned console_source_agg_idx = metrics_hub.add_source (" console aggregator" );
85+ auto console_agg_subscriber = metrics_hub.add_subscriber (*metrics_hub.get_source_notifier (console_source_agg_idx));
86+ // Connecting all DU metric sources to the console subscriber via the aggregator source.
87+ for (unsigned i = 0 ; i < du_cells.size (); i++) {
88+ metrics_hub.connect_subscriber_to_source (i, console_agg_subscriber);
89+ }
90+ // Adding console as a subscriber to metrics_hub with the console aggregator as a source.
91+ auto console_subscriber = metrics_hub.add_subscriber (console_helper.get_metrics_notifier ());
92+ metrics_hub.connect_subscriber_to_source (console_source_agg_idx, console_subscriber);
7393 std::vector<std::unique_ptr<du>> du_insts;
7494 for (unsigned i = 0 , e = du_cells.size (); i != e; ++i) {
7595 // Create a gNB config with one cell.
@@ -107,12 +127,12 @@ std::vector<std::unique_ptr<du>> srsran::make_gnb_dus(const gnb_appconfig&
107127 du_hi_cfg.gnb_du_name = fmt::format (" srsdu{}" , du_hi_cfg.gnb_du_id );
108128 du_hi_cfg.du_bind_addr = {fmt::format (" 127.0.0.{}" , du_hi_cfg.gnb_du_id )};
109129 du_hi_cfg.mac_cfg = generate_mac_expert_config (gnb_cfg);
110- du_hi_cfg.metrics_notifier = & metrics_hub;
130+ du_hi_cfg.metrics_notifier = metrics_hub. get_source_notifier (i) ;
111131 du_hi_cfg.sched_cfg = generate_scheduler_expert_config (gnb_cfg);
112132 if (gnb_cfg.e2_cfg .enable_du_e2 ) {
113133 du_hi_cfg.e2_client = &e2_client_handler;
114134 du_hi_cfg.e2ap_config = generate_e2_config (gnb_cfg);
115- du_hi_cfg.e2_du_metric_manager = &e2_du_metric_manager ;
135+ du_hi_cfg.e2_du_metric_manager = &(*(e2_du_metric_managers[i]. get ())) ;
116136 }
117137 if (gnb_cfg.test_mode_cfg .test_ue .rnti != INVALID_RNTI) {
118138 du_hi_cfg.test_cfg .test_ue = srs_du::du_test_config::test_ue_config{gnb_cfg.test_mode_cfg .test_ue .rnti ,
0 commit comments