mirror of https://github.com/PentHertz/srsLTE.git
nr,gnb,rrc: add functions to verify rrc cfg validity
This commit is contained in:
parent
e78c375075
commit
9bebc06f97
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue