1 /*******************************************************************************
2 ################################################################################
3 # Copyright (c) [2017-2019] [Radisys] #
5 # Licensed under the Apache License, Version 2.0 (the "License"); #
6 # you may not use this file except in compliance with the License. #
7 # You may obtain a copy of the License at #
9 # http://www.apache.org/licenses/LICENSE-2.0 #
11 # Unless required by applicable law or agreed to in writing, software #
12 # distributed under the License is distributed on an "AS IS" BASIS, #
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
14 # See the License for the specific language governing permissions and #
15 # limitations under the License. #
16 ################################################################################
17 *******************************************************************************/
19 /* This file contains F1AP message handler functions */
22 #include "du_mgr_main.h"
23 #include "du_cell_mgr.h"
24 #include "du_f1ap_msg_hdl.h"
25 #include "GNB-DU-System-Information.h"
27 extern char encBuf[ENC_BUF_MAX_LEN];
28 extern DuCfgParams duCfgParam;
29 S16 sctpSend(Buffer *mBuf, U8 itfType);
30 /*******************************************************************
32 * @brief Builds Uplink Info for NR
36 * Function : BuildULNRInfo
38 * Functionality: Building NR Uplink Info
40 * @params[in] NRFreqInfo_t *ulnrfreq
41 * @return ROK - success
44 * ****************************************************************/
45 S16 BuildULNRInfo(NRFreqInfo_t *ulnrfreq)
48 ulnrfreq->nRARFCN = duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.\
49 fdd.ulNrFreqInfo.nrArfcn;
50 ulnrfreq->freqBandListNr.list.count = 1;
51 ulnrfreq->freqBandListNr.list.size = sizeof(FreqBandNrItem_t *);
52 DU_ALLOC(ulnrfreq->freqBandListNr.list.array,ulnrfreq->freqBandListNr.list.size);
53 if(ulnrfreq->freqBandListNr.list.array == NULLP)
57 for(idx=0;idx<ulnrfreq->freqBandListNr.list.count;idx++)
59 DU_ALLOC(ulnrfreq->freqBandListNr.list.array[idx],sizeof(FreqBandNrItem_t));
60 if(ulnrfreq->freqBandListNr.list.array[idx] == NULLP)
65 ulnrfreq->freqBandListNr.list.array[0]->freqBandIndicatorNr = \
66 duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.\
67 freqBand[0].nrFreqBand;
68 ulnrfreq->freqBandListNr.list.array[0]->supportedSULBandList.list.count = SUL_BAND_COUNT;
71 /*******************************************************************
73 * @brief Builds Downlink NR Info
77 * Function : BuildDLNRInfo
79 * Functionality: Building Downlink NR Info
81 * @params[in] NRFreqInfo_t *dlnrfreq
82 * @return ROK - success
85 * ****************************************************************/
86 S16 BuildDLNRInfo(NRFreqInfo_t *dlnrfreq)
89 dlnrfreq->nRARFCN = duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.\
90 fdd.dlNrFreqInfo.nrArfcn;
91 dlnrfreq->freqBandListNr.list.count = 1;
92 dlnrfreq->freqBandListNr.list.size = sizeof(FreqBandNrItem_t *);
93 DU_ALLOC(dlnrfreq->freqBandListNr.list.array,dlnrfreq->freqBandListNr.list.size);
94 if(dlnrfreq->freqBandListNr.list.array == NULLP)
98 for(idx=0;idx< dlnrfreq->freqBandListNr.list.count;idx++)
100 DU_ALLOC(dlnrfreq->freqBandListNr.list.array[idx],sizeof(FreqBandNrItem_t));
101 if(dlnrfreq->freqBandListNr.list.array[idx] == NULLP)
106 dlnrfreq->freqBandListNr.list.array[0]->freqBandIndicatorNr = \
107 duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.\
108 freqBand[0].nrFreqBand;
109 dlnrfreq->freqBandListNr.list.array[0]->supportedSULBandList.list.count = SUL_BAND_COUNT;
114 /*******************************************************************
116 * @brief Builds Nrcgi
120 * Function : BuildNrcgi
122 * Functionality: Building the PLMN ID and NR Cell id
124 * @params[in] NRCGI_t *nrcgi
125 * @return ROK - success
128 * ****************************************************************/
129 S16 BuildNrcgi(NRCGI_t *nrcgi)
135 /* Allocate Buffer Memory */
136 nrcgi->pLMN_Identity.size = PLMN_SIZE * sizeof(U8);
137 DU_ALLOC(nrcgi->pLMN_Identity.buf, nrcgi->pLMN_Identity.size);
138 ret = buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
139 &nrcgi->pLMN_Identity); // Building PLMN function
145 //ret = BuildNrCellId(&nrcgi->nRCellIdentity);
146 nrcgi->nRCellIdentity.size = byteSize * sizeof(U8);
147 DU_ALLOC(nrcgi->nRCellIdentity.buf, nrcgi->nRCellIdentity.size);
148 if(nrcgi->nRCellIdentity.buf == NULLP)
152 ret = fillBitString(&nrcgi->nRCellIdentity, unused, byteSize, val);
159 /*******************************************************************
161 * @brief Builds FiveGStac
165 * Function : BuildFiveGSTac
167 * Functionality: Building the FiveGSTac
169 * @params[in] OCTET_STRING_t *fivegsTac
170 * @return ROK - success
173 * ****************************************************************/
174 S16 BuildFiveGSTac(Served_Cell_Information_t *servcell)
176 DU_ALLOC(servcell->fiveGS_TAC,sizeof(FiveGS_TAC_t));
177 if(servcell->fiveGS_TAC == NULLP)
181 servcell->fiveGS_TAC->size = 3 * sizeof(U8);
182 DU_ALLOC(servcell->fiveGS_TAC->buf,\
183 sizeof(servcell->fiveGS_TAC->size));
184 if(servcell->fiveGS_TAC->buf == NULLP)
188 servcell->fiveGS_TAC->buf[0] = 0;
189 servcell->fiveGS_TAC->buf[1] = 0;
190 servcell->fiveGS_TAC->buf[2] = duCfgParam.srvdCellLst[0].duCellInfo.tac;
193 /*******************************************************************
195 * @brief Builds NR Mode
199 * Function : BuildNrMode
201 * Functionality: Building the NR Mode
203 * @params[in] NR_Mode_Info_t *fdd
204 * @return ROK - success
207 * ****************************************************************/
208 S16 BuildNrMode(NR_Mode_Info_t *mode)
210 S16 BuildDLNRInforet=0;
211 S16 BuildULNRInforet=0;
213 mode->present = NR_Mode_Info_PR_fDD;
214 if(mode->present == NR_Mode_Info_PR_fDD)
216 DU_ALLOC(mode->choice.fDD,sizeof(FDD_Info_t));
217 if(mode->choice.fDD == NULLP)
221 BuildULNRInforet = BuildULNRInfo(&mode->choice.fDD->uL_NRFreqInfo);
222 if(BuildULNRInforet != ROK)
226 BuildDLNRInforet = BuildDLNRInfo(&mode->choice.fDD->dL_NRFreqInfo);
227 if(BuildDLNRInforet != ROK)
232 mode->choice.fDD->uL_Transmission_Bandwidth.nRSCS = \
233 duCfgParam.srvdCellLst[0].duCellInfo.\
234 f1Mode.mode.fdd.ulTxBw.nrScs;
235 mode->choice.fDD->uL_Transmission_Bandwidth.nRNRB = \
236 duCfgParam.srvdCellLst[0].duCellInfo.\
237 f1Mode.mode.fdd.ulTxBw.nrb;
238 mode->choice.fDD->dL_Transmission_Bandwidth.nRSCS = \
239 duCfgParam.srvdCellLst[0].duCellInfo.\
240 f1Mode.mode.fdd.dlTxBw.nrScs;
241 mode->choice.fDD->dL_Transmission_Bandwidth.nRNRB = \
242 duCfgParam.srvdCellLst[0].duCellInfo.\
243 f1Mode.mode.fdd.dlTxBw.nrb;
246 /*******************************************************************
248 * @brief Builds IE Extensions for Served PLMNs
252 * Function : BuildExtensions
254 * Functionality: Building the IE Extensions
256 * @params[in] struct ProtocolExtensionContainer_4624P3 *buildextend
257 * @return ROK - success
260 * ****************************************************************/
261 S16 BuildExtensions(ProtocolExtensionContainer_4624P3_t **ieExtend)
268 DU_ALLOC(*ieExtend,sizeof(ProtocolExtensionContainer_4624P3_t));
269 if((*ieExtend) == NULLP)
273 (*ieExtend)->list.count = extensionCnt;
274 (*ieExtend)->list.size = \
275 extensionCnt * sizeof(ServedPLMNs_ItemExtIEs_t *);
276 DU_ALLOC((*ieExtend)->list.array,(*ieExtend)->list.size);
277 if((*ieExtend)->list.array == NULLP)
281 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
283 DU_ALLOC((*ieExtend)->list.array[plmnidx],\
284 sizeof(ServedPLMNs_ItemExtIEs_t));
285 if((*ieExtend)->list.array[plmnidx] == NULLP)
291 (*ieExtend)->list.array[idx]->id = ProtocolIE_ID_id_TAISliceSupportList;
292 (*ieExtend)->list.array[idx]->criticality = Criticality_ignore;
293 (*ieExtend)->list.array[idx]->extensionValue.present = \
294 ServedPLMNs_ItemExtIEs__extensionValue_PR_SliceSupportList;
295 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
297 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
298 list.size = sizeof(SliceSupportItem_t *);
299 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
300 list.array,sizeof(SliceSupportItem_t *));
301 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
306 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
307 list.array[sliceId],sizeof(SliceSupportItem_t));
308 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
309 list.array[sliceId] == NULLP)
313 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
314 list.array[sliceId]->sNSSAI.sST.size = sizeof(U8);
315 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList\
316 .list.array[sliceId]->sNSSAI.sST.buf,(*ieExtend)->list.array[idx]->\
317 extensionValue.choice.SliceSupportList.\
318 list.array[sliceId]->sNSSAI.sST.size);
319 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList\
320 .list.array[sliceId]->sNSSAI.sST.buf == NULLP)
324 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
325 list.array[sliceId]->sNSSAI.sST.buf[0] = 3;
326 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
327 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
328 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
329 list.array[sliceId]->sNSSAI.sD == NULLP)
333 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
334 list.array[sliceId]->sNSSAI.sD->size = 3*sizeof(U8);
335 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
336 list.array[sliceId]->sNSSAI.sD->buf,(*ieExtend)->list.array[idx]->extensionValue.choice.\
337 SliceSupportList.list.array[sliceId]->sNSSAI.sD->size);
338 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
339 list.array[sliceId]->sNSSAI.sD->buf == NULLP)
344 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
345 list.array[sliceId]->sNSSAI.sD->buf[sdId] = 3;
347 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
348 list.array[sliceId]->sNSSAI.sD->buf[sdId] = 6;
350 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
351 list.array[sliceId]->sNSSAI.sD->buf[sdId] = 9;
354 /*******************************************************************
356 * @brief Builds Served PLMN
360 * Function : BuildServedPlmn
362 * Functionality: Building the Served PLMN
364 * @params[in] GNB_DU_Served_Cells_Item_t *srvCellItem
365 * @return ROK - success
368 * ****************************************************************/
369 S16 BuildServedPlmn(ServedPLMNs_List_t *srvplmn)
373 S16 buildPlmnIdret=0;
374 S16 BuildExtensionsret=0;
375 srvplmn->list.count = servPlmnCnt;
376 srvplmn->list.size = \
377 servPlmnCnt*sizeof(ServedPLMNs_Item_t *);
378 DU_ALLOC(srvplmn->list.array,srvplmn->list.size);
379 if(srvplmn->list.array == NULLP)
383 for(plmnidx=0; plmnidx<servPlmnCnt; plmnidx++)
385 DU_ALLOC(srvplmn->list.array[plmnidx],\
386 sizeof(ServedPLMNs_Item_t));
387 if(srvplmn->list.array[plmnidx] == NULLP)
392 srvplmn->list.array[0]->pLMN_Identity.size = PLMN_SIZE * sizeof(U8);
393 DU_ALLOC(srvplmn->list.array[0]->pLMN_Identity.buf, srvplmn->list.array[0]->pLMN_Identity.size);
394 buildPlmnIdret = buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
395 &srvplmn->list.array[0]->pLMN_Identity);
396 if(buildPlmnIdret!= ROK)
400 BuildExtensionsret = BuildExtensions(&srvplmn->list.array[0]->iE_Extensions);
401 if(BuildExtensionsret!= ROK)
407 /*******************************************************************
409 * @brief Builds Served Cell List
413 * Function : BuildServedCellList
415 * Functionality: Building Served Cell List
417 * @params[in] PLMNID plmn
418 * @return ROK - success
421 * ****************************************************************/
423 S16 BuildServedCellList(GNB_DU_Served_Cells_List_t *duServedCell)
426 S16 BuildFiveGSTacret=0;
427 S16 BuildServedPlmnret=0;
428 S16 BuildNrModeret=0;
432 GNB_DU_Served_Cells_Item_t *srvCellItem;
433 duServedCell->list.size = plmnCnt * sizeof(GNB_DU_Served_Cells_ItemIEs_t *);
434 duServedCell->list.count = plmnCnt;
436 DU_ALLOC(duServedCell->list.array, duServedCell->list.size);
437 if(duServedCell->list.array == NULLP)
441 for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
443 DU_ALLOC(duServedCell->list.array[plmnidx],\
444 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
445 if(duServedCell->list.array[plmnidx] == NULLP)
451 duServedCell->list.array[idx]->id = ProtocolIE_ID_id_GNB_DU_Served_Cells_Item;
452 duServedCell->list.array[idx]->criticality = Criticality_reject;
453 duServedCell->list.array[idx]->value.present = \
454 GNB_DU_Served_Cells_ItemIEs__value_PR_GNB_DU_Served_Cells_Item;
456 &duServedCell->list.array[idx]->value.choice.GNB_DU_Served_Cells_Item;
458 BuildNrcgiret = BuildNrcgi(&srvCellItem->served_Cell_Information.nRCGI);
459 if(BuildNrcgiret != ROK)
464 srvCellItem->served_Cell_Information.nRPCI = \
465 duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrPci;
468 BuildFiveGSTacret = BuildFiveGSTac(&srvCellItem->served_Cell_Information);
469 if(BuildFiveGSTacret != ROK)
474 BuildServedPlmnret = BuildServedPlmn(&srvCellItem->served_Cell_Information.servedPLMNs);
475 if(BuildServedPlmnret !=ROK)
479 /*nR Mode Info with FDD*/
480 BuildNrModeret = BuildNrMode(&srvCellItem->served_Cell_Information.nR_Mode_Info);
481 if(BuildNrModeret != ROK)
485 /*Measurement timing Config*/
486 srvCellItem->served_Cell_Information.measurementTimingConfiguration.\
488 DU_ALLOC(srvCellItem->served_Cell_Information.\
489 measurementTimingConfiguration.buf,srvCellItem->served_Cell_Information.measurementTimingConfiguration.size);
490 if(srvCellItem->served_Cell_Information.\
491 measurementTimingConfiguration.buf == NULLP)
495 srvCellItem->served_Cell_Information.measurementTimingConfiguration.buf[0] = \
496 duCfgParam.srvdCellLst[0].duCellInfo.measTimeCfg;
498 /* GNB DU System Information */
499 DU_ALLOC(srvCellItem->gNB_DU_System_Information,
500 sizeof(GNB_DU_System_Information_t));
501 if(!srvCellItem->gNB_DU_System_Information)
506 srvCellItem->gNB_DU_System_Information->mIB_message.size =\
507 strlen(( char *)duCfgParam.srvdCellLst[0].duSysInfo.mibMsg);
508 DU_ALLOC(srvCellItem->gNB_DU_System_Information->mIB_message.buf,
509 srvCellItem->gNB_DU_System_Information->mIB_message.size);
510 if(!srvCellItem->gNB_DU_System_Information->mIB_message.buf)
514 strcpy((char *)srvCellItem->gNB_DU_System_Information->mIB_message.buf,
515 (char *)duCfgParam.srvdCellLst[0].duSysInfo.mibMsg);
518 srvCellItem->gNB_DU_System_Information->sIB1_message.size =\
519 duCfgParam.srvdCellLst[0].duSysInfo.sib1Len;
521 DU_ALLOC(srvCellItem->gNB_DU_System_Information->sIB1_message.buf,
522 srvCellItem->gNB_DU_System_Information->sIB1_message.size);
523 if(!srvCellItem->gNB_DU_System_Information->sIB1_message.buf)
527 for(int x=0; x<srvCellItem->gNB_DU_System_Information->sIB1_message.size; x++)
529 srvCellItem->gNB_DU_System_Information->sIB1_message.buf[x]=\
530 duCfgParam.srvdCellLst[0].duSysInfo.sib1Msg[x];
534 /*******************************************************************
536 * @brief Builds RRC Version
540 * Function : BuildRrcVer
542 * Functionality: Building RRC Version
544 * @params[in] int idx,int elementCnt,RRC_Version_t *rrcver
545 * @return ROK - success
548 * ****************************************************************/
549 S16 BuildRrcVer(RRC_Version_t *rrcVer)
553 rrcVer->latest_RRC_Version.size = sizeof(U8);
554 DU_ALLOC(rrcVer->latest_RRC_Version.buf,sizeof(U8));
555 if(rrcVer->latest_RRC_Version.buf == NULLP)
559 rrcVer->latest_RRC_Version.buf[0] = 0;
560 rrcVer->latest_RRC_Version.bits_unused = 5;
561 DU_ALLOC(rrcVer->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P81_t));
562 if(rrcVer->iE_Extensions == NULLP)
566 rrcVer->iE_Extensions->list.count = 1;
567 rrcVer->iE_Extensions->list.size = sizeof(RRC_Version_ExtIEs_t *);
568 DU_ALLOC(rrcVer->iE_Extensions->list.array,rrcVer->iE_Extensions->list.size);
569 if(rrcVer->iE_Extensions->list.array == NULLP)
574 DU_ALLOC(rrcVer->iE_Extensions->list.array[0],\
575 sizeof(RRC_Version_ExtIEs_t));
576 if(rrcVer->iE_Extensions->list.array[0] == NULLP)
580 rrcVer->iE_Extensions->list.array[rrcExt]->id = \
581 ProtocolIE_ID_id_latest_RRC_Version_Enhanced;
582 rrcVer->iE_Extensions->list.array[rrcExt]->criticality = Criticality_reject;
583 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.present =\
584 RRC_Version_ExtIEs__extensionValue_PR_Latest_RRC_Version_Enhanced;
585 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice\
586 .Latest_RRC_Version_Enhanced.size = 3*sizeof(U8);
587 DU_ALLOC(rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice\
588 .Latest_RRC_Version_Enhanced.buf,rrcVer->iE_Extensions->list.\
589 array[rrcExt]->extensionValue.choice.Latest_RRC_Version_Enhanced.size);
590 if(rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice\
591 .Latest_RRC_Version_Enhanced.buf == NULLP)
596 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice.\
597 Latest_RRC_Version_Enhanced.buf[rrcLatest] = 15;
599 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice.\
600 Latest_RRC_Version_Enhanced.buf[rrcLatest] = 5;
602 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice.\
603 Latest_RRC_Version_Enhanced.buf[rrcLatest] = 0;
606 /*******************************************************************
608 * @brief Sends F1 msg over SCTP
612 * Function : SendF1APMsg
614 * Functionality: Sends F1 msg over SCTP
616 * @params[in] Region region
618 * @return ROK - success
621 * ****************************************************************/
622 S16 SendF1APMsg(Region region, Pool pool)
626 if(SGetMsg(region, pool, &mBuf) == ROK)
628 if(SAddPstMsgMult((Data *)encBuf, encBufSize, mBuf) == ROK)
632 if(sctpSend(mBuf, F1_INTERFACE) != ROK)
634 DU_LOG("\nF1AP : SCTP Send failed");
641 DU_LOG("\nF1AP : SAddPstMsgMult failed");
649 DU_LOG("\nF1AP : Failed to allocate memory");
655 /*******************************************************************
657 * @brief deallocating the memory of function BuildAndSendF1SetupReq()
661 * Function : FreeRrcVer
663 * Functionality: deallocating the memory of function BuildRrcVer
665 * @params[in] RRC_Version_t *rrcVer
669 *****************************************************************/
670 void FreeRrcVer(RRC_Version_t *rrcVer)
672 if(rrcVer->latest_RRC_Version.buf != NULLP)
674 if(rrcVer->iE_Extensions != NULLP)
676 if(rrcVer->iE_Extensions->list.array != NULLP)
678 if(rrcVer->iE_Extensions->list.array[0] != NULLP)
680 if(rrcVer->iE_Extensions->list.array[0]->extensionValue.choice.Latest_RRC_Version_Enhanced.buf
683 DU_FREE(rrcVer->iE_Extensions->list.array[0]->extensionValue.choice\
684 .Latest_RRC_Version_Enhanced.buf,rrcVer->iE_Extensions->list.\
685 array[0]->extensionValue.choice.Latest_RRC_Version_Enhanced.size);
687 DU_FREE(rrcVer->iE_Extensions->list.array[0],sizeof(RRC_Version_ExtIEs_t));
689 DU_FREE(rrcVer->iE_Extensions->list.array,sizeof(RRC_Version_ExtIEs_t*));
691 DU_FREE(rrcVer->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P81_t));
693 DU_FREE(rrcVer->latest_RRC_Version.buf,rrcVer->latest_RRC_Version.size);
696 /*******************************************************************
698 * @brief deallocating the memory of function BuildAndSendF1SetupReq()
702 * Function : FreeServedCellList
704 * Functionality: deallocating the memory of function BuildServedCellList
707 * @params[in] GNB_DU_Served_Cells_List_t *duServedCell
711 * ****************************************************************/
712 void FreeServedCellList( GNB_DU_Served_Cells_List_t *duServedCell)
720 GNB_DU_Served_Cells_Item_t *srvCellItem= &duServedCell->list.array[0]->value.choice.GNB_DU_Served_Cells_Item;
721 if(duServedCell->list.array!=NULLP)
723 if(duServedCell->list.array[0]!=NULLP)
725 if(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf!=NULLP)
727 if(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf !=NULLP)
729 if(srvCellItem->served_Cell_Information.fiveGS_TAC!=NULLP)
731 if(srvCellItem->served_Cell_Information.fiveGS_TAC->buf!=NULLP)
733 if(srvCellItem->served_Cell_Information.servedPLMNs.list.array!=NULLP)
735 if(srvCellItem->served_Cell_Information.servedPLMNs.list.array[0]!=NULLP)
737 if(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->pLMN_Identity.buf!=NULLP)
739 if(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->iE_Extensions!=NULLP)
741 if(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->iE_Extensions->list.array!=NULLP)
743 if(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->iE_Extensions->list.array[0]!=NULLP)
745 if(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->iE_Extensions->list.array[0]->\
746 extensionValue.choice.SliceSupportList.list.array!=NULLP)
748 if(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->iE_Extensions->list.array[0]->\
749 extensionValue.choice.SliceSupportList.list.array[sliceId]!= NULLP)
751 if(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->iE_Extensions->list.array[0]->\
752 extensionValue.choice.SliceSupportList.list.array[sliceId]->sNSSAI.sST.buf!=NULLP)
754 if(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->iE_Extensions->list.array[0]->\
755 extensionValue.choice.SliceSupportList.list.array[sliceId]->sNSSAI.sD!=NULLP)
757 if(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->iE_Extensions->\
758 list.array[0]->extensionValue.choice.SliceSupportList.list.array[sliceId]->sNSSAI.sD->buf!=NULLP)
760 if(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD!=NULLP)
762 if(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->uL_NRFreqInfo.\
763 freqBandListNr.list.array!=NULLP)
765 if(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->uL_NRFreqInfo.\
766 freqBandListNr.list.array[0]!=NULLP)
768 if(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
769 freqBandListNr.list.array)
771 if(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
772 freqBandListNr.list.array[0]!=NULLP)
774 if(srvCellItem->served_Cell_Information.measurementTimingConfiguration.buf!=NULLP)
776 if(!srvCellItem->gNB_DU_System_Information)
778 if(srvCellItem->gNB_DU_System_Information->mIB_message.buf!=NULLP)
780 if(srvCellItem->gNB_DU_System_Information->sIB1_message.buf!=NULLP)
782 DU_FREE(srvCellItem->gNB_DU_System_Information->sIB1_message.buf,\
783 srvCellItem->gNB_DU_System_Information->sIB1_message.size);
784 DU_FREE(duCfgParam.srvdCellLst[0].duSysInfo.sib1Msg,\
785 srvCellItem->gNB_DU_System_Information->sIB1_message.size);
787 DU_FREE(srvCellItem->gNB_DU_System_Information->mIB_message.buf,\
788 srvCellItem->gNB_DU_System_Information->mIB_message.size);
789 DU_FREE(duCfgParam.srvdCellLst[0].duSysInfo.mibMsg,\
790 strlen((char*)duCfgParam.srvdCellLst[0].duSysInfo.mibMsg));
792 DU_FREE(srvCellItem->gNB_DU_System_Information,sizeof(GNB_DU_System_Information_t));
794 DU_FREE(srvCellItem->served_Cell_Information.measurementTimingConfiguration.buf,\
795 srvCellItem->served_Cell_Information.measurementTimingConfiguration.size);
797 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
798 freqBandListNr.list.array[0],sizeof(FreqBandNrItem_t));
800 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
801 freqBandListNr.list.array,sizeof(FreqBandNrItem_t *));
803 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->uL_NRFreqInfo.freqBandListNr.\
804 list.array[0],sizeof(FreqBandNrItem_t));
806 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->uL_NRFreqInfo.freqBandListNr.\
807 list.array,sizeof(FreqBandNrItem_t*));
809 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD,sizeof(FDD_Info_t));
811 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
812 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.list.array[sliceId]->\
813 sNSSAI.sD->buf,srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->iE_Extensions->
814 list.array[ieId]->extensionValue.choice.SliceSupportList.list.array[sliceId]->sNSSAI.sD->size);
816 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
817 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
818 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
820 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
821 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.list.array[sliceId]->\
822 sNSSAI.sST.buf,sizeof(U8));
824 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->iE_Extensions->list.array[0]->\
825 extensionValue.choice.SliceSupportList.list.array[sliceId],sizeof(SliceSupportItem_t));
827 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->iE_Extensions->list.array[0]->\
828 extensionValue.choice.SliceSupportList.list.array,sizeof(SliceSupportItem_t*));
830 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
831 array[servId]->iE_Extensions->list.array[plmnidx],sizeof(ServedPLMNs_ItemExtIEs_t));
833 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
834 array[servId]->iE_Extensions->list.array,\
835 extensionCnt*sizeof(ServedPLMNs_ItemExtIEs_t*));
837 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
838 array[servId]->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P3_t));
840 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
841 array[servId]->pLMN_Identity.buf,srvCellItem->served_Cell_Information.\
842 servedPLMNs.list.array[servId]->pLMN_Identity.size
845 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[plmnidx],\
846 sizeof(ServedPLMNs_Item_t *));
848 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array,\
849 sizeof(ServedPLMNs_Item_t *));
851 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC->buf,\
852 sizeof(srvCellItem->served_Cell_Information.fiveGS_TAC->size));
854 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC,sizeof(FiveGS_TAC_t));
856 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
857 srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size *
860 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
861 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size *
864 DU_FREE(duServedCell->list.array[plmnidx],sizeof(GNB_DU_Served_Cells_ItemIEs_t));
866 DU_FREE(duServedCell->list.array,plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t*));
869 /*******************************************************************
871 * @brief Builds and Send the F1SetupRequest
875 * Function : BuildAndSendF1SetupReq
877 * Functionality:Fills the F1SetupRequest
879 * @return ROK - success
882 ******************************************************************/
883 S16 BuildAndSendF1SetupReq()
885 S16 BuildServedCellListreturn=0;
886 S16 BuildRrcVerreturn=0;
890 F1AP_PDU_t *f1apMsg = NULLP;
891 F1SetupRequest_t *f1SetupReq=NULLP;
892 GNB_DU_Served_Cells_List_t *duServedCell=NULLP;
893 RRC_Version_t *rrcVer=NULLP;
894 asn_enc_rval_t encRetVal; /* Encoder return value */
896 DU_LOG("\nF1AP : Building F1 Setup Request\n");
899 DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t));
904 f1apMsg->present = F1AP_PDU_PR_initiatingMessage;
905 DU_ALLOC(f1apMsg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
906 if(f1apMsg->choice.initiatingMessage == NULLP)
910 f1apMsg->choice.initiatingMessage->procedureCode = ProcedureCode_id_F1Setup;
911 f1apMsg->choice.initiatingMessage->criticality = Criticality_reject;
912 f1apMsg->choice.initiatingMessage->value.present = \
913 InitiatingMessage__value_PR_F1SetupRequest;
915 f1SetupReq = &f1apMsg->choice.initiatingMessage->value.choice.F1SetupRequest;
917 elementCnt = (duCfgParam.duName != NULL) ? 5 : 4;
919 f1SetupReq->protocolIEs.list.count = elementCnt;
920 f1SetupReq->protocolIEs.list.size = elementCnt * sizeof(F1SetupRequestIEs_t );
922 /* Initialize the F1Setup members */
923 DU_ALLOC(f1SetupReq->protocolIEs.list.array,f1SetupReq->protocolIEs.list.size);
924 if(f1SetupReq->protocolIEs.list.array == NULLP)
928 for(idx=0; idx<elementCnt; idx++)
930 DU_ALLOC(f1SetupReq->protocolIEs.list.array[idx],\
931 sizeof(F1SetupRequestIEs_t));
932 if(f1SetupReq->protocolIEs.list.array[idx] == NULLP)
940 f1SetupReq->protocolIEs.list.array[idx2]->id = ProtocolIE_ID_id_TransactionID;
941 f1SetupReq->protocolIEs.list.array[idx2]->criticality = Criticality_reject;
942 f1SetupReq->protocolIEs.list.array[idx2]->value.present =\
943 F1SetupRequestIEs__value_PR_TransactionID;
944 f1SetupReq->protocolIEs.list.array[idx2]->value.choice.TransactionID = \
949 f1SetupReq->protocolIEs.list.array[idx2]->id = ProtocolIE_ID_id_gNB_DU_ID;
950 f1SetupReq->protocolIEs.list.array[idx2]->criticality = Criticality_reject;
951 f1SetupReq->protocolIEs.list.array[idx2]->value.present = \
952 F1SetupRequestIEs__value_PR_GNB_DU_ID;
953 f1SetupReq->protocolIEs.list.array[idx2]->value.choice.GNB_DU_ID.size =\
956 DU_ALLOC(f1SetupReq->protocolIEs.list.array[idx2]->value.choice.GNB_DU_ID.buf,\
957 f1SetupReq->protocolIEs.list.array[idx2]->value.choice.GNB_DU_ID.size);
958 if(f1SetupReq->protocolIEs.list.array[idx2]->value.choice.GNB_DU_ID.buf == \
964 f1SetupReq->protocolIEs.list.array[idx2]->value.choice.GNB_DU_ID.buf[0] =\
968 if(duCfgParam.duName != NULL)
971 f1SetupReq->protocolIEs.list.array[idx2]->id = ProtocolIE_ID_id_gNB_DU_Name ;
972 f1SetupReq->protocolIEs.list.array[idx2]->criticality = Criticality_ignore;
973 f1SetupReq->protocolIEs.list.array[idx2]->value.present = F1SetupRequestIEs__value_PR_GNB_DU_Name;
974 f1SetupReq->protocolIEs.list.array[idx2]->value.choice.GNB_DU_Name.size =\
975 strlen((char *)duCfgParam.duName);
976 DU_ALLOC(f1SetupReq->protocolIEs.list.array[idx2]->value.choice.\
977 GNB_DU_Name.buf, strlen((char *)duCfgParam.duName));
978 if(f1SetupReq->protocolIEs.list.array[idx2]->value.choice.GNB_DU_Name.\
983 strcpy((char*)f1SetupReq->protocolIEs.list.array[idx2]->value.\
984 choice.GNB_DU_Name.buf,
985 (char*)&duCfgParam.duName);
989 /*Served Cell list */
991 f1SetupReq->protocolIEs.list.array[idx2]->id = \
992 ProtocolIE_ID_id_gNB_DU_Served_Cells_List;
993 f1SetupReq->protocolIEs.list.array[idx2]->criticality = Criticality_reject;
994 f1SetupReq->protocolIEs.list.array[idx2]->value.present = \
995 F1SetupRequestIEs__value_PR_GNB_DU_Served_Cells_List;
996 duServedCell = &f1SetupReq->protocolIEs.list.\
997 array[idx2]->value.choice.GNB_DU_Served_Cells_List;
998 BuildServedCellListreturn = BuildServedCellList(duServedCell);
999 if(BuildServedCellListreturn != ROK)
1006 f1SetupReq->protocolIEs.list.array[idx2]->id = \
1007 ProtocolIE_ID_id_GNB_DU_RRC_Version ;
1008 f1SetupReq->protocolIEs.list.array[idx2]->criticality = Criticality_reject;
1009 f1SetupReq->protocolIEs.list.array[idx2]->value.present = \
1010 F1SetupRequestIEs__value_PR_RRC_Version;
1011 rrcVer = &f1SetupReq->protocolIEs.list.array[idx2]->value.choice.RRC_Version;
1012 BuildRrcVerreturn = BuildRrcVer(rrcVer);
1014 if(BuildRrcVerreturn != ROK)
1018 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
1020 /* Encode the F1SetupRequest type as APER */
1021 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
1023 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\
1026 /* Encode results */
1027 if(encRetVal.encoded == ENCODE_FAIL)
1029 DU_LOG("\nF1AP : Could not encode F1SetupRequest structure (at %s)\n",\
1030 encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
1035 DU_LOG("\nF1AP : Created APER encoded buffer for F1SetupRequest\n");
1036 for(i=0; i< encBufSize; i++)
1038 printf("%x",encBuf[i]);
1043 if(SendF1APMsg(DU_APP_MEM_REGION, DU_POOL) != ROK)
1045 DU_LOG("\nF1AP : Sending F1 Setup request failed");
1052 if(f1apMsg != NULLP)
1055 if(f1apMsg->choice.initiatingMessage != NULLP)
1057 if(f1SetupReq->protocolIEs.list.array != NULLP)
1059 if(idx == elementCnt-1)
1061 if(f1SetupReq->protocolIEs.list.array[1]->value.choice.GNB_DU_ID.buf != NULLP)
1063 if(f1SetupReq->protocolIEs.list.array[2]->value.choice.GNB_DU_Name.buf != NULLP)
1065 if(BuildServedCellListreturn == ROK)
1069 FreeServedCellList(duServedCell);
1070 DU_FREE(f1SetupReq->protocolIEs.list.array[2]->value.choice.GNB_DU_Name.buf, strlen((char *)duCfgParam.duName));
1072 DU_FREE(f1SetupReq->protocolIEs.list.array[1]->value.choice.GNB_DU_ID.buf, sizeof(U8));
1074 for(idx=0; idx<elementCnt; idx++)
1076 DU_FREE(f1SetupReq->protocolIEs.list.array[idx],sizeof(F1SetupRequestIEs_t));
1081 for(ieId=0 ; ieId<idx ;ieId++)
1083 if(f1SetupReq->protocolIEs.list.array[ieId]!=NULLP)
1085 DU_FREE(f1SetupReq->protocolIEs.list.array[ieId],\
1086 sizeof(F1SetupRequestIEs_t));
1090 DU_FREE(f1SetupReq->protocolIEs.list.array,\
1091 elementCnt * sizeof(F1SetupRequestIEs_t *));
1093 DU_FREE(f1apMsg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1095 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1102 }/* End of BuildAndSendF1SetupReq */
1104 /*******************************************************************
1106 * @brief Builds and sends the DUConfigUpdate
1110 * Function : BuildAndSendDUConfigUpdate
1112 * Functionality: Constructs the DU Update message and sends
1113 * it to the CU through SCTP.
1115 * @params[in] void **buf,Buffer to which encoded pattern is written into
1116 * @params[in] int *size,size of buffer
1118 * @return ROK - success
1121 * ****************************************************************/
1122 S16 BuildAndSendDUConfigUpdate()
1125 U8 elementCnt,modifyCnt,servPlmnCnt,extensionCnt;
1126 asn_enc_rval_t encRetVal; /* Encoder return value */
1127 F1AP_PDU_t *f1apDuCfg = NULL;
1128 GNBDUConfigurationUpdate_t *duCfgUpdate;
1129 Served_Cells_To_Modify_List_t *cellsToModify;
1130 Served_Cells_To_Modify_Item_t *modifyItem;
1131 DU_LOG("\nF1AP : Building DU config update\n");
1133 /* Allocate the memory for F1DuCfg */
1134 DU_ALLOC(f1apDuCfg, (Size)sizeof(F1AP_PDU_t));
1135 if(f1apDuCfg == NULLP)
1137 DU_LOG("\nF1AP : Memory allocation for F1AP-PDU failed");
1141 f1apDuCfg->present = F1AP_PDU_PR_initiatingMessage;
1142 DU_ALLOC(f1apDuCfg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1143 if(f1apDuCfg->choice.initiatingMessage == NULLP)
1145 DU_LOG("\nF1AP : Memory allocation for F1AP-PDU failed");
1146 DU_FREE(f1apDuCfg, (Size)sizeof(F1AP_PDU_t));
1150 f1apDuCfg->choice.initiatingMessage->procedureCode = \
1151 ProcedureCode_id_gNBDUConfigurationUpdate;
1152 f1apDuCfg->choice.initiatingMessage->criticality = Criticality_reject;
1153 f1apDuCfg->choice.initiatingMessage->value.present = \
1154 InitiatingMessage__value_PR_GNBDUConfigurationUpdate;
1155 duCfgUpdate = &f1apDuCfg->choice.initiatingMessage->value.\
1156 choice.GNBDUConfigurationUpdate;
1159 duCfgUpdate->protocolIEs.list.count = elementCnt;
1160 duCfgUpdate->protocolIEs.list.size = \
1161 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *);
1163 /* Initialize the F1Setup members */
1164 DU_ALLOC(duCfgUpdate->protocolIEs.list.array,\
1165 elementCnt*sizeof(GNBDUConfigurationUpdateIEs_t *));
1166 if(duCfgUpdate->protocolIEs.list.array == NULLP)
1168 DU_LOG("F1AP : Memory allocation for F1RequestIEs failed");
1169 DU_FREE(f1apDuCfg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1170 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1174 for(idx=0;idx<elementCnt;idx++)
1176 DU_ALLOC(duCfgUpdate->protocolIEs.list.array[idx], \
1177 sizeof(GNBDUConfigurationUpdateIEs_t));
1178 if(duCfgUpdate->protocolIEs.list.array[idx] == NULLP)
1180 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1181 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1182 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1183 (Size)sizeof(InitiatingMessage_t));
1184 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1191 duCfgUpdate->protocolIEs.list.array[idx]->id = \
1192 ProtocolIE_ID_id_TransactionID;
1193 duCfgUpdate->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1194 duCfgUpdate->protocolIEs.list.array[idx]->value.present = \
1195 GNBDUConfigurationUpdateIEs__value_PR_TransactionID;
1196 duCfgUpdate->protocolIEs.list.array[idx]->value.choice.TransactionID = \
1199 /*Served Cell to Modify */
1201 duCfgUpdate->protocolIEs.list.array[idx]->id = \
1202 ProtocolIE_ID_id_Served_Cells_To_Modify_List;
1203 duCfgUpdate->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1204 duCfgUpdate->protocolIEs.list.array[idx]->value.present = \
1205 GNBDUConfigurationUpdateIEs__value_PR_Served_Cells_To_Modify_List;
1206 cellsToModify = &duCfgUpdate->protocolIEs.list.array[1]->value.choice.\
1207 Served_Cells_To_Modify_List;
1209 cellsToModify->list.count = modifyCnt;
1210 cellsToModify->list.size = \
1211 modifyCnt*sizeof(Served_Cells_To_Modify_ItemIEs_t *);
1212 DU_ALLOC(cellsToModify->list.array,modifyCnt*\
1213 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
1214 if(cellsToModify->list.array == NULLP)
1216 for(idy=0;idy<elementCnt;idy++)
1218 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1219 sizeof(GNBDUConfigurationUpdateIEs_t));
1221 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1222 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1223 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1224 (Size)sizeof(InitiatingMessage_t));
1225 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1229 for(idy=0; idy<modifyCnt ;idy++)
1231 DU_ALLOC(cellsToModify->list.array[idy],\
1232 sizeof(Served_Cells_To_Modify_ItemIEs_t));
1233 if(cellsToModify->list.array[idy] == NULLP)
1235 DU_FREE(cellsToModify->list.array,modifyCnt*\
1236 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
1237 for(idy=0;idy<elementCnt;idy++)
1239 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1240 sizeof(GNBDUConfigurationUpdateIEs_t));
1242 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1243 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1244 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1245 (Size)sizeof(InitiatingMessage_t));
1246 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1250 cellsToModify->list.array[0]->id = \
1251 ProtocolIE_ID_id_Served_Cells_To_Modify_Item;
1252 cellsToModify->list.array[0]->criticality = Criticality_reject;
1253 cellsToModify->list.array[0]->value.present = \
1254 Served_Cells_To_Modify_ItemIEs__value_PR_Served_Cells_To_Modify_Item;
1255 modifyItem=&cellsToModify->list.array[0]->value.choice.\
1256 Served_Cells_To_Modify_Item;
1259 modifyItem->oldNRCGI.pLMN_Identity.size = 3;
1260 DU_ALLOC(modifyItem->oldNRCGI.pLMN_Identity.buf, 3*sizeof(uint8_t));
1261 if(modifyItem->oldNRCGI.pLMN_Identity.buf == NULLP)
1263 for(idy=0; idy<modifyCnt ;idy++)
1265 DU_FREE(cellsToModify->list.array[idy],\
1266 sizeof(Served_Cells_To_Modify_ItemIEs_t));
1267 DU_FREE(cellsToModify->list.array,modifyCnt*\
1268 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
1269 for(idy=0;idy<elementCnt;idy++)
1271 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1272 sizeof(GNBDUConfigurationUpdateIEs_t));
1274 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1275 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1276 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1277 (Size)sizeof(InitiatingMessage_t));
1278 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1282 buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
1283 &modifyItem->oldNRCGI.pLMN_Identity);
1285 modifyItem->oldNRCGI.nRCellIdentity.size = 5;
1286 DU_ALLOC(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1287 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1288 if(modifyItem->oldNRCGI.nRCellIdentity.buf == NULLP)
1290 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1291 DU_FREE(cellsToModify->list.array[idy],\
1292 sizeof(Served_Cells_To_Modify_ItemIEs_t));
1293 DU_FREE(cellsToModify->list.array,modifyCnt*\
1294 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
1295 for(idy=0;idy<elementCnt;idy++)
1297 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1298 sizeof(GNBDUConfigurationUpdateIEs_t));
1300 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1301 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1302 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1303 (Size)sizeof(InitiatingMessage_t));
1304 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1307 for (int tmp = 0 ; tmp < modifyItem->oldNRCGI.nRCellIdentity.size-1 ; tmp++)
1309 modifyItem->oldNRCGI.nRCellIdentity.buf[tmp] = 0;
1311 modifyItem->oldNRCGI.nRCellIdentity.buf[4] = 16;
1312 modifyItem->oldNRCGI.nRCellIdentity.bits_unused = 4;
1315 modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.size = 3;
1316 DU_ALLOC(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1318 if(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf == NULLP)
1320 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1321 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1322 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1323 DU_FREE(cellsToModify->list.array[idy],\
1324 sizeof(Served_Cells_To_Modify_ItemIEs_t));
1325 DU_FREE(cellsToModify->list.array,modifyCnt*\
1326 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
1327 for(idy=0;idy<elementCnt;idy++)
1329 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1330 sizeof(GNBDUConfigurationUpdateIEs_t));
1332 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1333 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1334 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1335 (Size)sizeof(InitiatingMessage_t));
1336 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1339 buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
1340 &modifyItem->served_Cell_Information.nRCGI.pLMN_Identity);
1341 modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.size = 5;
1342 DU_ALLOC(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1344 if(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf == NULLP)
1346 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1348 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1349 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1350 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1351 DU_FREE(cellsToModify->list.array[idy],\
1352 sizeof(Served_Cells_To_Modify_ItemIEs_t));
1353 DU_FREE(cellsToModify->list.array,modifyCnt*\
1354 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
1355 for(idy=0;idy<elementCnt;idy++)
1357 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1358 sizeof(GNBDUConfigurationUpdateIEs_t));
1360 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1361 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1362 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1363 (Size)sizeof(InitiatingMessage_t));
1364 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1367 for (int tmp = 0 ; tmp < modifyItem->served_Cell_Information.\
1368 nRCGI.nRCellIdentity.size-1 ; tmp++)
1370 modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf[tmp] = 0;
1372 modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf[4] = 16;
1373 modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.bits_unused = 4;
1376 modifyItem->served_Cell_Information.nRPCI = \
1377 duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrPci;
1381 modifyItem->served_Cell_Information.servedPLMNs.list.count = servPlmnCnt;
1382 modifyItem->served_Cell_Information.servedPLMNs.list.size = \
1383 servPlmnCnt*sizeof(ServedPLMNs_Item_t *);
1384 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1385 servPlmnCnt*sizeof(ServedPLMNs_Item_t *));
1386 if(modifyItem->served_Cell_Information.servedPLMNs.list.array == NULLP)
1388 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1390 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1392 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1393 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1394 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1395 DU_FREE(cellsToModify->list.array[idy],\
1396 sizeof(Served_Cells_To_Modify_ItemIEs_t));
1397 DU_FREE(cellsToModify->list.array,modifyCnt*\
1398 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
1399 for(idy=0;idy<elementCnt;idy++)
1401 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1402 sizeof(GNBDUConfigurationUpdateIEs_t));
1404 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1405 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1406 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1407 (Size)sizeof(InitiatingMessage_t));
1408 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1411 for(idy=0;idy<servPlmnCnt;idy++)
1413 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1414 servPlmnCnt*sizeof(ServedPLMNs_Item_t));
1415 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy] == NULLP)
1417 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1418 servPlmnCnt*sizeof(ServedPLMNs_Item_t *));
1419 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1421 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1423 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1424 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1425 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1426 DU_FREE(cellsToModify->list.array[idy],\
1427 sizeof(Served_Cells_To_Modify_ItemIEs_t));
1428 DU_FREE(cellsToModify->list.array,modifyCnt*\
1429 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
1430 for(idy=0;idy<elementCnt;idy++)
1432 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1433 sizeof(GNBDUConfigurationUpdateIEs_t));
1435 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1436 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1437 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1438 (Size)sizeof(InitiatingMessage_t));
1439 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1443 modifyItem->served_Cell_Information.servedPLMNs.list.\
1444 array[0]->pLMN_Identity.size = 3;
1445 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
1446 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1447 if(modifyItem->served_Cell_Information.servedPLMNs.list.\
1448 array[0]->pLMN_Identity.buf == NULLP)
1450 for(idy=0;idy<servPlmnCnt;idy++)
1452 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1453 servPlmnCnt*sizeof(ServedPLMNs_Item_t));
1455 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1456 servPlmnCnt*sizeof(ServedPLMNs_Item_t *));
1457 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1459 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1461 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1462 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1463 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1464 DU_FREE(cellsToModify->list.array[idy],\
1465 sizeof(Served_Cells_To_Modify_ItemIEs_t));
1466 DU_FREE(cellsToModify->list.array,modifyCnt*\
1467 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
1468 for(idy=0;idy<elementCnt;idy++)
1470 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1471 sizeof(GNBDUConfigurationUpdateIEs_t));
1473 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1474 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1475 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1476 (Size)sizeof(InitiatingMessage_t));
1477 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1480 buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.plmn[0],\
1481 &modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->pLMN_Identity);
1482 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
1483 array[0]->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P3_t));
1484 if(modifyItem->served_Cell_Information.servedPLMNs.list.\
1485 array[0]->iE_Extensions == NULLP)
1487 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1488 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1489 for(idy=0;idy<servPlmnCnt;idy++)
1491 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1492 servPlmnCnt*sizeof(ServedPLMNs_Item_t));
1494 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1495 servPlmnCnt*sizeof(ServedPLMNs_Item_t *));
1496 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1498 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1500 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1501 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1502 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1503 DU_FREE(cellsToModify->list.array[idy],\
1504 sizeof(Served_Cells_To_Modify_ItemIEs_t));
1505 DU_FREE(cellsToModify->list.array,modifyCnt*\
1506 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
1507 for(idy=0;idy<elementCnt;idy++)
1509 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1510 sizeof(GNBDUConfigurationUpdateIEs_t));
1512 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1513 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1514 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1515 (Size)sizeof(InitiatingMessage_t));
1516 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1520 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1521 iE_Extensions->list.count = extensionCnt;
1522 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1523 iE_Extensions->list.size = extensionCnt * \
1524 sizeof(ServedPLMNs_ItemExtIEs_t *);
1525 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
1526 array[0]->iE_Extensions->list.array,extensionCnt*\
1527 sizeof(ServedPLMNs_ItemExtIEs_t *));
1528 if(modifyItem->served_Cell_Information.servedPLMNs.list.\
1529 array[0]->iE_Extensions->list.array == NULLP)
1531 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1532 array[0]->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P3_t));
1533 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1534 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1535 for(idy=0;idy<servPlmnCnt;idy++)
1537 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1538 servPlmnCnt*sizeof(ServedPLMNs_Item_t));
1540 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1541 servPlmnCnt*sizeof(ServedPLMNs_Item_t *));
1542 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1544 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1546 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1547 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1548 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1549 DU_FREE(cellsToModify->list.array[idy],\
1550 sizeof(Served_Cells_To_Modify_ItemIEs_t));
1551 DU_FREE(cellsToModify->list.array,modifyCnt*\
1552 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
1553 for(idy=0;idy<elementCnt;idy++)
1555 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1556 sizeof(GNBDUConfigurationUpdateIEs_t));
1558 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1559 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1560 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1561 (Size)sizeof(InitiatingMessage_t));
1562 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1565 for(idy=0;idy<extensionCnt;idy++)
1567 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
1568 array[0]->iE_Extensions->list.array[idy],\
1569 sizeof(ServedPLMNs_ItemExtIEs_t));
1570 if(modifyItem->served_Cell_Information.servedPLMNs.list.\
1571 array[0]->iE_Extensions->list.array[idy] == NULLP)
1573 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1574 array[0]->iE_Extensions->list.array,extensionCnt*\
1575 sizeof(ServedPLMNs_ItemExtIEs_t *));
1576 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1577 array[0]->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P3_t));
1578 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1579 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1580 for(idy=0;idy<servPlmnCnt;idy++)
1582 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1583 servPlmnCnt*sizeof(ServedPLMNs_Item_t));
1585 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1586 servPlmnCnt*sizeof(ServedPLMNs_Item_t *));
1587 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1589 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1591 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1592 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1593 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1594 DU_FREE(cellsToModify->list.array[idy],\
1595 sizeof(Served_Cells_To_Modify_ItemIEs_t));
1596 DU_FREE(cellsToModify->list.array,modifyCnt*\
1597 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
1598 for(idy=0;idy<elementCnt;idy++)
1600 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1601 sizeof(GNBDUConfigurationUpdateIEs_t));
1603 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1604 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1605 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1606 (Size)sizeof(InitiatingMessage_t));
1607 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1611 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1612 iE_Extensions->list.array[0]->id = ProtocolIE_ID_id_TAISliceSupportList;
1613 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1614 iE_Extensions->list.array[0]->criticality = Criticality_ignore;
1615 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1616 iE_Extensions->list.array[0]->extensionValue.present = \
1617 ServedPLMNs_ItemExtIEs__extensionValue_PR_SliceSupportList;
1618 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1619 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1621 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1622 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1623 list.size = sizeof(SliceSupportItem_t *);
1624 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1625 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1626 list.array,sizeof( SliceSupportItem_t *));
1627 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1628 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1629 list.array == NULLP)
1631 for(idy=0;idy<extensionCnt;idy++)
1633 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1634 array[0]->iE_Extensions->list.array[idy],\
1635 sizeof(ServedPLMNs_ItemExtIEs_t));
1637 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1638 array[0]->iE_Extensions->list.array,extensionCnt*\
1639 sizeof(ServedPLMNs_ItemExtIEs_t *));
1640 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1641 array[0]->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P3_t));
1642 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1643 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1644 for(idy=0;idy<servPlmnCnt;idy++)
1646 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1647 servPlmnCnt*sizeof(ServedPLMNs_Item_t));
1649 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1650 servPlmnCnt*sizeof(ServedPLMNs_Item_t *));
1651 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1653 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1655 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1656 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1657 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1658 DU_FREE(cellsToModify->list.array[idy],\
1659 sizeof(Served_Cells_To_Modify_ItemIEs_t));
1660 DU_FREE(cellsToModify->list.array,modifyCnt*\
1661 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
1662 for(idy=0;idy<elementCnt;idy++)
1664 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1665 sizeof(GNBDUConfigurationUpdateIEs_t));
1667 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1668 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1669 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1670 (Size)sizeof(InitiatingMessage_t));
1671 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1674 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1675 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1676 list.array[0],sizeof( SliceSupportItem_t));
1677 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1678 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1679 list.array[0] == NULLP)
1681 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1682 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1683 list.array,sizeof( SliceSupportItem_t *));
1684 for(idy=0;idy<extensionCnt;idy++)
1686 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1687 array[0]->iE_Extensions->list.array[idy],\
1688 sizeof(ServedPLMNs_ItemExtIEs_t));
1690 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1691 array[0]->iE_Extensions->list.array,extensionCnt*\
1692 sizeof(ServedPLMNs_ItemExtIEs_t *));
1693 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1694 array[0]->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P3_t));
1695 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1696 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1697 for(idy=0;idy<servPlmnCnt;idy++)
1699 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1700 servPlmnCnt*sizeof(ServedPLMNs_Item_t));
1702 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1703 servPlmnCnt*sizeof(ServedPLMNs_Item_t *));
1704 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1706 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1708 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1709 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1710 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1711 DU_FREE(cellsToModify->list.array[idy],\
1712 sizeof(Served_Cells_To_Modify_ItemIEs_t));
1713 DU_FREE(cellsToModify->list.array,modifyCnt*\
1714 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
1715 for(idy=0;idy<elementCnt;idy++)
1717 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1718 sizeof(GNBDUConfigurationUpdateIEs_t));
1720 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1721 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1722 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1723 (Size)sizeof(InitiatingMessage_t));
1724 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1727 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1728 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1729 list.array[0]->sNSSAI.sST.size = sizeof(uint8_t);
1730 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1731 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1732 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
1733 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1734 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1735 list.array[0]->sNSSAI.sST.buf == NULLP)
1737 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1738 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1739 list.array[0],sizeof( SliceSupportItem_t));
1740 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1741 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1742 list.array,sizeof( SliceSupportItem_t *));
1743 for(idy=0;idy<extensionCnt;idy++)
1745 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1746 array[0]->iE_Extensions->list.array[idy],\
1747 sizeof(ServedPLMNs_ItemExtIEs_t));
1749 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1750 array[0]->iE_Extensions->list.array,extensionCnt*\
1751 sizeof(ServedPLMNs_ItemExtIEs_t *));
1752 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1753 array[0]->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P3_t));
1754 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1755 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1756 for(idy=0;idy<servPlmnCnt;idy++)
1758 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1759 servPlmnCnt*sizeof(ServedPLMNs_Item_t));
1761 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1762 servPlmnCnt*sizeof(ServedPLMNs_Item_t *));
1763 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1765 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1767 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1768 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1769 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1770 DU_FREE(cellsToModify->list.array[idy],\
1771 sizeof(Served_Cells_To_Modify_ItemIEs_t));
1772 DU_FREE(cellsToModify->list.array,modifyCnt*\
1773 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
1774 for(idy=0;idy<elementCnt;idy++)
1776 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1777 sizeof(GNBDUConfigurationUpdateIEs_t));
1779 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1780 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1781 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1782 (Size)sizeof(InitiatingMessage_t));
1783 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1786 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1787 iE_Extensions->list.array[0]->extensionValue. choice.SliceSupportList.\
1788 list.array[0]->sNSSAI.sST.buf[0] = 3;
1789 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1790 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1791 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
1792 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1793 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1794 list.array[0]->sNSSAI.sD == NULLP)
1796 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1797 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1798 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
1799 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1800 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1801 list.array[0],sizeof( SliceSupportItem_t));
1802 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1803 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1804 list.array,sizeof( SliceSupportItem_t *));
1805 for(idy=0;idy<extensionCnt;idy++)
1807 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1808 array[0]->iE_Extensions->list.array[idy],\
1809 sizeof(ServedPLMNs_ItemExtIEs_t));
1811 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1812 array[0]->iE_Extensions->list.array,extensionCnt*\
1813 sizeof(ServedPLMNs_ItemExtIEs_t *));
1814 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1815 array[0]->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P3_t));
1816 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1817 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1818 for(idy=0;idy<servPlmnCnt;idy++)
1820 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1821 servPlmnCnt*sizeof(ServedPLMNs_Item_t));
1823 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1824 servPlmnCnt*sizeof(ServedPLMNs_Item_t *));
1825 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1827 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1829 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1830 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1831 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1832 DU_FREE(cellsToModify->list.array[idy],\
1833 sizeof(Served_Cells_To_Modify_ItemIEs_t));
1834 DU_FREE(cellsToModify->list.array,modifyCnt*\
1835 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
1836 for(idy=0;idy<elementCnt;idy++)
1838 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1839 sizeof(GNBDUConfigurationUpdateIEs_t));
1841 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1842 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1843 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1844 (Size)sizeof(InitiatingMessage_t));
1845 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1848 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1849 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1850 list.array[0]->sNSSAI.sD->size = 3*sizeof(uint8_t);
1851 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1852 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1853 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
1854 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1855 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1856 list.array[0]->sNSSAI.sD->buf == NULLP)
1858 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1859 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1860 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
1861 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1862 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1863 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
1864 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1865 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1866 list.array[0],sizeof( SliceSupportItem_t));
1867 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1868 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1869 list.array,sizeof( SliceSupportItem_t *));
1870 for(idy=0;idy<extensionCnt;idy++)
1872 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1873 array[0]->iE_Extensions->list.array[idy],\
1874 sizeof(ServedPLMNs_ItemExtIEs_t));
1876 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1877 array[0]->iE_Extensions->list.array,extensionCnt*\
1878 sizeof(ServedPLMNs_ItemExtIEs_t *));
1879 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1880 array[0]->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P3_t));
1881 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1882 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1883 for(idy=0;idy<servPlmnCnt;idy++)
1885 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1886 servPlmnCnt*sizeof(ServedPLMNs_Item_t));
1888 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1889 servPlmnCnt*sizeof(ServedPLMNs_Item_t *));
1890 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1892 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1894 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1895 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1896 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1897 DU_FREE(cellsToModify->list.array[idy],\
1898 sizeof(Served_Cells_To_Modify_ItemIEs_t));
1899 DU_FREE(cellsToModify->list.array,modifyCnt*\
1900 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
1901 for(idy=0;idy<elementCnt;idy++)
1903 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1904 sizeof(GNBDUConfigurationUpdateIEs_t));
1906 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1907 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1908 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1909 (Size)sizeof(InitiatingMessage_t));
1910 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1913 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1914 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1915 list.array[0]->sNSSAI.sD->buf[0] = 3;
1916 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1917 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1918 list.array[0]->sNSSAI.sD->buf[1] = 6;
1919 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1920 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1921 list.array[0]->sNSSAI.sD->buf[2] = 9;
1923 /*nR Mode Info with FDD*/
1924 modifyItem->served_Cell_Information.nR_Mode_Info.present = \
1925 NR_Mode_Info_PR_fDD;
1926 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
1927 sizeof(FDD_Info_t));
1928 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD == NULLP)
1930 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1931 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1932 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
1933 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1934 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1935 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
1936 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1937 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1938 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
1939 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1940 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1941 list.array[0],sizeof( SliceSupportItem_t));
1942 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1943 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1944 list.array,sizeof( SliceSupportItem_t *));
1945 for(idy=0;idy<extensionCnt;idy++)
1947 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1948 array[0]->iE_Extensions->list.array[idy],\
1949 sizeof(ServedPLMNs_ItemExtIEs_t));
1951 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1952 array[0]->iE_Extensions->list.array,extensionCnt*\
1953 sizeof(ServedPLMNs_ItemExtIEs_t *));
1954 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1955 array[0]->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P3_t));
1956 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1957 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1958 for(idy=0;idy<servPlmnCnt;idy++)
1960 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1961 servPlmnCnt*sizeof(ServedPLMNs_Item_t));
1963 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1964 servPlmnCnt*sizeof(ServedPLMNs_Item_t *));
1965 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1967 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1969 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1970 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1971 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1972 DU_FREE(cellsToModify->list.array[idy],\
1973 sizeof(Served_Cells_To_Modify_ItemIEs_t));
1974 DU_FREE(cellsToModify->list.array,modifyCnt*\
1975 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
1976 for(idy=0;idy<elementCnt;idy++)
1978 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1979 sizeof(GNBDUConfigurationUpdateIEs_t));
1981 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1982 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1983 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1984 (Size)sizeof(InitiatingMessage_t));
1985 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1988 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1989 uL_NRFreqInfo.nRARFCN = duCfgParam.srvdCellLst[0].duCellInfo.\
1990 f1Mode.mode.fdd.ulNrFreqInfo.nrArfcn;
1991 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1992 uL_NRFreqInfo.freqBandListNr.list.count = 1;
1993 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1994 uL_NRFreqInfo.freqBandListNr.list.size = \
1995 sizeof(FreqBandNrItem_t *);
1996 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
1997 fDD->uL_NRFreqInfo.freqBandListNr.list.\
1998 array,sizeof(FreqBandNrItem_t *));
1999 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2000 fDD->uL_NRFreqInfo.freqBandListNr.list.array == NULLP)
2002 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2003 sizeof(FDD_Info_t));
2004 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2005 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2006 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2007 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2008 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2009 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2010 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2011 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2012 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2013 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2014 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2015 list.array[0],sizeof( SliceSupportItem_t));
2016 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2017 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2018 list.array,sizeof( SliceSupportItem_t *));
2019 for(idy=0;idy<extensionCnt;idy++)
2021 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2022 array[0]->iE_Extensions->list.array[idy],\
2023 sizeof(ServedPLMNs_ItemExtIEs_t));
2025 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2026 array[0]->iE_Extensions->list.array,extensionCnt*\
2027 sizeof(ServedPLMNs_ItemExtIEs_t *));
2028 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2029 array[0]->iE_Extensions,\
2030 sizeof(ProtocolExtensionContainer_4624P3_t));
2031 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2032 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2033 for(idy=0;idy<servPlmnCnt;idy++)
2035 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2036 servPlmnCnt*sizeof(ServedPLMNs_Item_t));
2038 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2039 servPlmnCnt*sizeof(ServedPLMNs_Item_t *));
2040 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2042 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2044 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2045 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2046 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2047 DU_FREE(cellsToModify->list.array[idy],\
2048 sizeof(Served_Cells_To_Modify_ItemIEs_t));
2049 DU_FREE(cellsToModify->list.array,modifyCnt*\
2050 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
2051 for(idy=0;idy<elementCnt;idy++)
2053 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2054 sizeof(GNBDUConfigurationUpdateIEs_t));
2056 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2057 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2058 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2059 (Size)sizeof(InitiatingMessage_t));
2060 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2063 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2064 uL_NRFreqInfo.freqBandListNr.list.\
2065 array[0],sizeof(FreqBandNrItem_t));
2066 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2067 uL_NRFreqInfo.freqBandListNr.list.\
2070 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2071 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2072 array,sizeof(FreqBandNrItem_t *));
2073 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2074 sizeof(FDD_Info_t));
2075 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2076 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2077 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2078 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2079 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2080 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2081 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2082 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2083 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2084 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2085 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2086 list.array[0],sizeof( SliceSupportItem_t));
2087 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2088 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2089 list.array,sizeof( SliceSupportItem_t *));
2090 for(idy=0;idy<extensionCnt;idy++)
2092 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2093 array[0]->iE_Extensions->list.array[idy],\
2094 sizeof(ServedPLMNs_ItemExtIEs_t));
2096 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2097 array[0]->iE_Extensions->list.array,extensionCnt*\
2098 sizeof(ServedPLMNs_ItemExtIEs_t *));
2099 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2100 array[0]->iE_Extensions,\
2101 sizeof(ProtocolExtensionContainer_4624P3_t));
2102 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2103 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2104 for(idy=0;idy<servPlmnCnt;idy++)
2106 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2107 servPlmnCnt*sizeof(ServedPLMNs_Item_t));
2109 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2110 servPlmnCnt*sizeof(ServedPLMNs_Item_t *));
2111 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2113 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2115 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2116 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2117 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2118 DU_FREE(cellsToModify->list.array[idy],\
2119 sizeof(Served_Cells_To_Modify_ItemIEs_t));
2120 DU_FREE(cellsToModify->list.array,modifyCnt*\
2121 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
2122 for(idy=0;idy<elementCnt;idy++)
2124 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2125 sizeof(GNBDUConfigurationUpdateIEs_t));
2127 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2128 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2129 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2130 (Size)sizeof(InitiatingMessage_t));
2131 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2134 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->uL_NRFreqInfo.\
2135 freqBandListNr.list.array[0]->freqBandIndicatorNr = \
2136 duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.\
2137 freqBand[0].nrFreqBand;
2138 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->uL_NRFreqInfo.\
2139 freqBandListNr.list.array[0]->supportedSULBandList.list.count=0;
2140 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2141 nRARFCN = duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.\
2142 dlNrFreqInfo.nrArfcn;
2143 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2144 freqBandListNr.list.count = 1;
2145 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2146 freqBandListNr.list.size = sizeof(FreqBandNrItem_t *);
2147 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2148 dL_NRFreqInfo.freqBandListNr.list.array,\
2149 sizeof(FreqBandNrItem_t *));
2150 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2151 dL_NRFreqInfo.freqBandListNr.list.array == NULLP)
2153 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2154 uL_NRFreqInfo.freqBandListNr.list.\
2155 array[0],sizeof(FreqBandNrItem_t));
2156 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2157 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2158 array,sizeof(FreqBandNrItem_t *));
2159 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2160 sizeof(FDD_Info_t));
2161 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2162 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2163 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2164 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2165 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2166 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2167 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2168 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2169 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2170 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2171 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2172 list.array[0],sizeof( SliceSupportItem_t));
2173 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2174 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2175 list.array,sizeof( SliceSupportItem_t *));
2176 for(idy=0;idy<extensionCnt;idy++)
2178 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2179 array[0]->iE_Extensions->list.array[idy],\
2180 sizeof(ServedPLMNs_ItemExtIEs_t));
2182 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2183 array[0]->iE_Extensions->list.array,extensionCnt*\
2184 sizeof(ServedPLMNs_ItemExtIEs_t *));
2185 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2186 array[0]->iE_Extensions,\
2187 sizeof(ProtocolExtensionContainer_4624P3_t));
2188 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2189 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2190 for(idy=0;idy<servPlmnCnt;idy++)
2192 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2193 servPlmnCnt*sizeof(ServedPLMNs_Item_t));
2195 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2196 servPlmnCnt*sizeof(ServedPLMNs_Item_t *));
2197 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2199 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2201 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2202 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2203 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2204 DU_FREE(cellsToModify->list.array[idy],\
2205 sizeof(Served_Cells_To_Modify_ItemIEs_t));
2206 DU_FREE(cellsToModify->list.array,modifyCnt*\
2207 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
2208 for(idy=0;idy<elementCnt;idy++)
2210 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2211 sizeof(GNBDUConfigurationUpdateIEs_t));
2213 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2214 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2215 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2216 (Size)sizeof(InitiatingMessage_t));
2217 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2220 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2221 dL_NRFreqInfo.freqBandListNr.list.array[0],\
2222 sizeof(FreqBandNrItem_t));
2223 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2224 dL_NRFreqInfo.freqBandListNr.list.array[0] == NULLP)
2226 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2227 dL_NRFreqInfo.freqBandListNr.list.array,\
2228 sizeof(FreqBandNrItem_t *));
2229 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2230 uL_NRFreqInfo.freqBandListNr.list.\
2231 array[0],sizeof(FreqBandNrItem_t));
2232 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2233 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2234 array,sizeof(FreqBandNrItem_t *));
2235 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2236 sizeof(FDD_Info_t));
2237 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2238 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2239 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2240 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2241 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2242 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2243 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2244 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2245 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2246 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2247 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2248 list.array[0],sizeof( SliceSupportItem_t));
2249 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2250 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2251 list.array,sizeof( SliceSupportItem_t *));
2252 for(idy=0;idy<extensionCnt;idy++)
2254 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2255 array[0]->iE_Extensions->list.array[idy],\
2256 sizeof(ServedPLMNs_ItemExtIEs_t));
2258 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2259 array[0]->iE_Extensions->list.array,extensionCnt*\
2260 sizeof(ServedPLMNs_ItemExtIEs_t *));
2261 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2262 array[0]->iE_Extensions,\
2263 sizeof(ProtocolExtensionContainer_4624P3_t));
2264 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2265 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2266 for(idy=0;idy<servPlmnCnt;idy++)
2268 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2269 servPlmnCnt*sizeof(ServedPLMNs_Item_t));
2271 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2272 servPlmnCnt*sizeof(ServedPLMNs_Item_t *));
2273 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2275 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2277 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2278 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2279 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2280 DU_FREE(cellsToModify->list.array[idy],\
2281 sizeof(Served_Cells_To_Modify_ItemIEs_t));
2282 DU_FREE(cellsToModify->list.array,modifyCnt*\
2283 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
2284 for(idy=0;idy<elementCnt;idy++)
2286 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2287 sizeof(GNBDUConfigurationUpdateIEs_t));
2289 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2290 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2291 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2292 (Size)sizeof(InitiatingMessage_t));
2293 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2296 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2297 freqBandListNr.list.array[0]->freqBandIndicatorNr = \
2298 duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.\
2299 freqBand[0].nrFreqBand;
2300 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2301 freqBandListNr.list.array[0]->supportedSULBandList.list.count=0;
2303 /*Transmission Bandwidth*/
2304 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2305 uL_Transmission_Bandwidth.nRSCS = duCfgParam.srvdCellLst[0].duCellInfo.\
2306 f1Mode.mode.fdd.ulTxBw.nrScs;
2307 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2308 uL_Transmission_Bandwidth.nRNRB = duCfgParam.srvdCellLst[0].duCellInfo.\
2309 f1Mode.mode.fdd.ulTxBw.nrb;
2311 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2312 dL_Transmission_Bandwidth.nRSCS = duCfgParam.srvdCellLst[0].duCellInfo.\
2313 f1Mode.mode.fdd.dlTxBw.nrScs;
2314 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2315 dL_Transmission_Bandwidth.nRNRB = duCfgParam.srvdCellLst[0].duCellInfo.\
2316 f1Mode.mode.fdd.dlTxBw.nrb;
2318 /*Measurement timing Config*/
2319 modifyItem->served_Cell_Information.measurementTimingConfiguration.size = \
2321 DU_ALLOC(modifyItem->served_Cell_Information.measurementTimingConfiguration.\
2322 buf,sizeof(uint8_t));
2323 if(modifyItem->served_Cell_Information.measurementTimingConfiguration.buf == NULLP)
2325 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2326 dL_NRFreqInfo.freqBandListNr.list.array[0],\
2327 sizeof(FreqBandNrItem_t));
2328 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2329 dL_NRFreqInfo.freqBandListNr.list.array,\
2330 sizeof(FreqBandNrItem_t *));
2331 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2332 uL_NRFreqInfo.freqBandListNr.list.\
2333 array[0],sizeof(FreqBandNrItem_t));
2334 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2335 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2336 array,sizeof(FreqBandNrItem_t *));
2337 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2338 sizeof(FDD_Info_t));
2339 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2340 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2341 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2342 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2343 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2344 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2345 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2346 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2347 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2348 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2349 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2350 list.array[0],sizeof( SliceSupportItem_t));
2351 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2352 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2353 list.array,sizeof( SliceSupportItem_t *));
2354 for(idy=0;idy<extensionCnt;idy++)
2356 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2357 array[0]->iE_Extensions->list.array[idy],\
2358 sizeof(ServedPLMNs_ItemExtIEs_t));
2360 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2361 array[0]->iE_Extensions->list.array,extensionCnt*\
2362 sizeof(ServedPLMNs_ItemExtIEs_t *));
2363 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2364 array[0]->iE_Extensions,\
2365 sizeof(ProtocolExtensionContainer_4624P3_t));
2366 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2367 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2368 for(idy=0;idy<servPlmnCnt;idy++)
2370 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2371 servPlmnCnt*sizeof(ServedPLMNs_Item_t));
2373 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2374 servPlmnCnt*sizeof(ServedPLMNs_Item_t *));
2375 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2377 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2379 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2380 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2381 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2382 DU_FREE(cellsToModify->list.array[idy],\
2383 sizeof(Served_Cells_To_Modify_ItemIEs_t));
2384 DU_FREE(cellsToModify->list.array,modifyCnt*\
2385 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
2386 for(idy=0;idy<elementCnt;idy++)
2388 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2389 sizeof(GNBDUConfigurationUpdateIEs_t));
2391 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2392 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2393 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2394 (Size)sizeof(InitiatingMessage_t));
2395 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2398 modifyItem->served_Cell_Information.measurementTimingConfiguration.\
2399 buf[0] = duCfgParam.srvdCellLst[0].duCellInfo.measTimeCfg;
2402 // NOTE :GNB DU SYS INFO:MIB AND SIB1 INFORMATION TO BE BUILT AND FILLED HERE
2404 duCfgUpdate->protocolIEs.list.array[2]->id = ProtocolIE_ID_id_gNB_DU_ID;
2405 duCfgUpdate->protocolIEs.list.array[2]->criticality = Criticality_reject;
2406 duCfgUpdate->protocolIEs.list.array[2]->value.present = \
2407 GNBDUConfigurationUpdateIEs__value_PR_GNB_DU_ID;
2408 duCfgUpdate->protocolIEs.list.array[2]->value.choice.GNB_DU_ID.size = \
2410 DU_ALLOC(duCfgUpdate->protocolIEs.list.array[2]->value.choice.GNB_DU_ID.buf,\
2412 if(duCfgUpdate->protocolIEs.list.array[2]->value.choice.GNB_DU_ID.buf == NULLP)
2414 DU_FREE(modifyItem->served_Cell_Information.measurementTimingConfiguration.\
2415 buf,sizeof(uint8_t));
2416 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2417 dL_NRFreqInfo.freqBandListNr.list.array[0],\
2418 sizeof(FreqBandNrItem_t));
2419 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2420 dL_NRFreqInfo.freqBandListNr.list.array,\
2421 sizeof(FreqBandNrItem_t *));
2422 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2423 uL_NRFreqInfo.freqBandListNr.list.\
2424 array[0],sizeof(FreqBandNrItem_t));
2425 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2426 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2427 array,sizeof(FreqBandNrItem_t *));
2428 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2429 sizeof(FDD_Info_t));
2430 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2431 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2432 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2433 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2434 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2435 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2436 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2437 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2438 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2439 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2440 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2441 list.array[0],sizeof( SliceSupportItem_t));
2442 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2443 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2444 list.array,sizeof( SliceSupportItem_t *));
2445 for(idy=0;idy<extensionCnt;idy++)
2447 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2448 array[0]->iE_Extensions->list.array[idy],\
2449 sizeof(ServedPLMNs_ItemExtIEs_t));
2451 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2452 array[0]->iE_Extensions->list.array,extensionCnt*\
2453 sizeof(ServedPLMNs_ItemExtIEs_t *));
2454 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2455 array[0]->iE_Extensions,\
2456 sizeof(ProtocolExtensionContainer_4624P3_t));
2457 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2458 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2459 for(idy=0;idy<servPlmnCnt;idy++)
2461 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2462 servPlmnCnt*sizeof(ServedPLMNs_Item_t));
2464 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2465 servPlmnCnt*sizeof(ServedPLMNs_Item_t *));
2466 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2468 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2470 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2471 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2472 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2473 DU_FREE(cellsToModify->list.array[idy],\
2474 sizeof(Served_Cells_To_Modify_ItemIEs_t));
2475 DU_FREE(cellsToModify->list.array,modifyCnt*\
2476 sizeof(Served_Cells_To_Modify_ItemIEs_t *));
2477 for(idy=0;idy<elementCnt;idy++)
2479 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2480 sizeof(GNBDUConfigurationUpdateIEs_t));
2482 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2483 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2484 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2485 (Size)sizeof(InitiatingMessage_t));
2486 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2489 duCfgUpdate->protocolIEs.list.array[2]->value.choice.GNB_DU_ID.buf[0] = \
2495 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apDuCfg);
2497 /* Encode the DU Config Update type as APER */
2498 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
2500 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apDuCfg, PrepFinalEncBuf, encBuf);
2503 for(idx=0;idx<elementCnt;idx++)
2505 DU_FREE(duCfgUpdate->protocolIEs.list.array[idx], sizeof(GNBDUConfigurationUpdateIEs_t));
2507 DU_FREE(duCfgUpdate->protocolIEs.list.array, elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2508 DU_FREE(f1apDuCfg->choice.initiatingMessage, (Size)sizeof(InitiatingMessage_t));
2509 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2511 /* Checking encode results */
2512 if(encRetVal.encoded == ENCODE_FAIL)
2514 DU_LOG("F1AP : Could not encode DUConfigUpdate structure (at %s)\n",encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
2519 DU_LOG("\nF1AP : Created APER encoded buffer for DUConfigUpdate\n");
2520 for(int i=0; i< encBufSize; i++)
2522 printf("%x",encBuf[i]);
2527 if(SendF1APMsg(DU_APP_MEM_REGION, DU_POOL) != ROK)
2529 DU_LOG("\nF1AP : Sending GND-DU Config Update failed");
2533 }/* End of BuildAndSendDUConfigUpdate */
2535 /*******************************************************************
2537 * @brief Builds and sends the ULRRCMessageTransfer
2541 * Function : BuildAndSendULRRCMessageTransfer
2543 * Functionality: Constructs the UL RRC Message Transfer and sends
2544 * it to the CU through SCTP.
2548 * @return ROK - success
2551 * ****************************************************************/
2552 S16 BuildAndSendULRRCMessageTransfer()
2557 F1AP_PDU_t *f1apMsg = NULL;
2558 ULRRCMessageTransfer_t *ulRRCMsg;
2559 asn_enc_rval_t encRetVal; /* Encoder return value */
2561 DU_LOG("\n F1AP : Building UL RRC Message Transfer Message\n");
2563 DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t));
2564 if(f1apMsg == NULLP)
2566 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
2570 f1apMsg->present = F1AP_PDU_PR_initiatingMessage;
2571 DU_ALLOC(f1apMsg->choice.initiatingMessage,
2572 sizeof(InitiatingMessage_t));
2573 if(f1apMsg->choice.initiatingMessage == NULLP)
2575 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
2576 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
2580 f1apMsg->choice.initiatingMessage->procedureCode = \
2581 ProcedureCode_id_ULRRCMessageTransfer;
2582 f1apMsg->choice.initiatingMessage->criticality = Criticality_ignore;
2583 f1apMsg->choice.initiatingMessage->value.present = \
2584 InitiatingMessage__value_PR_ULRRCMessageTransfer;
2586 &f1apMsg->choice.initiatingMessage->value.choice.ULRRCMessageTransfer;
2588 ulRRCMsg->protocolIEs.list.count = elementCnt;
2589 ulRRCMsg->protocolIEs.list.size = \
2590 elementCnt * sizeof(ULRRCMessageTransferIEs_t *);
2592 /* Initialize the F1Setup members */
2593 DU_ALLOC(ulRRCMsg->protocolIEs.list.array, \
2594 elementCnt * sizeof(ULRRCMessageTransferIEs_t *));
2595 if(ulRRCMsg->protocolIEs.list.array == NULLP)
2597 DU_LOG(" F1AP : Memory allocation for UL RRC MessageTransferIEs failed");
2598 DU_FREE(f1apMsg->choice.initiatingMessage,
2599 sizeof(InitiatingMessage_t));
2600 DU_FREE(f1apMsg,(Size)sizeof(F1AP_PDU_t));
2604 for(idx=0; idx<elementCnt; idx++)
2606 DU_ALLOC(ulRRCMsg->protocolIEs.list.array[idx],\
2607 sizeof(ULRRCMessageTransferIEs_t));
2608 if(ulRRCMsg->protocolIEs.list.array[idx] == NULLP)
2610 for(ieId=0; ieId<idx; ieId++)
2612 DU_FREE(ulRRCMsg->protocolIEs.list.array[ieId],\
2613 sizeof(ULRRCMessageTransferIEs_t));
2615 DU_FREE(ulRRCMsg->protocolIEs.list.array,\
2616 elementCnt * sizeof(ULRRCMessageTransferIEs_t *));
2617 DU_FREE(f1apMsg->choice.initiatingMessage,\
2618 sizeof(InitiatingMessage_t));
2619 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
2626 /*GNB CU UE F1AP ID*/
2627 ulRRCMsg->protocolIEs.list.array[idx]->id = \
2628 ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID;
2629 ulRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
2630 ulRRCMsg->protocolIEs.list.array[idx]->value.present = \
2631 ULRRCMessageTransferIEs__value_PR_GNB_CU_UE_F1AP_ID;
2632 ulRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_CU_UE_F1AP_ID = CU_ID;
2634 /*GNB DU UE F1AP ID*/
2636 ulRRCMsg->protocolIEs.list.array[idx]->id = \
2637 ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
2638 ulRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
2639 ulRRCMsg->protocolIEs.list.array[idx]->value.present = \
2640 ULRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID;
2641 ulRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID = DU_ID;
2645 ulRRCMsg->protocolIEs.list.array[idx]->id = \
2646 ProtocolIE_ID_id_SRBID;
2647 ulRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
2648 ulRRCMsg->protocolIEs.list.array[idx]->value.present = \
2649 ULRRCMessageTransferIEs__value_PR_SRBID;
2650 ulRRCMsg->protocolIEs.list.array[idx]->value.choice.SRBID = UL_SRBID;
2655 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
2657 /* Encode the F1SetupRequest type as APER */
2658 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
2660 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\
2662 /* Encode results */
2663 if(encRetVal.encoded == ENCODE_FAIL)
2665 DU_LOG( "\n F1AP : Could not encode ULRRCMessageTransfer structure (at %s)\n",\
2666 encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
2671 DU_LOG("\n F1AP : Created APER encoded buffer for ULRRCMessageTransfer\n");
2672 for(int i=0; i< encBufSize; i++)
2674 printf("%x",encBuf[i]);
2679 if(SendF1APMsg(DU_APP_MEM_REGION,DU_POOL) != ROK)
2681 DU_LOG("\n F1AP : Sending UL RRC Message Transfer Failed");
2685 }/* End of BuildAndSendULRRCMessageTransfer*/
2687 /*******************************************************************
2689 * @brief Builds and sends the InitialULRRCMessage
2693 * Function : BuildAndSendRRCSetupReq
2695 * Functionality: Constructs the Initial UL RRC Message Transfer and sends
2696 * it to the CU through SCTP.
2700 * @return ROK - success
2703 * ****************************************************************/
2704 S16 BuildAndSendRRCSetupReq()
2710 F1AP_PDU_t *f1apMsg = NULL;
2711 InitialULRRCMessageTransfer_t *initULRRCMsg;
2712 asn_enc_rval_t encRetVal; /* Encoder return value */
2714 DU_LOG("\n F1AP : Building RRC Setup Request\n");
2716 DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t));
2717 if(f1apMsg == NULLP)
2719 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
2723 f1apMsg->present = F1AP_PDU_PR_initiatingMessage;
2724 DU_ALLOC(f1apMsg->choice.initiatingMessage,sizeof(InitiatingMessage_t));
2725 if(f1apMsg->choice.initiatingMessage == NULLP)
2727 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
2728 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
2732 f1apMsg->choice.initiatingMessage->procedureCode = \
2733 ProcedureCode_id_InitialULRRCMessageTransfer;
2734 f1apMsg->choice.initiatingMessage->criticality = Criticality_ignore;
2735 f1apMsg->choice.initiatingMessage->value.present = \
2736 InitiatingMessage__value_PR_InitialULRRCMessageTransfer;
2738 &f1apMsg->choice.initiatingMessage->value.choice.InitialULRRCMessageTransfer;
2740 initULRRCMsg->protocolIEs.list.count = elementCnt;
2741 initULRRCMsg->protocolIEs.list.size = \
2742 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *);
2744 /* Initialize the F1Setup members */
2745 DU_ALLOC(initULRRCMsg->protocolIEs.list.array, \
2746 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *));
2747 if(initULRRCMsg->protocolIEs.list.array == NULLP)
2749 DU_LOG(" F1AP : Memory allocation for RRCSetupRequestMessageTransferIEs failed");
2750 DU_FREE(f1apMsg->choice.initiatingMessage,
2751 sizeof(InitiatingMessage_t));
2752 DU_FREE(f1apMsg,(Size)sizeof(F1AP_PDU_t));
2756 for(idx=0; idx<elementCnt; idx++)
2758 DU_ALLOC(initULRRCMsg->protocolIEs.list.array[idx],\
2759 sizeof(InitialULRRCMessageTransferIEs_t));
2760 if(initULRRCMsg->protocolIEs.list.array[idx] == NULLP)
2762 for(ieId=0; ieId<idx; ieId++)
2764 DU_FREE(initULRRCMsg->protocolIEs.list.array[ieId],\
2765 sizeof(InitialULRRCMessageTransferIEs_t));
2767 DU_FREE(initULRRCMsg->protocolIEs.list.array,\
2768 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *));
2769 DU_FREE(f1apMsg->choice.initiatingMessage,\
2770 sizeof(InitiatingMessage_t));
2771 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
2778 /*GNB DU UE F1AP ID*/
2779 initULRRCMsg->protocolIEs.list.array[idx]->id = \
2780 ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
2781 initULRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
2782 initULRRCMsg->protocolIEs.list.array[idx]->value.present = \
2783 InitialULRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID;
2784 initULRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID = DU_ID;
2788 initULRRCMsg->protocolIEs.list.array[idx]->id = \
2789 ProtocolIE_ID_id_NRCGI;
2790 initULRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
2791 initULRRCMsg->protocolIEs.list.array[idx]->value.present = \
2792 InitialULRRCMessageTransferIEs__value_PR_NRCGI;
2794 BuildNrcgi(&initULRRCMsg->protocolIEs.list.array[idx]->value.choice.NRCGI);
2797 DU_FREE(initULRRCMsg->protocolIEs.list.array[idx]->value.choice.NRCGI.\
2798 nRCellIdentity.buf,initULRRCMsg->protocolIEs.list.array[idx]->\
2799 value.choice.NRCGI.nRCellIdentity.size);
2800 DU_FREE(initULRRCMsg->protocolIEs.list.array[idx]->value.choice.NRCGI.\
2801 pLMN_Identity.buf,initULRRCMsg->protocolIEs.list.array[idx]->\
2802 value.choice.NRCGI.pLMN_Identity.size);
2803 for(idx=0; idx<elementCnt; idx++)
2805 DU_FREE(initULRRCMsg->protocolIEs.list.array[idx],\
2806 sizeof(InitialULRRCMessageTransferIEs_t));
2808 DU_FREE(initULRRCMsg->protocolIEs.list.array,\
2809 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *));
2810 DU_FREE(f1apMsg->choice.initiatingMessage,\
2811 sizeof(InitiatingMessage_t));
2812 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
2819 initULRRCMsg->protocolIEs.list.array[idx]->id = \
2820 ProtocolIE_ID_id_C_RNTI;
2821 initULRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
2822 initULRRCMsg->protocolIEs.list.array[idx]->value.present = \
2823 InitialULRRCMessageTransferIEs__value_PR_C_RNTI;
2824 initULRRCMsg->protocolIEs.list.array[idx]->value.choice.C_RNTI = CRNTI;
2827 // Need to fill this.
2829 /*DUtoCURRCContainer*/
2830 //Need to fill this too.
2833 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
2835 /* Encode the F1SetupRequest type as APER */
2836 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
2838 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\
2840 /* Encode results */
2841 if(encRetVal.encoded == ENCODE_FAIL)
2843 DU_LOG( "\n F1AP : Could not encode Initial UL RRC Message Transfer structure (at %s)\n",\
2844 encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
2849 DU_LOG("\n F1AP : Created APER encoded buffer for Initial UL RRC Message transfer\n");
2850 for(int i=0; i< encBufSize; i++)
2852 printf("%x",encBuf[i]);
2857 if(SendF1APMsg(DU_APP_MEM_REGION,DU_POOL) != ROK)
2859 DU_LOG("\n F1AP : Sending Initial UL RRC Message Transfer Failed");
2863 }/* End of BuildAndSendRRCSetupReq*/
2865 /*******************************************************************
2867 * @brief Builds Special cell list for UE Setup Request
2871 * Function : BuildSplCellList
2873 * Functionality: Constructs the Special Cell list for UESetReq
2875 * @params[in] SCell_ToBeSetup_List_t *spCellLst
2877 * @return ROK - success
2880 * ****************************************************************/
2881 S16 BuildSplCellList(SCell_ToBeSetup_List_t *spCellLst)
2888 spCellLst->list.count = cellCnt;
2889 spCellLst->list.size = cellCnt * sizeof(SCell_ToBeSetup_ItemIEs_t *);
2890 DU_ALLOC(spCellLst->list.array,spCellLst->list.size);
2891 if(spCellLst->list.array == NULLP)
2895 for(idx=0; idx<cellCnt; idx++)
2897 DU_ALLOC(spCellLst->list.array[idx],sizeof(SCell_ToBeSetup_ItemIEs_t));
2898 if(spCellLst->list.array[idx] == NULLP)
2900 for(cellidx=0; cellidx<idx; cellidx++)
2902 DU_FREE(spCellLst->list.array[cellidx],sizeof(SCell_ToBeSetup_ItemIEs_t));
2904 DU_FREE(spCellLst->list.array,spCellLst->list.size);
2909 spCellLst->list.array[idx]->id = ProtocolIE_ID_id_SCell_ToBeSetup_Item;
2910 spCellLst->list.array[idx]->criticality = Criticality_ignore;
2911 spCellLst->list.array[idx]->value.present =\
2912 SCell_ToBeSetup_ItemIEs__value_PR_SCell_ToBeSetup_Item;
2913 /* Special Cell ID -NRCGI */
2914 ret = BuildNrcgi(&spCellLst->list.array[idx]->value.choice.SCell_ToBeSetup_Item.sCell_ID);
2917 for(cellidx=0; cellidx<cellCnt; cellidx++)
2919 DU_FREE(spCellLst->list.array[cellidx],sizeof(
2920 SCell_ToBeSetup_ItemIEs_t));
2922 DU_FREE(spCellLst->list.array,spCellLst->list.size);
2925 /*Special Cell Index*/
2926 spCellLst->list.array[idx]->value.choice.SCell_ToBeSetup_Item.sCellIndex = 1;
2928 }/* End of BuildSplCellList*/
2930 /*******************************************************************
2932 * @brief Builds SRBS to be setup
2936 * Function : BuildSRBSetup
2938 * Functionality: Constructs the SRB's for UESetReq
2940 * @params[in] SRBs_ToBeSetup_List_t *srbSet
2942 * @return ROK - success
2945 * ****************************************************************/
2946 S16 BuildSRBSetup(SRBs_ToBeSetup_List_t *srbSet)
2952 srbSet->list.count = srbCnt;
2953 srbSet->list.size = srbCnt*sizeof(SRBs_ToBeSetup_ItemIEs_t *);
2954 DU_ALLOC(srbSet->list.array,srbSet->list.size);
2955 if(srbSet->list.array == NULLP)
2959 for(idx=0; idx<srbCnt; idx++)
2961 DU_ALLOC(srbSet->list.array[idx],sizeof(SRBs_ToBeSetup_ItemIEs_t));
2962 if(srbSet->list.array[idx] == NULLP)
2964 for(srbidx=0; srbidx<idx; srbidx++)
2966 DU_FREE(srbSet->list.array[srbidx],sizeof(SRBs_ToBeSetup_ItemIEs_t));
2968 DU_FREE(srbSet->list.array,srbSet->list.size);
2972 srbSet->list.array[idx]->id = ProtocolIE_ID_id_SRBs_ToBeSetup_Item;
2973 srbSet->list.array[idx]->criticality = Criticality_ignore;
2974 srbSet->list.array[idx]->value.present = \
2975 SRBs_ToBeSetup_ItemIEs__value_PR_SRBs_ToBeSetup_Item;
2976 srbSet->list.array[idx]->value.choice.SRBs_ToBeSetup_Item.sRBID = 2;
2978 }/* End of BuildSRBSetup*/
2980 /*******************************************************************
2982 * @brief Builds QOS Info for DRB Setum Item
2986 * Function : BuildQOSInfo
2988 * Functionality: Constructs the QOS Info for DRB Setup Item
2990 * @params[in] QoSInformation_t *qosinfo
2992 * @return ROK - success
2995 * ****************************************************************/
2996 S16 BuildQOSInfo(QoSFlowLevelQoSParameters_t *drbQos)
2998 /* NonDynamic5QIDescriptor */
2999 drbQos->qoS_Characteristics.present = QoS_Characteristics_PR_non_Dynamic_5QI;
3000 DU_ALLOC(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI,sizeof(NonDynamic5QIDescriptor_t));
3001 if(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI == NULLP)
3006 drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->fiveQI = 0;
3008 DU_ALLOC(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
3009 sizeof(AveragingWindow_t));
3010 if(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow == \
3013 DU_FREE(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI,\
3014 sizeof(NonDynamic5QIDescriptor_t));
3017 *(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow) = 0;
3018 /*MaxDataBurstVolume*/
3019 DU_ALLOC(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,\
3020 sizeof(MaxDataBurstVolume_t));
3021 if(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume == \
3024 DU_FREE(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
3025 sizeof(AveragingWindow_t));
3026 DU_FREE(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI,\
3027 sizeof(NonDynamic5QIDescriptor_t));
3030 *(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume) = 0;
3032 /*nRGRAN Allocation Retention Priority*/
3033 drbQos->nGRANallocationRetentionPriority.priorityLevel = \
3034 PriorityLevel_highest;
3035 drbQos->nGRANallocationRetentionPriority.pre_emptionCapability = \
3036 Pre_emptionCapability_may_trigger_pre_emption;
3037 drbQos->nGRANallocationRetentionPriority.pre_emptionVulnerability = \
3038 Pre_emptionVulnerability_not_pre_emptable;
3040 /* TO DO: GBR_QoSFlowInformation */
3042 }/*End of BuildQOSInfo*/
3044 /*******************************************************************
3046 * @brief Builds SNSSAI
3050 * Function : BuildSNSSAI
3052 * Functionality: Constructs the SNSSAI For DRB list
3054 * @params[in] SNSSAI_t *snssai
3056 * @return ROK - success
3059 * ****************************************************************/
3060 S16 BuildSNSSAI(SNSSAI_t *snssai)
3064 snssai->sST.size = sizeof(U8);
3065 DU_ALLOC(snssai->sST.buf,snssai->sST.size);
3066 if(snssai->sST.buf == NULLP)
3070 snssai->sST.buf[0] = 3;
3072 DU_ALLOC(snssai->sD,sizeof(OCTET_STRING_t));
3073 if(snssai->sD == NULLP)
3075 DU_FREE(snssai->sST.buf,snssai->sST.size);
3078 snssai->sD->size = 3*sizeof(U8);
3079 DU_ALLOC(snssai->sD->buf,snssai->sD->size);
3080 if(snssai->sD->buf == NULLP)
3082 DU_FREE(snssai->sD,sizeof(OCTET_STRING_t));
3083 DU_FREE(snssai->sST.buf,snssai->sST.size);
3086 snssai->sD->buf[0] = 3;
3087 snssai->sD->buf[1] = 6;
3088 snssai->sD->buf[2] = 9;
3090 }/*End of BuildSNSSAI*/
3092 /*******************************************************************
3094 * @brief Builds the flow map.
3098 * Function : BuildFlowsMap
3100 * Functionality: Constructs the flowmap For DRB list
3102 * @params[in] Flows_Mapped_To_DRB_List_t *flowMap
3104 * @return ROK - success
3107 * ****************************************************************/
3108 S16 BuildFlowsMap(Flows_Mapped_To_DRB_List_t *flowMap)
3115 flowMap->list.count = flowCnt;
3116 flowMap->list.size = flowCnt * sizeof(Flows_Mapped_To_DRB_Item_t *);
3117 DU_ALLOC(flowMap->list.array,flowMap->list.size);
3118 if(flowMap->list.array == NULLP)
3122 for(idx=0; idx<flowCnt; idx++)
3124 DU_ALLOC(flowMap->list.array[idx],sizeof(Flows_Mapped_To_DRB_Item_t));
3125 if(flowMap->list.array[idx] == NULLP)
3127 for(flowidx=0; flowidx<idx; flowidx++)
3129 DU_FREE(flowMap->list.array[flowidx],sizeof( \
3130 Flows_Mapped_To_DRB_Item_t));
3133 DU_FREE(flowMap->list.array,flowMap->list.size);
3137 flowMap->list.array[idx]->qoSFlowIdentifier = 0;
3138 ret = BuildQOSInfo(&flowMap->list.array[idx]->qoSFlowLevelQoSParameters);
3141 DU_FREE(flowMap->list.array[idx]->qoSFlowLevelQoSParameters.\
3142 qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,\
3143 sizeof(MaxDataBurstVolume_t));
3144 DU_FREE(flowMap->list.array[idx]->qoSFlowLevelQoSParameters.\
3145 qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
3146 sizeof(AveragingWindow_t));
3147 DU_FREE(flowMap->list.array[idx]->qoSFlowLevelQoSParameters.\
3148 qoS_Characteristics.choice.non_Dynamic_5QI,\
3149 sizeof(NonDynamic5QIDescriptor_t));
3150 for(idx=0; idx<flowCnt; idx++)
3152 DU_FREE(flowMap->list.array[idx],sizeof(Flows_Mapped_To_DRB_Item_t));
3154 DU_FREE(flowMap->list.array,flowMap->list.size);
3158 }/*End of BuildFlowsMap*/
3160 /*******************************************************************
3162 * @brief Builds the Uplink Tunnel Info
3166 * Function : BuildULTnlInfo
3168 * Functionality: Constructs the UL TnlInfo For DRB list
3170 * @params[in] ULUPTNLInformation_ToBeSetup_List_t *ulInfo
3172 * @return ROK - success
3175 * ****************************************************************/
3176 S16 BuildULTnlInfo(ULUPTNLInformation_ToBeSetup_List_t *ulInfo)
3182 ulInfo->list.count = ulCnt;
3183 ulInfo->list.size = ulCnt * sizeof(ULUPTNLInformation_ToBeSetup_Item_t *);
3184 DU_ALLOC(ulInfo->list.array,ulInfo->list.size);
3185 if(ulInfo->list.array == NULLP)
3189 for(idx=0; idx<ulCnt; idx++)
3191 DU_ALLOC(ulInfo->list.array[idx],sizeof(ULUPTNLInformation_ToBeSetup_Item_t));
3192 if(ulInfo->list.array[idx] == NULLP)
3194 for(ulidx=0; ulidx<idx; ulidx++)
3196 DU_FREE(ulInfo->list.array[ulidx],sizeof(ULUPTNLInformation_ToBeSetup_Item_t));
3198 DU_FREE(ulInfo->list.array,ulInfo->list.size);
3203 ulInfo->list.array[idx]->uLUPTNLInformation.present = \
3204 UPTransportLayerInformation_PR_gTPTunnel;
3206 DU_ALLOC(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel,\
3207 sizeof(GTPTunnel_t));
3208 if(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel == NULLP)
3210 for(idx=0; idx<ulCnt; idx++)
3212 DU_FREE(ulInfo->list.array[idx],sizeof(ULUPTNLInformation_ToBeSetup_Item_t));
3214 DU_FREE(ulInfo->list.array,ulInfo->list.size);
3217 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3218 transportLayerAddress.size = 4*sizeof(U8);
3219 DU_ALLOC(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3220 transportLayerAddress.buf,ulInfo->list.array[idx]->\
3221 uLUPTNLInformation.choice.gTPTunnel->transportLayerAddress.size);
3222 if(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3223 transportLayerAddress.buf == NULLP)
3225 DU_FREE(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel,\
3226 sizeof(GTPTunnel_t));
3227 for(idx=0; idx<ulCnt; idx++)
3229 DU_FREE(ulInfo->list.array[idx],sizeof(ULUPTNLInformation_ToBeSetup_Item_t));
3231 DU_FREE(ulInfo->list.array,ulInfo->list.size);
3234 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3235 transportLayerAddress.buf[0] = 4;
3236 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3237 transportLayerAddress.buf[1] = 4;
3238 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3239 transportLayerAddress.buf[2] = 4;
3240 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3241 transportLayerAddress.buf[3] = 5;
3242 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3243 transportLayerAddress.bits_unused = 0;
3245 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.size\
3247 DU_ALLOC(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3248 gTP_TEID.buf,ulInfo->list.array[idx]->uLUPTNLInformation.choice.\
3249 gTPTunnel->gTP_TEID.size);
3250 if(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.buf\
3253 DU_FREE(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3254 transportLayerAddress.buf,ulInfo->list.array[idx]->\
3255 uLUPTNLInformation.choice.gTPTunnel->transportLayerAddress.size);
3256 DU_FREE(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel,\
3257 sizeof(GTPTunnel_t));
3258 for(idx=0; idx<ulCnt; idx++)
3260 DU_FREE(ulInfo->list.array[idx],sizeof(ULUPTNLInformation_ToBeSetup_Item_t));
3262 DU_FREE(ulInfo->list.array,ulInfo->list.size);
3265 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3266 gTP_TEID.buf[0] = 11;
3267 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3268 gTP_TEID.buf[1] = 0;
3269 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3270 gTP_TEID.buf[2] = 0;
3271 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3272 gTP_TEID.buf[3] = 1;
3275 }/*End of BuildULTnlInfo*/
3277 /*******************************************************************
3279 * @brief Builds DRBS to be setup
3283 * Function : BuildDRBSetup
3285 * Functionality: Constructs the DRB's for UESetReq
3287 * @params[in] DRBs_ToBeSetup_List_t *drbSet
3289 * @return ROK - success
3292 * ****************************************************************/
3293 S16 BuildDRBSetup(DRBs_ToBeSetup_List_t *drbSet)
3303 DRBs_ToBeSetup_Item_t *drbSetItem;
3305 drbSet->list.count = drbCnt;
3306 drbSet->list.size = drbCnt*sizeof(DRBs_ToBeSetup_ItemIEs_t *);
3307 DU_ALLOC(drbSet->list.array,drbSet->list.size);
3308 if(drbSet->list.array == NULLP)
3312 for(idx=0; idx<drbCnt; idx++)
3314 DU_ALLOC(drbSet->list.array[idx],sizeof(DRBs_ToBeSetup_ItemIEs_t));
3315 if(drbSet->list.array[idx] == NULLP)
3317 for(drbidx=0; drbidx<idx; drbidx++)
3319 DU_FREE(drbSet->list.array[drbidx],sizeof(DRBs_ToBeSetup_ItemIEs_t));
3321 DU_FREE(drbSet->list.array,drbSet->list.size);
3326 drbSet->list.array[idx]->id = ProtocolIE_ID_id_DRBs_ToBeSetup_Item;
3327 drbSet->list.array[idx]->criticality = Criticality_ignore;
3328 drbSet->list.array[idx]->value.present = \
3329 DRBs_ToBeSetup_ItemIEs__value_PR_DRBs_ToBeSetup_Item;
3330 drbSetItem = &drbSet->list.array[idx]->value.choice.DRBs_ToBeSetup_Item;
3332 drbSetItem->dRBID = 1;
3334 drbSetItem->qoSInformation.present = QoSInformation_PR_choice_extension;
3335 DU_ALLOC(drbSetItem->qoSInformation.choice.choice_extension,sizeof(QoSInformation_ExtIEs_t));
3336 if(drbSetItem->qoSInformation.choice.choice_extension == NULLP)
3338 for(idx=0; idx<drbCnt; idx++)
3340 DU_FREE(drbSet->list.array[idx],sizeof(DRBs_ToBeSetup_ItemIEs_t));
3342 DU_FREE(drbSet->list.array,drbSet->list.size);
3345 drbSetItem->qoSInformation.choice.choice_extension->id = \
3346 ProtocolIE_ID_id_DRB_Information;
3347 drbSetItem->qoSInformation.choice.choice_extension->criticality = \
3349 drbSetItem->qoSInformation.choice.choice_extension->value.present = \
3350 QoSInformation_ExtIEs__value_PR_DRB_Information;
3351 ret = BuildQOSInfo(&drbSetItem->qoSInformation.choice.\
3352 choice_extension->value.choice.DRB_Information.dRB_QoS);
3355 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(QoSInformation_ExtIEs_t));
3356 for(drbidx=0; drbidx<drbCnt; drbidx++)
3358 DU_FREE(drbSet->list.array[drbidx],sizeof(DRBs_ToBeSetup_ItemIEs_t));
3360 DU_FREE(drbSet->list.array,drbSet->list.size);
3364 ret = BuildSNSSAI(&drbSetItem->qoSInformation.choice.\
3365 choice_extension->value.choice.DRB_Information.sNSSAI);
3368 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3369 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3370 non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3371 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3372 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3373 non_Dynamic_5QI->maxDataBurstVolume,sizeof(MaxDataBurstVolume_t));
3374 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(QoSInformation_ExtIEs_t));
3375 for(drbidx=0; drbidx<drbCnt; drbidx++)
3377 DU_FREE(drbSet->list.array[drbidx],sizeof(DRBs_ToBeSetup_ItemIEs_t));
3379 DU_FREE(drbSet->list.array,drbSet->list.size);
3382 /*Flows mapped to DRB List*/
3383 ret = BuildFlowsMap(&drbSetItem->qoSInformation.choice.\
3384 choice_extension->value.choice.DRB_Information.flows_Mapped_To_DRB_List);
3387 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3388 choice.DRB_Information.sNSSAI.sD,sizeof(OCTET_STRING_t));
3389 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3390 choice.DRB_Information.sNSSAI.sD->buf,drbSetItem->qoSInformation.\
3391 choice.choice_extension->value.choice.DRB_Information.\
3393 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3394 choice.DRB_Information.sNSSAI.sST.buf,drbSetItem->qoSInformation.\
3395 choice.choice_extension->value.choice.DRB_Information.\
3397 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3398 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3399 non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3400 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3401 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3402 non_Dynamic_5QI->maxDataBurstVolume,sizeof(MaxDataBurstVolume_t));
3403 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(QoSInformation_ExtIEs_t));
3404 for(drbidx=0; drbidx<drbCnt; drbidx++)
3406 DU_FREE(drbSet->list.array[drbidx],sizeof(DRBs_ToBeSetup_ItemIEs_t));
3408 DU_FREE(drbSet->list.array,drbSet->list.size);
3411 /*ULUPTNLInformation To Be Setup List*/
3412 ret = BuildULTnlInfo(&drbSetItem->uLUPTNLInformation_ToBeSetup_List);
3416 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3417 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3418 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3419 choice.non_Dynamic_5QI->maxDataBurstVolume,\
3420 sizeof(MaxDataBurstVolume_t));
3421 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3422 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3423 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3424 choice.non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3425 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3426 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3427 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3428 choice.non_Dynamic_5QI,sizeof(NonDynamic5QIDescriptor_t));
3429 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3430 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3431 array,drbSetItem->qoSInformation.choice.choice_extension->\
3432 value.choice.DRB_Information.flows_Mapped_To_DRB_List.list.size);
3434 for(flowidx=0; flowidx<flowCnt;flowidx++)
3436 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3437 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3438 array[flowidx],sizeof(Flows_Mapped_To_DRB_Item_t));
3440 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3441 choice.DRB_Information.sNSSAI.sD,sizeof(OCTET_STRING_t));
3442 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3443 choice.DRB_Information.sNSSAI.sD->buf,drbSetItem->qoSInformation.\
3444 choice.choice_extension->value.choice.DRB_Information.\
3446 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3447 choice.DRB_Information.sNSSAI.sST.buf,drbSetItem->qoSInformation.\
3448 choice.choice_extension->value.choice.DRB_Information.\
3450 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3451 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3452 non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3453 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3454 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3455 non_Dynamic_5QI->maxDataBurstVolume,sizeof(MaxDataBurstVolume_t));
3456 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(QoSInformation_ExtIEs_t));
3457 for(drbidx=0; drbidx<drbCnt; drbidx++)
3459 DU_FREE(drbSet->list.array[drbidx],sizeof(DRBs_ToBeSetup_ItemIEs_t));
3461 DU_FREE(drbSet->list.array,drbSet->list.size);
3465 drbSetItem->rLCMode = RLCMode_rlc_um_bidirectional;
3467 /*UL Configuration*/
3469 DU_ALLOC(drbSetItem->uLConfiguration,sizeof(ULConfiguration_t));
3470 if(drbSetItem->uLConfiguration == NULLP)
3473 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3474 uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.buf,\
3475 drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3476 uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.size);
3477 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3478 uLUPTNLInformation.choice.gTPTunnel->transportLayerAddress.buf,\
3479 drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3480 uLUPTNLInformation.choice.gTPTunnel->transportLayerAddress.size);
3481 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3482 uLUPTNLInformation.choice.gTPTunnel,sizeof(GTPTunnel_t));
3483 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array,\
3484 drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.size);
3485 for(ulidx=0; ulidx<ulCnt; ulidx++)
3487 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx],\
3488 sizeof(ULUPTNLInformation_ToBeSetup_Item_t));
3491 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3492 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3493 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3494 choice.non_Dynamic_5QI->maxDataBurstVolume,\
3495 sizeof(MaxDataBurstVolume_t));
3496 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3497 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3498 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3499 choice.non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3500 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3501 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3502 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3503 choice.non_Dynamic_5QI,sizeof(NonDynamic5QIDescriptor_t));
3504 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3505 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3506 array,drbSetItem->qoSInformation.choice.choice_extension->value.\
3507 choice.DRB_Information.flows_Mapped_To_DRB_List.list.size);
3509 for(flowidx=0; flowidx<flowCnt;flowidx++)
3511 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3512 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3513 array[flowidx],sizeof(Flows_Mapped_To_DRB_Item_t));
3515 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3516 choice.DRB_Information.sNSSAI.sD,sizeof(OCTET_STRING_t));
3517 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3518 choice.DRB_Information.sNSSAI.sD->buf,drbSetItem->qoSInformation.\
3519 choice.choice_extension->value.choice.DRB_Information.\
3521 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3522 choice.DRB_Information.sNSSAI.sST.buf,drbSetItem->qoSInformation.\
3523 choice.choice_extension->value.choice.DRB_Information.\
3525 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3526 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3527 non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3528 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3529 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3530 non_Dynamic_5QI->maxDataBurstVolume,sizeof(MaxDataBurstVolume_t));
3531 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(QoSInformation_ExtIEs_t));
3532 for(drbidx=0; drbidx<drbCnt; drbidx++)
3534 DU_FREE(drbSet->list.array[drbidx],sizeof(DRBs_ToBeSetup_ItemIEs_t));
3536 DU_FREE(drbSet->list.array,drbSet->list.size);
3539 drbSetItem->uLConfiguration->uLUEConfiguration = ULUEConfiguration_no_data;
3541 }/* End of BuildDRBSetup*/
3543 /*******************************************************************
3545 * @brief Builds and sends the UE Setup Request
3549 * Function : BuildAndSendUESetReq
3551 * Functionality: Constructs the UE Setup Request and sends
3552 * it to the CU through SCTP.
3556 * @return ROK - success
3559 * ****************************************************************/
3560 S16 BuildAndSendUESetReq()
3576 F1AP_PDU_t *f1apMsg = NULL;
3577 UEContextSetupRequest_t *ueSetReq;
3578 asn_enc_rval_t encRetVal; /* Encoder return value */
3580 DU_LOG("\n F1AP : Building UE Context Setup Request\n");
3582 DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t));
3583 if(f1apMsg == NULLP)
3585 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
3589 f1apMsg->present = F1AP_PDU_PR_initiatingMessage;
3590 DU_ALLOC(f1apMsg->choice.initiatingMessage,
3591 sizeof(InitiatingMessage_t));
3592 if(f1apMsg->choice.initiatingMessage == NULLP)
3594 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
3595 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3599 f1apMsg->choice.initiatingMessage->procedureCode = \
3600 ProcedureCode_id_UEContextSetup;
3601 f1apMsg->choice.initiatingMessage->criticality = Criticality_reject;
3602 f1apMsg->choice.initiatingMessage->value.present = \
3603 InitiatingMessage__value_PR_UEContextSetupRequest;
3605 &f1apMsg->choice.initiatingMessage->value.choice.UEContextSetupRequest;
3607 ueSetReq->protocolIEs.list.count = elementCnt;
3608 ueSetReq->protocolIEs.list.size = \
3609 elementCnt * sizeof(UEContextSetupRequestIEs_t *);
3611 /* Initialize the UESetup members */
3612 DU_ALLOC(ueSetReq->protocolIEs.list.array, \
3613 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
3614 if(ueSetReq->protocolIEs.list.array == NULLP)
3616 DU_LOG(" F1AP : Memory allocation for UE Context SetupRequest failed");
3617 DU_FREE(f1apMsg->choice.initiatingMessage,
3618 sizeof(InitiatingMessage_t));
3619 DU_FREE(f1apMsg,(Size)sizeof(F1AP_PDU_t));
3623 for(idx=0; idx<elementCnt; idx++)
3625 DU_ALLOC(ueSetReq->protocolIEs.list.array[idx],\
3626 sizeof(UEContextSetupRequestIEs_t));
3627 if(ueSetReq->protocolIEs.list.array[idx] == NULLP)
3629 for(ieId=0; ieId<idx; ieId++)
3631 DU_FREE(ueSetReq->protocolIEs.list.array[ieId],\
3632 sizeof(UEContextSetupRequestIEs_t));
3634 DU_FREE(ueSetReq->protocolIEs.list.array,\
3635 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
3636 DU_FREE(f1apMsg->choice.initiatingMessage,\
3637 sizeof(InitiatingMessage_t));
3638 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3645 /*GNB CU UE F1AP ID*/
3646 ueSetReq->protocolIEs.list.array[idx]->id = \
3647 ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID;
3648 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3649 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3650 UEContextSetupRequestIEs__value_PR_GNB_CU_UE_F1AP_ID;
3651 ueSetReq->protocolIEs.list.array[idx]->value.choice.GNB_CU_UE_F1AP_ID = CU_ID;
3653 /*GNB DU UE F1AP ID*/
3655 ueSetReq->protocolIEs.list.array[idx]->id = \
3656 ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
3657 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_ignore;
3658 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3659 UEContextSetupRequestIEs__value_PR_GNB_DU_UE_F1AP_ID;
3660 ueSetReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID = DU_ID;
3664 ueSetReq->protocolIEs.list.array[idx]->id = \
3665 ProtocolIE_ID_id_SpCell_ID;
3666 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3667 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3668 UEContextSetupRequestIEs__value_PR_NRCGI;
3670 BuildNrcgi(&ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI);
3674 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
3675 nRCellIdentity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
3676 choice.NRCGI.nRCellIdentity.size));
3677 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
3678 pLMN_Identity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
3679 choice.NRCGI.pLMN_Identity.size));
3680 for(idx=0; idx<elementCnt; idx++)
3682 DU_FREE(ueSetReq->protocolIEs.list.array[idx],\
3683 sizeof(InitialULRRCMessageTransferIEs_t));
3685 DU_FREE(ueSetReq->protocolIEs.list.array,\
3686 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *));
3687 DU_FREE(f1apMsg->choice.initiatingMessage,\
3688 sizeof(InitiatingMessage_t));
3689 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3694 /*Served Cell Index*/
3696 ueSetReq->protocolIEs.list.array[idx]->id = \
3697 ProtocolIE_ID_id_ServCellIndex;
3698 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3699 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3700 UEContextSetupRequestIEs__value_PR_ServCellIndex;
3701 ueSetReq->protocolIEs.list.array[idx]->value.choice.ServCellIndex = \
3704 /*CellULConfigured*/
3706 ueSetReq->protocolIEs.list.array[idx]->id = \
3707 ProtocolIE_ID_id_SpCellULConfigured;
3708 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_ignore;
3709 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3710 UEContextSetupRequestIEs__value_PR_CellULConfigured;
3711 ueSetReq->protocolIEs.list.array[idx]->value.choice.CellULConfigured = \
3712 CellULConfigured_none;
3715 /*CUtoDURRCContainer*/
3717 ueSetReq->protocolIEs.list.array[idx]->id = \
3718 ProtocolIE_ID_id_CUtoDURRCInformation;
3719 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3720 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3721 UEContextSetupRequestIEs__value_PR_CUtoDURRCInformation;
3723 /*Special Cells to be SetupList*/
3725 ueSetReq->protocolIEs.list.array[idx]->id = \
3726 ProtocolIE_ID_id_SCell_ToBeSetup_List;
3727 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_ignore;
3728 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3729 UEContextSetupRequestIEs__value_PR_SCell_ToBeSetup_List;
3731 ret = BuildSplCellList(&ueSetReq->protocolIEs.\
3732 list.array[idx]->value.choice.SCell_ToBeSetup_List);
3735 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3736 SCell_ToBeSetup_List.list.array[0]->value.choice.\
3737 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.buf,\
3738 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3739 SCell_ToBeSetup_List.list.array[0]->value.choice.\
3740 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.size);
3741 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3742 SCell_ToBeSetup_List.list.array[0]->value.choice.\
3743 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.buf,\
3744 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3745 SCell_ToBeSetup_List.list.array[0]->value.choice.\
3746 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.size);
3747 for(spId=0; spId<cellCnt; spId++)
3749 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3750 SCell_ToBeSetup_List.list.array[spId],sizeof(
3751 SCell_ToBeSetup_ItemIEs_t));
3753 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3754 SCell_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
3755 array[idx]->value.choice.SCell_ToBeSetup_List.list.size);
3758 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
3759 nRCellIdentity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
3760 choice.NRCGI.nRCellIdentity.size));
3761 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
3762 pLMN_Identity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
3763 choice.NRCGI.pLMN_Identity.size));
3764 for(idx=0; idx<elementCnt; idx++)
3766 DU_FREE(ueSetReq->protocolIEs.list.array[idx],\
3767 sizeof(UEContextSetupRequestIEs_t));
3769 DU_FREE(ueSetReq->protocolIEs.list.array,\
3770 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
3771 DU_FREE(f1apMsg->choice.initiatingMessage,\
3772 sizeof(InitiatingMessage_t));
3773 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3776 /*SRBs To Be Setup List*/
3778 ueSetReq->protocolIEs.list.array[idx]->id = \
3779 ProtocolIE_ID_id_SRBs_ToBeSetup_List;
3780 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3781 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3782 UEContextSetupRequestIEs__value_PR_SRBs_ToBeSetup_List;
3784 ret = BuildSRBSetup(&ueSetReq->protocolIEs.list.array[idx]->value.\
3785 choice.SRBs_ToBeSetup_List);
3789 for(srbId=0; srbId<srbCnt; srbId++)
3791 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3792 SRBs_ToBeSetup_List.list.array[srbId],\
3793 sizeof(SRBs_ToBeSetup_ItemIEs_t));
3795 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3796 SRBs_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
3797 array[idx]->value.choice.SRBs_ToBeSetup_List.list.size);
3799 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3800 SCell_ToBeSetup_List.list.array[0]->value.choice.\
3801 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.buf,\
3802 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3803 SCell_ToBeSetup_List.list.array[0]->value.choice.\
3804 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.size);
3805 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3806 SCell_ToBeSetup_List.list.array[0]->value.choice.\
3807 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.buf,\
3808 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3809 SCell_ToBeSetup_List.list.array[0]->value.choice.\
3810 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.size);
3811 for(spId=0; spId<cellCnt; spId++)
3813 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3814 SCell_ToBeSetup_List.list.array[spId],sizeof(\
3815 SCell_ToBeSetup_ItemIEs_t));
3817 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3818 SCell_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
3819 array[idx]->value.choice.SCell_ToBeSetup_List.list.size);
3821 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
3822 nRCellIdentity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
3823 choice.NRCGI.nRCellIdentity.size));
3824 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
3825 pLMN_Identity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
3826 choice.NRCGI.pLMN_Identity.size));
3827 for(idx=0; idx<elementCnt; idx++)
3829 DU_FREE(ueSetReq->protocolIEs.list.array[idx],\
3830 sizeof(UEContextSetupRequestIEs_t));
3832 DU_FREE(ueSetReq->protocolIEs.list.array,\
3833 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
3834 DU_FREE(f1apMsg->choice.initiatingMessage,\
3835 sizeof(InitiatingMessage_t));
3836 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3839 /*DRBs to Be Setup List*/
3841 ueSetReq->protocolIEs.list.array[idx]->id = \
3842 ProtocolIE_ID_id_DRBs_ToBeSetup_List;
3843 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3844 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3845 UEContextSetupRequestIEs__value_PR_DRBs_ToBeSetup_List;
3849 ret = BuildDRBSetup(&ueSetReq->protocolIEs.list.array[idx]->value.\
3850 choice.DRBs_ToBeSetup_List);
3853 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3854 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
3855 DRBs_ToBeSetup_Item.uLConfiguration,\
3856 sizeof(ULConfiguration_t));
3858 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3859 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
3860 DRBs_ToBeSetup_Item.uLUPTNLInformation_ToBeSetup_List.list.\
3861 array[ulidx]->uLUPTNLInformation.choice.gTPTunnel,\
3862 sizeof(GTPTunnel_t));
3863 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3864 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
3865 DRBs_ToBeSetup_Item.uLUPTNLInformation_ToBeSetup_List.list.\
3866 array,ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3867 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
3868 DRBs_ToBeSetup_Item.uLUPTNLInformation_ToBeSetup_List.list.size);
3869 for(ulidx=0; ulidx<ulCnt;ulidx++)
3871 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3872 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
3873 DRBs_ToBeSetup_Item.uLUPTNLInformation_ToBeSetup_List.list.\
3874 array[ulidx],sizeof(ULUPTNLInformation_ToBeSetup_Item_t));
3877 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3878 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
3879 DRBs_ToBeSetup_Item.qoSInformation.choice.\
3880 choice_extension->value.choice.DRB_Information.\
3881 flows_Mapped_To_DRB_List.list.array[idx]->qoSFlowLevelQoSParameters.\
3882 qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
3883 sizeof(AveragingWindow_t));
3884 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3885 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
3886 DRBs_ToBeSetup_Item.qoSInformation.choice.\
3887 choice_extension->value.choice.DRB_Information.\
3888 flows_Mapped_To_DRB_List.list.array[idx]->qoSFlowLevelQoSParameters.\
3889 qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,\
3890 sizeof(MaxDataBurstVolume_t));
3891 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3892 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
3893 DRBs_ToBeSetup_Item.qoSInformation.choice.\
3894 choice_extension->value.choice.DRB_Information.\
3895 flows_Mapped_To_DRB_List.list.array,ueSetReq->protocolIEs.list.\
3896 array[idx]->value.choice.\
3897 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
3898 DRBs_ToBeSetup_Item.qoSInformation.choice.\
3899 choice_extension->value.choice.DRB_Information.\
3900 flows_Mapped_To_DRB_List.list.size);
3901 for(flowidx=0;flowidx<flowCnt;flowidx++)
3903 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3904 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
3905 DRBs_ToBeSetup_Item.qoSInformation.choice.\
3906 choice_extension->value.choice.DRB_Information.\
3907 flows_Mapped_To_DRB_List.list.array[flowidx],sizeof(
3908 Flows_Mapped_To_DRB_Item_t));
3910 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3911 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
3912 DRBs_ToBeSetup_Item.qoSInformation.choice.\
3913 choice_extension->value.choice.DRB_Information.sNSSAI.\
3914 sD->buf,ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3915 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
3916 DRBs_ToBeSetup_Item.qoSInformation.choice.\
3917 choice_extension->value.choice.DRB_Information.sNSSAI.\
3919 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3920 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
3921 DRBs_ToBeSetup_Item.qoSInformation.choice.\
3922 choice_extension->value.choice.DRB_Information.sNSSAI.\
3923 sD,sizeof(OCTET_STRING_t));
3924 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3925 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
3926 DRBs_ToBeSetup_Item.qoSInformation.choice.\
3927 choice_extension->value.choice.DRB_Information.sNSSAI.\
3928 sST.buf,ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3929 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
3930 DRBs_ToBeSetup_Item.qoSInformation.choice.\
3931 choice_extension->value.choice.DRB_Information.sNSSAI.\
3933 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3934 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
3935 DRBs_ToBeSetup_Item.qoSInformation.choice.\
3936 choice_extension->value.choice.DRB_Information.dRB_QoS.\
3937 qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,\
3938 sizeof(MaxDataBurstVolume_t));
3939 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3940 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
3941 DRBs_ToBeSetup_Item.qoSInformation.choice.\
3942 choice_extension->value.choice.DRB_Information.dRB_QoS.\
3943 qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
3944 sizeof(AveragingWindow_t));
3945 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3946 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
3947 DRBs_ToBeSetup_Item.qoSInformation.choice.\
3948 choice_extension->value.choice.DRB_Information.dRB_QoS.\
3949 qoS_Characteristics.choice.non_Dynamic_5QI,\
3950 sizeof(NonDynamic5QIDescriptor_t));
3951 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3952 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
3953 DRBs_ToBeSetup_Item.qoSInformation.choice.\
3954 choice_extension,sizeof(QoSInformation_ExtIEs_t));
3955 for(drbId=0; drbId<drbCnt; drbId++)
3957 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3958 DRBs_ToBeSetup_List.list.array[drbId],\
3959 sizeof(DRBs_ToBeSetup_ItemIEs_t));
3961 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3962 DRBs_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
3963 array[idx]->value.choice.DRBs_ToBeSetup_List.list.size);
3965 for(srbId=0; srbId<srbCnt; srbId++)
3967 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3968 SRBs_ToBeSetup_List.list.array[srbId],\
3969 sizeof(SRBs_ToBeSetup_ItemIEs_t));
3971 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3972 SRBs_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
3973 array[idx]->value.choice.SRBs_ToBeSetup_List.list.size);
3975 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3976 SCell_ToBeSetup_List.list.array[0]->value.choice.\
3977 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.buf,\
3978 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3979 SCell_ToBeSetup_List.list.array[0]->value.choice.\
3980 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.size);
3981 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3982 SCell_ToBeSetup_List.list.array[0]->value.choice.\
3983 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.buf,\
3984 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3985 SCell_ToBeSetup_List.list.array[0]->value.choice.\
3986 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.size);
3987 for(spId=0; spId<cellCnt; spId++)
3989 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3990 SCell_ToBeSetup_List.list.array[spId],sizeof(\
3991 SCell_ToBeSetup_ItemIEs_t));
3993 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
3994 SCell_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
3995 array[idx]->value.choice.SCell_ToBeSetup_List.list.size);
3997 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
3998 nRCellIdentity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
3999 choice.NRCGI.nRCellIdentity.size));
4000 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
4001 pLMN_Identity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
4002 choice.NRCGI.pLMN_Identity.size));
4003 for(idx=0; idx<elementCnt; idx++)
4005 DU_FREE(ueSetReq->protocolIEs.list.array[idx],\
4006 sizeof(UEContextSetupRequestIEs_t));
4008 DU_FREE(ueSetReq->protocolIEs.list.array,\
4009 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
4010 DU_FREE(f1apMsg->choice.initiatingMessage,\
4011 sizeof(InitiatingMessage_t));
4012 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
4016 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
4018 /* Encode the F1SetupRequest type as APER */
4019 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
4021 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\
4023 /* Encode results */
4024 if(encRetVal.encoded == ENCODE_FAIL)
4026 DU_LOG( "\n F1AP : Could not encode UE Context Setup Request structure (at %s)\n",\
4027 encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
4032 DU_LOG("\n F1AP : Created APER encoded buffer for UE Context Setup Request\n");
4033 for(int i=0; i< encBufSize; i++)
4035 printf("%x",encBuf[i]);
4040 if(SendF1APMsg(DU_APP_MEM_REGION,DU_POOL) != ROK)
4042 DU_LOG("\n F1AP : Sending UE Context Setup Request Failed");
4046 }/* End of BuildAndSendUESetReq*/
4048 /*******************************************************************
4050 * @brief Handles received F1AP message and sends back response
4054 * Function : F1APMsgHdlr
4057 * - Decodes received F1AP control message
4058 * - Prepares response message, encodes and sends to SCTP
4061 * @return ROK - success
4064 * ****************************************************************/
4065 void F1APMsgHdlr(Buffer *mBuf)
4071 F1AP_PDU_t *f1apMsg;
4072 asn_dec_rval_t rval; /* Decoder return value */
4073 F1AP_PDU_t f1apasnmsg ;
4075 DU_LOG("\nF1AP : Received F1AP message buffer");
4076 SPrntMsg(mBuf, 0,0);
4078 /* Copy mBuf into char array to decode it */
4079 SFndLenMsg(mBuf, &recvBufLen);
4080 if(SGetSBuf(DFLT_REGION, DFLT_POOL, (Data **)&recvBuf, (Size)recvBufLen) != ROK)
4082 DU_LOG("\nF1AP : Memory allocation failed");
4085 if(SCpyMsgFix(mBuf, 0, recvBufLen, (Data *)recvBuf, ©Cnt) != ROK)
4087 DU_LOG("\nF1AP : Failed while copying %d", copyCnt);
4091 printf("\nF1AP : Received flat buffer to be decoded : ");
4092 for(i=0; i< recvBufLen; i++)
4094 printf("%x",recvBuf[i]);
4097 /* Decoding flat buffer into F1AP messsage */
4098 f1apMsg = &f1apasnmsg;
4099 memset(f1apMsg, 0, sizeof(F1AP_PDU_t));
4101 rval = aper_decode(0, &asn_DEF_F1AP_PDU, (void **)&f1apMsg, recvBuf, recvBufLen, 0, 0);
4102 SPutSBuf(DFLT_REGION, DFLT_POOL, (Data *)recvBuf, (Size)recvBufLen);
4103 if(rval.code == RC_FAIL || rval.code == RC_WMORE)
4105 DU_LOG("\nF1AP : ASN decode failed");
4109 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
4111 switch(f1apMsg->present)
4113 case F1AP_PDU_PR_successfulOutcome:
4115 switch(f1apMsg->choice.successfulOutcome->value.present)
4117 case SuccessfulOutcome__value_PR_F1SetupResponse:
4119 #ifndef ODU_TEST_STUB
4120 procF1SetupRsp(f1apMsg);
4125 case SuccessfulOutcome__value_PR_GNBDUConfigurationUpdateAcknowledge:
4127 procGNBDUCfgUpdAck(f1apMsg);
4133 DU_LOG("\nF1AP : Invalid type of successful outcome [%d]", f1apMsg->choice.successfulOutcome->value.present);
4136 }/* End of switch(successfulOutcome) */
4142 DU_LOG("\nF1AP : Invalid type of f1apMsg->present [%d]",f1apMsg->present);
4146 }/* End of switch(f1apMsg->present) */
4148 } /* End of F1APMsgHdlr */
4150 /*******************************************************************
4152 * @brief Processes GNB DU config update ack
4156 * Function : procGNBDUCfgUpdAck
4158 * Functionality: Processes GNB DU config update ack
4160 * @params[in] F1AP_PDU_t ASN decoded F1AP message
4161 * @return ROK - success
4164 * ****************************************************************/
4166 S16 procGNBDUCfgUpdAck(F1AP_PDU_t *f1apMsg)
4170 DU_LOG("\nF1AP : GNB-DU config update acknowledgment received");
4173 /* TODO :Check the deallocation */
4175 SPutSBuf(DU_APP_MEM_REGION,DU_POOL,(Data *)&(gNBDuCfgAck->protocolIEs.list.array),\
4176 (Size)elementCnt * sizeof(GNBDUConfigurationUpdateAcknowledgeIEs_t *));
4177 SPutSBuf(DU_APP_MEM_REGION,DU_POOL,(Data *)&(f1apMsg->choice.successfulOutcome),\
4178 (Size)sizeof(SuccessfulOutcome_t));
4179 SPutSBuf(DU_APP_MEM_REGION,DU_POOL,(Data *)&f1apMsg,(Size)sizeof(F1AP_PDU_t));
4184 /**********************************************************************
4186 **********************************************************************/