uint8_t ret = ROK;
schUeCfg->cellId = ueCfg->cellId;
+ schUeCfg->ueId = ueCfg->ueId;
schUeCfg->crnti = ueCfg->crnti;
-
+ schUeCfg->dataTransmissionInfo = ueCfg->transmissionAction;
/* Copy MAC cell group config */
if(ueCfg->macCellGrpCfgPres == true)
{
{
uint8_t ret = ROK;
- ueCb->ueIdx = ueCfg->ueIdx;
+ ueCb->ueId = ueCfg->ueId;
ueCb->crnti = ueCfg->crnti;
ueCb->cellCb = macCb.macCell[cellIdx];
if(ueCfg->spCellCfgPres)
ueCb->dlInfo.dlHarqEnt.numHarqProcs = \
ueCfg->spCellCfg.servCellCfg.pdschServCellCfg.numHarqProcForPdsch;
}
- ueCb->state = UE_STATE_ACTIVE;
+
/*TODO: To check the bsr value during implementation */
if(ueCfg->macCellGrpCfgPres)
{
{
DU_LOG("\nERROR --> MAC: Failed while filing MAC LC List at fillMacUeCb()");
}
+ ueCb->transmissionAction = ueCfg->transmissionAction;
return ret;
}
uint8_t updateMacRaCb(uint16_t cellIdx, MacUeCb *ueCb)
{
- uint8_t ueIdx;
/* Copy RA Cb */
- for(ueIdx = 0; ueIdx < MAX_NUM_UE; ueIdx++)
+ if(macCb.macCell[cellIdx]->macRaCb[ueCb->ueId-1].crnti == ueCb->crnti)
{
- if(macCb.macCell[cellIdx]->macRaCb[ueIdx].crnti == ueCb->crnti)
- {
- ueCb->raCb = &macCb.macCell[cellIdx]->macRaCb[ueIdx];
- break;
- }
+ ueCb->raCb = &macCb.macCell[cellIdx]->macRaCb[ueCb->ueId-1];
+ }
+ else
+ {
+ DU_LOG("\nERROR --> MAC : No RA CB found for UE ID [%d]", ueCb->ueId);
+ return RFAILED;
}
return ROK;
}
{
uint8_t ret =ROK;
- if((ueCb->ueIdx == ueCfg->ueIdx) && (ueCb->crnti == ueCfg->crnti)\
+ if((ueCb->ueId == ueCfg->ueId) && (ueCb->crnti == ueCfg->crnti)\
&&(ueCb->state == UE_STATE_ACTIVE))
{
DU_LOG("\nERROR --> MAC : CRNTI %d already configured ", ueCfg->crnti);
}
else
{
- macCb.macCell[cellIdx]->numActvUe++;
- updateMacRaCb(cellIdx, ueCb);
- return ROK;
- }
+ /* If UE has not requested for RACH yet, it means UE context is created for a
+ * UE in handover */
+ if(macCb.macCell[cellIdx]->macRaCb[ueCb->ueId-1].crnti == ueCb->crnti)
+ {
+ ueCb->state = UE_STATE_ACTIVE;
+ macCb.macCell[cellIdx]->numActvUe++;
+ updateMacRaCb(cellIdx, ueCb);
+ }
+ else
+ ueCb->state = UE_HANDIN_IN_PROGRESS;
+ return ROK;
+ }
}
-
+ return ROK;
}
/*******************************************************************
{
uint8_t ret = ROK;
- if((ueCb->ueIdx == ueCfg->ueIdx) && (ueCb->crnti == ueCfg->crnti)\
- &&(ueCb->state == UE_STATE_ACTIVE))
+ if((ueCb->ueId == ueCfg->ueId) && (ueCb->crnti == ueCfg->crnti)\
+ &&(ueCb->state == UE_STATE_ACTIVE))
{
DU_LOG("\nINFO --> MAC : Modifying Ue config Req for CRNTI %d ", ueCfg->crnti);
ret = fillMacUeCb(ueCb, ueCfg, cellIdx);
else
{
deleteMacRaCb(cellIdx, ueCb);
- return ROK;
+ return ROK;
}
}
return RFAILED;
}
/* Check if UE already configured */
- ueCb = &macCb.macCell[cellIdx]->ueCb[ueCfg->ueIdx -1];
+ ueCb = &macCb.macCell[cellIdx]->ueCb[ueCfg->ueId -1];
+
switch(pst->event)
{
case EVENT_UE_CONFIG_RSP_TO_MAC:
- ret = createUeCb(cellIdx, ueCb, ueCfg);
- if(ret != ROK)
- DU_LOG("\nERROR --> MAC: AddUeConfigReq for cellIdx :%d failed in procMacUeCfgData()", cellIdx);
- break;
+ {
+ ret = createUeCb(cellIdx, ueCb, ueCfg);
+ if(ret != ROK)
+ DU_LOG("\nERROR --> MAC: AddUeConfigReq for cellIdx :%d failed in procMacUeCfgData()", cellIdx);
+ break;
+ }
+
case EVENT_UE_RECONFIG_RSP_TO_MAC:
- ret = modifyUeCb(cellIdx, ueCb, ueCfg);
- if(ret != ROK)
- DU_LOG("\nERROR --> MAC: ModifyUeConfigReq for cellIdx :%d failed at procMacUeCfgData()", cellIdx);
- break;
+ {
+ ret = modifyUeCb(cellIdx, ueCb, ueCfg);
+ if(ret != ROK)
+ DU_LOG("\nERROR --> MAC: ModifyUeConfigReq for cellIdx :%d failed at procMacUeCfgData()", cellIdx);
+ break;
+ }
+
default:
- break;
+ break;
}
return ret;
}
memcpy(tmpData, ueCfg, sizeof(MacUeCfg));
GET_CELL_IDX(ueCfg->cellId, cellIdx);
- macCb.macCell[cellIdx]->ueCfgTmpData[ueCfg->ueIdx-1] = tmpData;
+ macCb.macCell[cellIdx]->ueCfgTmpData[ueCfg->ueId-1] = tmpData;
return ROK;
}
if(ueCfg)
{
+ /* If CRNTI = 0, MAC must allot a CRNTI to this UE. This scenario hits in
+ * case of UE in handover */
+ if(ueCfg->crnti == 0)
+ {
+ GET_CRNTI(ueCfg->crnti, ueCfg->ueId);
+ }
+
/*Storing received ueCfg in ueCfgTmpData */
ret = copyToTmpData(ueCfg);
if(ret == ROK)
{
/*Sending Cfg Req to SCH */
- ret = fillSchUeCfg(pst, &schUeCfg, ueCfg);
- if(ret != ROK)
- DU_LOG("\nERROR --> MAC : Failed to fill Sch Ue Cfg at MacProcUeCreateReq()");
- else
- {
+ ret = fillSchUeCfg(pst, &schUeCfg, ueCfg);
+ if(ret != ROK)
+ DU_LOG("\nERROR --> MAC : Failed to fill Sch Ue Cfg at MacProcUeCreateReq()");
+ else
+ {
/* Fill event and send UE create request to SCH */
ret = sendUeReqToSch(pst, &schUeCfg);
- if(ret != ROK)
- DU_LOG("\nERROR --> MAC : Failed to send UE Create request to SCH");
- }
+ if(ret != ROK)
+ DU_LOG("\nERROR --> MAC : Failed to send UE Create request to SCH");
+ }
}
else
{
- DU_LOG("\nERROR --> MAC : Failed to store MAC UE CFG ");
+ DU_LOG("\nERROR --> MAC : Failed to store MAC UE CFG ");
}
}
else
/* Filling UE Config response */
memset(cfgRsp, 0, sizeof(MacUeCfgRsp));
cfgRsp->cellId = schCfgRsp->cellId;
- cfgRsp->ueIdx = schCfgRsp->ueIdx;
+ cfgRsp->ueId = schCfgRsp->ueId;
cfgRsp->result = result;
/* Fill Post structure and send UE Create response*/
/* Filling UE Config response */
memset(cfgRsp, 0, sizeof(MacUeCfgRsp));
cfgRsp->cellId = schCfgRsp->cellId;
- cfgRsp->ueIdx = schCfgRsp->ueIdx;
+ cfgRsp->ueId = schCfgRsp->ueId;
cfgRsp->result = result;
/* Fill Post structure and send UE Create response*/
* Functionality:
* Function to return Mac Ue Cfg pointer
*
- * @params[in] cellIdx, ueIdx
+ * @params[in] cellIdx, ueId
*
* @return MacUeCfg pointer - success
* NULLP - failure
*
* ****************************************************************/
-MacUeCfg *getMacUeCfg(uint16_t cellIdx, uint8_t ueIdx)
+MacUeCfg *getMacUeCfg(uint16_t cellIdx, uint8_t ueId)
{
MacUeCfg *ueCfg = NULLP;
if(macCb.macCell[cellIdx])
{
- ueCfg = macCb.macCell[cellIdx]->ueCfgTmpData[ueIdx-1];
+ ueCfg = macCb.macCell[cellIdx]->ueCfgTmpData[ueId-1];
}
else
{
#endif
GET_CELL_IDX(schCfgRsp->cellId, cellIdx);
- ueCfg = getMacUeCfg(cellIdx, schCfgRsp->ueIdx);
+ ueCfg = getMacUeCfg(cellIdx, schCfgRsp->ueId);
if(ueCfg == NULLP)
{
DU_LOG("\nERROR --> MAC : Failed to find the Mac Ue Cfg for event [%d] in MacProcSchUeCfgRsp()", pst->event);
{
/*C-RNTI value is out of Acceptable range*/
DU_LOG("\nERROR --> MAC : MacProcSchUeDeleteRsp(): Invalid crnti[%d] ",schUeDelRsp->crnti);
- result = UEIDX_INVALID;
+ result = UEID_INVALID;
}
else
{
else
{
DU_LOG("\nERROR --> MAC : MacProcSchUeDeleteRsp(): crnti[%d] does not exist ",schUeDelRsp->crnti);
- result = UEIDX_INVALID;
+ result = UEID_INVALID;
}
}
}
}
else
{
- result = (schUeDelRsp->cause == INVALID_CELLID) ? CELLID_INVALID : UEIDX_INVALID;
+ result = (schUeDelRsp->cause == INVALID_CELLID) ? CELLID_INVALID : UEID_INVALID;
}
if(MacSendUeDeleteRsp(schUeDelRsp->cellId, schUeDelRsp->crnti, result) != ROK)
{
else
{
DU_LOG("\nERROR --> MAC : MacProcUeDeleteReq(): CRNTI is not matched");
- result = UEIDX_INVALID;
+ result = UEID_INVALID;
}
}
else
{
- DU_LOG("\nERROR --> MAC : MacProcUeDeleteReq(): Failed to find the MacUeCb of UeIdx = %d",ueDelete->ueId);
+ DU_LOG("\nERROR --> MAC : MacProcUeDeleteReq(): Failed to find the MacUeCb of UeId = %d",ueDelete->ueId);
result = CELLID_INVALID;
}