From 82722dbe73abc2e26dad3c2ddad5f89015aa323c Mon Sep 17 00:00:00 2001 From: "lal.harshita" Date: Tue, 21 Feb 2023 17:19:17 +0530 Subject: [PATCH] [Epic-ID: ODUHIGH-463][Task-ID: ODUHIGH-497] Inter-CU-HO: GNB-DU Config Query Signed-off-by: lal.harshita Change-Id: I041fdb675733aed26c81ced29634f030ff090d1c --- src/cu_stub/cu_f1ap_msg_hdl.c | 14 ++++---- src/cu_stub/cu_stub.c | 76 +++++++++++++++++++++++++++++++------------ src/cu_stub/cu_stub.h | 5 +-- 3 files changed, 66 insertions(+), 29 deletions(-) diff --git a/src/cu_stub/cu_f1ap_msg_hdl.c b/src/cu_stub/cu_f1ap_msg_hdl.c index 42aa147c6..14f7a2827 100644 --- a/src/cu_stub/cu_f1ap_msg_hdl.c +++ b/src/cu_stub/cu_f1ap_msg_hdl.c @@ -9316,7 +9316,7 @@ uint8_t BuildAndSendUeContextSetupReq(uint32_t duId, CuUeCb *ueCb) if(ueCb->state == UE_HANDOVER_IN_PROGRESS) { /* Spec 38.473 Sec 9.2.2.1 : For handover case, this IE shall be considered as target cell. */ - SEARCH_DU_DB(duIdx, ueCb->hoInfo.targetDuId, targetDuDb); + SEARCH_DU_DB(duIdx, ueCb->hoInfo.targetId, targetDuDb); /* Since we are supporting only one cell per DU, accessing 0th index to * get target cell info */ spCellId = targetDuDb->cellCb[0].nrCellId; @@ -9654,7 +9654,7 @@ uint8_t procUeContextSetupResponse(uint32_t duId, F1AP_PDU_t *f1apMsg) ueCb->gnbDuUeF1apId = duUeF1apId; ueCb->gnbCuUeF1apId = cuUeF1apId; ueCb->state = UE_HANDOVER_IN_PROGRESS; - ueCb->hoInfo.targetDuId = duId; + ueCb->hoInfo.targetId = duId; (duDb->numUe)++; ueCb->cellCb->ueCb[ueCb->cellCb->numUe] = ueCb; @@ -9720,7 +9720,7 @@ uint8_t procUeContextSetupResponse(uint32_t duId, F1AP_PDU_t *f1apMsg) /* Store source DU info in the new UE context created in * tareget DU */ - ueCb->hoInfo.sourceDuId = srcDuDb->duId; + ueCb->hoInfo.sourceId = srcDuDb->duId; /* Copy the received container to UeCb */ memcpy(&ueCbInSrcDu->f1apMsgDb.duToCuContainer, duToCuRrcContainer, sizeof(OCTET_STRING_t)); @@ -9816,7 +9816,7 @@ uint8_t procUlRrcMsg(uint32_t duId, F1AP_PDU_t *f1apMsg) if(duDb->ueCb[duUeF1apId-1].state == UE_HANDOVER_IN_PROGRESS) { uint8_t ueIdx = 0; - uint8_t srcDuId = duDb->ueCb[duUeF1apId-1].hoInfo.sourceDuId; + uint8_t srcDuId = duDb->ueCb[duUeF1apId-1].hoInfo.sourceId; DuDb *srcDuDb = NULLP; /* In target DU DB, mark UE as active and delete HO info */ @@ -11958,13 +11958,13 @@ uint8_t procUeContextModificationResponse(uint32_t duId, F1AP_PDU_t *f1apMsg) /* If UE is in handover and UE context is not yet created at target DU, then send * UE context setup request to target DU */ - if(ueCb->state == UE_HANDOVER_IN_PROGRESS) + if(ueCb->state == UE_HANDOVER_IN_PROGRESS && ueCb->hoInfo.HOType == Inter_DU_HO) { uint8_t ueIdx = 0; DuDb *tgtDuDb = NULLP; CuUeCb *ueCbInTgtDu = NULLP; - SEARCH_DU_DB(duIdx, ueCb->hoInfo.targetDuId, tgtDuDb); + SEARCH_DU_DB(duIdx, ueCb->hoInfo.targetId, tgtDuDb); if(tgtDuDb) { /* Since DU UE F1AP ID assigned by target DU to this UE in handover is @@ -11983,7 +11983,7 @@ uint8_t procUeContextModificationResponse(uint32_t duId, F1AP_PDU_t *f1apMsg) * request */ if(ueCbInTgtDu == NULLP) { - if((BuildAndSendUeContextSetupReq(ueCb->hoInfo.targetDuId, ueCb)) != ROK) + if((BuildAndSendUeContextSetupReq(ueCb->hoInfo.targetId, ueCb)) != ROK) { DU_LOG("\nERROR -> F1AP : Failed at BuildAndSendUeContextSetupReq"); return RFAILED; diff --git a/src/cu_stub/cu_stub.c b/src/cu_stub/cu_stub.c index 0e78325fb..b817edfc7 100644 --- a/src/cu_stub/cu_stub.c +++ b/src/cu_stub/cu_stub.c @@ -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.sourceId = sourceDuId; + ueCb->hoInfo.targetId = targetDuId; + + BuildAndSendUeContextModificationReq(sourceDuId, ueCb, QUERY_CONFIG); + } + else + { + DU_LOG("\nINFO --> CU_STUB: DU UE F1AP ID [%d] not found", duUeF1apId); + } } @@ -310,11 +316,41 @@ 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 sourceCuId, uint32_t targetCuId, uint32_t cuUeF1apId) { + uint8_t duIdx, ueIdx; + CuUeCb *ueCb = NULLP; + 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. + cuUeF1apId, sourceCuId, 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.sourceId = sourceCuId; + ueCb->hoInfo.targetId = targetCuId; + BuildAndSendUeContextModificationReq(cuCb.duInfo[duIdx].duId, ueCb, QUERY_CONFIG); + } + else + { + DU_LOG("\nINFO --> CU_STUB: CU UE F1AP ID [%d] not found", cuUeF1apId); + } } /******************************************************************* diff --git a/src/cu_stub/cu_stub.h b/src/cu_stub/cu_stub.h index a0239a4de..180116f4a 100644 --- a/src/cu_stub/cu_stub.h +++ b/src/cu_stub/cu_stub.h @@ -145,8 +145,9 @@ typedef struct cuCfgParams typedef struct handoverInfo { - uint32_t sourceDuId; - uint32_t targetDuId; + HandoverType HOType; + uint32_t sourceId; /* If Inter_DU HO, this is Source DU ID. In case of Inter CU HO, this is Source CU ID */ + uint32_t targetId; /* If Inter_DU HO, this is Taregt DU ID. In case of Inter CU HO, this is Target CU ID */ }HandoverInfo; typedef struct dlAmCfg -- 2.16.6