packDuMacCellDeleteReq /* Light weight-loose coupling */
};
+DuMacDlPcchInd packMacDlPcchIndOpts[] =
+{
+ packDuMacDlPcchInd, /* Loose coupling */
+ MacProcDlPcchInd, /* TIght coupling */
+ packDuMacDlPcchInd /* Light weight-loose coupling */
+};
+
/*******************************************************************
*
* @brief Processes cells to be activated
*
* @params[in] DuCellCb *cellCb
*
-* @return void
+* @return ROK/RFAILURE (uint8_t return)
*
*
******************************************************************************/
/*No Page is present for pf thus exiting*/
return ROK;
}
-
+
do
{
pagInfo = handlePageInfoLL(pf, NULLD, &(pagInfoLLFromPF->pagInfoList), TRAVERSE_ALL);
if(pagInfo != NULLP)
{
- if(buildAndSendPagingReqToMac(pf, pagInfo->i_s, &(pagInfo->pagUeList)) != ROK)
+ if(BuildAndSendDlPcchIndToMac(cellCb->cellId, pf, pagInfo->i_s, &(pagInfo->pagUeList)) != ROK)
{
DU_LOG("\nERROR --> DU APP: Issue in Building Page RRC PDU i_s:%d",pagInfo->i_s);
return RFAILED;
}
handlePageInfoLL(pf, pagInfo->i_s, &(pagInfoLLFromPF->pagInfoList), DELETE);
}
+ if(pagInfoLLFromPF->pagInfoList.first == NULLP)
+ {
+ break;
+ }
}while(pagInfo != NULLP);
cmHashListDelete(&(cellCb->pagingInfoMap), (PTR)pagInfoLLFromPF);
+ DU_FREE(pagInfoLLFromPF, sizeof(DuPagInfoList));
return ROK;
}
+/******************************************************************
+ *
+ * @brief Send pcch indication to MAC
+ *
+ * @details
+ *
+ * Function : sendDlPcchIndToMac
+ *
+ * Functionality: Send pcch indication to MAC
+ *
+ * @Params[in] DlPcchInd *pcchInd
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ * ****************************************************************/
+
+uint8_t sendDlPcchIndToMac(DlPcchInd *pcchInd)
+{
+ uint8_t ret = ROK;
+ Pst pst;
+
+ if(pcchInd)
+ {
+ /* Fill Pst */
+ FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_DL_PCCH_IND);
+
+ ret = (*packMacDlPcchIndOpts[pst.selector])(&pst, pcchInd);
+ if(ret == RFAILED)
+ {
+ DU_LOG("\nERROR --> DU APP : sendDlPcchIndToMac(): Failed to DL PCCH indication to MAC");
+ }
+ }
+ else
+ {
+ DU_LOG("\nERROR --> DU APP: sendDlPcchIndToMac(): Received pcchInd is NULLP");
+ ret = RFAILED;
+ }
+ return ret;
+}
+
+
/*****************************************************************
* @brief Handles slot indication from MAC
*
uint8_t DuProcMacCellDeleteRsp(Pst *pst, MacCellDeleteRsp *deleteRsp)
{
uint8_t ret = ROK;
- uint16_t cellIdx=0;
-
+ uint16_t cellIdx=0, pfIdx=0;
+ DuPagInfoList *pagInfoLLFromPF=NULLP;
+
if(deleteRsp)
{
if(deleteRsp->result == SUCCESSFUL_RSP)
DU_LOG("\nINFO --> DU APP : MAC CELL Delete Response : SUCCESS [CELL IDX : %d]", deleteRsp->cellId);
if(duCb.actvCellLst[cellIdx] && (duCb.actvCellLst[cellIdx]->cellId == deleteRsp->cellId))
{
+ for(pfIdx =0; pfIdx < MAX_SFN; pfIdx++)
+ {
+ pagInfoLLFromPF = findPagingInfoFromMap(pfIdx, &(duCb.actvCellLst[cellIdx]->pagingInfoMap));
+ if(pagInfoLLFromPF)
+ {
+ cmHashListDelete(&(duCb.actvCellLst[cellIdx]->pagingInfoMap), (PTR)pagInfoLLFromPF);
+ DU_FREE(pagInfoLLFromPF, sizeof(DuPagInfoList));
+ }
+ }
+
memset(duCb.actvCellLst[cellIdx], 0, sizeof(DuCellCb));
gCellStatus = CELL_DOWN;
{
Pst pst;
uint8_t ret=ROK;
- MacCellDelete *cellDelete = NULLP;
+ MacCellDeleteReq *cellDelete = NULLP;
- DU_ALLOC_SHRABL_BUF(cellDelete, sizeof(MacCellDelete));
+ DU_ALLOC_SHRABL_BUF(cellDelete, sizeof(MacCellDeleteReq));
if(cellDelete)
{
cellDelete->cellId = cellId;
if(ret == RFAILED)
{
DU_LOG("\nERROR --> DU APP : sendCellDeleteReqToMac(): Failed to send Cell delete Req to MAC");
- DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cellDelete, sizeof(MacCellDelete));
+ DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cellDelete, sizeof(MacCellDeleteReq));
}
}
else
{
if(pagingMsg->pagingRecordList)
{
- if(pagingMsg->pagingRecordList->list.array == NULLP)
+ if(pagingMsg->pagingRecordList->list.array != NULLP)
{
for(recordIdx = 0; recordIdx < pagingMsg->pagingRecordList->list.count; recordIdx++)
{
}
/*******************************************************************
- * @brief Builds the Paging RRC PDU and forwards it to MAC
+ * @brief Builds the Pcch RRC PDU and forwards it to MAC
*
* @details
*
- * Function : buildAndSendPagingReqToMac
+ * Function : BuildAndSendDlPcchIndToMac
*
- * Functionality: Builds the Paging RRC PDU[As per Spec 38.331, Annexure A]
+ * Functionality: Builds the Pcch RRC PDU[As per Spec 38.331, Annexure A]
* and forwards it to MAC as Buffer along with PF and i_s
*
- * @params[in] uint16_t pf, uint8_t i_s,CmLListCp *pageUeLL
+ * @params[in] uint16_t cellId, uint16_t pf, uint8_t i_s,CmLListCp *pageUeLL
*
* @return ROK - success
* RFAILED - failure
*
* ****************************************************************/
-uint8_t buildAndSendPagingReqToMac(uint16_t pf, uint8_t i_s, CmLListCp *pageUeLL)
+uint8_t BuildAndSendDlPcchIndToMac(uint16_t cellId, uint16_t pf, uint8_t i_s, CmLListCp *pageUeLL)
{
CmLList *node = NULLP, *next = NULLP;
DuPagUeRecord *ueRecord = NULLP;
PCCH_Message_t *pcchMsg = NULLP;
- asn_enc_rval_t encRetVal;
+ asn_enc_rval_t encRetVal;
PagingRrc_t *pagingMsg = NULLP;
- MacPageReq *macPageReq = NULLP;
- uint16_t bufIdx = 0;
- uint8_t recordIdx = 0, ret = RFAILED;
+ DlPcchInd *macPcchInd = NULLP;
+ uint8_t recordIdx = 0, ret = RFAILED;
/*As per 38.473 Sec 9.3.1.39,5G-S-TMSI :48 Bits >> Bytes and 0 UnusedBits */
uint8_t totalByteInTmsi = 6, unusedBitsInTmsi = 0;
DU_ALLOC(pcchMsg , sizeof(PCCH_Message_t));
if(pcchMsg == NULLP)
{
- DU_LOG("\nERROR --> DU APP: buildAndSendPagingToMac(): (pccchMsg) Memory Alloction failed!");
+ DU_LOG("\nERROR --> DU APP: BuildAndSendDlPcchIndToMac(): (pccchMsg) Memory Alloction failed!");
break;
}
pcchMsg->message.present = PCCH_MessageType_PR_c1;
DU_ALLOC(pcchMsg->message.choice.c1 , sizeof(PCCH_MessageType_t));
if(pcchMsg->message.choice.c1 == NULLP)
{
- DU_LOG("\nERROR --> DU APP: buildAndSendPagingToMac(); (C1) Memory Alloction failed!");
+ DU_LOG("\nERROR --> DU APP: BuildAndSendDlPcchIndToMac(); (C1) Memory Alloction failed!");
break;
}
pcchMsg->message.choice.c1->present = PCCH_MessageType__c1_PR_paging;
pagingMsg = pcchMsg->message.choice.c1->choice.paging;
if(pagingMsg == NULLP)
{
- DU_LOG("\nERROR --> DU APP: buildAndSendPagingToMac(); (Paging) Memory Alloction failed!");
+ DU_LOG("\nERROR --> DU APP: BuildAndSendDlPcchIndToMac(); (Paging) Memory Alloction failed!");
break;
}
DU_ALLOC(pagingMsg->pagingRecordList, sizeof(PagingRecordList_t));
if(pagingMsg->pagingRecordList == NULLP)
{
- DU_LOG("\nERROR --> DU APP: buildAndSendPagingToMac(); (Paging Record List) Memory Alloction failed!");
+ DU_LOG("\nERROR --> DU APP: BuildAndSendDlPcchIndToMac(); (Paging Record List) Memory Alloction failed!");
break;
}
DU_ALLOC(pagingMsg->pagingRecordList->list.array, pagingMsg->pagingRecordList->list.size);
if(pagingMsg->pagingRecordList->list.array == NULLP)
{
- DU_LOG("\nERROR --> DU APP: buildAndSendPagingToMac(); (Array) Memory Alloction failed!");
+ DU_LOG("\nERROR --> DU APP: BuildAndSendDlPcchIndToMac(); (Array) Memory Alloction failed!");
break;
}
for(recordIdx = 0; recordIdx < pageUeLL->count; recordIdx++)
DU_ALLOC(pagingMsg->pagingRecordList->list.array[recordIdx], sizeof(PagingRecord_t));
if(pagingMsg->pagingRecordList->list.array[recordIdx] == NULLP)
{
- DU_LOG("\nERROR --> DU APP: buildAndSendPagingToMac(); (Record) Memory Alloction failed!");
+ DU_LOG("\nERROR --> DU APP: BuildAndSendDlPcchIndToMac(); (Record) Memory Alloction failed!");
break;
}
}
pagingMsg->pagingRecordList->list.array[recordIdx]->ue_Identity.choice.ng_5G_S_TMSI.size);
if(pagingMsg->pagingRecordList->list.array[recordIdx]->ue_Identity.choice.ng_5G_S_TMSI.buf == NULLP)
{
- DU_LOG("\nERROR --> DU APP: buildAndSendPagingToMac(); (5gsTmsi buffer) Memory Allocation failed!");
+ DU_LOG("\nERROR --> DU APP: BuildAndSendDlPcchIndToMac(); (5gsTmsi buffer) Memory Allocation failed!");
break;
}
fillBitString(&pagingMsg->pagingRecordList->list.array[recordIdx]->ue_Identity.choice.ng_5G_S_TMSI,\
memset(encBuf, 0, ENC_BUF_MAX_LEN);
encBufSize = 0;
/* Encode the PCCH RRC PDU as APER */
- encRetVal = aper_encode(&asn_DEF_PCCH_Message, 0, pcchMsg, PrepFinalEncBuf,\
+ encRetVal = uper_encode(&asn_DEF_PCCH_Message, 0, pcchMsg, PrepFinalEncBuf,\
encBuf);
if(encRetVal.encoded == ENCODE_FAIL)
}
else
{
- DU_LOG("\nDEBUG --> F1AP : Created APER encoded buffer for RRCPDU for PagingMsg \n");
+ DU_LOG("\nDEBUG --> F1AP : Created APER encoded buffer for RRC PDU for Pcch indication \n");
- DU_ALLOC_SHRABL_BUF(macPageReq, sizeof(MacPageReq));
- if(macPageReq == NULLP)
+ DU_ALLOC_SHRABL_BUF(macPcchInd, sizeof(DlPcchInd));
+ if(macPcchInd == NULLP)
{
- DU_LOG("\nERROR --> DU APP: buildAndSendPagingToMac(); (macPageReq) Memory Alloction failed!");
+ DU_LOG("\nERROR --> DU APP: BuildAndSendDlPcchIndToMac(); (macPcchInd) Memory Alloction failed!");
break;
}
- macPageReq->pf = pf;
- macPageReq->i_s = i_s;
- macPageReq->pduLen = encBufSize;
- DU_ALLOC_SHRABL_BUF(macPageReq->pagePdu, macPageReq->pduLen);
- if(macPageReq->pagePdu == NULLP)
+ macPcchInd->cellId = cellId;
+ macPcchInd->pf = pf;
+ macPcchInd->i_s = i_s;
+ macPcchInd->pduLen = encBufSize;
+ DU_ALLOC_SHRABL_BUF(macPcchInd->pcchPdu, macPcchInd->pduLen);
+ if(macPcchInd->pcchPdu == NULLP)
{
- DU_LOG("\nERROR --> DU APP: buildAndSendPagingToMac(); (PagePDU) Memory Alloction failed!");
+ DU_LOG("\nERROR --> DU APP: BuildAndSendDlPcchIndToMac(); (PcchPDU) Memory Alloction failed!");
+ break;
+ }
+ memcpy(macPcchInd->pcchPdu, encBuf, macPcchInd->pduLen);
+ ret = sendDlPcchIndToMac(macPcchInd);
+ if(ret != ROK)
+ {
+ DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, macPcchInd->pcchPdu, macPcchInd->pduLen);
+ DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, macPcchInd, sizeof(DlPcchInd));
break;
}
- memcpy(macPageReq->pagePdu, encBuf, macPageReq->pduLen);
}
ret = ROK;
break;
#if 0
printPageList(&(cellCb->pagingInfoMap));
#endif
-
+
return ROK;
rcvdF1apPagingParam->pagingFrame = (sfn % MAX_SFN);
rcvdF1apPagingParam->i_s = ((uint32_t)(floor(rcvdF1apPagingParam->pagUeId / N)) % ns);
- DU_LOG("\nINFO --> DU APP : Successfully filled paging parameter in DuCellCb");
memcpy(&cellCb->tmpPagingInfoOfUe, rcvdF1apPagingParam, sizeof(DuPagingMsg));
}
else