From e45da1a6fa7e587f3682c8cb55bbd678a32e1585 Mon Sep 17 00:00:00 2001 From: francescomani Date: Thu, 22 Jun 2023 19:18:29 +0200 Subject: [PATCH] moving handling of RA success for reconfigurationWithSync at RRC --- .../SIMULATION/NR_PHY/nr_dummy_functions.c | 2 ++ openair2/COMMON/mac_messages_def.h | 2 ++ openair2/COMMON/mac_messages_types.h | 10 ++++++++- openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c | 2 +- openair2/RRC/NR_UE/L2_interface_ue.c | 12 +++++------ openair2/RRC/NR_UE/rrc_UE.c | 21 +++++++++++++++++++ openair2/RRC/NR_UE/rrc_proto.h | 1 + 7 files changed, 41 insertions(+), 9 deletions(-) diff --git a/openair1/SIMULATION/NR_PHY/nr_dummy_functions.c b/openair1/SIMULATION/NR_PHY/nr_dummy_functions.c index dccdce2934..6d3948974d 100644 --- a/openair1/SIMULATION/NR_PHY/nr_dummy_functions.c +++ b/openair1/SIMULATION/NR_PHY/nr_dummy_functions.c @@ -32,6 +32,8 @@ void nr_mac_rrc_sync_ind(const module_id_t module_id, const frame_t frame, const bool in_sync) {} +void nr_mac_rrc_ra_ind(const module_id_t mod_id, int frame, bool success) {} + void rrc_data_ind(const protocol_ctxt_t *const ctxt_pP, const rb_id_t Srb_id, const sdu_size_t sdu_sizeP, diff --git a/openair2/COMMON/mac_messages_def.h b/openair2/COMMON/mac_messages_def.h index d4a923b90b..50e7a108c9 100644 --- a/openair2/COMMON/mac_messages_def.h +++ b/openair2/COMMON/mac_messages_def.h @@ -48,6 +48,8 @@ MESSAGE_DEF(RRC_MAC_MCCH_DATA_IND, MESSAGE_PRIORITY_MED_PLUS, RrcMacMcchDat MESSAGE_DEF(RRC_MAC_PCCH_DATA_REQ, MESSAGE_PRIORITY_MED_PLUS, RrcMacPcchDataReq, rrc_mac_pcch_data_req) +MESSAGE_DEF(NR_RRC_MAC_RA_IND, MESSAGE_PRIORITY_MED_PLUS, NRRrcMacRaInd, nr_rrc_mac_ra_ind) + /* RRC configures DRX context (MAC timers) of a UE */ MESSAGE_DEF(RRC_MAC_DRX_CONFIG_REQ, MESSAGE_PRIORITY_MED, rrc_mac_drx_config_req_t, rrc_mac_drx_config_req) diff --git a/openair2/COMMON/mac_messages_types.h b/openair2/COMMON/mac_messages_types.h index fde990b0fe..5703a886c0 100644 --- a/openair2/COMMON/mac_messages_types.h +++ b/openair2/COMMON/mac_messages_types.h @@ -54,7 +54,9 @@ #define RRC_MAC_MCCH_DATA_IND(mSGpTR) (mSGpTR)->ittiMsg.rrc_mac_mcch_data_ind #define RRC_MAC_PCCH_DATA_REQ(mSGpTR) (mSGpTR)->ittiMsg.rrc_mac_pcch_data_req -#define RRC_MAC_DRX_CONFIG_REQ(mSGpTR) (mSGpTR)->ittiMsg.rrc_mac_drx_config_req +#define NR_RRC_MAC_RA_IND(mSGpTR) (mSGpTR)->ittiMsg.nr_rrc_mac_ra_ind + +#define RRC_MAC_DRX_CONFIG_REQ(mSGpTR) (mSGpTR)->ittiMsg.rrc_mac_drx_config_req // Some constants from "LAYER2/MAC/defs.h" #define BCCH_SDU_SIZE (512) @@ -65,6 +67,12 @@ //-------------------------------------------------------------------------------------------// // Messages between RRC and MAC layers + +typedef struct NRRrcMacRaInd_s { + uint32_t frame; + bool RA_succeeded; +} NRRrcMacRaInd; + typedef struct RrcMacInSyncInd_s { uint32_t frame; uint8_t sub_frame; diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c index 130b46143b..1c09ec574d 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c @@ -896,7 +896,6 @@ void nr_ra_succeeded(const module_id_t mod_id, const uint8_t gNB_index, const fr if (ra->cfra) { LOG_I(MAC, "[UE %d][%d.%d][RAPROC] RA procedure succeeded. CF-RA: RAR successfully received.\n", mod_id, frame, slot); - nr_rrc_RA_succeeded(mod_id, gNB_index); mac->state = UE_CONNECTED; ra->RA_window_cnt = -1; } else { @@ -911,6 +910,7 @@ void nr_ra_succeeded(const module_id_t mod_id, const uint8_t gNB_index, const fr LOG_D(MAC, "In %s: [UE %d] clearing RA_active flag...\n", __FUNCTION__, mod_id); ra->RA_active = 0; ra->ra_state = RA_SUCCEEDED; + nr_mac_rrc_ra_ind(mod_id, frame, true); } // Handling failure of RA procedure @ MAC layer diff --git a/openair2/RRC/NR_UE/L2_interface_ue.c b/openair2/RRC/NR_UE/L2_interface_ue.c index 7222defbe4..06fb26536e 100644 --- a/openair2/RRC/NR_UE/L2_interface_ue.c +++ b/openair2/RRC/NR_UE/L2_interface_ue.c @@ -155,12 +155,10 @@ int8_t nr_mac_rrc_data_req_ue(const module_id_t Mod_idP, return 0; } -int8_t nr_rrc_RA_succeeded(const module_id_t mod_id, const uint8_t gNB_index) +void nr_mac_rrc_ra_ind(const module_id_t mod_id, int frame, bool success) { - if (NR_UE_rrc_inst[mod_id].timers_and_constants.T304_active == true) { - LOG_W(NR_RRC, "T304 was stoped with value %i\n", NR_UE_rrc_inst[mod_id].timers_and_constants.T304_cnt); - NR_UE_rrc_inst[mod_id].timers_and_constants.T304_active = false; - NR_UE_rrc_inst[mod_id].timers_and_constants.T304_cnt = 0; - } - return 0; + MessageDef *message_p = itti_alloc_new_message(TASK_MAC_UE, 0, NR_RRC_MAC_RA_IND); + NR_RRC_MAC_RA_IND (message_p).frame = frame; + NR_RRC_MAC_RA_IND (message_p).RA_succeeded = success; + itti_send_msg_to_task(TASK_RRC_NRUE, GNB_MODULE_ID_TO_INSTANCE(mod_id), message_p); } diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c index 69efec94ce..87f7e50157 100644 --- a/openair2/RRC/NR_UE/rrc_UE.c +++ b/openair2/RRC/NR_UE/rrc_UE.c @@ -2249,6 +2249,18 @@ int32_t nr_rrc_ue_establish_drb(module_id_t ue_mod_idP, return 0; } +void nr_rrc_handle_ra_indication(unsigned int mod_id, bool ra_succeeded) +{ + NR_UE_Timers_Constants_t *timers = &NR_UE_rrc_inst[mod_id].timers_and_constants; + if (ra_succeeded && timers->T304_active == true) { + // successful Random Access procedure triggered by reconfigurationWithSync + timers->T304_active = false; + timers->T304_cnt = 0; + // TODO handle the rest of procedures as described in 5.3.5.3 for when + // reconfigurationWithSync is included in spCellConfig + } +} + void *rrc_nrue_task(void *args_p) { MessageDef *msg_p; @@ -2293,6 +2305,15 @@ void *rrc_nrue_task(void *args_p) nr_rrc_handle_timers(timers); break; + case NR_RRC_MAC_RA_IND: + LOG_D(NR_RRC, "[UE %d] Received %s: frame %d\n RA %s", + ue_mod_id, + ITTI_MSG_NAME (msg_p), + NR_RRC_MAC_RA_IND (msg_p).frame, + NR_RRC_MAC_RA_IND (msg_p).RA_succeeded ? "successful" : "failed"); + nr_rrc_handle_ra_indication(ue_mod_id, NR_RRC_MAC_RA_IND (msg_p).RA_succeeded); + break; + case NR_RRC_MAC_BCCH_DATA_IND: LOG_D(NR_RRC, "[UE %d] Received %s: frameP %d, gNB %d\n", ue_mod_id, ITTI_MSG_NAME (msg_p), NR_RRC_MAC_BCCH_DATA_IND (msg_p).frame, NR_RRC_MAC_BCCH_DATA_IND (msg_p).gnb_index); diff --git a/openair2/RRC/NR_UE/rrc_proto.h b/openair2/RRC/NR_UE/rrc_proto.h index f303d809fe..67369a8488 100644 --- a/openair2/RRC/NR_UE/rrc_proto.h +++ b/openair2/RRC/NR_UE/rrc_proto.h @@ -116,6 +116,7 @@ int8_t nr_mac_rrc_data_ind_ue(const module_id_t module_id, void nr_mac_rrc_sync_ind(const module_id_t module_id, const frame_t frame, const bool in_sync); +void nr_mac_rrc_ra_ind(const module_id_t mod_id, int frame, bool success); /**\brief \param module_id module id