Commit 45fdcf68 authored by Xin Zhe Khooi's avatar Xin Zhe Khooi

Suppress UEContextReleaseComplete when performing F1 Reset

parent 8633e326
......@@ -2156,7 +2156,7 @@ void nr_schedule_RA(module_id_t module_idP,
ra->contention_resolution_timer--;
if (ra->contention_resolution_timer < 0) {
LOG_W(NR_MAC, "(%d.%d) RA Contention Resolution timer expired for UE 0x%04x, RA procedure failed...\n", frameP, slotP, ra->rnti);
nr_mac_release_ue(mac, ra->rnti);
nr_mac_release_ue(mac, ra->rnti, true);
nr_clear_ra_proc(ra);
continue;
}
......
......@@ -3001,7 +3001,7 @@ int nr_mac_enable_ue_rrc_processing_timer(gNB_MAC_INST *mac, NR_UE_info_t *UE, b
return 0;
}
void nr_mac_release_ue(gNB_MAC_INST *mac, int rnti)
void nr_mac_release_ue(gNB_MAC_INST *mac, int rnti, bool generate_ue_release_complete)
{
NR_SCHED_ENSURE_LOCKED(&mac->sched_lock);
......@@ -3018,11 +3018,13 @@ void nr_mac_release_ue(gNB_MAC_INST *mac, int rnti)
// du_remove_f1_ue_data() (and also while sending the message to RRC)
NR_SCHED_UNLOCK(&mac->sched_lock);
f1_ue_data_t ue_data = du_get_f1_ue_data(rnti);
f1ap_ue_context_release_complete_t complete = {
.gNB_CU_ue_id = ue_data.secondary_ue,
.gNB_DU_ue_id = rnti,
};
mac->mac_rrc.ue_context_release_complete(&complete);
if(generate_ue_release_complete) {
f1ap_ue_context_release_complete_t complete = {
.gNB_CU_ue_id = ue_data.secondary_ue,
.gNB_DU_ue_id = rnti,
};
mac->mac_rrc.ue_context_release_complete(&complete);
}
du_remove_f1_ue_data(rnti);
NR_SCHED_LOCK(&mac->sched_lock);
......@@ -3043,7 +3045,7 @@ void nr_mac_update_timers(module_id_t module_id,
NR_UE_sched_ctrl_t *sched_ctrl = &UE->UE_sched_ctrl;
if (nr_mac_check_release(sched_ctrl, UE->rnti)) {
nr_mac_release_ue(mac, UE->rnti);
nr_mac_release_ue(mac, UE->rnti, true);
// go back to examine the next UE, which is at the position the
// current UE was
UE--;
......
......@@ -433,7 +433,7 @@ void abort_nr_dl_harq(NR_UE_info_t* UE, int8_t harq_pid);
void nr_mac_trigger_release_timer(NR_UE_sched_ctrl_t *sched_ctrl, NR_SubcarrierSpacing_t subcarrier_spacing);
bool nr_mac_check_release(NR_UE_sched_ctrl_t *sched_ctrl, int rnti);
void nr_mac_release_ue(gNB_MAC_INST *mac, int rnti);
void nr_mac_release_ue(gNB_MAC_INST *mac, int rnti, bool generate_ue_release_complete);
void nr_mac_trigger_ul_failure(NR_UE_sched_ctrl_t *sched_ctrl, NR_SubcarrierSpacing_t subcarrier_spacing);
void nr_mac_reset_ul_failure(NR_UE_sched_ctrl_t *sched_ctrl);
......
......@@ -117,7 +117,7 @@ void du_clear_all_ue_states()
while (UE != NULL) {
int rnti = UE->rnti;
nr_mac_release_ue(mac, rnti);
nr_mac_release_ue(mac, rnti, false);
newGtpuDeleteAllTunnels(f1inst, rnti);
UE_list = (&mac->UE_info)->list;
UE = *UE_list;
......@@ -694,7 +694,7 @@ void ue_context_release_command(const f1ap_ue_context_release_cmd_t *cmd)
if (UE->UE_sched_ctrl.ul_failure || cmd->rrc_container_length == 0) {
/* The UE is already not connected anymore or we have nothing to forward*/
nr_mac_release_ue(mac, cmd->gNB_DU_ue_id);
nr_mac_release_ue(mac, cmd->gNB_DU_ue_id, true);
} else {
/* UE is in sync: forward release message and mark to be deleted
* after UL failure */
......
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