X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fcu_stub%2Fcu_f1ap_msg_hdl.c;h=601637b33ef8486f4a03eb13dd0da7131321bd9f;hb=91e620505c094c9e194453e2865a6e414930446c;hp=14f7a2827b3164489cbddec79f35b4a3ad44c122;hpb=07b4db8181733867f44499f5ad6980ac981e26ea;p=o-du%2Fl2.git diff --git a/src/cu_stub/cu_f1ap_msg_hdl.c b/src/cu_stub/cu_f1ap_msg_hdl.c index 14f7a2827..601637b33 100644 --- a/src/cu_stub/cu_f1ap_msg_hdl.c +++ b/src/cu_stub/cu_f1ap_msg_hdl.c @@ -11898,7 +11898,7 @@ uint8_t procServedCellPlmnList(ServedPLMNs_List_t *srvPlmn) * RFAILED - failure * * ****************************************************************/ -uint8_t procUeContextModificationResponse(uint32_t duId, F1AP_PDU_t *f1apMsg) +uint8_t procUeContextModificationResponse(uint32_t duId, F1AP_PDU_t *f1apMsg, char *recvBuf, MsgLen recvBufLen) { uint8_t idx=0, duIdx=0; uint8_t duUeF1apId = 0, cuUeF1apId = 0; @@ -11922,6 +11922,11 @@ uint8_t procUeContextModificationResponse(uint32_t duId, F1AP_PDU_t *f1apMsg) { duUeF1apId = ueCtxtModRsp->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID; ueCb = &duDb->ueCb[duUeF1apId-1]; + + if((ueCb->state == UE_HANDOVER_IN_PROGRESS) && (ueCb->hoInfo.HOType == Xn_Based_Inter_CU_HO)) + { + BuildAndSendHOReq(ueCb, HO_REQ, recvBuf, recvBufLen); + } break; } case ProtocolIE_ID_id_DRBs_SetupMod_List: @@ -11958,35 +11963,38 @@ 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 && ueCb->hoInfo.HOType == Inter_DU_HO) + if(ueCb->state == UE_HANDOVER_IN_PROGRESS) { - uint8_t ueIdx = 0; - DuDb *tgtDuDb = NULLP; - CuUeCb *ueCbInTgtDu = NULLP; - - SEARCH_DU_DB(duIdx, ueCb->hoInfo.targetId, tgtDuDb); - if(tgtDuDb) + if(ueCb->hoInfo.HOType == Inter_DU_HO) { - /* Since DU UE F1AP ID assigned by target DU to this UE in handover is - * not known here, using CU UE F1AP ID to search for UE Cb in target DU - * DB */ - for(ueIdx = 0; ueIdx < MAX_NUM_UE; ueIdx++) + uint8_t ueIdx = 0; + DuDb *tgtDuDb = NULLP; + CuUeCb *ueCbInTgtDu = NULLP; + + SEARCH_DU_DB(duIdx, ueCb->hoInfo.targetId, tgtDuDb); + if(tgtDuDb) { - if(tgtDuDb->ueCb[ueIdx].gnbCuUeF1apId == cuUeF1apId) + /* Since DU UE F1AP ID assigned by target DU to this UE in handover is + * not known here, using CU UE F1AP ID to search for UE Cb in target DU + * DB */ + for(ueIdx = 0; ueIdx < MAX_NUM_UE; ueIdx++) { - ueCbInTgtDu = &tgtDuDb->ueCb[ueIdx]; - break; + if(tgtDuDb->ueCb[ueIdx].gnbCuUeF1apId == cuUeF1apId) + { + ueCbInTgtDu = &tgtDuDb->ueCb[ueIdx]; + break; + } } - } - /* If UE context is not found in Target DU DU, send UE context setup - * request */ - if(ueCbInTgtDu == NULLP) - { - if((BuildAndSendUeContextSetupReq(ueCb->hoInfo.targetId, ueCb)) != ROK) + /* If UE context is not found in Target DU DU, send UE context setup + * request */ + if(ueCbInTgtDu == NULLP) { - DU_LOG("\nERROR -> F1AP : Failed at BuildAndSendUeContextSetupReq"); - return RFAILED; + if((BuildAndSendUeContextSetupReq(ueCb->hoInfo.targetId, ueCb)) != ROK) + { + DU_LOG("\nERROR -> F1AP : Failed at BuildAndSendUeContextSetupReq"); + return RFAILED; + } } } } @@ -12027,6 +12035,10 @@ void procF1SetupReq(uint32_t *destDuId, F1AP_PDU_t *f1apMsg) GNB_DU_Served_Cells_Item_t *srvCellItem = NULLP; GNB_DU_Served_Cells_List_t *duServedCell = NULLP; + /* Triggering XN setup request before F1 setup establishment */ + if(LOCAL_NODE_TYPE == CLIENT) + BuildAndSendXnSetupReq(); + f1SetupReq = &f1apMsg->choice.initiatingMessage->value.choice.F1SetupRequest; for(ieIdx=0; ieIdx < f1SetupReq->protocolIEs.list.count; ieIdx++) { @@ -12676,7 +12688,7 @@ void F1APMsgHdlr(uint32_t *duId, Buffer *mBuf) case SuccessfulOutcome__value_PR_UEContextModificationResponse: { DU_LOG("\nINFO --> F1AP : UE Context Modification Response received"); - procUeContextModificationResponse(*duId, f1apMsg); + procUeContextModificationResponse(*duId, f1apMsg, recvBuf, recvBufLen); break; } case SuccessfulOutcome__value_PR_UEContextReleaseComplete: