[Epic-ID: ODUHIGH-405][Task-ID: ODUHIGH-425] Changes in Ue Context Modification
[o-du/l2.git] / src / 5gnrmac / mac_ue_mgr.c
index 77fc0f9..a201e52 100644 (file)
@@ -1616,8 +1616,9 @@ uint8_t fillSchUeCfg(Pst *pst, SchUeCfg *schUeCfg, MacUeCfg *ueCfg)
    uint8_t ret = ROK;
 
    schUeCfg->cellId = ueCfg->cellId;
+   schUeCfg->duUeF1apId = ueCfg->duUeF1apId;
    schUeCfg->crnti = ueCfg->crnti;
-
+   schUeCfg->dataTransmissionInfo = ueCfg->transmissionAction;
    /* Copy MAC cell group config */
    if(ueCfg->macCellGrpCfgPres == true)
    {
@@ -1985,7 +1986,7 @@ uint8_t fillMacUeCb(MacUeCb *ueCb, MacUeCfg *ueCfg, uint8_t cellIdx)
 {
    uint8_t ret = ROK;
 
-   ueCb->ueIdx = ueCfg->ueIdx;
+   ueCb->ueId = ueCfg->ueId;
    ueCb->crnti = ueCfg->crnti;
    ueCb->cellCb = macCb.macCell[cellIdx];
    if(ueCfg->spCellCfgPres)
@@ -1993,7 +1994,12 @@ uint8_t fillMacUeCb(MacUeCb *ueCb, MacUeCfg *ueCfg, uint8_t cellIdx)
       ueCb->dlInfo.dlHarqEnt.numHarqProcs = \
       ueCfg->spCellCfg.servCellCfg.pdschServCellCfg.numHarqProcForPdsch; 
    }
-   ueCb->state = UE_STATE_ACTIVE;
+
+   if(ueCfg->crnti)
+      ueCb->state = UE_STATE_ACTIVE;
+   else
+      ueCb->state = UE_HANDIN_IN_PROGRESS;
+
    /*TODO: To check the bsr value during implementation */
    if(ueCfg->macCellGrpCfgPres)
    {
@@ -2006,6 +2012,7 @@ uint8_t fillMacUeCb(MacUeCb *ueCb, MacUeCfg *ueCfg, uint8_t cellIdx)
    {
       DU_LOG("\nERROR  -->  MAC: Failed while filing MAC LC List at fillMacUeCb()");
    }
+   ueCb->transmissionAction = ueCfg->transmissionAction;
    return ret;
 }
 
@@ -2099,7 +2106,7 @@ uint8_t createUeCb(uint8_t cellIdx, MacUeCb *ueCb, MacUeCfg *ueCfg)
 {
    uint8_t ret =ROK;
 
-   if((ueCb->ueIdx == ueCfg->ueIdx) && (ueCb->crnti == ueCfg->crnti)\
+   if((ueCb->ueId == ueCfg->ueId) && (ueCb->crnti == ueCfg->crnti)\
       &&(ueCb->state == UE_STATE_ACTIVE))
    {
       DU_LOG("\nERROR  -->  MAC : CRNTI %d already configured ", ueCfg->crnti);
@@ -2116,9 +2123,12 @@ uint8_t createUeCb(uint8_t cellIdx, MacUeCb *ueCb, MacUeCfg *ueCfg)
       }
       else
       {
-         macCb.macCell[cellIdx]->numActvUe++;
-         updateMacRaCb(cellIdx, ueCb);
-        return ROK;
+         if(ueCb->state == UE_STATE_ACTIVE)
+         {
+            macCb.macCell[cellIdx]->numActvUe++;
+            updateMacRaCb(cellIdx, ueCb);
+         }
+         return ROK;
       }
 
    }
@@ -2144,8 +2154,8 @@ uint8_t modifyUeCb(uint8_t cellIdx, MacUeCb *ueCb, MacUeCfg *ueCfg)
 {
    uint8_t ret = ROK;
 
-   if((ueCb->ueIdx == ueCfg->ueIdx) && (ueCb->crnti == ueCfg->crnti)\
-      &&(ueCb->state == UE_STATE_ACTIVE))
+   if((ueCb->ueId == ueCfg->ueId) && (ueCb->crnti == ueCfg->crnti)\
+         &&(ueCb->state == UE_STATE_ACTIVE))
    {
       DU_LOG("\nINFO  -->  MAC : Modifying Ue config Req for CRNTI %d ", ueCfg->crnti);
       ret = fillMacUeCb(ueCb, ueCfg, cellIdx);
@@ -2157,7 +2167,7 @@ uint8_t modifyUeCb(uint8_t cellIdx, MacUeCb *ueCb, MacUeCfg *ueCfg)
       else
       {
          deleteMacRaCb(cellIdx, ueCb);
-        return ROK;
+         return ROK;
       }
    }
    return RFAILED;
@@ -2204,21 +2214,31 @@ uint8_t procMacUeCfgData(Pst *pst, MacUeCfg *ueCfg)
    }
 
    /* Check if UE already configured */
-   ueCb = &macCb.macCell[cellIdx]->ueCb[ueCfg->ueIdx -1];
+   if(ueCfg->crnti)
+      ueCb = &macCb.macCell[cellIdx]->ueCb[ueCfg->ueId -1];
+   else
+      ueCb = &macCb.macCell[cellIdx]->hoUeCb[ueCfg->duUeF1apId -1];
+
    switch(pst->event)
    {
       case EVENT_UE_CONFIG_RSP_TO_MAC:
-        ret = createUeCb(cellIdx, ueCb, ueCfg);
-        if(ret != ROK)
-            DU_LOG("\nERROR  -->  MAC: AddUeConfigReq for cellIdx :%d failed in procMacUeCfgData()", cellIdx);
-        break;
+         {
+            ret = createUeCb(cellIdx, ueCb, ueCfg);
+            if(ret != ROK)
+               DU_LOG("\nERROR  -->  MAC: AddUeConfigReq for cellIdx :%d failed in procMacUeCfgData()", cellIdx);
+            break;
+         }
+
       case EVENT_UE_RECONFIG_RSP_TO_MAC:
-        ret = modifyUeCb(cellIdx, ueCb, ueCfg);
-        if(ret != ROK)
-            DU_LOG("\nERROR  -->  MAC: ModifyUeConfigReq for cellIdx :%d failed at procMacUeCfgData()", cellIdx);
-        break;
+         {
+            ret = modifyUeCb(cellIdx, ueCb, ueCfg);
+            if(ret != ROK)
+               DU_LOG("\nERROR  -->  MAC: ModifyUeConfigReq for cellIdx :%d failed at procMacUeCfgData()", cellIdx);
+            break;
+         }
+
       default:
-        break;
+         break;
    }
 
    return ret;
@@ -2253,7 +2273,7 @@ uint8_t copyToTmpData(MacUeCfg *ueCfg)
    }
    memcpy(tmpData, ueCfg, sizeof(MacUeCfg));
    GET_CELL_IDX(ueCfg->cellId, cellIdx);
-   macCb.macCell[cellIdx]->ueCfgTmpData[ueCfg->ueIdx-1] = tmpData;
+   macCb.macCell[cellIdx]->ueCfgTmpData[ueCfg->duUeF1apId-1] = tmpData;
    return ROK;
 }
 
@@ -2287,20 +2307,20 @@ uint8_t MacProcUeCreateReq(Pst *pst, MacUeCfg *ueCfg)
       if(ret == ROK)
       {
          /*Sending Cfg Req to SCH */
-        ret = fillSchUeCfg(pst, &schUeCfg, ueCfg);
-        if(ret != ROK)
-           DU_LOG("\nERROR  -->  MAC : Failed to fill Sch Ue Cfg at MacProcUeCreateReq()");
-        else
-        {
+         ret = fillSchUeCfg(pst, &schUeCfg, ueCfg);
+         if(ret != ROK)
+            DU_LOG("\nERROR  -->  MAC : Failed to fill Sch Ue Cfg at MacProcUeCreateReq()");
+         else
+         {
             /* Fill event and send UE create request to SCH */
             ret = sendUeReqToSch(pst, &schUeCfg);
-           if(ret != ROK)
-              DU_LOG("\nERROR  -->  MAC : Failed to send UE Create request to SCH");
-        }
+            if(ret != ROK)
+               DU_LOG("\nERROR  -->  MAC : Failed to send UE Create request to SCH");
+         }
       }
       else 
       {
-        DU_LOG("\nERROR  -->  MAC : Failed to store MAC UE CFG ");
+         DU_LOG("\nERROR  -->  MAC : Failed to store MAC UE CFG ");
       }
    }
    else
@@ -2345,7 +2365,7 @@ uint8_t MacSendUeCreateRsp(MacRsp result, SchUeCfgRsp *schCfgRsp)
    /* Filling UE Config response */
    memset(cfgRsp, 0, sizeof(MacUeCfgRsp));
    cfgRsp->cellId = schCfgRsp->cellId;
-   cfgRsp->ueIdx = schCfgRsp->ueIdx;
+   cfgRsp->duUeF1apId = schCfgRsp->duUeF1apId;
    cfgRsp->result = result;
 
    /* Fill Post structure and send UE Create response*/
@@ -2385,7 +2405,7 @@ uint8_t MacSendUeReconfigRsp(MacRsp result, SchUeCfgRsp *schCfgRsp)
    /* Filling UE Config response */
    memset(cfgRsp, 0, sizeof(MacUeCfgRsp));
    cfgRsp->cellId = schCfgRsp->cellId;
-   cfgRsp->ueIdx = schCfgRsp->ueIdx;
+   cfgRsp->duUeF1apId = schCfgRsp->duUeF1apId;
    cfgRsp->result = result;
 
    /* Fill Post structure and send UE Create response*/
@@ -2405,19 +2425,19 @@ uint8_t MacSendUeReconfigRsp(MacRsp result, SchUeCfgRsp *schCfgRsp)
  *    Functionality:
  *      Function to return Mac Ue Cfg pointer
  *
- * @params[in] cellIdx, ueIdx
+ * @params[in] cellIdx, ueId
  *
  * @return MacUeCfg pointer - success
  *         NULLP - failure
  *
  * ****************************************************************/
 
-MacUeCfg *getMacUeCfg(uint16_t cellIdx, uint8_t ueIdx)
+MacUeCfg *getMacUeCfg(uint16_t cellIdx, uint8_t duUeF1apId)
 {
    MacUeCfg *ueCfg = NULLP;
    if(macCb.macCell[cellIdx])
    {
-      ueCfg = macCb.macCell[cellIdx]->ueCfgTmpData[ueIdx-1];
+      ueCfg = macCb.macCell[cellIdx]->ueCfgTmpData[duUeF1apId-1];
    }
    else
    {
@@ -2467,7 +2487,7 @@ uint8_t MacProcSchUeCfgRsp(Pst *pst, SchUeCfgRsp *schCfgRsp)
 #endif
    
    GET_CELL_IDX(schCfgRsp->cellId, cellIdx);
-   ueCfg = getMacUeCfg(cellIdx, schCfgRsp->ueIdx);
+   ueCfg = getMacUeCfg(cellIdx, schCfgRsp->duUeF1apId);
    if(ueCfg == NULLP)
    {
       DU_LOG("\nERROR  -->  MAC : Failed to find the Mac Ue Cfg for event [%d] in MacProcSchUeCfgRsp()", pst->event);
@@ -2615,7 +2635,7 @@ uint8_t MacSendUeDeleteRsp(uint16_t cellId, uint16_t crnti, UeDeleteStatus resul
 
    /* Filling UE delete response */
    deleteRsp->cellId = cellId;
-   GET_UE_IDX(crnti,deleteRsp->ueId);
+   GET_UE_ID(crnti, deleteRsp->ueId);
    deleteRsp->result = result;
 
    /* Fill Post structure and send UE delete response*/
@@ -2697,7 +2717,7 @@ void deletePucchResourcesCfg(PucchResrcCfg *resrcCfg)
 
 uint8_t MacProcSchUeDeleteRsp(Pst *pst, SchUeDeleteRsp *schUeDelRsp)
 {
-   uint8_t ueIdx =0, isCrntiValid = 0;
+   uint8_t ueId =0, isCrntiValid = 0;
    uint16_t cellIdx=0;
    uint8_t ret = RFAILED;
    UeDeleteStatus result;
@@ -2719,27 +2739,27 @@ uint8_t MacProcSchUeDeleteRsp(Pst *pst, SchUeDeleteRsp *schUeDelRsp)
             {
                /*C-RNTI value is out of Acceptable range*/
                DU_LOG("\nERROR  -->  MAC : MacProcSchUeDeleteRsp(): Invalid crnti[%d] ",schUeDelRsp->crnti);
-               result = UEIDX_INVALID;
+               result = UEID_INVALID;
             }
             else
             {
-               GET_UE_IDX(schUeDelRsp->crnti, ueIdx);
-               if(macCb.macCell[cellIdx]->ueCb[ueIdx -1].crnti == schUeDelRsp->crnti)
+               GET_UE_ID(schUeDelRsp->crnti, ueId);
+               if(macCb.macCell[cellIdx]->ueCb[ueId -1].crnti == schUeDelRsp->crnti)
                {
 
                   /*Commenting as S-NSSAI and PDU session will be stored in MAC DB in future scope*/
 #if 0
                   /*Looping around LCs to free S-NSSAI memory*/
-                  for(lcIdx = 0; lcIdx < (macCb.macCell[cellIdx]->ueCb[ueIdx -1].ulInfo.numUlLc); lcIdx++)
+                  for(lcIdx = 0; lcIdx < (macCb.macCell[cellIdx]->ueCb[ueId -1].ulInfo.numUlLc); lcIdx++)
                   {
-                     MAC_FREE(macCb.macCell[cellIdx]->ueCb[ueIdx -1].ulInfo.lcCb[lcIdx].snssai, sizeof(Snssai));
+                     MAC_FREE(macCb.macCell[cellIdx]->ueCb[ueId -1].ulInfo.lcCb[lcIdx].snssai, sizeof(Snssai));
                   }
-                  for(lcIdx = 0; lcIdx < (macCb.macCell[cellIdx]->ueCb[ueIdx -1].dlInfo.numDlLc); lcIdx++)
+                  for(lcIdx = 0; lcIdx < (macCb.macCell[cellIdx]->ueCb[ueId -1].dlInfo.numDlLc); lcIdx++)
                   {
-                     MAC_FREE(macCb.macCell[cellIdx]->ueCb[ueIdx -1].dlInfo.lcCb[lcIdx].snssai, sizeof(Snssai));
+                     MAC_FREE(macCb.macCell[cellIdx]->ueCb[ueId -1].dlInfo.lcCb[lcIdx].snssai, sizeof(Snssai));
                   }
 #endif
-                  memset(&macCb.macCell[cellIdx]->ueCb[ueIdx -1], 0, sizeof(MacUeCb));
+                  memset(&macCb.macCell[cellIdx]->ueCb[ueId -1], 0, sizeof(MacUeCb));
                   macCb.macCell[cellIdx]->numActvUe--;
                   result = SUCCESS;
                   ret = ROK;
@@ -2747,7 +2767,7 @@ uint8_t MacProcSchUeDeleteRsp(Pst *pst, SchUeDeleteRsp *schUeDelRsp)
                else
                {
                   DU_LOG("\nERROR  -->  MAC : MacProcSchUeDeleteRsp(): crnti[%d] does not exist ",schUeDelRsp->crnti);
-                  result = UEIDX_INVALID;
+                  result = UEID_INVALID;
                }
             }
          }
@@ -2759,7 +2779,7 @@ uint8_t MacProcSchUeDeleteRsp(Pst *pst, SchUeDeleteRsp *schUeDelRsp)
       }
       else
       {
-         result = (schUeDelRsp->cause == INVALID_CELLID) ? CELLID_INVALID : UEIDX_INVALID;
+         result = (schUeDelRsp->cause == INVALID_CELLID) ? CELLID_INVALID : UEID_INVALID;
       }
       if(MacSendUeDeleteRsp(schUeDelRsp->cellId, schUeDelRsp->crnti, result) != ROK)
       {
@@ -2857,12 +2877,12 @@ uint8_t MacProcUeDeleteReq(Pst *pst, MacUeDelete *ueDelete)
          else
          {
             DU_LOG("\nERROR  -->  MAC : MacProcUeDeleteReq(): CRNTI is not matched");
-            result = UEIDX_INVALID;
+            result = UEID_INVALID;
          }
       }
       else
       {
-         DU_LOG("\nERROR  -->  MAC : MacProcUeDeleteReq(): Failed to find the MacUeCb of UeIdx = %d",ueDelete->ueId);
+         DU_LOG("\nERROR  -->  MAC : MacProcUeDeleteReq(): Failed to find the MacUeCb of UeId = %d",ueDelete->ueId);
          result = CELLID_INVALID;
       }