[Epic-ID: ODUHIGH-406][Task-ID: ODUHIGH-423]Cleanup of hoUeCb[]
[o-du/l2.git] / src / du_app / du_ue_mgr.c
index 7a55d58..f63e47d 100644 (file)
@@ -514,36 +514,6 @@ uint8_t duProcDlRrcMsg(F1DlRrcMsg *dlRrcMsg)
    return ret;
 }
 
-/******************************************************************
- *
- * @brief Generates GNB DU Ue F1AP ID
- *
- * @details
- *
- *    Function : genGnbDuUeF1apId
- *
- *    Functionality: Generates GNB DU Ue F1AP ID
- *
- * @params[in] void
- * @return gnbDuF1apId
- *
- * ****************************************************************/
-int32_t genGnbDuUeF1apId(uint8_t cellId)
-{
-    uint8_t cellIdx =0;
-
-    GET_CELL_IDX(cellId, cellIdx);
-    if(duCb.actvCellLst[cellIdx])
-    {
-       return  ++duCb.gnbDuUeF1apIdGenerator;
-    }
-    else
-    {
-       DU_LOG("ERROR  --> DU_APP : genGnbDuUeF1apId(): CellId[%d] does not exist", cellId);
-    }
-    return -1;
-}
-
 /******************************************************************
  *
  * @brief Processes UL CCCH Ind recvd from MAC
@@ -565,14 +535,16 @@ uint8_t duProcUlCcchInd(UlCcchIndInfo *ulCcchIndInfo)
    uint8_t ret = ROK;
    int32_t gnbDuUeF1apId = 0;
 
-   gnbDuUeF1apId = genGnbDuUeF1apId(ulCcchIndInfo->cellId);
-   
-   if(gnbDuUeF1apId == -1)
+   if(ulCcchIndInfo->crnti)
    {
-      DU_LOG("ERROR  --> DU_APP : duProcUlCcchInd(): Received cellId[%d] does not exist", ulCcchIndInfo->cellId);
+      GET_UE_ID(ulCcchIndInfo->crnti, gnbDuUeF1apId);
+   }
+   else
+   {
+      DU_LOG("\nERROR  -->  DU_APP : Received invalid CRNTI [%d] ", ulCcchIndInfo->crnti);
       return RFAILED;
    }
-
+   
    /* Store Ue mapping */
    duCb.ueCcchCtxt[duCb.numUe].gnbDuUeF1apId = (uint32_t)gnbDuUeF1apId;
    duCb.ueCcchCtxt[duCb.numUe].crnti         = ulCcchIndInfo->crnti;
@@ -1197,13 +1169,9 @@ uint8_t fillMacUeCfg(uint16_t cellId, uint8_t gnbDuUef1apId, uint16_t crnti, DuU
    bool lcIdFound = false;
    MacUeCfg *duMacDb = NULLP;
 
-   macUeCfg->cellId       = cellId;
-   if(crnti)
-   {
-      GET_UE_ID(crnti, macUeCfg->ueId);
-      macUeCfg->crnti = crnti;
-   }
-   macUeCfg->duUeF1apId = gnbDuUef1apId;
+   macUeCfg->cellId = cellId;
+   macUeCfg->ueId = gnbDuUef1apId;
+   macUeCfg->crnti = crnti;
 
    if(!ueCfgDb)
    {
@@ -1223,12 +1191,19 @@ uint8_t fillMacUeCfg(uint16_t cellId, uint8_t gnbDuUef1apId, uint16_t crnti, DuU
    }
    else
    {
+      if(ueCfgDb->dataTransmissionAction == STOP_TRANSMISSION)
+      {
+         macUeCfg->transmissionAction = ueCfgDb->dataTransmissionAction; 
+         return ROK;
+      }
+      
       /* Fetching MacDb from DuUeCb.
        * In case of UE hand-in, UE context is created before RRC setup. Hence
        * crnti is not known yet. Thus, passing crnti=0 to this function.
        * In such a case actvCellLst doesnt yet have any entry for this UE. So
        * duMacDb will be NULL.
        */
+      
       if(crnti != 0)
       {
          GET_CELL_IDX(cellId, cellIdx);
@@ -1241,7 +1216,7 @@ uint8_t fillMacUeCfg(uint16_t cellId, uint8_t gnbDuUef1apId, uint16_t crnti, DuU
          }
          duMacDb->macUeCfgState = UE_CFG_INPROGRESS;
       }
-
+      
       if(ueCfgDb->cellGrpCfg)
       {
          ret = procUeReCfgCellInfo(macUeCfg, duMacDb, ueCfgDb->cellGrpCfg);
@@ -1671,6 +1646,7 @@ uint8_t fillRlcUeCfg(uint16_t cellId, uint8_t ueId, DuUeCfg *ueCfgDb, RlcUeCfg *
       /*Filling RlcUeCfg */
       rlcUeCfg->cellId       = cellId;
       rlcUeCfg->ueId         = ueId;
+
       for(dbIdx = 0; (dbIdx < ueCfgDb->numRlcLcs && ret == ROK); dbIdx++)
       {
          ret = fillDefaultRlcModeCfg(ueCfgDb->rlcLcCfg[dbIdx].rlcMode, &ueCfgDb->rlcLcCfg[dbIdx]);
@@ -2360,64 +2336,43 @@ uint8_t duUpdateDuUeCbCfg(uint8_t ueId, uint8_t cellId)
  * ****************************************************************/
 uint8_t DuProcMacUeCfgRsp(Pst *pst, MacUeCfgRsp *cfgRsp)
 {
-   uint8_t ret = ROK, ueIdx = 0, ueId = 0;
-   DuUeCb *ueCb = NULLP;
+   uint8_t ret = ROK;
+   uint16_t cellIdx;
 
    if(cfgRsp)
    {
+      GET_CELL_IDX(cfgRsp->cellId, cellIdx);
       if(cfgRsp->result == MAC_DU_APP_RSP_OK)
       {
          if(pst->event == EVENT_MAC_UE_CREATE_RSP)
          {
-            DU_LOG("\nINFO   -->  DU APP : MAC UE Create Response : SUCCESS [DU UE F1AP ID : %d]", cfgRsp->duUeF1apId);
-            
-            for(ueIdx = 0; ueIdx < MAX_NUM_UE; ueIdx++)
-            {
-               if(duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[ueIdx].gnbDuUeF1apId == cfgRsp->duUeF1apId)
-               {
-                  ueCb = &duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[ueIdx];
-                  ueCb->macUeCfg.macUeCfgState = UE_CREATE_COMPLETE;
-                  break;
-               }
-            }
-            if(!ueCb)
+            DU_LOG("\nINFO   -->  DU APP : MAC UE Create Response : SUCCESS [DU UE F1AP ID : %d]", cfgRsp->ueId);
+
+            if(duCb.actvCellLst[cellIdx] && 
+                  (duCb.actvCellLst[cellIdx]->ueCb[cfgRsp->ueId -1].gnbDuUeF1apId == cfgRsp->ueId))
             {
-               if(duCb.actvCellLst[cfgRsp->cellId -1]->hoUeCb[cfgRsp->duUeF1apId-1].gnbDuUeF1apId == cfgRsp->duUeF1apId)
-               {
-                  ueCb = &duCb.actvCellLst[cfgRsp->cellId -1]->hoUeCb[cfgRsp->duUeF1apId-1];
-                  ueCb->macUeCfg.macUeCfgState = UE_CREATE_COMPLETE;
-                  //TODO : in next gerrit
-                  //BuildAndSendUeCtxtRsp(cfgRsp->cellId, cfgRsp->ueId);
-               }
-            }
+               duCb.actvCellLst[cellIdx]->ueCb[cfgRsp->ueId -1].macUeCfg.macUeCfgState = UE_CREATE_COMPLETE;
 
+               /* TODO : IF UE state is HANDIN_IN_PROGRESS, then send UE Context Setup Response */
+            }
          }
          else if(pst->event == EVENT_MAC_UE_RECONFIG_RSP)
          {
-            DU_LOG("\nINFO   -->  DU APP : MAC UE Reconfig Response : SUCCESS [DU UE F1AP ID : %d]", cfgRsp->duUeF1apId);
-            for(ueIdx = 0; ueIdx < MAX_NUM_UE; ueIdx++)
+            DU_LOG("\nINFO   -->  DU APP : MAC UE Reconfig Response : SUCCESS [DU UE F1AP ID : %d]", cfgRsp->ueId);
+            if(duCb.actvCellLst[cellIdx] && 
+                  (duCb.actvCellLst[cellIdx]->ueCb[cfgRsp->ueId -1].gnbDuUeF1apId == cfgRsp->ueId))
             {
-               if(duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[ueIdx].gnbDuUeF1apId == cfgRsp->duUeF1apId)
-               {
-                  ueCb = &duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[ueIdx];    
-                  ueCb->macUeCfg.macUeCfgState = UE_RECFG_COMPLETE;
-                  break;
-               }
-            } 
-
-            if(ueCb)
-            {
-               GET_UE_ID(ueCb->crnti, ueId);
-               if((ret = duUpdateDuUeCbCfg(ueId, cfgRsp->cellId)) == ROK)
-               {
-                  BuildAndSendUeCtxtRsp(cfgRsp->cellId, ueId);
+               duCb.actvCellLst[cellIdx]->ueCb[cfgRsp->ueId -1].macUeCfg.macUeCfgState = UE_RECFG_COMPLETE;
+               if((ret = duUpdateDuUeCbCfg(cfgRsp->ueId, cfgRsp->cellId)) == ROK)
+               {  
+                  BuildAndSendUeCtxtRsp(cfgRsp->cellId, cfgRsp->ueId);
                }
             }
          }
       }
       else
       {
-         DU_LOG("\nERROR  -->  DU APP : MAC UE CFG Response for EVENT[%d]: FAILURE [DU UE F1AP ID : %d]", pst->event, cfgRsp->duUeF1apId);
+         DU_LOG("\nERROR  -->  DU APP : MAC UE CFG Response for EVENT[%d]: FAILURE [DU UE F1AP ID : %d]", pst->event, cfgRsp->ueId);
          if(pst->event == EVENT_MAC_UE_RECONFIG_RSP)
          {
             //TODO: Send the failure case in Ue Context Setup Response
@@ -3004,11 +2959,13 @@ void deleteMacUeCfg(MacUeCfg *ueCfg)
 *         RFAILED - failure
 *
 * ****************************************************************/
-uint8_t  deleteUeCfg(uint16_t cellIdx, uint8_t ueId)
+uint8_t  deleteUeCfg(uint16_t cellId, uint8_t ueId)
 {
    uint8_t tnlIdx = 0;
+   uint16_t cellIdx = 0;
    DuUeCb *ueCb = NULLP;
    
+   GET_CELL_IDX(cellId, cellIdx);
    if(duCb.actvCellLst[cellIdx] != NULLP)
    {
       if((duCb.actvCellLst[cellIdx]->ueCb[ueId-1].macUeCfg.macUeCfgState == UE_DELETE_COMPLETE)\
@@ -3031,6 +2988,7 @@ uint8_t  deleteUeCfg(uint16_t cellIdx, uint8_t ueId)
             else
                tnlIdx++;
          }
+         unsetBitInUeBitMap(cellId, ueId-1);
          duCb.actvCellLst[cellIdx]->numActvUes--;
          memset(ueCb, 0, sizeof(DuUeCb));
       }
@@ -3080,9 +3038,9 @@ uint8_t DuProcMacUeDeleteRsp(Pst *pst, MacUeDeleteRsp *deleteRsp)
          {
             duCb.actvCellLst[cellIdx]->ueCb[deleteRsp->ueId -1].macUeCfg.macUeCfgState = UE_DELETE_COMPLETE;
             ueId = deleteRsp->ueId;
-            gnbCuUeF1apId = duCb.actvCellLst[cellIdx]->ueCb[ueId-1].gnbDuUeF1apId;
-            gnbDuUeF1apId = duCb.actvCellLst[cellIdx]->ueCb[ueId-1].gnbCuUeF1apId;
-            if(deleteUeCfg(cellIdx, ueId) == ROK)
+            gnbCuUeF1apId = duCb.actvCellLst[cellIdx]->ueCb[ueId-1].gnbCuUeF1apId;
+            gnbDuUeF1apId = duCb.actvCellLst[cellIdx]->ueCb[ueId-1].gnbDuUeF1apId;
+            if(deleteUeCfg(deleteRsp->cellId, ueId) == ROK)
             {
                ret = BuildAndSendUeContextReleaseComplete(deleteRsp->cellId, gnbCuUeF1apId, gnbDuUeF1apId);
                if(ret != ROK)