prepare MSG3 in advance at RRC UE to be sure it is always ready when requested by MAC
This commit is contained in:
@@ -489,7 +489,6 @@ void nr_Msg1_transmitted(module_id_t mod_id);
|
|||||||
|
|
||||||
void nr_Msg3_transmitted(module_id_t mod_id, uint8_t CC_id, frame_t frameP, slot_t slotP, uint8_t gNB_id);
|
void nr_Msg3_transmitted(module_id_t mod_id, uint8_t CC_id, frame_t frameP, slot_t slotP, uint8_t gNB_id);
|
||||||
void nr_get_msg3_payload(module_id_t mod_id, uint8_t *buf, int TBS_max);
|
void nr_get_msg3_payload(module_id_t mod_id, uint8_t *buf, int TBS_max);
|
||||||
void send_msg3_rrc_request(module_id_t mod_id, int rnti);
|
|
||||||
|
|
||||||
void nr_ue_msg2_scheduler(module_id_t mod_id, uint16_t rach_frame, uint16_t rach_slot, uint16_t *msg2_frame, uint16_t *msg2_slot);
|
void nr_ue_msg2_scheduler(module_id_t mod_id, uint16_t rach_frame, uint16_t rach_slot, uint16_t *msg2_frame, uint16_t *msg2_slot);
|
||||||
|
|
||||||
|
|||||||
@@ -53,12 +53,6 @@ void send_srb0_rrc(int ue_id, const uint8_t *sdu, sdu_size_t sdu_len, void *data
|
|||||||
itti_send_msg_to_task(TASK_RRC_NRUE, ue_id, message_p);
|
itti_send_msg_to_task(TASK_RRC_NRUE, ue_id, message_p);
|
||||||
}
|
}
|
||||||
|
|
||||||
void send_msg3_rrc_request(module_id_t mod_id, int rnti)
|
|
||||||
{
|
|
||||||
nr_rlc_activate_srb0(mod_id, NULL, send_srb0_rrc);
|
|
||||||
nr_mac_rrc_msg3_ind(mod_id, rnti);
|
|
||||||
}
|
|
||||||
|
|
||||||
void nr_ue_init_mac(module_id_t module_idP)
|
void nr_ue_init_mac(module_id_t module_idP)
|
||||||
{
|
{
|
||||||
LOG_I(NR_MAC, "[UE%d] Applying default macMainConfig\n", module_idP);
|
LOG_I(NR_MAC, "[UE%d] Applying default macMainConfig\n", module_idP);
|
||||||
@@ -129,6 +123,10 @@ NR_UE_MAC_INST_t *nr_l2_init_ue(int nb_inst)
|
|||||||
int rc = rlc_module_init(0);
|
int rc = rlc_module_init(0);
|
||||||
AssertFatal(rc == 0, "Could not initialize RLC layer\n");
|
AssertFatal(rc == 0, "Could not initialize RLC layer\n");
|
||||||
|
|
||||||
|
for (int j = 0; j < nb_inst; j++) {
|
||||||
|
nr_rlc_activate_srb0(j, NULL, send_srb0_rrc);
|
||||||
|
}
|
||||||
|
|
||||||
return (nr_ue_mac_inst);
|
return (nr_ue_mac_inst);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4167,7 +4167,7 @@ static int nr_ue_process_rar(nr_downlink_indication_t *dl_info, int pdu_id)
|
|||||||
if (!ra->cfra) {
|
if (!ra->cfra) {
|
||||||
ra->t_crnti = rar->TCRNTI_2 + (rar->TCRNTI_1 << 8);
|
ra->t_crnti = rar->TCRNTI_2 + (rar->TCRNTI_1 << 8);
|
||||||
rnti = ra->t_crnti;
|
rnti = ra->t_crnti;
|
||||||
send_msg3_rrc_request(mod_id, rnti);
|
nr_mac_rrc_msg3_ind(mod_id, rnti);
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_lock(&ul_config->mutex_ul_config);
|
pthread_mutex_lock(&ul_config->mutex_ul_config);
|
||||||
|
|||||||
+11
-14
@@ -141,7 +141,6 @@ static void nr_rrc_manage_rlc_bearers(const NR_UE_RRC_INST_t *rrc,
|
|||||||
static void nr_rrc_ue_process_RadioBearerConfig(NR_UE_RRC_INST_t *ue_rrc,
|
static void nr_rrc_ue_process_RadioBearerConfig(NR_UE_RRC_INST_t *ue_rrc,
|
||||||
rrcPerNB_t *rrcNB,
|
rrcPerNB_t *rrcNB,
|
||||||
NR_RadioBearerConfig_t *const radioBearerConfig);
|
NR_RadioBearerConfig_t *const radioBearerConfig);
|
||||||
static void nr_rrc_ue_generate_RRCSetupRequest(NR_UE_RRC_INST_t *rrc);
|
|
||||||
static void nr_rrc_ue_generate_rrcReestablishmentComplete(NR_RRCReestablishment_t *rrcReestablishment);
|
static void nr_rrc_ue_generate_rrcReestablishmentComplete(NR_RRCReestablishment_t *rrcReestablishment);
|
||||||
static void process_lte_nsa_msg(NR_UE_RRC_INST_t *rrc, nsa_msg_t *msg, int msg_len);
|
static void process_lte_nsa_msg(NR_UE_RRC_INST_t *rrc, nsa_msg_t *msg, int msg_len);
|
||||||
static void nr_rrc_ue_process_rrcReconfiguration(NR_UE_RRC_INST_t *rrc,
|
static void nr_rrc_ue_process_rrcReconfiguration(NR_UE_RRC_INST_t *rrc,
|
||||||
@@ -309,7 +308,7 @@ NR_UE_RRC_INST_t* nr_rrc_init_ue(char* uecap_file, int nb_inst)
|
|||||||
rrc->dl_bwp_id = 0;
|
rrc->dl_bwp_id = 0;
|
||||||
rrc->ul_bwp_id = 0;
|
rrc->ul_bwp_id = 0;
|
||||||
rrc->as_security_activated = false;
|
rrc->as_security_activated = false;
|
||||||
|
rrc->ra_trigger = RA_NOT_RUNNING;
|
||||||
rrc->uecap_file = uecap_file;
|
rrc->uecap_file = uecap_file;
|
||||||
|
|
||||||
for (int i = 0; i < NB_CNX_UE; i++) {
|
for (int i = 0; i < NB_CNX_UE; i++) {
|
||||||
@@ -566,13 +565,15 @@ static int nr_decode_SI(NR_UE_RRC_SI_INFO *SI_info, NR_SystemInformation_t *si)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void nr_rrc_ue_generate_ra_msg(NR_UE_RRC_INST_t *rrc, RA_trigger_t trigger, int rnti)
|
static void nr_rrc_handle_msg3_indication(NR_UE_RRC_INST_t *rrc, int rnti)
|
||||||
{
|
{
|
||||||
switch (trigger) {
|
switch (rrc->ra_trigger) {
|
||||||
case INITIAL_ACCESS_FROM_RRC_IDLE:
|
case INITIAL_ACCESS_FROM_RRC_IDLE:
|
||||||
// After SIB1 is received, prepare RRCConnectionRequest
|
// After SIB1 is received, prepare RRCConnectionRequest
|
||||||
rrc->rnti = rnti;
|
rrc->rnti = rnti;
|
||||||
nr_rrc_ue_generate_RRCSetupRequest(rrc);
|
// start timer T300
|
||||||
|
NR_UE_Timers_Constants_t *tac = &rrc->timers_and_constants;
|
||||||
|
tac->T300_active = true;
|
||||||
break;
|
break;
|
||||||
case RRC_CONNECTION_REESTABLISHMENT:
|
case RRC_CONNECTION_REESTABLISHMENT:
|
||||||
AssertFatal(1==0, "ra_trigger not implemented yet!\n");
|
AssertFatal(1==0, "ra_trigger not implemented yet!\n");
|
||||||
@@ -601,7 +602,7 @@ void nr_rrc_ue_generate_ra_msg(NR_UE_RRC_INST_t *rrc, RA_trigger_t trigger, int
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void nr_rrc_ue_generate_RRCSetupRequest(NR_UE_RRC_INST_t *rrc)
|
static void nr_rrc_ue_prepare_RRCSetupRequest(NR_UE_RRC_INST_t *rrc)
|
||||||
{
|
{
|
||||||
LOG_D(NR_RRC, "Generation of RRCSetupRequest\n");
|
LOG_D(NR_RRC, "Generation of RRCSetupRequest\n");
|
||||||
uint8_t rv[6];
|
uint8_t rv[6];
|
||||||
@@ -619,11 +620,6 @@ static void nr_rrc_ue_generate_RRCSetupRequest(NR_UE_RRC_INST_t *rrc)
|
|||||||
uint8_t buf[1024];
|
uint8_t buf[1024];
|
||||||
int len = do_RRCSetupRequest(buf, sizeof(buf), rv);
|
int len = do_RRCSetupRequest(buf, sizeof(buf), rv);
|
||||||
|
|
||||||
// start timer T300
|
|
||||||
NR_UE_Timers_Constants_t *tac = &rrc->timers_and_constants;
|
|
||||||
tac->T300_active = true;
|
|
||||||
|
|
||||||
/* convention: RNTI for SRB0 is zero, as it changes all the time */
|
|
||||||
nr_rlc_srb_recv_sdu(rrc->ue_id, 0, buf, len);
|
nr_rlc_srb_recv_sdu(rrc->ue_id, 0, buf, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -687,9 +683,10 @@ static int8_t nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(NR_UE_RRC_INST_t *rrc,
|
|||||||
xer_fprint(stdout, &asn_DEF_NR_SIB1, (const void *) SI_info->sib1);
|
xer_fprint(stdout, &asn_DEF_NR_SIB1, (const void *) SI_info->sib1);
|
||||||
LOG_A(NR_RRC, "SIB1 decoded\n");
|
LOG_A(NR_RRC, "SIB1 decoded\n");
|
||||||
SI_info->sib1_timer = 0;
|
SI_info->sib1_timer = 0;
|
||||||
// FIXME: improve condition for the RA trigger
|
|
||||||
if (rrc->nrRrcState == RRC_STATE_IDLE_NR) {
|
if (rrc->nrRrcState == RRC_STATE_IDLE_NR) {
|
||||||
LOG_D(PHY,"Setting state to RRC_STATE_IDLE_NR\n");
|
rrc->ra_trigger = INITIAL_ACCESS_FROM_RRC_IDLE;
|
||||||
|
// preparing RRC setup request payload in advance
|
||||||
|
nr_rrc_ue_prepare_RRCSetupRequest(rrc);
|
||||||
}
|
}
|
||||||
// configure default SI
|
// configure default SI
|
||||||
nr_rrc_configure_default_SI(SI_info, sib1);
|
nr_rrc_configure_default_SI(SI_info, sib1);
|
||||||
@@ -1440,7 +1437,7 @@ void *rrc_nrue(void *notUsed)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case NR_RRC_MAC_MSG3_IND:
|
case NR_RRC_MAC_MSG3_IND:
|
||||||
nr_rrc_ue_generate_ra_msg(rrc, INITIAL_ACCESS_FROM_RRC_IDLE, NR_RRC_MAC_MSG3_IND(msg_p).rnti);
|
nr_rrc_handle_msg3_indication(rrc, NR_RRC_MAC_MSG3_IND(msg_p).rnti);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NR_RRC_MAC_RA_IND:
|
case NR_RRC_MAC_RA_IND:
|
||||||
|
|||||||
@@ -213,10 +213,9 @@ typedef struct NR_UE_RRC_INST_s {
|
|||||||
|
|
||||||
OAI_NR_UECapability_t UECap;
|
OAI_NR_UECapability_t UECap;
|
||||||
NR_UE_Timers_Constants_t timers_and_constants;
|
NR_UE_Timers_Constants_t timers_and_constants;
|
||||||
|
RA_trigger_t ra_trigger;
|
||||||
plmn_t plmnID;
|
plmn_t plmnID;
|
||||||
|
|
||||||
// NR_MIB_t *mib;
|
|
||||||
|
|
||||||
NR_BWP_Id_t dl_bwp_id;
|
NR_BWP_Id_t dl_bwp_id;
|
||||||
NR_BWP_Id_t ul_bwp_id;
|
NR_BWP_Id_t ul_bwp_id;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user