diff --git a/openair2/F1AP/f1ap_du_rrc_message_transfer.c b/openair2/F1AP/f1ap_du_rrc_message_transfer.c index 19e06c8600..046d0011fc 100644 --- a/openair2/F1AP/f1ap_du_rrc_message_transfer.c +++ b/openair2/F1AP/f1ap_du_rrc_message_transfer.c @@ -47,6 +47,7 @@ #include "common/ran_context.h" #include "rrc_eNB_UE_context.h" +#include "asn1_msg.h" // undefine C_RNTI from // openair1/PHY/LTE_TRANSPORT/transport_common.h which @@ -401,8 +402,38 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance, for (i = 0; i< 8; i++){ DRB2LCHAN[i] = 0; } - if (rrcConnectionReconfiguration_r8->radioResourceConfigDedicated->mac_MainConfig) + if (rrcConnectionReconfiguration_r8->radioResourceConfigDedicated->mac_MainConfig) { mac_MainConfig = &rrcConnectionReconfiguration_r8->radioResourceConfigDedicated->mac_MainConfig->choice.explicitValue; + int UE_id = find_UE_id(ctxt.module_id, ctxt.rnti); + if (UE_id != -1) { + eNB_RRC_INST *rrc_inst = RC.rrc[ctxt.module_id]; + uint8_t cc_id = ue_context_p->ue_context.primaryCC_id; + eNB_MAC_INST *mac = RC.mac[ctxt.module_id]; + UE_list_t *UE_list = &(mac->UE_list); + + if (rrc_inst->carrier[cc_id].sib1->tdd_Config == NULL && + UE_list->UE_template[cc_id][UE_id].rach_resource_type == 0) { + if (cc_id < MAX_NUM_CCs) { + LTE_UE_EUTRA_Capability_t *UEcap = ue_context_p->ue_context.UE_Capability; + mac_MainConfig->drx_Config = do_DrxConfig(cc_id, + &rrc_inst->configuration, + UEcap); + if (mac_MainConfig->drx_Config == NULL) { + LOG_E(F1AP, "drx_Configuration parameter is NULL, cannot configure local UE parameters\n"); + } else { + /* Set timers and thresholds values in local MAC context of UE */ + eNB_Config_Local_DRX(ctxt.module_id, ctxt.rnti, mac_MainConfig->drx_Config); + LOG_D(F1AP, "DRX configured in mac main config for RRC Connection Reconfiguration\n"); + } + } else { + LOG_E(F1AP, "Invalid CC_id for DRX configuration\n"); + } + } + } else { // UE_id invalid + LOG_E(F1AP, "Invalid UE_id found!\n"); + } + } + LTE_MeasGapConfig_t *measGapConfig = NULL; struct LTE_PhysicalConfigDedicated* physicalConfigDedicated = rrcConnectionReconfiguration_r8->radioResourceConfigDedicated->physicalConfigDedicated; rrc_rlc_config_asn1_req( @@ -602,7 +633,9 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance, } -int DU_send_UL_RRC_MESSAGE_TRANSFER(instance_t instance, const f1ap_ul_rrc_message_t *msg) { +int DU_send_UL_RRC_MESSAGE_TRANSFER(instance_t instance, + const f1ap_ul_rrc_message_t *msg) +{ const rnti_t rnti = msg->rnti; F1AP_F1AP_PDU_t pdu; @@ -703,6 +736,7 @@ int DU_send_UL_RRC_MESSAGE_TRANSFER(instance_t instance, const f1ap_ul_rrc_messa break; case LTE_UL_DCCH_MessageType__c1_PR_rrcConnectionReconfigurationComplete: + break; case LTE_UL_DCCH_MessageType__c1_PR_rrcConnectionReestablishmentComplete: @@ -715,9 +749,16 @@ int DU_send_UL_RRC_MESSAGE_TRANSFER(instance_t instance, const f1ap_ul_rrc_messa }else { LOG_I(F1AP, "Processing RRCConnectionSetupComplete UE %x\n", rnti); ue_context_p->ue_context.Status = RRC_CONNECTED; - } + + int UE_id_mac = find_UE_id(instance, rnti); + UE_sched_ctrl_t *UE_scheduling_control = &(RC.mac[instance]->UE_list.UE_sched_ctrl[UE_id_mac]); + if (UE_scheduling_control->cdrx_waiting_ack == TRUE) { + UE_scheduling_control->cdrx_waiting_ack = FALSE; + } + } break; + case LTE_UL_DCCH_MessageType__c1_PR_securityModeComplete: LOG_I(F1AP, "[MSG] RRC securityModeComplete \n"); break; diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c index 41c5cb9212..eaceddfc2a 100644 --- a/openair2/RRC/LTE/rrc_eNB.c +++ b/openair2/RRC/LTE/rrc_eNB.c @@ -3202,11 +3202,11 @@ void rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t mac_MainConfig->phr_Config->choice.setup.dl_PathlossChange = LTE_MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB3; // Value dB1 =1 dB, dB3 = 3 dB mac_MainConfig->drx_Config = NULL; + rnti_t rnti = ue_context_pP->ue_id_rnti; + module_id_t module_id = ctxt_pP->module_id; if (!NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type)) { /* CDRX Configuration */ // Need to check if UE is a BR UE - rnti_t rnti = ue_context_pP->ue_id_rnti; - module_id_t module_id = ctxt_pP->module_id; int UE_id = find_UE_id(module_id, rnti); if (UE_id != -1) { @@ -6490,7 +6490,7 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete( LTE_SRB_ToAddModList_t *SRB_configList = ue_context_pP->ue_context.SRB_configList2[xid]; LTE_DRB_ToReleaseList_t *DRB_Release_configList2 = ue_context_pP->ue_context.DRB_Release_configList2[xid]; LTE_DRB_Identity_t *drb_id_p = NULL; - + ue_context_pP->ue_context.ue_reestablishment_timer = 0; ue_context_pP->ue_context.ue_rrc_inactivity_timer = 1; // reset rrc inactivity timer @@ -6498,7 +6498,8 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete( /* CDRX: activated if ack was expected */ int UE_id_mac = find_UE_id(ctxt_pP->module_id, ue_context_pP->ue_context.rnti); if (UE_id_mac == -1){ - LOG_E(RRC,PROTOCOL_RRC_CTXT_UE_FMT" rrc_eNB_process_RRCConnectionReconfigurationComplete without UE_id(MAC) rnti %x, let's return\n",PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ue_context_pP->ue_context.rnti); + LOG_E(RRC,PROTOCOL_RRC_CTXT_UE_FMT" rrc_eNB_process_RRCConnectionReconfigurationComplete without UE_id(MAC) rnti %x, let's return\n", + PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), ue_context_pP->ue_context.rnti); return; } UE_sched_ctrl_t *UE_scheduling_control = &(RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id_mac]);