diff --git a/executables/nr-ue.c b/executables/nr-ue.c index ec5f325807..f30bebbbfb 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -984,29 +984,8 @@ void init_NR_UE(int nb_inst, char *uecap_file, char *reconfig_file, char *rbconf NR_UE_MAC_INST_t *mac = get_mac_inst(i); AssertFatal((mac->if_module = nr_ue_if_module_init(i)) != NULL, "can not initialize IF module\n"); if (!get_softmodem_params()->sa) { - init_nsa_message(&rrc_inst[i], reconfig_file, rbconfig_file); - // TODO why do we need noS1 configuration? - // temporarily moved here to understand why not using the one provided by gNB - nr_rlc_activate_srb0(i, NULL, send_srb0_rrc); - if (IS_SOFTMODEM_NOS1) { - // get default noS1 configuration - NR_RadioBearerConfig_t *rbconfig = NULL; - NR_RLC_BearerConfig_t *rlc_rbconfig = NULL; - fill_nr_noS1_bearer_config(&rbconfig, &rlc_rbconfig); - - // set up PDCP, RLC, MAC - nr_pdcp_layer_init(false); - nr_pdcp_add_drbs(ENB_FLAG_NO, i, rbconfig->drb_ToAddModList, 0, NULL, NULL); - nr_rlc_add_drb(i, rbconfig->drb_ToAddModList->list.array[0]->drb_Identity, rlc_rbconfig); - struct NR_CellGroupConfig__rlc_BearerToAddModList rlc_toadd_list; - rlc_toadd_list.list.count = 1; - rlc_toadd_list.list.array = calloc(1, sizeof(NR_RLC_BearerConfig_t)); - rlc_toadd_list.list.array[0] = rlc_rbconfig; - nr_rrc_mac_config_req_ue_logicalChannelBearer(0, &rlc_toadd_list, NULL); - - // free memory - free_nr_noS1_bearer_config(&rbconfig, NULL); - } + init_nsa_message(rrc_inst, reconfig_file, rbconfig_file); + nr_rlc_activate_srb0(mac_inst->crnti, NULL, send_srb0_rrc); } } } diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c index 6fe411c253..4e5e14089c 100644 --- a/executables/nr-uesoftmodem.c +++ b/executables/nr-uesoftmodem.c @@ -368,7 +368,8 @@ void init_openair0(void) { } } -static void init_pdcp(int ue_id) { +static void init_pdcp(int ue_id) +{ uint32_t pdcp_initmask = (!IS_SOFTMODEM_NOS1) ? LINK_ENB_PDCP_TO_GTPV1U_BIT : (LINK_ENB_PDCP_TO_GTPV1U_BIT | PDCP_USE_NETLINK_BIT | LINK_ENB_PDCP_TO_IP_DRIVER_BIT); /*if (IS_SOFTMODEM_RFSIM || (nfapi_getmode()==NFAPI_UE_STUB_PNF)) { @@ -510,8 +511,6 @@ int main(int argc, char **argv) memset(PHY_vars_UE_g[0][CC_id], 0, sizeof(*PHY_vars_UE_g[0][CC_id])); } - init_NR_UE(NB_UE_INST, uecap_file, reconfig_file, rbconfig_file); - int mode_offset = get_softmodem_params()->nsa ? NUMBER_OF_UE_MAX : 1; uint16_t node_number = get_softmodem_params()->node_number; ue_id_g = (node_number == 0) ? 0 : node_number - 2; @@ -525,6 +524,8 @@ int main(int argc, char **argv) } } + init_NR_UE(NB_UE_INST, uecap_file, reconfig_file, rbconfig_file); + if (get_softmodem_params()->emulate_l1) { RCconfig_nr_ue_macrlc(); get_channel_model_mode(uniqCfg); diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c index f126fb94d2..5e6b8c5f45 100644 --- a/openair1/SIMULATION/NR_PHY/dlsim.c +++ b/openair1/SIMULATION/NR_PHY/dlsim.c @@ -871,6 +871,8 @@ int main(int argc, char **argv) nr_rrc_mac_config_req_mib(0, 0, mib->message.choice.mib, false); nr_rrc_mac_config_req_cg(0, 0, UE_CellGroup); + asn1cFreeStruc(asn_DEF_NR_CellGroupConfig, UE_CellGroup); + UE_mac->state = UE_CONNECTED; UE_mac->ra.ra_state = RA_SUCCEEDED; diff --git a/openair2/LAYER2/NR_MAC_UE/config_ue.c b/openair2/LAYER2/NR_MAC_UE/config_ue.c index b2a45315d6..c8f01b3a6b 100644 --- a/openair2/LAYER2/NR_MAC_UE/config_ue.c +++ b/openair2/LAYER2/NR_MAC_UE/config_ue.c @@ -669,29 +669,29 @@ void nr_release_mac_config_logicalChannelBearer(NR_UE_MAC_INST_t *mac, long chan } } -static uint16_t nr_get_ms_bucketsizeduration(uint8_t bucketsizeduration) +static int nr_get_ms_bucketsizeduration(long bucketsizeduration) { switch (bucketsizeduration) { + case NR_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms5: + return 5; + case NR_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms10: + return 10; + case NR_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms20: + return 20; case NR_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50: return 50; - case NR_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms100: return 100; - case NR_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms150: return 150; - case NR_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms300: return 300; - case NR_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms500: return 500; - case NR_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms1000: return 1000; - default: - return 0; + AssertFatal(false, "Invalid bucketSizeDuration %ld\n", bucketsizeduration); } } @@ -724,9 +724,9 @@ void nr_configure_mac_config_logicalChannelBearer(module_id_t module_id, mac->scheduling_info.lc_sched_info[channel_identity - 1].LCGID = 0; } -void nr_rrc_mac_config_req_ue_logicalChannelBearer(module_id_t module_id, - struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_toadd_list, - struct NR_CellGroupConfig__rlc_BearerToReleaseList *rlc_torelease_list) +static void configure_logicalChannelBearer(module_id_t module_id, + struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_toadd_list, + struct NR_CellGroupConfig__rlc_BearerToReleaseList *rlc_torelease_list) { NR_UE_MAC_INST_t *mac = get_mac_inst(module_id); if (rlc_torelease_list) { @@ -1956,6 +1956,10 @@ void nr_rrc_mac_config_req_cg(module_id_t module_id, } } + configure_logicalChannelBearer(module_id, + cell_group_config->rlc_BearerToAddModList, + cell_group_config->rlc_BearerToReleaseList); + // Setup the SSB to Rach Occasions mapping according to the config // Only if RACH is configured for current BWP if (mac->current_UL_BWP->rach_ConfigCommon) @@ -1963,6 +1967,4 @@ void nr_rrc_mac_config_req_cg(module_id_t module_id, if (!mac->dl_config_request || !mac->ul_config_request) ue_init_config_request(mac, mac->current_DL_BWP->scs); - - asn1cFreeStruc(asn_DEF_NR_CellGroupConfig, cell_group_config); } diff --git a/openair2/LAYER2/NR_MAC_UE/mac_proto.h b/openair2/LAYER2/NR_MAC_UE/mac_proto.h index 9700dc5f54..bb14dfab18 100644 --- a/openair2/LAYER2/NR_MAC_UE/mac_proto.h +++ b/openair2/LAYER2/NR_MAC_UE/mac_proto.h @@ -177,10 +177,6 @@ void release_dl_BWP(NR_UE_MAC_INST_t *mac, int index); void release_ul_BWP(NR_UE_MAC_INST_t *mac, int index); void nr_release_mac_config_logicalChannelBearer(NR_UE_MAC_INST_t *mac, long channel_identity); -void nr_rrc_mac_config_req_ue_logicalChannelBearer(module_id_t module_id, - struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_toadd_list, - struct NR_CellGroupConfig__rlc_BearerToReleaseList *rlc_torelease_list); - void nr_rrc_mac_config_req_cg(module_id_t module_id, int cc_idP, NR_CellGroupConfig_t *cell_group_config); diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index 52bc463d18..781b58d852 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -1087,8 +1087,9 @@ void nr_ue_ul_scheduler(nr_uplink_indication_t *ul_info) int lcid = lc_bearer->lcids_ordered; NR_LogicalChannelConfig_t *lcconfig = mac->logicalChannelConfig[lcid - 1]; NR_LC_SCHEDULING_INFO *sched_lc = &mac->scheduling_info.lc_sched_info[lcid - 1]; - int32_t bucketSize_max = - sched_lc->bucket_size; // max amount of data that can be buffered/accumulated in a logical channel buffer + // max amount of data that can be buffered/accumulated in a logical channel buffer + int32_t bucketSize_max = sched_lc->bucket_size; + AssertFatal(bucketSize_max >= 0, "negative bucketSize_max %d, will never schedule UE: lcid %d\n",bucketSize_max, lcid); /* measure Bj diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c index 635ffe1099..cdb8faf39e 100644 --- a/openair2/RRC/NR_UE/rrc_UE.c +++ b/openair2/RRC/NR_UE/rrc_UE.c @@ -216,8 +216,10 @@ static void nr_rrc_ue_process_rrcReconfiguration(NR_UE_RRC_INST_t *rrc, nr_rrc_cellgroup_configuration(rrcNB, rrc, cellGroupConfig); - if (!get_softmodem_params()->sa) - nr_rrc_mac_config_req_cg(0, 0, cellGroupConfig); + AssertFatal(!get_softmodem_params()->sa, "secondaryCellGroup only used in NSA for now\n"); + nr_rrc_mac_config_req_cg(rrc->ue_id, 0, cellGroupConfig); + + asn1cFreeStruc(asn_DEF_NR_CellGroupConfig, cellGroupConfig); } if (ie->measConfig != NULL) { LOG_I(NR_RRC, "Measurement Configuration is present\n"); @@ -275,14 +277,12 @@ void process_nsa_message(NR_UE_RRC_INST_t *rrc, nsa_message_t nsa_message_type, SEQUENCE_free( &asn_DEF_NR_RadioBearerConfig, RadioBearerConfig, 1 ); return; } - if (get_softmodem_params()->nsa) { - LOG_D(NR_RRC, "Calling nr_rrc_ue_process_RadioBearerConfig() at %d with: e_rab_id = %ld, drbID = %ld, cipher_algo = %ld, key = %ld \n", - __LINE__, RadioBearerConfig->drb_ToAddModList->list.array[0]->cnAssociation->choice.eps_BearerIdentity, - RadioBearerConfig->drb_ToAddModList->list.array[0]->drb_Identity, - RadioBearerConfig->securityConfig->securityAlgorithmConfig->cipheringAlgorithm, - *RadioBearerConfig->securityConfig->keyToUse); - nr_rrc_ue_process_RadioBearerConfig(rrc, rrc->perNB + 0, RadioBearerConfig); - } + LOG_D(NR_RRC, "Calling nr_rrc_ue_process_RadioBearerConfig()with: e_rab_id = %ld, drbID = %ld, cipher_algo = %ld, key = %ld \n", + RadioBearerConfig->drb_ToAddModList->list.array[0]->cnAssociation->choice.eps_BearerIdentity, + RadioBearerConfig->drb_ToAddModList->list.array[0]->drb_Identity, + RadioBearerConfig->securityConfig->securityAlgorithmConfig->cipheringAlgorithm, + *RadioBearerConfig->securityConfig->keyToUse); + nr_rrc_ue_process_RadioBearerConfig(rrc, rrc->perNB + 0, RadioBearerConfig); if (LOG_DEBUGFLAG(DEBUG_ASN1)) xer_fprint(stdout, &asn_DEF_NR_RadioBearerConfig, (const void *)RadioBearerConfig); ASN_STRUCT_FREE(asn_DEF_NR_RadioBearerConfig, RadioBearerConfig); @@ -747,9 +747,6 @@ static void nr_rrc_manage_rlc_bearers(const NR_UE_RRC_INST_t *rrc, } } } - nr_rrc_mac_config_req_ue_logicalChannelBearer(rrc->ue_id, - cellGroupConfig->rlc_BearerToAddModList, - cellGroupConfig->rlc_BearerToReleaseList); } void nr_rrc_cellgroup_configuration(rrcPerNB_t *rrcNB, NR_UE_RRC_INST_t *rrc, NR_CellGroupConfig_t *cellGroupConfig) @@ -795,9 +792,7 @@ void nr_rrc_cellgroup_configuration(rrcPerNB_t *rrcNB, NR_UE_RRC_INST_t *rrc, NR } } - // TODO verify why we need this limitation - if (get_softmodem_params()->sa || get_softmodem_params()->nsa) - nr_rrc_manage_rlc_bearers(rrc, cellGroupConfig, rrcNB); + nr_rrc_manage_rlc_bearers(rrc, cellGroupConfig, rrcNB); AssertFatal(cellGroupConfig->sCellToReleaseList == NULL, "Secondary serving cell release not implemented\n"); @@ -828,6 +823,8 @@ static void nr_rrc_ue_process_masterCellGroup(NR_UE_RRC_INST_t *rrc, LOG_D(RRC,"Sending CellGroupConfig to MAC\n"); nr_rrc_mac_config_req_cg(rrc->ue_id, 0, cellGroupConfig); + + asn1cFreeStruc(asn_DEF_NR_CellGroupConfig, cellGroupConfig); } static void rrc_ue_generate_RRCSetupComplete(const NR_UE_RRC_INST_t *rrc, const uint8_t Transaction_id)