X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fcu_stub%2Fcu_xnap_msg_hdl.c;fp=src%2Fcu_stub%2Fcu_xnap_msg_hdl.c;h=8033c994042f7a1b429d1833ee0a44461313b263;hb=d6b8cf5c9afbba0fada62efd626d56cb59c1e839;hp=c3e01aa005cc15a927ae7c82a1ca6196d619be93;hpb=a3d6ee5b748b9591315cede5c78a14b290b1ca9a;p=o-du%2Fl2.git diff --git a/src/cu_stub/cu_xnap_msg_hdl.c b/src/cu_stub/cu_xnap_msg_hdl.c index c3e01aa00..8033c9940 100644 --- a/src/cu_stub/cu_xnap_msg_hdl.c +++ b/src/cu_stub/cu_xnap_msg_hdl.c @@ -401,6 +401,89 @@ void XNAPProcHandoverReqAck(uint32_t destId, Buffer *mBuf) } } +/******************************************************************* + * + * @brief Build And send dummy UE Context Release to Peer CU + * + * @details + * + * Function : BuildAndSendUeContextRelease + * + * Functionality: + * Build And send dummy UE Context Release to Peer CU + * + * @params[in] Pointer to UE Cb + * @return void + * + ******************************************************************/ +void BuildAndSendUeContextRelease(CuUeCb *ueCb) +{ + Buffer *mBuf = NULLP; + + if(ODU_GET_MSG_BUF(1, 1, &mBuf) == ROK) + { + CMCHKPK(oduUnpackUInt8, ueCb->hoInfo.cuUeF1apIdSrc, mBuf); + CMCHKPK(oduUnpackUInt8, UE_CTXT_REL, mBuf); + if(sctpSend(XN_INTERFACE, ueCb->hoInfo.srcNodeId, mBuf) != ROK) + { + DU_LOG("\nERROR --> CU_STUB: Failed to send UE context release to peer CU"); + } + } + + return; +} + +/******************************************************************* + * @brief Process received UE Context Release + * + * @details + * + * Function : XNAPProcUeContextRel + * + * Functionality: + * 1. Unpack CU UE F1AP ID (by SCU) and fetch UE CB and + * the corresponding DU DB (SDU) + * 2. Send UE Context release command to SDU + * + * @params[in] Destination Id + * Pointer to message buffer + * @return void + * + ******************************************************************/ +void XNAPProcUeContextRel(uint32_t destId, Buffer *mBuf) +{ + uint8_t duIdx, duId, ueIdx; + uint8_t cuUeF1apIdSrc; + DuDb *duDb; + CuUeCb *ueCb; + + DU_LOG("\nINFO --> CU STUB : Received UE Context Release"); + + /* Fetch UE CB and DU DB in Source CU for UE under Inter-CU Handover */ + CMCHKUNPK(oduPackUInt8, &(cuUeF1apIdSrc), mBuf); + for(duIdx = 0; duIdx < cuCb.numDu; duIdx++) + { + for(ueIdx = 0; ueIdx < MAX_NUM_CELL * MAX_NUM_UE; ueIdx++) + { + if(cuCb.duInfo[duIdx].ueCb[ueIdx].gnbCuUeF1apId == cuUeF1apIdSrc) + { + duDb = &cuCb.duInfo[duIdx]; + ueCb = &duDb->ueCb[ueIdx]; + break; + } + } + if(duDb && ueCb) + break; + } + if(!duDb || !ueCb) + { + DU_LOG("\nERROR --> CU STUB : UE CB not found for CU UE F1AP ID [%d]", cuUeF1apIdSrc); + return; + } + + BuildAndSendUeContextReleaseCommand(duDb->duId, ueCb->gnbCuUeF1apId, ueCb->gnbDuUeF1apId); +} + /******************************************************************* * * @brief Handle incoming messages at Xn interface @@ -449,6 +532,11 @@ void XNAPMsgHdlr(uint32_t *destId, Buffer *mBuf) XNAPProcHandoverReqAck(*destId, mBuf); break; } + case UE_CTXT_REL: + { + XNAPProcUeContextRel(*destId, mBuf); + break; + } default: DU_LOG("\nERROR --> CU_STUB : Invalid event [%d] received at XN interface", event); break;