return ret;
}
-/******************************************************************
- *
- * @brief Generates GNB DU Ue F1AP ID
- *
- * @details
- *
- * Function : genGnbDuUeF1apId
- *
- * Functionality: Generates GNB DU Ue F1AP ID
- *
- * @params[in] void
- * @return gnbDuF1apId
- *
- * ****************************************************************/
-int32_t genGnbDuUeF1apId(uint8_t cellId)
-{
- uint8_t cellIdx =0;
-
- GET_CELL_IDX(cellId, cellIdx);
- if(duCb.actvCellLst[cellIdx])
- {
- return ++duCb.gnbDuUeF1apIdGenerator;
- }
- else
- {
- DU_LOG("ERROR --> DU_APP : genGnbDuUeF1apId(): CellId[%d] does not exist", cellId);
- }
- return -1;
-}
-
/******************************************************************
*
* @brief Processes UL CCCH Ind recvd from MAC
uint8_t ret = ROK;
int32_t gnbDuUeF1apId = 0;
- gnbDuUeF1apId = genGnbDuUeF1apId(ulCcchIndInfo->cellId);
-
- if(gnbDuUeF1apId == -1)
+ if(ulCcchIndInfo->crnti)
+ {
+ GET_UE_ID(ulCcchIndInfo->crnti, gnbDuUeF1apId);
+ }
+ else
{
- DU_LOG("ERROR --> DU_APP : duProcUlCcchInd(): Received cellId[%d] does not exist", ulCcchIndInfo->cellId);
+ DU_LOG("\nERROR --> DU_APP : Received invalid CRNTI [%d] ", ulCcchIndInfo->crnti);
return RFAILED;
}
-
+
/* Store Ue mapping */
duCb.ueCcchCtxt[duCb.numUe].gnbDuUeF1apId = (uint32_t)gnbDuUeF1apId;
duCb.ueCcchCtxt[duCb.numUe].crnti = ulCcchIndInfo->crnti;
bool lcIdFound = false;
MacUeCfg *duMacDb = NULLP;
- macUeCfg->cellId = cellId;
- if(crnti)
- {
- GET_UE_ID(crnti, macUeCfg->ueId);
- macUeCfg->crnti = crnti;
- }
- macUeCfg->duUeF1apId = gnbDuUef1apId;
+ macUeCfg->cellId = cellId;
+ macUeCfg->ueId = gnbDuUef1apId;
+ macUeCfg->crnti = crnti;
if(!ueCfgDb)
{
* ****************************************************************/
uint8_t DuProcMacUeCfgRsp(Pst *pst, MacUeCfgRsp *cfgRsp)
{
- uint8_t ret = ROK, ueIdx = 0, ueId = 0;
- DuUeCb *ueCb = NULLP;
+ uint8_t ret = ROK;
+ uint16_t cellIdx;
if(cfgRsp)
{
+ GET_CELL_IDX(cfgRsp->cellId, cellIdx);
if(cfgRsp->result == MAC_DU_APP_RSP_OK)
{
if(pst->event == EVENT_MAC_UE_CREATE_RSP)
{
- DU_LOG("\nINFO --> DU APP : MAC UE Create Response : SUCCESS [DU UE F1AP ID : %d]", cfgRsp->duUeF1apId);
-
- for(ueIdx = 0; ueIdx < MAX_NUM_UE; ueIdx++)
- {
- if(duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[ueIdx].gnbDuUeF1apId == cfgRsp->duUeF1apId)
- {
- ueCb = &duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[ueIdx];
- ueCb->macUeCfg.macUeCfgState = UE_CREATE_COMPLETE;
- break;
- }
- }
- if(!ueCb)
+ DU_LOG("\nINFO --> DU APP : MAC UE Create Response : SUCCESS [DU UE F1AP ID : %d]", cfgRsp->ueId);
+
+ if(duCb.actvCellLst[cellIdx] &&
+ (duCb.actvCellLst[cellIdx]->ueCb[cfgRsp->ueId -1].gnbDuUeF1apId == cfgRsp->ueId))
{
- if(duCb.actvCellLst[cfgRsp->cellId -1]->hoUeCb[cfgRsp->duUeF1apId-1].gnbDuUeF1apId == cfgRsp->duUeF1apId)
- {
- ueCb = &duCb.actvCellLst[cfgRsp->cellId -1]->hoUeCb[cfgRsp->duUeF1apId-1];
- ueCb->macUeCfg.macUeCfgState = UE_CREATE_COMPLETE;
- //TODO : in next gerrit
- //BuildAndSendUeCtxtRsp(cfgRsp->cellId, cfgRsp->ueId);
- }
- }
+ duCb.actvCellLst[cellIdx]->ueCb[cfgRsp->ueId -1].macUeCfg.macUeCfgState = UE_CREATE_COMPLETE;
+ /* TODO : IF UE state is HANDIN_IN_PROGRESS, then send UE Context Setup Response */
+ }
}
else if(pst->event == EVENT_MAC_UE_RECONFIG_RSP)
{
- DU_LOG("\nINFO --> DU APP : MAC UE Reconfig Response : SUCCESS [DU UE F1AP ID : %d]", cfgRsp->duUeF1apId);
- for(ueIdx = 0; ueIdx < MAX_NUM_UE; ueIdx++)
+ DU_LOG("\nINFO --> DU APP : MAC UE Reconfig Response : SUCCESS [DU UE F1AP ID : %d]", cfgRsp->ueId);
+ if(duCb.actvCellLst[cellIdx] &&
+ (duCb.actvCellLst[cellIdx]->ueCb[cfgRsp->ueId -1].gnbDuUeF1apId == cfgRsp->ueId))
{
- if(duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[ueIdx].gnbDuUeF1apId == cfgRsp->duUeF1apId)
- {
- ueCb = &duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[ueIdx];
- ueCb->macUeCfg.macUeCfgState = UE_RECFG_COMPLETE;
- break;
- }
- }
-
- if(ueCb)
- {
- GET_UE_ID(ueCb->crnti, ueId);
- if((ret = duUpdateDuUeCbCfg(ueId, cfgRsp->cellId)) == ROK)
- {
- BuildAndSendUeCtxtRsp(cfgRsp->cellId, ueId);
+ duCb.actvCellLst[cellIdx]->ueCb[cfgRsp->ueId -1].macUeCfg.macUeCfgState = UE_RECFG_COMPLETE;
+ if((ret = duUpdateDuUeCbCfg(cfgRsp->ueId, cfgRsp->cellId)) == ROK)
+ {
+ BuildAndSendUeCtxtRsp(cfgRsp->cellId, cfgRsp->ueId);
}
}
}
}
else
{
- DU_LOG("\nERROR --> DU APP : MAC UE CFG Response for EVENT[%d]: FAILURE [DU UE F1AP ID : %d]", pst->event, cfgRsp->duUeF1apId);
+ DU_LOG("\nERROR --> DU APP : MAC UE CFG Response for EVENT[%d]: FAILURE [DU UE F1AP ID : %d]", pst->event, cfgRsp->ueId);
if(pst->event == EVENT_MAC_UE_RECONFIG_RSP)
{
//TODO: Send the failure case in Ue Context Setup Response
* RFAILED - failure
*
* ****************************************************************/
-uint8_t deleteUeCfg(uint16_t cellIdx, uint8_t ueId)
+uint8_t deleteUeCfg(uint16_t cellId, uint8_t ueId)
{
uint8_t tnlIdx = 0;
+ uint16_t cellIdx = 0;
DuUeCb *ueCb = NULLP;
+ GET_CELL_IDX(cellId, cellIdx);
if(duCb.actvCellLst[cellIdx] != NULLP)
{
if((duCb.actvCellLst[cellIdx]->ueCb[ueId-1].macUeCfg.macUeCfgState == UE_DELETE_COMPLETE)\
else
tnlIdx++;
}
+ unsetBitInUeBitMap(cellId, ueId-1);
duCb.actvCellLst[cellIdx]->numActvUes--;
memset(ueCb, 0, sizeof(DuUeCb));
}
{
duCb.actvCellLst[cellIdx]->ueCb[deleteRsp->ueId -1].macUeCfg.macUeCfgState = UE_DELETE_COMPLETE;
ueId = deleteRsp->ueId;
- gnbCuUeF1apId = duCb.actvCellLst[cellIdx]->ueCb[ueId-1].gnbDuUeF1apId;
- gnbDuUeF1apId = duCb.actvCellLst[cellIdx]->ueCb[ueId-1].gnbCuUeF1apId;
- if(deleteUeCfg(cellIdx, ueId) == ROK)
+ gnbCuUeF1apId = duCb.actvCellLst[cellIdx]->ueCb[ueId-1].gnbCuUeF1apId;
+ gnbDuUeF1apId = duCb.actvCellLst[cellIdx]->ueCb[ueId-1].gnbDuUeF1apId;
+ if(deleteUeCfg(deleteRsp->cellId, ueId) == ROK)
{
ret = BuildAndSendUeContextReleaseComplete(deleteRsp->cellId, gnbCuUeF1apId, gnbDuUeF1apId);
if(ret != ROK)