Commit 3dcd4306 authored by francescomani's avatar francescomani

prepare MSG3 in advance at RRC UE to be sure it is always ready when requested by MAC

parent 47c06934
...@@ -489,7 +489,6 @@ void nr_Msg1_transmitted(module_id_t mod_id); ...@@ -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 ...@@ -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) ...@@ -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) ...@@ -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);
......
...@@ -141,7 +141,6 @@ static void nr_rrc_manage_rlc_bearers(const NR_UE_RRC_INST_t *rrc, ...@@ -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) ...@@ -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) ...@@ -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 ...@@ -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) ...@@ -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, ...@@ -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) ...@@ -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 { ...@@ -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;
......
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