#ifdef O1_ENABLE
#include "AlarmInterface.h"
-#include "ConfigInterface.h"
+#include "CmInterface.h"
#endif
cellCb->cellStatus = ACTIVATION_IN_PROGRESS;
cellCb->cellInfo.nrPci = nRPci;
- duCb.actvCellLst[duCb.numActvCells++] = cellCb;
+ duCb.actvCellLst[cellCb->cellId -1] = cellCb;
+ duCb.numActvCells++;
if(duBuildAndSendMacCellCfg(cellCb->cellId) != ROK)
{
DU_LOG("\nERROR --> DU APP : macCellCfg build and send failed");
/* Delete cell from actvCellList */
- duCb.actvCellLst[--(duCb.numActvCells)] = NULLP;
+ duCb.actvCellLst[cellCb->cellId -1] = NULLP;
+ --(duCb.numActvCells);
ret = RFAILED;
}
return ret;
uint8_t duGetCellCb(uint16_t cellId, DuCellCb **cellCb)
{
uint8_t cellIdx = 0;
- for(cellIdx=0; cellIdx<duCb.numActvCells; cellIdx++)
+ for(cellIdx=0; cellIdx < MAX_NUM_CELL; cellIdx++)
{
- if(duCb.actvCellLst[cellIdx]->cellId == cellId)
+ if(duCb.actvCellLst[cellIdx] && (duCb.actvCellLst[cellIdx]->cellId == cellId))
+ {
*cellCb = duCb.actvCellLst[cellIdx];
- break;
+ break;
+ }
}
if(!*cellCb)
return ROK;
}
+/*****************************************************************
+* @brief Handles slot indication from MAC
+*
+* @details
+*
+* Function : duHandleSlotInd
+*
+* Functionality:
+* Handles slot indication from MAC
+*
+* @params[in] Post structure pointer
+* SlotTimingInfo *slotIndInfo
+* @return ROK - success
+* RFAILED - failure
+*
+*
+*****************************************************************/
+uint8_t duHandleSlotInd(Pst *pst, SlotTimingInfo *slotIndInfo)
+{
+ uint8_t cellIdx = 0, ret = ROK;
+ DuCellCb *duCellCb;
+
+ if(slotIndInfo)
+ {
+ GET_CELL_IDX(slotIndInfo->cellId, cellIdx);
+ duCellCb = duCb.actvCellLst[cellIdx];
+
+ if(duCellCb)
+ {
+ duCellCb->currSlotInfo.sfn = slotIndInfo->sfn;
+ duCellCb->currSlotInfo.slot = slotIndInfo->slot;
+ }
+ else
+ {
+ DU_LOG("\nERROR --> DU APP : CellId[%d] doesnot exist", slotIndInfo->cellId);
+ ret = RFAILED;
+ }
+ DU_FREE_SHRABL_BUF(pst->region, pst->pool, slotIndInfo, sizeof(SlotTimingInfo));
+ }
+ else
+ {
+ DU_LOG("\nERROR --> DU APP : Recevied null pointer from MAC");
+ ret = RFAILED;
+ }
+ return(ret);
+}
/*******************************************************************
*
* @brief Handles cell up indication from MAC
* ****************************************************************/
uint8_t duHandleCellUpInd(Pst *pst, OduCellId *cellId)
{
- DuCellCb *cellCb = NULLP;
+ DuCellCb *cellCb = NULLP;
+
+#ifndef O1_ENABLE
+
+ /*Note: Static Configuration, when O1 is not configuring the RRM policy*/
+ RrmPolicy *rrmPolicy;
+ DU_ALLOC(rrmPolicy, sizeof(RrmPolicy));
+ rrmPolicy->rsrcType = RSRC_PRB;
+ rrmPolicy->numMemberList = 1;
+ DU_ALLOC(rrmPolicy->memberList, sizeof(PolicyMemberList *));
+ DU_ALLOC(rrmPolicy->memberList[0], sizeof(PolicyMemberList));
+
+ memset(&rrmPolicy->memberList[0]->plmn, 0, sizeof(Plmn));
+ rrmPolicy->memberList[0]->snssai.sst = 1;
+ rrmPolicy->memberList[0]->snssai.sd[0] = 2;
+ rrmPolicy->memberList[0]->snssai.sd[1] = 3;
+ rrmPolicy->memberList[0]->snssai.sd[2] = 4;
+ rrmPolicy->policyMinRatio = 30;
+ rrmPolicy->policyMaxRatio = 90;
+ rrmPolicy->policyDedicatedRatio = 10;
+#endif
if(cellId->cellId <=0 || cellId->cellId > MAX_NUM_CELL)
{
gCellStatus = CELL_UP;
#ifdef O1_ENABLE
+ if(duCfgParam.tempSliceCfg.rrmPolicy)
+ BuildAndSendSliceConfigReq(duCfgParam.tempSliceCfg.rrmPolicy, duCfgParam.tempSliceCfg.totalRrmPolicy, duCfgParam.tempSliceCfg.totalSliceCount);
DU_LOG("\nINFO --> DU APP : Raise cell UP alarm for cell id=%d", cellId->cellId);
raiseCellAlrm(CELL_UP_ALARM_ID, cellId->cellId);
setCellOpState(cellId->cellId, ENABLED, ACTIVE);
+#else
+ BuildAndSendSliceConfigReq(&rrmPolicy,1, rrmPolicy->numMemberList);
#endif
+
}
if((pst->selector == ODU_SELECTOR_LWLC) || (pst->selector == ODU_SELECTOR_TC))
{
uint8_t ret = ROK;
uint16_t cellIdx=0;
+
if(deleteRsp)
{
if(deleteRsp->result == SUCCESSFUL_RSP)
{
GET_CELL_IDX(deleteRsp->cellId, cellIdx);
DU_LOG("\nINFO --> DU APP : MAC CELL Delete Response : SUCCESS [CELL IDX : %d]", deleteRsp->cellId);
- if(duCb.actvCellLst[cellIdx]->cellId == deleteRsp->cellId)
+ if(duCb.actvCellLst[cellIdx] && (duCb.actvCellLst[cellIdx]->cellId == deleteRsp->cellId))
{
memset(duCb.actvCellLst[cellIdx], 0, sizeof(DuCellCb));
gCellStatus = CELL_DOWN;
duCb.numActvCells--;
duCb.numCfgCells--;
DU_FREE(duCb.actvCellLst[cellIdx], sizeof(DuCellCb));
+
}
else
{
return RFAILED;
}
- if(duCb.actvCellLst[cellIdx]->numActvUes)
- {
- DU_LOG("\nERROR --> DU APP : duSendCellDeletReq(): Active UEs still present in cellId[%d].\
- Failed to delete cell", cellId);
- return RFAILED;
- }
-
if(duBuildAndSendMacCellStop(cellId) == RFAILED)
{
DU_LOG("\nERROR --> DU APP : duSendCellDeletReq(): Failed to build and send cell stop request to MAC for\