{
if(dlRrcMsg->gnbDuUeF1apId == duCb.ueCcchCtxt[ueIdx].gnbDuUeF1apId)
{
- ueCcchCtxtFound = true;
+ ueCcchCtxtFound = true;
crnti = duCb.ueCcchCtxt[ueIdx].crnti;
cellId = duCb.ueCcchCtxt[ueIdx].cellId;
break;
{
*macAmbrCfgToSend = ueDbAmbr;
}
- else
+ else if(oldMacAmbrCfg)
*macAmbrCfgToSend = *oldMacAmbrCfg;
}
else
{
if(ueDbAmbr)
{
- if(*oldMacAmbrCfg)
- {
- DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, *oldMacAmbrCfg, sizeof(AmbrCfg));
- }
- DU_ALLOC_SHRABL_BUF(*oldMacAmbrCfg, sizeof(AmbrCfg));
- if(*oldMacAmbrCfg == NULLP)
+ if(oldMacAmbrCfg)
{
- DU_LOG("\nERROR --> DU APP : Memory Alloc Failed at fillAmbr()");
- return RFAILED;
+ if(*oldMacAmbrCfg)
+ {
+ DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, *oldMacAmbrCfg, sizeof(AmbrCfg));
+ }
+ DU_ALLOC_SHRABL_BUF(*oldMacAmbrCfg, sizeof(AmbrCfg));
+ if(*oldMacAmbrCfg == NULLP)
+ {
+ DU_LOG("\nERROR --> DU APP : Memory Alloc Failed at fillAmbr()");
+ return RFAILED;
+ }
+ memset(*oldMacAmbrCfg, 0, sizeof(AmbrCfg));
+ (*oldMacAmbrCfg)->ulBr = ueDbAmbr->ulBr;
}
- memset(*oldMacAmbrCfg, 0, sizeof(AmbrCfg));
- (*oldMacAmbrCfg)->ulBr = ueDbAmbr->ulBr;
}
}
* @return ROK/RFAILED
*
*****************************************************************/
-uint8_t fillMacUeCfg(uint16_t cellId, uint8_t ueId, uint16_t crnti, DuUeCfg *ueCfgDb, MacUeCfg *macUeCfg)
+uint8_t fillMacUeCfg(uint16_t cellId, uint8_t gnbDuUef1apId, uint16_t crnti, DuUeCfg *ueCfgDb, MacUeCfg *macUeCfg)
{
- uint8_t ret, dbIdx, lcIdx, cellIdx;
+ uint8_t ret = ROK, dbIdx = 0, lcIdx = 0, cellIdx = 0;
bool lcIdFound = false;
MacUeCfg *duMacDb = NULLP;
- ret =ROK;
+ macUeCfg->cellId = cellId;
+ if(crnti)
+ {
+ GET_UE_ID(crnti, macUeCfg->ueId);
+ macUeCfg->crnti = crnti;
+ }
+ macUeCfg->duUeF1apId = gnbDuUef1apId;
if(!ueCfgDb)
{
- macUeCfg->cellId = cellId;
- macUeCfg->ueId = ueId;
- macUeCfg->crnti = crnti;
-
fillDefaultMacCellGrpInfo(macUeCfg);
fillDefaultPhyCellGrpInfo(macUeCfg);
}
else
{
- /* Fetching MacDb from DuUeCb */
- GET_CELL_IDX(cellId, cellIdx);
- if(duCb.actvCellLst[cellIdx])
- duMacDb = &duCb.actvCellLst[cellIdx]->ueCb[ueId-1].macUeCfg;
- else
+ /* Fetching MacDb from DuUeCb.
+ * In case of UE hand-in, UE context is created before RRC setup. Hence
+ * crnti is not known yet. Thus, passing crnti=0 to this function.
+ * In such a case actvCellLst doesnt yet have any entry for this UE. So
+ * duMacDb will be NULL.
+ */
+ if(crnti != 0)
{
- DU_LOG("\nERROR --> DU APP : Cell Id [%d] does not exist", cellId);
- return RFAILED;
+ GET_CELL_IDX(cellId, cellIdx);
+ if(duCb.actvCellLst[cellIdx])
+ duMacDb = &duCb.actvCellLst[cellIdx]->ueCb[macUeCfg->ueId-1].macUeCfg;
+ else
+ {
+ DU_LOG("\nERROR --> DU APP : Cell Id [%d] does not exist", cellId);
+ return RFAILED;
+ }
+ duMacDb->macUeCfgState = UE_CFG_INPROGRESS;
}
- duMacDb->macUeCfgState = UE_CFG_INPROGRESS;
- /* Fetching MaUeCfg List for ADD/MOD/DEL */
- macUeCfg->cellId = cellId;
- macUeCfg->ueId = ueId;
- macUeCfg->crnti = crnti;
- ret = procUeReCfgCellInfo(macUeCfg, duMacDb, ueCfgDb->cellGrpCfg);
- if(ret == ROK)
+
+ if(ueCfgDb->cellGrpCfg)
{
- if(macUeCfg->spCellCfgPres == true)
+ ret = procUeReCfgCellInfo(macUeCfg, duMacDb, ueCfgDb->cellGrpCfg);
+ if(ret == ROK)
{
- if(macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschPresent)
+ if(macUeCfg->spCellCfgPres == true)
{
- fillStartSymbolAndLen(macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg.numTimeDomRsrcAlloc,\
- &macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg, NULL);
- }
- if(macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschPresent)
- {
- fillStartSymbolAndLen(macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg.numTimeDomRsrcAlloc,\
- NULL, &macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg);
+ if(macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschPresent)
+ {
+ fillStartSymbolAndLen(macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg.numTimeDomRsrcAlloc,\
+ &macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg, NULL);
+ }
+ if(macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschPresent)
+ {
+ fillStartSymbolAndLen(macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg.numTimeDomRsrcAlloc,\
+ NULL, &macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg);
+ }
}
+
+ if(duMacDb)
+ ret = fillAmbr(&macUeCfg->ambrCfg, ueCfgDb->ambrCfg , &duMacDb->ambrCfg, FALSE);
+ else
+ ret = fillAmbr(&macUeCfg->ambrCfg, ueCfgDb->ambrCfg , NULL, FALSE);
+
+ duFillModulationDetails(macUeCfg, duMacDb, ueCfgDb->ueNrCapability);
}
- ret = fillAmbr(&macUeCfg->ambrCfg, ueCfgDb->ambrCfg , &duMacDb->ambrCfg, FALSE);
- duFillModulationDetails(macUeCfg, duMacDb, ueCfgDb->ueNrCapability);
+ }
+ else
+ {
+ fillDefaultMacCellGrpInfo(macUeCfg);
+ fillDefaultPhyCellGrpInfo(macUeCfg);
+ fillDefaultSpCellGrpInfo(macUeCfg);
+ fillDefaultModulation(macUeCfg);
}
/* Filling LC Context */
ueCfgDb->macLcCfg[dbIdx].ulLcCfgPres = true;
fillDefaultUlLcCfg(&ueCfgDb->macLcCfg[dbIdx].ulLcCfg);
}
- for(lcIdx = 0; lcIdx < duMacDb->numLcs; lcIdx++)
+
+ if(duMacDb)
{
- if(ueCfgDb->macLcCfg[dbIdx].lcId == duMacDb->lcCfgList[lcIdx].lcId)
+ for(lcIdx = 0; lcIdx < duMacDb->numLcs; lcIdx++)
{
- lcIdFound = true;
- if((ueCfgDb->macLcCfg[dbIdx].configType == CONFIG_UNKNOWN) ||
- (ueCfgDb->macLcCfg[dbIdx].configType == CONFIG_MOD))
+ if(ueCfgDb->macLcCfg[dbIdx].lcId == duMacDb->lcCfgList[lcIdx].lcId)
{
- ueCfgDb->macLcCfg[dbIdx].configType = CONFIG_MOD;
- ret = fillMacLcCfgToAddMod(&macUeCfg->lcCfgList[dbIdx], &ueCfgDb->macLcCfg[dbIdx],\
- &duMacDb->lcCfgList[lcIdx], FALSE);
+ lcIdFound = true;
+ if((ueCfgDb->macLcCfg[dbIdx].configType == CONFIG_UNKNOWN) ||
+ (ueCfgDb->macLcCfg[dbIdx].configType == CONFIG_MOD))
+ {
+ ueCfgDb->macLcCfg[dbIdx].configType = CONFIG_MOD;
+ ret = fillMacLcCfgToAddMod(&macUeCfg->lcCfgList[dbIdx], &ueCfgDb->macLcCfg[dbIdx],\
+ &duMacDb->lcCfgList[lcIdx], FALSE);
+ }
}
+ else
+ lcIdFound = false;
}
- else
- lcIdFound = false;
}
+
if(!lcIdFound)
{
/* ADD/DEL CONFIG */
/* Filling Mac Ue Config */
memset(&duCb.actvCellLst[cellIdx]->ueCb[ueIdx].macUeCfg, 0, sizeof(MacUeCfg));
- ret = duBuildAndSendUeCreateReqToMac(ueCcchCtxt->cellId, ueId, ueCcchCtxt->crnti,\
+ ret = duBuildAndSendUeCreateReqToMac(ueCcchCtxt->cellId, ueCcchCtxt->gnbDuUeF1apId, ueCcchCtxt->crnti, NULL,
&duCb.actvCellLst[cellIdx]->ueCb[ueIdx].macUeCfg);
if(ret == RFAILED)
DU_LOG("\nERROR --> DU APP : Failed to send UE create request to MAC");
* @Params[in] cellId,
* ueId,
* crnti,
- * UE config
+ * UE config extracted from F1AP msg
+ * MAC UE config struct to be filled
* @return ROK - success
* RFAILED - failure
*
* ****************************************************************/
-uint8_t duBuildAndSendUeCreateReqToMac(uint16_t cellId, uint8_t ueId, uint16_t crnti, MacUeCfg *duMacUeCfg)
+uint8_t duBuildAndSendUeCreateReqToMac(uint16_t cellId, uint8_t gnbDuUeF1apId, uint16_t crnti, DuUeCfg *ueCfgDb, MacUeCfg *duMacUeCfg)
{
uint8_t ret = ROK;
MacUeCfg *macUeCfg = NULLP;
memset(&pst, 0, sizeof(Pst));
- ret = fillMacUeCfg(cellId, ueId, crnti, NULL, duMacUeCfg);
+ ret = fillMacUeCfg(cellId, gnbDuUeF1apId, crnti, ueCfgDb, duMacUeCfg);
if(ret == RFAILED)
{
DU_LOG("\nERROR --> DU APP : Failed to fill MacUeCfg at duBuildAndSendUeCreateReqToMac()");
return RFAILED;
}
+
/* Fill Pst */
FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_UE_CREATE_REQ);
ret = (*packMacUeCreateReqOpts[pst.selector])(&pst, macUeCfg);
if(ret == RFAILED)
{
- DU_LOG("\nERROR --> DU_APP : Failure in sending Ue Create Req to MAC at duBuildAndSendUeCreateReqToMac()");
- DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, macUeCfg, sizeof(MacUeCfg));
+ DU_LOG("\nERROR --> DU_APP : Failure in sending Ue Create Req to MAC at duBuildAndSendUeCreateReqToMac()");
+ DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, macUeCfg, sizeof(MacUeCfg));
}
}
else
* ****************************************************************/
uint8_t DuProcMacUeCfgRsp(Pst *pst, MacUeCfgRsp *cfgRsp)
{
- uint8_t ret = ROK;
+ uint8_t ret = ROK, ueIdx = 0, ueId = 0;
+ DuUeCb *ueCb = NULLP;
if(cfgRsp)
{
{
if(pst->event == EVENT_MAC_UE_CREATE_RSP)
{
- DU_LOG("\nINFO --> DU APP : MAC UE Create Response : SUCCESS [UE IDX : %d]", cfgRsp->ueId);
- duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].\
- macUeCfg.macUeCfgState = UE_CREATE_COMPLETE;
+ 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)
+ {
+ 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);
+ }
+ }
+
}
else if(pst->event == EVENT_MAC_UE_RECONFIG_RSP)
{
- DU_LOG("\nINFO --> DU APP : MAC UE Reconfig Response : SUCCESS [UE IDX : %d]", cfgRsp->ueId);
- duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].macUeCfg.macUeCfgState = UE_RECFG_COMPLETE;
- if((ret = duUpdateDuUeCbCfg(cfgRsp->ueId, cfgRsp->cellId)) == ROK)
+ 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++)
{
- BuildAndSendUeCtxtRsp(cfgRsp->cellId, 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);
+ }
}
}
}
else
{
- DU_LOG("\nERROR --> DU APP : MAC UE CFG Response for EVENT[%d]: FAILURE [UE IDX : %d]", pst->event, cfgRsp->ueId);
+ DU_LOG("\nERROR --> DU APP : MAC UE CFG Response for EVENT[%d]: FAILURE [DU UE F1AP ID : %d]", pst->event, cfgRsp->duUeF1apId);
if(pst->event == EVENT_MAC_UE_RECONFIG_RSP)
{
//TODO: Send the failure case in Ue Context Setup Response
*
* ****************************************************************/
-uint8_t duBuildAndSendUeReCfgReqToMac(uint8_t cellId, uint8_t crnti, DuUeCfg *ueCfgDb)
+uint8_t duBuildAndSendUeReCfgReqToMac(uint8_t cellId, uint8_t duUeF1apId, uint8_t crnti, DuUeCfg *ueCfgDb)
{
- uint8_t ret, ueId = 0;
+ uint8_t ret = ROK;
MacUeCfg *macUeCfg = NULLP;
- ret = ROK;
- GET_UE_ID(crnti, ueId);
-
DU_ALLOC_SHRABL_BUF(macUeCfg, sizeof(MacUeCfg));
if(macUeCfg)
{
memset(macUeCfg, 0, sizeof(MacUeCfg));
- ret = fillMacUeCfg(cellId, ueId, crnti, ueCfgDb, macUeCfg);
+ ret = fillMacUeCfg(cellId, duUeF1apId, crnti, ueCfgDb, macUeCfg);
if(ret == RFAILED)
DU_LOG("\nERROR --> DU APP : Failed to fill Mac Ue Cfg at duBuildAndSendUeReCfgReqToMac()");
else
*
*****************************************************************/
-uint8_t duBuildAndSendUeContextSetupReq(uint16_t cellId, uint16_t crnti, DuUeCfg *duUeCfg)
+uint8_t duBuildAndSendUeContextSetupReq(uint16_t cellId, DuUeCb *ueCb)
{
uint8_t ret = ROK;
+ uint16_t crnti;
+ DuUeCfg *duUeCfg = NULLP;
DU_LOG("\nDEBUG --> DU_APP: Processing Ue Context Setup Request for cellId [%d]", cellId);
- /* Filling RLC Ue Reconfig */
- ret = duBuildAndSendUeReCfgReqToRlc(cellId, crnti, duUeCfg);
- if(ret == RFAILED)
- DU_LOG("\nERROR --> DU APP : Failed to build ctxt setup req for RLC at duBuildAndSendUeContextSetupReq()");
-
- /* Filling MAC Ue Reconfig */
- ret = duBuildAndSendUeReCfgReqToMac(cellId, crnti, duUeCfg);
- if(ret == RFAILED)
- DU_LOG("\nERROR --> DU APP : Failed at build ctxt setup req for MAC at duBuildAndSendUeContextSetupReq()");
+
+ if(!ueCb)
+ {
+ DU_LOG("\nERROR --> DU APP : UE Cb is NULL");
+ return RFAILED;
+ }
+
+ crnti = ueCb->crnti;
+ duUeCfg = &ueCb->f1UeDb->duUeCfg;
+
+ /* If UE is being handed-in to this DU, UE context setup request will create
+ * new UE context at MAC/SCH and RLC.
+ * If UE is in active state, UE contex setup request will lead to
+ * reconfiguration of UE at MAC/SCH and RLC
+ */
+ if(ueCb->ueState == UE_HANDIN_IN_PROGRESS)
+ {
+ /* Filling MAC UE Config */
+ memset(&ueCb->macUeCfg, 0, sizeof(MacUeCfg));
+
+ /* Since UE attach has not yet happened, ueId and crnti is unknow. Hence
+ * passing 0 */
+ ret = duBuildAndSendUeCreateReqToMac(cellId, ueCb->gnbDuUeF1apId, 0, duUeCfg, &ueCb->macUeCfg);
+ if(ret == RFAILED)
+ DU_LOG("\nERROR --> DU APP : Failed to send UE create request to MAC");
+ }
+ else
+ {
+ /* Filling RLC UE Reconfig */
+ ret = duBuildAndSendUeReCfgReqToRlc(cellId, crnti, duUeCfg);
+ if(ret == RFAILED)
+ DU_LOG("\nERROR --> DU APP : Failed to build ctxt setup req for RLC at duBuildAndSendUeContextSetupReq()");
+
+ /* Filling MAC UE Reconfig */
+ ret = duBuildAndSendUeReCfgReqToMac(cellId, ueCb->gnbDuUeF1apId, crnti, duUeCfg);
+ if(ret == RFAILED)
+ DU_LOG("\nERROR --> DU APP : Failed at build ctxt setup req for MAC at duBuildAndSendUeContextSetupReq()");
+ }
return ret;
}
{
if(ueCb->f1UeDb->actionType == UE_CTXT_SETUP)
{
- ret = duBuildAndSendUeContextSetupReq(cellId, crnti, &ueCb->f1UeDb->duUeCfg);
+ ret = duBuildAndSendUeContextSetupReq(cellId, ueCb);
if(ret == RFAILED)
DU_LOG("\nERROR --> DU APP : Failed to process UE Context Setup Request in DuProcRlcDlRrcMsgRsp()");
}
if(ueCb->f1UeDb->actionType == UE_CTXT_MOD)
{
- ret = duBuildAndSendUeContextModReq(cellId, crnti, &ueCb->f1UeDb->duUeCfg);
+ ret = duBuildAndSendUeContextModReq(cellId, ueCb->gnbDuUeF1apId, crnti, &ueCb->f1UeDb->duUeCfg);
if(ret == RFAILED)
DU_LOG("\nERROR --> DU APP : Failed to process UE Context Mod Request in DuProcRlcDlRrcMsgRsp()");
}
if(ueCb)
{
cellId = duCb.actvCellLst[ueCb->f1UeDb->cellIdx]->cellId;
+
/* Send DL RRC msg for security Mode */
if(ueCb->f1UeDb->dlRrcMsg)
{
}
else if(ueCb->f1UeDb->actionType == UE_CTXT_SETUP)
{
- ret = duBuildAndSendUeContextSetupReq(cellId, ueCb->crnti, &ueCb->f1UeDb->duUeCfg);
+ ret = duBuildAndSendUeContextSetupReq(cellId, ueCb);
if(ret == RFAILED)
{
DU_LOG("\nERROR --> DU APP : Failed to build ue context setup Req in duProcUeContextSetupRequest()");
*
*****************************************************************/
-uint8_t duBuildAndSendUeContextModReq(uint16_t cellId, uint16_t crnti, DuUeCfg *duUeCfg)
+uint8_t duBuildAndSendUeContextModReq(uint16_t cellId, uint8_t gnbDuUeF1apId, uint16_t crnti, DuUeCfg *duUeCfg)
{
uint8_t ret = ROK;
DU_LOG("\nERROR --> DU APP : Failed to build ctxt setup req for RLC at duBuildAndSendUeContextModReq()");
/* Filling MAC Ue Reconfig */
- ret = duBuildAndSendUeReCfgReqToMac(cellId, crnti, duUeCfg);
+ ret = duBuildAndSendUeReCfgReqToMac(cellId, gnbDuUeF1apId, crnti, duUeCfg);
if(ret == RFAILED)
DU_LOG("\nERROR --> DU APP : Failed at build ctxt setup req for MAC at duBuildAndSendUeContextModReq()");
}
else if(ueCb->f1UeDb->actionType == UE_CTXT_MOD)
{
- ret = duBuildAndSendUeContextModReq(cellId, ueCb->crnti, &ueCb->f1UeDb->duUeCfg);
+ ret = duBuildAndSendUeContextModReq(cellId, ueCb->gnbDuUeF1apId, ueCb->crnti, &ueCb->f1UeDb->duUeCfg);
if(ret == RFAILED)
{
DU_LOG("\nERROR --> DU APP : Failed to build ue context setup Req in duProcUeContextModReq()");