Commit 3187127b authored by LAD's avatar LAD

[to test] Improvements added to F1AP interface (no UE management messaging)

parent d1f54a98
...@@ -405,45 +405,19 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance, ...@@ -405,45 +405,19 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
} }
if (rrcConnectionReconfiguration_r8->radioResourceConfigDedicated->mac_MainConfig) { if (rrcConnectionReconfiguration_r8->radioResourceConfigDedicated->mac_MainConfig) {
LOG_I(F1AP, "MAC Main Configuration is present\n");
mac_MainConfig = &rrcConnectionReconfiguration_r8->radioResourceConfigDedicated->mac_MainConfig->choice.explicitValue; mac_MainConfig = &rrcConnectionReconfiguration_r8->radioResourceConfigDedicated->mac_MainConfig->choice.explicitValue;
/* CDRX Configuration */ /* CDRX Configuration */
// Need to check if UE is a BR UE if (mac_MainConfig->drx_Config == NULL) {
int UE_id = find_UE_id(ctxt.module_id, ctxt.rnti); LOG_W(F1AP, "drx_Configuration parameter is NULL, cannot configure local UE parameters or CDRX is deactivated\n");
} else {
if (UE_id != -1) { /* Set timers and thresholds values in local MAC context of UE */
eNB_RRC_INST *rrc_inst = RC.rrc[ctxt.module_id]; eNB_Config_Local_DRX(ctxt.module_id, ctxt.rnti, mac_MainConfig->drx_Config);
uint8_t cc_id = ue_context_p->ue_context.primaryCC_id; LOG_D(F1AP, "DRX configured in mac main config for RRC Connection Reconfiguration\n");
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) {
// CDRX can be only configured in case of FDD and non BR UE (27/09/19)
LOG_D(F1AP, "Processing the DRX configuration in DU RRC Connection Reconfiguration\n");
/* Process the IE drx_Config */
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); // drx_Config IE
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 { // CDRX not implemented for TDD and LTE-M (09/04/19)
LOG_I(F1AP, "CDRX not implemented for TDD and LTE-M\n");
}
} else { // UE_id invalid
LOG_E(F1AP, "Invalid UE_id found!\n");
}
/* End of CDRX configuration */ /* End of CDRX configuration */
}
} }
LTE_MeasGapConfig_t *measGapConfig = NULL; LTE_MeasGapConfig_t *measGapConfig = NULL;
......
...@@ -630,24 +630,29 @@ LTE_DRX_Config_t *do_DrxConfig(int CC_id, ...@@ -630,24 +630,29 @@ LTE_DRX_Config_t *do_DrxConfig(int CC_id,
LTE_UE_EUTRA_Capability_t *UEcap) LTE_UE_EUTRA_Capability_t *UEcap)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
{ {
/* Need UE capabilities */
if (!UEcap) {
LOG_E(RRC,"[do_DrxConfig] No UEcap pointer\n");
return NULL;
}
/* Check CC id */ /* Check CC id */
if (CC_id >= MAX_NUM_CCs) { if (CC_id >= MAX_NUM_CCs) {
LOG_E(RRC, "[do_DrxConfig] Invalid CC_id for DRX configuration\n"); LOG_E(RRC, "[do_DrxConfig] Invalid CC_id for DRX configuration\n");
return NULL; return NULL;
} }
/* No CDRX configuration */
if (configuration->radioresourceconfig[CC_id].drx_Config_present == LTE_DRX_Config_PR_NOTHING) {
return NULL;
}
/* CDRX not implemented for TDD */ /* CDRX not implemented for TDD */
if (configuration->frame_type[CC_id] == 1) { if (configuration->frame_type[CC_id] == 1) {
LOG_E(RRC, "[do_DrxConfig] CDRX not implemented for TDD\n"); LOG_E(RRC, "[do_DrxConfig] CDRX not implemented for TDD\n");
return NULL; return NULL;
} }
/* Need UE capabilities */
if (!UEcap) {
LOG_E(RRC,"[do_DrxConfig] No UEcap pointer\n");
return NULL;
}
/* Check the UE capabilities, CDRX not implemented for Coverage Extension */ /* Check the UE capabilities, CDRX not implemented for Coverage Extension */
LTE_UE_EUTRA_Capability_v920_IEs_t *cap_920 = NULL; LTE_UE_EUTRA_Capability_v920_IEs_t *cap_920 = NULL;
LTE_UE_EUTRA_Capability_v940_IEs_t *cap_940 = NULL; LTE_UE_EUTRA_Capability_v940_IEs_t *cap_940 = NULL;
...@@ -733,10 +738,6 @@ LTE_DRX_Config_t *do_DrxConfig(int CC_id, ...@@ -733,10 +738,6 @@ LTE_DRX_Config_t *do_DrxConfig(int CC_id,
} else LOG_W(RRC,"[do_DrxConfig] Not enough featureGroupIndicators bits\n"); } else LOG_W(RRC,"[do_DrxConfig] Not enough featureGroupIndicators bits\n");
} else LOG_W(RRC,"[do_DrxConfig] No featureGroupIndicators pointer\n"); } else LOG_W(RRC,"[do_DrxConfig] No featureGroupIndicators pointer\n");
if (configuration->radioresourceconfig[CC_id].drx_Config_present == LTE_DRX_Config_PR_NOTHING) {
return NULL;
}
drxConfig = (LTE_DRX_Config_t *) malloc(sizeof(LTE_DRX_Config_t)); drxConfig = (LTE_DRX_Config_t *) malloc(sizeof(LTE_DRX_Config_t));
if (drxConfig == NULL) return NULL; if (drxConfig == NULL) return NULL;
memset(drxConfig, 0, sizeof(LTE_DRX_Config_t)); memset(drxConfig, 0, sizeof(LTE_DRX_Config_t));
......
...@@ -3202,25 +3202,25 @@ void rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t ...@@ -3202,25 +3202,25 @@ 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->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; mac_MainConfig->drx_Config = NULL;
/* CDRX Configuration */
rnti_t rnti = ue_context_pP->ue_id_rnti; rnti_t rnti = ue_context_pP->ue_id_rnti;
module_id_t module_id = ctxt_pP->module_id; module_id_t module_id = ctxt_pP->module_id;
LOG_D(RRC, "Processing the DRX configuration in RRC Connection Reconfiguration\n");
/* Process the IE drx_Config */
mac_MainConfig->drx_Config = do_DrxConfig(cc_id, &rrc_inst->configuration, UEcap); // drx_Config IE
if (NODE_IS_MONOLITHIC(rrc_inst->node_type)) { if (NODE_IS_MONOLITHIC(rrc_inst->node_type)) {
/* CDRX Configuration */
LOG_D(RRC, "Processing the DRX configuration in RRC Connection Reconfiguration\n");
/* Process the IE drx_Config */
mac_MainConfig->drx_Config = do_DrxConfig(cc_id, &rrc_inst->configuration, UEcap); // drx_Config IE
if (mac_MainConfig->drx_Config == NULL) { if (mac_MainConfig->drx_Config == NULL) {
LOG_W(RRC, "drx_Configuration parameter is NULL, cannot configure local UE parameters or CDRX is deactivated\n"); LOG_W(RRC, "drx_Configuration parameter is NULL, cannot configure local UE parameters or CDRX is deactivated\n");
} else { } else {
/* Set timers and thresholds values in local MAC context of UE */ /* Set timers and thresholds values in local MAC context of UE */
eNB_Config_Local_DRX(module_id, rnti, mac_MainConfig->drx_Config); eNB_Config_Local_DRX(module_id, rnti, mac_MainConfig->drx_Config);
LOG_D(RRC, "DRX configured in mac main config for RRC Connection Reconfiguration\n"); LOG_D(RRC, "DRX configured in mac main config for RRC Connection Reconfiguration\n");
} }
/* End of CDRX configuration */
} }
/* End of CDRX configuration */
#if (LTE_RRC_VERSION >= MAKE_VERSION(9, 0, 0)) #if (LTE_RRC_VERSION >= MAKE_VERSION(9, 0, 0))
sr_ProhibitTimer_r9 = CALLOC(1, sizeof(long)); sr_ProhibitTimer_r9 = CALLOC(1, sizeof(long));
...@@ -6473,24 +6473,27 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete( ...@@ -6473,24 +6473,27 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
ue_context_pP->ue_context.ue_reestablishment_timer = 0; ue_context_pP->ue_context.ue_reestablishment_timer = 0;
ue_context_pP->ue_context.ue_rrc_inactivity_timer = 1; // reset rrc inactivity timer ue_context_pP->ue_context.ue_rrc_inactivity_timer = 1; // reset rrc inactivity timer
if (NODE_IS_MONOLITHIC(RC.rrc[ctxt_pP->module_id]->node_type)) { /* CDRX: activated when RRC Connection Reconfiguration Complete is received */
/* CDRX: activated when RRC Connection Reconfiguration Complete is received */ rnti_t rnti = ue_context_pP->ue_id_rnti;
int UE_id_mac = find_UE_id(ctxt_pP->module_id, ue_context_pP->ue_context.rnti); module_id_t module_id = ctxt_pP->module_id;
if (NODE_IS_MONOLITHIC(RC.rrc[module_id]->node_type)) {
int UE_id_mac = find_UE_id(module_id, rnti);
if (UE_id_mac == -1) { if (UE_id_mac == -1) {
LOG_E(RRC, "Can't find UE_id(MAC) of UE rnti %x\n", ue_context_pP->ue_context.rnti); LOG_E(RRC, "Can't find UE_id(MAC) of UE rnti %x\n", rnti);
return; return;
} }
UE_sched_ctrl_t *UE_scheduling_control = &(RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id_mac]); UE_sched_ctrl_t *UE_scheduling_control = &(RC.mac[module_id]->UE_list.UE_sched_ctrl[UE_id_mac]);
if (UE_scheduling_control->cdrx_waiting_ack == TRUE) { if (UE_scheduling_control->cdrx_waiting_ack == TRUE) {
UE_scheduling_control->cdrx_waiting_ack = FALSE; UE_scheduling_control->cdrx_waiting_ack = FALSE;
UE_scheduling_control->cdrx_configured = TRUE; // Set to TRUE when RRC Connection Reconfiguration is received UE_scheduling_control->cdrx_configured = TRUE; // Set to TRUE when RRC Connection Reconfiguration is received
LOG_I(RRC, "CDRX configuration activated after RRC Connection Reconfiguration Complete reception\n"); LOG_I(RRC, "CDRX configuration activated after RRC Connection Reconfiguration Complete reception\n");
} }
/* End of CDRX processing */
} }
/* End of CDRX processing */
T(T_ENB_RRC_CONNECTION_RECONFIGURATION_COMPLETE, T(T_ENB_RRC_CONNECTION_RECONFIGURATION_COMPLETE,
T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->module_id),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment