@@ -1814,8 +1814,9 @@ int set_derived_args_nr(all_args_t* args_, rrc_nr_cfg_t* rrc_nr_cfg_, phy_cfg_t*
18141814 return SRSRAN_ERROR;
18151815 }
18161816 if (rrc_nr_cfg_->is_standalone ) {
1817- if (cfg.phy_cell .carrier .dl_center_frequency_hz != 1842.5e6 ) {
1818- ERROR (" Only DL-ARFCN 368500 supported." );
1817+ if (is_valid_arfcn (cfg.band , cfg.dl_arfcn ) == false ) {
1818+ ERROR (" DL-ARFCN %d in band n%d not supported with coreset0 config." , cfg.dl_arfcn , cfg.band );
1819+ ERROR (" Valid ARFCNs for band n%d are: %s" , cfg.band , valid_arfcns_to_string (cfg.band ).c_str ());
18191820 return SRSRAN_ERROR;
18201821 }
18211822 if (cfg.duplex_mode == SRSRAN_DUPLEX_MODE_TDD) {
@@ -1828,6 +1829,38 @@ int set_derived_args_nr(all_args_t* args_, rrc_nr_cfg_t* rrc_nr_cfg_, phy_cfg_t*
18281829 return SRSRAN_SUCCESS;
18291830}
18301831
1832+ // List of selected ARFCNs in band n3, n7 and n20 that match the coreset0 config
1833+ using arfcn_list_t = std::list<uint32_t >;
1834+ std::map<uint32_t , arfcn_list_t > valid_arfcn = {{3 , {363500 , 368500 , 369500 , 374500 , 375000 }},
1835+ {7 , {525000 , 526200 , 531000 }},
1836+ {20 , {159000 , 160200 }}};
1837+
1838+ std::string valid_arfcns_to_string (uint32_t band)
1839+ {
1840+ std::string band_string;
1841+ if (valid_arfcn.find (band) != valid_arfcn.end ()) {
1842+ for (const auto & arfcn : valid_arfcn.at (band)) {
1843+ band_string += std::to_string (arfcn);
1844+ band_string += " , " ;
1845+ }
1846+ }
1847+ return band_string;
1848+ }
1849+
1850+ bool is_valid_arfcn (uint32_t band, uint32_t dl_arfcn)
1851+ {
1852+ if (valid_arfcn.find (band) == valid_arfcn.end ()) {
1853+ return false ;
1854+ }
1855+ const auto & arfcn_list = valid_arfcn.at (band);
1856+ for (const auto & arfcn : arfcn_list) {
1857+ if (arfcn == dl_arfcn) {
1858+ return true ;
1859+ }
1860+ }
1861+ return false ;
1862+ }
1863+
18311864} // namespace enb_conf_sections
18321865
18331866namespace sib_sections {
0 commit comments