From 7456cf945d24a2867ee3c78e8973c5170d8a2c12 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Mon, 17 Jul 2023 13:56:19 +0200 Subject: [PATCH] Refactor F1 Setup Req: Reorganize cellIDs_t and rename to f1ap_served_cell_info_t --- openair2/COMMON/f1ap_messages_types.h | 17 ++++---- openair2/F1AP/f1ap_cu_interface_management.c | 26 ++++++------ openair2/F1AP/f1ap_cu_ue_context_management.c | 2 +- openair2/F1AP/f1ap_du_interface_management.c | 16 +++---- openair2/F1AP/f1ap_du_rrc_message_transfer.c | 2 +- openair2/F1AP/f1ap_du_ue_context_management.c | 4 +- openair2/GNB_APP/gnb_config.c | 42 +++++++++---------- openair2/RRC/NR/rrc_gNB.c | 16 +++---- 8 files changed, 64 insertions(+), 61 deletions(-) diff --git a/openair2/COMMON/f1ap_messages_types.h b/openair2/COMMON/f1ap_messages_types.h index 9ea3a02e00..7cc5b6ca01 100644 --- a/openair2/COMMON/f1ap_messages_types.h +++ b/openair2/COMMON/f1ap_messages_types.h @@ -90,22 +90,22 @@ typedef struct f1ap_plmn_t { uint8_t mnc_digit_length; } f1ap_plmn_t; -typedef struct cellIDs_s { - // Served Cell Information - /* Tracking area code */ - uint32_t *tac; - +typedef struct f1ap_served_cell_info_t { // NR CGI f1ap_plmn_t plmn; uint64_t nr_cellid; // NR Global Cell Id // NR Physical Cell Ids uint16_t nr_pci; + + /* Tracking area code */ + uint32_t *tac; + // Number of slide support items (max 16, could be increased to as much as 1024) uint16_t num_ssi; uint8_t sst; uint8_t sd; -} cellIDs_t; +} f1ap_served_cell_info_t; typedef struct f1ap_setup_req_s { @@ -115,7 +115,10 @@ typedef struct f1ap_setup_req_s { /// number of DU cells available uint16_t num_cells_available; //0< num_cells_available <= 512; - cellIDs_t cell[F1AP_MAX_NB_CELLS]; + struct { + f1ap_served_cell_info_t info; + } cell[F1AP_MAX_NB_CELLS]; + // fdd_flag = 1 means FDD, 0 means TDD int fdd_flag; diff --git a/openair2/F1AP/f1ap_cu_interface_management.c b/openair2/F1AP/f1ap_cu_interface_management.c index 76f4235474..e0e4c90f45 100644 --- a/openair2/F1AP/f1ap_cu_interface_management.c +++ b/openair2/F1AP/f1ap_cu_interface_management.c @@ -122,27 +122,27 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance, F1AP_Served_Cell_Information_t *servedCellInformation= &served_cells_item->served_Cell_Information; /* tac */ if (servedCellInformation->fiveGS_TAC) { - req->cell[i].tac = malloc(sizeof(*req->cell[i].tac)); - AssertFatal(req->cell[i].tac != NULL, "out of memory\n"); - OCTET_STRING_TO_INT16(servedCellInformation->fiveGS_TAC, *req->cell[i].tac); - LOG_D(F1AP, "req->tac[%d] %d \n", i, *req->cell[i].tac); + req->cell[i].info.tac = malloc(sizeof(*req->cell[i].info.tac)); + AssertFatal(req->cell[i].info.tac != NULL, "out of memory\n"); + OCTET_STRING_TO_INT16(servedCellInformation->fiveGS_TAC, *req->cell[i].info.tac); + LOG_D(F1AP, "req->tac[%d] %d \n", i, *req->cell[i].info.tac); } /* - nRCGI */ TBCD_TO_MCC_MNC(&(servedCellInformation->nRCGI.pLMN_Identity), - req->cell[i].plmn.mcc, - req->cell[i].plmn.mnc, - req->cell[i].plmn.mnc_digit_length); + req->cell[i].info.plmn.mcc, + req->cell[i].info.plmn.mnc, + req->cell[i].info.plmn.mnc_digit_length); // NR cellID BIT_STRING_TO_NR_CELL_IDENTITY(&servedCellInformation->nRCGI.nRCellIdentity, - req->cell[i].nr_cellid); + req->cell[i].info.nr_cellid); LOG_D(F1AP, "[SCTP %d] Received nRCGI: MCC %d, MNC %d, CELL_ID %llu\n", assoc_id, - req->cell[i].plmn.mcc, - req->cell[i].plmn.mnc, - (long long unsigned int)req->cell[i].nr_cellid); + req->cell[i].info.plmn.mcc, + req->cell[i].info.plmn.mnc, + (long long unsigned int)req->cell[i].info.nr_cellid); /* - nRPCI */ - req->cell[i].nr_pci = servedCellInformation->nRPCI; - LOG_D(F1AP, "req->nr_pci[%d] %d \n", i, req->cell[i].nr_pci); + req->cell[i].info.nr_pci = servedCellInformation->nRPCI; + LOG_D(F1AP, "req->nr_pci[%d] %d \n", i, req->cell[i].info.nr_pci); // FDD Cells if (servedCellInformation->nR_Mode_Info.present==F1AP_NR_Mode_Info_PR_fDD) { diff --git a/openair2/F1AP/f1ap_cu_ue_context_management.c b/openair2/F1AP/f1ap_cu_ue_context_management.c index 6a96bb62f8..f4c1042cad 100644 --- a/openair2/F1AP/f1ap_cu_ue_context_management.c +++ b/openair2/F1AP/f1ap_cu_ue_context_management.c @@ -964,7 +964,7 @@ int CU_send_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance, f1ap_ue_context uint32_t len=0; // for test LOG_W(F1AP, "UE Context Modification Request PLMN is hardcoded!\n"); - cellIDs_t hardCoded= { .plmn.mcc=208, .plmn.mnc=93, .plmn.mnc_digit_length=2}; + f1ap_served_cell_info_t hardCoded= { .plmn.mcc=208, .plmn.mnc=93, .plmn.mnc_digit_length=2}; /* Create */ /* 0. Message Type */ pdu.present = F1AP_F1AP_PDU_PR_initiatingMessage; diff --git a/openair2/F1AP/f1ap_du_interface_management.c b/openair2/F1AP/f1ap_du_interface_management.c index a993d80eff..9b1276285d 100644 --- a/openair2/F1AP/f1ap_du_interface_management.c +++ b/openair2/F1AP/f1ap_du_interface_management.c @@ -144,7 +144,7 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance, f1ap_setup_req_t *setup_req) for (int i=0; icell[i]; + f1ap_served_cell_info_t *cell = &setup_req->cell[i].info; asn1cSequenceAdd(ieCells->value.choice.GNB_DU_Served_Cells_List.list, F1AP_GNB_DU_Served_Cells_ItemIEs_t, duServedCell); duServedCell->id = F1AP_ProtocolIE_ID_id_GNB_DU_Served_Cells_Item; @@ -153,7 +153,7 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance, f1ap_setup_req_t *setup_req) F1AP_GNB_DU_Served_Cells_Item_t *gnb_du_served_cells_item=&duServedCell->value.choice.GNB_DU_Served_Cells_Item; /* 4.1.1 served cell Information */ F1AP_Served_Cell_Information_t *served_cell_information= &gnb_du_served_cells_item->served_Cell_Information; - addnRCGI(served_cell_information->nRCGI,cell); + addnRCGI(served_cell_information->nRCGI, cell); /* - nRPCI */ served_cell_information->nRPCI = cell->nr_pci; // int 0..1007 /* - fiveGS_TAC */ @@ -593,10 +593,10 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance, F1AP_Served_Cells_To_Add_Item_t *served_cells_to_add_item= &served_cells_to_add_item_ies->value.choice.Served_Cells_To_Add_Item; F1AP_Served_Cell_Information_t *served_cell_information=&served_cells_to_add_item->served_Cell_Information; /* - nRCGI */ - addnRCGI(served_cell_information->nRCGI, &f1ap_setup_req->cell[j]); + addnRCGI(served_cell_information->nRCGI, &f1ap_setup_req->cell[j].info); /* - nRPCI */ /* 2.1.1 serverd cell Information */ - cellIDs_t *cell = &f1ap_setup_req->cell[j]; + f1ap_served_cell_info_t *cell = &f1ap_setup_req->cell[j].info; served_cell_information->nRPCI = cell->nr_pci; // int 0..1007 /* - fiveGS_TAC */ if (cell->tac != NULL) { @@ -677,7 +677,7 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance, for (int i=0; i<1; i++) { // - cellIDs_t *cell = &f1ap_setup_req->cell[i]; + f1ap_served_cell_info_t *cell = &f1ap_setup_req->cell[i].info; asn1cSequenceAdd(ie3->value.choice.Served_Cells_To_Modify_List.list, F1AP_Served_Cells_To_Modify_ItemIEs_t, served_cells_to_modify_item_ies); served_cells_to_modify_item_ies->id = F1AP_ProtocolIE_ID_id_Served_Cells_To_Modify_Item; served_cells_to_modify_item_ies->criticality = F1AP_Criticality_reject; @@ -690,11 +690,11 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance, /* - nRCGI */ //addnRGCI(served_cell_information->nRCGI,f1ap_setup_req->cell[i]); /* - nRPCI */ - served_cell_information->nRPCI = f1ap_setup_req->cell[i].nr_pci; // int 0..1007 + served_cell_information->nRPCI = cell->nr_pci; // int 0..1007 /* - fiveGS_TAC */ asn1cCalloc(served_cell_information->fiveGS_TAC, tac ); OCTET_STRING_fromBuf(tac, - (const char *) &f1ap_setup_req->cell[i].tac, + (const char *) &cell->tac, 3); /* - Configured_EPS_TAC */ @@ -777,7 +777,7 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance, served_cells_to_delete_item_ies->value.present = F1AP_Served_Cells_To_Delete_ItemIEs__value_PR_Served_Cells_To_Delete_Item; F1AP_Served_Cells_To_Delete_Item_t *served_cells_to_delete_item=&served_cells_to_delete_item_ies->value.choice.Served_Cells_To_Delete_Item; /* 3.1 oldNRCGI */ - addnRCGI(served_cells_to_delete_item->oldNRCGI, &f1ap_setup_req->cell[i]); + addnRCGI(served_cells_to_delete_item->oldNRCGI, &f1ap_setup_req->cell[i].info); } if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) { diff --git a/openair2/F1AP/f1ap_du_rrc_message_transfer.c b/openair2/F1AP/f1ap_du_rrc_message_transfer.c index 48ca7aa201..e30f26fc6c 100644 --- a/openair2/F1AP/f1ap_du_rrc_message_transfer.c +++ b/openair2/F1AP/f1ap_du_rrc_message_transfer.c @@ -172,7 +172,7 @@ int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instanceP, const f1ap_ini ie2->criticality = F1AP_Criticality_reject; ie2->value.present = F1AP_InitialULRRCMessageTransferIEs__value_PR_NRCGI; //Fixme: takes always the first cell - addnRCGI(ie2->value.choice.NRCGI, getCxt(instanceP)->setupReq.cell); + addnRCGI(ie2->value.choice.NRCGI, &getCxt(instanceP)->setupReq.cell[0].info); /* mandatory */ /* c3. C_RNTI */ // 16 asn1cSequenceAdd(out->protocolIEs.list, F1AP_InitialULRRCMessageTransferIEs_t, ie3); diff --git a/openair2/F1AP/f1ap_du_ue_context_management.c b/openair2/F1AP/f1ap_du_ue_context_management.c index a887c1a812..08c4d6e27b 100644 --- a/openair2/F1AP/f1ap_du_ue_context_management.c +++ b/openair2/F1AP/f1ap_du_ue_context_management.c @@ -459,7 +459,7 @@ int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup &sCell_FailedtoSetup_item_ies->value.choice.SCell_FailedtoSetup_Item; /* sCell_ID */ AssertFatal(false, "handle correct CellID\n"); - cellIDs_t cellID = {0}; + f1ap_served_cell_info_t cellID = {0}; addnRCGI(sCell_FailedtoSetup_item->sCell_ID, &cellID); /* cause */ asn1cCalloc(sCell_FailedtoSetup_item->cause, tmp); @@ -1158,7 +1158,7 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance, f1ap_ue_contex /* 8.1 SCell_ToBeSetup_Item */ F1AP_SCell_FailedtoSetupMod_Item_t *scell_failedtoSetupMod_item=&scell_failedtoSetupMod_item_ies->value.choice.SCell_FailedtoSetupMod_Item; /* - sCell_ID */ - addnRCGI(scell_failedtoSetupMod_item->sCell_ID, &getCxt(instance)->setupReq.cell[i]); + addnRCGI(scell_failedtoSetupMod_item->sCell_ID, &getCxt(instance)->setupReq.cell[i].info); asn1cCalloc(scell_failedtoSetupMod_item->cause, tmp); tmp->present = F1AP_Cause_PR_radioNetwork; tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id; diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c index d4fa30d72f..2e84b56bc3 100644 --- a/openair2/GNB_APP/gnb_config.c +++ b/openair2/GNB_APP/gnb_config.c @@ -1942,27 +1942,27 @@ int RCconfig_NR_DU_F1(MessageDef *msg_p, uint32_t i) { f1Setup->num_cells_available++; f1Setup->gNB_DU_id = *(GNBParamList.paramarray[k][GNB_GNB_ID_IDX].uptr); f1Setup->gNB_DU_name = strdup(*(GNBParamList.paramarray[k][GNB_GNB_NAME_IDX].strptr)); - f1Setup->cell[k].tac = malloc(sizeof(*f1Setup->cell[k].tac)); - AssertFatal(f1Setup->cell[k].tac != NULL, "out of memory\n"); - *f1Setup->cell[k].tac = *GNBParamList.paramarray[k][GNB_TRACKING_AREA_CODE_IDX].uptr; - f1Setup->cell[k].plmn.mcc = *PLMNParamList.paramarray[k][GNB_MOBILE_COUNTRY_CODE_IDX].uptr; - f1Setup->cell[k].plmn.mnc = *PLMNParamList.paramarray[k][GNB_MOBILE_NETWORK_CODE_IDX].uptr; - f1Setup->cell[k].plmn.mnc_digit_length = *PLMNParamList.paramarray[k][GNB_MNC_DIGIT_LENGTH].u8ptr; - AssertFatal((f1Setup->cell[k].plmn.mnc_digit_length == 2) || - (f1Setup->cell[k].plmn.mnc_digit_length == 3), + f1Setup->cell[k].info.tac = malloc(sizeof(*f1Setup->cell[k].info.tac)); + AssertFatal(f1Setup->cell[k].info.tac != NULL, "out of memory\n"); + *f1Setup->cell[k].info.tac = *GNBParamList.paramarray[k][GNB_TRACKING_AREA_CODE_IDX].uptr; + f1Setup->cell[k].info.plmn.mcc = *PLMNParamList.paramarray[k][GNB_MOBILE_COUNTRY_CODE_IDX].uptr; + f1Setup->cell[k].info.plmn.mnc = *PLMNParamList.paramarray[k][GNB_MOBILE_NETWORK_CODE_IDX].uptr; + f1Setup->cell[k].info.plmn.mnc_digit_length = *PLMNParamList.paramarray[k][GNB_MNC_DIGIT_LENGTH].u8ptr; + AssertFatal((f1Setup->cell[k].info.plmn.mnc_digit_length == 2) || + (f1Setup->cell[k].info.plmn.mnc_digit_length == 3), "BAD MNC DIGIT LENGTH %d", - f1Setup->cell[k].plmn.mnc_digit_length); - f1Setup->cell[k].nr_cellid = (uint64_t)*(GNBParamList.paramarray[i][GNB_NRCELLID_IDX].u64ptr); + f1Setup->cell[k].info.plmn.mnc_digit_length); + f1Setup->cell[k].info.nr_cellid = (uint64_t)*(GNBParamList.paramarray[i][GNB_NRCELLID_IDX].u64ptr); LOG_I(GNB_APP, "F1AP: gNB idx %d gNB_DU_id %ld, gNB_DU_name %s, TAC %d MCC/MNC/length %d/%d/%d cellID %ld\n", k, f1Setup->gNB_DU_id, f1Setup->gNB_DU_name, - *f1Setup->cell[k].tac, - f1Setup->cell[k].plmn.mcc, - f1Setup->cell[k].plmn.mnc, - f1Setup->cell[k].plmn.mnc_digit_length, - f1Setup->cell[k].nr_cellid); + *f1Setup->cell[k].info.tac, + f1Setup->cell[k].info.plmn.mcc, + f1Setup->cell[k].info.plmn.mnc, + f1Setup->cell[k].info.plmn.mnc_digit_length, + f1Setup->cell[k].info.nr_cellid); F1AP_DU_REGISTER_REQ(msg_p).net_config = read_DU_IP_config(&RC.nrmac[k]->eth_params_n); @@ -1978,12 +1978,12 @@ int RCconfig_NR_DU_F1(MessageDef *msg_p, uint32_t i) { pthread_mutex_unlock(&rrc->cell_info_mutex); } while (cell_info_configured == 0); - rrc->configuration.mcc[0] = f1Setup->cell[k].plmn.mcc; - rrc->configuration.mnc[0] = f1Setup->cell[k].plmn.mnc; - rrc->configuration.tac = *f1Setup->cell[k].tac; - rrc->nr_cellid = f1Setup->cell[k].nr_cellid; - f1Setup->cell[k].nr_pci = *rrc->configuration.scc->physCellId; - f1Setup->cell[k].num_ssi = 0; + rrc->configuration.mcc[0] = f1Setup->cell[k].info.plmn.mcc; + rrc->configuration.mnc[0] = f1Setup->cell[k].info.plmn.mnc; + rrc->configuration.tac = *f1Setup->cell[k].info.tac; + rrc->nr_cellid = f1Setup->cell[k].info.nr_cellid; + f1Setup->cell[k].info.nr_pci = *rrc->configuration.scc->physCellId; + f1Setup->cell[k].info.num_ssi = 0; if (rrc->configuration.scc->tdd_UL_DL_ConfigurationCommon) { LOG_I(GNB_APP,"ngran_DU: Configuring Cell %d for TDD\n",k); diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index 969ca6c44a..5f57ed6d31 100644 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -1867,9 +1867,9 @@ void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *f1_setup_req) { for (int j=0; jconfiguration.mcc[0] == f1_setup_req->cell[i].plmn.mcc && - rrc->configuration.mnc[0] == f1_setup_req->cell[i].plmn.mnc && - rrc->nr_cellid == f1_setup_req->cell[i].nr_cellid) { + if (rrc->configuration.mcc[0] == f1_setup_req->cell[i].info.plmn.mcc && + rrc->configuration.mnc[0] == f1_setup_req->cell[i].info.plmn.mnc && + rrc->nr_cellid == f1_setup_req->cell[i].info.nr_cellid) { //fixme: multi instance is not consistent here F1AP_SETUP_RESP (msg_p).gNB_CU_name = rrc->node_name; // check that CU rrc instance corresponds to mcc/mnc/cgi (normally cgi should be enough, but just in case) @@ -1902,14 +1902,14 @@ void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *f1_setup_req) { xer_fprint(stdout, &asn_DEF_NR_SIB1,(void *)rrc->carrier.sib1); } - rrc->carrier.physCellId = f1_setup_req->cell[i].nr_pci; + rrc->carrier.physCellId = f1_setup_req->cell[i].info.nr_pci; F1AP_GNB_CU_CONFIGURATION_UPDATE (msg_p2).gNB_CU_name = rrc->node_name; F1AP_GNB_CU_CONFIGURATION_UPDATE(msg_p2).cells_to_activate[cu_cell_ind].plmn.mcc = rrc->configuration.mcc[0]; F1AP_GNB_CU_CONFIGURATION_UPDATE(msg_p2).cells_to_activate[cu_cell_ind].plmn.mnc = rrc->configuration.mnc[0]; F1AP_GNB_CU_CONFIGURATION_UPDATE(msg_p2).cells_to_activate[cu_cell_ind].plmn.mnc_digit_length = rrc->configuration.mnc_digit_length[0]; F1AP_GNB_CU_CONFIGURATION_UPDATE (msg_p2).cells_to_activate[cu_cell_ind].nr_cellid = rrc->nr_cellid; - F1AP_GNB_CU_CONFIGURATION_UPDATE (msg_p2).cells_to_activate[cu_cell_ind].nrpci = f1_setup_req->cell[i].nr_pci; + F1AP_GNB_CU_CONFIGURATION_UPDATE (msg_p2).cells_to_activate[cu_cell_ind].nrpci = f1_setup_req->cell[i].info.nr_pci; int num_SI= 0; if (rrc->carrier.SIB23) { @@ -1925,9 +1925,9 @@ void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *f1_setup_req) { break; } else {// setup_req mcc/mnc match rrc internal list element LOG_W(NR_RRC,"[Inst %d] No matching MCC/MNC: rrc->mcc/f1_setup_req->mcc %d/%d rrc->mnc/f1_setup_req->mnc %d/%d rrc->nr_cellid/f1_setup_req->nr_cellid %ld/%ld \n", - j, rrc->configuration.mcc[0], f1_setup_req->cell[i].plmn.mcc, - rrc->configuration.mnc[0], f1_setup_req->cell[i].plmn.mnc, - rrc->nr_cellid, f1_setup_req->cell[i].nr_cellid); + j, rrc->configuration.mcc[0], f1_setup_req->cell[i].info.plmn.mcc, + rrc->configuration.mnc[0], f1_setup_req->cell[i].info.plmn.mnc, + rrc->nr_cellid, f1_setup_req->cell[i].info.nr_cellid); } }// for (int j=0;j