Handle RRC processing time at gNB
This commit is contained in:
@@ -2066,8 +2066,7 @@ void configure_gnb_du_mac(int inst) {
|
|||||||
NULL,
|
NULL,
|
||||||
0,
|
0,
|
||||||
0, // rnti
|
0, // rnti
|
||||||
(NR_CellGroupConfig_t *)NULL
|
NULL);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -449,6 +449,25 @@ void config_common(int Mod_idP, int ssb_SubcarrierOffset, rrc_pdsch_AntennaPorts
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int nr_mac_enable_ue_rrc_processing_timer(module_id_t Mod_idP, rnti_t rnti, NR_SubcarrierSpacing_t subcarrierSpacing, uint32_t rrc_reconfiguration_delay) {
|
||||||
|
if (rrc_reconfiguration_delay > 0) {
|
||||||
|
const int UE_id = find_nr_UE_id(Mod_idP,rnti);
|
||||||
|
if (UE_id >= 0) {
|
||||||
|
NR_UE_info_t *UE_info = &RC.nrmac[Mod_idP]->UE_info;
|
||||||
|
NR_UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id];
|
||||||
|
if (sched_ctrl->rrc_processing_timer == 0) {
|
||||||
|
const uint16_t sf_ahead = (uint16_t) ceil(6.0/(float)(0x01<<subcarrierSpacing));
|
||||||
|
const uint16_t sl_ahead = sf_ahead * (0x01<<subcarrierSpacing);
|
||||||
|
sched_ctrl->rrc_processing_timer = (rrc_reconfiguration_delay<<subcarrierSpacing) + sl_ahead;
|
||||||
|
LOG_I(NR_MAC, "Activating RRC processing timer for UE %d\n", UE_id);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
LOG_W(NR_MAC, "Could not find UE for RNTI 0x%04x\n", rnti);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int rrc_mac_config_req_gNB(module_id_t Mod_idP,
|
int rrc_mac_config_req_gNB(module_id_t Mod_idP,
|
||||||
int ssb_SubcarrierOffset,
|
int ssb_SubcarrierOffset,
|
||||||
@@ -692,8 +711,6 @@ int rrc_mac_config_req_gNB(module_id_t Mod_idP,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_OUT);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_OUT);
|
||||||
|
|
||||||
|
|
||||||
return(0);
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
}// END rrc_mac_config_req_gNB
|
}// END rrc_mac_config_req_gNB
|
||||||
|
|||||||
@@ -346,6 +346,9 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
|
|||||||
LOG_I(NR_MAC,"Frame.Slot %d.%d\n%s\n",frame,slot,stats_output);
|
LOG_I(NR_MAC,"Frame.Slot %d.%d\n%s\n",frame,slot,stats_output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This updates the timers running at MAC layer
|
||||||
|
nr_mac_update_timers(module_idP, frame, slot);
|
||||||
|
|
||||||
// This schedules MIB
|
// This schedules MIB
|
||||||
schedule_nr_mib(module_idP, frame, slot);
|
schedule_nr_mib(module_idP, frame, slot);
|
||||||
|
|
||||||
|
|||||||
@@ -1946,6 +1946,13 @@ void nr_check_Msg4_Ack(module_id_t module_id, int CC_id, frame_t frame, sub_fram
|
|||||||
LOG_A(NR_MAC, "(ue %i, rnti 0x%04x) Received Ack of RA-Msg4. CBRA procedure succeeded!\n", UE_id, ra->rnti);
|
LOG_A(NR_MAC, "(ue %i, rnti 0x%04x) Received Ack of RA-Msg4. CBRA procedure succeeded!\n", UE_id, ra->rnti);
|
||||||
UE_info->active[UE_id] = true;
|
UE_info->active[UE_id] = true;
|
||||||
UE_info->Msg4_ACKed[UE_id] = true;
|
UE_info->Msg4_ACKed[UE_id] = true;
|
||||||
|
|
||||||
|
const NR_SIB1_t *sib1 = RC.nrmac[module_id]->common_channels[0].sib1 ? RC.nrmac[module_id]->common_channels[0].sib1->message.choice.c1->choice.systemInformationBlockType1 : NULL;
|
||||||
|
NR_BWP_t *genericParameters = get_dl_bwp_genericParameters(sched_ctrl->active_bwp,
|
||||||
|
RC.nrmac[module_id]->common_channels[0].ServingCellConfigCommon,
|
||||||
|
sib1);
|
||||||
|
// 3GPP TS 38.331 Section 12 Table 12.1-1: UE performance requirements for RRC procedures for UEs
|
||||||
|
sched_ctrl->rrc_processing_timer = (NR_RRC_SETUP_DELAY_MS << genericParameters->subcarrierSpacing); // RRCSetup 10 ms
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
LOG_I(NR_MAC, "(ue %i, rnti 0x%04x) RA Procedure failed at Msg4!\n", UE_id, ra->rnti);
|
LOG_I(NR_MAC, "(ue %i, rnti 0x%04x) RA Procedure failed at Msg4!\n", UE_id, ra->rnti);
|
||||||
|
|||||||
@@ -488,17 +488,22 @@ void nr_store_dlsch_buffer(module_id_t module_id,
|
|||||||
const int lcid = sched_ctrl->dl_lc_ids[i];
|
const int lcid = sched_ctrl->dl_lc_ids[i];
|
||||||
const uint16_t rnti = UE_info->rnti[UE_id];
|
const uint16_t rnti = UE_info->rnti[UE_id];
|
||||||
LOG_D(NR_MAC, "In %s: UE %d/%x: LCID %d\n", __FUNCTION__, UE_id, rnti, lcid);
|
LOG_D(NR_MAC, "In %s: UE %d/%x: LCID %d\n", __FUNCTION__, UE_id, rnti, lcid);
|
||||||
|
|
||||||
|
if (lcid == DL_SCH_LCID_DTCH && sched_ctrl->rrc_processing_timer > 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
start_meas(&RC.nrmac[module_id]->rlc_status_ind);
|
start_meas(&RC.nrmac[module_id]->rlc_status_ind);
|
||||||
sched_ctrl->rlc_status[lcid] = mac_rlc_status_ind(module_id,
|
sched_ctrl->rlc_status[lcid] = mac_rlc_status_ind(module_id,
|
||||||
rnti,
|
rnti,
|
||||||
module_id,
|
module_id,
|
||||||
frame,
|
frame,
|
||||||
slot,
|
slot,
|
||||||
ENB_FLAG_YES,
|
ENB_FLAG_YES,
|
||||||
MBMS_FLAG_NO,
|
MBMS_FLAG_NO,
|
||||||
lcid,
|
lcid,
|
||||||
0,
|
0,
|
||||||
0);
|
0);
|
||||||
stop_meas(&RC.nrmac[module_id]->rlc_status_ind);
|
stop_meas(&RC.nrmac[module_id]->rlc_status_ind);
|
||||||
|
|
||||||
if (sched_ctrl->rlc_status[lcid].bytes_in_buffer == 0)
|
if (sched_ctrl->rlc_status[lcid].bytes_in_buffer == 0)
|
||||||
|
|||||||
@@ -2604,6 +2604,11 @@ void nr_csirs_scheduling(int Mod_idP,
|
|||||||
for (int UE_id = UE_list->head; UE_id >= 0; UE_id = UE_list->next[UE_id]) {
|
for (int UE_id = UE_list->head; UE_id >= 0; UE_id = UE_list->next[UE_id]) {
|
||||||
|
|
||||||
NR_UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id];
|
NR_UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id];
|
||||||
|
|
||||||
|
if (sched_ctrl->rrc_processing_timer > 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
NR_CellGroupConfig_t *CellGroup = UE_info->CellGroup[UE_id];
|
NR_CellGroupConfig_t *CellGroup = UE_info->CellGroup[UE_id];
|
||||||
|
|
||||||
if (!CellGroup || !CellGroup->spCellConfig || !CellGroup->spCellConfig->spCellConfigDedicated ||
|
if (!CellGroup || !CellGroup->spCellConfig || !CellGroup->spCellConfig->spCellConfigDedicated ||
|
||||||
@@ -2791,6 +2796,23 @@ void nr_csirs_scheduling(int Mod_idP,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void nr_mac_update_timers(module_id_t module_id,
|
||||||
|
frame_t frame,
|
||||||
|
sub_frame_t slot) {
|
||||||
|
NR_UE_info_t *UE_info = &RC.nrmac[module_id]->UE_info;
|
||||||
|
const NR_list_t *UE_list = &UE_info->list;
|
||||||
|
for (int UE_id = UE_list->head; UE_id >= 0; UE_id = UE_list->next[UE_id]) {
|
||||||
|
NR_UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id];
|
||||||
|
if (sched_ctrl->rrc_processing_timer > 0) {
|
||||||
|
sched_ctrl->rrc_processing_timer--;
|
||||||
|
if (sched_ctrl->rrc_processing_timer == 0) {
|
||||||
|
LOG_I(NR_MAC, "(%d.%d) De-activating RRC processing timer for UE %d\n", frame, slot, UE_id);
|
||||||
|
sched_ctrl->update_pdsch_ps = true;
|
||||||
|
sched_ctrl->update_pusch_ps = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*void fill_nfapi_coresets_and_searchspaces(NR_CellGroupConfig_t *cg,
|
/*void fill_nfapi_coresets_and_searchspaces(NR_CellGroupConfig_t *cg,
|
||||||
nfapi_nr_coreset_t *coreset,
|
nfapi_nr_coreset_t *coreset,
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ void nr_schedule_srs(int module_id, frame_t frame) {
|
|||||||
sched_ctrl->sched_srs.slot = -1;
|
sched_ctrl->sched_srs.slot = -1;
|
||||||
sched_ctrl->sched_srs.srs_scheduled = false;
|
sched_ctrl->sched_srs.srs_scheduled = false;
|
||||||
|
|
||||||
if(!UE_info->Msg4_ACKed[UE_id]) {
|
if(!UE_info->Msg4_ACKed[UE_id] || sched_ctrl->rrc_processing_timer > 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -702,7 +702,9 @@ void nr_csi_meas_reporting(int Mod_idP,
|
|||||||
for (int UE_id = UE_list->head; UE_id >= 0; UE_id = UE_list->next[UE_id]) {
|
for (int UE_id = UE_list->head; UE_id >= 0; UE_id = UE_list->next[UE_id]) {
|
||||||
const NR_CellGroupConfig_t *CellGroup = UE_info->CellGroup[UE_id];
|
const NR_CellGroupConfig_t *CellGroup = UE_info->CellGroup[UE_id];
|
||||||
NR_UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id];
|
NR_UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id];
|
||||||
if (sched_ctrl->ul_failure==1 && get_softmodem_params()->phy_test==0) continue;
|
if ((sched_ctrl->rrc_processing_timer > 0) || (sched_ctrl->ul_failure==1 && get_softmodem_params()->phy_test==0)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (!CellGroup || !CellGroup->spCellConfig || !CellGroup->spCellConfig->spCellConfigDedicated ||
|
if (!CellGroup || !CellGroup->spCellConfig || !CellGroup->spCellConfig->spCellConfigDedicated ||
|
||||||
!CellGroup->spCellConfig->spCellConfigDedicated->csi_MeasConfig) continue;
|
!CellGroup->spCellConfig->spCellConfigDedicated->csi_MeasConfig) continue;
|
||||||
const NR_CSI_MeasConfig_t *csi_measconfig = CellGroup->spCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup;
|
const NR_CSI_MeasConfig_t *csi_measconfig = CellGroup->spCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup;
|
||||||
|
|||||||
@@ -1201,8 +1201,9 @@ void pf_ul(module_id_t module_id,
|
|||||||
const bool do_sched = nr_UE_is_to_be_scheduled(module_id, 0, UE_id, sched_pusch->frame, sched_pusch->slot);
|
const bool do_sched = nr_UE_is_to_be_scheduled(module_id, 0, UE_id, sched_pusch->frame, sched_pusch->slot);
|
||||||
|
|
||||||
LOG_D(NR_MAC,"pf_ul: do_sched UE %d => %s\n",UE_id,do_sched ? "yes" : "no");
|
LOG_D(NR_MAC,"pf_ul: do_sched UE %d => %s\n",UE_id,do_sched ? "yes" : "no");
|
||||||
if (B == 0 && !do_sched)
|
if ((B == 0 && !do_sched) || (sched_ctrl->rrc_processing_timer > 0)) {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/* Schedule UE on SR or UL inactivity and no data (otherwise, will be scheduled
|
/* Schedule UE on SR or UL inactivity and no data (otherwise, will be scheduled
|
||||||
* based on data to transmit) */
|
* based on data to transmit) */
|
||||||
|
|||||||
@@ -46,6 +46,11 @@ void config_common(int Mod_idP,
|
|||||||
int pusch_AntennaPorts,
|
int pusch_AntennaPorts,
|
||||||
NR_ServingCellConfigCommon_t *scc);
|
NR_ServingCellConfigCommon_t *scc);
|
||||||
|
|
||||||
|
int nr_mac_enable_ue_rrc_processing_timer(module_id_t Mod_idP,
|
||||||
|
rnti_t rnti,
|
||||||
|
NR_SubcarrierSpacing_t subcarrierSpacing,
|
||||||
|
uint32_t rrc_reconfiguration_delay);
|
||||||
|
|
||||||
int rrc_mac_config_req_gNB(module_id_t Mod_idP,
|
int rrc_mac_config_req_gNB(module_id_t Mod_idP,
|
||||||
int ssb_SubcarrierOffset,
|
int ssb_SubcarrierOffset,
|
||||||
rrc_pdsch_AntennaPorts_t pdsch_AntennaPorts,
|
rrc_pdsch_AntennaPorts_t pdsch_AntennaPorts,
|
||||||
@@ -64,6 +69,10 @@ void clear_nr_nfapi_information(gNB_MAC_INST * gNB,
|
|||||||
frame_t frameP,
|
frame_t frameP,
|
||||||
sub_frame_t subframeP);
|
sub_frame_t subframeP);
|
||||||
|
|
||||||
|
void nr_mac_update_timers(module_id_t module_id,
|
||||||
|
frame_t frame,
|
||||||
|
sub_frame_t slot);
|
||||||
|
|
||||||
void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
|
void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
|
||||||
frame_t frame_rxP, sub_frame_t slot_rxP);
|
frame_t frame_rxP, sub_frame_t slot_rxP);
|
||||||
|
|
||||||
|
|||||||
@@ -646,12 +646,13 @@ typedef struct {
|
|||||||
/// UL HARQ processes that await retransmission
|
/// UL HARQ processes that await retransmission
|
||||||
NR_list_t retrans_ul_harq;
|
NR_list_t retrans_ul_harq;
|
||||||
NR_UE_mac_ce_ctrl_t UE_mac_ce_ctrl;// MAC CE related information
|
NR_UE_mac_ce_ctrl_t UE_mac_ce_ctrl;// MAC CE related information
|
||||||
|
|
||||||
/// number of active DL LCs
|
/// number of active DL LCs
|
||||||
uint8_t dl_lc_num;
|
uint8_t dl_lc_num;
|
||||||
/// order in which DLSCH scheduler should allocate LCs
|
/// order in which DLSCH scheduler should allocate LCs
|
||||||
uint8_t dl_lc_ids[NR_MAX_NUM_LCID];
|
uint8_t dl_lc_ids[NR_MAX_NUM_LCID];
|
||||||
|
|
||||||
|
/// Timer for RRC processing procedures
|
||||||
|
uint32_t rrc_processing_timer;
|
||||||
} NR_UE_sched_ctrl_t;
|
} NR_UE_sched_ctrl_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|||||||
@@ -96,6 +96,10 @@ typedef struct nr_uid_linear_allocator_s {
|
|||||||
#define PROTOCOL_NR_RRC_CTXT_FMT PROTOCOL_CTXT_FMT
|
#define PROTOCOL_NR_RRC_CTXT_FMT PROTOCOL_CTXT_FMT
|
||||||
#define PROTOCOL_NR_RRC_CTXT_ARGS(CTXT_Pp) PROTOCOL_NR_CTXT_ARGS(CTXT_Pp)
|
#define PROTOCOL_NR_RRC_CTXT_ARGS(CTXT_Pp) PROTOCOL_NR_CTXT_ARGS(CTXT_Pp)
|
||||||
|
|
||||||
|
// 3GPP TS 38.331 Section 12 Table 12.1-1: UE performance requirements for RRC procedures for UEs
|
||||||
|
#define NR_RRC_SETUP_DELAY_MS 10
|
||||||
|
#define NR_RRC_RECONFIGURATION_DELAY_MS 10
|
||||||
|
#define NR_RRC_BWP_SWITCHING_DELAY_MS 6
|
||||||
|
|
||||||
#define NR_UE_MODULE_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!!
|
#define NR_UE_MODULE_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!!
|
||||||
#define NR_UE_INDEX_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!! used to be -1
|
#define NR_UE_INDEX_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!! used to be -1
|
||||||
@@ -372,7 +376,7 @@ typedef struct gNB_RRC_UE_s {
|
|||||||
rb_id_t gnb_gtp_ebi[S1AP_MAX_E_RAB];
|
rb_id_t gnb_gtp_ebi[S1AP_MAX_E_RAB];
|
||||||
rb_id_t gnb_gtp_psi[S1AP_MAX_E_RAB];
|
rb_id_t gnb_gtp_psi[S1AP_MAX_E_RAB];
|
||||||
//GTPV1 F1-U TUNNELS
|
//GTPV1 F1-U TUNNELS
|
||||||
uint32_t incoming_teid[S1AP_MAX_E_RAB];
|
uint32_t incoming_teid[S1AP_MAX_E_RAB];
|
||||||
|
|
||||||
uint32_t ul_failure_timer;
|
uint32_t ul_failure_timer;
|
||||||
uint32_t ue_release_timer;
|
uint32_t ue_release_timer;
|
||||||
|
|||||||
@@ -729,6 +729,13 @@ rrc_gNB_generate_defaultRRCReconfiguration(
|
|||||||
|
|
||||||
LOG_DUMPMSG(NR_RRC, DEBUG_RRC,(char *)buffer, size, "[MSG] RRC Reconfiguration\n");
|
LOG_DUMPMSG(NR_RRC, DEBUG_RRC,(char *)buffer, size, "[MSG] RRC Reconfiguration\n");
|
||||||
|
|
||||||
|
if (NODE_IS_DU(rrc->node_type) || NODE_IS_MONOLITHIC(rrc->node_type)) {
|
||||||
|
nr_mac_enable_ue_rrc_processing_timer(ctxt_pP->module_id,
|
||||||
|
ue_context_pP->ue_context.rnti,
|
||||||
|
*rrc->carrier.servingcellconfigcommon->ssbSubcarrierSpacing,
|
||||||
|
NR_RRC_RECONFIGURATION_DELAY_MS);
|
||||||
|
}
|
||||||
|
|
||||||
/* Free all NAS PDUs */
|
/* Free all NAS PDUs */
|
||||||
for (int i = 0; i < ue_context_pP->ue_context.nb_of_pdusessions; i++) {
|
for (int i = 0; i < ue_context_pP->ue_context.nb_of_pdusessions; i++) {
|
||||||
if (ue_context_pP->ue_context.pduSession[i].param.nas_pdu.buffer != NULL) {
|
if (ue_context_pP->ue_context.pduSession[i].param.nas_pdu.buffer != NULL) {
|
||||||
@@ -995,6 +1002,13 @@ rrc_gNB_generate_dedicatedRRCReconfiguration(
|
|||||||
cellGroupConfig);
|
cellGroupConfig);
|
||||||
LOG_DUMPMSG(NR_RRC,DEBUG_RRC,(char *)buffer,size,"[MSG] RRC Reconfiguration\n");
|
LOG_DUMPMSG(NR_RRC,DEBUG_RRC,(char *)buffer,size,"[MSG] RRC Reconfiguration\n");
|
||||||
|
|
||||||
|
if (NODE_IS_DU(rrc->node_type) || NODE_IS_MONOLITHIC(rrc->node_type)) {
|
||||||
|
nr_mac_enable_ue_rrc_processing_timer(ctxt_pP->module_id,
|
||||||
|
ue_context_pP->ue_context.rnti,
|
||||||
|
*rrc->carrier.servingcellconfigcommon->ssbSubcarrierSpacing,
|
||||||
|
NR_RRC_RECONFIGURATION_DELAY_MS);
|
||||||
|
}
|
||||||
|
|
||||||
/* Free all NAS PDUs */
|
/* Free all NAS PDUs */
|
||||||
for (i = 0; i < ue_context_pP->ue_context.nb_of_pdusessions; i++) {
|
for (i = 0; i < ue_context_pP->ue_context.nb_of_pdusessions; i++) {
|
||||||
if (ue_context_pP->ue_context.pduSession[i].param.nas_pdu.buffer != NULL) {
|
if (ue_context_pP->ue_context.pduSession[i].param.nas_pdu.buffer != NULL) {
|
||||||
@@ -1168,6 +1182,13 @@ rrc_gNB_modify_dedicatedRRCReconfiguration(
|
|||||||
NULL);
|
NULL);
|
||||||
LOG_DUMPMSG(NR_RRC, DEBUG_RRC, (char *)buffer, size, "[MSG] RRC Reconfiguration\n");
|
LOG_DUMPMSG(NR_RRC, DEBUG_RRC, (char *)buffer, size, "[MSG] RRC Reconfiguration\n");
|
||||||
|
|
||||||
|
if (NODE_IS_DU(RC.nrrrc[ctxt_pP->module_id]->node_type) || NODE_IS_MONOLITHIC(RC.nrrrc[ctxt_pP->module_id]->node_type)) {
|
||||||
|
nr_mac_enable_ue_rrc_processing_timer(ctxt_pP->module_id,
|
||||||
|
ue_context_pP->ue_context.rnti,
|
||||||
|
*RC.nrrrc[ctxt_pP->module_id]->carrier.servingcellconfigcommon->ssbSubcarrierSpacing,
|
||||||
|
NR_RRC_RECONFIGURATION_DELAY_MS);
|
||||||
|
}
|
||||||
|
|
||||||
/* Free all NAS PDUs */
|
/* Free all NAS PDUs */
|
||||||
for (i = 0; i < ue_context_pP->ue_context.nb_of_modify_pdusessions; i++) {
|
for (i = 0; i < ue_context_pP->ue_context.nb_of_modify_pdusessions; i++) {
|
||||||
if (ue_context_pP->ue_context.modify_pdusession[i].param.nas_pdu.buffer != NULL) {
|
if (ue_context_pP->ue_context.modify_pdusession[i].param.nas_pdu.buffer != NULL) {
|
||||||
@@ -1269,8 +1290,15 @@ rrc_gNB_generate_dedicatedRRCReconfiguration_release(
|
|||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
ue_context_pP->ue_context.pdu_session_release_command_flag = 1;
|
ue_context_pP->ue_context.pdu_session_release_command_flag = 1;
|
||||||
LOG_DUMPMSG(NR_RRC,DEBUG_RRC,(char *)buffer,size,
|
|
||||||
"[MSG] RRC Reconfiguration\n");
|
LOG_DUMPMSG(NR_RRC,DEBUG_RRC,(char *)buffer,size, "[MSG] RRC Reconfiguration\n");
|
||||||
|
|
||||||
|
if (NODE_IS_DU(RC.nrrrc[ctxt_pP->module_id]->node_type) || NODE_IS_MONOLITHIC(RC.nrrrc[ctxt_pP->module_id]->node_type)) {
|
||||||
|
nr_mac_enable_ue_rrc_processing_timer(ctxt_pP->module_id,
|
||||||
|
ue_context_pP->ue_context.rnti,
|
||||||
|
*RC.nrrrc[ctxt_pP->module_id]->carrier.servingcellconfigcommon->ssbSubcarrierSpacing,
|
||||||
|
NR_RRC_RECONFIGURATION_DELAY_MS);
|
||||||
|
}
|
||||||
|
|
||||||
/* Free all NAS PDUs */
|
/* Free all NAS PDUs */
|
||||||
if (nas_length > 0) {
|
if (nas_length > 0) {
|
||||||
@@ -1819,8 +1847,15 @@ rrc_gNB_process_RRCConnectionReestablishmentComplete(
|
|||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
LOG_DUMPMSG(NR_RRC,DEBUG_RRC,(char *)buffer,size,
|
|
||||||
"[MSG] RRC Reconfiguration\n");
|
LOG_DUMPMSG(NR_RRC,DEBUG_RRC,(char *)buffer,size, "[MSG] RRC Reconfiguration\n");
|
||||||
|
|
||||||
|
if (NODE_IS_DU(RC.nrrrc[ctxt_pP->module_id]->node_type) || NODE_IS_MONOLITHIC(RC.nrrrc[ctxt_pP->module_id]->node_type)) {
|
||||||
|
nr_mac_enable_ue_rrc_processing_timer(ctxt_pP->module_id,
|
||||||
|
ue_context_pP->ue_context.rnti,
|
||||||
|
*RC.nrrrc[ctxt_pP->module_id]->carrier.servingcellconfigcommon->ssbSubcarrierSpacing,
|
||||||
|
NR_RRC_RECONFIGURATION_DELAY_MS);
|
||||||
|
}
|
||||||
|
|
||||||
/* Free all NAS PDUs */
|
/* Free all NAS PDUs */
|
||||||
for (i = 0; i < ue_context_pP->ue_context.nb_of_pdusessions; i++) {
|
for (i = 0; i < ue_context_pP->ue_context.nb_of_pdusessions; i++) {
|
||||||
|
|||||||
@@ -241,9 +241,8 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
|
|||||||
cipher_algo,
|
cipher_algo,
|
||||||
NR_SecurityConfig__keyToUse_secondary);
|
NR_SecurityConfig__keyToUse_secondary);
|
||||||
}
|
}
|
||||||
NR_ServingCellConfig_t *scc = ue_context_p->ue_context.spCellConfig
|
NR_ServingCellConfig_t *scc = ue_context_p->ue_context.spCellConfig ?
|
||||||
? ue_context_p->ue_context.spCellConfig->spCellConfigDedicated
|
ue_context_p->ue_context.spCellConfig->spCellConfigDedicated : NULL;
|
||||||
: NULL;
|
|
||||||
fill_default_reconfig(carrier->servingcellconfigcommon,
|
fill_default_reconfig(carrier->servingcellconfigcommon,
|
||||||
scc,
|
scc,
|
||||||
reconfig_ies,
|
reconfig_ies,
|
||||||
|
|||||||
Reference in New Issue
Block a user