Skip to content

Commit 1ba7fda

Browse files
carlo-galcodebot
authored andcommitted
du: prevent getting band from arfcn when band is given
Signed-off-by: Carlo Galiotto <[email protected]>
1 parent e4a0490 commit 1ba7fda

File tree

7 files changed

+26
-40
lines changed

7 files changed

+26
-40
lines changed

apps/units/flexible_du/du_high/du_high_config_validator.cpp

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -195,10 +195,9 @@ static bool validate_srb_unit_config(const std::map<srb_id_t, du_high_unit_srb_c
195195
return true;
196196
}
197197

198-
static bool validate_pdcch_unit_config(const du_high_unit_base_cell_config base_cell)
198+
static bool validate_pdcch_unit_config(const du_high_unit_base_cell_config& base_cell)
199199
{
200-
const auto band =
201-
base_cell.band.has_value() ? *base_cell.band : band_helper::get_band_from_dl_arfcn(base_cell.dl_f_ref_arfcn);
200+
const auto band = base_cell.band.value_or(band_helper::get_band_from_dl_arfcn(base_cell.dl_f_ref_arfcn));
202201
const unsigned nof_crbs =
203202
band_helper::get_n_rbs_from_bw(base_cell.channel_bw_mhz, base_cell.common_scs, band_helper::get_freq_range(band));
204203
if (base_cell.pdcch_cfg.common.coreset0_index.has_value()) {
@@ -603,8 +602,7 @@ static bool validate_tdd_ul_dl_unit_config(const du_high_unit_tdd_ul_dl_config&
603602

604603
static bool validate_dl_ul_arfcn_and_band(const du_high_unit_base_cell_config& config)
605604
{
606-
nr_band band =
607-
config.band.has_value() ? config.band.value() : band_helper::get_band_from_dl_arfcn(config.dl_f_ref_arfcn);
605+
const nr_band band = config.band.value_or(band_helper::get_band_from_dl_arfcn(config.dl_f_ref_arfcn));
608606

609607
// Check if the band is supported with given SCS or band.
610608
// NOTE: Band n46 would be compatible with the 10MHz BW, but there is no sync raster that falls within the band
@@ -643,7 +641,7 @@ static bool validate_dl_ul_arfcn_and_band(const du_high_unit_base_cell_config& c
643641
return false;
644642
}
645643

646-
// Check whether the DL-ARFCN (and optionally the UL-ARFCN) is within the band and follows the Raster step.
644+
// Check whether the DL-ARFCN and the UL-ARFCN are within the band and follow the Raster step.
647645
if (config.band.has_value()) {
648646
error_type<std::string> ret = band_helper::is_dl_arfcn_valid_given_band(
649647
*config.band, config.dl_f_ref_arfcn, config.common_scs, config.channel_bw_mhz);
@@ -655,6 +653,7 @@ static bool validate_dl_ul_arfcn_and_band(const du_high_unit_base_cell_config& c
655653
const uint32_t ul_arfcn = band_helper::get_ul_arfcn_from_dl_arfcn(config.dl_f_ref_arfcn, config.band.value());
656654
ret = band_helper::is_ul_arfcn_valid_given_band(*config.band, ul_arfcn, config.channel_bw_mhz);
657655
if (not ret.has_value()) {
656+
// NOTE: The message must say that it's the DL ARFCN that is invalid, as that is the parameters set by the user.
658657
fmt::print("Invalid DL ARFCN={} for band {}. Cause: {}.\n", config.dl_f_ref_arfcn, band, ret.error());
659658
return false;
660659
}
@@ -768,9 +767,8 @@ static bool validate_base_cell_unit_config(const du_high_unit_base_cell_config&
768767
return false;
769768
}
770769

771-
const nr_band band =
772-
config.band.has_value() ? config.band.value() : band_helper::get_band_from_dl_arfcn(config.dl_f_ref_arfcn);
773-
const auto ssb_scs = band_helper::get_most_suitable_ssb_scs(band, config.common_scs);
770+
const nr_band band = config.band.value_or(band_helper::get_band_from_dl_arfcn(config.dl_f_ref_arfcn));
771+
const auto ssb_scs = band_helper::get_most_suitable_ssb_scs(band, config.common_scs);
774772
if (ssb_scs != config.common_scs) {
775773
fmt::print("Common SCS {}kHz is not equal to SSB SCS {}kHz. Different SCS for common and SSB is not supported.\n",
776774
scs_to_khz(config.common_scs),
@@ -840,8 +838,9 @@ static bool validate_cells_unit_config(span<const du_high_unit_cell_config> conf
840838
fmt::print("Invalid Sector ID {}, for a gNB Id of {} bits\n", cell.cell.sector_id.value(), gnb_id.bit_length);
841839
return false;
842840
}
843-
const auto band = cell.cell.band.value_or(band_helper::get_band_from_dl_arfcn(cell.cell.dl_f_ref_arfcn));
844-
bool is_unlicensed = band_helper::is_unlicensed_band(band);
841+
const auto band = cell.cell.band.value_or(band_helper::get_band_from_dl_arfcn(cell.cell.dl_f_ref_arfcn));
842+
bool is_unlicensed = band_helper::is_unlicensed_band(band);
843+
// Check if the RA Response Window (in ms) is within the limits for licensed and unlicensed bands.
845844
unsigned int max_ra_resp_window = is_unlicensed ? 40 : 10;
846845
unsigned int ra_resp_window_ms =
847846
cell.cell.prach_cfg.ra_resp_window.value() >> to_numerology_value(cell.cell.common_scs);

apps/units/flexible_du/split_dynamic/dynamic_du_unit_cli11_schema.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,9 @@ void srsran::autoderive_dynamic_du_parameters_after_parsing(CLI::App& app, dynam
155155
}
156156

157157
// Auto derive DU low parameters.
158-
const auto& cell = parsed_cfg.du_high_cfg.config.cells_cfg.front().cell;
159-
nr_band band = cell.band ? cell.band.value() : band_helper::get_band_from_dl_arfcn(cell.dl_f_ref_arfcn);
160-
bool is_zmq_rf_driver = false;
158+
const auto& cell = parsed_cfg.du_high_cfg.config.cells_cfg.front().cell;
159+
const nr_band band = cell.band ? cell.band.value() : band_helper::get_band_from_dl_arfcn(cell.dl_f_ref_arfcn);
160+
bool is_zmq_rf_driver = false;
161161
if (std::holds_alternative<ru_sdr_unit_config>(parsed_cfg.ru_cfg)) {
162162
is_zmq_rf_driver = std::get<ru_sdr_unit_config>(parsed_cfg.ru_cfg).device_driver == "zmq";
163163
}

include/srsran/ran/ssb_mapping.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,6 @@ inline unsigned ssb_get_k_first(frequency_range fr,
158158
return (k_first_15kHz * 15) / ssb_scs_kHz;
159159
}
160160

161-
/// Calculates SSB pattern from SSB subcarrier spacing and DL ARFCN.
162-
ssb_pattern_case ssb_get_ssb_pattern(subcarrier_spacing ssb_scs, unsigned dl_arfcn);
163-
164161
/// \brief Calculates L_max, ie max number of SSB occasions per SSB period. Possible values are {4, 8, 64}.
165162
/// \remark See TS 38.213, Section 4.1.
166163
/// \param ssb_scs SSB Subcarrier Spacing.

lib/du/du_low/du_low_wrapper_factory.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,11 @@ static fapi::prach_config generate_prach_config_tlv(const du_cell_config& cell_c
5252
static fapi::carrier_config generate_carrier_config_tlv(const du_cell_config& du_cell)
5353
{
5454
// Deduce common numerology and grid size for DL and UL.
55-
unsigned numerology = to_numerology_value(du_cell.scs_common);
56-
unsigned grid_size_bw_prb = band_helper::get_n_rbs_from_bw(
57-
MHz_to_bs_channel_bandwidth(du_cell.dl_carrier.carrier_bw_mhz),
58-
du_cell.scs_common,
59-
band_helper::get_freq_range(band_helper::get_band_from_dl_arfcn(du_cell.dl_carrier.arfcn_f_ref)));
55+
unsigned numerology = to_numerology_value(du_cell.scs_common);
56+
unsigned grid_size_bw_prb =
57+
band_helper::get_n_rbs_from_bw(MHz_to_bs_channel_bandwidth(du_cell.dl_carrier.carrier_bw_mhz),
58+
du_cell.scs_common,
59+
band_helper::get_freq_range(du_cell.dl_carrier.band));
6060

6161
fapi::carrier_config fapi_config = {};
6262

lib/mac/mac_dl/mac_cell_processor.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ mac_cell_processor::mac_cell_processor(const mac_cell_creation_request& cell_cfg
3636
ue_mng(rnti_table),
3737
dl_harq_buffers(band_helper::get_n_rbs_from_bw(MHz_to_bs_channel_bandwidth(cell_cfg.dl_carrier.carrier_bw_mhz),
3838
cell_cfg.scs_common,
39-
band_helper::get_freq_range(band_helper::get_band_from_dl_arfcn(
40-
cell_cfg.dl_carrier.arfcn_f_ref))),
39+
band_helper::get_freq_range(cell_cfg.dl_carrier.band)),
4140
cell_cfg.dl_carrier.nof_ant,
4241
ctrl_exec_),
4342
// The PDU pool has to be large enough to fit the maximum number of RARs and Paging PDUs per slot for all possible K0

lib/ran/band_helper.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ struct nr_band_raster {
5656
// NOTE: FR2 bands have two different Freq raster, we only consider raster 120kHz.
5757
const uint32_t nof_nr_DL_bands = 83;
5858
static constexpr std::array<nr_band_raster, nof_nr_DL_bands> nr_band_table = {{
59-
// clang-format off
59+
// clang-format off
6060
{nr_band::n1, delta_freq_raster::kHz100, 384000, 20, 396000, 422000, 20, 434000},
6161
{nr_band::n2, delta_freq_raster::kHz100, 370000, 20, 382000, 386000, 20, 398000},
6262
{nr_band::n3, delta_freq_raster::kHz100, 342000, 20, 357000, 361000, 20, 376000},
@@ -159,7 +159,7 @@ struct nr_operating_band {
159159
};
160160
static const uint32_t nof_nr_operating_band = 68;
161161
static constexpr std::array<nr_operating_band, nof_nr_operating_band> nr_operating_bands = {{
162-
// clang-format off
162+
// clang-format off
163163
{nr_band::n1, duplex_mode::FDD},
164164
{nr_band::n2, duplex_mode::FDD},
165165
{nr_band::n3, duplex_mode::FDD},
@@ -836,7 +836,7 @@ srsran::band_helper::is_ul_arfcn_valid_given_band(nr_band band, uint32_t arfcn_f
836836
uint32_t srsran::band_helper::get_ul_arfcn_from_dl_arfcn(uint32_t dl_arfcn, std::optional<nr_band> band)
837837
{
838838
// NOTE: The procedure implemented in this function is implementation-defined.
839-
const nr_band operating_band = band.has_value() ? band.value() : get_band_from_dl_arfcn(dl_arfcn);
839+
const nr_band operating_band = band.value_or(get_band_from_dl_arfcn(dl_arfcn));
840840

841841
// Return same ARFCN for TDD bands.
842842
if (get_duplex_mode(operating_band) == duplex_mode::TDD) {

lib/ran/ssb_mapping.cpp

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,17 @@
1515

1616
using namespace srsran;
1717

18-
ssb_pattern_case srsran::ssb_get_ssb_pattern(subcarrier_spacing ssb_scs, unsigned dl_arfcn)
19-
{
20-
nr_band dl_idx_nr_band = band_helper::get_band_from_dl_arfcn(dl_arfcn);
21-
srsran_assert(dl_idx_nr_band != nr_band::invalid, "Invalid NR band index");
22-
return band_helper::get_ssb_pattern(dl_idx_nr_band, ssb_scs);
23-
}
24-
2518
uint8_t srsran::ssb_get_L_max(subcarrier_spacing ssb_scs, unsigned dl_arfcn, std::optional<nr_band> band)
2619
{
2720
uint8_t L_max = 0;
2821

2922
// Derive the SSB-specific parameters (SSB pattern case, SSB L_max and SSB paired_spectrum flag) from those in the
3023
// MAC Cell config.
31-
if (not band.has_value()) {
32-
band.emplace(band_helper::get_band_from_dl_arfcn(dl_arfcn));
33-
srsran_assert(band.value() != nr_band::invalid, "Invalid NR band index");
34-
}
35-
ssb_pattern_case ssb_case = band_helper::get_ssb_pattern(band.value(), ssb_scs);
24+
const nr_band gnb_band = band.value_or(band_helper::get_band_from_dl_arfcn(dl_arfcn));
25+
srsran_assert(gnb_band != nr_band::invalid, "Invalid NR band index");
26+
ssb_pattern_case ssb_case = band_helper::get_ssb_pattern(gnb_band, ssb_scs);
3627
// Flag indicating whether cell is on paired spectrum (FDD) or unpaired (TDD, SDL, SUL).
37-
bool paired_spectrum = band_helper::is_paired_spectrum(band.value());
28+
bool paired_spectrum = band_helper::is_paired_spectrum(gnb_band);
3829

3930
// Get L_max from SSB pattern case and carrier frequency and paired spectrum flag.
4031
uint32_t f_arfcn = dl_arfcn;

0 commit comments

Comments
 (0)