Commit 8b0ad24d authored by Robert Schmidt's avatar Robert Schmidt

Merge remote-tracking branch 'origin/f1ap-minor-fixes' into integration_2023_w10b

parents a6bd14c2 742800b8
...@@ -213,7 +213,7 @@ security = { ...@@ -213,7 +213,7 @@ security = {
rlc_log_level ="debug"; rlc_log_level ="debug";
pdcp_log_level ="info"; pdcp_log_level ="info";
rrc_log_level ="info"; rrc_log_level ="info";
f1ap_log_level ="debug"; f1ap_log_level ="info";
ngap_log_level ="debug"; ngap_log_level ="debug";
}; };
...@@ -233,7 +233,7 @@ serveraddr = "server"; ...@@ -233,7 +233,7 @@ serveraddr = "server";
rlc_log_level ="info"; rlc_log_level ="info";
pdcp_log_level ="info"; pdcp_log_level ="info";
rrc_log_level ="info"; rrc_log_level ="info";
f1ap_log_level ="debug"; f1ap_log_level ="info";
ngap_log_level ="debug"; ngap_log_level ="debug";
}; };
...@@ -274,5 +274,5 @@ security = { ...@@ -274,5 +274,5 @@ security = {
rlc_log_level ="info"; rlc_log_level ="info";
pdcp_log_level ="info"; pdcp_log_level ="info";
rrc_log_level ="info"; rrc_log_level ="info";
f1ap_log_level ="debug"; f1ap_log_level ="info";
}; };
...@@ -270,5 +270,5 @@ security = { ...@@ -270,5 +270,5 @@ security = {
rlc_log_level ="info"; rlc_log_level ="info";
pdcp_log_level ="info"; pdcp_log_level ="info";
rrc_log_level ="info"; rrc_log_level ="info";
f1ap_log_level ="debug"; f1ap_log_level ="info";
}; };
...@@ -222,7 +222,7 @@ security = { ...@@ -222,7 +222,7 @@ security = {
rlc_log_level ="debug"; rlc_log_level ="debug";
pdcp_log_level ="info"; pdcp_log_level ="info";
rrc_log_level ="info"; rrc_log_level ="info";
f1ap_log_level ="debug"; f1ap_log_level ="info";
ngap_log_level ="debug"; ngap_log_level ="debug";
}; };
...@@ -81,7 +81,7 @@ security = { ...@@ -81,7 +81,7 @@ security = {
rlc_log_level ="debug"; rlc_log_level ="debug";
pdcp_log_level ="info"; pdcp_log_level ="info";
rrc_log_level ="info"; rrc_log_level ="info";
f1ap_log_level ="debug"; f1ap_log_level ="info";
ngap_log_level ="debug"; ngap_log_level ="debug";
}; };
...@@ -233,6 +233,6 @@ log_config : ...@@ -233,6 +233,6 @@ log_config :
rlc_log_level = "info"; rlc_log_level = "info";
pdcp_log_level = "info"; pdcp_log_level = "info";
rrc_log_level = "info"; rrc_log_level = "info";
f1ap_log_level = "debug"; f1ap_log_level = "info";
ngap_log_level = "debug"; ngap_log_level = "debug";
}; };
...@@ -278,5 +278,5 @@ security = { ...@@ -278,5 +278,5 @@ security = {
rlc_log_level ="info"; rlc_log_level ="info";
pdcp_log_level ="info"; pdcp_log_level ="info";
rrc_log_level ="info"; rrc_log_level ="info";
f1ap_log_level ="debug"; f1ap_log_level ="info";
}; };
...@@ -276,5 +276,5 @@ security = { ...@@ -276,5 +276,5 @@ security = {
rlc_log_level ="info"; rlc_log_level ="info";
pdcp_log_level ="info"; pdcp_log_level ="info";
rrc_log_level ="info"; rrc_log_level ="info";
f1ap_log_level ="debug"; f1ap_log_level ="info";
}; };
...@@ -277,5 +277,5 @@ security = { ...@@ -277,5 +277,5 @@ security = {
rlc_log_level ="info"; rlc_log_level ="info";
pdcp_log_level ="info"; pdcp_log_level ="info";
rrc_log_level ="info"; rrc_log_level ="info";
f1ap_log_level ="debug"; f1ap_log_level ="info";
}; };
...@@ -280,5 +280,5 @@ security = { ...@@ -280,5 +280,5 @@ security = {
rlc_log_level ="info"; rlc_log_level ="info";
pdcp_log_level ="info"; pdcp_log_level ="info";
rrc_log_level ="info"; rrc_log_level ="info";
f1ap_log_level ="debug"; f1ap_log_level ="info";
}; };
...@@ -279,5 +279,5 @@ security = { ...@@ -279,5 +279,5 @@ security = {
rlc_log_level ="info"; rlc_log_level ="info";
pdcp_log_level ="info"; pdcp_log_level ="info";
rrc_log_level ="info"; rrc_log_level ="info";
f1ap_log_level ="debug"; f1ap_log_level ="info";
}; };
...@@ -280,5 +280,5 @@ log_config : ...@@ -280,5 +280,5 @@ log_config :
pdcp_log_level ="info"; pdcp_log_level ="info";
rrc_log_level ="info"; rrc_log_level ="info";
ngap_log_level ="debug"; ngap_log_level ="debug";
f1ap_log_level ="debug"; f1ap_log_level ="info";
}; };
...@@ -331,5 +331,5 @@ log_config : ...@@ -331,5 +331,5 @@ log_config :
pdcp_log_level ="info"; pdcp_log_level ="info";
rrc_log_level ="info"; rrc_log_level ="info";
ngap_log_level ="debug"; ngap_log_level ="debug";
f1ap_log_level ="debug"; f1ap_log_level ="info";
}; };
...@@ -262,6 +262,6 @@ log_config : ...@@ -262,6 +262,6 @@ log_config :
pdcp_log_level ="info"; pdcp_log_level ="info";
rrc_log_level ="info"; rrc_log_level ="info";
ngap_log_level ="debug"; ngap_log_level ="debug";
f1ap_log_level ="debug"; f1ap_log_level ="info";
}; };
...@@ -720,11 +720,11 @@ int main(int argc, char **argv) ...@@ -720,11 +720,11 @@ int main(int argc, char **argv)
gNB->if_inst->NR_PHY_config_req = nr_phy_config_request; gNB->if_inst->NR_PHY_config_req = nr_phy_config_request;
// common configuration // common configuration
rrc_mac_config_req_gNB(0, pdsch_AntennaPorts, n_tx, 0, 6, scc, NULL, NULL, 0, 0, NULL); nr_mac_config_scc(RC.nrmac[0], pdsch_AntennaPorts, n_tx, 0, 6, scc);
// UE dedicated configuration // UE dedicated configuration
rrc_mac_config_req_gNB(0, pdsch_AntennaPorts, n_tx, 0, 6, scc, NULL, NULL, 1, secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity,secondaryCellGroup); nr_mac_add_test_ue(RC.nrmac[0], secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity, secondaryCellGroup);
// reset preprocessor to the one of DLSIM after it has been set during // reset preprocessor to the one of DLSIM after it has been set during
// rrc_mac_config_req_gNB // nr_mac_config_scc()
gNB_mac->pre_processor_dl = nr_dlsim_preprocessor; gNB_mac->pre_processor_dl = nr_dlsim_preprocessor;
phy_init_nr_gNB(gNB); phy_init_nr_gNB(gNB);
N_RB_DL = gNB->frame_parms.N_RB_DL; N_RB_DL = gNB->frame_parms.N_RB_DL;
...@@ -736,7 +736,7 @@ int main(int argc, char **argv) ...@@ -736,7 +736,7 @@ int main(int argc, char **argv)
// nr_phy_config_request_sim(gNB,N_RB_DL,N_RB_DL,mu,Nid_cell,SSB_positions); // nr_phy_config_request_sim(gNB,N_RB_DL,N_RB_DL,mu,Nid_cell,SSB_positions);
// call MAC to configure common parameters // call MAC to configure common parameters
/* rrc_mac_config_req_gNB() has created one user, so set the scheduling /* nr_mac_add_test_ue() has created one user, so set the scheduling
* parameters from command line in global variables that will be picked up by * parameters from command line in global variables that will be picked up by
* scheduling preprocessor */ * scheduling preprocessor */
if (g_mcsIndex < 0) g_mcsIndex = 9; if (g_mcsIndex < 0) g_mcsIndex = 9;
......
...@@ -654,10 +654,10 @@ int main(int argc, char **argv) ...@@ -654,10 +654,10 @@ int main(int argc, char **argv)
gNB->if_inst->NR_PHY_config_req = nr_phy_config_request; gNB->if_inst->NR_PHY_config_req = nr_phy_config_request;
// common configuration // common configuration
rrc_mac_config_req_gNB(0, conf.pdsch_AntennaPorts, n_rx, 0, 6, scc, &rrc.carrier.mib, rrc.carrier.siblock1, 0, 0, NULL); nr_mac_config_scc(RC.nrmac[0], conf.pdsch_AntennaPorts, n_tx, 0, 6, scc);
nr_mac_config_mib(RC.nrmac[0], &rrc.carrier.mib);
// UE dedicated configuration // UE dedicated configuration
rrc_mac_config_req_gNB(0, conf.pdsch_AntennaPorts, n_rx, 0, 6, scc, &rrc.carrier.mib, rrc.carrier.siblock1, 1, nr_mac_add_test_ue(RC.nrmac[0], secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity, secondaryCellGroup);
secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity, secondaryCellGroup);
frame_parms->nb_antennas_tx = 1; frame_parms->nb_antennas_tx = 1;
frame_parms->nb_antennas_rx = n_rx; frame_parms->nb_antennas_rx = n_rx;
nfapi_nr_config_request_scf_t *cfg = &gNB->gNB_config; nfapi_nr_config_request_scf_t *cfg = &gNB->gNB_config;
......
...@@ -163,7 +163,7 @@ int CU_send_DL_RRC_MESSAGE_TRANSFER(instance_t instance, ...@@ -163,7 +163,7 @@ int CU_send_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
ie1->criticality = F1AP_Criticality_reject; ie1->criticality = F1AP_Criticality_reject;
ie1->value.present = F1AP_DLRRCMessageTransferIEs__value_PR_GNB_CU_UE_F1AP_ID; ie1->value.present = F1AP_DLRRCMessageTransferIEs__value_PR_GNB_CU_UE_F1AP_ID;
ie1->value.choice.GNB_CU_UE_F1AP_ID = f1ap_get_cu_ue_f1ap_id(CUtype, instance, f1ap_dl_rrc->rnti); ie1->value.choice.GNB_CU_UE_F1AP_ID = f1ap_get_cu_ue_f1ap_id(CUtype, instance, f1ap_dl_rrc->rnti);
LOG_I(F1AP, "Setting GNB_CU_UE_F1AP_ID %llu associated with UE RNTI %x (instance %ld)\n", LOG_D(F1AP, "Setting GNB_CU_UE_F1AP_ID %llu associated with UE RNTI %x (instance %ld)\n",
(unsigned long long int)ie1->value.choice.GNB_CU_UE_F1AP_ID, f1ap_dl_rrc->rnti, instance); (unsigned long long int)ie1->value.choice.GNB_CU_UE_F1AP_ID, f1ap_dl_rrc->rnti, instance);
/* mandatory */ /* mandatory */
/* c2. GNB_DU_UE_F1AP_ID */ /* c2. GNB_DU_UE_F1AP_ID */
...@@ -172,7 +172,7 @@ int CU_send_DL_RRC_MESSAGE_TRANSFER(instance_t instance, ...@@ -172,7 +172,7 @@ int CU_send_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
ie2->criticality = F1AP_Criticality_reject; ie2->criticality = F1AP_Criticality_reject;
ie2->value.present = F1AP_DLRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID; ie2->value.present = F1AP_DLRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID;
ie2->value.choice.GNB_DU_UE_F1AP_ID = f1ap_get_du_ue_f1ap_id(CUtype, instance, f1ap_dl_rrc->rnti); ie2->value.choice.GNB_DU_UE_F1AP_ID = f1ap_get_du_ue_f1ap_id(CUtype, instance, f1ap_dl_rrc->rnti);
LOG_I(F1AP, "GNB_DU_UE_F1AP_ID %llu associated with UE RNTI %x \n", (unsigned long long int)ie2->value.choice.GNB_DU_UE_F1AP_ID, f1ap_dl_rrc->rnti); LOG_D(F1AP, "GNB_DU_UE_F1AP_ID %llu associated with UE RNTI %x \n", (unsigned long long int)ie2->value.choice.GNB_DU_UE_F1AP_ID, f1ap_dl_rrc->rnti);
/* optional */ /* optional */
/* c3. oldgNB_DU_UE_F1AP_ID */ /* c3. oldgNB_DU_UE_F1AP_ID */
/* if (f1ap_dl_rrc->old_gNB_DU_ue_id != 0xFFFFFFFF) { /* if (f1ap_dl_rrc->old_gNB_DU_ue_id != 0xFFFFFFFF) {
...@@ -300,8 +300,7 @@ int CU_handle_UL_RRC_MESSAGE_TRANSFER(instance_t instance, ...@@ -300,8 +300,7 @@ int CU_handle_UL_RRC_MESSAGE_TRANSFER(instance_t instance,
ctxt.eNB_index = 0; ctxt.eNB_index = 0;
mem_block_t *mb = get_free_mem_block(ie->value.choice.RRCContainer.size,__func__); mem_block_t *mb = get_free_mem_block(ie->value.choice.RRCContainer.size,__func__);
memcpy((void *)mb->data,(void *)ie->value.choice.RRCContainer.buf,ie->value.choice.RRCContainer.size); memcpy((void *)mb->data,(void *)ie->value.choice.RRCContainer.buf,ie->value.choice.RRCContainer.size);
LOG_I(F1AP, "Calling pdcp_data_ind for UE RNTI %lx srb_id %lu with size %ld (DCCH) \n", ctxt.rntiMaybeUEid, srb_id, ie->value.choice.RRCContainer.size); LOG_D(F1AP, "Calling pdcp_data_ind for UE RNTI %lx srb_id %lu with size %ld (DCCH) \n", ctxt.rntiMaybeUEid, srb_id, ie->value.choice.RRCContainer.size);
//LOG_I(F1AP, "%s() RRCContainer size %lu: ", __func__, ie->value.choice.RRCContainer.size);
//for (int i = 0; i < ie->value.choice.RRCContainer.size; i++) //for (int i = 0; i < ie->value.choice.RRCContainer.size; i++)
// printf("%02x ", mb->data[i]); // printf("%02x ", mb->data[i]);
//printf("\n"); //printf("\n");
......
...@@ -129,7 +129,7 @@ void *F1AP_CU_task(void *arg) { ...@@ -129,7 +129,7 @@ void *F1AP_CU_task(void *arg) {
while (1) { while (1) {
itti_receive_msg(TASK_CU_F1, &received_msg); itti_receive_msg(TASK_CU_F1, &received_msg);
LOG_I(F1AP, "CU Task Received %s for instance %ld\n", LOG_D(F1AP, "CU Task Received %s for instance %ld\n",
ITTI_MSG_NAME(received_msg), ITTI_MSG_DESTINATION_INSTANCE(received_msg)); ITTI_MSG_NAME(received_msg), ITTI_MSG_DESTINATION_INSTANCE(received_msg));
switch (ITTI_MSG_ID(received_msg)) { switch (ITTI_MSG_ID(received_msg)) {
case SCTP_NEW_ASSOCIATION_IND: case SCTP_NEW_ASSOCIATION_IND:
......
...@@ -44,47 +44,47 @@ static int f1ap_decode_initiating_message(F1AP_F1AP_PDU_t *pdu) { ...@@ -44,47 +44,47 @@ static int f1ap_decode_initiating_message(F1AP_F1AP_PDU_t *pdu) {
switch(pdu->choice.initiatingMessage->procedureCode) { switch(pdu->choice.initiatingMessage->procedureCode) {
case F1AP_ProcedureCode_id_F1Setup: case F1AP_ProcedureCode_id_F1Setup:
//res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_F1AP_F1AP_PDU, pdu); //res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_F1AP_F1AP_PDU, pdu);
LOG_I(F1AP, "%s(): F1AP_ProcedureCode_id_F1Setup\n", __func__); LOG_D(F1AP, "%s(): F1AP_ProcedureCode_id_F1Setup\n", __func__);
break; break;
case F1AP_ProcedureCode_id_gNBCUConfigurationUpdate: case F1AP_ProcedureCode_id_gNBCUConfigurationUpdate:
//res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_F1AP_F1AP_PDU, pdu); //res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_F1AP_F1AP_PDU, pdu);
LOG_I(F1AP, "%s(): F1AP_ProcedureCode_id_gNBCUConfigurationUpdate\n", __func__); LOG_D(F1AP, "%s(): F1AP_ProcedureCode_id_gNBCUConfigurationUpdate\n", __func__);
break; break;
case F1AP_ProcedureCode_id_InitialULRRCMessageTransfer: case F1AP_ProcedureCode_id_InitialULRRCMessageTransfer:
//res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_F1AP_F1AP_PDU, pdu); //res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_F1AP_F1AP_PDU, pdu);
LOG_I(F1AP, "%s(): F1AP_ProcedureCode_id_InitialULRRCMessageTransfer\n", __func__); LOG_D(F1AP, "%s(): F1AP_ProcedureCode_id_InitialULRRCMessageTransfer\n", __func__);
break; break;
case F1AP_ProcedureCode_id_DLRRCMessageTransfer: case F1AP_ProcedureCode_id_DLRRCMessageTransfer:
//res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_F1AP_F1AP_PDU, pdu); //res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_F1AP_F1AP_PDU, pdu);
LOG_I(F1AP, "%s(): F1AP_ProcedureCode_id_DLRRCMessageTransfer\n", __func__); LOG_D(F1AP, "%s(): F1AP_ProcedureCode_id_DLRRCMessageTransfer\n", __func__);
break; break;
case F1AP_ProcedureCode_id_ULRRCMessageTransfer: case F1AP_ProcedureCode_id_ULRRCMessageTransfer:
//res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_F1AP_F1AP_PDU, pdu); //res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_F1AP_F1AP_PDU, pdu);
LOG_I(F1AP, "%s(): F1AP_ProcedureCode_id_ULRRCMessageTransfer\n", __func__); LOG_D(F1AP, "%s(): F1AP_ProcedureCode_id_ULRRCMessageTransfer\n", __func__);
break; break;
case F1AP_ProcedureCode_id_UEContextRelease: case F1AP_ProcedureCode_id_UEContextRelease:
LOG_I(F1AP, "%s(): F1AP_ProcedureCode_id_UEContextRelease\n", __func__); LOG_D(F1AP, "%s(): F1AP_ProcedureCode_id_UEContextRelease\n", __func__);
break; break;
case F1AP_ProcedureCode_id_UEContextReleaseRequest: case F1AP_ProcedureCode_id_UEContextReleaseRequest:
LOG_I(F1AP, "%s(): F1AP_ProcedureCode_id_UEContextReleaseRequest\n", __func__); LOG_D(F1AP, "%s(): F1AP_ProcedureCode_id_UEContextReleaseRequest\n", __func__);
break; break;
case F1AP_ProcedureCode_id_UEContextSetup: case F1AP_ProcedureCode_id_UEContextSetup:
LOG_I(F1AP, "%s(): F1AP_ProcedureCode_id_UEContextSetup\n", __func__); LOG_D(F1AP, "%s(): F1AP_ProcedureCode_id_UEContextSetup\n", __func__);
break; break;
case F1AP_ProcedureCode_id_UEContextModification: case F1AP_ProcedureCode_id_UEContextModification:
LOG_I(F1AP, "%s(): F1AP_ProcedureCode_id_UEContextModification\n", __func__); LOG_D(F1AP, "%s(): F1AP_ProcedureCode_id_UEContextModification\n", __func__);
break; break;
case F1AP_ProcedureCode_id_Paging: case F1AP_ProcedureCode_id_Paging:
LOG_I(F1AP, "%s(): F1AP_ProcedureCode_id_Paging\n", __func__); LOG_D(F1AP, "%s(): F1AP_ProcedureCode_id_Paging\n", __func__);
break; break;
// case F1AP_ProcedureCode_id_InitialContextSetup: // case F1AP_ProcedureCode_id_InitialContextSetup:
...@@ -116,23 +116,23 @@ static int f1ap_decode_successful_outcome(F1AP_F1AP_PDU_t *pdu) { ...@@ -116,23 +116,23 @@ static int f1ap_decode_successful_outcome(F1AP_F1AP_PDU_t *pdu) {
switch(pdu->choice.successfulOutcome->procedureCode) { switch(pdu->choice.successfulOutcome->procedureCode) {
case F1AP_ProcedureCode_id_F1Setup: case F1AP_ProcedureCode_id_F1Setup:
LOG_I(F1AP, "%s(): F1AP_ProcedureCode_id_F1Setup\n", __func__); LOG_D(F1AP, "%s(): F1AP_ProcedureCode_id_F1Setup\n", __func__);
break; break;
case F1AP_ProcedureCode_id_gNBCUConfigurationUpdate: case F1AP_ProcedureCode_id_gNBCUConfigurationUpdate:
LOG_I(F1AP, "%s(): F1AP_ProcedureCode_id_gNBCUConfigurationUpdate\n", __func__); LOG_D(F1AP, "%s(): F1AP_ProcedureCode_id_gNBCUConfigurationUpdate\n", __func__);
break; break;
case F1AP_ProcedureCode_id_UEContextRelease: case F1AP_ProcedureCode_id_UEContextRelease:
LOG_I(F1AP, "%s(): F1AP_ProcedureCode_id_UEContextRelease\n", __func__); LOG_D(F1AP, "%s(): F1AP_ProcedureCode_id_UEContextRelease\n", __func__);
break; break;
case F1AP_ProcedureCode_id_UEContextSetup: case F1AP_ProcedureCode_id_UEContextSetup:
LOG_I(F1AP, "%s(): F1AP_ProcedureCode_id_UEContextSetup\n", __func__); LOG_D(F1AP, "%s(): F1AP_ProcedureCode_id_UEContextSetup\n", __func__);
break; break;
case F1AP_ProcedureCode_id_UEContextModification: case F1AP_ProcedureCode_id_UEContextModification:
LOG_I(F1AP, "%s(): F1AP_ProcedureCode_id_UEContextModification\n", __func__); LOG_D(F1AP, "%s(): F1AP_ProcedureCode_id_UEContextModification\n", __func__);
break; break;
default: default:
...@@ -149,7 +149,7 @@ static int f1ap_decode_unsuccessful_outcome(F1AP_F1AP_PDU_t *pdu) { ...@@ -149,7 +149,7 @@ static int f1ap_decode_unsuccessful_outcome(F1AP_F1AP_PDU_t *pdu) {
switch(pdu->choice.unsuccessfulOutcome->procedureCode) { switch(pdu->choice.unsuccessfulOutcome->procedureCode) {
case F1AP_ProcedureCode_id_F1Setup: case F1AP_ProcedureCode_id_F1Setup:
LOG_I(F1AP, "%s(): F1AP_ProcedureCode_id_F1Setup\n", __func__); LOG_D(F1AP, "%s(): F1AP_ProcedureCode_id_F1Setup\n", __func__);
break; break;
default: default:
...@@ -181,8 +181,6 @@ int f1ap_decode_pdu(F1AP_F1AP_PDU_t *pdu, const uint8_t *const buffer, uint32_t ...@@ -181,8 +181,6 @@ int f1ap_decode_pdu(F1AP_F1AP_PDU_t *pdu, const uint8_t *const buffer, uint32_t
LOG_E(F1AP, "----------------- ASN1 DECODER PRINT END ----------------- \n"); LOG_E(F1AP, "----------------- ASN1 DECODER PRINT END ----------------- \n");
} }
//LOG_I(F1AP, "f1ap_decode_pdu.dec_ret.code = %d\n", dec_ret.code);
if (dec_ret.code != RC_OK) { if (dec_ret.code != RC_OK) {
AssertFatal(1==0,"Failed to decode pdu\n"); AssertFatal(1==0,"Failed to decode pdu\n");
return -1; return -1;
......
...@@ -169,9 +169,8 @@ int DU_send_UL_RRC_MESSAGE_TRANSFER(instance_t instance, ...@@ -169,9 +169,8 @@ int DU_send_UL_RRC_MESSAGE_TRANSFER(instance_t instance,
F1AP_ULRRCMessageTransferIEs_t *ie; F1AP_ULRRCMessageTransferIEs_t *ie;
uint8_t *buffer = NULL; uint8_t *buffer = NULL;
uint32_t len; uint32_t len;
LOG_I(F1AP, "[DU %ld] %s: size %d UE RNTI %x in SRB %d\n", LOG_D(F1AP, "[DU %ld] %s: size %d UE RNTI %x in SRB %d\n",
instance, __func__, msg->rrc_container_length, rnti, msg->srb_id); instance, __func__, msg->rrc_container_length, rnti, msg->srb_id);
//LOG_I(F1AP, "%s() RRCContainer size %d: ", __func__, msg->rrc_container_length);
//for (int i = 0;i < msg->rrc_container_length; i++) //for (int i = 0;i < msg->rrc_container_length; i++)
// printf("%02x ", msg->rrc_container[i]); // printf("%02x ", msg->rrc_container[i]);
//printf("\n"); //printf("\n");
...@@ -232,9 +231,6 @@ int DU_send_UL_RRC_MESSAGE_TRANSFER(instance_t instance, ...@@ -232,9 +231,6 @@ int DU_send_UL_RRC_MESSAGE_TRANSFER(instance_t instance,
if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0))
LOG_E(F1AP, " Failed to decode UL-DCCH (%zu bytes)\n",dec_rval.consumed); LOG_E(F1AP, " Failed to decode UL-DCCH (%zu bytes)\n",dec_rval.consumed);
else
LOG_I(F1AP, "Received message: present %d and c1 present %d\n",
ul_dcch_msg->message.present, ul_dcch_msg->message.choice.c1.present);
if (ul_dcch_msg->message.present == LTE_UL_DCCH_MessageType_PR_c1) { if (ul_dcch_msg->message.present == LTE_UL_DCCH_MessageType_PR_c1) {
switch (ul_dcch_msg->message.choice.c1.present) { switch (ul_dcch_msg->message.choice.c1.present) {
...@@ -248,7 +244,7 @@ int DU_send_UL_RRC_MESSAGE_TRANSFER(instance_t instance, ...@@ -248,7 +244,7 @@ int DU_send_UL_RRC_MESSAGE_TRANSFER(instance_t instance,
break; break;
case LTE_UL_DCCH_MessageType__c1_PR_rrcConnectionReconfigurationComplete: case LTE_UL_DCCH_MessageType__c1_PR_rrcConnectionReconfigurationComplete:
LOG_I(F1AP, "[MSG] RRC UL rrcConnectionReconfigurationComplete\n"); LOG_D(F1AP, "[MSG] RRC UL rrcConnectionReconfigurationComplete\n");
/* CDRX: activated when RRC Connection Reconfiguration Complete is received */ /* CDRX: activated when RRC Connection Reconfiguration Complete is received */
int UE_id_mac = find_UE_id(instance, rnti); int UE_id_mac = find_UE_id(instance, rnti);
...@@ -262,7 +258,7 @@ int DU_send_UL_RRC_MESSAGE_TRANSFER(instance_t instance, ...@@ -262,7 +258,7 @@ int DU_send_UL_RRC_MESSAGE_TRANSFER(instance_t instance,
if (UE_scheduling_control->cdrx_waiting_ack == true) { if (UE_scheduling_control->cdrx_waiting_ack == true) {
UE_scheduling_control->cdrx_waiting_ack = false; UE_scheduling_control->cdrx_waiting_ack = false;
UE_scheduling_control->cdrx_configured = true; // Set to TRUE when RRC Connection Reconfiguration Complete is received UE_scheduling_control->cdrx_configured = true; // Set to TRUE when RRC Connection Reconfiguration Complete is received
LOG_I(F1AP, "CDRX configuration activated after RRC Connection Reconfiguration Complete reception\n"); LOG_D(F1AP, "CDRX configuration activated after RRC Connection Reconfiguration Complete reception\n");
} }
/* End of CDRX processing */ /* End of CDRX processing */
...@@ -272,33 +268,33 @@ int DU_send_UL_RRC_MESSAGE_TRANSFER(instance_t instance, ...@@ -272,33 +268,33 @@ int DU_send_UL_RRC_MESSAGE_TRANSFER(instance_t instance,
break; break;
case LTE_UL_DCCH_MessageType__c1_PR_rrcConnectionSetupComplete: case LTE_UL_DCCH_MessageType__c1_PR_rrcConnectionSetupComplete:
LOG_I(F1AP, "[MSG] RRC UL rrcConnectionSetupComplete \n"); LOG_D(F1AP, "[MSG] RRC UL rrcConnectionSetupComplete \n");
if(!ue_context_p) { if(!ue_context_p) {
LOG_E(F1AP, "Did not find the UE context associated with UE RNTOI %x, ue_context_p is NULL\n", rnti); LOG_E(F1AP, "Did not find the UE context associated with UE RNTOI %x, ue_context_p is NULL\n", rnti);
} else { } else {
LOG_I(F1AP, "Processing RRCConnectionSetupComplete UE %x\n", rnti); LOG_D(F1AP, "Processing RRCConnectionSetupComplete UE %x\n", rnti);
ue_context_p->ue_context.StatusRrc = RRC_CONNECTED; ue_context_p->ue_context.StatusRrc = RRC_CONNECTED;
} }
break; break;
case LTE_UL_DCCH_MessageType__c1_PR_securityModeComplete: case LTE_UL_DCCH_MessageType__c1_PR_securityModeComplete:
LOG_I(F1AP, "[MSG] RRC securityModeComplete \n"); LOG_D(F1AP, "[MSG] RRC securityModeComplete \n");
break; break;
case LTE_UL_DCCH_MessageType__c1_PR_securityModeFailure: case LTE_UL_DCCH_MessageType__c1_PR_securityModeFailure:
break; break;
case LTE_UL_DCCH_MessageType__c1_PR_ueCapabilityInformation: case LTE_UL_DCCH_MessageType__c1_PR_ueCapabilityInformation:
LOG_I(F1AP, "[MSG] RRC ueCapabilityInformation \n"); LOG_D(F1AP, "[MSG] RRC ueCapabilityInformation \n");
break; break;
case LTE_UL_DCCH_MessageType__c1_PR_ulHandoverPreparationTransfer: case LTE_UL_DCCH_MessageType__c1_PR_ulHandoverPreparationTransfer:
break; break;
case LTE_UL_DCCH_MessageType__c1_PR_ulInformationTransfer: case LTE_UL_DCCH_MessageType__c1_PR_ulInformationTransfer:
LOG_I(F1AP,"[MSG] RRC UL Information Transfer \n"); LOG_D(F1AP,"[MSG] RRC UL Information Transfer \n");
break; break;
case LTE_UL_DCCH_MessageType__c1_PR_counterCheckResponse: case LTE_UL_DCCH_MessageType__c1_PR_counterCheckResponse:
...@@ -428,9 +424,8 @@ int DU_send_UL_NR_RRC_MESSAGE_TRANSFER(instance_t instance, ...@@ -428,9 +424,8 @@ int DU_send_UL_NR_RRC_MESSAGE_TRANSFER(instance_t instance,
F1AP_ULRRCMessageTransfer_t *out; F1AP_ULRRCMessageTransfer_t *out;
uint8_t *buffer = NULL; uint8_t *buffer = NULL;
uint32_t len; uint32_t len;
LOG_I(F1AP, "[DU %ld] %s: size %d UE RNTI %x in SRB %d\n", LOG_D(F1AP, "[DU %ld] %s: size %d UE RNTI %x in SRB %d\n",
instance, __func__, msg->rrc_container_length, rnti, msg->srb_id); instance, __func__, msg->rrc_container_length, rnti, msg->srb_id);
//LOG_I(F1AP, "%s() RRCContainer size %d: ", __func__, msg->rrc_container_length);
//for (int i = 0;i < msg->rrc_container_length; i++) //for (int i = 0;i < msg->rrc_container_length; i++)
// printf("%02x ", msg->rrc_container[i]); // printf("%02x ", msg->rrc_container[i]);
//printf("\n"); //printf("\n");
......
...@@ -107,7 +107,7 @@ void *F1AP_DU_task(void *arg) { ...@@ -107,7 +107,7 @@ void *F1AP_DU_task(void *arg) {
MessageDef *msg = NULL; MessageDef *msg = NULL;
itti_receive_msg(TASK_DU_F1, &msg); itti_receive_msg(TASK_DU_F1, &msg);
instance_t myInstance=ITTI_MSG_DESTINATION_INSTANCE(msg); instance_t myInstance=ITTI_MSG_DESTINATION_INSTANCE(msg);
LOG_I(F1AP, "DU Task Received %s for instance %ld\n", LOG_D(F1AP, "DU Task Received %s for instance %ld\n",
ITTI_MSG_NAME(msg),myInstance); ITTI_MSG_NAME(msg),myInstance);
switch (ITTI_MSG_ID(msg)) { switch (ITTI_MSG_ID(msg)) {
case F1AP_SETUP_REQ: { case F1AP_SETUP_REQ: {
......
...@@ -110,7 +110,7 @@ int f1ap_handle_message(instance_t instance, uint32_t assoc_id, int32_t stream, ...@@ -110,7 +110,7 @@ int f1ap_handle_message(instance_t instance, uint32_t assoc_id, int32_t stream,
ret=-1; ret=-1;
} else { } else {
/* Calling the right handler */ /* Calling the right handler */
LOG_I(F1AP, "Calling handler with instance %ld\n",instance); LOG_D(F1AP, "Calling handler with instance %ld\n",instance);
ret = (*f1ap_messages_processing[pdu.choice.initiatingMessage->procedureCode][pdu.present - 1]) ret = (*f1ap_messages_processing[pdu.choice.initiatingMessage->procedureCode][pdu.present - 1])
(instance, assoc_id, stream, &pdu); (instance, assoc_id, stream, &pdu);
} }
......
...@@ -2084,24 +2084,6 @@ void du_extract_and_decode_SI(int inst, int si_ind, uint8_t *si_container, int s ...@@ -2084,24 +2084,6 @@ void du_extract_and_decode_SI(int inst, int si_ind, uint8_t *si_container, int s
} else AssertFatal(1 == 0, "No SI messages\n"); } else AssertFatal(1 == 0, "No SI messages\n");
} }
void configure_gnb_du_mac(int inst) {
gNB_RRC_INST *rrc = RC.nrrrc[inst];
// LOG_I(GNB_APP,"Configuring MAC/L1 %d, carrier->sib2 %p\n", inst, &carrier->sib2->radioResourceConfigCommon);
LOG_I(GNB_APP,"Configuring gNB DU MAC/L1 %d \n", inst);
rrc_mac_config_req_gNB(rrc->module_id,
rrc->configuration.pdsch_AntennaPorts,
rrc->configuration.pusch_AntennaPorts,
rrc->configuration.sib1_tda,
rrc->configuration.minRXTXTIME,
rrc->configuration.scc,
NULL,
NULL,
0,
0, // rnti
NULL);
}
int gNB_app_handle_f1ap_setup_resp(f1ap_setup_resp_t *resp) { int gNB_app_handle_f1ap_setup_resp(f1ap_setup_resp_t *resp) {
int i, j, si_ind; int i, j, si_ind;
int ret=0; int ret=0;
...@@ -2126,9 +2108,6 @@ int gNB_app_handle_f1ap_setup_resp(f1ap_setup_resp_t *resp) { ...@@ -2126,9 +2108,6 @@ int gNB_app_handle_f1ap_setup_resp(f1ap_setup_resp_t *resp) {
resp->cells_to_activate[j].SI_container[si_ind], resp->cells_to_activate[j].SI_container[si_ind],
resp->cells_to_activate[j].SI_container_length[si_ind]); resp->cells_to_activate[j].SI_container_length[si_ind]);
} }
// perform MAC/L1 common configuration
configure_gnb_du_mac(i);
ret++; ret++;
} else { } else {
LOG_E(GNB_APP, "F1 Setup Response not matching\n"); LOG_E(GNB_APP, "F1 Setup Response not matching\n");
...@@ -2161,9 +2140,6 @@ int gNB_app_handle_f1ap_gnb_cu_configuration_update(f1ap_gnb_cu_configuration_up ...@@ -2161,9 +2140,6 @@ int gNB_app_handle_f1ap_gnb_cu_configuration_update(f1ap_gnb_cu_configuration_up
gnb_cu_cfg_update->cells_to_activate[j].SI_container[si_ind], gnb_cu_cfg_update->cells_to_activate[j].SI_container[si_ind],
gnb_cu_cfg_update->cells_to_activate[j].SI_container_length[si_ind]); gnb_cu_cfg_update->cells_to_activate[j].SI_container_length[si_ind]);
} }
// perform MAC/L1 common configuration
configure_gnb_du_mac(i);
ret++; ret++;
} else { } else {
LOG_E(GNB_APP, "GNB_CU_CONFIGURATION_UPDATE not matching\n"); LOG_E(GNB_APP, "GNB_CU_CONFIGURATION_UPDATE not matching\n");
......
...@@ -160,10 +160,10 @@ void process_CellGroup(NR_CellGroupConfig_t *CellGroup, NR_UE_sched_ctrl_t *sche ...@@ -160,10 +160,10 @@ void process_CellGroup(NR_CellGroupConfig_t *CellGroup, NR_UE_sched_ctrl_t *sche
} }
void config_common(int Mod_idP, int pdsch_AntennaPorts, int pusch_AntennaPorts, NR_ServingCellConfigCommon_t *scc) { void config_common(gNB_MAC_INST *nrmac, int pdsch_AntennaPorts, int pusch_AntennaPorts, NR_ServingCellConfigCommon_t *scc) {
nfapi_nr_config_request_scf_t *cfg = &RC.nrmac[Mod_idP]->config[0]; nfapi_nr_config_request_scf_t *cfg = &nrmac->config[0];
RC.nrmac[Mod_idP]->common_channels[0].ServingCellConfigCommon = scc; nrmac->common_channels[0].ServingCellConfigCommon = scc;
// Carrier configuration // Carrier configuration
...@@ -233,7 +233,7 @@ void config_common(int Mod_idP, int pdsch_AntennaPorts, int pusch_AntennaPorts, ...@@ -233,7 +233,7 @@ void config_common(int Mod_idP, int pdsch_AntennaPorts, int pusch_AntennaPorts,
frequency_range_t frequency_range = band<100?FR1:FR2; frequency_range_t frequency_range = band<100?FR1:FR2;
frame_type_t frame_type = get_frame_type(*scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0], *scc->ssbSubcarrierSpacing); frame_type_t frame_type = get_frame_type(*scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0], *scc->ssbSubcarrierSpacing);
RC.nrmac[Mod_idP]->common_channels[0].frame_type = frame_type; nrmac->common_channels[0].frame_type = frame_type;
// Cell configuration // Cell configuration
cfg->cell_config.phy_cell_id.value = *scc->physCellId; cfg->cell_config.phy_cell_id.value = *scc->physCellId;
...@@ -351,8 +351,8 @@ void config_common(int Mod_idP, int pdsch_AntennaPorts, int pusch_AntennaPorts, ...@@ -351,8 +351,8 @@ void config_common(int Mod_idP, int pdsch_AntennaPorts, int pusch_AntennaPorts,
cfg->ssb_table.ssb_subcarrier_offset.tl.tag = NFAPI_NR_CONFIG_SSB_SUBCARRIER_OFFSET_TAG; cfg->ssb_table.ssb_subcarrier_offset.tl.tag = NFAPI_NR_CONFIG_SSB_SUBCARRIER_OFFSET_TAG;
cfg->num_tlv++; cfg->num_tlv++;
RC.nrmac[Mod_idP]->ssb_SubcarrierOffset = cfg->ssb_table.ssb_subcarrier_offset.value; nrmac->ssb_SubcarrierOffset = cfg->ssb_table.ssb_subcarrier_offset.value;
RC.nrmac[Mod_idP]->ssb_OffsetPointA = cfg->ssb_table.ssb_offset_point_a.value; nrmac->ssb_OffsetPointA = cfg->ssb_table.ssb_offset_point_a.value;
switch (scc->ssb_PositionsInBurst->present) { switch (scc->ssb_PositionsInBurst->present) {
case 1 : case 1 :
...@@ -434,7 +434,7 @@ void config_common(int Mod_idP, int pdsch_AntennaPorts, int pusch_AntennaPorts, ...@@ -434,7 +434,7 @@ void config_common(int Mod_idP, int pdsch_AntennaPorts, int pusch_AntennaPorts,
LOG_E(NR_MAC,"TDD configuration can not be done\n"); LOG_E(NR_MAC,"TDD configuration can not be done\n");
else { else {
LOG_I(NR_MAC,"TDD has been properly configurated\n"); LOG_I(NR_MAC,"TDD has been properly configurated\n");
RC.nrmac[Mod_idP]->tdd_beam_association = (int16_t *)malloc16(periods_per_frame*sizeof(int16_t)); nrmac->tdd_beam_association = (int16_t *)malloc16(periods_per_frame*sizeof(int16_t));
} }
} }
...@@ -459,55 +459,47 @@ int nr_mac_enable_ue_rrc_processing_timer(module_id_t Mod_idP, rnti_t rnti, NR_S ...@@ -459,55 +459,47 @@ int nr_mac_enable_ue_rrc_processing_timer(module_id_t Mod_idP, rnti_t rnti, NR_S
return 0; return 0;
} }
int rrc_mac_config_req_gNB(module_id_t Mod_idP, void nr_mac_config_scc(gNB_MAC_INST *nrmac,
rrc_pdsch_AntennaPorts_t pdsch_AntennaPorts, rrc_pdsch_AntennaPorts_t pdsch_AntennaPorts,
int pusch_AntennaPorts, int pusch_AntennaPorts,
int sib1_tda, int sib1_tda,
int minRXTXTIMEpdsch, int minRXTXTIMEpdsch,
NR_ServingCellConfigCommon_t *scc, NR_ServingCellConfigCommon_t *scc)
NR_BCCH_BCH_Message_t *mib, {
NR_BCCH_DL_SCH_Message_t *sib1, DevAssert(nrmac != NULL);
int add_ue, AssertFatal(nrmac->common_channels[0].ServingCellConfigCommon == NULL, "logic error: multiple configurations of SCC\n");
uint32_t rnti,
NR_CellGroupConfig_t *CellGroup) {
if (scc != NULL ) { DevAssert(scc != NULL);
AssertFatal((scc->ssb_PositionsInBurst->present > 0) && (scc->ssb_PositionsInBurst->present < 4), "SSB Bitmap type %d is not valid\n",scc->ssb_PositionsInBurst->present); AssertFatal(scc->ssb_PositionsInBurst->present > 0 && scc->ssb_PositionsInBurst->present < 4,
"SSB Bitmap type %d is not valid\n",
scc->ssb_PositionsInBurst->present);
int n = nr_slots_per_frame[*scc->ssbSubcarrierSpacing]; int n = nr_slots_per_frame[*scc->ssbSubcarrierSpacing];
if (*scc->ssbSubcarrierSpacing == 0) if (*scc->ssbSubcarrierSpacing == 0)
n <<= 1; // to have enough room for feedback possibly beyond the frame we need a larger array at 15kHz SCS n <<= 1; // to have enough room for feedback possibly beyond the frame we need a larger array at 15kHz SCS
RC.nrmac[Mod_idP]->common_channels[0].vrb_map_UL = calloc(n * MAX_BWP_SIZE, sizeof(uint16_t)); nrmac->common_channels[0].vrb_map_UL = calloc(n * MAX_BWP_SIZE, sizeof(uint16_t));
RC.nrmac[Mod_idP]->vrb_map_UL_size = n; nrmac->vrb_map_UL_size = n;
AssertFatal(RC.nrmac[Mod_idP]->common_channels[0].vrb_map_UL, AssertFatal(nrmac->common_channels[0].vrb_map_UL,
"could not allocate memory for RC.nrmac[]->common_channels[0].vrb_map_UL\n"); "could not allocate memory for RC.nrmac[]->common_channels[0].vrb_map_UL\n");
LOG_I(NR_MAC,"Configuring common parameters from NR ServingCellConfig\n"); LOG_I(NR_MAC, "Configuring common parameters from NR ServingCellConfig\n");
int num_pdsch_antenna_ports = pdsch_AntennaPorts.N1 * pdsch_AntennaPorts.N2 * pdsch_AntennaPorts.XP; int num_pdsch_antenna_ports = pdsch_AntennaPorts.N1 * pdsch_AntennaPorts.N2 * pdsch_AntennaPorts.XP;
RC.nrmac[Mod_idP]->xp_pdsch_antenna_ports = pdsch_AntennaPorts.XP; nrmac->xp_pdsch_antenna_ports = pdsch_AntennaPorts.XP;
config_common(Mod_idP, config_common(nrmac, num_pdsch_antenna_ports, pusch_AntennaPorts, scc);
num_pdsch_antenna_ports,
pusch_AntennaPorts,
scc);
LOG_D(NR_MAC, "%s() %s:%d RC.nrmac[Mod_idP]->if_inst->NR_PHY_config_req:%p\n", __FUNCTION__, __FILE__, __LINE__, RC.nrmac[Mod_idP]->if_inst->NR_PHY_config_req);
if (NFAPI_MODE == NFAPI_MODE_PNF || NFAPI_MODE == NFAPI_MODE_VNF) { if (NFAPI_MODE == NFAPI_MODE_PNF || NFAPI_MODE == NFAPI_MODE_VNF) {
// fake that the gNB is configured in nFAPI mode, which would normally be // fake that the gNB is configured in nFAPI mode, which would normally be
// done in a NR_PHY_config_req, but in this mode, there is no PHY // done in a NR_PHY_config_req, but in this mode, there is no PHY
RC.gNB[Mod_idP]->configured = 1; RC.gNB[0]->configured = 1;
} else { } else {
NR_PHY_Config_t phycfg = { NR_PHY_Config_t phycfg = {.Mod_id = 0, .CC_id = 0, .cfg = &nrmac->config[0]};
.Mod_id = Mod_idP, DevAssert(nrmac->if_inst->NR_PHY_config_req);
.CC_id = 0, nrmac->if_inst->NR_PHY_config_req(&phycfg);
.cfg = &RC.nrmac[Mod_idP]->config[0]
};
DevAssert(RC.nrmac[Mod_idP]->if_inst->NR_PHY_config_req);
RC.nrmac[Mod_idP]->if_inst->NR_PHY_config_req(&phycfg);
} }
RC.nrmac[Mod_idP]->minRXTXTIMEpdsch = minRXTXTIMEpdsch; nrmac->minRXTXTIMEpdsch = minRXTXTIMEpdsch;
find_SSB_and_RO_available(Mod_idP); find_SSB_and_RO_available(nrmac);
const NR_TDD_UL_DL_Pattern_t *tdd = scc->tdd_UL_DL_ConfigurationCommon ? &scc->tdd_UL_DL_ConfigurationCommon->pattern1 : NULL; const NR_TDD_UL_DL_Pattern_t *tdd = scc->tdd_UL_DL_ConfigurationCommon ? &scc->tdd_UL_DL_ConfigurationCommon->pattern1 : NULL;
...@@ -518,131 +510,150 @@ int rrc_mac_config_req_gNB(module_id_t Mod_idP, ...@@ -518,131 +510,150 @@ int rrc_mac_config_req_gNB(module_id_t Mod_idP,
nr_dl_slots = tdd->nrofDownlinkSlots + (tdd->nrofDownlinkSymbols != 0); nr_dl_slots = tdd->nrofDownlinkSlots + (tdd->nrofDownlinkSymbols != 0);
nr_ulstart_slot = get_first_ul_slot(tdd->nrofDownlinkSlots, tdd->nrofDownlinkSymbols, tdd->nrofUplinkSymbols); nr_ulstart_slot = get_first_ul_slot(tdd->nrofDownlinkSlots, tdd->nrofDownlinkSymbols, tdd->nrofUplinkSymbols);
nr_slots_period /= get_nb_periods_per_frame(tdd->dl_UL_TransmissionPeriodicity); nr_slots_period /= get_nb_periods_per_frame(tdd->dl_UL_TransmissionPeriodicity);
} } else {
else
// if TDD configuration is not present and the band is not FDD, it means it is a dynamic TDD configuration // if TDD configuration is not present and the band is not FDD, it means it is a dynamic TDD configuration
AssertFatal(RC.nrmac[Mod_idP]->common_channels[0].frame_type == FDD,"Dynamic TDD not handled yet\n"); AssertFatal(nrmac->common_channels[0].frame_type == FDD,"Dynamic TDD not handled yet\n");
}
for (int slot = 0; slot < n; ++slot) { for (int slot = 0; slot < n; ++slot) {
RC.nrmac[Mod_idP]->dlsch_slot_bitmap[slot / 64] |= (uint64_t)((slot % nr_slots_period) < nr_dl_slots) << (slot % 64); nrmac->dlsch_slot_bitmap[slot / 64] |= (uint64_t)((slot % nr_slots_period) < nr_dl_slots) << (slot % 64);
RC.nrmac[Mod_idP]->ulsch_slot_bitmap[slot / 64] |= (uint64_t)((slot % nr_slots_period) >= nr_ulstart_slot) << (slot % 64); nrmac->ulsch_slot_bitmap[slot / 64] |= (uint64_t)((slot % nr_slots_period) >= nr_ulstart_slot) << (slot % 64);
LOG_I(NR_MAC, "In %s: slot %d DL %d UL %d\n", LOG_I(NR_MAC,
__FUNCTION__, "slot %d DL %d UL %d\n",
slot, slot,
(RC.nrmac[Mod_idP]->dlsch_slot_bitmap[slot / 64] & ((uint64_t)1 << (slot % 64))) != 0, (nrmac->dlsch_slot_bitmap[slot / 64] & ((uint64_t)1 << (slot % 64))) != 0,
(RC.nrmac[Mod_idP]->ulsch_slot_bitmap[slot / 64] & ((uint64_t)1 << (slot % 64))) != 0); (nrmac->ulsch_slot_bitmap[slot / 64] & ((uint64_t)1 << (slot % 64))) != 0);
} }
if (get_softmodem_params()->phy_test) { if (get_softmodem_params()->phy_test) {
RC.nrmac[Mod_idP]->pre_processor_dl = nr_preprocessor_phytest; nrmac->pre_processor_dl = nr_preprocessor_phytest;
RC.nrmac[Mod_idP]->pre_processor_ul = nr_ul_preprocessor_phytest; nrmac->pre_processor_ul = nr_ul_preprocessor_phytest;
} else { } else {
RC.nrmac[Mod_idP]->pre_processor_dl = nr_init_fr1_dlsch_preprocessor(Mod_idP, 0); nrmac->pre_processor_dl = nr_init_fr1_dlsch_preprocessor(0);
RC.nrmac[Mod_idP]->pre_processor_ul = nr_init_fr1_ulsch_preprocessor(Mod_idP, 0); nrmac->pre_processor_ul = nr_init_fr1_ulsch_preprocessor(0);
} }
if (get_softmodem_params()->sa > 0) { if (get_softmodem_params()->sa > 0) {
NR_COMMON_channels_t *cc = &RC.nrmac[Mod_idP]->common_channels[0]; NR_COMMON_channels_t *cc = &nrmac->common_channels[0];
RC.nrmac[Mod_idP]->sib1_tda = sib1_tda; nrmac->sib1_tda = sib1_tda;
for (int n=0;n<NR_NB_RA_PROC_MAX;n++ ) { for (int n = 0; n < NR_NB_RA_PROC_MAX; n++) {
cc->ra[n].cfra = false; NR_RA_t *ra = &cc->ra[n];
cc->ra[n].msg3_dcch_dtch = false; ra->cfra = false;
cc->ra[n].rnti = 0; ra->msg3_dcch_dtch = false;
cc->ra[n].preambles.num_preambles = MAX_NUM_NR_PRACH_PREAMBLES; ra->rnti = 0;
cc->ra[n].preambles.preamble_list = (uint8_t *) malloc(MAX_NUM_NR_PRACH_PREAMBLES*sizeof(uint8_t)); ra->preambles.num_preambles = MAX_NUM_NR_PRACH_PREAMBLES;
ra->preambles.preamble_list = malloc(MAX_NUM_NR_PRACH_PREAMBLES * sizeof(*ra->preambles.preamble_list));
for (int i = 0; i < MAX_NUM_NR_PRACH_PREAMBLES; i++) for (int i = 0; i < MAX_NUM_NR_PRACH_PREAMBLES; i++)
cc->ra[n].preambles.preamble_list[i] = i; ra->preambles.preamble_list[i] = i;
}
} }
} }
}
void nr_mac_config_mib(gNB_MAC_INST *nrmac, NR_BCCH_BCH_Message_t *mib)
{
DevAssert(nrmac != NULL);
DevAssert(mib != NULL);
NR_COMMON_channels_t *cc = &nrmac->common_channels[0];
AssertFatal(cc->mib == NULL, "logic bug: updated MIB multiple times\n");
cc->mib = mib;
}
void nr_mac_config_sib1(gNB_MAC_INST *nrmac, NR_BCCH_DL_SCH_Message_t *sib1)
{
DevAssert(nrmac != NULL);
DevAssert(sib1 != NULL);
NR_COMMON_channels_t *cc = &nrmac->common_channels[0];
if (mib) RC.nrmac[Mod_idP]->common_channels[0].mib = mib; AssertFatal(cc->sib1 == NULL, "logic bug: updated SIB1 multiple times\n");
if (sib1) RC.nrmac[Mod_idP]->common_channels[0].sib1 = sib1; cc->sib1 = sib1;
}
if (CellGroup) { bool nr_mac_add_test_ue(gNB_MAC_INST *nrmac, uint32_t rnti, NR_CellGroupConfig_t *CellGroup)
{
DevAssert(nrmac != NULL);
DevAssert(CellGroup != NULL);
DevAssert(get_softmodem_params()->phy_test);
if (add_ue == 1 && get_softmodem_params()->phy_test) { NR_UE_info_t* UE = add_new_nr_ue(nrmac, rnti, CellGroup);
NR_UE_info_t* UE = add_new_nr_ue(RC.nrmac[Mod_idP], rnti, CellGroup);
if (UE) { if (UE) {
LOG_I(NR_MAC,"Added new UE %x with initial CellGroup\n", rnti); LOG_I(NR_MAC,"Force-added new UE %x with initial CellGroup\n", rnti);
} else { } else {
LOG_E(NR_MAC,"Error adding UE %04x\n", rnti); LOG_E(NR_MAC,"Error adding UE %04x\n", rnti);
return -1; return false;
} }
process_CellGroup(CellGroup,&UE->UE_sched_ctrl); process_CellGroup(CellGroup,&UE->UE_sched_ctrl);
} else if (add_ue == 1 && !get_softmodem_params()->phy_test) { return true;
}
bool nr_mac_prepare_ra_nsa_ue(gNB_MAC_INST *nrmac, uint32_t rnti, NR_CellGroupConfig_t *CellGroup)
{
DevAssert(nrmac != NULL);
DevAssert(CellGroup != NULL);
DevAssert(!get_softmodem_params()->phy_test);
// NSA case: need to pre-configure CFRA
const int CC_id = 0; const int CC_id = 0;
NR_COMMON_channels_t *cc = &RC.nrmac[Mod_idP]->common_channels[CC_id]; NR_COMMON_channels_t *cc = &nrmac->common_channels[CC_id];
uint8_t ra_index = 0; uint8_t ra_index = 0;
/* checking for free RA process */ /* checking for free RA process */
for(; ra_index < NR_NB_RA_PROC_MAX; ra_index++) { for(; ra_index < NR_NB_RA_PROC_MAX; ra_index++) {
if((cc->ra[ra_index].state == RA_IDLE) && (!cc->ra[ra_index].cfra)) break; if((cc->ra[ra_index].state == RA_IDLE) && (!cc->ra[ra_index].cfra)) break;
} }
if (ra_index == NR_NB_RA_PROC_MAX) { if (ra_index == NR_NB_RA_PROC_MAX) {
LOG_E(NR_MAC, "%s() %s:%d RA processes are not available for CFRA RNTI :%x\n", __FUNCTION__, __FILE__, __LINE__, rnti); LOG_E(NR_MAC, "RA processes are not available for CFRA RNTI %04x\n", rnti);
return -1; return false;
} }
NR_RA_t *ra = &cc->ra[ra_index]; NR_RA_t *ra = &cc->ra[ra_index];
ra->CellGroup = CellGroup; ra->CellGroup = CellGroup;
if (CellGroup->spCellConfig && CellGroup->spCellConfig->reconfigurationWithSync && AssertFatal(CellGroup->spCellConfig && CellGroup->spCellConfig->reconfigurationWithSync
CellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated!=NULL) { && CellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated != NULL
if (CellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra != NULL) { && CellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra != NULL,
"invalid CellGroup for RNTI %04x, cannot create RA occasion\n",
rnti);
ra->cfra = true; ra->cfra = true;
ra->rnti = rnti; ra->rnti = rnti;
struct NR_CFRA *cfra = CellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra; struct NR_CFRA *cfra = CellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra;
uint8_t num_preamble = cfra->resources.choice.ssb->ssb_ResourceList.list.count; uint8_t num_preamble = cfra->resources.choice.ssb->ssb_ResourceList.list.count;
AssertFatal(ra->preambles.num_preambles == 0 && ra->preambles.preamble_list == NULL,
"preamble_list already configured means logic bug, list is allocated here\n");
ra->preambles.num_preambles = num_preamble; ra->preambles.num_preambles = num_preamble;
ra->preambles.preamble_list = (uint8_t *) malloc(num_preamble*sizeof(uint8_t)); ra->preambles.preamble_list = calloc(ra->preambles.num_preambles, sizeof(*ra->preambles.preamble_list));
for(int i=0; i<cc->num_active_ssb; i++) { for (int i = 0; i < cc->num_active_ssb; i++) {
for(int j=0; j<num_preamble; j++) { for (int j = 0; j < num_preamble; j++) {
if (cc->ssb_index[i] == cfra->resources.choice.ssb->ssb_ResourceList.list.array[j]->ssb) { if (cc->ssb_index[i] == cfra->resources.choice.ssb->ssb_ResourceList.list.array[j]->ssb) {
// one dedicated preamble for each beam // one dedicated preamble for each beam
ra->preambles.preamble_list[i] = ra->preambles.preamble_list[i] = cfra->resources.choice.ssb->ssb_ResourceList.list.array[j]->ra_PreambleIndex;
cfra->resources.choice.ssb->ssb_ResourceList.list.array[j]->ra_PreambleIndex;
break; break;
} }
} }
} }
}
} else {
ra->cfra = false;
ra->rnti = 0;
ra->preambles.num_preambles = MAX_NUM_NR_PRACH_PREAMBLES;
ra->preambles.preamble_list = (uint8_t *) malloc(MAX_NUM_NR_PRACH_PREAMBLES*sizeof(uint8_t));
for (int i = 0; i < MAX_NUM_NR_PRACH_PREAMBLES; i++)
ra->preambles.preamble_list[i] = i;
}
ra->msg3_dcch_dtch = false; ra->msg3_dcch_dtch = false;
LOG_I(NR_MAC,"Added new RA process for UE RNTI %04x with initial CellGroup\n", rnti); LOG_I(NR_MAC,"Added new RA process for UE RNTI %04x with initial CellGroup\n", rnti);
} else { // CellGroup has been updated return true;
NR_UE_info_t *UE = find_nr_UE(&RC.nrmac[Mod_idP]->UE_info, rnti); }
if (!UE) {
LOG_E(NR_MAC, "Can't find UE %04x\n", rnti); bool nr_mac_update_cellgroup(gNB_MAC_INST *nrmac, uint32_t rnti, NR_CellGroupConfig_t *CellGroup)
return -1; {
} DevAssert(nrmac != NULL);
DevAssert(CellGroup != NULL);
NR_UE_info_t *UE = find_nr_UE(&nrmac->UE_info, rnti);
AssertFatal(UE != NULL, "Can't find UE %04x for CellGroup update\n", rnti);
/* copy CellGroup by calling asn1c encode /* copy CellGroup by calling asn1c encode this is a temporary hack to avoid the gNB having a pointer to RRC CellGroup structure
this is a temporary hack to avoid the gNB having * (otherwise it would be applied to early)
a pointer to RRC CellGroup structure * TODO remove once we have a proper implementation */
(otherwise it would be applied to early) UE->enc_rval = uper_encode_to_buffer(&asn_DEF_NR_CellGroupConfig, NULL, (void *)CellGroup, UE->cg_buf, 32768);
TODO remove once we have a proper implementation */
UE->enc_rval = uper_encode_to_buffer(&asn_DEF_NR_CellGroupConfig,
NULL,
(void *) CellGroup,
UE->cg_buf,
32768);
if (UE->enc_rval.encoded == -1) { if (UE->enc_rval.encoded == -1) {
LOG_E(NR_MAC, "ASN1 message CellGroupConfig encoding failed (%s, %lu)!\n", LOG_E(NR_MAC, "ASN1 message CellGroupConfig encoding failed (%s, %lu)!\n", UE->enc_rval.failed_type->name, UE->enc_rval.encoded);
UE->enc_rval.failed_type->name, UE->enc_rval.encoded);
exit(1); exit(1);
} }
process_CellGroup(CellGroup,&UE->UE_sched_ctrl); process_CellGroup(CellGroup, &UE->UE_sched_ctrl);
}
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_OUT);
return 0; return true;
}// END rrc_mac_config_req_gNB }
...@@ -141,12 +141,11 @@ int16_t ssb_index_from_prach(module_id_t module_idP, ...@@ -141,12 +141,11 @@ int16_t ssb_index_from_prach(module_id_t module_idP,
//Compute Total active SSBs and RO available //Compute Total active SSBs and RO available
void find_SSB_and_RO_available(module_id_t module_idP) { void find_SSB_and_RO_available(gNB_MAC_INST *nrmac)
{
gNB_MAC_INST *gNB = RC.nrmac[module_idP]; NR_COMMON_channels_t *cc = &nrmac->common_channels[0];
NR_COMMON_channels_t *cc = &gNB->common_channels[0];
NR_ServingCellConfigCommon_t *scc = cc->ServingCellConfigCommon; NR_ServingCellConfigCommon_t *scc = cc->ServingCellConfigCommon;
nfapi_nr_config_request_scf_t *cfg = &RC.nrmac[module_idP]->config[0]; nfapi_nr_config_request_scf_t *cfg = &nrmac->config[0];
uint8_t config_index = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.prach_ConfigurationIndex; uint8_t config_index = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.prach_ConfigurationIndex;
uint8_t mu,N_dur=0,N_t_slot=0,start_symbol=0,N_RA_slot = 0; uint8_t mu,N_dur=0,N_t_slot=0,start_symbol=0,N_RA_slot = 0;
...@@ -1573,6 +1572,7 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra ...@@ -1573,6 +1572,7 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
if(harq->round==0 && ra->msg3_dcch_dtch) { if(harq->round==0 && ra->msg3_dcch_dtch) {
mac_remove_nr_ue(nr_mac, tc_rnti); mac_remove_nr_ue(nr_mac, tc_rnti);
} }
UE->mac_stats.dl.rounds[harq->round]++;
NR_sched_pucch_t *pucch = &sched_ctrl->sched_pucch[alloc]; NR_sched_pucch_t *pucch = &sched_ctrl->sched_pucch[alloc];
harq->feedback_slot = pucch->ul_slot; harq->feedback_slot = pucch->ul_slot;
......
...@@ -844,7 +844,7 @@ void nr_fr1_dlsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t ...@@ -844,7 +844,7 @@ void nr_fr1_dlsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t
rballoc_mask); rballoc_mask);
} }
nr_pp_impl_dl nr_init_fr1_dlsch_preprocessor(module_id_t module_id, int CC_id) { nr_pp_impl_dl nr_init_fr1_dlsch_preprocessor(int CC_id) {
/* in the PF algorithm, we have to use the TBsize to compute the coefficient. /* in the PF algorithm, we have to use the TBsize to compute the coefficient.
* This would include the number of DMRS symbols, which in turn depends on * This would include the number of DMRS symbols, which in turn depends on
* the time domain allocation. In case we are in a mixed slot, we do not want * the time domain allocation. In case we are in a mixed slot, we do not want
......
...@@ -1944,7 +1944,7 @@ bool nr_fr1_ulsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t ...@@ -1944,7 +1944,7 @@ bool nr_fr1_ulsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t
return true; return true;
} }
nr_pp_impl_ul nr_init_fr1_ulsch_preprocessor(module_id_t module_id, int CC_id) nr_pp_impl_ul nr_init_fr1_ulsch_preprocessor(int CC_id)
{ {
/* in the PF algorithm, we have to use the TBsize to compute the coefficient. /* in the PF algorithm, we have to use the TBsize to compute the coefficient.
* This would include the number of DMRS symbols, which in turn depends on * This would include the number of DMRS symbols, which in turn depends on
......
...@@ -40,27 +40,24 @@ void set_cset_offset(uint16_t); ...@@ -40,27 +40,24 @@ void set_cset_offset(uint16_t);
void mac_top_init_gNB(ngran_node_t node_type); void mac_top_init_gNB(ngran_node_t node_type);
void config_common(int Mod_idP, void config_common(gNB_MAC_INST *nrmac, int pdsch_AntennaPorts, int pusch_AntennaPorts, NR_ServingCellConfigCommon_t *scc);
int pdsch_AntennaPorts,
int pusch_AntennaPorts,
NR_ServingCellConfigCommon_t *scc);
int nr_mac_enable_ue_rrc_processing_timer(module_id_t Mod_idP, int nr_mac_enable_ue_rrc_processing_timer(module_id_t Mod_idP,
rnti_t rnti, rnti_t rnti,
NR_SubcarrierSpacing_t subcarrierSpacing, NR_SubcarrierSpacing_t subcarrierSpacing,
uint32_t rrc_reconfiguration_delay); uint32_t rrc_reconfiguration_delay);
int rrc_mac_config_req_gNB(module_id_t Mod_idP, void nr_mac_config_scc(gNB_MAC_INST *nrmac,
rrc_pdsch_AntennaPorts_t pdsch_AntennaPorts, rrc_pdsch_AntennaPorts_t pdsch_AntennaPorts,
int pusch_AntennaPorts, int pusch_AntennaPorts,
int sib1_tda, int sib1_tda,
int minRXTXTIMEpdsch, int minRXTXTIMEpdsch,
NR_ServingCellConfigCommon_t *scc, NR_ServingCellConfigCommon_t *scc);
NR_BCCH_BCH_Message_t *mib, void nr_mac_config_mib(gNB_MAC_INST *nrmac, NR_BCCH_BCH_Message_t *mib);
NR_BCCH_DL_SCH_Message_t *sib1, void nr_mac_config_sib1(gNB_MAC_INST *nrmac, NR_BCCH_DL_SCH_Message_t *sib1);
int add_ue, bool nr_mac_add_test_ue(gNB_MAC_INST *nrmac, uint32_t rnti, NR_CellGroupConfig_t *CellGroup);
uint32_t rnti, bool nr_mac_prepare_ra_nsa_ue(gNB_MAC_INST *nrmac, uint32_t rnti, NR_CellGroupConfig_t *CellGroup);
NR_CellGroupConfig_t *CellGroup); bool nr_mac_update_cellgroup(gNB_MAC_INST *nrmac, uint32_t rnti, NR_CellGroupConfig_t *CellGroup);
void clear_nr_nfapi_information(gNB_MAC_INST * gNB, void clear_nr_nfapi_information(gNB_MAC_INST * gNB,
int CC_idP, int CC_idP,
...@@ -95,7 +92,7 @@ uint32_t schedule_control_sib1(module_id_t module_id, ...@@ -95,7 +92,7 @@ uint32_t schedule_control_sib1(module_id_t module_id,
uint16_t num_total_bytes); uint16_t num_total_bytes);
/* \brief default FR1 DL preprocessor init routine, returns preprocessor to call */ /* \brief default FR1 DL preprocessor init routine, returns preprocessor to call */
nr_pp_impl_dl nr_init_fr1_dlsch_preprocessor(module_id_t module_id, int CC_id); nr_pp_impl_dl nr_init_fr1_dlsch_preprocessor(int CC_id);
void schedule_nr_sib1(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP); void schedule_nr_sib1(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP);
...@@ -107,7 +104,7 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t slotP); ...@@ -107,7 +104,7 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t slotP);
void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot); void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot);
/* \brief default FR1 UL preprocessor init routine, returns preprocessor to call */ /* \brief default FR1 UL preprocessor init routine, returns preprocessor to call */
nr_pp_impl_ul nr_init_fr1_ulsch_preprocessor(module_id_t module_id, int CC_id); nr_pp_impl_ul nr_init_fr1_ulsch_preprocessor(int CC_id);
/////// Random Access MAC-PHY interface functions and primitives /////// /////// Random Access MAC-PHY interface functions and primitives ///////
...@@ -425,7 +422,7 @@ int16_t ssb_index_from_prach(module_id_t module_idP, ...@@ -425,7 +422,7 @@ int16_t ssb_index_from_prach(module_id_t module_idP,
uint8_t freq_index, uint8_t freq_index,
uint8_t symbol); uint8_t symbol);
void find_SSB_and_RO_available(module_id_t module_idP); void find_SSB_and_RO_available(gNB_MAC_INST *nrmac);
NR_pdsch_dmrs_t get_dl_dmrs_params(const NR_ServingCellConfigCommon_t *scc, NR_pdsch_dmrs_t get_dl_dmrs_params(const NR_ServingCellConfigCommon_t *scc,
const NR_UE_DL_BWP_t *BWP, const NR_UE_DL_BWP_t *BWP,
......
...@@ -36,7 +36,7 @@ int dl_rrc_message(module_id_t module_id, const f1ap_dl_rrc_message_t *dl_rrc) ...@@ -36,7 +36,7 @@ int dl_rrc_message(module_id_t module_id, const f1ap_dl_rrc_message_t *dl_rrc)
/* dispatch message to dl_rrc_message_rrcSetup() and others, similar to as is /* dispatch message to dl_rrc_message_rrcSetup() and others, similar to as is
* done in the DU (should be the same here) */ * done in the DU (should be the same here) */
LOG_I(NR_MAC, "DL RRC Message Transfer with %d bytes for RNTI %04x SRB %d\n", dl_rrc->rrc_container_length, dl_rrc->rnti, dl_rrc->srb_id); LOG_D(NR_MAC, "DL RRC Message Transfer with %d bytes for RNTI %04x SRB %d\n", dl_rrc->rrc_container_length, dl_rrc->rnti, dl_rrc->srb_id);
if (dl_rrc->srb_id == CCCH) { // SRB 0 if (dl_rrc->srb_id == CCCH) { // SRB 0
...@@ -59,7 +59,7 @@ int dl_rrc_message(module_id_t module_id, const f1ap_dl_rrc_message_t *dl_rrc) ...@@ -59,7 +59,7 @@ int dl_rrc_message(module_id_t module_id, const f1ap_dl_rrc_message_t *dl_rrc)
AssertFatal(0, "rrcReject not implemented yet\n"); AssertFatal(0, "rrcReject not implemented yet\n");
break; break;
case NR_DL_CCCH_MessageType__c1_PR_rrcSetup: case NR_DL_CCCH_MessageType__c1_PR_rrcSetup:
LOG_I(NR_MAC, "DL-CCCH/SRB0, received rrcSetup for RNTI %04x\n", dl_rrc->rnti); LOG_D(NR_MAC, "DL-CCCH/SRB0, received rrcSetup for RNTI %04x\n", dl_rrc->rnti);
return dl_rrc_message_rrcSetup(module_id, dl_rrc, dl_ccch_msg->message.choice.c1->choice.rrcSetup); return dl_rrc_message_rrcSetup(module_id, dl_rrc, dl_ccch_msg->message.choice.c1->choice.rrcSetup);
break; break;
case NR_DL_CCCH_MessageType__c1_PR_spare2: case NR_DL_CCCH_MessageType__c1_PR_spare2:
...@@ -101,20 +101,8 @@ int dl_rrc_message_rrcSetup(module_id_t module_id, const f1ap_dl_rrc_message_t * ...@@ -101,20 +101,8 @@ int dl_rrc_message_rrcSetup(module_id_t module_id, const f1ap_dl_rrc_message_t *
AssertFatal(dec_rval.code == RC_OK, "could not decode masterCellGroup\n"); AssertFatal(dec_rval.code == RC_OK, "could not decode masterCellGroup\n");
/* there might be a memory leak for the cell group if we call this multiple /* there might be a memory leak for the cell group if we call this multiple
* times. Also, the first parameters of rrc_mac_config_req_gNB() are only * times. */
* relevant when setting the scc, which we don't do (and cannot do) here. */ nr_mac_update_cellgroup(RC.nrmac[module_id], dl_rrc->rnti, cellGroup);
rrc_pdsch_AntennaPorts_t pap = {0};
rrc_mac_config_req_gNB(module_id,
pap, /* only when scc != NULL */
0, /* only when scc != NULL */
0, /* only when scc != NULL */
0, /* only when scc != NULL */
NULL, /* scc */
NULL, /* mib */
NULL, /* sib1 */
0, /* add_ue */
dl_rrc->rnti,
cellGroup);
/* TODO: drop the RRC context */ /* TODO: drop the RRC context */
gNB_RRC_INST *rrc = RC.nrrrc[module_id]; gNB_RRC_INST *rrc = RC.nrrrc[module_id];
......
...@@ -239,8 +239,8 @@ void mac_top_init_gNB(ngran_node_t node_type) ...@@ -239,8 +239,8 @@ void mac_top_init_gNB(ngran_node_t node_type)
RC.nrmac[i]->pre_processor_dl = nr_preprocessor_phytest; RC.nrmac[i]->pre_processor_dl = nr_preprocessor_phytest;
RC.nrmac[i]->pre_processor_ul = nr_ul_preprocessor_phytest; RC.nrmac[i]->pre_processor_ul = nr_ul_preprocessor_phytest;
} else { } else {
RC.nrmac[i]->pre_processor_dl = nr_init_fr1_dlsch_preprocessor(i, 0); RC.nrmac[i]->pre_processor_dl = nr_init_fr1_dlsch_preprocessor(0);
RC.nrmac[i]->pre_processor_ul = nr_init_fr1_ulsch_preprocessor(i, 0); RC.nrmac[i]->pre_processor_ul = nr_init_fr1_ulsch_preprocessor(0);
} }
if (!IS_SOFTMODEM_NOSTATS_BIT) if (!IS_SOFTMODEM_NOSTATS_BIT)
threadCreate(&RC.nrmac[i]->stats_thread, nrmac_stats_thread, (void*)RC.nrmac[i], "MAC_STATS", -1, sched_get_priority_min(SCHED_OAI)+1 ); threadCreate(&RC.nrmac[i]->stats_thread, nrmac_stats_thread, (void*)RC.nrmac[i], "MAC_STATS", -1, sched_get_priority_min(SCHED_OAI)+1 );
......
...@@ -176,17 +176,16 @@ static void init_NR_SI(gNB_RRC_INST *rrc, gNB_RrcConfigurationReq *configuration ...@@ -176,17 +176,16 @@ static void init_NR_SI(gNB_RRC_INST *rrc, gNB_RrcConfigurationReq *configuration
LOG_I(NR_RRC,"Done init_NR_SI\n"); LOG_I(NR_RRC,"Done init_NR_SI\n");
if (NODE_IS_MONOLITHIC(rrc->node_type) || NODE_IS_DU(rrc->node_type)){ if (NODE_IS_MONOLITHIC(rrc->node_type) || NODE_IS_DU(rrc->node_type)){
rrc_mac_config_req_gNB(rrc->module_id, // update SI info
nr_mac_config_scc(RC.nrmac[rrc->module_id],
rrc->configuration.pdsch_AntennaPorts, rrc->configuration.pdsch_AntennaPorts,
rrc->configuration.pusch_AntennaPorts, rrc->configuration.pusch_AntennaPorts,
rrc->configuration.sib1_tda, rrc->configuration.sib1_tda,
rrc->configuration.minRXTXTIME, rrc->configuration.minRXTXTIME,
rrc->carrier.servingcellconfigcommon, rrc->carrier.servingcellconfigcommon);
&rrc->carrier.mib, nr_mac_config_mib(RC.nrmac[rrc->module_id], &rrc->carrier.mib);
rrc->carrier.siblock1, if (get_softmodem_params()->sa)
0, nr_mac_config_sib1(RC.nrmac[rrc->module_id], rrc->carrier.siblock1);
0, // WIP hardcoded rnti
NULL);
} }
/* set flag to indicate that cell information is configured. This is required /* set flag to indicate that cell information is configured. This is required
...@@ -306,17 +305,7 @@ unsigned int rrc_gNB_get_next_transaction_identifier(module_id_t gnb_mod_idP) ...@@ -306,17 +305,7 @@ unsigned int rrc_gNB_get_next_transaction_identifier(module_id_t gnb_mod_idP)
static void apply_macrlc_config(gNB_RRC_INST *rrc, rrc_gNB_ue_context_t *const ue_context_pP, const protocol_ctxt_t *const ctxt_pP) static void apply_macrlc_config(gNB_RRC_INST *rrc, rrc_gNB_ue_context_t *const ue_context_pP, const protocol_ctxt_t *const ctxt_pP)
{ {
NR_CellGroupConfig_t *cgc = get_softmodem_params()->sa ? ue_context_pP->ue_context.masterCellGroup : NULL; NR_CellGroupConfig_t *cgc = get_softmodem_params()->sa ? ue_context_pP->ue_context.masterCellGroup : NULL;
rrc_mac_config_req_gNB(rrc->module_id, nr_mac_update_cellgroup(RC.nrmac[rrc->module_id], ue_context_pP->ue_context.rnti, cgc);
rrc->configuration.pdsch_AntennaPorts,
rrc->configuration.pusch_AntennaPorts,
rrc->configuration.sib1_tda,
rrc->configuration.minRXTXTIME,
NULL,
NULL,
NULL,
0,
ue_context_pP->ue_context.rnti,
cgc);
nr_rrc_rlc_config_asn1_req(ctxt_pP, nr_rrc_rlc_config_asn1_req(ctxt_pP,
ue_context_pP->ue_context.SRB_configList, ue_context_pP->ue_context.SRB_configList,
...@@ -327,17 +316,7 @@ static void apply_macrlc_config(gNB_RRC_INST *rrc, rrc_gNB_ue_context_t *const u ...@@ -327,17 +316,7 @@ static void apply_macrlc_config(gNB_RRC_INST *rrc, rrc_gNB_ue_context_t *const u
void apply_macrlc_config_reest(gNB_RRC_INST *rrc, rrc_gNB_ue_context_t *const ue_context_pP, const protocol_ctxt_t *const ctxt_pP, ue_id_t ue_id) void apply_macrlc_config_reest(gNB_RRC_INST *rrc, rrc_gNB_ue_context_t *const ue_context_pP, const protocol_ctxt_t *const ctxt_pP, ue_id_t ue_id)
{ {
rrc_mac_config_req_gNB(rrc->module_id, nr_mac_update_cellgroup(RC.nrmac[rrc->module_id], ue_context_pP->ue_context.rnti, ue_context_pP->ue_context.masterCellGroup);
rrc->configuration.pdsch_AntennaPorts,
rrc->configuration.pusch_AntennaPorts,
rrc->configuration.sib1_tda,
rrc->configuration.minRXTXTIME,
NULL,
NULL,
NULL,
0,
ue_id,
get_softmodem_params()->sa ? ue_context_pP->ue_context.masterCellGroup : NULL);
nr_rrc_rlc_config_asn1_req(ctxt_pP, nr_rrc_rlc_config_asn1_req(ctxt_pP,
ue_context_pP->ue_context.SRB_configList, ue_context_pP->ue_context.SRB_configList,
...@@ -430,17 +409,15 @@ static void rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(const protoc ...@@ -430,17 +409,15 @@ static void rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(const protoc
PROTOCOL_NR_RRC_CTXT_UE_FMT" RRC_gNB --- MAC_CONFIG_REQ (SRB1) ---> MAC_gNB\n", PROTOCOL_NR_RRC_CTXT_UE_FMT" RRC_gNB --- MAC_CONFIG_REQ (SRB1) ---> MAC_gNB\n",
PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP)); PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
rrc_mac_config_req_gNB(rrc_instance_p->module_id, // update SCC and MIB/SIB (two calls)
nr_mac_config_scc(RC.nrmac[rrc_instance_p->module_id],
rrc_instance_p->configuration.pdsch_AntennaPorts, rrc_instance_p->configuration.pdsch_AntennaPorts,
rrc_instance_p->configuration.pusch_AntennaPorts, rrc_instance_p->configuration.pusch_AntennaPorts,
rrc_instance_p->configuration.sib1_tda, rrc_instance_p->configuration.sib1_tda,
rrc_instance_p->configuration.minRXTXTIME, rrc_instance_p->configuration.minRXTXTIME,
rrc_instance_p->carrier.servingcellconfigcommon, rrc_instance_p->carrier.servingcellconfigcommon);
&rrc_instance_p->carrier.mib, nr_mac_config_mib(RC.nrmac[rrc_instance_p->module_id], &rrc_instance_p->carrier.mib);
rrc_instance_p->carrier.siblock1, nr_mac_config_sib1(RC.nrmac[rrc_instance_p->module_id], rrc_instance_p->carrier.siblock1);
0,
ue_context_pP->ue_context.rnti,
NULL);
LOG_I(NR_RRC, LOG_I(NR_RRC,
PROTOCOL_NR_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCSetup (bytes %d)\n", PROTOCOL_NR_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCSetup (bytes %d)\n",
...@@ -639,17 +616,7 @@ static void rrc_gNB_generate_defaultRRCReconfiguration(const protocol_ctxt_t *co ...@@ -639,17 +616,7 @@ static void rrc_gNB_generate_defaultRRCReconfiguration(const protocol_ctxt_t *co
if (NODE_IS_DU(rrc->node_type) || NODE_IS_MONOLITHIC(rrc->node_type)) { if (NODE_IS_DU(rrc->node_type) || NODE_IS_MONOLITHIC(rrc->node_type)) {
gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context; gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
rrc_mac_config_req_gNB(rrc->module_id, nr_mac_update_cellgroup(RC.nrmac[rrc->module_id], ue_p->rnti, ue_p->masterCellGroup);
rrc->configuration.pdsch_AntennaPorts,
rrc->configuration.pusch_AntennaPorts,
rrc->configuration.sib1_tda,
rrc->configuration.minRXTXTIME,
NULL,
NULL,
NULL,
0,
ue_p->rnti,
ue_p->masterCellGroup);
uint32_t delay_ms = ue_context_pP->ue_context.masterCellGroup && uint32_t delay_ms = ue_context_pP->ue_context.masterCellGroup &&
ue_context_pP->ue_context.masterCellGroup->spCellConfig && ue_context_pP->ue_context.masterCellGroup->spCellConfig &&
...@@ -909,17 +876,7 @@ rrc_gNB_generate_dedicatedRRCReconfiguration( ...@@ -909,17 +876,7 @@ rrc_gNB_generate_dedicatedRRCReconfiguration(
PDCP_TRANSMISSION_MODE_CONTROL); PDCP_TRANSMISSION_MODE_CONTROL);
if (NODE_IS_DU(rrc->node_type) || NODE_IS_MONOLITHIC(rrc->node_type)) { if (NODE_IS_DU(rrc->node_type) || NODE_IS_MONOLITHIC(rrc->node_type)) {
rrc_mac_config_req_gNB(rrc->module_id, nr_mac_update_cellgroup(RC.nrmac[rrc->module_id], ue_context_pP->ue_context.rnti, ue_context_pP->ue_context.masterCellGroup);
rrc->configuration.pdsch_AntennaPorts,
rrc->configuration.pusch_AntennaPorts,
rrc->configuration.sib1_tda,
rrc->configuration.minRXTXTIME,
NULL,
NULL,
NULL,
0,
ue_context_pP->ue_context.rnti,
ue_context_pP->ue_context.masterCellGroup);
uint32_t delay_ms = ue_context_pP->ue_context.masterCellGroup && uint32_t delay_ms = ue_context_pP->ue_context.masterCellGroup &&
ue_context_pP->ue_context.masterCellGroup->spCellConfig && ue_context_pP->ue_context.masterCellGroup->spCellConfig &&
...@@ -1726,19 +1683,7 @@ void rrc_gNB_process_RRCReestablishmentComplete(const protocol_ctxt_t *const ctx ...@@ -1726,19 +1683,7 @@ void rrc_gNB_process_RRCReestablishmentComplete(const protocol_ctxt_t *const ctx
ctxt_pP->module_id, ctxt_pP->module_id,
DCCH); DCCH);
gNB_RrcConfigurationReq *configuration = &RC.nrrrc[ctxt_pP->module_id]->configuration; nr_mac_update_cellgroup(RC.nrmac[rrc->module_id], ue_context_pP->ue_context.rnti, cellGroupConfig);
rrc_mac_config_req_gNB(ctxt_pP->module_id,
configuration->pdsch_AntennaPorts,
configuration->pusch_AntennaPorts,
configuration->sib1_tda,
configuration->minRXTXTIME,
NULL,
NULL,
NULL,
0,
ue_context_pP->ue_context.rnti,
cellGroupConfig);
nr_rrc_data_req(ctxt_pP, DCCH, rrc_gNB_mui++, SDU_CONFIRM_NO, size, buffer, PDCP_TRANSMISSION_MODE_CONTROL); nr_rrc_data_req(ctxt_pP, DCCH, rrc_gNB_mui++, SDU_CONFIRM_NO, size, buffer, PDCP_TRANSMISSION_MODE_CONTROL);
} }
...@@ -1791,18 +1736,7 @@ int nr_rrc_reconfiguration_req(rrc_gNB_ue_context_t *const ue_context_pP ...@@ -1791,18 +1736,7 @@ int nr_rrc_reconfiguration_req(rrc_gNB_ue_context_t *const ue_context_pP
NULL, NULL,
masterCellGroup); masterCellGroup);
gNB_RrcConfigurationReq *configuration = &RC.nrrrc[ctxt_pP->module_id]->configuration; nr_mac_update_cellgroup(RC.nrmac[ctxt_pP->module_id], ue_context_pP->ue_context.rnti, masterCellGroup);
rrc_mac_config_req_gNB(ctxt_pP->module_id,
configuration->pdsch_AntennaPorts,
configuration->pusch_AntennaPorts,
configuration->sib1_tda,
configuration->minRXTXTIME,
NULL,
NULL,
NULL,
0,
ue_context_pP->ue_context.rnti,
masterCellGroup);
nr_rrc_data_req(ctxt_pP, nr_rrc_data_req(ctxt_pP,
DCCH, DCCH,
......
...@@ -821,7 +821,6 @@ rrc_gNB_process_NGAP_DOWNLINK_NAS( ...@@ -821,7 +821,6 @@ rrc_gNB_process_NGAP_DOWNLINK_NAS(
case ngran_gNB: case ngran_gNB:
{ {
// rrc_mac_config_req_gNB
/* Transfer data to PDCP */ /* Transfer data to PDCP */
nr_rrc_data_req ( nr_rrc_data_req (
&ctxt, &ctxt,
......
...@@ -348,31 +348,14 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_ ...@@ -348,31 +348,14 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
rrc->Nb_ue++; rrc->Nb_ue++;
// configure MAC and RLC // configure MAC and RLC
if (NODE_IS_DU(rrc->node_type)) { bool ret = false;
rrc_mac_config_req_gNB(rrc->module_id, if (get_softmodem_params()->phy_test) {
rrc->configuration.pdsch_AntennaPorts, // phytest mode: we don't set up RA, etc
rrc->configuration.pusch_AntennaPorts, ret = nr_mac_add_test_ue(RC.nrmac[rrc->module_id], ue_context_p->ue_id_rnti, ue_context_p->ue_context.secondaryCellGroup);
rrc->configuration.sib1_tda,
rrc->configuration.minRXTXTIME,
rrc->carrier.servingcellconfigcommon,
&rrc->carrier.mib,
NULL,
1, // add_ue flag
ue_context_p->ue_id_rnti,
ue_context_p->ue_context.secondaryCellGroup);
} else { } else {
rrc_mac_config_req_gNB(rrc->module_id, ret = nr_mac_prepare_ra_nsa_ue(RC.nrmac[rrc->module_id], ue_context_p->ue_id_rnti, ue_context_p->ue_context.secondaryCellGroup);
rrc->configuration.pdsch_AntennaPorts,
rrc->configuration.pusch_AntennaPorts,
rrc->configuration.sib1_tda,
rrc->configuration.minRXTXTIME,
NULL,
NULL,
NULL,
1, // add_ue flag
ue_context_p->ue_id_rnti,
ue_context_p->ue_context.secondaryCellGroup);
} }
AssertFatal(ret, "cannot add NSA UE in MAC, aborting\n");
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, rrc->module_id, GNB_FLAG_YES, ue_context_p->ue_id_rnti, 0, 0, rrc->module_id); PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, rrc->module_id, GNB_FLAG_YES, ue_context_p->ue_id_rnti, 0, 0, rrc->module_id);
if (get_softmodem_params()->do_ra) ctxt.enb_flag = 0; if (get_softmodem_params()->do_ra) ctxt.enb_flag = 0;
......
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