X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2F5gnrmac%2Fmac_ue_mgr.c;h=1a7a9d43a1f6dce43a74b6f62dfd65cac84a9e84;hb=a5f35b2204dd87ebe347f11282000852b55810ad;hp=8c3bb2cc3f2dc19a1dc05dc08a5131e7f57edc57;hpb=284fc2e85cb5008061a7f8c6d07947a1c6209432;p=o-du%2Fl2.git diff --git a/src/5gnrmac/mac_ue_mgr.c b/src/5gnrmac/mac_ue_mgr.c index 8c3bb2cc3..1a7a9d43a 100644 --- a/src/5gnrmac/mac_ue_mgr.c +++ b/src/5gnrmac/mac_ue_mgr.c @@ -1221,6 +1221,16 @@ uint8_t fillInitDlBwpPdschCfg(PdschConfig macPdschCfg, SchPdschConfig *schPdschC for(idx = 0; idx < schPdschCfg->numTimeDomRsrcAlloc; idx++) { + if(macPdschCfg.timeDomRsrcAllociList[idx].k0) + { + MAC_ALLOC(schPdschCfg->timeDomRsrcAllociList[idx].k0, sizeof(uint8_t)); + if(!schPdschCfg->timeDomRsrcAllociList[idx].k0) + { + DU_LOG("\nERROR --> MAC : Memory allocation failed for K0 in fillInitDlBwpPdschCfg()"); + return RFAILED; + } + *(schPdschCfg->timeDomRsrcAllociList[idx].k0) = *(macPdschCfg.timeDomRsrcAllociList[idx].k0); + } schPdschCfg->timeDomRsrcAllociList[idx].mappingType = \ macPdschCfg.timeDomRsrcAllociList[idx].mappingType; schPdschCfg->timeDomRsrcAllociList[idx].startSymbol = \ @@ -1529,7 +1539,7 @@ uint8_t fillLogicalChannelCfg(SchLcCfg *schLcCfg, LcCfg *macLcCfg) { if(!schLcCfg->snssai) { - MAC_ALLOC(schLcCfg->snssai, sizeof(SchSnssai)); + MAC_ALLOC(schLcCfg->snssai, sizeof(Snssai)); if(!schLcCfg->snssai) { DU_LOG("\nERROR --> MAC : Memory alloc failed at snssai at fillLogicalChannelCfg()"); @@ -1701,6 +1711,21 @@ void updateMacUlCb(uint8_t delIdx, UeUlCb *ulCb) memcpy(&ulCb->lcCb[lcIdx], &ulCb->lcCb[lcIdx+1], sizeof(UlLcCb)); memset(&ulCb->lcCb[lcIdx+1], 0, sizeof(UlLcCb)); } + /*Commenting as S-NSSAI and PDU session will be stored in MAC DB in future scope*/ +#if 0 + /*Checking the Memory Leakage of Last Index*/ + if(ulCb->lcCb[ulCb->numUlLc].snssai != NULLP) + { + DU_LOG("ERROR --> MAC: updateMacUlCb Last index deleted :%d memory is leaking",\ + ulCb->numUlLc); + MAC_FREE(ulCb->lcCb[ulCb->numUlLc].snssai, sizeof(Snssai)); + } + else + { + DU_LOG("INFO --> MAC: updateMacUlCb Last index:%d (before deletion) memory is freed successfully",\ + ulCb->numUlLc); + } +#endif } /******************************************************************* @@ -1728,8 +1753,141 @@ void updateMacDlCb(uint8_t delIdx, UeDlCb *dlCb) memcpy(&dlCb->lcCb[lcIdx], &dlCb->lcCb[lcIdx+1], sizeof(DlLcCb)); memset(&dlCb->lcCb[lcIdx+1], 0, sizeof(DlLcCb)); } + /*Commenting as S-NSSAI and PDU session will be stored in MAC DB in future scope*/ +#if 0 + /*Checking the Memory Leakage of Last Index*/ + if(dlCb->lcCb[dlCb->numDlLc].snssai != NULLP) + { + DU_LOG("ERROR --> MAC: updateMacDlCb Last Deleted index:%d memory is leaking",\ + dlCb->numDlLc); + MAC_FREE(dlCb->lcCb[dlCb->numDlLc].snssai, sizeof(Snssai)); + } + else + { + DU_LOG("INFO --> MAC: updateMacDlCb Last index:%d (before deletion) memory is freed successfully",\ + dlCb->numDlLc); + } +#endif } +/******************************************************************* + * + * @brief Update Mac UL Lc List based on CONFIG_MOD/CONFIG_DEL + * + * @details + * + * Function : updateMacUlLcCtxt + * + * Functionality: Update UeUlCb Lc List + * + * @params[in] UeUlCb pointer, ueLcCfg(received from DUAPP) + * @return void + * + * ****************************************************************/ +void updateMacUlLcCtxt(UeUlCb *ulInfo, LcCfg *ueLcCfg) +{ + uint8_t ueLcIdx = 0; + + /*Traversing UL LC to be updated/Deleted*/ + for(ueLcIdx = 0; ueLcIdx < ulInfo->numUlLc; ueLcIdx++) + { + if(ulInfo->lcCb[ueLcIdx].lcId == ueLcCfg->lcId) + { + if(ueLcCfg->configType == CONFIG_MOD) + { + /*Modify UL LC CB */ + ulInfo->lcCb[ueLcIdx].lcGrpId = ueLcCfg->ulLcCfg.lcGroup; + + /*Commenting as S-NSSAI and PDU session will be stored in MAC DB in future scope*/ +#if 0 + /*Modifying/Copying PduSession ID and S-NSSAI into MAC's UECB*/ + if(ueLcCfg->drbQos) + { + ulInfo->lcCb[ueLcIdx].pduSessionId = ueLcCfg->drbQos->pduSessionId; + } + if(ueLcCfg->snssai) + { + if(ulInfo->lcCb[ueLcIdx].snssai == NULLP) + { + MAC_ALLOC(ulInfo->lcCb[ueLcIdx].snssai, sizeof(Snssai)); + } + + memcpy(ulInfo->lcCb[ueLcIdx].snssai, ueLcCfg->snssai, sizeof(Snssai)); + } +#endif + DU_LOG("\nINFO --> MAC: Successfully Modified LC context for lcId[%d], ueLcIdx:%d",\ + ueLcCfg->lcId,ueLcIdx); + break; + } + if(ueLcCfg->configType == CONFIG_DEL) + { + memset(&ulInfo->lcCb[ueLcIdx], 0, sizeof(UlLcCb)); + (ulInfo->numUlLc)--; + updateMacUlCb(ueLcIdx, ulInfo); + DU_LOG("\nINFO --> MAC: Successfully Deleted LC context for lcId[%d]", ueLcCfg->lcId); + break; + } + } + } +} + +/******************************************************************* + * + * @brief Update Mac DL Lc List based on CONFIG_MOD/CONFIG_DEL + * + * @details + * + * Function : updateMacDlLcCtxt + * + * Functionality: Update UeDlCb Lc List + * + * @params[in] UeDlCb pointer, ueLcCfg(received from DUAPP) + * @return void + * + * ****************************************************************/ +void updateMacDlLcCtxt(UeDlCb *dlInfo, LcCfg *ueLcCfg) +{ + uint8_t ueLcIdx = 0; + + /*Traversing DL LC to be updated/Deleted*/ + for(ueLcIdx = 0; ueLcIdx < dlInfo->numDlLc; ueLcIdx++) + { + if(dlInfo->lcCb[ueLcIdx].lcId == ueLcCfg->lcId) + { + if(ueLcCfg->configType == CONFIG_MOD) + { + /*Commenting as S-NSSAI and PDU session will be stored in MAC DB in future scope*/ +#if 0 + /*Modifying/Copying PduSession ID and S-NSSAI into MAC's UECB*/ + if(ueLcCfg->drbQos) + { + dlInfo->lcCb[ueLcIdx].pduSessionId = ueLcCfg->drbQos->pduSessionId; + } + if(ueLcCfg->snssai) + { + if(dlInfo->lcCb[ueLcIdx].snssai == NULLP) + { + MAC_ALLOC(dlInfo->lcCb[ueLcIdx].snssai, sizeof(Snssai)); + } + + memcpy(dlInfo->lcCb[ueLcIdx].snssai, ueLcCfg->snssai, sizeof(Snssai)); + } +#endif + DU_LOG("\nINFO --> MAC: Successfully Modified LC context for lcId[%d], ueLcIdx:%d",\ + ueLcCfg->lcId,ueLcIdx); + break; + } + if(ueLcCfg->configType == CONFIG_DEL) + { + memset(&dlInfo->lcCb[ueLcIdx], 0, sizeof(DlLcCb)); + (dlInfo->numDlLc)--; + updateMacDlCb(ueLcIdx, dlInfo); + DU_LOG("\nINFO --> MAC: Successfully Deleted LC context for lcId[%d]", ueLcCfg->lcId); + break; + } + } + } +} /******************************************************************* * * @brief Fills Logical channel Cfg List to Add/Mod/Del @@ -1748,7 +1906,7 @@ void updateMacDlCb(uint8_t delIdx, UeDlCb *dlCb) uint8_t fillMacLcCfgList(MacUeCb *ueCb, MacUeCfg *ueCfg) { - uint8_t lcIdx, ueLcIdx; + uint8_t lcIdx = 0; for(lcIdx = 0; lcIdx < ueCfg->numLcs; lcIdx++) { @@ -1756,45 +1914,50 @@ uint8_t fillMacLcCfgList(MacUeCb *ueCb, MacUeCfg *ueCfg) { if(ueCfg->lcCfgList[lcIdx].configType == CONFIG_ADD) { - /*Filling DL LC CB */ + /*Commenting as S-NSSAI and PDU session will be stored in MAC DB in future scope*/ +#if 0 + /*Copying PduSession ID and S-NSSAI into MAC's UECB*/ + if(ueCfg->lcCfgList[lcIdx].drbQos) + { + ueCb->dlInfo.lcCb[ueCb->dlInfo.numDlLc].pduSessionId = \ + ueCfg->lcCfgList[lcIdx].drbQos->pduSessionId; + + ueCb->ulInfo.lcCb[ueCb->ulInfo.numUlLc].pduSessionId = \ + ueCfg->lcCfgList[lcIdx].drbQos->pduSessionId; + } + if(ueCfg->lcCfgList[lcIdx].snssai) + { + if(ueCb->dlInfo.lcCb[ueCb->dlInfo.numDlLc].snssai == NULLP) + { + MAC_ALLOC(ueCb->dlInfo.lcCb[ueCb->dlInfo.numDlLc].snssai, sizeof(Snssai)); + } + if(ueCb->ulInfo.lcCb[ueCb->ulInfo.numUlLc].snssai == NULLP) + { + MAC_ALLOC(ueCb->ulInfo.lcCb[ueCb->ulInfo.numUlLc].snssai, sizeof(Snssai)); + } + + memcpy(ueCb->dlInfo.lcCb[ueCb->dlInfo.numDlLc].snssai, \ + ueCfg->lcCfgList[lcIdx].snssai, sizeof(Snssai)); + + memcpy(ueCb->ulInfo.lcCb[ueCb->ulInfo.numUlLc].snssai, \ + ueCfg->lcCfgList[lcIdx].snssai, sizeof(Snssai)); + + } +#endif + /*Filling DL LC CB */ ueCb->dlInfo.lcCb[ueCb->dlInfo.numDlLc].lcId = ueCfg->lcCfgList[lcIdx].lcId; ueCb->dlInfo.lcCb[ueCb->dlInfo.numDlLc].lcState = MAC_LC_STATE_ACTIVE; ueCb->dlInfo.numDlLc++; - /*Filling UL LC CB */ + /*Filling UL LC CB */ ueCb->ulInfo.lcCb[ueCb->ulInfo.numUlLc].lcId = ueCfg->lcCfgList[lcIdx].lcId; ueCb->ulInfo.lcCb[ueCb->ulInfo.numUlLc].lcGrpId = ueCfg->lcCfgList[lcIdx].ulLcCfg.lcGroup; ueCb->ulInfo.lcCb[ueCb->ulInfo.numUlLc].lcActive = MAC_LC_STATE_ACTIVE; ueCb->ulInfo.numUlLc++; }/*End of Add Config */ else - { - //searching for Lc to be Mod - for(ueLcIdx = 0; ueLcIdx < ueCb->ulInfo.numUlLc; ueLcIdx++) - { - if(ueCb->ulInfo.lcCb[ueLcIdx].lcId == ueCfg->lcCfgList[lcIdx].lcId) - { - if(ueCfg->lcCfgList[lcIdx].configType == CONFIG_MOD) - { - /*Nothing to Modify in DL LC CB */ - /*Modify UL LC CB */ - ueCb->ulInfo.lcCb[ueLcIdx].lcGrpId = ueCfg->lcCfgList[lcIdx].ulLcCfg.lcGroup; - DU_LOG("\nINFO --> MAC: Successfully Modified LC context for lcId[%d]", ueCfg->lcCfgList[lcIdx].lcId); - break; - } - if(ueCfg->lcCfgList[lcIdx].configType == CONFIG_DEL) - { - memset(&ueCb->dlInfo.lcCb[ueLcIdx], 0, sizeof(DlLcCb)); - (ueCb->dlInfo.numDlLc)--; - updateMacDlCb(ueLcIdx, &ueCb->dlInfo); - - memset(&ueCb->ulInfo.lcCb[ueLcIdx], 0, sizeof(UlLcCb)); - (ueCb->ulInfo.numUlLc)--; - updateMacUlCb(ueLcIdx, &ueCb->ulInfo); - DU_LOG("\nINFO --> MAC: Successfully Deleted LC context for lcId[%d]", ueCfg->lcCfgList[lcIdx].lcId); - break; - } - } - } + { + updateMacUlLcCtxt(&ueCb->ulInfo, &ueCfg->lcCfgList[lcIdx]); + updateMacDlLcCtxt(&ueCb->dlInfo, &ueCfg->lcCfgList[lcIdx]); }/*End of Mod Config */ } } @@ -1822,7 +1985,7 @@ uint8_t fillMacUeCb(MacUeCb *ueCb, MacUeCfg *ueCfg, uint8_t cellIdx) { uint8_t ret = ROK; - ueCb->ueIdx = ueCfg->ueIdx; + ueCb->ueId = ueCfg->ueId; ueCb->crnti = ueCfg->crnti; ueCb->cellCb = macCb.macCell[cellIdx]; if(ueCfg->spCellCfgPres) @@ -1936,7 +2099,7 @@ uint8_t createUeCb(uint8_t cellIdx, MacUeCb *ueCb, MacUeCfg *ueCfg) { 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); @@ -1981,7 +2144,7 @@ uint8_t modifyUeCb(uint8_t cellIdx, MacUeCb *ueCb, MacUeCfg *ueCfg) { 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("\nINFO --> MAC : Modifying Ue config Req for CRNTI %d ", ueCfg->crnti); @@ -2041,7 +2204,7 @@ uint8_t procMacUeCfgData(Pst *pst, MacUeCfg *ueCfg) } /* 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: @@ -2090,7 +2253,7 @@ uint8_t copyToTmpData(MacUeCfg *ueCfg) } 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; } @@ -2182,7 +2345,7 @@ uint8_t MacSendUeCreateRsp(MacRsp result, SchUeCfgRsp *schCfgRsp) /* 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*/ @@ -2222,7 +2385,7 @@ uint8_t MacSendUeReconfigRsp(MacRsp result, SchUeCfgRsp *schCfgRsp) /* 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*/ @@ -2242,19 +2405,19 @@ uint8_t MacSendUeReconfigRsp(MacRsp result, SchUeCfgRsp *schCfgRsp) * 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 { @@ -2288,8 +2451,23 @@ uint8_t MacProcSchUeCfgRsp(Pst *pst, SchUeCfgRsp *schCfgRsp) uint16_t cellIdx; MacUeCfg *ueCfg = NULLP; +#ifdef CALL_FLOW_DEBUG_LOG + switch(pst->event) + { + case EVENT_UE_CONFIG_RSP_TO_MAC: + DU_LOG("\nCall Flow: ENTSCH -> ENTMAC : EVENT_UE_CONFIG_RSP_TO_MAC\n"); + break; + case EVENT_UE_RECONFIG_RSP_TO_MAC: + DU_LOG("\nCall Flow: ENTSCH -> ENTMAC : EVENT_UE_RECONFIG_RSP_TO_MAC\n"); + break; + default: + DU_LOG("\nCall Flow: ENTSCH -> ENTMAC : Invalid Event\n"); + break; + } +#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); @@ -2299,55 +2477,54 @@ uint8_t MacProcSchUeCfgRsp(Pst *pst, SchUeCfgRsp *schCfgRsp) switch(pst->event) { case EVENT_UE_CONFIG_RSP_TO_MAC: - { - if(schCfgRsp->rsp != RSP_NOK) - { - DU_LOG("\nINFO --> MAC: SCH UeConfigRsp for CRNTI[%d] is success in MacProcSchUeCfgRsp()", schCfgRsp->crnti); - if(ret == ROK) - { - ret = procMacUeCfgData(pst, ueCfg); - if(ret == ROK) - { - result = MAC_DU_APP_RSP_OK; + { + if(schCfgRsp->rsp != RSP_NOK) + { + DU_LOG("\nINFO --> MAC: SCH UeConfigRsp for CRNTI[%d] is success in MacProcSchUeCfgRsp()", schCfgRsp->crnti); + if(ret == ROK) + { + ret = procMacUeCfgData(pst, ueCfg); + if(ret == ROK) + { + result = MAC_DU_APP_RSP_OK; + } } - } - } - else - { - DU_LOG("\nERROR --> MAC: SCH UeConfigRsp for CRNTI[%d] is failed in MacProcSchUeCfgRsp()", schCfgRsp->crnti); - } - ret = MacSendUeCreateRsp(result, schCfgRsp); - } - break; + } + else + { + DU_LOG("\nERROR --> MAC: SCH UeConfigRsp for CRNTI[%d] is failed in MacProcSchUeCfgRsp()", schCfgRsp->crnti); + } + ret = MacSendUeCreateRsp(result, schCfgRsp); + } + break; case EVENT_UE_RECONFIG_RSP_TO_MAC: - { - if(schCfgRsp->rsp != RSP_NOK) - { - DU_LOG("\nINFO --> MAC: SCH UeReconfigRsp for CRNTI[%d] is success in MacProcSchUeCfgRsp()", schCfgRsp->crnti); - if(ret == ROK) - { - ret = procMacUeCfgData(pst, ueCfg); - if(ret == ROK) - { - result = MAC_DU_APP_RSP_OK; + { + + if(schCfgRsp->rsp != RSP_NOK) + { + DU_LOG("\nINFO --> MAC: SCH UeReconfigRsp for CRNTI[%d] is success in MacProcSchUeCfgRsp()",\ + schCfgRsp->crnti); + if(ret == ROK) + { + ret = procMacUeCfgData(pst, ueCfg); + if(ret == ROK) + { + result = MAC_DU_APP_RSP_OK; + } } - } - } - else - { - DU_LOG("\nERROR --> MAC: SCH UeReconfigRsp for CRNTI[%d] is failed in MacProcSchUeCfgRsp()", schCfgRsp->crnti); - } - ret = MacSendUeReconfigRsp(result, schCfgRsp); - } - break; - - default: - break; + } + else + { + DU_LOG("\nERROR --> MAC: SCH UeReconfigRsp for CRNTI[%d] is failed in MacProcSchUeCfgRsp()",\ + schCfgRsp->crnti); + } + ret = MacSendUeReconfigRsp(result, schCfgRsp); + } + break; } MAC_FREE(ueCfg, sizeof(MacUeCfg)); ueCfg = NULLP; - return ret; } @@ -2438,7 +2615,7 @@ uint8_t MacSendUeDeleteRsp(uint16_t cellId, uint16_t crnti, UeDeleteStatus resul /* Filling UE delete response */ deleteRsp->cellId = cellId; - GET_UE_IDX(crnti,deleteRsp->ueId); + GET_UE_ID(crnti, deleteRsp->ueId); deleteRsp->result = result; /* Fill Post structure and send UE delete response*/ @@ -2520,11 +2697,15 @@ void deletePucchResourcesCfg(PucchResrcCfg *resrcCfg) uint8_t MacProcSchUeDeleteRsp(Pst *pst, SchUeDeleteRsp *schUeDelRsp) { - uint8_t ueIdx =0; + uint8_t ueId =0, isCrntiValid = 0; uint16_t cellIdx=0; uint8_t ret = RFAILED; UeDeleteStatus result; - + +#ifdef CALL_FLOW_DEBUG_LOG + DU_LOG("\nCall Flow: ENTSCH -> ENTMAC : EVENT_UE_DELETE_RSP_TO_MAC\n"); +#endif + if(schUeDelRsp) { if(schUeDelRsp->rsp == RSP_OK) @@ -2533,18 +2714,41 @@ uint8_t MacProcSchUeDeleteRsp(Pst *pst, SchUeDeleteRsp *schUeDelRsp) GET_CELL_IDX(schUeDelRsp->cellId, cellIdx); if(macCb.macCell[cellIdx]) { - GET_UE_IDX(schUeDelRsp->crnti, ueIdx); - if(macCb.macCell[cellIdx]->ueCb[ueIdx -1].crnti == schUeDelRsp->crnti) + CHECK_CRNTI(schUeDelRsp->crnti, isCrntiValid); + if(!isCrntiValid) { - memset(&macCb.macCell[cellIdx]->ueCb[ueIdx -1], 0, sizeof(MacUeCb)); - macCb.macCell[cellIdx]->numActvUe--; - result = SUCCESS; - ret = ROK; + /*C-RNTI value is out of Acceptable range*/ + DU_LOG("\nERROR --> MAC : MacProcSchUeDeleteRsp(): Invalid crnti[%d] ",schUeDelRsp->crnti); + result = UEID_INVALID; } else { - DU_LOG("\nERROR --> MAC : MacProcSchUeDeleteRsp(): crnti[%d] does not exist ",schUeDelRsp->crnti); - result = UEIDX_INVALID; + GET_UE_ID(schUeDelRsp->crnti, ueId); + if(macCb.macCell[cellIdx]->ueCb[ueId -1].crnti == schUeDelRsp->crnti) + { + + /*Commenting as S-NSSAI and PDU session will be stored in MAC DB in future scope*/ +#if 0 + /*Looping around LCs to free S-NSSAI memory*/ + for(lcIdx = 0; lcIdx < (macCb.macCell[cellIdx]->ueCb[ueId -1].ulInfo.numUlLc); lcIdx++) + { + MAC_FREE(macCb.macCell[cellIdx]->ueCb[ueId -1].ulInfo.lcCb[lcIdx].snssai, sizeof(Snssai)); + } + for(lcIdx = 0; lcIdx < (macCb.macCell[cellIdx]->ueCb[ueId -1].dlInfo.numDlLc); lcIdx++) + { + MAC_FREE(macCb.macCell[cellIdx]->ueCb[ueId -1].dlInfo.lcCb[lcIdx].snssai, sizeof(Snssai)); + } +#endif + memset(&macCb.macCell[cellIdx]->ueCb[ueId -1], 0, sizeof(MacUeCb)); + macCb.macCell[cellIdx]->numActvUe--; + result = SUCCESS; + ret = ROK; + } + else + { + DU_LOG("\nERROR --> MAC : MacProcSchUeDeleteRsp(): crnti[%d] does not exist ",schUeDelRsp->crnti); + result = UEID_INVALID; + } } } else @@ -2555,7 +2759,7 @@ uint8_t MacProcSchUeDeleteRsp(Pst *pst, SchUeDeleteRsp *schUeDelRsp) } 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) { @@ -2653,12 +2857,12 @@ uint8_t MacProcUeDeleteReq(Pst *pst, MacUeDelete *ueDelete) 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; }