fix CU assert and bugs discovered after

This commit is contained in:
Laurent THOMAS
2021-12-28 11:29:26 +01:00
parent aaf51e688b
commit 2d105be71e
9 changed files with 273 additions and 82 deletions
+56 -6
View File
@@ -127,7 +127,7 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
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 */
TBCD_TO_MCC_MNC(&(servedCellInformation->nRCGI.pLMN_Identity), req->cell[i].mcc,
req->cell[i].mnc,req->cell[i].mnc_digit_length);
@@ -141,15 +141,65 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
/* - nRPCI */
req->cell[i].nr_pci = servedCellInformation->nRPCI;
LOG_D(F1AP, "req->nr_pci[%d] %d \n", i, req->cell[i].nr_pci);
// LTS: FIXME data model failure: we don't KNOW if we receive a 4G or a 5G cell
// Furthermore, cell_type is not a attribute of a cell in the data structure !!!!!!!!!!
if (RC.nrrrc && RC.nrrrc[GNB_INSTANCE_TO_MODULE_ID(instance)]->node_type == ngran_gNB_CU)
f1ap_req(true, instance)->cell_type=CELL_MACRO_GNB;
else
f1ap_req(true, instance)->cell_type=CELL_MACRO_ENB;
// FDD Cells
if (servedCellInformation->nR_Mode_Info.present==F1AP_NR_Mode_Info_PR_fDD) {
struct fdd_s *FDDs=&req->nr_mode_info[i].fdd;
F1AP_FDD_Info_t * fDD_Info=servedCellInformation->nR_Mode_Info.choice.fDD;
FDDs->ul_nr_arfcn=fDD_Info->uL_NRFreqInfo.nRARFCN;
FDDs->ul_num_frequency_bands=fDD_Info->uL_NRFreqInfo.freqBandListNr.list.count;
for (int f=0; f < fDD_Info->uL_NRFreqInfo.freqBandListNr.list.count; f++) {
F1AP_FreqBandNrItem_t * FreqItem=fDD_Info->uL_NRFreqInfo.freqBandListNr.list.array[f];
FDDs->ul_nr_band[f]=FreqItem->freqBandIndicatorNr;
int num_available_supported_SULBands=FreqItem->supportedSULBandList.list.count;
for (int sul=0; sul < num_available_supported_SULBands; sul ++ ) {
F1AP_SupportedSULFreqBandItem_t * SulItem= FreqItem->supportedSULBandList.list.array[sul];
FDDs->ul_nr_sul_band[sul]=SulItem->freqBandIndicatorNr;
}
}
FDDs->dl_nr_arfcn=fDD_Info->dL_NRFreqInfo.nRARFCN;
int dlBands=fDD_Info->dL_NRFreqInfo.freqBandListNr.list.count;
for (int dlB=0; dlB < dlBands; dlB++) {
F1AP_FreqBandNrItem_t * FreqItem=fDD_Info->dL_NRFreqInfo.freqBandListNr.list.array[dlB];
FDDs->dl_nr_band[dlB]=FreqItem->freqBandIndicatorNr;
int num_available_supported_SULBands = FreqItem->supportedSULBandList.list.count;
for (int sul=0; sul < num_available_supported_SULBands; sul ++ ) {
F1AP_SupportedSULFreqBandItem_t * SulItem= FreqItem->supportedSULBandList.list.array[sul];
FDDs->ul_nr_sul_band[sul]=SulItem->freqBandIndicatorNr;
}
}
FDDs->ul_scs=fDD_Info->uL_Transmission_Bandwidth.nRSCS;
FDDs->ul_nrb=nrb_lut[fDD_Info->uL_Transmission_Bandwidth.nRNRB];
FDDs->dl_scs=fDD_Info->dL_Transmission_Bandwidth.nRSCS;
FDDs->dl_nrb=nrb_lut[fDD_Info->dL_Transmission_Bandwidth.nRNRB];
}
// TDD
if (servedCellInformation->nR_Mode_Info.present==F1AP_NR_Mode_Info_PR_tDD) {
struct tdd_s *TDDs=&req->nr_mode_info[i].tdd;
F1AP_TDD_Info_t * tDD_Info=servedCellInformation->nR_Mode_Info.choice.tDD;
TDDs->nr_arfcn=tDD_Info->nRFreqInfo.nRARFCN;
TDDs->num_frequency_bands=tDD_Info->nRFreqInfo.freqBandListNr.list.count;
for (int f=0; f < tDD_Info->nRFreqInfo.freqBandListNr.list.count; f++) {
struct F1AP_FreqBandNrItem * FreqItem=tDD_Info->nRFreqInfo.freqBandListNr.list.array[f];
TDDs->nr_band[f]=FreqItem->freqBandIndicatorNr;
int num_available_supported_SULBands=FreqItem->supportedSULBandList.list.count;
for (int sul=0; sul < num_available_supported_SULBands; sul ++ ) {
struct F1AP_SupportedSULFreqBandItem * SulItem= FreqItem->supportedSULBandList.list.array[sul];
TDDs->nr_sul_band[sul]=SulItem->freqBandIndicatorNr;
}
}
TDDs->scs=tDD_Info->transmission_Bandwidth.nRSCS;
TDDs->nrb=nrb_lut[tDD_Info->transmission_Bandwidth.nRNRB];
}
struct F1AP_GNB_DU_System_Information * DUsi=served_cells_item->gNB_DU_System_Information;
LOG_I(F1AP, "Received Cell in %d context\n", f1ap_req(true, instance)->cell_type==CELL_MACRO_GNB);
// System Information
@@ -168,7 +218,7 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
req->sib1_length[i] = DUsi->sIB1_message.size;
LOG_D(F1AP, "req->sib1[%d] len = %d \n", i, req->sib1_length[i]);
}
// char *measurement_timing_information[F1AP_MAX_NB_CELLS];
// uint8_t ranac[F1AP_MAX_NB_CELLS];
// int fdd_flag = f1ap_setup_req->fdd_flag;
@@ -209,7 +259,7 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
// We copy and store in F1 task data, RRC will free "req" as it frees all itti received messages
message_p = itti_alloc_new_message(TASK_CU_F1, 0, F1AP_SETUP_REQ);
memcpy(&F1AP_SETUP_REQ(message_p), req, sizeof(f1ap_setup_req_t) );
if (req->num_cells_available > 0) {
if (f1ap_req(true, instance)->cell_type == CELL_MACRO_GNB) {
itti_send_msg_to_task(TASK_RRC_GNB, GNB_MODULE_ID_TO_INSTANCE(instance), message_p);
@@ -221,7 +271,7 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
itti_free(TASK_CU_F1,message_p);
return -1;
}
return 0;
}