X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrsch%2Fsch_ue_mgr.c;h=460f71e632ccc73ae3b8c46e586aa9e971487c14;hb=67b89506e1d6a7a775d5095f390d5dcb610deb86;hp=8b842815664f96a68c88f5889811b2f8af7b6454;hpb=c01ca171144bd6e576646466d420c6d5feaabc59;p=o-du%2Fl2.git diff --git a/src/5gnrsch/sch_ue_mgr.c b/src/5gnrsch/sch_ue_mgr.c index 8b8428156..460f71e63 100644 --- a/src/5gnrsch/sch_ue_mgr.c +++ b/src/5gnrsch/sch_ue_mgr.c @@ -114,6 +114,18 @@ void fillSchDlLcCtxt(SchDlLcCtxt *ueCbLcCfg, SchLcCfg *lcCfg) ueCbLcCfg->lcp = lcCfg->dlLcCfg.lcp; ueCbLcCfg->lcState = SCH_LC_STATE_ACTIVE; ueCbLcCfg->bo = 0; + if(lcCfg->drbQos) + { + ueCbLcCfg->pduSessionId = lcCfg->drbQos->pduSessionId; + } + if(lcCfg->snssai) + { + if(ueCbLcCfg->snssai == NULLP)/*In CONFIG_MOD case, no need to allocate SNSSAI memory*/ + { + SCH_ALLOC(ueCbLcCfg->snssai, sizeof(Snssai)); + } + memcpy(ueCbLcCfg->snssai, lcCfg->snssai,sizeof(Snssai)); + } } /******************************************************************* @@ -142,6 +154,19 @@ void fillSchUlLcCtxt(SchUlLcCtxt *ueCbLcCfg, SchLcCfg *lcCfg) ueCbLcCfg->pbr = lcCfg->ulLcCfg.pbr; ueCbLcCfg->bsd = lcCfg->ulLcCfg.bsd; + if(lcCfg->drbQos) + { + ueCbLcCfg->pduSessionId = lcCfg->drbQos->pduSessionId; + } + if(lcCfg->snssai) + { + /*In CONFIG_MOD case, no need to allocate SNSSAI memory again*/ + if(ueCbLcCfg->snssai == NULLP) + { + SCH_ALLOC(ueCbLcCfg->snssai, sizeof(Snssai)); + } + memcpy(ueCbLcCfg->snssai, lcCfg->snssai,sizeof(Snssai)); + } } /******************************************************************* @@ -167,6 +192,20 @@ void updateSchUlCb(uint8_t delIdx, SchUlCb *ulInfo) memcpy(&ulInfo->ulLcCtxt[lcIdx], &ulInfo->ulLcCtxt[lcIdx+1], sizeof(SchUlLcCtxt)); memset(&ulInfo->ulLcCtxt[lcIdx+1], 0, sizeof(SchUlLcCtxt)); } + /*Leakage of Last Index*/ + /*Last index of ulLcCtxt(before deletion) should be void*/ + if(ulInfo->ulLcCtxt[ulInfo->numUlLc].snssai != NULLP) + { + DU_LOG("ERROR --> SCH: updateSchUlCb Last index:%d (Before Deletion) memory is leaking",\ + ulInfo->numUlLc); + SCH_FREE(ulInfo->ulLcCtxt[ulInfo->numUlLc].snssai, sizeof(Snssai)); + } + else + { + DU_LOG("INFO --> SCH: updateSchUlCb Last index:%d (before deletion) memory is freed successfully",\ + ulInfo->numUlLc); + + } } /******************************************************************* @@ -192,6 +231,19 @@ void updateSchDlCb(uint8_t delIdx, SchDlCb *dlInfo) memcpy(&dlInfo->dlLcCtxt[lcIdx], &dlInfo->dlLcCtxt[lcIdx+1], sizeof(SchDlLcCtxt)); memset(&dlInfo->dlLcCtxt[lcIdx+1], 0, sizeof(SchDlLcCtxt)); } + /*Leakage of Last Index*/ + /*Last index of ulLcCtxt(before deletion) should be void*/ + if(dlInfo->dlLcCtxt[dlInfo->numDlLc].snssai != NULLP) + { + DU_LOG("ERROR --> SCH: updateSchDlCb Last index:%d (before deletion) memory is leaking: Delete the S-NSSAI memory",\ + dlInfo->numDlLc); + SCH_FREE(dlInfo->dlLcCtxt[dlInfo->numDlLc].snssai, sizeof(Snssai)); + } + else + { + DU_LOG("INFO --> SCH: updateSchDlCb Last index:%d (before deletion) memory is freed successfully",\ + dlInfo->numDlLc); + } } /******************************************************************* @@ -213,6 +265,7 @@ void updateSchDlCb(uint8_t delIdx, SchDlCb *dlInfo) uint8_t fillSchUeCb(SchUeCb *ueCb, SchUeCfg *ueCfg) { uint8_t lcIdx, ueLcIdx; + uint8_t freqDomainResource[FREQ_DOM_RSRC_SIZE] = {0}; SchPdschCfgCmn pdschCfg; SchPucchDlDataToUlAck *dlDataToUlAck; @@ -233,13 +286,25 @@ uint8_t fillSchUeCb(SchUeCb *ueCb, SchUeCfg *ueCfg) if(ueCfg->spCellCfgPres == true) { memcpy(&ueCb->ueCfg.spCellCfg , &ueCfg->spCellCfg, sizeof(SchSpCellCfg)); + + covertFreqDomRsrcMapToIAPIFormat(ueCb->ueCfg.spCellCfg.servCellCfg.initDlBwp.pdcchCfg.cRSetToAddModList[0].freqDomainRsrc,\ + freqDomainResource); + memset(ueCb->ueCfg.spCellCfg.servCellCfg.initDlBwp.pdcchCfg.cRSetToAddModList[0].freqDomainRsrc, 0, FREQ_DOM_RSRC_SIZE); + memcpy(ueCb->ueCfg.spCellCfg.servCellCfg.initDlBwp.pdcchCfg.cRSetToAddModList[0].freqDomainRsrc, freqDomainResource, FREQ_DOM_RSRC_SIZE); + ueCb->ueCfg.spCellCfgPres = true; dlDataToUlAck = ueCfg->spCellCfg.servCellCfg.initUlBwp.pucchCfg.dlDataToUlAck; - if(dlDataToUlAck) + if(ueCb->cellCb) { - BuildK0K1Table(ueCb->cellCb, &ueCb->ueCfg.spCellCfg.servCellCfg.initDlBwp.k0K1InfoTbl, false, pdschCfg,\ - ueCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg, dlDataToUlAck->dlDataToUlAckListCount,\ - dlDataToUlAck->dlDataToUlAckList); + if(dlDataToUlAck) + { + BuildK0K1Table(ueCb->cellCb, &ueCb->ueCfg.spCellCfg.servCellCfg.initDlBwp.k0K1InfoTbl, false, pdschCfg,\ + ueCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg, dlDataToUlAck->dlDataToUlAckListCount,\ + dlDataToUlAck->dlDataToUlAckList); + BuildK2InfoTable(ueCb->cellCb, ueCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg.timeDomRsrcAllocList,\ + ueCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg.numTimeDomRsrcAlloc,\ + NULLP, &ueCb->ueCfg.spCellCfg.servCellCfg.initUlBwp.k2InfoTbl); + } } } @@ -271,14 +336,32 @@ uint8_t fillSchUeCb(SchUeCb *ueCb, SchUeCfg *ueCfg) if(ueCfg->schLcCfg[lcIdx].configType == CONFIG_MOD) { fillSchUlLcCtxt(&ueCb->ulInfo.ulLcCtxt[ueLcIdx], &ueCfg->schLcCfg[lcIdx]); - fillSchDlLcCtxt(&ueCb->dlInfo.dlLcCtxt[ueLcIdx], &ueCfg->schLcCfg[lcIdx]); break; } - if(ueCfg->schLcCfg[ueLcIdx].configType == CONFIG_DEL) + /*BUG: ueCfg using lcIdx (Looping around numLCs in ueCfg whereas + * ueLcIdx Loops around numUlLc in SCH UL DB*/ + if(ueCfg->schLcCfg[lcIdx].configType == CONFIG_DEL) { memset(&ueCb->ulInfo.ulLcCtxt[ueLcIdx], 0, sizeof(SchUlLcCtxt)); ueCb->ulInfo.numUlLc--; - updateSchUlCb(ueLcIdx, &ueCb->ulInfo); //moving arr elements one idx ahead + updateSchUlCb(ueLcIdx, &ueCb->ulInfo); //moving arr elements one idx ahead + + break; + } + } + }/*End of inner for loop */ + + for(ueLcIdx = 0; ueLcIdx < ueCb->dlInfo.numDlLc; ueLcIdx++) //searching for Lc to be Mod + { + if(ueCb->dlInfo.dlLcCtxt[ueLcIdx].lcId == ueCfg->schLcCfg[lcIdx].lcId) + { + if(ueCfg->schLcCfg[lcIdx].configType == CONFIG_MOD) + { + fillSchDlLcCtxt(&ueCb->dlInfo.dlLcCtxt[ueLcIdx], &ueCfg->schLcCfg[lcIdx]); + break; + } + if(ueCfg->schLcCfg[lcIdx].configType == CONFIG_DEL) + { memset(&ueCb->dlInfo.dlLcCtxt[ueLcIdx], 0, sizeof(SchDlLcCtxt)); ueCb->dlInfo.numDlLc--; updateSchDlCb(ueLcIdx, &ueCb->dlInfo); //moving arr elements one idx ahead @@ -289,7 +372,7 @@ uint8_t fillSchUeCb(SchUeCb *ueCb, SchUeCfg *ueCfg) } SCH_FREE(ueCfg->schLcCfg[lcIdx].drbQos, sizeof(SchDrbQosInfo)); - SCH_FREE(ueCfg->schLcCfg[lcIdx].snssai, sizeof(SchSnssai)); + SCH_FREE(ueCfg->schLcCfg[lcIdx].snssai, sizeof(Snssai)); }/* End of outer for loop */ return ROK; @@ -481,7 +564,7 @@ uint8_t schFillPuschAlloc(SchUeCb *ueCb, uint16_t pdcchSlot, uint32_t dataVol, S /* Update pusch in cell */ for(idx=startSymb; idxschUlSlotInfo[puschSlot]->assignedPrb[idx] = startRb + numRb; + //cellCb->schUlSlotInfo[puschSlot]->assignedPrb[idx] = startRb + numRb; } schUlSlotInfo = cellCb->schUlSlotInfo[puschSlot]; @@ -778,7 +861,7 @@ void deleteSchPdschServCellCfg(SchPdschServCellCfg *pdschServCellCfg) * ****************************************************************/ void deleteSchUeCb(SchUeCb *ueCb) { - uint8_t timeDomRsrcIdx; + uint8_t timeDomRsrcIdx = 0, ueLcIdx = 0; SchPucchCfg *pucchCfg = NULLP; SchPdschConfig *pdschCfg = NULLP; @@ -816,6 +899,15 @@ void deleteSchUeCb(SchUeCb *ueCb) SCH_FREE(ueCb->ueCfg.spCellCfg.servCellCfg.bwpInactivityTmr, sizeof(uint8_t)); deleteSchPdschServCellCfg(&ueCb->ueCfg.spCellCfg.servCellCfg.pdschServCellCfg); } + /*Need to Free the memory allocated for S-NSSAI*/ + for(ueLcIdx = 0; ueLcIdx < ueCb->ulInfo.numUlLc; ueLcIdx++) + { + SCH_FREE(ueCb->ulInfo.ulLcCtxt[ueLcIdx].snssai, sizeof(Snssai)); + } + for(ueLcIdx = 0; ueLcIdx < ueCb->dlInfo.numDlLc; ueLcIdx++) + { + SCH_FREE(ueCb->dlInfo.dlLcCtxt[ueLcIdx].snssai, sizeof(Snssai)); + } memset(ueCb, 0, sizeof(SchUeCb)); } } @@ -945,29 +1037,33 @@ uint8_t SchSendCellDeleteRspToMac(SchCellDelete *ueDelete, Inst inst, SchMacRsp * ****************************************************************/ void deleteSchCellCb(SchCellCb *cellCb) { - uint8_t idx=0; + uint8_t sliceIdx=0, slotIdx=0; if(cellCb->schDlSlotInfo) { - for(idx=0; idxnumSlots; idx++) + for(slotIdx=0; slotIdxnumSlots; slotIdx++) { - if(cellCb->schDlSlotInfo[idx]) - { - SCH_FREE(cellCb->schDlSlotInfo[idx], sizeof(SchDlSlotInfo)); - } + SCH_FREE(cellCb->schDlSlotInfo[slotIdx], sizeof(SchDlSlotInfo)); } SCH_FREE(cellCb->schDlSlotInfo, cellCb->numSlots *sizeof(SchDlSlotInfo*)); } if(cellCb->schUlSlotInfo) { - for(idx=0; idxnumSlots; idx++) + for(slotIdx=0; slotIdxnumSlots; slotIdx++) { - if(cellCb->schUlSlotInfo[idx]) - { - SCH_FREE(cellCb->schUlSlotInfo[idx], sizeof(SchUlSlotInfo)); - } + SCH_FREE(cellCb->schUlSlotInfo[slotIdx], sizeof(SchUlSlotInfo)); } SCH_FREE(cellCb->schUlSlotInfo, cellCb->numSlots * sizeof(SchUlSlotInfo*)); } + + if(cellCb->cellCfg.snssai) + { + for(sliceIdx=0; sliceIdxcellCfg.numSliceSupport; sliceIdx++) + { + SCH_FREE(cellCb->cellCfg.snssai[sliceIdx], sizeof(Snssai)); + } + SCH_FREE(cellCb->cellCfg.snssai, cellCb->cellCfg.numSliceSupport*sizeof(Snssai*)); + } + SCH_FREE(cellCb->cellCfg.rrmPolicy, sizeof(SchRrmPolicy)); memset(cellCb, 0, sizeof(SchCellCb)); }