Renaming GET_UE_IDX to GET_UE_ID in RLC and its interfaces [Issue-ID: ODUHIGH-401]
[o-du/l2.git] / src / du_app / du_ue_mgr.c
index a5594da..74fe66d 100644 (file)
@@ -36,7 +36,7 @@
 
 #ifdef O1_ENABLE
 #include "AlarmInterface.h"
-#include "ConfigInterface.h"
+#include "CmInterface.h"
 #endif
 
 DuMacDlCcchInd packMacDlCcchIndOpts[] =
@@ -102,50 +102,6 @@ DuRlcUeDeleteReq packRlcUeDeleteReqOpts[] =
    packDuRlcUeDeleteReq        /* Light weight-loose coupling */
 };
 
-
-/******************************************************************
- *
- * @brief Function to fetch lcId based on DRB Id
- *
- * @details
- *
- *    Function : fetchLcId
- *
- *    @params[in] drbId
- *
- *    Functionality: Function to fetch lcId based on DRB Id
- *
- * Returns: lcId - SUCCESS
- *          RFAILED - FAILURE
- *****************************************************************/
-
-uint8_t fetchLcId(uint8_t drbId)
-{
-   uint8_t cellIdx = 0, ueIdx = 0, lcIdx = 0, numLcs = 0, lcId = 0;
-
-   for(cellIdx = 0; cellIdx < MAX_NUM_CELL; cellIdx++)
-   {
-      for(ueIdx = 0; ueIdx < MAX_NUM_UE; ueIdx++)
-      {
-         if(duCb.actvCellLst[cellIdx] != NULLP)
-         {
-            numLcs = duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg.numLcs;
-            for(lcIdx = 0; lcIdx < numLcs; lcIdx++)
-            {
-               if(duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg.rlcLcCfg[lcIdx].rbId == drbId && \
-                  duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg.rlcLcCfg[lcIdx].rbType == RB_TYPE_DRB)
-               {
-                  lcId = duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg.rlcLcCfg[lcIdx].lcId;
-                  return lcId;
-               }
-            }
-         }
-      }
-   }
-   DU_LOG("\nERROR   -->  DU_APP: fetchLcId() failed for drbId %d", drbId);
-   return RFAILED;
-}
-
 /******************************************************************
  *
  * @brief Function to return Drb LcId
@@ -204,19 +160,20 @@ uint8_t getDrbLcId(uint32_t *drbBitMap)
 
 uint8_t fillDlUserDataInfo(uint32_t teId, RlcDlUserDataInfo *dlDataMsgInfo)
 {
-   uint8_t drbIdx;
+   uint8_t teIdx = 0;
 
-   for(drbIdx = 0; drbIdx < duCb.numDrb; drbIdx++)
+   /*Traversing the duCb to find the CellId, UeId, LCID corresponding to TEID*/
+   for(teIdx = 0; teIdx < duCb.numTeId; teIdx++)
    {
-      if(duCb.upTnlCfg[drbIdx] && (duCb.upTnlCfg[drbIdx]->tnlCfg1 != NULLP))
+      if(duCb.upTnlCfg[teIdx] && (duCb.upTnlCfg[teIdx]->tnlCfg1 != NULLP))
       {
-        if(duCb.upTnlCfg[drbIdx]->tnlCfg1->teId == teId)
-       {
-          dlDataMsgInfo->cellId = duCb.upTnlCfg[drbIdx]->cellId;
-          dlDataMsgInfo->ueIdx = duCb.upTnlCfg[drbIdx]->ueIdx;
-           dlDataMsgInfo->rbId = duCb.upTnlCfg[drbIdx]->drbId;
-          return ROK;
-       }
+         if(duCb.upTnlCfg[teIdx]->tnlCfg1->teId == teId)
+         {
+            dlDataMsgInfo->cellId = duCb.upTnlCfg[teIdx]->cellId;
+            dlDataMsgInfo->ueId = duCb.upTnlCfg[teIdx]->ueIdx;
+            dlDataMsgInfo->rbId = duCb.upTnlCfg[teIdx]->drbId;
+            return ROK;
+         }
       }
    }
    return RFAILED;
@@ -312,7 +269,6 @@ uint8_t duHdlEgtpDlData(EgtpMsg  *egtpMsg)
    if(duBuildAndSendDlUserDataToRlc(msgLen, egtpMsg) != ROK)
    {
       DU_LOG("\nERROR  -->  DU_APP : Failed to build DL USer Data in duHdlEgtpDlData()");
-      DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, egtpMsg->msg, msgLen);
       return RFAILED;
    }
    return ROK;
@@ -430,7 +386,7 @@ uint8_t duBuildAndSendDlRrcMsgToRlc(uint16_t cellId, RlcUeCfg ueCfg, F1DlRrcMsg
    
    /* Filling up the RRC msg info */
    dlRrcMsgInfo->cellId = cellId;
-   dlRrcMsgInfo->ueIdx = ueCfg.ueIdx;
+   dlRrcMsgInfo->ueId = ueCfg.ueId;
    for(lcIdx = 0; lcIdx <= MAX_NUM_LC; lcIdx++)
    {
       if(ueCfg.rlcLcCfg[lcIdx].lcId == f1DlRrcMsg->srbId)
@@ -691,7 +647,7 @@ void fillDefaultInitDlBwp(InitialDlBwp *initDlBwp)
            coreset1StartPrb = coreset0EndPrb +6;
            coreset1NumPrb = CORESET1_NUM_PRB;
            /* calculate the PRBs */
-           freqDomRscAllocType0(((coreset1StartPrb)/6), (coreset1NumPrb/6), freqDomainResource);
+           fillCoresetFeqDomAllocMap(((coreset1StartPrb)/6), (coreset1NumPrb/6), freqDomainResource);
            memcpy(initDlBwp->pdcchCfg.cRSetToAddModList[idx].freqDomainRsrc, freqDomainResource,
               FREQ_DOM_RSRC_SIZE);
 
@@ -994,11 +950,11 @@ void fillDefaultMacCellGrpInfo(MacUeCfg *macUeCfg)
 void fillDefaultModulation(MacUeCfg *ueCfg)
 {
    ueCfg->dlModInfo.modOrder = MOD_ORDER_QPSK;
-   ueCfg->dlModInfo.mcsIndex = SIB1_MCS;
+   ueCfg->dlModInfo.mcsIndex = DEFAULT_MCS;
    ueCfg->dlModInfo.mcsTable = MCS_TABLE_QAM64; /* Spec 38.214-Table 5.1.3.1-1 */
 
    ueCfg->ulModInfo.modOrder = MOD_ORDER_QPSK;
-   ueCfg->ulModInfo.mcsIndex = SIB1_MCS;
+   ueCfg->ulModInfo.mcsIndex = DEFAULT_MCS;
    ueCfg->ulModInfo.mcsTable = MCS_TABLE_QAM64; /* Spec 38.214-Table 5.1.3.1-1 */
 }
 
@@ -1645,7 +1601,7 @@ uint8_t fillRlcUeCfg(uint16_t cellId, uint8_t ueIdx,\
    {
       /* Initial RB being Added */ 
       rlcUeCfg->cellId       = cellId;
-      rlcUeCfg->ueIdx        = ueIdx;
+      rlcUeCfg->ueId         = ueIdx;
       ret = fillRlcSrb1LcCfg(&rlcUeCfg->rlcLcCfg[0]);
       if(ret == ROK)
          rlcUeCfg->numLcs++;
@@ -1660,7 +1616,7 @@ uint8_t fillRlcUeCfg(uint16_t cellId, uint8_t ueIdx,\
       duRlcDb->rlcUeCfgState = UE_CFG_INPROGRESS;
       /*Filling RlcUeCfg */
       rlcUeCfg->cellId       = cellId;
-      rlcUeCfg->ueIdx        = ueIdx;
+      rlcUeCfg->ueId         = ueIdx;
       for(dbIdx = 0; (dbIdx < ueCfgDb->numRlcLcs && ret == ROK); dbIdx++)
       {
          ret = fillDefaultRlcModeCfg(ueCfgDb->rlcLcCfg[dbIdx].rlcMode, &ueCfgDb->rlcLcCfg[dbIdx]);
@@ -2158,9 +2114,9 @@ uint8_t duProcEgtpTunnelCfg(uint8_t ueCbIdx, UpTnlCfg *duTnlCfg, UpTnlCfg *f1Tnl
    {
       if(duSendEgtpTnlMgmtReq(EGTP_TNL_MGMT_ADD, NULLP, f1TnlCfg->tnlCfg1) == ROK)
       {
-         if(fillTnlCfgToAddMod(&duCb.upTnlCfg[duCb.numDrb], f1TnlCfg) == ROK)
+         if(fillTnlCfgToAddMod(&duCb.upTnlCfg[duCb.numTeId], f1TnlCfg) == ROK)
          {
-            duCb.numDrb++;
+            duCb.numTeId++;
             ret = ROK;
          }
       }      
@@ -2180,8 +2136,8 @@ uint8_t duProcEgtpTunnelCfg(uint8_t ueCbIdx, UpTnlCfg *duTnlCfg, UpTnlCfg *f1Tnl
       if(duSendEgtpTnlMgmtReq(EGTP_TNL_MGMT_DEL, duTnlCfg->tnlCfg1->teId, f1TnlCfg->tnlCfg1) == ROK)
       {           
          /* Free memory at drbIdx */
-         duCb.numDrb--;
-         for(delIdx = ueCbIdx; delIdx < duCb.numDrb; delIdx++)
+         duCb.numTeId--;
+         for(delIdx = ueCbIdx; delIdx < duCb.numTeId; delIdx++)
          {
             /* moving all elements one index ahead */
             ret = fillTnlCfgToAddMod(&duCb.upTnlCfg[delIdx], duCb.upTnlCfg[delIdx+1]);
@@ -2221,7 +2177,7 @@ uint8_t duProcEgtpTunnelCfg(uint8_t ueCbIdx, UpTnlCfg *duTnlCfg, UpTnlCfg *f1Tnl
 
 uint8_t duUpdateTunnelCfgDb(uint8_t ueIdx, uint8_t cellId, DuUeCfg *duUeCfg)
 {
-   uint8_t ret = ROK, drbIdx, duCbDrbIdx;
+   uint8_t ret = ROK, drbIdx, teIdx;
    bool drbFound = false;
 
    /*If Add/Mod tunnels request for that DRB is successful in EGTP */
@@ -2230,31 +2186,33 @@ uint8_t duUpdateTunnelCfgDb(uint8_t ueIdx, uint8_t cellId, DuUeCfg *duUeCfg)
    {
       duUeCfg->upTnlInfo[drbIdx].cellId = cellId;
       duUeCfg->upTnlInfo[drbIdx].ueIdx = ueIdx;
-      for(duCbDrbIdx = 0; duCbDrbIdx < duCb.numDrb; duCbDrbIdx++)
+      for(teIdx = 0; teIdx < duCb.numTeId; teIdx++)
       {
-        if(duCb.upTnlCfg[duCbDrbIdx]->drbId == duUeCfg->upTnlInfo[drbIdx].drbId)
-        {
-           drbFound = true; /* existing DRB */
-           if(duProcEgtpTunnelCfg(duCbDrbIdx, duCb.upTnlCfg[duCbDrbIdx], &duUeCfg->upTnlInfo[drbIdx]) != ROK)
-           {
-              DU_LOG("\nERROR  -> DU_APP : duUpdateTunnelCfgDb: Failed to modify tunnel req for Drb id[%d]",
-              duUeCfg->upTnlInfo[drbIdx].drbId);
-              ret = RFAILED;
-           }
-           break;
-        }
-        else
-           drbFound = false;
+         if((duCb.upTnlCfg[teIdx]->ueIdx == duUeCfg->upTnlInfo[drbIdx].ueIdx) && \
+            (duCb.upTnlCfg[teIdx]->drbId == duUeCfg->upTnlInfo[drbIdx].drbId))
+         {
+            drbFound = true; /* existing DRB */
+            if(duProcEgtpTunnelCfg(teIdx, duCb.upTnlCfg[teIdx], &duUeCfg->upTnlInfo[drbIdx]) != ROK)
+            {
+               DU_LOG("\nERROR  -> DU_APP : duUpdateTunnelCfgDb: Failed to modify tunnel req for Drb id[%d]",
+                     duUeCfg->upTnlInfo[drbIdx].drbId);
+               ret = RFAILED;
+            }
+            break;
+         }
+         else
+            drbFound = false;
       }
+
       if(!drbFound && ret == ROK)/* new DRB to Add */
       {
-        if(duProcEgtpTunnelCfg(NULLP, NULLP, &duUeCfg->upTnlInfo[drbIdx]) != ROK)
-        {
+         if(duProcEgtpTunnelCfg(NULLP, NULLP, &duUeCfg->upTnlInfo[drbIdx]) != ROK)
+         {
             DU_LOG("\nERROR  -> DU_APP : duUpdateTunnelCfgDb: Failed to add tunnel req for Drb id[%d]",
-           duUeCfg->upTnlInfo[drbIdx].drbId);
-           ret = RFAILED;
-           break;
-        }
+                  duUeCfg->upTnlInfo[drbIdx].drbId);
+            ret = RFAILED;
+            break;
+         }
       }
       else
          break;
@@ -2295,7 +2253,7 @@ uint8_t duUpdateDuUeCbCfg(uint8_t ueIdx, uint8_t cellId)
 
       /*Filling RLC Ue Cfg */
       ueCb->rlcUeCfg.cellId = cellId;
-      ueCb->rlcUeCfg.ueIdx  = ueIdx;
+      ueCb->rlcUeCfg.ueId   = ueIdx;
       ret = duUpdateRlcLcCfg(&ueCb->rlcUeCfg, ueCb->f1UeDb);
       if(ret == ROK)
       {
@@ -2470,25 +2428,25 @@ uint8_t DuProcRlcUeCfgRsp(Pst *pst, RlcUeCfgRsp *cfgRsp)
       {
          if(pst->event == EVENT_RLC_UE_CREATE_RSP)
          {
-            DU_LOG("\nINFO   -->  DU_APP: RLC UE Create Response : SUCCESS [UE IDX:%d]", cfgRsp->ueIdx);
-            duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueIdx -1].\
+            DU_LOG("\nINFO   -->  DU_APP: RLC UE Create Response : SUCCESS [UE IDX:%d]", cfgRsp->ueId);
+            duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].\
                rlcUeCfg.rlcUeCfgState = UE_CREATE_COMPLETE;
          }
          else if(pst->event == EVENT_RLC_UE_RECONFIG_RSP)
          {
-            DU_LOG("\nINFO   -->  DU_APP: RLC UE Reconfig Response : SUCCESS [UE IDX:%d]", cfgRsp->ueIdx);
-            duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueIdx -1].\
+            DU_LOG("\nINFO   -->  DU_APP: RLC UE Reconfig Response : SUCCESS [UE IDX:%d]", cfgRsp->ueId);
+            duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].\
                rlcUeCfg.rlcUeCfgState = UE_RECFG_COMPLETE;
-            if((ret = duUpdateDuUeCbCfg(cfgRsp->ueIdx, cfgRsp->cellId)) == ROK)
+            if((ret = duUpdateDuUeCbCfg(cfgRsp->ueId, cfgRsp->cellId)) == ROK)
             {
-               BuildAndSendUeCtxtRsp(cfgRsp->cellId, cfgRsp->ueIdx);
+               BuildAndSendUeCtxtRsp(cfgRsp->cellId, cfgRsp->ueId);
             }   
          }
       }
       else
       {
          DU_LOG("\nERROR  -->  DU_APP: RLC UE CFG Response for EVENT[%d] : FAILED [UE IDX : %d, REASON :%d]",\
-               pst->event, cfgRsp->ueIdx, cfgRsp->reason);
+               pst->event, cfgRsp->ueId, cfgRsp->reason);
          if((pst->event == EVENT_RLC_UE_RECONFIG_RSP))
          {
             //TODO: update failure case in ue Context setup Response
@@ -2931,7 +2889,7 @@ uint8_t  deleteUeCfg(uint16_t cellIdx, uint8_t ueIdx)
          {
             freeF1UeDb(ueCb->f1UeDb);
          }
-         for(tnlIdx = 0; tnlIdx < duCb.numDrb; )
+         for(tnlIdx = 0; tnlIdx < duCb.numTeId; )
          {
             if(duCb.upTnlCfg[tnlIdx]->ueIdx == ueIdx)
             {
@@ -3303,12 +3261,14 @@ uint8_t duProcUeContextReleaseCommand(DuUeCb *duUeCb)
    
    cellId = duCb.actvCellLst[duUeCb->f1UeDb->cellIdx]->cellId;
    crnti = duUeCb->crnti;
+   GET_UE_IDX(crnti, ueIdx);
+   
    /* Send DL RRC msg for RRC release */
    if(duUeCb->f1UeDb->dlRrcMsg)
    {
       if(duUeCb->f1UeDb->dlRrcMsg->rrcMsgPdu != NULLP)
       {
-         ret = duBuildAndSendDlRrcMsgToRlc(cellId, duCb.actvCellLst[duUeCb->f1UeDb->cellIdx]->ueCb[ueIdx].rlcUeCfg,\
+         ret = duBuildAndSendDlRrcMsgToRlc(cellId, duCb.actvCellLst[duUeCb->f1UeDb->cellIdx]->ueCb[ueIdx-1].rlcUeCfg,\
                duUeCb->f1UeDb->dlRrcMsg);
          if(ret == RFAILED)
          {