Merge remote-tracking branch 'origin/fix-reestab-ho-cleanup' into integration_2025_w48 (!3776)
Fix reestablishment after handover - fix reestablishment by not re-creating LCIDs with priority set to 0 (see first commit for more details) - cleanup code
This commit is contained in:
@@ -1099,6 +1099,13 @@ void nr_mac_configure_sib1(gNB_MAC_INST *nrmac, const plmn_id_t *plmn, uint64_t
|
||||
AssertFatal(cc->sib1_bcch_length > 0, "could not encode SIB1\n");
|
||||
}
|
||||
|
||||
static bool process_addmod_bearers_cellGroupConfig(NR_UE_sched_ctrl_t *sched_ctrl, const NR_RLC_BearerConfig_t *conf)
|
||||
{
|
||||
int priority = conf->mac_LogicalChannelConfig->ul_SpecificParameters->priority;
|
||||
nr_lc_config_t c = {.lcid = conf->logicalChannelIdentity, .priority = priority};
|
||||
return nr_mac_add_lcid(sched_ctrl, &c);
|
||||
}
|
||||
|
||||
bool nr_mac_add_test_ue(gNB_MAC_INST *nrmac, uint32_t rnti, NR_CellGroupConfig_t *CellGroup)
|
||||
{
|
||||
/* ideally, instead of this function, "users" of this function should call
|
||||
@@ -1120,7 +1127,9 @@ bool nr_mac_add_test_ue(gNB_MAC_INST *nrmac, uint32_t rnti, NR_CellGroupConfig_t
|
||||
}
|
||||
int ss_type = NR_SearchSpace__searchSpaceType_PR_ue_Specific;
|
||||
configure_UE_BWP(nrmac, nrmac->common_channels[0].ServingCellConfigCommon, UE, false, ss_type, -1, -1);
|
||||
process_addmod_bearers_cellGroupConfig(&UE->UE_sched_ctrl, CellGroup->rlc_BearerToAddModList);
|
||||
const struct NR_CellGroupConfig__rlc_BearerToAddModList *l = CellGroup->rlc_BearerToAddModList;
|
||||
for (int i = 0; l != NULL && i < l->list.count; ++i)
|
||||
process_addmod_bearers_cellGroupConfig(&UE->UE_sched_ctrl, CellGroup->rlc_BearerToAddModList->list.array[i]);
|
||||
AssertFatal(CellGroup->rlc_BearerToReleaseList == NULL, "cannot release bearers while adding new UEs\n");
|
||||
NR_SCHED_UNLOCK(&nrmac->sched_lock);
|
||||
LOG_I(NR_MAC, "Added new UE %x with initial CellGroup\n", rnti);
|
||||
|
||||
@@ -3963,23 +3963,6 @@ void nr_mac_trigger_reconfiguration(const gNB_MAC_INST *nrmac, const NR_UE_info_
|
||||
free_cellGroupConfig(cellGroup_for_UE);
|
||||
}
|
||||
|
||||
/* \brief add bearers from CellGroupConfig.
|
||||
*
|
||||
* This is a kind of hack, as this should be processed through a F1 UE Context
|
||||
* setup request, but some modes do not use that (NSA/do-ra/phy_test). */
|
||||
void process_addmod_bearers_cellGroupConfig(NR_UE_sched_ctrl_t *sched_ctrl, const struct NR_CellGroupConfig__rlc_BearerToAddModList *addmod)
|
||||
{
|
||||
if (addmod == NULL)
|
||||
return; /* nothing to do */
|
||||
|
||||
for (int i = 0; i < addmod->list.count; ++i) {
|
||||
const NR_RLC_BearerConfig_t *conf = addmod->list.array[i];
|
||||
int lcid = conf->logicalChannelIdentity;
|
||||
nr_lc_config_t c = {.lcid = lcid};
|
||||
nr_mac_add_lcid(sched_ctrl, &c);
|
||||
}
|
||||
}
|
||||
|
||||
long get_lcid_from_drbid(int drb_id)
|
||||
{
|
||||
return drb_id + 3; /* LCID is DRB + 3 */
|
||||
|
||||
@@ -832,7 +832,6 @@ static void nr_rx_ra_sdu(const module_id_t mod_id,
|
||||
nr_mac_reset_ul_failure(UE_scheduling_control);
|
||||
reset_dl_harq_list(UE_scheduling_control);
|
||||
reset_ul_harq_list(UE_scheduling_control);
|
||||
process_addmod_bearers_cellGroupConfig(&UE->UE_sched_ctrl, UE->CellGroup->rlc_BearerToAddModList);
|
||||
int ss_type;
|
||||
// we configure the UE using common search space with DCIX0 while waiting for a reconfiguration in SA
|
||||
// in NSA (or do-ra) there is no reconfiguration in NR
|
||||
|
||||
@@ -480,9 +480,6 @@ bool nr_mac_check_ul_failure(gNB_MAC_INST *nrmac, int rnti, NR_UE_sched_ctrl_t *
|
||||
|
||||
void nr_mac_trigger_reconfiguration(const gNB_MAC_INST *nrmac, const NR_UE_info_t *UE, int new_bwp_id);
|
||||
|
||||
void process_addmod_bearers_cellGroupConfig(NR_UE_sched_ctrl_t *sched_ctrl,
|
||||
const struct NR_CellGroupConfig__rlc_BearerToAddModList *addmod);
|
||||
|
||||
bool nr_mac_add_lcid(NR_UE_sched_ctrl_t *sched_ctrl, const nr_lc_config_t *c);
|
||||
nr_lc_config_t *nr_mac_get_lc_config(NR_UE_sched_ctrl_t* sched_ctrl, int lcid);
|
||||
bool nr_mac_remove_lcid(NR_UE_sched_ctrl_t *sched_ctrl, long lcid);
|
||||
|
||||
@@ -681,11 +681,9 @@ void ue_context_setup_request(const f1ap_ue_context_setup_req_t *req)
|
||||
/* new UE: tell the UE to reestablish RLC */
|
||||
struct NR_CellGroupConfig__rlc_BearerToAddModList *addmod = new_CellGroup->rlc_BearerToAddModList;
|
||||
for (int i = 0; i < addmod->list.count; ++i) {
|
||||
asn1cCallocOne(addmod->list.array[i]->reestablishRLC, NR_RLC_BearerConfig__reestablishRLC_true);
|
||||
for (int i = 1; i < seq_arr_size(&UE->UE_sched_ctrl.lc_config); ++i) {
|
||||
nr_lc_config_t *lc_config = seq_arr_at(&UE->UE_sched_ctrl.lc_config, i);
|
||||
nr_rlc_reestablish_entity(UE->rnti, lc_config->lcid);
|
||||
}
|
||||
NR_RLC_BearerConfig_t *bc = addmod->list.array[i];
|
||||
asn1cCallocOne(bc->reestablishRLC, NR_RLC_BearerConfig__reestablishRLC_true);
|
||||
nr_rlc_reestablish_entity(UE->rnti, bc->logicalChannelIdentity);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user