srsue: refactor SA mode in RRC, don't initilize NSA-5G in NSA mode

This commit is contained in:
Andre Puschmann 2022-02-01 10:28:51 +01:00
parent 71f48ee7f2
commit 8464a6ed63
6 changed files with 25 additions and 16 deletions

View File

@ -19,7 +19,6 @@
namespace srsue {
struct rrc_nr_args_t {
bool sa_mode;
uint32_t sim_nr_meas_pci;
bool pdcp_short_sn_support;
std::string supported_bands_nr_str;

View File

@ -66,7 +66,7 @@ typedef struct {
gw_args_t gw;
uint32_t sync_queue_size; // Max allowed difference between PHY and Stack clocks (in TTI)
bool have_tti_time_stats;
bool attach_on_nr;
bool sa_mode;
} stack_args_t;
class ue_stack_base

View File

@ -70,10 +70,11 @@ int rrc_nr::init(phy_interface_rrc_nr* phy_,
t310 = task_sched.get_unique_timer();
t311 = task_sched.get_unique_timer();
if (args.sa_mode) {
plmn_is_selected = true; // short-cut SA test
if (rrc_eutra == nullptr) {
// SA mode
plmn_is_selected = true;
// for SA mode setup inital HARQ config and SRB0
// setup inital HARQ config
srsran::dl_harq_cfg_nr_t harq_cfg = {};
harq_cfg.nof_procs = 8;
mac->set_config(harq_cfg);
@ -129,7 +130,7 @@ const char* rrc_nr::get_rb_name(uint32_t lcid)
void rrc_nr::timer_expired(uint32_t timeout_id)
{
logger.debug("Handling Timer Expired");
if (timeout_id == sim_measurement_timer.id()) {
if (timeout_id == sim_measurement_timer.id() && rrc_eutra != nullptr) {
logger.debug("Triggered simulated measurement");
phy_meas_nr_t sim_meas = {};
@ -2072,7 +2073,11 @@ void rrc_nr::ra_completed()
void rrc_nr::ra_problem()
{
rrc_eutra->nr_scg_failure_information(scg_failure_cause_t::random_access_problem);
if (rrc_eutra) {
rrc_eutra->nr_scg_failure_information(scg_failure_cause_t::random_access_problem);
} else {
// TODO: handle RA problem
}
}
void rrc_nr::release_pucch_srs() {}

View File

@ -142,12 +142,16 @@ void rrc_nr::connection_reconf_no_ho_proc::then(const srsran::proc_state_t& resu
if (result.is_success()) {
Info("Finished %s successfully", name());
srsran::console("RRC NR reconfiguration successful.\n");
rrc_handle.rrc_eutra->nr_rrc_con_reconfig_complete(true);
if (rrc_handle.rrc_eutra) {
rrc_handle.rrc_eutra->nr_rrc_con_reconfig_complete(true);
}
} else {
// 5.3.5.8.2 Inability to comply with RRCReconfiguration
switch (initiator) {
case reconf_initiator_t::mcg_srb1:
rrc_handle.rrc_eutra->nr_notify_reconfiguration_failure();
if (rrc_handle.rrc_eutra) {
rrc_handle.rrc_eutra->nr_notify_reconfiguration_failure();
}
break;
default:
Warning("Reconfiguration failure not implemented for initiator %d", initiator);

View File

@ -221,14 +221,16 @@ int ue_stack_lte::init(const stack_args_t& args_)
&pdcp_nr,
gw,
&nas_5g,
&rrc,
args.sa_mode ? nullptr : &rrc,
usim.get(),
task_sched.get_timer_handler(),
this,
args.rrc_nr);
rrc.init(phy, &mac, &rlc, &pdcp, &nas, usim.get(), gw, &rrc_nr, args.rrc);
nas_5g.init(usim.get(), &rrc_nr, gw, args.nas_5g);
if (args.sa_mode) {
nas_5g.init(usim.get(), &rrc_nr, gw, args.nas_5g);
}
running = true;
start(STACK_MAIN_THREAD_PRIO);
@ -276,7 +278,7 @@ bool ue_stack_lte::switch_on()
if (running) {
stack_logger.info("Triggering NAS switch on");
if (!ue_task_queue.try_push([this]() {
if (args.attach_on_nr) {
if (args.sa_mode) {
nas_5g.switch_on();
} else {
nas.switch_on();
@ -329,7 +331,7 @@ bool ue_stack_lte::start_service_request()
{
if (running) {
ue_task_queue.try_push([this]() {
if (args.attach_on_nr) {
if (args.sa_mode) {
nas_5g.start_service_request();
} else {
nas.start_service_request(srsran::establishment_cause_t::mo_data);

View File

@ -110,7 +110,7 @@ int ue::init(const all_args_t& args_)
}
// In SA mode, pass NR PHY pointer to stack
args.stack.attach_on_nr = true;
args.stack.sa_mode = true;
if (lte_stack->init(args.stack, dummy_lte_phy.get(), nr_phy.get(), gw_ptr.get())) {
srsran::console("Error initializing stack.\n");
ret = SRSRAN_ERROR;
@ -272,13 +272,12 @@ int ue::parse_args(const all_args_t& args_)
// Make sure fix sampling rate is set for SA mode
if (args.phy.nof_lte_carriers == 0 and not std::isnormal(args.rf.srate_hz)) {
srsran::console("Error. NR Standalone PHY requires a fix RF sampling rate.\n");
srsran::console("Error. NR Standalone PHY requires a fixed RF sampling rate.\n");
return SRSRAN_ERROR;
}
// SA params
if (args.phy.nof_lte_carriers == 0 && args.phy.nof_nr_carriers == 1) {
args.stack.rrc_nr.sa_mode = true;
// TODO: expose to UE config
args.stack.rrc_nr.dl_nr_arfcn = 368500;
args.stack.rrc_nr.ssb_nr_arfcn = 368410;