From 24dd439aec48921bcf8a1870235bcb4359d10b37 Mon Sep 17 00:00:00 2001 From: francescomani Date: Fri, 21 Jul 2023 09:58:40 +0200 Subject: [PATCH] going back to sync mode when cell is barred --- executables/nr-ue.c | 4 ++++ openair2/LAYER2/NR_MAC_UE/mac_proto.h | 2 +- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 16 ++++++++++------ openair2/RRC/NR_UE/rrc_UE.c | 11 ++++++----- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index 8b1f6b969f..5be86856e3 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -465,6 +465,10 @@ static void UE_synch(void *arg) { } else { UE->is_synchronized = 1; } + if (UE->synch_request.received_synch_request == 1) { + UE->is_synchronized = 0; + UE->synch_request.received_synch_request = 0; + } } else { if (UE->UE_scan_carrier == 1) { diff --git a/openair2/LAYER2/NR_MAC_UE/mac_proto.h b/openair2/LAYER2/NR_MAC_UE/mac_proto.h index 5534e586b1..ab18c0b1e9 100644 --- a/openair2/LAYER2/NR_MAC_UE/mac_proto.h +++ b/openair2/LAYER2/NR_MAC_UE/mac_proto.h @@ -47,7 +47,7 @@ void nr_ue_init_mac(module_id_t module_idP); \param mac mac instance */ void nr_ue_mac_default_configs(NR_UE_MAC_INST_t *mac); -int8_t nr_ue_decode_mib(module_id_t module_id, int cc_id); +void nr_ue_decode_mib(module_id_t module_id, int cc_id); /**\brief decode SIB1 and other SIs pdus in NR_UE, from if_module dl_ind \param module_id module id diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index b1706f7fbf..4f7ad1d305 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -232,14 +232,20 @@ int get_rnti_type(NR_UE_MAC_INST_t *mac, uint16_t rnti) return rnti_type; } - -int8_t nr_ue_decode_mib(module_id_t module_id, - int cc_id) +void nr_ue_decode_mib(module_id_t module_id, int cc_id) { LOG_D(MAC,"[L2][MAC] decode mib\n"); - NR_UE_MAC_INST_t *mac = get_mac_inst(module_id); + if (mac->mib->cellBarred == NR_MIB__cellBarred_barred) { + LOG_W(MAC, "Cell is barred. Going back to sync mode.\n"); + mac->synch_request.Mod_id = module_id; + mac->synch_request.CC_id = cc_id; + mac->synch_request.synch_req.target_Nid_cell = -1; + mac->if_module->synch_request(&mac->synch_request); + return; + } + uint16_t frame = (mac->mib->systemFrameNumber.buf[0] >> mac->mib->systemFrameNumber.bits_unused); uint16_t frame_number_4lsb = 0; @@ -285,8 +291,6 @@ int8_t nr_ue_decode_mib(module_id_t module_id, mac->state = UE_CONNECTED; else if(mac->state == UE_NOT_SYNC) mac->state = UE_SYNC; - - return 0; } int8_t nr_ue_decode_BCCH_DL_SCH(module_id_t module_id, diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c index bf9861ecfb..37a40b1d03 100644 --- a/openair2/RRC/NR_UE/rrc_UE.c +++ b/openair2/RRC/NR_UE/rrc_UE.c @@ -498,8 +498,6 @@ bool check_si_validity(NR_UE_RRC_SI_INFO *SI_info, int si_type) int check_si_status(NR_UE_RRC_SI_INFO *SI_info) { - if (!get_softmodem_params()->sa) - return 0; // schedule reception of SIB1 if RRC doesn't have it if (!SI_info->sib1) return 1; @@ -542,9 +540,12 @@ int8_t nr_rrc_ue_decode_NR_BCCH_BCH_Message(const module_id_t module_id, const u NR_UE_rrc_inst[module_id].mib = bcch_message->message.choice.mib; bcch_message->message.choice.mib = NULL; - NR_UE_RRC_SI_INFO *SI_info = &NR_UE_rrc_inst[module_id].SInfo[gNB_index]; - // to schedule MAC to get SI if required - int get_sib = check_si_status(SI_info); + int get_sib = 0; + if (get_softmodem_params()->sa && NR_UE_rrc_inst[module_id].mib->cellBarred == NR_MIB__cellBarred_notBarred) { + NR_UE_RRC_SI_INFO *SI_info = &NR_UE_rrc_inst[module_id].SInfo[gNB_index]; + // to schedule MAC to get SI if required + get_sib = check_si_status(SI_info); + } nr_rrc_mac_config_req_mib(module_id, 0, NR_UE_rrc_inst[module_id].mib, get_sib); ret = 0; }