Epic-ID: ODUHIGH-463][Task-ID: ODUHIGH-504]Dummy Handover Request/Response and UE...
[o-du/l2.git] / src / cu_stub / cu_stub.c
index 0e78325..6a9c7dd 100644 (file)
@@ -270,25 +270,31 @@ void readCuCfg()
  *         RFAILED - failure
  *
  * ****************************************************************/
-void initiateInterDuHandover(uint32_t sourceDuId, uint32_t targetDuId, uint32_t ueId)
+void initiateInterDuHandover(uint32_t sourceDuId, uint32_t targetDuId, uint32_t duUeF1apId)
 {
-    uint8_t duIdx = 0;
-    DuDb *duDb = NULLP;
-    CuUeCb *ueCb = NULLP;
-   
-    SEARCH_DU_DB(duIdx, sourceDuId, duDb); 
-    if(duDb)
-       ueCb = &duDb->ueCb[ueId-1];
-    if(ueCb)
-    {
-       ueCb->state = UE_HANDOVER_IN_PROGRESS;
-       ueCb->hoInfo.sourceDuId = sourceDuId;
-       ueCb->hoInfo.targetDuId = targetDuId;
-    }
+   uint8_t duIdx = 0;
+   DuDb *duDb = NULLP;
+   CuUeCb *ueCb = NULLP;
 
-    DU_LOG("\nINFO  --> CU_STUB: Inter-DU Handover Started for ueId [%d] from DU ID [%d] to DU ID [%d]", \
-          ueId, sourceDuId, targetDuId);
-    BuildAndSendUeContextModificationReq(sourceDuId, ueCb, QUERY_CONFIG);
+   DU_LOG("\nINFO  --> CU_STUB: Inter-DU Handover Started for ueId [%d] from DU ID [%d] to DU ID [%d]", \
+         duUeF1apId, sourceDuId, targetDuId);
+
+   SEARCH_DU_DB(duIdx, sourceDuId, duDb); 
+   if(duDb)
+      ueCb = &duDb->ueCb[duUeF1apId-1];
+   if(ueCb)
+   {
+      ueCb->state = UE_HANDOVER_IN_PROGRESS;
+      ueCb->hoInfo.HOType = Inter_DU_HO;
+      ueCb->hoInfo.srcNodeId = sourceDuId;
+      ueCb->hoInfo.tgtNodeId = targetDuId;
+
+      BuildAndSendUeContextModificationReq(sourceDuId, ueCb, QUERY_CONFIG);
+   }
+   else
+   {
+      DU_LOG("\nINFO  --> CU_STUB: DU UE F1AP ID [%d] not found", duUeF1apId);
+   }
 }
 
 
@@ -310,11 +316,44 @@ void initiateInterDuHandover(uint32_t sourceDuId, uint32_t targetDuId, uint32_t
  *         RFAILED - failure
  *
  * ****************************************************************/
-void initiateInterCuHandover(uint32_t sourceCuId, uint32_t targetCuId, uint32_t ueId)
+void initiateInterCuHandover(uint32_t targetCuId, uint32_t cellId, uint32_t cuUeF1apId)
 {
-    DU_LOG("\nINFO  --> CU_STUB: Inter-CU Handover Started for ueId [%d] from CU ID [%d] to CU ID [%d]", \
-          ueId, sourceCuId, targetCuId);
-    //TODO : First message of HO procedure to be triggered here. Changes to be done in next commit.
+    uint8_t  duIdx, ueIdx;
+    CuUeCb   *ueCb = NULLP;
+
+    DU_LOG("\nINFO  --> CU_STUB: Inter-CU Handover Started for ueId [%d] to CU ID [%d]", \
+          cuUeF1apId, targetCuId);
+
+    for(duIdx = 0; duIdx < cuCb.numDu; duIdx++)
+    {
+       for(ueIdx = 0; ueIdx < (MAX_NUM_CELL * MAX_NUM_UE); ueIdx++)
+       {
+          ueCb = &cuCb.duInfo[duIdx].ueCb[ueIdx];
+          if(cuCb.duInfo[duIdx].ueCb[ueIdx].gnbCuUeF1apId == cuUeF1apId)
+          {
+             ueCb = &cuCb.duInfo[duIdx].ueCb[ueIdx];
+             break; 
+          }
+       }
+       if(ueCb)
+          break;
+    }
+
+    if(ueCb)
+    {   
+       ueCb->state = UE_HANDOVER_IN_PROGRESS;
+       ueCb->hoInfo.HOType = Xn_Based_Inter_CU_HO;
+       ueCb->hoInfo.srcNodeId = cuCb.cuCfgParams.cuId;
+       ueCb->hoInfo.tgtNodeId = targetCuId;
+       ueCb->hoInfo.tgtCellId = cellId;
+       ueCb->hoInfo.cuUeF1apIdSrc = ueCb->gnbCuUeF1apId;
+
+       BuildAndSendUeContextModificationReq(cuCb.duInfo[duIdx].duId, ueCb, QUERY_CONFIG);
+    }   
+    else
+    {
+       DU_LOG("\nINFO  --> CU_STUB: CU UE F1AP ID [%d] not found", cuUeF1apId);
+    }
 }
 
 /*******************************************************************
@@ -449,32 +488,32 @@ void *cuConsoleHandler(void *args)
       else if(ch == 'h')
       {
          HandoverType hoType;
-         uint32_t sourceId, targetId, ueId;
+         uint32_t srcNodeId, tgtNodeId, targetCellId, ueId;
 
          DU_LOG("\n\nChoose the type of handover to initiate : \nEnter 1 for Inter-CU Handover over Xn interface\nEnter 2 for Inter-DU Handover\n");
          scanf("%d", &hoType);
 
          if(hoType == Xn_Based_Inter_CU_HO)
          {
-            DU_LOG("\nEnter Source CU ID for Inter-CU Handover : ");
-            scanf("%d", &sourceId);
             DU_LOG("\nEnter Target CU ID for Inter-CU Handover : ");
-            scanf("%d", &targetId);
+            scanf("%d", &tgtNodeId);
+            DU_LOG("\nEnter Target Physical Cell ID for Inter-CU Handover : ");
+            scanf("%d", &targetCellId);
             DU_LOG("\nEnter CU UE F1AP ID to be handed over : ");
             scanf("%d", &ueId);
 
-            initiateInterCuHandover(sourceId, targetId, ueId);
+            initiateInterCuHandover(tgtNodeId, targetCellId, ueId);
          }
          else if(hoType == Inter_DU_HO)
          {
             DU_LOG("\nEnter Source DU ID for Inter-DU Handover : ");
-            scanf("%d", &sourceId);
+            scanf("%d", &srcNodeId);
             DU_LOG("\nEnter Target DU ID for Inter-DU Handover : ");
-            scanf("%d", &targetId);
+            scanf("%d", &tgtNodeId);
             DU_LOG("\nEnter DU UE F1AP ID to be handed over : ");
             scanf("%d", &ueId);
 
-            initiateInterDuHandover(sourceId, targetId, ueId);
+            initiateInterDuHandover(srcNodeId, tgtNodeId, ueId);
          }
       }
       /* Start Idle mode paging when 'p' is received from console input */