Skip to content

Commit 31665aa

Browse files
enb,cfg_parser: remove strict arfcn check for SA and replace with list of supported configs
the coreset0 index and various related parameters in the scheduler might lead to unsupported and/or overlapping resource allocation patterns. this patch adds a table of supported arfcns for three popular bands (all FDD).
1 parent ae05ec9 commit 31665aa

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

srsenb/src/enb_cfg_parser.cc

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1805,8 +1805,9 @@ int set_derived_args_nr(all_args_t* args_, rrc_nr_cfg_t* rrc_nr_cfg_, phy_cfg_t*
18051805
return SRSRAN_ERROR;
18061806
}
18071807
if (rrc_nr_cfg_->is_standalone) {
1808-
if (cfg.phy_cell.carrier.dl_center_frequency_hz != 1842.5e6) {
1809-
ERROR("Only DL-ARFCN 368500 supported.");
1808+
if (is_valid_arfcn(cfg.band, cfg.dl_arfcn) == false) {
1809+
ERROR("DL-ARFCN %d in band n%d not supported with coreset0 config.", cfg.dl_arfcn, cfg.band);
1810+
ERROR("Valid ARFCNs for band n%d are: %s", cfg.band, valid_arfcns_to_string(cfg.band).c_str());
18101811
return SRSRAN_ERROR;
18111812
}
18121813
if (cfg.duplex_mode == SRSRAN_DUPLEX_MODE_TDD) {
@@ -1819,6 +1820,38 @@ int set_derived_args_nr(all_args_t* args_, rrc_nr_cfg_t* rrc_nr_cfg_, phy_cfg_t*
18191820
return SRSRAN_SUCCESS;
18201821
}
18211822

1823+
// List of selected ARFCNs in band n3, n7 and n20 that match the coreset0 config
1824+
using arfcn_list_t = std::list<uint32_t>;
1825+
std::map<uint32_t, arfcn_list_t> valid_arfcn = {{3, {363500, 368500, 369500, 374500, 375000}},
1826+
{7, {525000, 526200, 531000}},
1827+
{20, {159000, 160200}}};
1828+
1829+
std::string valid_arfcns_to_string(uint32_t band)
1830+
{
1831+
std::string band_string;
1832+
if (valid_arfcn.find(band) != valid_arfcn.end()) {
1833+
for (const auto& arfcn : valid_arfcn.at(band)) {
1834+
band_string += std::to_string(arfcn);
1835+
band_string += ", ";
1836+
}
1837+
}
1838+
return band_string;
1839+
}
1840+
1841+
bool is_valid_arfcn(uint32_t band, uint32_t dl_arfcn)
1842+
{
1843+
if (valid_arfcn.find(band) == valid_arfcn.end()) {
1844+
return false;
1845+
}
1846+
const auto& arfcn_list = valid_arfcn.at(band);
1847+
for (const auto& arfcn : arfcn_list) {
1848+
if (arfcn == dl_arfcn) {
1849+
return true;
1850+
}
1851+
}
1852+
return false;
1853+
}
1854+
18221855
} // namespace enb_conf_sections
18231856

18241857
namespace sib_sections {

srsenb/src/enb_cfg_parser.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ int parse_cell_cfg(all_args_t* args_, srsran_cell_t* cell);
4242
int parse_cfg_files(all_args_t* args_, rrc_cfg_t* rrc_cfg_, rrc_nr_cfg_t* rrc_cfg_nr_, phy_cfg_t* phy_cfg_);
4343
int set_derived_args(all_args_t* args_, rrc_cfg_t* rrc_cfg_, phy_cfg_t* phy_cfg_, const srsran_cell_t& cell_cfg_);
4444
int set_derived_args_nr(all_args_t* args_, rrc_nr_cfg_t* rrc_nr_cfg_, phy_cfg_t* phy_cfg_);
45+
bool is_valid_arfcn(uint32_t band, uint32_t dl_arfcn);
46+
std::string valid_arfcns_to_string(uint32_t band);
4547

4648
} // namespace enb_conf_sections
4749

0 commit comments

Comments
 (0)