#include "CFRA-SSB-Resource.h"
#include "BWP-UplinkCommon.h"
#include "ReconfigurationWithSync.h"
+#include "BCCH-DL-SCH-Message.h"
#include "du_sys_info_hdl.h"
#include "DRX-ConfigRrc.h"
#include "MeasurementTimingConfigurationRrc.h"
#include "MeasurementTimingConfigurationRrc-IEs.h"
#include "MeasTimingList.h"
#include "MeasTiming.h"
+#include "Cells-Status-List.h"
+#include "Cells-Status-Item.h"
#ifdef O1_ENABLE
#include "CmInterface.h"
for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
{
DU_ALLOC(duServedCell->list.array[plmnidx],\
- sizeof(GNB_DU_Served_Cells_ItemIEs_t));
+ sizeof(GNB_DU_Served_Cells_ItemIEs_t));
if(duServedCell->list.array[plmnidx] == NULLP)
{
- return RFAILED;
+ return RFAILED;
}
}
idx = 0;
duServedCell->list.array[idx]->id = ProtocolIE_ID_id_GNB_DU_Served_Cells_Item;
duServedCell->list.array[idx]->criticality = Criticality_reject;
duServedCell->list.array[idx]->value.present = \
- GNB_DU_Served_Cells_ItemIEs__value_PR_GNB_DU_Served_Cells_Item;
+ GNB_DU_Served_Cells_ItemIEs__value_PR_GNB_DU_Served_Cells_Item;
srvCellItem = \
- &duServedCell->list.array[idx]->value.choice.GNB_DU_Served_Cells_Item;
+ &duServedCell->list.array[idx]->value.choice.GNB_DU_Served_Cells_Item;
/*nRCGI*/
BuildNrcgiret = BuildNrcgi(&srvCellItem->served_Cell_Information.nRCGI);
if(BuildNrcgiret != ROK)
}
/*nRPCI*/
srvCellItem->served_Cell_Information.nRPCI = \
- duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrPci;
+ duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrPci;
/* fiveGS_TAC */
BuildFiveGSTacret = BuildFiveGSTac(&srvCellItem->served_Cell_Information);
/* GNB DU System Information */
DU_ALLOC(srvCellItem->gNB_DU_System_Information,
- sizeof(GNB_DU_System_Information_t));
+ sizeof(GNB_DU_System_Information_t));
if(!srvCellItem->gNB_DU_System_Information)
{
return RFAILED;
/* MIB */
srvCellItem->gNB_DU_System_Information->mIB_message.size = duCfgParam.srvdCellLst[0].duSysInfo.mibLen;
DU_ALLOC(srvCellItem->gNB_DU_System_Information->mIB_message.buf,
- srvCellItem->gNB_DU_System_Information->mIB_message.size);
+ srvCellItem->gNB_DU_System_Information->mIB_message.size);
if(!srvCellItem->gNB_DU_System_Information->mIB_message.buf)
{
return RFAILED;
}
memcpy(srvCellItem->gNB_DU_System_Information->mIB_message.buf, duCfgParam.srvdCellLst[0].duSysInfo.mibMsg, \
- srvCellItem->gNB_DU_System_Information->mIB_message.size);
+ srvCellItem->gNB_DU_System_Information->mIB_message.size);
/* SIB1 */
srvCellItem->gNB_DU_System_Information->sIB1_message.size =\
- duCfgParam.srvdCellLst[0].duSysInfo.sib1Len;
+ duCfgParam.srvdCellLst[0].duSysInfo.sib1Len;
DU_ALLOC(srvCellItem->gNB_DU_System_Information->sIB1_message.buf,
- srvCellItem->gNB_DU_System_Information->sIB1_message.size);
+ srvCellItem->gNB_DU_System_Information->sIB1_message.size);
if(!srvCellItem->gNB_DU_System_Information->sIB1_message.buf)
{
return RFAILED;
for(int x=0; x<srvCellItem->gNB_DU_System_Information->sIB1_message.size; x++)
{
srvCellItem->gNB_DU_System_Information->sIB1_message.buf[x]=\
- duCfgParam.srvdCellLst[0].duSysInfo.sib1Msg[x];
+ duCfgParam.srvdCellLst[0].duSysInfo.sib1Msg[x];
}
return ROK;
}
elementCnt = 5;
f1SetupReq->protocolIEs.list.count = elementCnt;
- f1SetupReq->protocolIEs.list.size = elementCnt * sizeof(F1SetupRequestIEs_t );
+ f1SetupReq->protocolIEs.list.size = elementCnt * sizeof(F1SetupRequestIEs_t *);
/* Initialize the F1Setup members */
DU_ALLOC(f1SetupReq->protocolIEs.list.array,f1SetupReq->protocolIEs.list.size);
}
}
DU_FREE(modifyItem->served_Cell_Information.measurementTimingConfiguration.buf,\
- modifyItem->served_Cell_Information.measurementTimingConfiguration.size);
+ modifyItem->served_Cell_Information.measurementTimingConfiguration.size);
}
/*******************************************************************
* ****************************************************************/
void FreeDUConfigUpdate(F1AP_PDU_t *f1apDuCfg)
{
- uint8_t ieIdx=0, cellModifyIdx=0, cellDeleteIdx=0;
+ uint8_t idx=0,ieIdx=0, cellModifyIdx=0, cellDeleteIdx=0;
GNBDUConfigurationUpdate_t *duCfgUpdate = NULLP;
Served_Cells_To_Modify_List_t *cellsToModify=NULLP;
Served_Cells_To_Delete_List_t *cellsToDelete=NULLP;
Served_Cells_To_Delete_Item_t *deleteItem = NULLP;
Served_Cells_To_Delete_ItemIEs_t *deleteItemIe = NULLP;
+ Cells_Status_ItemIEs_t *cellStatusItemIE;
if(f1apDuCfg != NULLP)
{
duCfgUpdate->protocolIEs.list.array[ieIdx]->value.choice.GNB_DU_ID.size);
break;
}
+ case ProtocolIE_ID_id_Cells_Status_List:
+ {
+ for(idx = 0; idx < duCfgUpdate->protocolIEs.list.array[ieIdx]->value.choice.Cells_Status_List.list.count; idx++)
+ {
+ cellStatusItemIE = (Cells_Status_ItemIEs_t *)duCfgUpdate->protocolIEs.list.array[ieIdx]->value.choice.Cells_Status_List.list.array[idx];
+ DU_FREE(cellStatusItemIE->value.choice.Cells_Status_Item.nRCGI.nRCellIdentity.buf, cellStatusItemIE->value.choice.Cells_Status_Item.nRCGI.nRCellIdentity.size);
+ DU_FREE(cellStatusItemIE->value.choice.Cells_Status_Item.nRCGI.pLMN_Identity.buf, cellStatusItemIE->value.choice.Cells_Status_Item.nRCGI.pLMN_Identity.size);
+ DU_FREE(duCfgUpdate->protocolIEs.list.array[ieIdx]->value.choice.Cells_Status_List.list.array[idx],sizeof(Cells_Status_ItemIEs_t));
+ }
+ DU_FREE(duCfgUpdate->protocolIEs.list.array[ieIdx]->value.choice.Cells_Status_List.list.array,\
+ duCfgUpdate->protocolIEs.list.array[ieIdx]->value.choice.Cells_Status_List.list.size);
+ }
}
DU_FREE(duCfgUpdate->protocolIEs.list.array[ieIdx],\
sizeof(GNBDUConfigurationUpdateIEs_t));
fillBitString(&deleteItem->oldNRCGI.nRCellIdentity, ODU_VALUE_FOUR, ODU_VALUE_FIVE, duCfgParam.sib1Params.cellIdentity);
return ROK;
}
+
/*******************************************************************
*
* @brief Builds ServCellToDeleteList
return ROK;
}
+/*******************************************************************
+ *
+ * @brief Builds CellsStatusList
+ *
+ * @details
+ *
+ * Function : buildCellsStatusList
+ *
+ * Functionality: Builds the Cell Status List
+ *
+ * @params[in] Pointer to Cells_Status_List_t *
+ *
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ *****************************************************************/
+uint8_t buildCellsStatusList(Cells_Status_List_t *cellStatusList)
+{
+ uint8_t elementCnt = 0, idx = 0, ret = ROK;
+ Cells_Status_ItemIEs_t *cellStatusItemIE;
+
+ elementCnt = 1;
+ cellStatusList->list.count = elementCnt;
+ cellStatusList->list.size = elementCnt * sizeof(Cells_Status_ItemIEs_t *);
+ DU_ALLOC(cellStatusList->list.array, cellStatusList->list.size);
+
+ for(idx = 0; idx < elementCnt; idx++)
+ {
+ DU_ALLOC(cellStatusList->list.array[idx], sizeof(Cells_Status_ItemIEs_t));
+ if(!cellStatusList->list.array[idx])
+ {
+ DU_LOG("ERROR --> F1AP: buildCellsStatusList() memory allocation failure");
+ return RFAILED;
+ }
+ }
+ idx = 0;
+ cellStatusItemIE = (Cells_Status_ItemIEs_t *)cellStatusList->list.array[idx];
+ cellStatusItemIE->id = ProtocolIE_ID_id_Cells_Status_Item;
+ cellStatusItemIE->criticality = Criticality_reject;
+ cellStatusItemIE->value.present = Cells_Status_ItemIEs__value_PR_Cells_Status_Item;
+ ret = BuildNrcgi(&cellStatusItemIE->value.choice.Cells_Status_Item.nRCGI);
+ if(ret == RFAILED)
+ {
+ DU_LOG("ERROR --> F1AP: buildCellsStatusList() NRCGI failed");
+ return RFAILED;
+ }
+ cellStatusItemIE->value.choice.Cells_Status_Item.service_status.service_state = Service_State_in_service;
+ return ROK;
+}
+
/*******************************************************************
*
* @brief Builds and sends the DUConfigUpdate
InitiatingMessage__value_PR_GNBDUConfigurationUpdate;
duCfgUpdate = &f1apDuCfg->choice.initiatingMessage->value.\
choice.GNBDUConfigurationUpdate;
- elementCnt = 3;
+ elementCnt = 4;
duCfgUpdate->protocolIEs.list.count = elementCnt;
duCfgUpdate->protocolIEs.list.size = \
elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t*);
}
}
- // NOTE :GNB DU SYS INFO:MIB AND SIB1 INFORMATION TO BE BUILT AND FILLED HERE
+ // TODO :GNB DU SYS INFO:MIB AND SIB1 INFORMATION TO BE BUILT AND FILLED HERE
+
+ /*Cell Status List*/
+ ieIdx++;
+ duCfgUpdate->protocolIEs.list.array[ieIdx]->id = ProtocolIE_ID_id_Cells_Status_List;
+ duCfgUpdate->protocolIEs.list.array[ieIdx]->criticality = Criticality_reject;
+ duCfgUpdate->protocolIEs.list.array[ieIdx]->value.present = \
+ GNBDUConfigurationUpdateIEs__value_PR_Cells_Status_List;
+ ret = buildCellsStatusList(&duCfgUpdate->protocolIEs.list.array[ieIdx]->value.choice.Cells_Status_List);
+ if(ret == RFAILED)
+ {
+ DU_LOG("ERROR --> DU APP : BuildAndSendDUConfigUpdate(): Cell Status List building failed");
+ break;
+ }
+
/*GNB DU ID */
ieIdx++;
duCfgUpdate->protocolIEs.list.array[ieIdx]->id = ProtocolIE_ID_id_gNB_DU_ID;