nr,gnb,rrc: add functions to verify rrc cfg validity

This commit is contained in:
Francisco 2021-11-17 15:13:19 +00:00 committed by Francisco Paisana
parent e78c375075
commit 9bebc06f97
4 changed files with 40 additions and 10 deletions

View File

@ -21,7 +21,11 @@ void generate_default_nr_cell(rrc_cell_cfg_nr_t& cell);
int set_derived_nr_cell_params(bool is_sa, rrc_cell_cfg_nr_t& cell);
// Tests to ensure validity of config
int check_nr_cell_cfg_valid(const rrc_cell_cfg_nr_t& cell, bool is_sa);
int check_nr_phy_cell_cfg_valid(const phy_cell_cfg_nr_t& phy_cell);
int check_nr_pdcch_cfg_valid(const srsran_pdcch_cfg_nr_t& pdcch);
} // namespace srsenb

View File

@ -13,6 +13,7 @@
#include "srsgnb/hdr/stack/rrc/rrc_nr.h"
#include "srsenb/hdr/common/common_enb.h"
#include "srsgnb/hdr/stack/rrc/cell_asn1_config.h"
#include "srsgnb/hdr/stack/rrc/rrc_nr_config_utils.h"
#include "srsgnb/hdr/stack/rrc/rrc_nr_ue.h"
#include "srsgnb/src/stack/mac/test/sched_nr_cfg_generators.h"
#include "srsran/asn1/rrc_nr_utils.h"
@ -84,6 +85,7 @@ int rrc_nr::init(const rrc_nr_cfg_t& cfg_,
ret2 = srsran::fill_phy_pdcch_cfg(base_sp_cell_cfg.sp_cell_cfg_ded.init_dl_bwp.pdcch_cfg.setup(),
&cfg.cell_list[0].phy_cell.pdcch);
srsran_assert(ret2, "Invalid NR cell configuration.");
srsran_assert(check_nr_phy_cell_cfg_valid(cfg.cell_list[0].phy_cell) == SRSRAN_SUCCESS, "Invalid PhyCell Config");
config_phy(); // if PHY is not yet initialized, config will be stored and applied on initialization
config_mac();
@ -612,9 +614,9 @@ void rrc_nr::sgnb_addition_request(uint16_t eutra_rnti, const sgnb_addition_req_
uecfg.carriers[0].cc = 0;
uecfg.ue_bearers[0].direction = mac_lc_ch_cfg_t::BOTH;
srsran::phy_cfg_nr_default_t::reference_cfg_t ref_args{};
ref_args.duplex = cfg.cell_list[0].duplex_mode == SRSRAN_DUPLEX_MODE_TDD
? srsran::phy_cfg_nr_default_t::reference_cfg_t::R_DUPLEX_TDD_CUSTOM_6_4
: srsran::phy_cfg_nr_default_t::reference_cfg_t::R_DUPLEX_FDD;
ref_args.duplex = cfg.cell_list[0].duplex_mode == SRSRAN_DUPLEX_MODE_TDD
? srsran::phy_cfg_nr_default_t::reference_cfg_t::R_DUPLEX_TDD_CUSTOM_6_4
: srsran::phy_cfg_nr_default_t::reference_cfg_t::R_DUPLEX_FDD;
uecfg.phy_cfg = srsran::phy_cfg_nr_default_t{ref_args};
uecfg.phy_cfg.csi = {}; // disable CSI until RA is complete

View File

@ -13,22 +13,23 @@
#include "srsgnb/hdr/stack/rrc/rrc_nr_config_utils.h"
#include "srsran/common/band_helper.h"
#define RETURN_IF_ERROR(x) \
do { \
if (x != SRSRAN_SUCCESS) { \
return SRSRAN_ERROR; \
} \
} while (0)
#define INVALID_PARAM(x, fmt, ...) \
do { \
if (not(x)) { \
get_logger().error("ERROR: " fmt, ##__VA_ARGS__); \
fprintf(stderr, "ERROR: " fmt, ##__VA_ARGS__); \
return SRSRAN_ERROR; \
} \
} while (0)
namespace srsenb {
static srslog::basic_logger& get_logger()
{
static srslog::basic_logger& logger = srslog::fetch_basic_logger("ALL");
return logger;
}
/// Generate default phy cell configuration
void generate_default_nr_phy_cell(phy_cell_cfg_nr_t& phy_cell)
{
@ -298,8 +299,29 @@ int check_nr_cell_cfg_valid(const rrc_cell_cfg_nr_t& cell, bool is_sa)
{
// verify SSB params are consistent
INVALID_PARAM(cell.ssb_cfg.center_freq_hz == cell.phy_cell.dl_freq_hz, "Invalid SSB param generation");
RETURN_IF_ERROR(check_nr_phy_cell_cfg_valid(cell.phy_cell));
return SRSRAN_SUCCESS;
}
int check_nr_phy_cell_cfg_valid(const phy_cell_cfg_nr_t& phy_cell)
{
RETURN_IF_ERROR(check_nr_pdcch_cfg_valid(phy_cell.pdcch));
return SRSRAN_SUCCESS;
}
int check_nr_pdcch_cfg_valid(const srsran_pdcch_cfg_nr_t& pdcch)
{
// Verify Search Spaces
for (uint32_t ss_id = 0; ss_id < SRSRAN_UE_DL_NR_MAX_NOF_SEARCH_SPACE; ++ss_id) {
if (pdcch.search_space_present[ss_id]) {
const srsran_search_space_t& ss = pdcch.search_space[ss_id];
INVALID_PARAM(ss.id == ss_id, "SearchSpace#%d should match list index", ss_id);
uint32_t cs_id = ss.coreset_id;
INVALID_PARAM(pdcch.coreset_present[cs_id], "SearchSpace#%d points to absent CORESET#%d", ss_id, cs_id);
}
}
return SRSRAN_SUCCESS;
}
} // namespace srsenb

View File

@ -12,6 +12,7 @@
#include "srsgnb/hdr/stack/rrc/rrc_nr_ue.h"
#include "srsgnb/hdr/stack/rrc/cell_asn1_config.h"
#include "srsgnb/hdr/stack/rrc/rrc_nr_config_utils.h"
#include "srsran/asn1/rrc_nr_utils.h"
#include "srsran/common/string_helpers.h"
@ -750,6 +751,7 @@ void rrc_nr::ue::crnti_ce_received()
srsran::make_duplex_cfg_from_serv_cell(cell_group_cfg.sp_cell_cfg.recfg_with_sync.sp_cell_cfg_common,
&uecfg.phy_cfg.duplex);
srsran_assert(check_nr_pdcch_cfg_valid(uecfg.phy_cfg.pdcch) == SRSRAN_SUCCESS, "Invalid PhyCell Config");
parent->mac->ue_cfg(rnti, uecfg);
}
}