*******************************************************************************/
/* This file contains UE management handling functionality for DU APP */
#include "du_ue_mgr.h"
-#include "du_cfg.h"
#ifdef EGTP_TEST
U32 sduId = 0;
#endif
+DuMacDlCcchInd packMacDlCcchIndOpts[] =
+{
+ packMacDlCcchInd, /* Loose coupling */
+ MacHdlDlCcchInd, /* TIght coupling */
+ packMacDlCcchInd /* Light weight-loose coupling */
+};
+
/******************************************************************
*
* @brief Send UE configuration to RLC
break;
}
- defualt:
+ default:
break;
} /* End of switch(entMode) */
} /* End of entity configuration for loop */
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; idx<dlRrcMsg->protocolIEs.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; idx<duCb.numUe; idx++)
+ {
+ if(gnbDuUeF1apId == duCb.ueCcchCtxt[idx].gnbDuUeF1apId)
+ {
+ crnti = duCb.ueCcchCtxt[idx].crnti;
+ cellId = duCb.ueCcchCtxt[idx].cellId;
+ }
+ }
+ if(srbId == 0) //RRC connection setup
+ {
+ ret = duBuildAndSendDlCcchInd(dlCcchMsg, crnti, cellId, RRC_SETUP);
+ }
+ return ret;
+}
+
+/******************************************************************
+ *
+ * @brief Generates GNB DU Ue F1AP ID
+ *
+ * @details
+ *
+ * Function : genGnbDuUeF1apId
+ *
+ * Functionality: Generates GNB DU Ue F1AP ID
+ *
+ * @params[in] void
+ * @return gnbDuF1apId
+ *
+ * ****************************************************************/
+uint32_t genGnbDuUeF1apId()
+{
+ static uint32_t gnbDuUeF1apId = 0;
+
+ return ++gnbDuUeF1apId;
+}
+/******************************************************************
+ *
+ * @brief Processes UL CCCH Ind recvd from MAC
+ *
+ * @details
+ *
+ * Function : duProcUlCcchInd
+ *
+ * Functionality: Processes UL CCCH Ind recvd from MAC
+ *
+ * @params[in] UlCcchIndInfo *ulCcchIndInfo
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t duProcUlCcchInd(UlCcchIndInfo *ulCcchIndInfo)
+{
+
+ uint8_t ret = ROK;
+ uint32_t gnbDuUeF1apId = 0;
+
+ gnbDuUeF1apId = genGnbDuUeF1apId();
+
+ /* Store Ue mapping */
+ duCb.ueCcchCtxt[duCb.numUe].gnbDuUeF1apId = gnbDuUeF1apId;
+ duCb.ueCcchCtxt[duCb.numUe].crnti = ulCcchIndInfo->crnti;
+ 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
***********************************************************************/