[Epic-ID: ODUHIGH-406][Task-ID: ODUHIGH-423] Fixes in DU APP to support cell ID other...
[o-du/l2.git] / src / du_app / du_cell_mgr.c
index cb7439d..a86d418 100644 (file)
@@ -87,13 +87,15 @@ uint8_t duProcCellsToBeActivated(uint8_t *plmnStr, uint16_t nci, uint16_t nRPci)
    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;
@@ -138,11 +140,13 @@ void duProcF1SetupRsp()
 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)
@@ -174,7 +178,27 @@ uint8_t duGetCellCb(uint16_t cellId, DuCellCb **cellCb)
 uint8_t duHandleCellUpInd(Pst *pst, OduCellId *cellId)
 {
    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)
    {
       DU_LOG("\nERROR  -->  DU APP : Invalid Cell Id %d in duHandleCellUpInd()", cellId->cellId);
@@ -189,14 +213,17 @@ uint8_t duHandleCellUpInd(Pst *pst, OduCellId *cellId)
       DU_LOG("\nINFO   -->  DU APP : 5G-NR Cell %d is UP", cellId->cellId);
       cellCb->cellStatus = ACTIVATED;
       gCellStatus = CELL_UP;
-     
-      if(duCfgParam.tempSliceCfg.rrmPolicy)
-           BuildAndSendSliceConfigReq(duCfgParam.tempSliceCfg.rrmPolicy, duCfgParam.tempSliceCfg.totalRrmPolicy, duCfgParam.tempSliceCfg.totalSliceCount);
+
 #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))
@@ -231,7 +258,7 @@ uint8_t DuProcMacCellDeleteRsp(Pst *pst, MacCellDeleteRsp *deleteRsp)
       {
          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;