X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_f1ap_msg_hdl.c;h=37a0aef4f8a5ee54194c4511f53c7f427cc0e82a;hb=d62d6a2c96903363a6d7a2f1b23658bfef3590c9;hp=edc1afef57546a5f93cc72d8587e868086c53f68;hpb=d97caa5d16b9c6a2960a3b6d94d7737b7263004b;p=o-du%2Fl2.git diff --git a/src/du_app/du_f1ap_msg_hdl.c b/src/du_app/du_f1ap_msg_hdl.c index edc1afef5..37a0aef4f 100644 --- a/src/du_app/du_f1ap_msg_hdl.c +++ b/src/du_app/du_f1ap_msg_hdl.c @@ -103,7 +103,7 @@ #include "GTPTunnel.h" #ifdef O1_ENABLE -#include "ConfigInterface.h" +#include "CmInterface.h" extern StartupConfig g_cfg; #endif @@ -847,7 +847,7 @@ uint8_t BuildDLNRInfo(NRFreqInfo_t *dlnrfreq) S16 BuildNrCellId(BIT_STRING_t *nrcell) { memset(nrcell->buf, 0, nrcell->size); - nrcell->buf[4] = 16; + nrcell->buf[4] = duCfgParam.sib1Params.cellIdentity; nrcell->bits_unused = 4; return ROK; } @@ -2327,7 +2327,7 @@ uint8_t fillServedCellInfo(Served_Cell_Information_t *srvCellInfo) { srvCellInfo->nRCGI.nRCellIdentity.buf[tmp] = 0; } - srvCellInfo->nRCGI.nRCellIdentity.buf[4] = 16; + srvCellInfo->nRCGI.nRCellIdentity.buf[4] = duCfgParam.sib1Params.cellIdentity; srvCellInfo->nRCGI.nRCellIdentity.bits_unused =4; /*nRPCI*/ @@ -2425,7 +2425,7 @@ uint8_t fillServCellToModItem(Served_Cells_To_Modify_Item_t *modifyItem) { modifyItem->oldNRCGI.nRCellIdentity.buf[ieIdx] = 0; } - modifyItem->oldNRCGI.nRCellIdentity.buf[4] = 16; + modifyItem->oldNRCGI.nRCellIdentity.buf[4] = duCfgParam.sib1Params.cellIdentity; modifyItem->oldNRCGI.nRCellIdentity.bits_unused = 4; if(fillServedCellInfo(&modifyItem->served_Cell_Information)) @@ -2534,7 +2534,7 @@ uint8_t fillCellToDeleteItem(struct Served_Cells_To_Delete_ItemIEs *deleteItemIe { deleteItem->oldNRCGI.nRCellIdentity.buf[arrIdx] = 0; } - deleteItem->oldNRCGI.nRCellIdentity.buf[4] = 16; + deleteItem->oldNRCGI.nRCellIdentity.buf[4] = duCfgParam.sib1Params.cellIdentity; deleteItem->oldNRCGI.nRCellIdentity.bits_unused = 4; return ROK; } @@ -4355,7 +4355,124 @@ uint8_t BuildBWPUlDedPuschCfg(PUSCH_Config_t *puschCfg) uint8_t BuildBWPUlDedPucchCfg(PUCCH_Config_t *pucchCfg) { uint8_t arrIdx, elementCnt; + uint8_t rsrcIdx, rsrcSetIdx; + PUCCH_ResourceSet_t *rsrcSet = NULLP; + PUCCH_Resource_t *rsrc = NULLP; + //RESOURCE SET + elementCnt = 1; + DU_ALLOC(pucchCfg->resourceSetToAddModList, sizeof(struct PUCCH_Config__resourceSetToAddModList)); + if(pucchCfg->resourceSetToAddModList == NULL) + { + DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg"); + return RFAILED; + } + + pucchCfg->resourceSetToAddModList->list.count = elementCnt; + pucchCfg->resourceSetToAddModList->list.size = elementCnt * sizeof(PUCCH_ResourceSet_t *); + DU_ALLOC(pucchCfg->resourceSetToAddModList->list.array, pucchCfg->resourceSetToAddModList->list.size); + if(pucchCfg->resourceSetToAddModList->list.array == NULLP) + { + DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg"); + return RFAILED; + } + for(rsrcSetIdx=0; rsrcSetIdx < pucchCfg->resourceSetToAddModList->list.count; rsrcSetIdx++) + { + DU_ALLOC(pucchCfg->resourceSetToAddModList->list.array[rsrcSetIdx], sizeof(PUCCH_ResourceSet_t)); + if(pucchCfg->resourceSetToAddModList->list.array[rsrcSetIdx] == NULLP) + { + DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg"); + return RFAILED; + } + } + rsrcSetIdx = 0; + rsrcSet = pucchCfg->resourceSetToAddModList->list.array[rsrcSetIdx]; + rsrcSet->pucch_ResourceSetId = 1; + elementCnt = 1; + rsrcSet->resourceList.list.count = elementCnt; + rsrcSet->resourceList.list.size = elementCnt * sizeof(PUCCH_ResourceId_t *); + DU_ALLOC(rsrcSet->resourceList.list.array, rsrcSet->resourceList.list.size); + if(rsrcSet->resourceList.list.array == NULLP) + { + DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg"); + return RFAILED; + } + for(rsrcIdx=0; rsrcIdx < rsrcSet->resourceList.list.count; rsrcIdx++) + { + DU_ALLOC(rsrcSet->resourceList.list.array[rsrcIdx], sizeof(PUCCH_ResourceId_t)); + if(rsrcSet->resourceList.list.array[rsrcIdx] == NULLP) + { + DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg"); + return RFAILED; + } + } + rsrcIdx = 0; + *(rsrcSet->resourceList.list.array[rsrcIdx]) = 1; + + //RESOURCE + elementCnt = 1; + DU_ALLOC(pucchCfg->resourceToAddModList, sizeof(struct PUCCH_Config__resourceToAddModList)); + if(pucchCfg->resourceToAddModList == NULLP) + { + DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg"); + return RFAILED; + } + pucchCfg->resourceToAddModList->list.count = elementCnt; + pucchCfg->resourceToAddModList->list.size = elementCnt * sizeof(PUCCH_Resource_t *); + DU_ALLOC(pucchCfg->resourceToAddModList->list.array, pucchCfg->resourceToAddModList->list.size); + if(pucchCfg->resourceToAddModList->list.array == NULLP) + { + DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg"); + return RFAILED; + } + for(rsrcIdx=0; rsrcIdx < pucchCfg->resourceToAddModList->list.count; rsrcIdx++) + { + DU_ALLOC(pucchCfg->resourceToAddModList->list.array[rsrcIdx], sizeof(PUCCH_Resource_t)); + if(pucchCfg->resourceToAddModList->list.array[rsrcIdx] == NULLP) + { + DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg"); + return RFAILED; + } + } + rsrcIdx = 0; + rsrc = pucchCfg->resourceToAddModList->list.array[rsrcIdx]; + rsrc->pucch_ResourceId = 1; + rsrc->startingPRB = 0; + rsrc->format.present = PUCCH_Resource__format_PR_format1; + DU_ALLOC(rsrc->format.choice.format1, sizeof(PUCCH_format1_t)); + if(rsrc->format.choice.format1 == NULLP) + { + DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg"); + return RFAILED; + } + rsrc->format.choice.format1->initialCyclicShift = 0; + rsrc->format.choice.format1->nrofSymbols = 4; + rsrc->format.choice.format1->startingSymbolIndex = 0; + rsrc->format.choice.format1->timeDomainOCC = 0; + + //PUCCH Format 1 + DU_ALLOC(pucchCfg->format1, sizeof(struct PUCCH_Config__format1)); + if(pucchCfg->format1 == NULLP) + { + DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg"); + return RFAILED; + } + pucchCfg->format1->present = PUCCH_Config__format1_PR_setup; + DU_ALLOC(pucchCfg->format1->choice.setup, sizeof(PUCCH_FormatConfig_t)); + if(pucchCfg->format1->choice.setup == NULLP) + { + DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg"); + return RFAILED; + } + DU_ALLOC(pucchCfg->format1->choice.setup->nrofSlots, sizeof(long)); + if(pucchCfg->format1->choice.setup->nrofSlots == NULLP) + { + DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg"); + return RFAILED; + } + *(pucchCfg->format1->choice.setup->nrofSlots) = PUCCH_FormatConfig__nrofSlots_n4; + + //DL DATA TO UL ACK DU_ALLOC(pucchCfg->dl_DataToUL_ACK, sizeof(struct PUCCH_Config__dl_DataToUL_ACK)); if(pucchCfg->dl_DataToUL_ACK == NULLP) { @@ -5357,6 +5474,105 @@ void FreePuschTimeDomAllocList(PUSCH_Config_t *puschCfg) } } + +/******************************************************************* + * + * @brief Frees memory allocated for Dedicated PUCCH config + * + * @details + * + * Function : FreeBWPUlDedPucchCfg + * + * Functionality: Deallocating memory of Dedicated PUCCH cfg + * + * @params[in] BWP_UplinkDedicated__pucch_Config *ulBwpPucchCfg + * + * @return void + * + * ****************************************************************/ +void FreeBWPUlDedPucchCfg(struct BWP_UplinkDedicated__pucch_Config *ulBwpPucchCfg) +{ + uint8_t k1Idx, rsrcIdx, rsrcSetIdx; + PUCCH_Config_t *pucchCfg = NULLP; + PUCCH_ResourceSet_t *rsrcSet = NULLP; + PUCCH_Resource_t *rsrc = NULLP; + + if(ulBwpPucchCfg) + { + if(ulBwpPucchCfg->choice.setup) + { + pucchCfg = ulBwpPucchCfg->choice.setup; + + //Free resource set list + if(pucchCfg->resourceSetToAddModList) + { + if(pucchCfg->resourceSetToAddModList->list.array) + { + for(rsrcSetIdx=0; rsrcSetIdx < pucchCfg->resourceSetToAddModList->list.count; rsrcSetIdx++) + { + rsrcSet = pucchCfg->resourceSetToAddModList->list.array[rsrcSetIdx]; + if(rsrcSet->resourceList.list.array) + { + for(rsrcIdx=0; rsrcIdx < rsrcSet->resourceList.list.count; rsrcIdx++) + { + DU_FREE(rsrcSet->resourceList.list.array[rsrcIdx], sizeof(PUCCH_ResourceId_t)); + } + DU_FREE(rsrcSet->resourceList.list.array, rsrcSet->resourceList.list.size); + } + DU_FREE(pucchCfg->resourceSetToAddModList->list.array[rsrcSetIdx], sizeof(PUCCH_ResourceSet_t)); + } + DU_FREE(pucchCfg->resourceSetToAddModList->list.array, pucchCfg->resourceSetToAddModList->list.size); + } + DU_FREE(pucchCfg->resourceSetToAddModList, sizeof(struct PUCCH_Config__resourceSetToAddModList)); + } + + //Free resource list + if(pucchCfg->resourceToAddModList) + { + if(pucchCfg->resourceToAddModList->list.array) + { + for(rsrcIdx=0; rsrcIdx < pucchCfg->resourceToAddModList->list.count; rsrcIdx++) + { + rsrc = pucchCfg->resourceToAddModList->list.array[rsrcIdx]; + DU_FREE(rsrc->format.choice.format1, sizeof(PUCCH_format1_t)); + DU_FREE(pucchCfg->resourceToAddModList->list.array[rsrcIdx], sizeof(PUCCH_Resource_t)); + } + DU_FREE(pucchCfg->resourceToAddModList->list.array, pucchCfg->resourceToAddModList->list.size); + } + DU_FREE(pucchCfg->resourceToAddModList, sizeof(struct PUCCH_Config__resourceToAddModList)); + } + + //PUCCH Format 1 + if(pucchCfg->format1) + { + if(pucchCfg->format1->choice.setup) + { + DU_FREE(pucchCfg->format1->choice.setup->nrofSlots, sizeof(long)); + DU_FREE(pucchCfg->format1->choice.setup, sizeof(PUCCH_FormatConfig_t)); + } + DU_FREE(pucchCfg->format1, sizeof(struct PUCCH_Config__format1)); + } + + //DL DATA TO UL ACK + if(pucchCfg->dl_DataToUL_ACK) + { + if(pucchCfg->dl_DataToUL_ACK->list.array) + { + for(k1Idx = 0; k1Idx < pucchCfg->dl_DataToUL_ACK->list.count; k1Idx++) + { + DU_FREE(pucchCfg->dl_DataToUL_ACK->list.array[k1Idx], sizeof(long)); + } + DU_FREE(pucchCfg->dl_DataToUL_ACK->list.array, pucchCfg->dl_DataToUL_ACK->list.size); + } + DU_FREE(pucchCfg->dl_DataToUL_ACK, sizeof(struct PUCCH_Config__dl_DataToUL_ACK)); + } + + DU_FREE(ulBwpPucchCfg->choice.setup, sizeof(PUCCH_Config_t)); + } + DU_FREE(ulBwpPucchCfg, sizeof(struct BWP_UplinkDedicated__pucch_Config)); + } +} + /******************************************************************* * * @brief Frees memory allocated for InitialUlBWP @@ -5374,36 +5590,15 @@ void FreePuschTimeDomAllocList(PUSCH_Config_t *puschCfg) * ****************************************************************/ void FreeInitialUlBWP(BWP_UplinkDedicated_t *ulBwp) { - uint8_t rSetIdx, rsrcIdx, k1Idx; + uint8_t rSetIdx, rsrcIdx; SRS_Config_t *srsCfg = NULLP; PUSCH_Config_t *puschCfg = NULLP; - PUCCH_Config_t *pucchCfg = NULLP; struct PUSCH_Config__dmrs_UplinkForPUSCH_MappingTypeA *dmrsUlCfg = NULLP; struct SRS_Config__srs_ResourceSetToAddModList *rsrcSetList = NULLP; struct SRS_ResourceSet__srs_ResourceIdList *rsrcIdList = NULLP; struct SRS_Config__srs_ResourceToAddModList *resourceList = NULLP; - if(ulBwp->pucch_Config) - { - if(ulBwp->pucch_Config->choice.setup) - { - pucchCfg = ulBwp->pucch_Config->choice.setup; - if(pucchCfg->dl_DataToUL_ACK) - { - if(pucchCfg->dl_DataToUL_ACK->list.array) - { - for(k1Idx = 0; k1Idx < pucchCfg->dl_DataToUL_ACK->list.count; k1Idx++) - { - DU_FREE(pucchCfg->dl_DataToUL_ACK->list.array[k1Idx], sizeof(long)); - } - DU_FREE(pucchCfg->dl_DataToUL_ACK->list.array, pucchCfg->dl_DataToUL_ACK->list.size); - } - DU_FREE(pucchCfg->dl_DataToUL_ACK, sizeof(struct PUCCH_Config__dl_DataToUL_ACK)); - } - DU_FREE(ulBwp->pucch_Config->choice.setup, sizeof(PUCCH_Config_t)); - } - DU_FREE(ulBwp->pucch_Config, sizeof(struct BWP_UplinkDedicated__pucch_Config)); - } + FreeBWPUlDedPucchCfg(ulBwp->pucch_Config); if(ulBwp->pusch_Config) { @@ -8700,8 +8895,16 @@ void extractResrcSetToAddModList(PucchResrcSetCfg *macRsrcSetList, struct PUCCH_ macRsrcSetList->resrcSetToAddModList[arrIdx].resrcList[rsrcListIdx] =\ *cuRsrcSetList->list.array[arrIdx]->resourceList.list.array[rsrcListIdx]; } - macRsrcSetList->resrcSetToAddModList[arrIdx].maxPayLoadSize =\ - *cuRsrcSetList->list.array[arrIdx]->maxPayloadMinus1; + + if(cuRsrcSetList->list.array[arrIdx]->maxPayloadMinus1) + { + macRsrcSetList->resrcSetToAddModList[arrIdx].maxPayLoadSize =\ + *cuRsrcSetList->list.array[arrIdx]->maxPayloadMinus1; + } + else + { + macRsrcSetList->resrcSetToAddModList[arrIdx].maxPayLoadSize = 0; + } } }/* End of extractResrcSetToAddModList */