diff --git a/openair1/PHY/CODING/TESTBENCH/coding_unitary_defs.h b/openair1/PHY/CODING/TESTBENCH/coding_unitary_defs.h index c50d4a54cd..23d02ef197 100644 --- a/openair1/PHY/CODING/TESTBENCH/coding_unitary_defs.h +++ b/openair1/PHY/CODING/TESTBENCH/coding_unitary_defs.h @@ -28,7 +28,7 @@ PHY_VARS_UE ***PHY_vars_UE_g; #include "common/ran_context.h" RAN_CONTEXT_t RC; -void exit_function(const char* file, const char* function, const int line, const char* s, const int assert) +void exit_function(const char* file, const char* function, const int line, const char* s, const int assert) { const char * msg= s==NULL ? "no comment": s; printf("Exiting at: %s:%d %s(), %s\n", file, line, function, msg); exit(-1); diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c index 999d1d5a71..12b4dbf7fd 100644 --- a/openair2/RRC/LTE/rrc_eNB.c +++ b/openair2/RRC/LTE/rrc_eNB.c @@ -973,83 +973,83 @@ void release_UE_in_freeList(module_id_t mod_id) { rnti_t rnti = eNB_MAC->UE_free_ctrl[ue_num].rnti; if (rnti == 0) continue; - protocol_ctxt_t ctxt; + protocol_ctxt_t ctxt; PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, mod_id, ENB_FLAG_YES, rnti, 0, 0, mod_id); - - for (int CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - eNB_PHY = RC.eNB[mod_id][CC_id]; - int id; - // clean ULSCH entries for rnti + + for (int CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + eNB_PHY = RC.eNB[mod_id][CC_id]; + int id; + // clean ULSCH entries for rnti id = find_ulsch(rnti, eNB_PHY, eNB_MAC->UE_free_ctrl[ue_num].raFlag ? SEARCH_EXIST_RA : SEARCH_EXIST); - + if (id >= 0) clean_eNb_ulsch(eNB_PHY->ulsch[id]); - - // clean DLSCH entries for rnti + + // clean DLSCH entries for rnti id = find_dlsch(rnti, eNB_PHY, eNB_MAC->UE_free_ctrl[ue_num].raFlag ? SEARCH_EXIST_RA : SEARCH_EXIST); - + if (id >= 0) clean_eNb_dlsch(eNB_PHY->dlsch[id][0]); - // clean UCI entries for rnti + // clean UCI entries for rnti for (int i = 0; i < NUMBER_OF_UCI_MAX; i++) { if (eNB_PHY->uci_vars[i].rnti == rnti) { LOG_I(MAC, "clean eNb uci_vars[%d] UE %x \n", i, rnti); memset(&eNB_PHY->uci_vars[i], 0, sizeof(LTE_eNB_UCI)); - } - } - - for(int j = 0; j < 10; j++) { - nfapi_ul_config_request_body_t *ul_req_tmp = &eNB_MAC->UL_req_tmp[CC_id][j].ul_config_request_body; - + } + } + + for(int j = 0; j < 10; j++) { + nfapi_ul_config_request_body_t *ul_req_tmp = &eNB_MAC->UL_req_tmp[CC_id][j].ul_config_request_body; + if (ul_req_tmp) { - int pdu_number = ul_req_tmp->number_of_pdus; - + int pdu_number = ul_req_tmp->number_of_pdus; + for (int pdu_index = pdu_number - 1; pdu_index >= 0; pdu_index--) { nfapi_ul_config_request_pdu_t *pdu = ul_req_tmp->ul_config_pdu_list + pdu_index; if (pdu->ulsch_pdu.ulsch_pdu_rel8.rnti == rnti || pdu->uci_harq_pdu.ue_information.ue_information_rel8.rnti == rnti || pdu->uci_cqi_pdu.ue_information.ue_information_rel8.rnti == rnti || pdu->uci_sr_pdu.ue_information.ue_information_rel8.rnti == rnti || pdu->srs_pdu.srs_pdu_rel8.rnti == rnti) { - LOG_I(RRC, "remove UE %x from ul_config_pdu_list %d/%d\n", rnti, pdu_index, pdu_number); - + LOG_I(RRC, "remove UE %x from ul_config_pdu_list %d/%d\n", rnti, pdu_index, pdu_number); + // Very inefficient memory management, but simple if (pdu_index < pdu_number - 1) { memcpy(pdu, pdu + 1, (pdu_number - 1 - pdu_index) * sizeof(nfapi_ul_config_request_pdu_t)); - } - - ul_req_tmp->number_of_pdus--; - } - } - } - } + } + + ul_req_tmp->number_of_pdus--; + } + } + } } - - if (!NODE_IS_CU(RC.rrc[mod_id]->node_type)) { - if (!eNB_MAC->UE_free_ctrl[ue_num].raFlag) - rrc_mac_remove_ue(mod_id,rnti); - rrc_rlc_remove_ue(&ctxt); - pdcp_remove_UE(&ctxt); - } else { - MessageDef *m = itti_alloc_new_message(TASK_RRC_ENB, 0, F1AP_UE_CONTEXT_RELEASE_CMD); - F1AP_UE_CONTEXT_RELEASE_CMD(m).rnti = rnti; - F1AP_UE_CONTEXT_RELEASE_CMD(m).cause = F1AP_CAUSE_RADIO_NETWORK; - F1AP_UE_CONTEXT_RELEASE_CMD(m).cause_value = 10; // 10 = F1AP_CauseRadioNetwork_normal_release - F1AP_UE_CONTEXT_RELEASE_CMD(m).rrc_container = NULL; - F1AP_UE_CONTEXT_RELEASE_CMD(m).rrc_container_length = 0; - itti_send_msg_to_task(TASK_CU_F1, mod_id, m); - } - - if(eNB_MAC->UE_free_ctrl[ue_num].removeContextFlg) { - struct rrc_eNB_ue_context_s *ue_context_pP = rrc_eNB_get_ue_context(RC.rrc[mod_id],rnti); - if(ue_context_pP) { - LOG_I(PHY, "remove RNTI %04x\n", rnti); - rrc_eNB_remove_ue_context(&ctxt,RC.rrc[mod_id], - (struct rrc_eNB_ue_context_s *) ue_context_pP); - } - } - - LOG_I(RRC, "[release_UE_in_freeList] remove UE %x from freeList ra context: %d\n", rnti, eNB_MAC->UE_free_ctrl[ue_num].raFlag); - eNB_MAC->UE_free_ctrl[ue_num].rnti = 0; } + + if (!NODE_IS_CU(RC.rrc[mod_id]->node_type)) { + if (!eNB_MAC->UE_free_ctrl[ue_num].raFlag) + rrc_mac_remove_ue(mod_id,rnti); + rrc_rlc_remove_ue(&ctxt); + pdcp_remove_UE(&ctxt); + } else { + MessageDef *m = itti_alloc_new_message(TASK_RRC_ENB, 0, F1AP_UE_CONTEXT_RELEASE_CMD); + F1AP_UE_CONTEXT_RELEASE_CMD(m).rnti = rnti; + F1AP_UE_CONTEXT_RELEASE_CMD(m).cause = F1AP_CAUSE_RADIO_NETWORK; + F1AP_UE_CONTEXT_RELEASE_CMD(m).cause_value = 10; // 10 = F1AP_CauseRadioNetwork_normal_release + F1AP_UE_CONTEXT_RELEASE_CMD(m).rrc_container = NULL; + F1AP_UE_CONTEXT_RELEASE_CMD(m).rrc_container_length = 0; + itti_send_msg_to_task(TASK_CU_F1, mod_id, m); + } + + if(eNB_MAC->UE_free_ctrl[ue_num].removeContextFlg) { + struct rrc_eNB_ue_context_s *ue_context_pP = rrc_eNB_get_ue_context(RC.rrc[mod_id],rnti); + if(ue_context_pP) { + LOG_I(PHY, "remove RNTI %04x\n", rnti); + rrc_eNB_remove_ue_context(&ctxt,RC.rrc[mod_id], + (struct rrc_eNB_ue_context_s *) ue_context_pP); + } + } + + LOG_I(RRC, "[release_UE_in_freeList] remove UE %x from freeList ra context: %d\n", rnti, eNB_MAC->UE_free_ctrl[ue_num].raFlag); + eNB_MAC->UE_free_ctrl[ue_num].rnti = 0; + } pthread_mutex_unlock(&lock_ue_freelist); }