Compare commits

...

2 Commits

Author SHA1 Message Date
francescomani
0dd19b75f5 assertion when triggering MSG3 with C-RNTI in dora mode 2025-04-18 17:13:27 +02:00
francescomani
cb42d86ffa improvement in reset RA to avoid resetting dedicated RACH configuration in nsa/dora 2025-04-18 16:47:58 +02:00
5 changed files with 14 additions and 16 deletions

View File

@@ -1686,7 +1686,7 @@ void nr_rrc_mac_config_req_reset(module_id_t module_id, NR_UE_MAC_reset_cause_t
fapi_nr_synch_request_t sync_req = {.target_Nid_cell = -1, .ssb_bw_scan = true};
switch (cause) {
case GO_TO_IDLE:
reset_ra(mac, true);
reset_ra(mac);
nr_ue_init_mac(mac);
release_mac_configuration(mac, cause);
nr_ue_mac_default_configs(mac);
@@ -1695,14 +1695,14 @@ void nr_rrc_mac_config_req_reset(module_id_t module_id, NR_UE_MAC_reset_cause_t
break;
case DETACH:
LOG_A(NR_MAC, "Received detach indication\n");
reset_ra(mac, true);
reset_ra(mac);
reset_mac_inst(mac);
nr_ue_reset_sync_state(mac);
release_mac_configuration(mac, cause);
mac->state = UE_DETACHING;
break;
case T300_EXPIRY:
reset_ra(mac, false);
reset_ra(mac);
reset_mac_inst(mac);
mac->state = UE_PERFORMING_RA; // still in sync but need to restart RA
break;
@@ -1828,7 +1828,7 @@ static void handle_reconfiguration_with_sync(NR_UE_MAC_INST_t *mac,
if (reconfWithSync->rach_ConfigDedicated) {
AssertFatal(reconfWithSync->rach_ConfigDedicated->present == NR_ReconfigurationWithSync__rach_ConfigDedicated_PR_uplink,
"RACH on supplementaryUplink not supported\n");
UPDATE_IE(ra->rach_ConfigDedicated, reconfWithSync->rach_ConfigDedicated->choice.uplink, NR_RACH_ConfigDedicated_t);
UPDATE_IE(mac->rach_ConfigDedicated, reconfWithSync->rach_ConfigDedicated->choice.uplink, NR_RACH_ConfigDedicated_t);
}
if (reconfWithSync->spCellConfigCommon) {

View File

@@ -300,8 +300,6 @@ typedef struct {
} NR_pdcch_order_config_t;
typedef struct {
// pointer to RACH config dedicated
NR_RACH_ConfigDedicated_t *rach_ConfigDedicated;
/// state of RA procedure
nrRA_UE_state_t ra_state;
/// RA contention type
@@ -570,6 +568,8 @@ typedef struct NR_UE_MAC_INST_s {
uint16_t crnti;
/// RA configuration
RA_config_t ra;
// pointer to RACH config dedicated
NR_RACH_ConfigDedicated_t *rach_ConfigDedicated;
/// SSB index from MIB decoding
uint8_t mib_ssb;
uint32_t mib_additional_bits;

View File

@@ -104,7 +104,7 @@ NR_UE_MAC_INST_t * nr_l2_init_ue(int nb_inst);
NR_UE_MAC_INST_t *get_mac_inst(module_id_t module_id);
void reset_mac_inst(NR_UE_MAC_INST_t *nr_mac);
void reset_ra(NR_UE_MAC_INST_t *nr_mac, bool free_prach);
void reset_ra(NR_UE_MAC_INST_t *nr_mac);
void release_mac_configuration(NR_UE_MAC_INST_t *mac,
NR_UE_MAC_reset_cause_t cause);

View File

@@ -116,6 +116,7 @@ void nr_ue_reset_sync_state(NR_UE_MAC_INST_t *mac)
// reset synchornization status
mac->state = UE_NOT_SYNC;
mac->ra.ra_state = nrRA_UE_IDLE;
asn1cFreeStruc(asn_DEF_NR_RACH_ConfigDedicated, mac->rach_ConfigDedicated);
}
NR_UE_L2_STATE_t nr_ue_get_sync_state(module_id_t mod_id)

View File

@@ -354,7 +354,7 @@ static void configure_ra_preamble(NR_UE_MAC_INST_t *mac)
RA_config_t *ra = &mac->ra;
int ssb = -1; // init as not selected
ra->ro_mask_index = -1; // init as not selected
NR_RACH_ConfigDedicated_t *rach_ConfigDedicated = ra->rach_ConfigDedicated;
NR_RACH_ConfigDedicated_t *rach_ConfigDedicated = mac->rach_ConfigDedicated;
if (ra->ra_type == RA_4_STEP) {
// TODO if the Random Access procedure was initiated for SpCell beam failure recovery
// TODO if the Random Access procedure was initiated for SI request
@@ -943,7 +943,7 @@ bool init_RA(NR_UE_MAC_INST_t *mac, int frame)
// have been explicitly provided by RRC for the BWP selected for Random Access procedure
NR_RACH_ConfigCommonTwoStepRA_r16_t *twostep_conf = NULL;
NR_RACH_ConfigDedicated_t *rach_Dedicated = ra->rach_ConfigDedicated;
NR_RACH_ConfigDedicated_t *rach_Dedicated = mac->rach_ConfigDedicated;
// if the Random Access procedure is initiated by PDCCH order
// and if the ra-PreambleIndex explicitly provided by PDCCH is not 0b000000
@@ -1237,8 +1237,10 @@ void nr_rar_not_successful(NR_UE_MAC_INST_t *mac)
void trigger_MAC_UE_RA(NR_UE_MAC_INST_t *mac, dci_pdu_rel15_t *pdcch_order)
{
LOG_W(NR_MAC, "Triggering new RA procedure for UE with RNTI %x\n", mac->crnti);
// in do-ra mode we can't trigger a new RA via C-RNTI in MSG3 (there is no MSG3 and the gNB wouldn't recognize the preamble)
AssertFatal(IS_SA_MODE(get_softmodem_params()), "Triggering RA at MAC only possible in SA mode\n");
mac->state = UE_PERFORMING_RA;
reset_ra(mac, false);
reset_ra(mac);
RA_config_t *ra = &mac->ra;
mac->msg3_C_RNTI = true;
if (pdcch_order) {
@@ -1275,13 +1277,8 @@ void prepare_msg4_msgb_feedback(NR_UE_MAC_INST_t *mac, int pid, int ack_nack)
release_ul_config(pdu, false);
}
void reset_ra(NR_UE_MAC_INST_t *nr_mac, bool free_prach)
void reset_ra(NR_UE_MAC_INST_t *nr_mac)
{
RA_config_t *ra = &nr_mac->ra;
if (ra->rach_ConfigDedicated)
asn1cFreeStruc(asn_DEF_NR_RACH_ConfigDedicated, ra->rach_ConfigDedicated);
memset(ra, 0, sizeof(RA_config_t));
if (!free_prach)
return;
}