diff --git a/openair2/LAYER2/NR_MAC_UE/mac_proto.h b/openair2/LAYER2/NR_MAC_UE/mac_proto.h index c2e8fd58859049c4d938561ebca39fc5d03c183f..740e2f24e4c6e4e42617dee7f75f67045883c145 100644 --- a/openair2/LAYER2/NR_MAC_UE/mac_proto.h +++ b/openair2/LAYER2/NR_MAC_UE/mac_proto.h @@ -64,12 +64,12 @@ void release_common_ss_cset(NR_BWP_PDCCH_t *pdcch); \param sibs_mask sibs mask \param pduP pointer to pdu \param pdu_length length of pdu */ -int8_t nr_ue_decode_BCCH_DL_SCH(NR_UE_MAC_INST_t *mac, - int cc_id, - unsigned int gNB_index, - uint8_t ack_nack, - uint8_t *pduP, - uint32_t pdu_len); +void nr_ue_decode_BCCH_DL_SCH(NR_UE_MAC_INST_t *mac, + int cc_id, + unsigned int gNB_index, + uint8_t ack_nack, + uint8_t *pduP, + uint32_t pdu_len); void release_dl_BWP(NR_UE_MAC_INST_t *mac, int index); void release_ul_BWP(NR_UE_MAC_INST_t *mac, int index); diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 38ba62cdcb18e2b4fd24468747a88caf65ba11ac..d9c197b9b4d4184bfe52a17f234d7a42d12808f7 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -285,12 +285,12 @@ static void configure_ratematching_csi(fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsc } } -int8_t nr_ue_decode_BCCH_DL_SCH(NR_UE_MAC_INST_t *mac, - int cc_id, - unsigned int gNB_index, - uint8_t ack_nack, - uint8_t *pduP, - uint32_t pdu_len) +void nr_ue_decode_BCCH_DL_SCH(NR_UE_MAC_INST_t *mac, + int cc_id, + unsigned int gNB_index, + uint8_t ack_nack, + uint8_t *pduP, + uint32_t pdu_len) { if(ack_nack) { LOG_D(NR_MAC, "Decoding NR-BCCH-DL-SCH-Message (SIB1 or SI)\n"); @@ -308,9 +308,10 @@ int8_t nr_ue_decode_BCCH_DL_SCH(NR_UE_MAC_INST_t *mac, T_INT(0 /* harq_pid */), T_BUFFER(pduP, pdu_len)); } - else + else { LOG_E(NR_MAC, "Got NACK on NR-BCCH-DL-SCH-Message (%s)\n", mac->get_sib1 ? "SIB1" : "other SI"); - return 0; + nr_mac_rrc_data_ind_ue(mac->ue_id, cc_id, gNB_index, 0, 0, 0, mac->physCellId, 0, NR_BCCH_DL_SCH, NULL, 0); + } } /* diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 537086a06dfc384e7894ec7f70ecbc1a4dfd902f..f933e09ffe962ea42d775c6bf806a5d517cfb456 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -1110,7 +1110,8 @@ static int handle_bcch_dlsch(NR_UE_MAC_INST_t *mac, uint8_t *pduP, uint32_t pdu_len) { - return nr_ue_decode_BCCH_DL_SCH(mac, cc_id, gNB_index, ack_nack, pduP, pdu_len); + nr_ue_decode_BCCH_DL_SCH(mac, cc_id, gNB_index, ack_nack, pduP, pdu_len); + return 0; } // L2 Abstraction Layer diff --git a/openair2/RRC/NR_UE/L2_interface_ue.c b/openair2/RRC/NR_UE/L2_interface_ue.c index b6aa5f0463bd1be9ae4118214301812b4bfb3be7..17b42c28c8bcbd37496583bea7e5f5b58d700ffa 100644 --- a/openair2/RRC/NR_UE/L2_interface_ue.c +++ b/openair2/RRC/NR_UE/L2_interface_ue.c @@ -59,15 +59,19 @@ void nr_mac_rrc_data_ind_ue(const module_id_t module_id, const sdu_size_t pdu_len) { sdu_size_t sdu_size = 0; - + MessageDef *message_p; switch(channel) { case NR_BCCH_BCH: case NR_BCCH_DL_SCH: - if (pdu_len>0) { - LOG_T(NR_RRC, "[UE %d] Received SDU for NR-BCCH-DL-SCH on SRB %u from gNB %d\n", module_id, channel & RAB_OFFSET, + message_p = itti_alloc_new_message(TASK_MAC_UE, 0, NR_RRC_MAC_BCCH_DATA_IND); + memset(NR_RRC_MAC_BCCH_DATA_IND (message_p).sdu, 0, BCCH_SDU_SIZE); + if (pdu_len > 0) { + LOG_T(NR_RRC, + "[UE %d] Received SDU for NR-BCCH-DL-SCH on SRB %u from gNB %d\n", + module_id, + channel & RAB_OFFSET, gNB_index); - MessageDef *message_p; int msg_sdu_size = BCCH_SDU_SIZE; if (pdu_len > msg_sdu_size) { @@ -77,25 +81,23 @@ void nr_mac_rrc_data_ind_ue(const module_id_t module_id, sdu_size = pdu_len; } - message_p = itti_alloc_new_message(TASK_MAC_UE, 0, NR_RRC_MAC_BCCH_DATA_IND); - memset(NR_RRC_MAC_BCCH_DATA_IND (message_p).sdu, 0, BCCH_SDU_SIZE); memcpy(NR_RRC_MAC_BCCH_DATA_IND (message_p).sdu, pduP, sdu_size); - NR_RRC_MAC_BCCH_DATA_IND (message_p).frame = frame; //frameP - NR_RRC_MAC_BCCH_DATA_IND (message_p).slot = slot; NR_RRC_MAC_BCCH_DATA_IND (message_p).sdu_size = sdu_size; - NR_RRC_MAC_BCCH_DATA_IND (message_p).gnb_index = gNB_index; - NR_RRC_MAC_BCCH_DATA_IND (message_p).phycellid = cellid; - NR_RRC_MAC_BCCH_DATA_IND (message_p).ssb_arfcn = arfcn; - NR_RRC_MAC_BCCH_DATA_IND (message_p).is_bch = (channel == NR_BCCH_BCH); - itti_send_msg_to_task(TASK_RRC_NRUE, GNB_MODULE_ID_TO_INSTANCE(module_id), message_p); } + else { + NR_RRC_MAC_BCCH_DATA_IND (message_p).sdu_size = 0; + } + NR_RRC_MAC_BCCH_DATA_IND (message_p).frame = frame; //frameP + NR_RRC_MAC_BCCH_DATA_IND (message_p).slot = slot; + NR_RRC_MAC_BCCH_DATA_IND (message_p).gnb_index = gNB_index; + NR_RRC_MAC_BCCH_DATA_IND (message_p).phycellid = cellid; + NR_RRC_MAC_BCCH_DATA_IND (message_p).ssb_arfcn = arfcn; + NR_RRC_MAC_BCCH_DATA_IND (message_p).is_bch = (channel == NR_BCCH_BCH); + itti_send_msg_to_task(TASK_RRC_NRUE, GNB_MODULE_ID_TO_INSTANCE(module_id), message_p); break; - case NR_SBCCH_SL_BCH: if (pdu_len > 0) { LOG_T(NR_RRC, "[UE %d] Received SL-MIB for NR_SBCCH_SL_BCH.\n", module_id); - - MessageDef *message_p; int msg_sdu_size = BCCH_SDU_SIZE; if (pdu_len > msg_sdu_size) { @@ -115,9 +117,8 @@ void nr_mac_rrc_data_ind_ue(const module_id_t module_id, itti_send_msg_to_task(TASK_RRC_NRUE, GNB_MODULE_ID_TO_INSTANCE(module_id), message_p); } break; - default: - break; + AssertFatal(false, "Invalid channel in data indication\n"); } } diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c index 8348fe73ceac783cd1592a139f38b1c49d82e4e5..bb45ecdbbd3818a824901d22dc25c4bb1e92d70c 100644 --- a/openair2/RRC/NR_UE/rrc_UE.c +++ b/openair2/RRC/NR_UE/rrc_UE.c @@ -188,59 +188,59 @@ static void nr_decode_SI(NR_UE_RRC_SI_INFO *SI_info, NR_SystemInformation_t *si, LOG_A(NR_RRC, "Found SIB%d\n", typeandinfo->present + 1); switch(typeandinfo->present) { case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib2: - SI_info->sib2_validity = SIB_VALID; + SI_info->sib2_validity = true; nr_timer_start(&SI_info->sib2_timer); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib3: - SI_info->sib3_validity = SIB_VALID; + SI_info->sib3_validity = true; nr_timer_start(&SI_info->sib3_timer); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib4: - SI_info->sib4_validity = SIB_VALID; + SI_info->sib4_validity = true; nr_timer_start(&SI_info->sib4_timer); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib5: - SI_info->sib5_validity = SIB_VALID; + SI_info->sib5_validity = true; nr_timer_start(&SI_info->sib5_timer); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib6: - SI_info->sib6_validity = SIB_VALID; + SI_info->sib6_validity = true; nr_timer_start(&SI_info->sib6_timer); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib7: - SI_info->sib7_validity = SIB_VALID; + SI_info->sib7_validity = true; nr_timer_start(&SI_info->sib7_timer); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib8: - SI_info->sib8_validity = SIB_VALID; + SI_info->sib8_validity = true; nr_timer_start(&SI_info->sib8_timer); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib9: - SI_info->sib9_validity = SIB_VALID; + SI_info->sib9_validity = true; nr_timer_start(&SI_info->sib9_timer); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib10_v1610: - SI_info->sib10_validity = SIB_VALID; + SI_info->sib10_validity = true; nr_timer_start(&SI_info->sib10_timer); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib11_v1610: - SI_info->sib11_validity = SIB_VALID; + SI_info->sib11_validity = true; nr_timer_start(&SI_info->sib11_timer); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib12_v1610: - SI_info->sib12_validity = SIB_VALID; + SI_info->sib12_validity = true; nr_timer_start(&SI_info->sib12_timer); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib13_v1610: - SI_info->sib13_validity = SIB_VALID; + SI_info->sib13_validity = true; nr_timer_start(&SI_info->sib13_timer); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib14_v1610: - SI_info->sib14_validity = SIB_VALID; + SI_info->sib14_validity = true; nr_timer_start(&SI_info->sib14_timer); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib19_v1700: - SI_info->SInfo_r17.sib19_validity = SIB_VALID; + SI_info->SInfo_r17.sib19_validity = true; if (g_log->log_component[NR_RRC].level >= OAILOG_DEBUG) xer_fprint(stdout, &asn_DEF_NR_SIB19_r17, (const void *)typeandinfo->choice.sib19_v1700); sib19 = typeandinfo->choice.sib19_v1700; @@ -341,7 +341,7 @@ static void nr_rrc_process_sib1(NR_UE_RRC_INST_t *rrc, NR_UE_RRC_SI_INFO *SI_inf xer_fprint(stdout, &asn_DEF_NR_SIB1, (const void *) sib1); LOG_A(NR_RRC, "SIB1 decoded\n"); nr_timer_start(&SI_info->sib1_timer); - SI_info->sib1_validity = SIB_VALID; + SI_info->sib1_validity = true; if (rrc->nrRrcState == RRC_STATE_IDLE_NR) { rrc->ra_trigger = RRC_CONNECTION_SETUP; // preparing RRC setup request payload in advance @@ -658,82 +658,56 @@ bool check_si_validity(NR_UE_RRC_SI_INFO *SI_info, int si_type) { switch (si_type) { case NR_SIB_TypeInfo__type_sibType2: - if (SI_info->sib2_validity == SIB_NOT_VALID) { - SI_info->sib2_validity = SIB_REQUESTED; + if (!SI_info->sib2_validity) return false; - } break; case NR_SIB_TypeInfo__type_sibType3: - if (SI_info->sib3_validity == SIB_NOT_VALID) { - SI_info->sib3_validity = SIB_REQUESTED; + if (!SI_info->sib3_validity) return false; - } break; case NR_SIB_TypeInfo__type_sibType4: - if (SI_info->sib4_validity == SIB_NOT_VALID) { - SI_info->sib4_validity = SIB_REQUESTED; + if (!SI_info->sib4_validity) return false; - } break; case NR_SIB_TypeInfo__type_sibType5: - if (SI_info->sib5_validity == SIB_NOT_VALID) { - SI_info->sib5_validity = SIB_REQUESTED; + if (!SI_info->sib5_validity) return false; - } break; case NR_SIB_TypeInfo__type_sibType6: - if (SI_info->sib6_validity == SIB_NOT_VALID) { - SI_info->sib6_validity = SIB_REQUESTED; + if (!SI_info->sib6_validity) return false; - } break; case NR_SIB_TypeInfo__type_sibType7: - if (SI_info->sib7_validity == SIB_NOT_VALID) { - SI_info->sib7_validity = SIB_REQUESTED; + if (!SI_info->sib7_validity) return false; - } break; case NR_SIB_TypeInfo__type_sibType8: - if (SI_info->sib8_validity == SIB_NOT_VALID) { - SI_info->sib8_validity = SIB_REQUESTED; + if (!SI_info->sib8_validity) return false; - } break; case NR_SIB_TypeInfo__type_sibType9: - if (SI_info->sib9_validity == SIB_NOT_VALID) { - SI_info->sib9_validity = SIB_REQUESTED; + if (!SI_info->sib9_validity) return false; - } break; case NR_SIB_TypeInfo__type_sibType10_v1610: - if (SI_info->sib10_validity == SIB_NOT_VALID) { - SI_info->sib10_validity = SIB_REQUESTED; + if (!SI_info->sib10_validity) return false; - } break; case NR_SIB_TypeInfo__type_sibType11_v1610: - if (SI_info->sib11_validity == SIB_NOT_VALID) { - SI_info->sib11_validity = SIB_REQUESTED; + if (!SI_info->sib11_validity) return false; - } break; case NR_SIB_TypeInfo__type_sibType12_v1610: - if (SI_info->sib12_validity == SIB_NOT_VALID) { - SI_info->sib12_validity = SIB_REQUESTED; + if (!SI_info->sib12_validity) return false; - } break; case NR_SIB_TypeInfo__type_sibType13_v1610: - if (SI_info->sib13_validity == SIB_NOT_VALID) { - SI_info->sib13_validity = SIB_REQUESTED; + if (!SI_info->sib13_validity) return false; - } break; case NR_SIB_TypeInfo__type_sibType14_v1610: - if (SI_info->sib14_validity == SIB_NOT_VALID) { - SI_info->sib14_validity = SIB_REQUESTED; + if (!SI_info->sib14_validity) return false; - } break; default : AssertFatal(false, "Invalid SIB type %d\n", si_type); @@ -745,46 +719,32 @@ bool check_si_validity_r17(NR_UE_RRC_SI_INFO_r17 *SI_info, int si_type) { switch (si_type) { case NR_SIB_TypeInfo_v1700__sibType_r17__type1_r17_sibType15: - if (SI_info->sib15_validity == SIB_NOT_VALID) { - SI_info->sib15_validity = SIB_REQUESTED; + if (!SI_info->sib15_validity) return false; - } break; case NR_SIB_TypeInfo_v1700__sibType_r17__type1_r17_sibType16: - if (SI_info->sib16_validity == SIB_NOT_VALID) { - SI_info->sib16_validity = SIB_REQUESTED; + if (!SI_info->sib16_validity) return false; - } break; case NR_SIB_TypeInfo_v1700__sibType_r17__type1_r17_sibType17: - if (SI_info->sib17_validity == SIB_NOT_VALID) { - SI_info->sib17_validity = SIB_REQUESTED; + if (!SI_info->sib17_validity) return false; - } break; case NR_SIB_TypeInfo_v1700__sibType_r17__type1_r17_sibType18: - if (SI_info->sib18_validity == SIB_NOT_VALID) { - SI_info->sib18_validity = SIB_REQUESTED; + if (!SI_info->sib18_validity) return false; - } break; case NR_SIB_TypeInfo_v1700__sibType_r17__type1_r17_sibType19: - if (SI_info->sib19_validity == SIB_NOT_VALID) { - SI_info->sib19_validity = SIB_REQUESTED; + if (!SI_info->sib19_validity) return false; - } break; case NR_SIB_TypeInfo_v1700__sibType_r17__type1_r17_sibType20: - if (SI_info->sib20_validity == SIB_NOT_VALID) { - SI_info->sib20_validity = SIB_REQUESTED; + if (!SI_info->sib20_validity) return false; - } break; case NR_SIB_TypeInfo_v1700__sibType_r17__type1_r17_sibType21: - if (SI_info->sib21_validity == SIB_NOT_VALID) { - SI_info->sib21_validity = SIB_REQUESTED; + if (!SI_info->sib21_validity) return false; - } break; default : AssertFatal(false, "Invalid SIB r17 type %d\n", si_type); @@ -795,10 +755,8 @@ bool check_si_validity_r17(NR_UE_RRC_SI_INFO_r17 *SI_info, int si_type) static int check_si_status(NR_UE_RRC_SI_INFO *SI_info) { // schedule reception of SIB1 if RRC doesn't have it - if (SI_info->sib1_validity == SIB_NOT_VALID) { - SI_info->sib1_validity = SIB_REQUESTED; + if (!SI_info->sib1_validity) return 1; - } else { for (int j = 0; j < MAX_SI_GROUPS; j++) { if (!SI_info->default_otherSI_map[j]) @@ -870,14 +828,17 @@ static void nr_rrc_ue_decode_NR_BCCH_BCH_Message(NR_UE_RRC_INST_t *rrc, // not used } + NR_UE_RRC_SI_INFO *SI_info = &rrc->perNB[gNB_index].SInfo; int get_sib = 0; if (IS_SA_MODE(get_softmodem_params()) + && !SI_info->sib_pending && bcch_message->message.present == NR_BCCH_BCH_MessageType_PR_mib && bcch_message->message.choice.mib->cellBarred == NR_MIB__cellBarred_notBarred && rrc->nrRrcState != RRC_STATE_DETACH_NR) { - NR_UE_RRC_SI_INFO *SI_info = &rrc->perNB[gNB_index].SInfo; // to schedule MAC to get SI if required get_sib = check_si_status(SI_info); + if (get_sib) + SI_info->sib_pending = true; } if (bcch_message->message.present == NR_BCCH_BCH_MessageType_PR_mib) { MessageDef *msg = itti_alloc_new_message(TASK_RRC_NRUE, 0, NR_MAC_RRC_CONFIG_MIB); @@ -942,18 +903,20 @@ static void nr_rrc_handle_msg3_indication(NR_UE_RRC_INST_t *rrc, rnti_t rnti) } } -static int8_t nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(NR_UE_RRC_INST_t *rrc, - const uint8_t gNB_index, - uint8_t *const Sdu, - const uint8_t Sdu_len, - const uint8_t rsrq, - const uint8_t rsrp) +static void nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(NR_UE_RRC_INST_t *rrc, + const uint8_t gNB_index, + uint8_t *const Sdu, + const uint8_t Sdu_len, + const uint8_t rsrq, + const uint8_t rsrp) { - NR_BCCH_DL_SCH_Message_t *bcch_message = NULL; - NR_UE_RRC_SI_INFO *SI_info = &rrc->perNB[gNB_index].SInfo; - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_IN); + SI_info->sib_pending = false; + if (Sdu_len == 0) // decoding failed in L2 + return; + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_IN); + NR_BCCH_DL_SCH_Message_t *bcch_message = NULL; asn_dec_rval_t dec_rval = uper_decode_complete(NULL, &asn_DEF_NR_BCCH_DL_SCH_Message, (void **)&bcch_message, @@ -966,7 +929,7 @@ static int8_t nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(NR_UE_RRC_INST_t *rrc, // free the memory SEQUENCE_free(&asn_DEF_NR_BCCH_DL_SCH_Message, (void *)bcch_message, 1); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_OUT ); - return -1; + return; } if (LOG_DEBUGFLAG(DEBUG_ASN1)) { @@ -992,7 +955,6 @@ static int8_t nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(NR_UE_RRC_INST_t *rrc, } SEQUENCE_free(&asn_DEF_NR_BCCH_DL_SCH_Message, bcch_message, ASFM_FREE_EVERYTHING); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_OUT ); - return 0; } static void nr_rrc_signal_maxrtxindication(int ue_id) @@ -2567,27 +2529,28 @@ void nr_rrc_going_to_IDLE(NR_UE_RRC_INST_t *rrc, rrcPerNB_t *nb = &rrc->perNB[i]; NR_UE_RRC_SI_INFO *SI_info = &nb->SInfo; init_SI_timers(SI_info); - SI_info->sib1_validity = SIB_NOT_VALID; - SI_info->sib2_validity = SIB_NOT_VALID; - SI_info->sib3_validity = SIB_NOT_VALID; - SI_info->sib4_validity = SIB_NOT_VALID; - SI_info->sib5_validity = SIB_NOT_VALID; - SI_info->sib6_validity = SIB_NOT_VALID; - SI_info->sib7_validity = SIB_NOT_VALID; - SI_info->sib8_validity = SIB_NOT_VALID; - SI_info->sib9_validity = SIB_NOT_VALID; - SI_info->sib10_validity = SIB_NOT_VALID; - SI_info->sib11_validity = SIB_NOT_VALID; - SI_info->sib12_validity = SIB_NOT_VALID; - SI_info->sib13_validity = SIB_NOT_VALID; - SI_info->sib14_validity = SIB_NOT_VALID; - SI_info->SInfo_r17.sib15_validity = SIB_NOT_VALID; - SI_info->SInfo_r17.sib16_validity = SIB_NOT_VALID; - SI_info->SInfo_r17.sib17_validity = SIB_NOT_VALID; - SI_info->SInfo_r17.sib18_validity = SIB_NOT_VALID; - SI_info->SInfo_r17.sib19_validity = SIB_NOT_VALID; - SI_info->SInfo_r17.sib20_validity = SIB_NOT_VALID; - SI_info->SInfo_r17.sib21_validity = SIB_NOT_VALID; + SI_info->sib_pending = false; + SI_info->sib1_validity = false; + SI_info->sib2_validity = false; + SI_info->sib3_validity = false; + SI_info->sib4_validity = false; + SI_info->sib5_validity = false; + SI_info->sib6_validity = false; + SI_info->sib7_validity = false; + SI_info->sib8_validity = false; + SI_info->sib9_validity = false; + SI_info->sib10_validity = false; + SI_info->sib11_validity = false; + SI_info->sib12_validity = false; + SI_info->sib13_validity = false; + SI_info->sib14_validity = false; + SI_info->SInfo_r17.sib15_validity = false; + SI_info->SInfo_r17.sib16_validity = false; + SI_info->SInfo_r17.sib17_validity = false; + SI_info->SInfo_r17.sib18_validity = false; + SI_info->SInfo_r17.sib19_validity = false; + SI_info->SInfo_r17.sib20_validity = false; + SI_info->SInfo_r17.sib21_validity = false; } if (rrc->nrRrcState == RRC_STATE_DETACH_NR) { diff --git a/openair2/RRC/NR_UE/rrc_defs.h b/openair2/RRC/NR_UE/rrc_defs.h index 49a7533634fc504ac53f86f6ca4fa1c2ddefe19c..8e7c52662e9df93b774d66c4bf6d381cbef67cb2 100644 --- a/openair2/RRC/NR_UE/rrc_defs.h +++ b/openair2/RRC/NR_UE/rrc_defs.h @@ -104,58 +104,53 @@ typedef enum RA_trigger_e { BEAM_FAILURE_RECOVERY, } RA_trigger_t; -typedef enum { - SIB_NOT_VALID, - SIB_VALID, - SIB_REQUESTED, -} SIB_validity_t; - typedef struct UE_RRC_SI_INFO_NR_r17_s { - SIB_validity_t sib15_validity; + bool sib15_validity; NR_timer_t sib15_timer; - SIB_validity_t sib16_validity; + bool sib16_validity; NR_timer_t sib16_timer; - SIB_validity_t sib17_validity; + bool sib17_validity; NR_timer_t sib17_timer; - SIB_validity_t sib18_validity; + bool sib18_validity; NR_timer_t sib18_timer; - SIB_validity_t sib19_validity; + bool sib19_validity; NR_timer_t sib19_timer; - SIB_validity_t sib20_validity; + bool sib20_validity; NR_timer_t sib20_timer; - SIB_validity_t sib21_validity; + bool sib21_validity; NR_timer_t sib21_timer; } NR_UE_RRC_SI_INFO_r17; typedef struct UE_RRC_SI_INFO_NR_s { + bool sib_pending; uint32_t default_otherSI_map[MAX_SI_GROUPS]; - SIB_validity_t sib1_validity; + bool sib1_validity; NR_timer_t sib1_timer; - SIB_validity_t sib2_validity; + bool sib2_validity; NR_timer_t sib2_timer; - SIB_validity_t sib3_validity; + bool sib3_validity; NR_timer_t sib3_timer; - SIB_validity_t sib4_validity; + bool sib4_validity; NR_timer_t sib4_timer; - SIB_validity_t sib5_validity; + bool sib5_validity; NR_timer_t sib5_timer; - SIB_validity_t sib6_validity; + bool sib6_validity; NR_timer_t sib6_timer; - SIB_validity_t sib7_validity; + bool sib7_validity; NR_timer_t sib7_timer; - SIB_validity_t sib8_validity; + bool sib8_validity; NR_timer_t sib8_timer; - SIB_validity_t sib9_validity; + bool sib9_validity; NR_timer_t sib9_timer; - SIB_validity_t sib10_validity; + bool sib10_validity; NR_timer_t sib10_timer; - SIB_validity_t sib11_validity; + bool sib11_validity; NR_timer_t sib11_timer; - SIB_validity_t sib12_validity; + bool sib12_validity; NR_timer_t sib12_timer; - SIB_validity_t sib13_validity; + bool sib13_validity; NR_timer_t sib13_timer; - SIB_validity_t sib14_validity; + bool sib14_validity; NR_timer_t sib14_timer; NR_UE_RRC_SI_INFO_r17 SInfo_r17; } NR_UE_RRC_SI_INFO; diff --git a/openair2/RRC/NR_UE/rrc_timers_and_constants.c b/openair2/RRC/NR_UE/rrc_timers_and_constants.c index 39e73fa5a43672d3184bcfef25e4e64ca4cc5e8f..6629055b3a7d9f6fec39908797df7486e6ca3e87 100644 --- a/openair2/RRC/NR_UE/rrc_timers_and_constants.c +++ b/openair2/RRC/NR_UE/rrc_timers_and_constants.c @@ -43,33 +43,83 @@ void init_SI_timers(NR_UE_RRC_SI_INFO *SInfo) nr_timer_setup(&SInfo->SInfo_r17.sib19_timer, 10800000, 10); } -static SIB_validity_t check_sib_timer_validity(SIB_validity_t sib_validity, NR_timer_t *sib_timer) -{ - if (sib_validity == SIB_VALID) { - bool sib_expired = nr_timer_tick(sib_timer); - if (sib_expired) - return SIB_NOT_VALID; - } - return sib_validity; -} - void nr_rrc_SI_timers(NR_UE_RRC_SI_INFO *SInfo) { - SInfo->sib1_validity = check_sib_timer_validity(SInfo->sib1_validity, &SInfo->sib1_timer); - SInfo->sib2_validity = check_sib_timer_validity(SInfo->sib2_validity, &SInfo->sib2_timer); - SInfo->sib3_validity = check_sib_timer_validity(SInfo->sib3_validity, &SInfo->sib3_timer); - SInfo->sib4_validity = check_sib_timer_validity(SInfo->sib4_validity, &SInfo->sib4_timer); - SInfo->sib5_validity = check_sib_timer_validity(SInfo->sib5_validity, &SInfo->sib5_timer); - SInfo->sib6_validity = check_sib_timer_validity(SInfo->sib6_validity, &SInfo->sib6_timer); - SInfo->sib7_validity = check_sib_timer_validity(SInfo->sib7_validity, &SInfo->sib7_timer); - SInfo->sib8_validity = check_sib_timer_validity(SInfo->sib8_validity, &SInfo->sib8_timer); - SInfo->sib9_validity = check_sib_timer_validity(SInfo->sib9_validity, &SInfo->sib9_timer); - SInfo->sib10_validity = check_sib_timer_validity(SInfo->sib10_validity, &SInfo->sib10_timer); - SInfo->sib11_validity = check_sib_timer_validity(SInfo->sib11_validity, &SInfo->sib11_timer); - SInfo->sib12_validity = check_sib_timer_validity(SInfo->sib12_validity, &SInfo->sib12_timer); - SInfo->sib13_validity = check_sib_timer_validity(SInfo->sib13_validity, &SInfo->sib13_timer); - SInfo->sib14_validity = check_sib_timer_validity(SInfo->sib14_validity, &SInfo->sib14_timer); - SInfo->SInfo_r17.sib19_validity = check_sib_timer_validity(SInfo->SInfo_r17.sib19_validity, &SInfo->SInfo_r17.sib19_timer); + if (SInfo->sib1_validity) { + bool sib1_expired = nr_timer_tick(&SInfo->sib1_timer); + if (sib1_expired) + SInfo->sib1_validity = false; + } + if (SInfo->sib2_validity) { + bool sib2_expired = nr_timer_tick(&SInfo->sib2_timer); + if (sib2_expired) + SInfo->sib2_validity = false; + } + if (SInfo->sib3_validity) { + bool sib3_expired = nr_timer_tick(&SInfo->sib3_timer); + if (sib3_expired) + SInfo->sib3_validity = false; + } + if (SInfo->sib4_validity) { + bool sib4_expired = nr_timer_tick(&SInfo->sib4_timer); + if (sib4_expired) + SInfo->sib4_validity = false; + } + if (SInfo->sib5_validity) { + bool sib5_expired = nr_timer_tick(&SInfo->sib5_timer); + if (sib5_expired) + SInfo->sib5_validity = false; + } + if (SInfo->sib6_validity) { + bool sib6_expired = nr_timer_tick(&SInfo->sib6_timer); + if (sib6_expired) + SInfo->sib6_validity = false; + } + if (SInfo->sib7_validity) { + bool sib7_expired = nr_timer_tick(&SInfo->sib7_timer); + if (sib7_expired) + SInfo->sib7_validity = false; + } + if (SInfo->sib8_validity) { + bool sib8_expired = nr_timer_tick(&SInfo->sib8_timer); + if (sib8_expired) + SInfo->sib8_validity = false; + } + if (SInfo->sib9_validity) { + bool sib9_expired = nr_timer_tick(&SInfo->sib9_timer); + if (sib9_expired) + SInfo->sib9_validity = false; + } + if (SInfo->sib10_validity) { + bool sib10_expired = nr_timer_tick(&SInfo->sib10_timer); + if (sib10_expired) + SInfo->sib10_validity = false; + } + if (SInfo->sib11_validity) { + bool sib11_expired = nr_timer_tick(&SInfo->sib11_timer); + if (sib11_expired) + SInfo->sib11_validity = false; + } + if (SInfo->sib12_validity) { + bool sib12_expired = nr_timer_tick(&SInfo->sib12_timer); + if (sib12_expired) + SInfo->sib12_validity = false; + } + if (SInfo->sib13_validity) { + bool sib13_expired = nr_timer_tick(&SInfo->sib13_timer); + if (sib13_expired) + SInfo->sib13_validity = false; + } + if (SInfo->sib14_validity) { + bool sib14_expired = nr_timer_tick(&SInfo->sib14_timer); + if (sib14_expired) + SInfo->sib14_validity = false; + } + if (SInfo->SInfo_r17.sib19_validity) { + bool sib19_expired = nr_timer_tick(&SInfo->SInfo_r17.sib19_timer); + if (sib19_expired) + SInfo->SInfo_r17.sib19_validity = false; + } } void nr_rrc_handle_timers(NR_UE_RRC_INST_t *rrc)