From 3dbcadf24419aecb16e2d4574a94357c0652142a Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Mon, 17 Jul 2023 13:47:07 +0200 Subject: [PATCH] Refactor F1 Setup Req: TAC is optional --- openair2/COMMON/f1ap_messages_types.h | 2 +- openair2/F1AP/f1ap_cu_interface_management.c | 6 ++++-- openair2/F1AP/f1ap_du_interface_management.c | 16 ++++++++++------ openair2/GNB_APP/gnb_config.c | 8 +++++--- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/openair2/COMMON/f1ap_messages_types.h b/openair2/COMMON/f1ap_messages_types.h index 45564b1518..9ea3a02e00 100644 --- a/openair2/COMMON/f1ap_messages_types.h +++ b/openair2/COMMON/f1ap_messages_types.h @@ -93,7 +93,7 @@ typedef struct f1ap_plmn_t { typedef struct cellIDs_s { // Served Cell Information /* Tracking area code */ - uint32_t tac; + uint32_t *tac; // NR CGI f1ap_plmn_t plmn; diff --git a/openair2/F1AP/f1ap_cu_interface_management.c b/openair2/F1AP/f1ap_cu_interface_management.c index 354b0124c4..76f4235474 100644 --- a/openair2/F1AP/f1ap_cu_interface_management.c +++ b/openair2/F1AP/f1ap_cu_interface_management.c @@ -122,8 +122,10 @@ 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) { - 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].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); } /* - nRCGI */ diff --git a/openair2/F1AP/f1ap_du_interface_management.c b/openair2/F1AP/f1ap_du_interface_management.c index 09549bafdd..a993d80eff 100644 --- a/openair2/F1AP/f1ap_du_interface_management.c +++ b/openair2/F1AP/f1ap_du_interface_management.c @@ -157,9 +157,11 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance, f1ap_setup_req_t *setup_req) /* - nRPCI */ served_cell_information->nRPCI = cell->nr_pci; // int 0..1007 /* - fiveGS_TAC */ - uint32_t tac=htonl(cell->tac); - asn1cCalloc(served_cell_information->fiveGS_TAC, netOrder); - OCTET_STRING_fromBuf(netOrder, ((char *)&tac)+1, 3); + if (cell->tac != NULL) { + uint32_t tac=htonl(*cell->tac); + asn1cCalloc(served_cell_information->fiveGS_TAC, netOrder); + OCTET_STRING_fromBuf(netOrder, ((char *)&tac)+1, 3); + } /* - Configured_EPS_TAC */ if(0) { @@ -597,9 +599,11 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance, cellIDs_t *cell = &f1ap_setup_req->cell[j]; served_cell_information->nRPCI = cell->nr_pci; // int 0..1007 /* - fiveGS_TAC */ - uint32_t tac=htonl(cell->tac); - served_cell_information->fiveGS_TAC=(F1AP_FiveGS_TAC_t *) calloc(1,sizeof(F1AP_FiveGS_TAC_t *)); - OCTET_STRING_fromBuf(served_cell_information->fiveGS_TAC, ((char *)&tac)+1, 3); + if (cell->tac != NULL) { + uint32_t tac = htonl(*cell->tac); + served_cell_information->fiveGS_TAC = calloc(1, sizeof(*served_cell_information->fiveGS_TAC)); + OCTET_STRING_fromBuf(served_cell_information->fiveGS_TAC, ((char *)&tac)+1, 3); + } /* - Configured_EPS_TAC */ if(1) { diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c index 3a15191a0e..d4fa30d72f 100644 --- a/openair2/GNB_APP/gnb_config.c +++ b/openair2/GNB_APP/gnb_config.c @@ -1942,7 +1942,9 @@ 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 = *GNBParamList.paramarray[k][GNB_TRACKING_AREA_CODE_IDX].uptr; + 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; @@ -1956,7 +1958,7 @@ int RCconfig_NR_DU_F1(MessageDef *msg_p, uint32_t i) { k, f1Setup->gNB_DU_id, f1Setup->gNB_DU_name, - f1Setup->cell[k].tac, + *f1Setup->cell[k].tac, f1Setup->cell[k].plmn.mcc, f1Setup->cell[k].plmn.mnc, f1Setup->cell[k].plmn.mnc_digit_length, @@ -1978,7 +1980,7 @@ int RCconfig_NR_DU_F1(MessageDef *msg_p, uint32_t i) { 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->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;