X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_ue_mgr.c;h=40cbdac20b6fb6effbfd4f5b32c5f2e48760fd79;hb=a2484c58e5beeb1ab9e1c86104cf9d9bc56750d1;hp=2bf2900aa4d6c96996caf099a2c1f852257a5bc2;hpb=483d527d19566ecca87eee46a198bab6c890c6bb;p=o-du%2Fl2.git diff --git a/src/du_app/du_ue_mgr.c b/src/du_app/du_ue_mgr.c index 2bf2900aa..40cbdac20 100644 --- a/src/du_app/du_ue_mgr.c +++ b/src/du_app/du_ue_mgr.c @@ -22,6 +22,13 @@ U32 sduId = 0; #endif +DuMacDlCcchInd packMacDlCcchIndOpts[] = +{ + packMacDlCcchInd, /* Loose coupling */ + MacHdlDlCcchInd, /* TIght coupling */ + packMacDlCcchInd /* Light weight-loose coupling */ +}; + /****************************************************************** * * @brief Send UE configuration to RLC @@ -179,6 +186,219 @@ PUBLIC S16 duHdlRlcUlData(Pst *pst, KwuDatIndInfo* datInd, Buffer *mBuf) return ROK; } +/****************************************************************** +* +* @brief Builds and Sends DL CCCH Ind to MAC +* +* @details +* +* Function : duBuildAndSendDlCcchInd +* +* Functionality: Builds and sends DL CCCH Ind Msg to MAC +* +* @params[in] dlCcchMsg - uint8_t* +* @return ROK - success +* RFAILED - failure +* +* ****************************************************************/ +uint8_t duBuildAndSendDlCcchInd(uint8_t *dlCcchMsg, uint16_t crnti, uint16_t cellId, DlCcchMsgType msgType) +{ + Pst pst; + uint8_t ret = ROK; + DlCcchIndInfo *dlCcchIndInfo = NULLP; + + DU_LOG("\nDU APP : Building and Sending DL CCCH Ind to MAC"); + + DU_ALLOC_SHRABL_BUF(dlCcchIndInfo, sizeof(DlCcchIndInfo)); + + if(!dlCcchIndInfo) + { + DU_LOG("\nDU APP : Memory alloc failed while building DL CCCH Ind"); + return RFAILED; + } + + dlCcchIndInfo->cellId = cellId; + dlCcchIndInfo->crnti = crnti; + dlCcchIndInfo->msgType = msgType; + DU_ALLOC_SHRABL_BUF(dlCcchIndInfo->dlCcchMsg, strlen((const char*)dlCcchMsg)); + if(!dlCcchIndInfo->dlCcchMsg) + { + DU_LOG("\nDU APP : Memory alloc failed while building DL CCCH Ind"); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, dlCcchIndInfo, sizeof(DlCcchIndInfo)); + return RFAILED; + } + memcpy(dlCcchIndInfo->dlCcchMsg, dlCcchMsg, strlen((const char*)dlCcchMsg)); + DU_FREE(dlCcchMsg, strlen((const char*)dlCcchMsg)); + + /* Fill Pst */ + pst.selector = DU_MAC_LWLC; + pst.srcEnt = ENTDUAPP; + pst.dstEnt = ENTRG; + pst.dstInst = 0; + pst.srcInst = 0; + pst.dstProcId = DU_PROC; + pst.srcProcId = DU_PROC; + pst.region = DU_APP_MEM_REGION; + pst.pool = DU_POOL; + pst.event = EVENT_MAC_DL_CCCH_IND; + + ret = (*packMacDlCcchIndOpts[pst.selector])(&pst, dlCcchIndInfo); + if(ret != ROK) + { + DU_LOG("\nDU_APP : Failure in sending DL CCCH to MAC"); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, dlCcchIndInfo->dlCcchMsg, strlen((const char*)dlCcchMsg)); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, dlCcchIndInfo, sizeof(DlCcchIndInfo)); + ret = RFAILED; + } + + return ret; + +} + +/****************************************************************** +* +* @brief Processes DL RRC Message Transfer sent by CU +* +* @details +* +* Function : procDlRrcMsgTrans +* +* Functionality: Processes DL RRC Message Transfer sent by CU +* +* @params[in] F1AP_PDU_t ASN decoded F1AP message +* @return ROK - success +* RFAILED - failure +* +* ****************************************************************/ +uint8_t procDlRrcMsgTrans(F1AP_PDU_t *f1apMsg) +{ + DLRRCMessageTransfer_t *dlRrcMsg = NULLP; + uint8_t *dlCcchMsg = NULLP; + uint8_t srbId, idx, ret; + uint16_t crnti, cellId; + uint32_t gnbCuUeF1apId, gnbDuUeF1apId; + + + DU_LOG("\nDU_APP : DL RRC message transfer Recevied"); + dlRrcMsg = &f1apMsg->choice.initiatingMessage->value.choice.DLRRCMessageTransfer; + + ret = ROK; + + for(idx=0; idxprotocolIEs.list.count; idx++) + { + switch(dlRrcMsg->protocolIEs.list.array[idx]->id) + { + case ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID: + { + gnbCuUeF1apId = dlRrcMsg->protocolIEs.list.array[idx]->value.choice.GNB_CU_UE_F1AP_ID; + UNUSED(gnbCuUeF1apId); //This is currently not used + break; + } + case ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID: + { + gnbDuUeF1apId = dlRrcMsg->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID; + break; + } + case ProtocolIE_ID_id_SRBID: + { + srbId = dlRrcMsg->protocolIEs.list.array[idx]->value.choice.SRBID; + break; + } + case ProtocolIE_ID_id_RRCContainer: + { + DU_ALLOC(dlCcchMsg, dlRrcMsg->protocolIEs.list.array[idx]->value.choice.RRCContainer.size); + memcpy(dlCcchMsg, + dlRrcMsg->protocolIEs.list.array[idx]->value.choice.RRCContainer.buf, + dlRrcMsg->protocolIEs.list.array[idx]->value.choice.RRCContainer.size); + break; + } + + default: + DU_LOG("\nDU_APP : Invalid IE received in DL RRC Msg Transfer:%ld", + dlRrcMsg->protocolIEs.list.array[idx]->id); + } + } + + for(idx=0; idxcrnti; + duCb.ueCcchCtxt[duCb.numUe].cellId = ulCcchIndInfo->cellId; + + duCb.numUe++; + + ret = (BuildAndSendInitialRrcMsgTransfer(gnbDuUeF1apId, ulCcchIndInfo->crnti, + ulCcchIndInfo->ulCcchMsg)); + if(ret != ROK) + { + DU_LOG("\nDU_APP : BuildAndSendInitialRrcMsgTransfer failed"); + } + + DU_FREE_SHRABL_BUF(MAC_MEM_REGION, RG_POOL, ulCcchIndInfo->ulCcchMsg, strlen((const char*)ulCcchIndInfo->ulCcchMsg)); + DU_FREE_SHRABL_BUF(MAC_MEM_REGION, RG_POOL, ulCcchIndInfo, sizeof(UlCcchIndInfo)); + + return ret; + +} + + /********************************************************************** End of file ***********************************************************************/