fix CU assert and bugs discovered after
This commit is contained in:
@@ -443,6 +443,7 @@ typedef enum {
|
||||
CUtype
|
||||
} F1_t;
|
||||
|
||||
static const int nrb_lut[29] = {11, 18, 24, 25, 31, 32, 38, 51, 52, 65, 66, 78, 79, 93, 106, 107, 121, 132, 133, 135, 160, 162, 189, 216, 217, 245, 264, 270, 273};
|
||||
|
||||
uint8_t F1AP_get_next_transaction_identifier(instance_t enb_mod_idP, instance_t cu_mod_idP);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -287,7 +287,7 @@ int CU_handle_UL_RRC_MESSAGE_TRANSFER(instance_t instance,
|
||||
/* RRC Container */
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_ULRRCMessageTransferIEs_t, ie, container,
|
||||
F1AP_ProtocolIE_ID_id_RRCContainer, true);
|
||||
protocol_ctxt_t ctxt;
|
||||
protocol_ctxt_t ctxt={0};
|
||||
ctxt.instance = instance;
|
||||
ctxt.module_id = instance;
|
||||
ctxt.rnti = f1ap_get_rnti_by_cu_id(CUtype, instance, cu_ue_f1ap_id);
|
||||
|
||||
@@ -37,9 +37,6 @@
|
||||
#include "f1ap_du_interface_management.h"
|
||||
#include "assertions.h"
|
||||
|
||||
|
||||
static const int nrb_lut[29] = {11, 18, 24, 25, 31, 32, 38, 51, 52, 65, 66, 78, 79, 93, 106, 107, 121, 132, 133, 135, 160, 162, 189, 216, 217, 245, 264, 270, 273};
|
||||
|
||||
int to_NRNRB(int nrb) {
|
||||
for (int i=0; i<sizeofArray(nrb_lut); i++)
|
||||
if (nrb_lut[i] == nrb)
|
||||
|
||||
@@ -211,15 +211,13 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
|
||||
AssertFatal(rrcConnectionSetup!=NULL,"rrcConnectionSetup is null\n");
|
||||
LTE_RadioResourceConfigDedicated_t *radioResourceConfigDedicated = &rrcConnectionSetup->criticalExtensions.choice.c1.choice.rrcConnectionSetup_r8.radioResourceConfigDedicated;
|
||||
// get SRB logical channel information
|
||||
LTE_SRB_ToAddModList_t *SRB_configList;
|
||||
LTE_SRB_ToAddMod_t *SRB1_config;
|
||||
LTE_LogicalChannelConfig_t *SRB1_logicalChannelConfig = NULL;
|
||||
SRB_configList = radioResourceConfigDedicated->srb_ToAddModList;
|
||||
LTE_SRB_ToAddModList_t *SRB_configList = radioResourceConfigDedicated->srb_ToAddModList;
|
||||
AssertFatal(SRB_configList!=NULL,"SRB_configList is null\n");
|
||||
LTE_LogicalChannelConfig_t *SRB1_logicalChannelConfig = NULL;
|
||||
|
||||
for (int cnt = 0; cnt < (SRB_configList)->list.count; cnt++) {
|
||||
if ((SRB_configList)->list.array[cnt]->srb_Identity == 1) {
|
||||
SRB1_config = (SRB_configList)->list.array[cnt];
|
||||
LTE_SRB_ToAddMod_t * SRB1_config = (SRB_configList)->list.array[cnt];
|
||||
|
||||
if (SRB1_config->logicalChannelConfig) {
|
||||
if (SRB1_config->logicalChannelConfig->present ==
|
||||
@@ -411,7 +409,7 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
|
||||
ue_context_p->ue_context.Srb2.Srb_info.Srb_id=2;
|
||||
LOG_I(F1AP, "[DU %ld] SRB2 is now active\n",ctxt.instance);
|
||||
} else {
|
||||
LOG_W(F1AP, "[DU %ld] invalide SRB identity %ld\n",ctxt.instance,
|
||||
LOG_W(F1AP, "[DU %ld] invalid SRB identity %ld\n",ctxt.instance,
|
||||
SRB_configList->list.array[i]->srb_Identity);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user