+
+ /*TransactionID*/
+ idx1 = 0;
+ duCfgUpdate->protocolIEs.list.array[idx1]->id=ProtocolIE_ID_id_TransactionID;
+ duCfgUpdate->protocolIEs.list.array[idx1]->criticality= Criticality_reject;
+ duCfgUpdate->protocolIEs.list.array[idx1]->value.present = \
+ GNBDUConfigurationUpdateIEs__value_PR_TransactionID;
+ duCfgUpdate->protocolIEs.list.array[idx1]->value.choice.TransactionID = \
+ TRANS_ID;
+
+ /*Served Cell to Modify */
+ idx1++;
+ duCfgUpdate->protocolIEs.list.array[idx1]->id = \
+ ProtocolIE_ID_id_Served_Cells_To_Modify_List;
+ duCfgUpdate->protocolIEs.list.array[idx1]->criticality =Criticality_reject;
+ duCfgUpdate->protocolIEs.list.array[idx1]->value.present = \
+ GNBDUConfigurationUpdateIEs__value_PR_Served_Cells_To_Modify_List;
+ cellsToModify = &duCfgUpdate->protocolIEs.list.array[idx1]->value.choice.\
+ Served_Cells_To_Modify_List;
+ modifyCnt = 1;
+ cellsToModify->list.count = modifyCnt;
+ cellsToModify->list.size = \
+ modifyCnt*sizeof(Served_Cells_To_Modify_ItemIEs_t *);
+ DU_ALLOC(cellsToModify->list.array,cellsToModify->list.size);
+ if(cellsToModify->list.array == NULLP)
+ {
+ break;
+ }
+ for(idy=0; idy<modifyCnt ;idy++)
+ {
+ DU_ALLOC(cellsToModify->list.array[idy],sizeof(\
+ Served_Cells_To_Modify_ItemIEs_t));
+ if(cellsToModify->list.array[idy] == NULLP)
+ {
+ break;
+ }
+ }
+ cellsToModify->list.array[0]->id = \
+ ProtocolIE_ID_id_Served_Cells_To_Modify_Item;
+ cellsToModify->list.array[0]->criticality = Criticality_reject;
+ cellsToModify->list.array[0]->value.present =\
+ Served_Cells_To_Modify_ItemIEs__value_PR_Served_Cells_To_Modify_Item;
+ modifyItem=&cellsToModify->list.array[0]->value.choice.\
+ Served_Cells_To_Modify_Item;
+
+ /*pLMN_Identity*/
+ modifyItem->oldNRCGI.pLMN_Identity.size = 3*sizeof(uint8_t);
+ DU_ALLOC(modifyItem->oldNRCGI.pLMN_Identity.buf,modifyItem->oldNRCGI.pLMN_Identity.size);
+ if(modifyItem->oldNRCGI.pLMN_Identity.buf == NULLP)
+ {
+ break;
+ }
+ buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
+ modifyItem->oldNRCGI.pLMN_Identity.buf);
+
+ /*nRCellIdentity*/
+ modifyItem->oldNRCGI.nRCellIdentity.size = 5*sizeof(uint8_t);
+ DU_ALLOC(modifyItem->oldNRCGI.nRCellIdentity.buf,\
+ modifyItem->oldNRCGI.nRCellIdentity.size);
+ if(modifyItem->oldNRCGI.nRCellIdentity.buf == NULLP)
+ {
+ break;
+ }
+ for (int tmp = 0;tmp < modifyItem->oldNRCGI.nRCellIdentity.size-1;tmp++)
+ {
+ modifyItem->oldNRCGI.nRCellIdentity.buf[tmp] = 0;
+ }
+ modifyItem->oldNRCGI.nRCellIdentity.buf[4] = 16;
+ modifyItem->oldNRCGI.nRCellIdentity.bits_unused = 4;
+ /*pLMN_Identity*/
+ /*nRCGI*/
+ modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.size =3*sizeof(uint8_t);
+ DU_ALLOC(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
+ modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.size);
+ if(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf == NULLP)
+ {
+ break;
+ }
+ buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
+ modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf);
+ modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.size =5*sizeof(uint8_t);
+ DU_ALLOC(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
+ modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.size);
+ if(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf == NULLP)
+ {
+ break;
+ }
+ for (int tmp = 0 ; tmp < modifyItem->served_Cell_Information.\
+ nRCGI.nRCellIdentity.size-1 ; tmp++)
+ {
+ modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf[tmp] = 0;
+ }
+ modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf[4] = 16;
+ modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.bits_unused =4;
+ /*nRPCI*/
+ modifyItem->served_Cell_Information.nRPCI = \
+ duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrPci;
+ /*servedPLMNs*/
+ servPlmnCnt = 1;
+ modifyItem->served_Cell_Information.servedPLMNs.list.count = servPlmnCnt;
+ modifyItem->served_Cell_Information.servedPLMNs.list.size = \
+ servPlmnCnt*sizeof(ServedPLMNs_Item_t *);
+ DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
+ modifyItem->served_Cell_Information.servedPLMNs.list.size);
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array == NULLP)
+ {
+ break;
+ }
+ for(idy1=0;idy1<servPlmnCnt;idy1++)
+ {
+ DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy1],\
+ sizeof(ServedPLMNs_Item_t));
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy1]== NULLP)
+ {
+ break;
+ }
+ }
+ modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[0]->pLMN_Identity.size = 3*sizeof(uint8_t);
+ DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[0]->pLMN_Identity.buf,modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[0]->pLMN_Identity.size);
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[0]->pLMN_Identity.buf == NULLP)
+ {
+ break;
+ }
+ buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.plmn[0],\
+ modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->pLMN_Identity.buf);
+ DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[0]->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P3_t));
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[0]->iE_Extensions == NULLP)
+ {
+ break;
+ }
+ extensionCnt=1;
+ modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.count = extensionCnt;
+ modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.size = extensionCnt *sizeof(ServedPLMNs_ItemExtIEs_t *);
+ DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[0]->iE_Extensions->list.array,modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.size);
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[0]->iE_Extensions->list.array == NULLP)
+ {
+ break;
+ }
+ for(idy2=0;idy2<extensionCnt;idy2++)
+ {
+ DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[0]->iE_Extensions->list.array[idy2],\
+ sizeof(ServedPLMNs_ItemExtIEs_t));
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[0]->iE_Extensions->list.array[idy2] == NULLP)
+ {
+ break;
+ }
+ }
+ modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->id =ProtocolIE_ID_id_TAISliceSupportList;
+ modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->criticality = Criticality_ignore;
+ modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.present = \
+ ServedPLMNs_ItemExtIEs__extensionValue_PR_SliceSupportList;
+ modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
+ list.count = 1;
+ modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
+ list.size = sizeof(SliceSupportItem_t *);
+ DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
+ list.array,modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.list.size);
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
+ list.array == NULLP)
+ {
+ break;
+ }
+
+ DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
+ list.array[0],sizeof( SliceSupportItem_t));
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
+ list.array[0] == NULLP)
+ {
+ break;
+ }
+ modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
+ list.array[0]->sNSSAI.sST.size = sizeof(uint8_t);
+ DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
+ list.array[0]->sNSSAI.sST.buf,modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.list.array[0]->sNSSAI.sST.size);
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
+ list.array[0]->sNSSAI.sST.buf == NULLP)
+ {
+ break;
+ }
+ modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
+ list.array[0]->sNSSAI.sST.buf[0] = 3;
+ DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
+ list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
+ list.array[0]->sNSSAI.sD == NULLP)
+ {
+ break;
+ }
+ modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
+ list.array[0]->sNSSAI.sD->size = 3*sizeof(uint8_t);
+ DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
+ list.array[0]->sNSSAI.sD->buf,modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
+ list.array[0]->sNSSAI.sD->size);
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
+ list.array[0]->sNSSAI.sD->buf == NULLP)
+ {
+ break;
+ }
+ modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
+ list.array[0]->sNSSAI.sD->buf[0] = 3;
+ modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
+ list.array[0]->sNSSAI.sD->buf[1] = 6;
+ modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
+ iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
+ list.array[0]->sNSSAI.sD->buf[2] = 9;
+
+ /*nR Mode Info with FDD*/
+ modifyItem->served_Cell_Information.nR_Mode_Info.present = \
+ NR_Mode_Info_PR_fDD;
+ DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
+ sizeof(FDD_Info_t));
+ if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD == NULLP)
+ {
+ break;
+ }
+ modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
+ uL_NRFreqInfo.nRARFCN = duCfgParam.srvdCellLst[0].duCellInfo.\
+ f1Mode.mode.fdd.ulNrFreqInfo.nrArfcn;
+ modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
+ uL_NRFreqInfo.freqBandListNr.list.count = 1;
+ modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
+ uL_NRFreqInfo.freqBandListNr.list.size = sizeof(FreqBandNrItem_t*);
+ DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
+ fDD->uL_NRFreqInfo.freqBandListNr.list.\
+ array, modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
+ uL_NRFreqInfo.freqBandListNr.list.size);
+ if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
+ fDD->uL_NRFreqInfo.freqBandListNr.list.array == NULLP)
+ {
+ break;
+ }
+ DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
+ uL_NRFreqInfo.freqBandListNr.list.array[0],sizeof(FreqBandNrItem_t));
+ if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->
+ uL_NRFreqInfo.freqBandListNr.list.array[0] == NULLP)
+ {
+ break;
+ }
+ modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->uL_NRFreqInfo.\
+ freqBandListNr.list.array[0]->freqBandIndicatorNr = \
+ duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.\
+ freqBand[0].nrFreqBand;
+ modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->uL_NRFreqInfo.\
+ freqBandListNr.list.array[0]->supportedSULBandList.list.count=0;
+ modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
+ nRARFCN = duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.\
+ dlNrFreqInfo.nrArfcn;
+ modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
+ freqBandListNr.list.count = 1;
+ modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
+ freqBandListNr.list.size = sizeof(FreqBandNrItem_t *);
+ DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
+ dL_NRFreqInfo.freqBandListNr.list.array,modifyItem->served_Cell_Information.nR_Mode_Info.\
+ choice.fDD->dL_NRFreqInfo.freqBandListNr.list.size);
+ if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
+ dL_NRFreqInfo.freqBandListNr.list.array == NULLP)
+ {
+ break;
+ }
+ DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
+ dL_NRFreqInfo.freqBandListNr.list.array[0],\
+ sizeof(FreqBandNrItem_t));
+ if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
+ dL_NRFreqInfo.freqBandListNr.list.array[0] == NULLP)
+ {
+ break;
+ }
+ modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
+ freqBandListNr.list.array[0]->freqBandIndicatorNr = \
+ duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.\
+ freqBand[0].nrFreqBand;
+ modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
+ freqBandListNr.list.array[0]->supportedSULBandList.list.count=0;
+
+ /*Transmission Bandwidth*/
+ modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
+ uL_Transmission_Bandwidth.nRSCS = duCfgParam.srvdCellLst[0].duCellInfo.\
+ f1Mode.mode.fdd.ulTxBw.nrScs;
+ modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
+ uL_Transmission_Bandwidth.nRNRB = duCfgParam.srvdCellLst[0].duCellInfo.\
+ f1Mode.mode.fdd.ulTxBw.nrb;
+ modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
+ dL_Transmission_Bandwidth.nRSCS = duCfgParam.srvdCellLst[0].duCellInfo.\
+ f1Mode.mode.fdd.dlTxBw.nrScs;
+ modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
+ dL_Transmission_Bandwidth.nRNRB = duCfgParam.srvdCellLst[0].duCellInfo.\
+ f1Mode.mode.fdd.dlTxBw.nrb;
+ /*Measurement timing Config*/
+ modifyItem->served_Cell_Information.measurementTimingConfiguration.size = \
+ sizeof(uint8_t);
+ DU_ALLOC(modifyItem->served_Cell_Information.measurementTimingConfiguration.\
+ buf,modifyItem->served_Cell_Information.measurementTimingConfiguration.size);
+ if(modifyItem->served_Cell_Information.measurementTimingConfiguration.buf == NULLP)
+ {
+ break;
+ }
+ modifyItem->served_Cell_Information.measurementTimingConfiguration.\
+ buf[0] = duCfgParam.srvdCellLst[0].duCellInfo.measTimeCfg;
+
+ // NOTE :GNB DU SYS INFO:MIB AND SIB1 INFORMATION TO BE BUILT AND FILLED HERE
+ /*GNB DU ID */
+ idx1++;
+ duCfgUpdate->protocolIEs.list.array[idx1]->id = ProtocolIE_ID_id_gNB_DU_ID;
+ duCfgUpdate->protocolIEs.list.array[idx1]->criticality = Criticality_reject;
+ duCfgUpdate->protocolIEs.list.array[idx1]->value.present = \
+ GNBDUConfigurationUpdateIEs__value_PR_GNB_DU_ID;
+ duCfgUpdate->protocolIEs.list.array[idx1]->value.choice.GNB_DU_ID.size = \
+ sizeof(uint8_t);
+ DU_ALLOC(duCfgUpdate->protocolIEs.list.array[idx1]->value.choice.GNB_DU_ID.buf,\
+ duCfgUpdate->protocolIEs.list.array[idx1]->value.choice.GNB_DU_ID.size);
+ if(duCfgUpdate->protocolIEs.list.array[idx1]->value.choice.GNB_DU_ID.buf == NULLP)
+ {
+ break;
+ }
+ duCfgUpdate->protocolIEs.list.array[idx1]->value.choice.GNB_DU_ID.buf[0] = \
+ duCfgParam.duId;
+
+ xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apDuCfg);
+
+ /* Encode the DU Config Update type as APER */
+ memset((uint8_t *)encBuf, 0, ENC_BUF_MAX_LEN);
+ encBufSize = 0;
+ encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apDuCfg, PrepFinalEncBuf, encBuf);
+
+ /* Checking encode results */
+ if(encRetVal.encoded == ENCODE_FAIL)
+ {
+ DU_LOG("F1AP : Could not encode DUConfigUpdate structure (at %s)\n",encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
+ break;
+ }
+ else
+ {
+ DU_LOG("\nF1AP : Created APER encoded buffer for DUConfigUpdate\n");
+ for(i=0; i< encBufSize; i++)
+ {
+ printf("%x",encBuf[i]);
+ }
+ }
+ /* Sending msg */
+ if(SendF1APMsg(DU_APP_MEM_REGION, DU_POOL) != ROK)
+ {
+ DU_LOG("\nF1AP : Sending GND-DU Config Update failed");
+ break;
+ }
+
+ ret = ROK;
+ break;
+ }
+ FreeDUConfigUpdate(f1apDuCfg);
+
+ return ret;
+}
+/*******************************************************************
+ *
+ * @brief Deallocating memory of BuildAndSendDUConfigUpdate
+ *
+ * @details
+ *
+ * Function : FreeDUConfigUpdate
+ *
+ * Functionality: Deallocating memory of variables allocated in
+ * BuildAndSendDUConfigUpdate function
+ *
+ * @params[in] F1AP_PDU_t *f1apDuCfg
+ *
+ * @return ROK - void
+ *
+ * ****************************************************************/
+void FreeDUConfigUpdate(F1AP_PDU_t *f1apDuCfg)
+{
+ uint8_t i;
+ uint8_t idx;
+ GNBDUConfigurationUpdate_t *duCfgUpdate;
+ Served_Cells_To_Modify_List_t *cellsToModify;
+ Served_Cells_To_Modify_Item_t *modifyItem;
+ idx=0;
+ i=1;
+ if(f1apDuCfg != NULLP)
+ {
+ if(f1apDuCfg->choice.initiatingMessage != NULLP)
+ {
+ duCfgUpdate = &f1apDuCfg->choice.initiatingMessage->\
+ value.choice.GNBDUConfigurationUpdate;
+ if(duCfgUpdate->protocolIEs.list.array != NULLP)
+ {
+ if(duCfgUpdate->protocolIEs.list.array[i] != NULLP)
+ {
+ cellsToModify = &duCfgUpdate->protocolIEs.list.array[i]->\
+ value.choice.Served_Cells_To_Modify_List;
+ if(cellsToModify->list.array != NULLP)
+ {
+ if(cellsToModify->list.array[idx] != NULLP)
+ {
+ modifyItem=&cellsToModify->list.array[idx]->value.choice.\
+ Served_Cells_To_Modify_Item;
+ if(modifyItem->oldNRCGI.pLMN_Identity.buf != NULLP)
+ {
+ if(modifyItem->oldNRCGI.nRCellIdentity.buf != NULLP)
+ {
+ if(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf != NULLP)
+ {
+ if(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf
+ != NULLP)
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array\
+ != NULLP)
+ {
+ if(!modifyItem->served_Cell_Information.servedPLMNs.list.array[idx])
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[idx]->pLMN_Identity.buf != NULLP)
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[idx]->iE_Extensions!= NULLP)
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[idx]->iE_Extensions->list.array != NULLP)
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[idx]->iE_Extensions->list.array[idx])
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
+ iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
+ list.array !=NULLP)
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
+ iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
+ list.array[idx]!=NULLP)
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
+ iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
+ list.array[idx]->sNSSAI.sST.buf!=NULLP)
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
+ iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
+ list.array[idx]->sNSSAI.sD != NULLP)
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
+ iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
+ list.array[idx]->sNSSAI.sD->buf!=NULLP)
+ {
+ if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD
+ !=NULLP)
+ {
+ if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
+ fDD->uL_NRFreqInfo.freqBandListNr.list.array!=NULLP)
+ {
+ if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
+ fDD->uL_NRFreqInfo.freqBandListNr.list.array[idx]!=NULLP)
+ {
+ if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
+ fDD->dL_NRFreqInfo.freqBandListNr.list.array !=NULLP)
+ {
+ if(modifyItem->served_Cell_Information.nR_Mode_Info.\
+ choice.fDD->dL_NRFreqInfo.freqBandListNr.list.\
+ array[idx]!= NULLP)
+ {
+ if(modifyItem->served_Cell_Information.\
+ measurementTimingConfiguration.buf !=NULLP)
+ {
+ idx=2;
+ if(duCfgUpdate->protocolIEs.list.array[idx]->value.\
+ choice.GNB_DU_ID.buf!=NULLP)
+ {
+ DU_FREE(duCfgUpdate->protocolIEs.list.\
+ array[idx]->value.choice.GNB_DU_ID.buf,\
+ duCfgUpdate->protocolIEs.list.array[idx]->\
+ value.choice.GNB_DU_ID.size);
+ }
+ idx=0;
+ DU_FREE(modifyItem->served_Cell_Information.\
+ measurementTimingConfiguration.\
+ buf,modifyItem->served_Cell_Information.\
+ measurementTimingConfiguration.size);
+ }
+ DU_FREE(modifyItem->served_Cell_Information.\
+ nR_Mode_Info.choice.fDD->dL_NRFreqInfo.freqBandListNr.\
+ list.array[idx],sizeof(FreqBandNrItem_t));
+ }
+ DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info\
+ .choice.fDD->dL_NRFreqInfo.freqBandListNr.list.array,\
+ modifyItem->served_Cell_Information.nR_Mode_Info.\
+ choice.fDD->dL_NRFreqInfo.freqBandListNr.list.size);
+ }
+ DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.\
+ choice.fDD->uL_NRFreqInfo.freqBandListNr.list.\
+ array[idx],sizeof(FreqBandNrItem_t));
+ }
+ DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.\
+ choice.\
+ fDD->uL_NRFreqInfo.freqBandListNr.list.\
+ array,modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
+ fDD->uL_NRFreqInfo.freqBandListNr.list.size);
+ }
+ DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
+ fDD,sizeof(FDD_Info_t));
+ }
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[idx]->iE_Extensions->list.array[idx]->extensionValue.choice.\
+ SliceSupportList.\
+ list.array[idx]->sNSSAI.sD->buf,modifyItem->served_Cell_Information.\
+ servedPLMNs.list.array[idx]->iE_Extensions->list.array[idx]->\
+ extensionValue.choice.SliceSupportList.list.array[idx]->\
+ sNSSAI.sD->size);
+
+ }
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[idx]->\
+ iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
+ list.array[idx]->sNSSAI.sD,sizeof(OCTET_STRING_t));
+ }
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
+ iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
+ list.array[idx]->sNSSAI.sST.buf,modifyItem->served_Cell_Information.\
+ servedPLMNs.\
+ list.array[idx]->iE_Extensions->list.array[idx]->extensionValue.choice.\
+ SliceSupportList.list.array[idx]->sNSSAI.sST.size);
+ }
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
+ iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
+ list.array[idx],sizeof(SliceSupportItem_t));
+ }
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
+ iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
+ list.array,\
+ modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
+ iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.list.size);
+ }
+ }
+ for(i=0;i<modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[idx]->iE_Extensions->list.count;i++)
+ {
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[idx]->iE_Extensions->list.array[i],\
+ sizeof(ServedPLMNs_ItemExtIEs_t ));
+ }
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[idx]->iE_Extensions->list.array,modifyItem->served_Cell_Information.servedPLMNs.
+ list.array[idx]->iE_Extensions->list.size);
+ }
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[idx]->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P3_t));
+ }
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[idx]->pLMN_Identity.buf,
+ modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->pLMN_Identity.size);
+ }
+ }
+ for(i=0;i<modifyItem->served_Cell_Information.servedPLMNs.list.count;i++)
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array[i]
+ != NULLP)
+ {
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[i],\
+ sizeof(ServedPLMNs_Item_t));
+ }
+ }
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
+ modifyItem->served_Cell_Information.servedPLMNs.list.size);
+ }
+ DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
+ modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.size);
+ }
+ DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
+ modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.size);
+ }
+ DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
+ modifyItem->oldNRCGI.nRCellIdentity.size);
+ }
+ DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,\
+ modifyItem->oldNRCGI.pLMN_Identity.size);
+ }
+ }
+ for(i=0; i<cellsToModify->list.count ;i++)
+ {
+ if(cellsToModify->list.array[i] != NULLP)
+ {
+ DU_FREE(cellsToModify->list.array[i],\
+ sizeof(Served_Cells_To_Modify_ItemIEs_t));
+ }
+ }
+ DU_FREE(cellsToModify->list.array,cellsToModify->list.size);
+ }
+ }
+ for(i=0;i<duCfgUpdate->protocolIEs.list.count;i++)
+ {
+ if(duCfgUpdate->protocolIEs.list.array[i] !=NULLP)
+ {
+ DU_FREE(duCfgUpdate->protocolIEs.list.array[i],\
+ sizeof(GNBDUConfigurationUpdateIEs_t));
+ }
+ }
+ DU_FREE(duCfgUpdate->protocolIEs.list.array,duCfgUpdate->protocolIEs.list.size);
+ }
+ DU_FREE(f1apDuCfg->choice.initiatingMessage,sizeof(InitiatingMessage_t));
+ }
+ DU_FREE(f1apDuCfg, (Size)sizeof(F1AP_PDU_t));
+ }
+}
+/*******************************************************************
+ *
+ * @brief free the ULRRCMessageTransfer
+ *
+ * @details
+ *
+ * Function : FreeULRRCMessageTransfer
+ *
+ * Functionality: Deallocating the memory of variable allocated in
+ * FreeULRRCMessageTransfer
+ *
+ * @params[in]
+ *
+ * @return ROK - void
+ *
+ ******************************************************************/
+void FreeULRRCMessageTransfer( F1AP_PDU_t *f1apMsg)
+{
+ uint8_t idx1;
+ ULRRCMessageTransfer_t *ulRRCMsg;
+
+ if(f1apMsg != NULLP)
+ {
+ if(f1apMsg->choice.initiatingMessage != NULLP)
+ {
+ ulRRCMsg = &f1apMsg->choice.initiatingMessage->value.choice.ULRRCMessageTransfer;
+ if(ulRRCMsg->protocolIEs.list.array != NULLP)
+ {
+ for(idx1=0;idx1<ulRRCMsg->protocolIEs.list.count;idx1++)
+ {
+ if(ulRRCMsg->protocolIEs.list.array[idx1] != NULLP)
+ {
+ if(ulRRCMsg->protocolIEs.list.array[idx1]->value.present ==
+ ULRRCMessageTransferIEs__value_PR_RRCContainer)
+ {
+ DU_FREE(ulRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.buf,
+ ulRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.size);
+ }
+ DU_FREE(ulRRCMsg->protocolIEs.list.array[idx1],sizeof(ULRRCMessageTransferIEs_t));
+ }
+ }
+ DU_FREE(ulRRCMsg->protocolIEs.list.array,ulRRCMsg->protocolIEs.list.size );
+ }
+ DU_FREE(f1apMsg->choice.initiatingMessage,sizeof(InitiatingMessage_t));
+ }
+ DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
+ }
+}