@@ -30,6 +30,11 @@ rrc_du_impl::rrc_du_impl(const rrc_cfg_t& cfg_, rrc_du_measurement_config_notifi
3030bool rrc_du_impl::handle_served_cell_list (const std::vector<cu_cp_du_served_cells_item>& served_cell_list)
3131{
3232 for (const auto & served_cell : served_cell_list) {
33+ if (!served_cell.gnb_du_sys_info .has_value ()) {
34+ logger.error (" Missing gnb_du_sys_info for served cell" );
35+ return false ;
36+ }
37+
3338 rrc_cell_info cell_info;
3439
3540 // TODO: which freq band to use here?
@@ -46,21 +51,32 @@ bool rrc_du_impl::handle_served_cell_list(const std::vector<cu_cp_du_served_cell
4651 asn1::cbit_ref bref_meas{served_cell.served_cell_info .meas_timing_cfg };
4752 asn1::rrc_nr::meas_timing_cfg_s asn1_meas_timing_cfg;
4853 if (asn1_meas_timing_cfg.unpack (bref_meas) != asn1::SRSASN_SUCCESS) {
49- logger.error (" Failed to unpack Measurement Timing Config container. " );
54+ logger.error (" Failed to unpack Measurement Timing Config container" );
5055 return false ;
5156 }
5257 if (asn1_meas_timing_cfg.crit_exts .type () != meas_timing_cfg_s::crit_exts_c_::types_opts::c1 ||
5358 asn1_meas_timing_cfg.crit_exts .c1 ().type () !=
5459 meas_timing_cfg_s::crit_exts_c_::c1_c_::types_opts::meas_timing_conf ||
5560 asn1_meas_timing_cfg.crit_exts .c1 ().meas_timing_conf ().meas_timing .size () == 0 ) {
56- logger.error (" Invalid Measurement Timing Config container. " );
61+ logger.error (" Invalid Measurement Timing Config container" );
5762 return false ;
5863 }
5964
6065 for (const auto & asn1_meas_timing : asn1_meas_timing_cfg.crit_exts .c1 ().meas_timing_conf ().meas_timing ) {
6166 cell_info.meas_timings .push_back (asn1_to_meas_timing (asn1_meas_timing));
6267 }
6368
69+ // Unpack SIB1 to store timers.
70+ asn1::rrc_nr::sib1_s sib1_msg;
71+ asn1::cbit_ref bref2 (served_cell.gnb_du_sys_info .value ().sib1_msg );
72+ if (sib1_msg.unpack (bref2) != asn1::SRSASN_SUCCESS) {
73+ report_fatal_error (" Failed to unpack SIB1" );
74+ }
75+ cell_info.timers .t300 = std::chrono::milliseconds{sib1_msg.ue_timers_and_consts .t300 .to_number ()};
76+ cell_info.timers .t301 = std::chrono::milliseconds{sib1_msg.ue_timers_and_consts .t301 .to_number ()};
77+ cell_info.timers .t310 = std::chrono::milliseconds{sib1_msg.ue_timers_and_consts .t310 .to_number ()};
78+ cell_info.timers .t311 = std::chrono::milliseconds{sib1_msg.ue_timers_and_consts .t311 .to_number ()};
79+
6480 cell_info_db.emplace (served_cell.served_cell_info .nr_cgi .nci , cell_info);
6581
6682 // Fill cell meas config.
0 commit comments