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];
29 extern DuCfgParams duCfgParam;
30 S16 sctpSend(Buffer *mBuf, U8 itfType);
31 /*******************************************************************
33 * @brief Builds Uplink Info for NR
37 * Function : BuildULNRInfo
39 * Functionality: Building NR Uplink Info
41 * @params[in] NRFreqInfo_t *ulnrfreq
42 * @return ROK - success
45 * ****************************************************************/
46 S16 BuildULNRInfo(NRFreqInfo_t *ulnrfreq)
50 ulnrfreq->nRARFCN = duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.\
51 fdd.ulNrFreqInfo.nrArfcn;
52 ulnrfreq->freqBandListNr.list.count = 1;
53 ulnrfreq->freqBandListNr.list.size = sizeof(struct FreqBandNrItem *);
54 DU_ALLOC(ulnrfreq->freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
55 if(ulnrfreq->freqBandListNr.list.array == NULLP)
59 DU_ALLOC(ulnrfreq->freqBandListNr.list.array[idx],sizeof(struct FreqBandNrItem));
60 if(ulnrfreq->freqBandListNr.list.array[idx] == NULLP)
62 DU_FREE(ulnrfreq->freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
65 ulnrfreq->freqBandListNr.list.array[idx]->freqBandIndicatorNr = \
66 duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.\
67 freqBand[0].nrFreqBand;
68 ulnrfreq->freqBandListNr.list.array[idx]->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(struct FreqBandNrItem *);
93 DU_ALLOC(dlnrfreq->freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
94 if(dlnrfreq->freqBandListNr.list.array == NULLP)
98 DU_ALLOC(dlnrfreq->freqBandListNr.list.array[idx],sizeof(struct FreqBandNrItem));
99 if(dlnrfreq->freqBandListNr.list.array[idx] == NULLP)
101 DU_FREE(dlnrfreq->freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
104 dlnrfreq->freqBandListNr.list.array[idx]->freqBandIndicatorNr = \
105 duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.\
106 freqBand[0].nrFreqBand;
107 dlnrfreq->freqBandListNr.list.array[idx]->supportedSULBandList.list.count = SUL_BAND_COUNT;
111 /*******************************************************************
113 * @brief Builds Nrcgi
117 * Function : BuildNrcgi
119 * Functionality: Building the PLMN ID and NR Cell id
121 * @params[in] NRCGI_t *nrcgi
122 * @return ROK - success
125 * ****************************************************************/
126 S16 BuildNrcgi(NRCGI_t *nrcgi)
133 /* Allocate Buffer Memory */
134 nrcgi->pLMN_Identity.size = PLMN_SIZE * sizeof(U8);
135 DU_ALLOC(nrcgi->pLMN_Identity.buf, nrcgi->pLMN_Identity.size);
136 ret = buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
137 &nrcgi->pLMN_Identity); // Building PLMN function
143 //ret = BuildNrCellId(&nrcgi->nRCellIdentity);
144 nrcgi->nRCellIdentity.size = byteSize * sizeof(U8);
145 DU_ALLOC(nrcgi->nRCellIdentity.buf, nrcgi->nRCellIdentity.size);
146 if(nrcgi->nRCellIdentity.buf == NULLP)
150 ret = fillBitString(&nrcgi->nRCellIdentity, unused, byteSize, val);
154 DU_FREE(nrcgi->nRCellIdentity.buf, nrcgi->nRCellIdentity.size);
160 /*******************************************************************
162 * @brief Builds FiveGStac
166 * Function : BuildFiveGSTac
168 * Functionality: Building the FiveGSTac
170 * @params[in] OCTET_STRING_t *fivegsTac
171 * @return ROK - success
174 * ****************************************************************/
175 S16 BuildFiveGSTac(Served_Cell_Information_t *servcell)
177 DU_ALLOC(servcell->fiveGS_TAC,sizeof(FiveGS_TAC_t));
178 if(servcell->fiveGS_TAC == NULLP)
182 servcell->fiveGS_TAC->size = 3 * sizeof(U8);
183 DU_ALLOC(servcell->fiveGS_TAC->buf,\
184 sizeof(servcell->fiveGS_TAC->size));
185 if(servcell->fiveGS_TAC->buf == NULLP)
187 DU_FREE(servcell->fiveGS_TAC,sizeof(FiveGS_TAC_t));
190 servcell->fiveGS_TAC->buf[0] = 0;
191 servcell->fiveGS_TAC->buf[1] = 0;
192 servcell->fiveGS_TAC->buf[2] = duCfgParam.srvdCellLst[0].duCellInfo.tac;
195 /*******************************************************************
197 * @brief Builds NR Mode
201 * Function : BuildNrMode
203 * Functionality: Building the NR Mode
205 * @params[in] NR_Mode_Info_t *fdd
206 * @return ROK - success
209 * ****************************************************************/
210 S16 BuildNrMode(NR_Mode_Info_t *mode)
214 mode->present = NR_Mode_Info_PR_fDD;
215 if(mode->present == NR_Mode_Info_PR_fDD)
217 DU_ALLOC(mode->choice.fDD,\
219 if(mode->choice.fDD == NULLP)
223 ret = BuildULNRInfo(&mode->choice.fDD->uL_NRFreqInfo);
226 DU_FREE(mode->choice.fDD,\
230 ret = BuildDLNRInfo(&mode->choice.fDD->dL_NRFreqInfo);
233 DU_FREE(mode->choice.fDD,\
235 DU_FREE(mode->choice.fDD->uL_NRFreqInfo.\
236 freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
237 DU_FREE(mode->choice.fDD->uL_NRFreqInfo.\
238 freqBandListNr.list.array[0],sizeof(struct FreqBandNrItem));
242 mode->choice.fDD->uL_Transmission_Bandwidth.nRSCS = \
243 duCfgParam.srvdCellLst[0].duCellInfo.\
244 f1Mode.mode.fdd.ulTxBw.nrScs;
245 mode->choice.fDD->uL_Transmission_Bandwidth.nRNRB = \
246 duCfgParam.srvdCellLst[0].duCellInfo.\
247 f1Mode.mode.fdd.ulTxBw.nrb;
249 mode->choice.fDD->dL_Transmission_Bandwidth.nRSCS = \
250 duCfgParam.srvdCellLst[0].duCellInfo.\
251 f1Mode.mode.fdd.dlTxBw.nrScs;
252 mode->choice.fDD->dL_Transmission_Bandwidth.nRNRB = \
253 duCfgParam.srvdCellLst[0].duCellInfo.\
254 f1Mode.mode.fdd.dlTxBw.nrb;
257 /*******************************************************************
259 * @brief Builds IE Extensions for Served PLMNs
263 * Function : BuildExtensions
265 * Functionality: Building the IE Extensions
267 * @params[in] struct ProtocolExtensionContainer_4624P3 *buildextend
268 * @return ROK - success
271 * ****************************************************************/
272 S16 BuildExtensions(struct ProtocolExtensionContainer_4624P3 **ieExtend)
281 sizeof(struct ProtocolExtensionContainer_4624P3));
282 if((*ieExtend) == NULLP)
286 (*ieExtend)->list.count = extensionCnt;
287 (*ieExtend)->list.size = \
288 extensionCnt * sizeof(struct ServedPLMNs_ItemExtIEs *);
289 DU_ALLOC((*ieExtend)->list.array,\
290 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
291 if((*ieExtend)->list.array == NULLP)
293 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
296 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
298 DU_ALLOC((*ieExtend)->list.array[plmnidx],\
299 sizeof(struct ServedPLMNs_ItemExtIEs));
300 if((*ieExtend)->list.array[plmnidx] == NULLP)
302 for(extensionId=0 ; extensionId<plmnidx; extensionId++)
304 DU_FREE((*ieExtend)->list.array[extensionId],\
305 sizeof(struct ServedPLMNs_ItemExtIEs));
307 DU_FREE((*ieExtend)->list.array,\
308 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
309 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
314 (*ieExtend)->list.array[idx]->id = ProtocolIE_ID_id_TAISliceSupportList;
315 (*ieExtend)->list.array[idx]->criticality = Criticality_ignore;
316 (*ieExtend)->list.array[idx]->extensionValue.present = \
317 ServedPLMNs_ItemExtIEs__extensionValue_PR_SliceSupportList;
318 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
320 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
321 list.size = sizeof(SliceSupportItem_t *);
322 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
323 list.array,sizeof(SliceSupportItem_t *));
324 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
327 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
329 DU_FREE((*ieExtend)->list.array[plmnidx],\
330 sizeof(struct ServedPLMNs_ItemExtIEs));
332 DU_FREE((*ieExtend)->list.array,\
333 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
334 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
339 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
340 list.array[sliceId],sizeof(SliceSupportItem_t));
341 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
342 list.array[sliceId] == NULLP)
344 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
345 list.array,sizeof(SliceSupportItem_t *));
346 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
348 DU_FREE((*ieExtend)->list.array[plmnidx],\
349 sizeof(struct ServedPLMNs_ItemExtIEs));
351 DU_FREE((*ieExtend)->list.array,\
352 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
353 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
357 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
358 list.array[sliceId]->sNSSAI.sST.size = sizeof(U8);
359 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList\
360 .list.array[sliceId]->sNSSAI.sST.buf,(*ieExtend)->list.array[idx]->\
361 extensionValue.choice.SliceSupportList.\
362 list.array[sliceId]->sNSSAI.sST.size);
363 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList\
364 .list.array[sliceId]->sNSSAI.sST.buf == NULLP)
366 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
367 list.array[sliceId],sizeof(SliceSupportItem_t));
368 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
369 list.array,sizeof(SliceSupportItem_t *));
370 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
372 DU_FREE((*ieExtend)->list.array[plmnidx],\
373 sizeof(struct ServedPLMNs_ItemExtIEs));
375 DU_FREE((*ieExtend)->list.array,\
376 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
377 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
380 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
381 list.array[sliceId]->sNSSAI.sST.buf[0] = 3;
382 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
383 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
384 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
385 list.array[sliceId]->sNSSAI.sD == NULLP)
387 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList\
388 .list.array[sliceId]->sNSSAI.sST.buf,(*ieExtend)->list.array[idx]->\
389 extensionValue.choice.SliceSupportList.list.array[sliceId]->sNSSAI.sST.size);
390 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
391 list.array[sliceId],sizeof(SliceSupportItem_t));
392 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
393 list.array,sizeof(SliceSupportItem_t *));
394 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
396 DU_FREE((*ieExtend)->list.array[plmnidx],\
397 sizeof(struct ServedPLMNs_ItemExtIEs));
399 DU_FREE((*ieExtend)->list.array,\
400 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
401 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
404 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
405 list.array[sliceId]->sNSSAI.sD->size = 3*sizeof(U8);
406 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
407 list.array[sliceId]->sNSSAI.sD->buf,(*ieExtend)->list.array[idx]->extensionValue.choice.\
408 SliceSupportList.list.array[sliceId]->sNSSAI.sD->size);
409 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
410 list.array[sliceId]->sNSSAI.sD->buf == NULLP)
412 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
413 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
414 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList\
415 .list.array[sliceId]->sNSSAI.sST.buf,(*ieExtend)->list.array[idx]->extensionValue.\
416 choice.SliceSupportList.list.array[sliceId]->sNSSAI.sST.size);
417 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
418 list.array[sliceId],sizeof(SliceSupportItem_t));
419 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
420 list.array,sizeof(SliceSupportItem_t *));
421 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
423 DU_FREE((*ieExtend)->list.array[plmnidx],\
424 sizeof(struct ServedPLMNs_ItemExtIEs));
426 DU_FREE((*ieExtend)->list.array,\
427 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
428 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
432 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
433 list.array[sliceId]->sNSSAI.sD->buf[sdId] = 3;
435 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
436 list.array[sliceId]->sNSSAI.sD->buf[sdId] = 6;
438 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
439 list.array[sliceId]->sNSSAI.sD->buf[sdId] = 9;
442 /*******************************************************************
444 * @brief Builds Served PLMN
448 * Function : BuildServedPlmn
450 * Functionality: Building the Served PLMN
452 * @params[in] GNB_DU_Served_Cells_Item_t *srvCellItem
453 * @return ROK - success
456 * ****************************************************************/
457 S16 BuildServedPlmn(ServedPLMNs_List_t *srvplmn)
463 srvplmn->list.count = servPlmnCnt;
464 srvplmn->list.size = \
465 servPlmnCnt*sizeof(struct ServedPLMNs_Item *);
466 DU_ALLOC(srvplmn->list.array,\
467 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
468 if(srvplmn->list.array == NULLP)
473 for(plmnidx=0; plmnidx<servPlmnCnt; plmnidx++)
475 DU_ALLOC(srvplmn->list.array[plmnidx],\
476 sizeof(struct ServedPLMNs_Item));
477 if(srvplmn->list.array[plmnidx] == NULLP)
479 for(servPlmnid=0; servPlmnid<plmnidx;servPlmnid++)
481 DU_FREE(srvplmn->list.array[servPlmnid],\
482 sizeof(struct ServedPLMNs_Item));
484 DU_FREE(srvplmn->list.array,\
485 sizeof(struct ServedPLMNs_Item *));
489 /* Allocate Memory to Buffer */
490 srvplmn->list.array[0]->pLMN_Identity.size = PLMN_SIZE * sizeof(U8);
491 DU_ALLOC(srvplmn->list.array[0]->pLMN_Identity.buf, srvplmn->list.array[0]->pLMN_Identity.size);
492 ret = buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
493 &srvplmn->list.array[0]->pLMN_Identity);
496 for(plmnidx=0; plmnidx<servPlmnCnt; plmnidx++)
498 DU_FREE(srvplmn->list.array[plmnidx],\
499 sizeof(struct ServedPLMNs_Item *));
501 DU_FREE(srvplmn->list.array,\
502 sizeof(struct ServedPLMNs_Item *));
505 ret = BuildExtensions(&srvplmn->list.array[0]->iE_Extensions);
508 DU_FREE(srvplmn->list.\
509 array[0]->pLMN_Identity.buf,(Size)\
510 srvplmn->list.array[0]->pLMN_Identity.size * sizeof(U8));
511 for(plmnidx=0; plmnidx<servPlmnCnt; plmnidx++)
513 DU_FREE(srvplmn->list.array[plmnidx],\
514 sizeof(struct ServedPLMNs_Item *));
516 DU_FREE(srvplmn->list.array,\
517 sizeof(struct ServedPLMNs_Item *));
522 /*******************************************************************
524 * @brief Builds Served Cell List
528 * Function : BuildServedCellList
530 * Functionality: Building Served Cell List
532 * @params[in] PLMNID plmn
533 * @return ROK - success
536 * ****************************************************************/
538 S16 BuildServedCellList(GNB_DU_Served_Cells_List_t *duServedCell)
550 GNB_DU_Served_Cells_Item_t *srvCellItem;
552 duServedCell->list.size = plmnCnt * sizeof(GNB_DU_Served_Cells_ItemIEs_t *);
553 duServedCell->list.count = plmnCnt;
554 DU_ALLOC(duServedCell->list.array, plmnCnt * sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
555 if(duServedCell->list.array == NULLP)
559 for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
561 DU_ALLOC(duServedCell->list.array[plmnidx],\
562 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
563 if(duServedCell->list.array[plmnidx] == NULLP)
565 for(plmnId=0; plmnId<plmnidx ; plmnId++)
567 DU_FREE(duServedCell->list.array[plmnId],sizeof(GNB_DU_Served_Cells_ItemIEs_t));
569 DU_FREE(duServedCell->list.array,\
570 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
575 duServedCell->list.array[idx]->id = ProtocolIE_ID_id_GNB_DU_Served_Cells_Item;
576 duServedCell->list.array[idx]->criticality = Criticality_reject;
577 duServedCell->list.array[idx]->value.present = \
578 GNB_DU_Served_Cells_ItemIEs__value_PR_GNB_DU_Served_Cells_Item;
580 &duServedCell->list.array[idx]->value.choice.GNB_DU_Served_Cells_Item;
582 ret = BuildNrcgi(&srvCellItem->served_Cell_Information.nRCGI);
585 for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
587 DU_FREE(duServedCell->list.array[plmnidx],\
588 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
590 DU_FREE(duServedCell->list.array,\
591 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
596 srvCellItem->served_Cell_Information.nRPCI = \
597 duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrPci;
600 ret = BuildFiveGSTac(&srvCellItem->served_Cell_Information);
603 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
604 srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size * sizeof(U8));
605 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
606 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
607 for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
609 DU_FREE(duServedCell->list.array[plmnidx],\
610 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
612 DU_FREE(duServedCell->list.array,\
613 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
617 ret = BuildServedPlmn(&srvCellItem->served_Cell_Information.servedPLMNs);
620 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC->buf,\
621 sizeof(srvCellItem->served_Cell_Information.fiveGS_TAC->size));
622 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC,\
623 sizeof(FiveGS_TAC_t));
624 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
625 srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size * sizeof(U8));
626 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
627 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
628 for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
630 DU_FREE(duServedCell->list.array[plmnidx],\
631 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
633 DU_FREE(duServedCell->list.array,\
634 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
637 /*nR Mode Info with FDD*/
638 ret = BuildNrMode(&srvCellItem->served_Cell_Information.nR_Mode_Info);
644 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
645 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
646 list.array[sliceId]->sNSSAI.sD->buf, srvCellItem->served_Cell_Information.servedPLMNs.\
647 list.array[servId]->iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
648 list.array[sliceId]->sNSSAI.sD->size);
649 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
650 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
651 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
652 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
653 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList\
654 .list.array[sliceId]->sNSSAI.sST.buf,sizeof(U8));
655 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
656 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
657 list.array[sliceId],sizeof(SliceSupportItem_t));
658 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
659 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
660 list.array,sizeof(SliceSupportItem_t *));
661 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
663 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
664 array[servId]->iE_Extensions->list.array[plmnidx],\
665 sizeof(struct ServedPLMNs_ItemExtIEs));
667 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
668 array[servId]->iE_Extensions->list.array,\
669 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
670 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
671 array[servId]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
672 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
673 array[servId]->pLMN_Identity.buf,srvCellItem->served_Cell_Information.\
674 servedPLMNs.list.array[servId]->pLMN_Identity.size * sizeof(U8));
675 for(plmnidx=0; plmnidx<servPlmnCnt; plmnidx++)
677 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[plmnidx],\
678 sizeof(struct ServedPLMNs_Item *));
680 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array,\
681 sizeof(struct ServedPLMNs_Item *));
682 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC->buf,\
683 sizeof(srvCellItem->served_Cell_Information.fiveGS_TAC->size));
684 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC,\
685 sizeof(FiveGS_TAC_t));
686 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
687 srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size * sizeof(U8));
688 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
689 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
690 for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
692 DU_FREE(duServedCell->list.array[plmnidx],\
693 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
695 DU_FREE(duServedCell->list.array,\
696 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
701 /*Measurement timing Config*/
702 srvCellItem->served_Cell_Information.measurementTimingConfiguration.\
704 DU_ALLOC(srvCellItem->served_Cell_Information.\
705 measurementTimingConfiguration.buf,sizeof(U8));
706 if(srvCellItem->served_Cell_Information.\
707 measurementTimingConfiguration.buf == NULLP)
709 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
710 dL_NRFreqInfo.freqBandListNr.list.array[0],\
711 sizeof(struct FreqBandNrItem));
712 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
713 dL_NRFreqInfo.freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
714 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.\
715 fDD->uL_NRFreqInfo.freqBandListNr.list.array[0],\
716 sizeof(struct FreqBandNrItem));
717 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
718 uL_NRFreqInfo.freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
719 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
721 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
722 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
723 list.array[sliceId]->sNSSAI.sD->buf,srvCellItem->served_Cell_Information.servedPLMNs.\
724 list.array[servId]->iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
725 list.array[sliceId]->sNSSAI.sD->size);
726 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
727 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
728 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
729 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
730 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList\
731 .list.array[sliceId]->sNSSAI.sST.buf,sizeof(U8));
732 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
733 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
734 list.array[sliceId],sizeof(SliceSupportItem_t));
735 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
736 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
737 list.array,sizeof(SliceSupportItem_t *));
738 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
740 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
741 array[servId]->iE_Extensions->list.array[plmnidx],\
742 sizeof(struct ServedPLMNs_ItemExtIEs));
744 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
745 array[servId]->iE_Extensions->list.array,\
746 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
747 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
748 array[servId]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
749 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
750 array[servId]->pLMN_Identity.buf,srvCellItem->served_Cell_Information.\
751 servedPLMNs.list.array[servId]->pLMN_Identity.size * sizeof(U8));
752 for(plmnidx=0; plmnidx<servPlmnCnt; plmnidx++)
754 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[plmnidx],\
755 sizeof(struct ServedPLMNs_Item *));
757 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array,\
758 sizeof(struct ServedPLMNs_Item *));
759 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC->buf,\
760 sizeof(srvCellItem->served_Cell_Information.fiveGS_TAC->size));
761 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC,\
762 sizeof(FiveGS_TAC_t));
763 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
764 srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size * sizeof(U8));
765 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
766 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
767 for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
769 DU_FREE(duServedCell->list.array[plmnidx],\
770 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
772 DU_FREE(duServedCell->list.array,\
773 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
776 srvCellItem->served_Cell_Information.measurementTimingConfiguration.buf[0] = \
777 duCfgParam.srvdCellLst[0].duCellInfo.measTimeCfg;
779 /* GNB DU System Information */
780 DU_ALLOC(srvCellItem->gNB_DU_System_Information,
781 sizeof(GNB_DU_System_Information_t));
782 if(!srvCellItem->gNB_DU_System_Information)
784 DU_LOG("\nF1AP: Memory allocation failure for GNB_DU_System_Information");
788 srvCellItem->gNB_DU_System_Information->mIB_message.size =\
789 strlen(( char *)duCfgParam.srvdCellLst[0].duSysInfo.mibMsg);
790 DU_ALLOC(srvCellItem->gNB_DU_System_Information->mIB_message.buf,
791 srvCellItem->gNB_DU_System_Information->mIB_message.size);
792 if(!srvCellItem->gNB_DU_System_Information->mIB_message.buf)
794 DU_LOG("\nF1AP: Memory allocation failure for mIB message");
797 strcpy((char *)srvCellItem->gNB_DU_System_Information->mIB_message.buf,
798 (char *)duCfgParam.srvdCellLst[0].duSysInfo.mibMsg);
801 srvCellItem->gNB_DU_System_Information->sIB1_message.size =\
802 duCfgParam.srvdCellLst[0].duSysInfo.sib1Len;
803 DU_ALLOC(srvCellItem->gNB_DU_System_Information->sIB1_message.buf,
804 srvCellItem->gNB_DU_System_Information->sIB1_message.size);
805 if(!srvCellItem->gNB_DU_System_Information->sIB1_message.buf)
807 DU_LOG("\nF1AP: Memory allocation failure for SIB1 message");
810 for(int x=0; x<srvCellItem->gNB_DU_System_Information->sIB1_message.size; x++)
812 srvCellItem->gNB_DU_System_Information->sIB1_message.buf[x]=\
813 duCfgParam.srvdCellLst[0].duSysInfo.sib1Msg[x];
816 DU_FREE(duCfgParam.srvdCellLst[0].duSysInfo.sib1Msg,
817 srvCellItem->gNB_DU_System_Information->sIB1_message.size);
818 DU_FREE(duCfgParam.srvdCellLst[0].duSysInfo.mibMsg,
819 strlen((char *)duCfgParam.srvdCellLst[0].duSysInfo.mibMsg));
822 /*******************************************************************
824 * @brief Builds RRC Version
828 * Function : BuildRrcVer
830 * Functionality: Building RRC Version
832 * @params[in] int idx,int elementCnt,RRC_Version_t *rrcver
833 * @return ROK - success
836 * ****************************************************************/
837 S16 BuildRrcVer(RRC_Version_t *rrcVer)
841 rrcVer->latest_RRC_Version.size = sizeof(U8);
842 DU_ALLOC(rrcVer->latest_RRC_Version.buf,sizeof(U8));
843 if(rrcVer->latest_RRC_Version.buf == NULLP)
847 rrcVer->latest_RRC_Version.buf[0] = 0;
848 rrcVer->latest_RRC_Version.bits_unused = 5;
849 DU_ALLOC(rrcVer->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P81_t));
850 if(rrcVer->iE_Extensions == NULLP)
852 DU_FREE(rrcVer->latest_RRC_Version.buf,sizeof(U8));
855 rrcVer->iE_Extensions->list.count = 1;
856 rrcVer->iE_Extensions->list.size = sizeof(struct RRC_Version_ExtIEs *);
857 DU_ALLOC(rrcVer->iE_Extensions->list.array,\
858 sizeof(struct RRC_Version_ExtIEs *));
859 if(rrcVer->iE_Extensions->list.array == NULLP)
861 DU_FREE(rrcVer->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P81_t));
862 DU_FREE(rrcVer->latest_RRC_Version.buf,sizeof(U8));
866 DU_ALLOC(rrcVer->iE_Extensions->list.array[0],\
867 sizeof(struct RRC_Version_ExtIEs));
868 if(rrcVer->iE_Extensions->list.array[0] == NULLP)
870 DU_FREE(rrcVer->iE_Extensions->list.array,\
871 sizeof(struct RRC_Version_ExtIEs *));
872 DU_FREE(rrcVer->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P81_t));
873 DU_FREE(rrcVer->latest_RRC_Version.buf,sizeof(U8));
876 rrcVer->iE_Extensions->list.array[rrcExt]->id = \
877 ProtocolIE_ID_id_latest_RRC_Version_Enhanced;
878 rrcVer->iE_Extensions->list.array[rrcExt]->criticality = Criticality_reject;
879 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.present =\
880 RRC_Version_ExtIEs__extensionValue_PR_Latest_RRC_Version_Enhanced;
881 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice\
882 .Latest_RRC_Version_Enhanced.size = 3*sizeof(U8);
883 DU_ALLOC(rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice\
884 .Latest_RRC_Version_Enhanced.buf,rrcVer->iE_Extensions->list.\
885 array[rrcExt]->extensionValue.choice.Latest_RRC_Version_Enhanced.size);
886 if(rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice\
887 .Latest_RRC_Version_Enhanced.buf == NULLP)
889 DU_FREE(rrcVer->iE_Extensions->list.array[rrcExt],\
890 sizeof(struct RRC_Version_ExtIEs));
891 DU_FREE(rrcVer->iE_Extensions->list.array,\
892 sizeof(struct RRC_Version_ExtIEs *));
893 DU_FREE(rrcVer->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P81_t));
894 DU_FREE(rrcVer->latest_RRC_Version.buf,sizeof(U8));
898 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice.\
899 Latest_RRC_Version_Enhanced.buf[rrcLatest] = 15;
901 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice.\
902 Latest_RRC_Version_Enhanced.buf[rrcLatest] = 5;
904 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice.\
905 Latest_RRC_Version_Enhanced.buf[rrcLatest] = 0;
908 /*******************************************************************
910 * @brief Sends F1 msg over SCTP
914 * Function : SendF1APMsg
916 * Functionality: Sends F1 msg over SCTP
918 * @params[in] Region region
920 * @return ROK - success
923 * ****************************************************************/
924 S16 SendF1APMsg(Region region, Pool pool)
928 if(SGetMsg(region, pool, &mBuf) == ROK)
930 if(SAddPstMsgMult((Data *)encBuf, encBufSize, mBuf) == ROK)
934 if(sctpSend(mBuf, F1_INTERFACE) != ROK)
936 DU_LOG("\nF1AP : SCTP Send failed");
943 DU_LOG("\nF1AP : SAddPstMsgMult failed");
951 DU_LOG("\nF1AP : Failed to allocate memory");
958 /*******************************************************************
960 * @brief Builds and Send the F1SetupRequest
964 * Function : BuildAndSendF1SetupReq
966 * Functionality:Fills the F1SetupRequest
968 * @return ROK - success
971 ******************************************************************/
972 S16 BuildAndSendF1SetupReq()
984 F1AP_PDU_t *f1apMsg = NULL;
985 F1SetupRequest_t *f1SetupReq;
986 GNB_DU_Served_Cells_List_t *duServedCell;
987 GNB_DU_Served_Cells_Item_t *srvCellItem;
988 RRC_Version_t *rrcVer;
989 asn_enc_rval_t encRetVal; /* Encoder return value */
990 DU_LOG("\nF1AP : Building F1 Setup Request\n");
992 DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t));
995 DU_LOG("\nF1AP : Memory allocation for F1AP-PDU failed");
999 f1apMsg->present = F1AP_PDU_PR_initiatingMessage;
1000 DU_ALLOC(f1apMsg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1001 if(f1apMsg->choice.initiatingMessage == NULLP)
1003 DU_LOG("\nF1AP : Memory allocation for F1AP-PDU failed");
1004 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1008 f1apMsg->choice.initiatingMessage->procedureCode = ProcedureCode_id_F1Setup;
1009 f1apMsg->choice.initiatingMessage->criticality = Criticality_reject;
1010 f1apMsg->choice.initiatingMessage->value.present = \
1011 InitiatingMessage__value_PR_F1SetupRequest;
1013 f1SetupReq = &f1apMsg->choice.initiatingMessage->value.choice.F1SetupRequest;
1015 elementCnt = (duCfgParam.duName != NULL) ? 5 : 4;
1017 f1SetupReq->protocolIEs.list.count = elementCnt;
1018 f1SetupReq->protocolIEs.list.size = elementCnt * sizeof(F1SetupRequestIEs_t *);
1020 /* Initialize the F1Setup members */
1021 DU_ALLOC(f1SetupReq->protocolIEs.list.array, \
1022 elementCnt * sizeof(F1SetupRequestIEs_t *));
1023 if(f1SetupReq->protocolIEs.list.array == NULLP)
1025 DU_LOG("\nF1AP : Memory allocation for F1RequestIEs failed");
1026 DU_FREE(f1apMsg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1027 DU_FREE(f1apMsg, (Size)sizeof(F1AP_PDU_t));
1031 for(idx=0; idx<elementCnt; idx++)
1033 DU_ALLOC(f1SetupReq->protocolIEs.list.array[idx],\
1034 sizeof(F1SetupRequestIEs_t));
1035 if(f1SetupReq->protocolIEs.list.array[idx] == NULLP)
1037 for(ieId=0 ; ieId<idx ;ieId++)
1039 DU_FREE(f1SetupReq->protocolIEs.list.array[ieId],\
1040 sizeof(F1SetupRequestIEs_t));
1042 DU_FREE(f1SetupReq->protocolIEs.list.array,\
1043 elementCnt * sizeof(F1SetupRequestIEs_t *));
1044 DU_FREE(f1apMsg->choice.initiatingMessage, \
1045 sizeof(InitiatingMessage_t));
1046 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1054 f1SetupReq->protocolIEs.list.array[idx]->id = ProtocolIE_ID_id_TransactionID;
1055 f1SetupReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1056 f1SetupReq->protocolIEs.list.array[idx]->value.present =\
1057 F1SetupRequestIEs__value_PR_TransactionID;
1058 f1SetupReq->protocolIEs.list.array[idx]->value.choice.TransactionID = \
1063 f1SetupReq->protocolIEs.list.array[idx]->id = ProtocolIE_ID_id_gNB_DU_ID;
1064 f1SetupReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1065 f1SetupReq->protocolIEs.list.array[idx]->value.present = \
1066 F1SetupRequestIEs__value_PR_GNB_DU_ID;
1067 f1SetupReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_ID.size =\
1070 DU_ALLOC(f1SetupReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_ID.buf,\
1072 if(f1SetupReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_ID.buf == \
1075 for(plmnidx=0; plmnidx<elementCnt; plmnidx++)
1077 DU_FREE(f1SetupReq->protocolIEs.list.array[plmnidx], \
1078 sizeof(F1SetupRequestIEs_t));
1080 DU_FREE(f1SetupReq->protocolIEs.list.array, \
1081 elementCnt * sizeof(F1SetupRequestIEs_t *));
1082 DU_FREE(f1apMsg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1083 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1087 f1SetupReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_ID.buf[0] =\
1091 if(duCfgParam.duName != NULL)
1094 f1SetupReq->protocolIEs.list.array[idx]->id = ProtocolIE_ID_id_gNB_DU_Name ;
1095 f1SetupReq->protocolIEs.list.array[idx]->criticality = Criticality_ignore;
1096 f1SetupReq->protocolIEs.list.array[idx]->value.present = \
1097 F1SetupRequestIEs__value_PR_GNB_DU_Name;
1098 f1SetupReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_Name.size =\
1099 sizeof(duCfgParam.duName);
1101 DU_ALLOC(f1SetupReq->protocolIEs.list.array[idx]->value.choice.\
1102 GNB_DU_Name.buf, sizeof(duCfgParam.duName));
1103 if(f1SetupReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_Name.\
1106 DU_FREE(f1SetupReq->protocolIEs.list.array[--idx]->value.choice.\
1107 GNB_DU_ID.buf, sizeof(U8));
1108 for(plmnidx=0; plmnidx<elementCnt; plmnidx++)
1110 DU_FREE(f1SetupReq->protocolIEs.list.array[plmnidx], \
1111 sizeof(F1SetupRequestIEs_t));
1113 DU_FREE(f1SetupReq->protocolIEs.list.array,\
1114 elementCnt * sizeof(F1SetupRequestIEs_t *));
1115 DU_FREE(f1apMsg->choice.initiatingMessage, \
1116 sizeof(InitiatingMessage_t));
1117 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1121 strcpy((char*)f1SetupReq->protocolIEs.list.array[idx]->value.\
1122 choice.GNB_DU_Name.buf,
1123 (char*)&duCfgParam.duName);
1126 /*Served Cell list */
1128 f1SetupReq->protocolIEs.list.array[idx]->id = \
1129 ProtocolIE_ID_id_gNB_DU_Served_Cells_List;
1130 f1SetupReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1131 f1SetupReq->protocolIEs.list.array[idx]->value.present = \
1132 F1SetupRequestIEs__value_PR_GNB_DU_Served_Cells_List;
1133 duServedCell = &f1SetupReq->protocolIEs.list.\
1134 array[idx]->value.choice.GNB_DU_Served_Cells_List;
1135 ret = BuildServedCellList(duServedCell);
1136 srvCellItem = &duServedCell->list.array[idx]->value. \
1137 choice.GNB_DU_Served_Cells_Item;
1140 DU_FREE(f1SetupReq->protocolIEs.list.array[--idx]->value.\
1141 choice.GNB_DU_Name.buf, sizeof(duCfgParam.duName));
1142 DU_FREE(f1SetupReq->protocolIEs.list.array[--idx]->value.\
1143 choice.GNB_DU_ID.buf, sizeof(U8));
1144 for(plmnidx=0; plmnidx<elementCnt; idx++)
1146 DU_FREE(f1SetupReq->protocolIEs.list.array[plmnidx],\
1147 sizeof(F1SetupRequestIEs_t));
1149 DU_FREE(f1SetupReq->protocolIEs.list.array, \
1150 elementCnt * sizeof(F1SetupRequestIEs_t *));
1151 DU_FREE(f1apMsg->choice.initiatingMessage,\
1152 sizeof(InitiatingMessage_t));
1153 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1157 f1SetupReq->protocolIEs.list.array[idx]->id = \
1158 ProtocolIE_ID_id_GNB_DU_RRC_Version ;
1159 f1SetupReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1160 f1SetupReq->protocolIEs.list.array[idx]->value.present = \
1161 F1SetupRequestIEs__value_PR_RRC_Version;
1162 rrcVer = &f1SetupReq->protocolIEs.list.array[idx]->value.choice.RRC_Version;
1163 ret = BuildRrcVer(rrcVer);
1169 DU_FREE(srvCellItem->served_Cell_Information.\
1170 measurementTimingConfiguration.buf,sizeof(U8));
1171 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1172 dL_NRFreqInfo.freqBandListNr.list.array[0],\
1173 sizeof(struct FreqBandNrItem));
1174 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1175 dL_NRFreqInfo.freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
1176 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.\
1177 fDD->uL_NRFreqInfo.freqBandListNr.list.array[0],\
1178 sizeof(struct FreqBandNrItem));
1179 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1180 uL_NRFreqInfo.freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
1181 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
1182 sizeof(FDD_Info_t));
1183 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1184 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1185 list.array[sliceId]->sNSSAI.sD->buf,srvCellItem->served_Cell_Information.servedPLMNs.\
1186 list.array[servId]->iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1187 list.array[sliceId]->sNSSAI.sD->size);
1188 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1189 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1190 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
1191 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1192 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList\
1193 .list.array[sliceId]->sNSSAI.sST.buf,sizeof(U8));
1194 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1195 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1196 list.array[sliceId],sizeof(SliceSupportItem_t));
1197 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1198 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1199 list.array,sizeof(SliceSupportItem_t *));
1200 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
1202 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1203 array[servId]->iE_Extensions->list.array[plmnidx],\
1204 sizeof(struct ServedPLMNs_ItemExtIEs));
1206 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1207 array[servId]->iE_Extensions->list.array,\
1208 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
1209 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1210 array[servId]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1211 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1212 array[servId]->pLMN_Identity.buf,srvCellItem->served_Cell_Information.\
1213 servedPLMNs.list.array[servId]->pLMN_Identity.size * sizeof(U8));
1214 for(plmnidx=0;plmnidx<servPlmnCnt; plmnidx++)
1216 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[plmnidx],\
1217 sizeof(struct ServedPLMNs_Item *));
1219 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array,\
1220 sizeof(struct ServedPLMNs_Item *));
1221 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC->buf,\
1222 sizeof(srvCellItem->served_Cell_Information.fiveGS_TAC->size));
1223 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC,\
1224 sizeof(FiveGS_TAC_t));
1225 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1226 srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size * sizeof(U8));
1227 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1228 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
1229 for(plmnidx=0; plmnidx<plmnCnt;plmnidx++)
1231 DU_FREE(duServedCell->list.array[plmnidx],\
1232 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
1234 DU_FREE(duServedCell->list.array,\
1235 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
1236 DU_FREE(f1SetupReq->protocolIEs.list.array[--idx]->value.\
1237 choice.GNB_DU_Name.buf, sizeof(duCfgParam.duName));
1238 DU_FREE(f1SetupReq->protocolIEs.list.array[--idx]->value.\
1239 choice.GNB_DU_ID.buf, sizeof(U8));
1240 for(plmnidx=0; plmnidx<elementCnt; plmnidx++)
1242 DU_FREE(f1SetupReq->protocolIEs.list.array[plmnidx],\
1243 sizeof(F1SetupRequestIEs_t));
1245 DU_FREE(f1SetupReq->protocolIEs.list.array,\
1246 elementCnt * sizeof(F1SetupRequestIEs_t *));
1247 DU_FREE(f1apMsg->choice.initiatingMessage,\
1248 sizeof(InitiatingMessage_t));
1249 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1252 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
1254 /* Encode the F1SetupRequest type as APER */
1255 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
1257 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\
1261 DU_FREE(srvCellItem->gNB_DU_System_Information->sIB1_message.buf,
1262 srvCellItem->gNB_DU_System_Information->sIB1_message.size);
1263 DU_FREE(srvCellItem->gNB_DU_System_Information->mIB_message.buf,
1264 srvCellItem->gNB_DU_System_Information->mIB_message.size);
1265 DU_FREE(srvCellItem->served_Cell_Information.\
1266 measurementTimingConfiguration.buf,sizeof(U8));
1267 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1268 dL_NRFreqInfo.freqBandListNr.list.array[0],\
1269 sizeof(struct FreqBandNrItem));
1270 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1271 dL_NRFreqInfo.freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
1272 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.\
1273 fDD->uL_NRFreqInfo.freqBandListNr.list.array[0],\
1274 sizeof(struct FreqBandNrItem));
1275 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1276 uL_NRFreqInfo.freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
1277 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
1278 sizeof(FDD_Info_t));
1279 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1280 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1281 list.array[sliceId]->sNSSAI.sD->buf,srvCellItem->served_Cell_Information.servedPLMNs.\
1282 list.array[servId]->iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1283 list.array[sliceId]->sNSSAI.sD->size);
1284 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1285 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1286 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
1287 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1288 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList\
1289 .list.array[sliceId]->sNSSAI.sST.buf,sizeof(U8));
1290 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1291 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1292 list.array[sliceId],sizeof(SliceSupportItem_t));
1293 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1294 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1295 list.array,sizeof(SliceSupportItem_t *));
1296 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
1298 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1299 array[servId]->iE_Extensions->list.array[plmnidx],\
1300 sizeof(struct ServedPLMNs_ItemExtIEs));
1302 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1303 array[servId]->iE_Extensions->list.array,\
1304 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
1305 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1306 array[servId]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1307 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1308 array[servId]->pLMN_Identity.buf,srvCellItem->served_Cell_Information.\
1309 servedPLMNs.list.array[servId]->pLMN_Identity.size * sizeof(U8));
1310 for(plmnidx=0;plmnidx<servPlmnCnt; plmnidx++)
1312 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[plmnidx],\
1313 sizeof(struct ServedPLMNs_Item *));
1315 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array,\
1316 sizeof(struct ServedPLMNs_Item *));
1317 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC->buf,\
1318 sizeof(srvCellItem->served_Cell_Information.fiveGS_TAC->size));
1319 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC,\
1320 sizeof(FiveGS_TAC_t));
1321 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1322 srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size * sizeof(U8));
1323 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1324 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
1325 for(plmnidx=0; plmnidx<plmnCnt;plmnidx++)
1327 DU_FREE(duServedCell->list.array[plmnidx],\
1328 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
1330 DU_FREE(duServedCell->list.array,\
1331 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
1334 if(duCfgParam.duName != NULL)
1336 DU_FREE(f1SetupReq->protocolIEs.list.array[idx]->value.choice.\
1337 GNB_DU_Name.buf, sizeof(duCfgParam.duName));
1339 DU_FREE(f1SetupReq->protocolIEs.list.array[--idx]->value.choice.GNB_DU_ID.\
1341 for(idx=0; idx<elementCnt; idx++)
1343 DU_FREE(f1SetupReq->protocolIEs.list.array[idx], sizeof(F1SetupRequestIEs_t));
1345 DU_FREE(f1SetupReq->protocolIEs.list.array, elementCnt * sizeof(F1SetupRequestIEs_t *));
1346 DU_FREE(f1apMsg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1347 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1348 /* Encode results */
1349 if(encRetVal.encoded == ENCODE_FAIL)
1351 DU_LOG("\nF1AP : Could not encode F1SetupRequest structure (at %s)\n",\
1352 encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
1357 DU_LOG("\nF1AP : Created APER encoded buffer for F1SetupRequest\n");
1358 for(int i=0; i< encBufSize; i++)
1360 printf("%x",encBuf[i]);
1365 if(SendF1APMsg(DU_APP_MEM_REGION, DU_POOL) != ROK)
1367 DU_LOG("\nF1AP : Sending F1 Setup request failed");
1371 }/* End of BuildAndSendF1SetupReq */
1373 /*******************************************************************
1375 * @brief Builds and sends the DUConfigUpdate
1379 * Function : BuildAndSendDUConfigUpdate
1381 * Functionality: Constructs the DU Update message and sends
1382 * it to the CU through SCTP.
1384 * @params[in] void **buf,Buffer to which encoded pattern is written into
1385 * @params[in] int *size,size of buffer
1387 * @return ROK - success
1390 * ****************************************************************/
1391 S16 BuildAndSendDUConfigUpdate()
1394 U8 elementCnt,modifyCnt,servPlmnCnt,extensionCnt;
1395 asn_enc_rval_t encRetVal; /* Encoder return value */
1396 F1AP_PDU_t *f1apDuCfg = NULL;
1397 GNBDUConfigurationUpdate_t *duCfgUpdate;
1398 Served_Cells_To_Modify_List_t *cellsToModify;
1399 Served_Cells_To_Modify_Item_t *modifyItem;
1400 DU_LOG("\nF1AP : Building DU config update\n");
1402 /* Allocate the memory for F1DuCfg */
1403 DU_ALLOC(f1apDuCfg, (Size)sizeof(F1AP_PDU_t));
1404 if(f1apDuCfg == NULLP)
1406 DU_LOG("\nF1AP : Memory allocation for F1AP-PDU failed");
1410 f1apDuCfg->present = F1AP_PDU_PR_initiatingMessage;
1411 DU_ALLOC(f1apDuCfg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1412 if(f1apDuCfg->choice.initiatingMessage == NULLP)
1414 DU_LOG("\nF1AP : Memory allocation for F1AP-PDU failed");
1415 DU_FREE(f1apDuCfg, (Size)sizeof(F1AP_PDU_t));
1419 f1apDuCfg->choice.initiatingMessage->procedureCode = \
1420 ProcedureCode_id_gNBDUConfigurationUpdate;
1421 f1apDuCfg->choice.initiatingMessage->criticality = Criticality_reject;
1422 f1apDuCfg->choice.initiatingMessage->value.present = \
1423 InitiatingMessage__value_PR_GNBDUConfigurationUpdate;
1424 duCfgUpdate = &f1apDuCfg->choice.initiatingMessage->value.\
1425 choice.GNBDUConfigurationUpdate;
1428 duCfgUpdate->protocolIEs.list.count = elementCnt;
1429 duCfgUpdate->protocolIEs.list.size = \
1430 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *);
1432 /* Initialize the F1Setup members */
1433 DU_ALLOC(duCfgUpdate->protocolIEs.list.array,\
1434 elementCnt*sizeof(GNBDUConfigurationUpdateIEs_t *));
1435 if(duCfgUpdate->protocolIEs.list.array == NULLP)
1437 DU_LOG("F1AP : Memory allocation for F1RequestIEs failed");
1438 DU_FREE(f1apDuCfg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1439 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1443 for(idx=0;idx<elementCnt;idx++)
1445 DU_ALLOC(duCfgUpdate->protocolIEs.list.array[idx], \
1446 sizeof(GNBDUConfigurationUpdateIEs_t));
1447 if(duCfgUpdate->protocolIEs.list.array[idx] == NULLP)
1449 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1450 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1451 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1452 (Size)sizeof(InitiatingMessage_t));
1453 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1460 duCfgUpdate->protocolIEs.list.array[idx]->id = \
1461 ProtocolIE_ID_id_TransactionID;
1462 duCfgUpdate->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1463 duCfgUpdate->protocolIEs.list.array[idx]->value.present = \
1464 GNBDUConfigurationUpdateIEs__value_PR_TransactionID;
1465 duCfgUpdate->protocolIEs.list.array[idx]->value.choice.TransactionID = \
1468 /*Served Cell to Modify */
1470 duCfgUpdate->protocolIEs.list.array[idx]->id = \
1471 ProtocolIE_ID_id_Served_Cells_To_Modify_List;
1472 duCfgUpdate->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1473 duCfgUpdate->protocolIEs.list.array[idx]->value.present = \
1474 GNBDUConfigurationUpdateIEs__value_PR_Served_Cells_To_Modify_List;
1475 cellsToModify = &duCfgUpdate->protocolIEs.list.array[1]->value.choice.\
1476 Served_Cells_To_Modify_List;
1478 cellsToModify->list.count = modifyCnt;
1479 cellsToModify->list.size = \
1480 modifyCnt*sizeof(struct Served_Cells_To_Modify_ItemIEs *);
1481 DU_ALLOC(cellsToModify->list.array,modifyCnt*\
1482 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1483 if(cellsToModify->list.array == NULLP)
1485 for(idy=0;idy<elementCnt;idy++)
1487 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1488 sizeof(GNBDUConfigurationUpdateIEs_t));
1490 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1491 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1492 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1493 (Size)sizeof(InitiatingMessage_t));
1494 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1498 for(idy=0; idy<modifyCnt ;idy++)
1500 DU_ALLOC(cellsToModify->list.array[idy],\
1501 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1502 if(cellsToModify->list.array[idy] == NULLP)
1504 DU_FREE(cellsToModify->list.array,modifyCnt*\
1505 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1506 for(idy=0;idy<elementCnt;idy++)
1508 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1509 sizeof(GNBDUConfigurationUpdateIEs_t));
1511 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1512 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1513 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1514 (Size)sizeof(InitiatingMessage_t));
1515 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1519 cellsToModify->list.array[0]->id = \
1520 ProtocolIE_ID_id_Served_Cells_To_Modify_Item;
1521 cellsToModify->list.array[0]->criticality = Criticality_reject;
1522 cellsToModify->list.array[0]->value.present = \
1523 Served_Cells_To_Modify_ItemIEs__value_PR_Served_Cells_To_Modify_Item;
1524 modifyItem=&cellsToModify->list.array[0]->value.choice.\
1525 Served_Cells_To_Modify_Item;
1528 modifyItem->oldNRCGI.pLMN_Identity.size = 3;
1529 DU_ALLOC(modifyItem->oldNRCGI.pLMN_Identity.buf, 3*sizeof(uint8_t));
1530 if(modifyItem->oldNRCGI.pLMN_Identity.buf == NULLP)
1532 for(idy=0; idy<modifyCnt ;idy++)
1534 DU_FREE(cellsToModify->list.array[idy],\
1535 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1536 DU_FREE(cellsToModify->list.array,modifyCnt*\
1537 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1538 for(idy=0;idy<elementCnt;idy++)
1540 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1541 sizeof(GNBDUConfigurationUpdateIEs_t));
1543 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1544 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1545 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1546 (Size)sizeof(InitiatingMessage_t));
1547 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1551 buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
1552 &modifyItem->oldNRCGI.pLMN_Identity);
1554 modifyItem->oldNRCGI.nRCellIdentity.size = 5;
1555 DU_ALLOC(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1556 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1557 if(modifyItem->oldNRCGI.nRCellIdentity.buf == NULLP)
1559 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1560 DU_FREE(cellsToModify->list.array[idy],\
1561 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1562 DU_FREE(cellsToModify->list.array,modifyCnt*\
1563 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1564 for(idy=0;idy<elementCnt;idy++)
1566 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1567 sizeof(GNBDUConfigurationUpdateIEs_t));
1569 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1570 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1571 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1572 (Size)sizeof(InitiatingMessage_t));
1573 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1576 for (int tmp = 0 ; tmp < modifyItem->oldNRCGI.nRCellIdentity.size-1 ; tmp++)
1578 modifyItem->oldNRCGI.nRCellIdentity.buf[tmp] = 0;
1580 modifyItem->oldNRCGI.nRCellIdentity.buf[4] = 16;
1581 modifyItem->oldNRCGI.nRCellIdentity.bits_unused = 4;
1584 modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.size = 3;
1585 DU_ALLOC(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1587 if(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf == NULLP)
1589 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1590 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1591 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1592 DU_FREE(cellsToModify->list.array[idy],\
1593 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1594 DU_FREE(cellsToModify->list.array,modifyCnt*\
1595 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1596 for(idy=0;idy<elementCnt;idy++)
1598 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1599 sizeof(GNBDUConfigurationUpdateIEs_t));
1601 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1602 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1603 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1604 (Size)sizeof(InitiatingMessage_t));
1605 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1608 buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
1609 &modifyItem->served_Cell_Information.nRCGI.pLMN_Identity);
1610 modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.size = 5;
1611 DU_ALLOC(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1613 if(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf == NULLP)
1615 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1617 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1618 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1619 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1620 DU_FREE(cellsToModify->list.array[idy],\
1621 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1622 DU_FREE(cellsToModify->list.array,modifyCnt*\
1623 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1624 for(idy=0;idy<elementCnt;idy++)
1626 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1627 sizeof(GNBDUConfigurationUpdateIEs_t));
1629 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1630 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1631 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1632 (Size)sizeof(InitiatingMessage_t));
1633 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1636 for (int tmp = 0 ; tmp < modifyItem->served_Cell_Information.\
1637 nRCGI.nRCellIdentity.size-1 ; tmp++)
1639 modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf[tmp] = 0;
1641 modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf[4] = 16;
1642 modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.bits_unused = 4;
1645 modifyItem->served_Cell_Information.nRPCI = \
1646 duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrPci;
1650 modifyItem->served_Cell_Information.servedPLMNs.list.count = servPlmnCnt;
1651 modifyItem->served_Cell_Information.servedPLMNs.list.size = \
1652 servPlmnCnt*sizeof(struct ServedPLMNs_Item *);
1653 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1654 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1655 if(modifyItem->served_Cell_Information.servedPLMNs.list.array == NULLP)
1657 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1659 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1661 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1662 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1663 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1664 DU_FREE(cellsToModify->list.array[idy],\
1665 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1666 DU_FREE(cellsToModify->list.array,modifyCnt*\
1667 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1668 for(idy=0;idy<elementCnt;idy++)
1670 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1671 sizeof(GNBDUConfigurationUpdateIEs_t));
1673 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1674 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1675 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1676 (Size)sizeof(InitiatingMessage_t));
1677 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1680 for(idy=0;idy<servPlmnCnt;idy++)
1682 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1683 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1684 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy] == NULLP)
1686 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1687 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1688 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1690 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1692 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1693 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1694 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1695 DU_FREE(cellsToModify->list.array[idy],\
1696 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1697 DU_FREE(cellsToModify->list.array,modifyCnt*\
1698 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1699 for(idy=0;idy<elementCnt;idy++)
1701 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1702 sizeof(GNBDUConfigurationUpdateIEs_t));
1704 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1705 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1706 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1707 (Size)sizeof(InitiatingMessage_t));
1708 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1712 modifyItem->served_Cell_Information.servedPLMNs.list.\
1713 array[0]->pLMN_Identity.size = 3;
1714 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
1715 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1716 if(modifyItem->served_Cell_Information.servedPLMNs.list.\
1717 array[0]->pLMN_Identity.buf == NULLP)
1719 for(idy=0;idy<servPlmnCnt;idy++)
1721 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1722 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1724 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1725 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1726 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1728 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1730 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1731 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1732 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1733 DU_FREE(cellsToModify->list.array[idy],\
1734 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1735 DU_FREE(cellsToModify->list.array,modifyCnt*\
1736 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1737 for(idy=0;idy<elementCnt;idy++)
1739 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1740 sizeof(GNBDUConfigurationUpdateIEs_t));
1742 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1743 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1744 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1745 (Size)sizeof(InitiatingMessage_t));
1746 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1749 buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.plmn[0],\
1750 &modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->pLMN_Identity);
1751 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
1752 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1753 if(modifyItem->served_Cell_Information.servedPLMNs.list.\
1754 array[0]->iE_Extensions == NULLP)
1756 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1757 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1758 for(idy=0;idy<servPlmnCnt;idy++)
1760 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1761 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1763 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1764 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1765 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1767 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1769 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1770 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1771 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1772 DU_FREE(cellsToModify->list.array[idy],\
1773 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1774 DU_FREE(cellsToModify->list.array,modifyCnt*\
1775 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1776 for(idy=0;idy<elementCnt;idy++)
1778 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1779 sizeof(GNBDUConfigurationUpdateIEs_t));
1781 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1782 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1783 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1784 (Size)sizeof(InitiatingMessage_t));
1785 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1789 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1790 iE_Extensions->list.count = extensionCnt;
1791 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1792 iE_Extensions->list.size = extensionCnt * \
1793 sizeof(struct ServedPLMNs_ItemExtIEs *);
1794 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
1795 array[0]->iE_Extensions->list.array,extensionCnt*\
1796 sizeof(struct ServedPLMNs_ItemExtIEs *));
1797 if(modifyItem->served_Cell_Information.servedPLMNs.list.\
1798 array[0]->iE_Extensions->list.array == NULLP)
1800 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1801 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1802 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1803 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1804 for(idy=0;idy<servPlmnCnt;idy++)
1806 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1807 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1809 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1810 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1811 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1813 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1815 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1816 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1817 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1818 DU_FREE(cellsToModify->list.array[idy],\
1819 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1820 DU_FREE(cellsToModify->list.array,modifyCnt*\
1821 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1822 for(idy=0;idy<elementCnt;idy++)
1824 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1825 sizeof(GNBDUConfigurationUpdateIEs_t));
1827 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1828 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1829 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1830 (Size)sizeof(InitiatingMessage_t));
1831 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1834 for(idy=0;idy<extensionCnt;idy++)
1836 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
1837 array[0]->iE_Extensions->list.array[idy],\
1838 sizeof(struct ServedPLMNs_ItemExtIEs));
1839 if(modifyItem->served_Cell_Information.servedPLMNs.list.\
1840 array[0]->iE_Extensions->list.array[idy] == NULLP)
1842 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1843 array[0]->iE_Extensions->list.array,extensionCnt*\
1844 sizeof(struct ServedPLMNs_ItemExtIEs *));
1845 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1846 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1847 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1848 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1849 for(idy=0;idy<servPlmnCnt;idy++)
1851 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1852 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1854 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1855 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1856 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1858 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1860 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1861 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1862 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1863 DU_FREE(cellsToModify->list.array[idy],\
1864 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1865 DU_FREE(cellsToModify->list.array,modifyCnt*\
1866 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1867 for(idy=0;idy<elementCnt;idy++)
1869 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1870 sizeof(GNBDUConfigurationUpdateIEs_t));
1872 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1873 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1874 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1875 (Size)sizeof(InitiatingMessage_t));
1876 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1880 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1881 iE_Extensions->list.array[0]->id = ProtocolIE_ID_id_TAISliceSupportList;
1882 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1883 iE_Extensions->list.array[0]->criticality = Criticality_ignore;
1884 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1885 iE_Extensions->list.array[0]->extensionValue.present = \
1886 ServedPLMNs_ItemExtIEs__extensionValue_PR_SliceSupportList;
1887 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1888 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1890 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1891 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1892 list.size = sizeof(SliceSupportItem_t *);
1893 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1894 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1895 list.array,sizeof( SliceSupportItem_t *));
1896 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1897 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1898 list.array == NULLP)
1900 for(idy=0;idy<extensionCnt;idy++)
1902 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1903 array[0]->iE_Extensions->list.array[idy],\
1904 sizeof(struct ServedPLMNs_ItemExtIEs));
1906 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1907 array[0]->iE_Extensions->list.array,extensionCnt*\
1908 sizeof(struct ServedPLMNs_ItemExtIEs *));
1909 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1910 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1911 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1912 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1913 for(idy=0;idy<servPlmnCnt;idy++)
1915 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1916 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1918 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1919 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1920 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1922 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1924 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1925 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1926 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1927 DU_FREE(cellsToModify->list.array[idy],\
1928 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1929 DU_FREE(cellsToModify->list.array,modifyCnt*\
1930 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1931 for(idy=0;idy<elementCnt;idy++)
1933 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1934 sizeof(GNBDUConfigurationUpdateIEs_t));
1936 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1937 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1938 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1939 (Size)sizeof(InitiatingMessage_t));
1940 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1943 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1944 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1945 list.array[0],sizeof( SliceSupportItem_t));
1946 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1947 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1948 list.array[0] == NULLP)
1950 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1951 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1952 list.array,sizeof( SliceSupportItem_t *));
1953 for(idy=0;idy<extensionCnt;idy++)
1955 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1956 array[0]->iE_Extensions->list.array[idy],\
1957 sizeof(struct ServedPLMNs_ItemExtIEs));
1959 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1960 array[0]->iE_Extensions->list.array,extensionCnt*\
1961 sizeof(struct ServedPLMNs_ItemExtIEs *));
1962 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1963 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1964 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1965 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1966 for(idy=0;idy<servPlmnCnt;idy++)
1968 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1969 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1971 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1972 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1973 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1975 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1977 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1978 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1979 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1980 DU_FREE(cellsToModify->list.array[idy],\
1981 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1982 DU_FREE(cellsToModify->list.array,modifyCnt*\
1983 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1984 for(idy=0;idy<elementCnt;idy++)
1986 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1987 sizeof(GNBDUConfigurationUpdateIEs_t));
1989 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1990 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1991 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1992 (Size)sizeof(InitiatingMessage_t));
1993 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1996 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1997 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1998 list.array[0]->sNSSAI.sST.size = sizeof(uint8_t);
1999 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2000 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2001 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2002 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2003 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2004 list.array[0]->sNSSAI.sST.buf == NULLP)
2006 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2007 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2008 list.array[0],sizeof( SliceSupportItem_t));
2009 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2010 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2011 list.array,sizeof( SliceSupportItem_t *));
2012 for(idy=0;idy<extensionCnt;idy++)
2014 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2015 array[0]->iE_Extensions->list.array[idy],\
2016 sizeof(struct ServedPLMNs_ItemExtIEs));
2018 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2019 array[0]->iE_Extensions->list.array,extensionCnt*\
2020 sizeof(struct ServedPLMNs_ItemExtIEs *));
2021 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2022 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
2023 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2024 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2025 for(idy=0;idy<servPlmnCnt;idy++)
2027 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2028 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2030 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2031 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2032 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2034 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2036 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2037 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2038 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2039 DU_FREE(cellsToModify->list.array[idy],\
2040 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2041 DU_FREE(cellsToModify->list.array,modifyCnt*\
2042 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2043 for(idy=0;idy<elementCnt;idy++)
2045 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2046 sizeof(GNBDUConfigurationUpdateIEs_t));
2048 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2049 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2050 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2051 (Size)sizeof(InitiatingMessage_t));
2052 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2055 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2056 iE_Extensions->list.array[0]->extensionValue. choice.SliceSupportList.\
2057 list.array[0]->sNSSAI.sST.buf[0] = 3;
2058 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2059 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2060 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2061 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2062 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2063 list.array[0]->sNSSAI.sD == NULLP)
2065 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2066 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2067 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2068 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2069 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2070 list.array[0],sizeof( SliceSupportItem_t));
2071 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2072 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2073 list.array,sizeof( SliceSupportItem_t *));
2074 for(idy=0;idy<extensionCnt;idy++)
2076 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2077 array[0]->iE_Extensions->list.array[idy],\
2078 sizeof(struct ServedPLMNs_ItemExtIEs));
2080 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2081 array[0]->iE_Extensions->list.array,extensionCnt*\
2082 sizeof(struct ServedPLMNs_ItemExtIEs *));
2083 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2084 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
2085 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2086 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2087 for(idy=0;idy<servPlmnCnt;idy++)
2089 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2090 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2092 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2093 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2094 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2096 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2098 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2099 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2100 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2101 DU_FREE(cellsToModify->list.array[idy],\
2102 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2103 DU_FREE(cellsToModify->list.array,modifyCnt*\
2104 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2105 for(idy=0;idy<elementCnt;idy++)
2107 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2108 sizeof(GNBDUConfigurationUpdateIEs_t));
2110 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2111 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2112 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2113 (Size)sizeof(InitiatingMessage_t));
2114 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2117 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2118 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2119 list.array[0]->sNSSAI.sD->size = 3*sizeof(uint8_t);
2120 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2121 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2122 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2123 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2124 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2125 list.array[0]->sNSSAI.sD->buf == NULLP)
2127 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2128 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2129 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2130 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2131 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2132 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2133 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2134 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2135 list.array[0],sizeof( SliceSupportItem_t));
2136 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2137 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2138 list.array,sizeof( SliceSupportItem_t *));
2139 for(idy=0;idy<extensionCnt;idy++)
2141 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2142 array[0]->iE_Extensions->list.array[idy],\
2143 sizeof(struct ServedPLMNs_ItemExtIEs));
2145 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2146 array[0]->iE_Extensions->list.array,extensionCnt*\
2147 sizeof(struct ServedPLMNs_ItemExtIEs *));
2148 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2149 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
2150 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2151 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2152 for(idy=0;idy<servPlmnCnt;idy++)
2154 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2155 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2157 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2158 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2159 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2161 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2163 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2164 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2165 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2166 DU_FREE(cellsToModify->list.array[idy],\
2167 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2168 DU_FREE(cellsToModify->list.array,modifyCnt*\
2169 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2170 for(idy=0;idy<elementCnt;idy++)
2172 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2173 sizeof(GNBDUConfigurationUpdateIEs_t));
2175 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2176 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2177 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2178 (Size)sizeof(InitiatingMessage_t));
2179 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2182 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2183 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2184 list.array[0]->sNSSAI.sD->buf[0] = 3;
2185 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2186 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2187 list.array[0]->sNSSAI.sD->buf[1] = 6;
2188 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2189 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2190 list.array[0]->sNSSAI.sD->buf[2] = 9;
2192 /*nR Mode Info with FDD*/
2193 modifyItem->served_Cell_Information.nR_Mode_Info.present = \
2194 NR_Mode_Info_PR_fDD;
2195 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2196 sizeof(FDD_Info_t));
2197 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD == NULLP)
2199 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2200 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2201 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2202 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2203 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2204 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2205 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2206 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2207 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2208 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2209 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2210 list.array[0],sizeof( SliceSupportItem_t));
2211 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2212 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2213 list.array,sizeof( SliceSupportItem_t *));
2214 for(idy=0;idy<extensionCnt;idy++)
2216 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2217 array[0]->iE_Extensions->list.array[idy],\
2218 sizeof(struct ServedPLMNs_ItemExtIEs));
2220 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2221 array[0]->iE_Extensions->list.array,extensionCnt*\
2222 sizeof(struct ServedPLMNs_ItemExtIEs *));
2223 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2224 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
2225 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2226 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2227 for(idy=0;idy<servPlmnCnt;idy++)
2229 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2230 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2232 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2233 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2234 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2236 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2238 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2239 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2240 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2241 DU_FREE(cellsToModify->list.array[idy],\
2242 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2243 DU_FREE(cellsToModify->list.array,modifyCnt*\
2244 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2245 for(idy=0;idy<elementCnt;idy++)
2247 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2248 sizeof(GNBDUConfigurationUpdateIEs_t));
2250 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2251 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2252 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2253 (Size)sizeof(InitiatingMessage_t));
2254 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2257 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2258 uL_NRFreqInfo.nRARFCN = duCfgParam.srvdCellLst[0].duCellInfo.\
2259 f1Mode.mode.fdd.ulNrFreqInfo.nrArfcn;
2260 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2261 uL_NRFreqInfo.freqBandListNr.list.count = 1;
2262 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2263 uL_NRFreqInfo.freqBandListNr.list.size = \
2264 sizeof(struct FreqBandNrItem *);
2265 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2266 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2267 array,sizeof(struct FreqBandNrItem *));
2268 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2269 fDD->uL_NRFreqInfo.freqBandListNr.list.array == NULLP)
2271 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2272 sizeof(FDD_Info_t));
2273 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2274 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2275 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2276 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2277 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2278 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2279 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2280 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2281 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2282 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2283 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2284 list.array[0],sizeof( SliceSupportItem_t));
2285 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2286 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2287 list.array,sizeof( SliceSupportItem_t *));
2288 for(idy=0;idy<extensionCnt;idy++)
2290 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2291 array[0]->iE_Extensions->list.array[idy],\
2292 sizeof(struct ServedPLMNs_ItemExtIEs));
2294 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2295 array[0]->iE_Extensions->list.array,extensionCnt*\
2296 sizeof(struct ServedPLMNs_ItemExtIEs *));
2297 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2298 array[0]->iE_Extensions,\
2299 sizeof(struct ProtocolExtensionContainer_4624P3));
2300 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2301 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2302 for(idy=0;idy<servPlmnCnt;idy++)
2304 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2305 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2307 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2308 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2309 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2311 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2313 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2314 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2315 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2316 DU_FREE(cellsToModify->list.array[idy],\
2317 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2318 DU_FREE(cellsToModify->list.array,modifyCnt*\
2319 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2320 for(idy=0;idy<elementCnt;idy++)
2322 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2323 sizeof(GNBDUConfigurationUpdateIEs_t));
2325 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2326 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2327 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2328 (Size)sizeof(InitiatingMessage_t));
2329 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2332 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2333 uL_NRFreqInfo.freqBandListNr.list.\
2334 array[0],sizeof(struct FreqBandNrItem));
2335 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2336 uL_NRFreqInfo.freqBandListNr.list.\
2339 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2340 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2341 array,sizeof(struct FreqBandNrItem *));
2342 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2343 sizeof(FDD_Info_t));
2344 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2345 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2346 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2347 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2348 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2349 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2350 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2351 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2352 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2353 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2354 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2355 list.array[0],sizeof( SliceSupportItem_t));
2356 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2357 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2358 list.array,sizeof( SliceSupportItem_t *));
2359 for(idy=0;idy<extensionCnt;idy++)
2361 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2362 array[0]->iE_Extensions->list.array[idy],\
2363 sizeof(struct ServedPLMNs_ItemExtIEs));
2365 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2366 array[0]->iE_Extensions->list.array,extensionCnt*\
2367 sizeof(struct ServedPLMNs_ItemExtIEs *));
2368 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2369 array[0]->iE_Extensions,\
2370 sizeof(struct ProtocolExtensionContainer_4624P3));
2371 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2372 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2373 for(idy=0;idy<servPlmnCnt;idy++)
2375 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2376 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2378 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2379 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2380 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2382 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2384 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2385 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2386 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2387 DU_FREE(cellsToModify->list.array[idy],\
2388 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2389 DU_FREE(cellsToModify->list.array,modifyCnt*\
2390 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2391 for(idy=0;idy<elementCnt;idy++)
2393 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2394 sizeof(GNBDUConfigurationUpdateIEs_t));
2396 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2397 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2398 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2399 (Size)sizeof(InitiatingMessage_t));
2400 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2403 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->uL_NRFreqInfo.\
2404 freqBandListNr.list.array[0]->freqBandIndicatorNr = \
2405 duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.\
2406 freqBand[0].nrFreqBand;
2407 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->uL_NRFreqInfo.\
2408 freqBandListNr.list.array[0]->supportedSULBandList.list.count=0;
2409 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2410 nRARFCN = duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.\
2411 dlNrFreqInfo.nrArfcn;
2412 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2413 freqBandListNr.list.count = 1;
2414 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2415 freqBandListNr.list.size = sizeof(struct FreqBandNrItem *);
2416 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2417 dL_NRFreqInfo.freqBandListNr.list.array,\
2418 sizeof(struct FreqBandNrItem *));
2419 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2420 dL_NRFreqInfo.freqBandListNr.list.array == NULLP)
2422 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2423 uL_NRFreqInfo.freqBandListNr.list.\
2424 array[0],sizeof(struct FreqBandNrItem));
2425 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2426 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2427 array,sizeof(struct FreqBandNrItem *));
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(struct ServedPLMNs_ItemExtIEs));
2451 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2452 array[0]->iE_Extensions->list.array,extensionCnt*\
2453 sizeof(struct ServedPLMNs_ItemExtIEs *));
2454 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2455 array[0]->iE_Extensions,\
2456 sizeof(struct ProtocolExtensionContainer_4624P3));
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(struct ServedPLMNs_Item));
2464 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2465 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
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(struct Served_Cells_To_Modify_ItemIEs));
2475 DU_FREE(cellsToModify->list.array,modifyCnt*\
2476 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
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 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2490 dL_NRFreqInfo.freqBandListNr.list.array[0],\
2491 sizeof(struct FreqBandNrItem));
2492 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2493 dL_NRFreqInfo.freqBandListNr.list.array[0] == NULLP)
2495 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2496 dL_NRFreqInfo.freqBandListNr.list.array,\
2497 sizeof(struct FreqBandNrItem *));
2498 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2499 uL_NRFreqInfo.freqBandListNr.list.\
2500 array[0],sizeof(struct FreqBandNrItem));
2501 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2502 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2503 array,sizeof(struct FreqBandNrItem *));
2504 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2505 sizeof(FDD_Info_t));
2506 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2507 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2508 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2509 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2510 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2511 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2512 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2513 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2514 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2515 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2516 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2517 list.array[0],sizeof( SliceSupportItem_t));
2518 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2519 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2520 list.array,sizeof( SliceSupportItem_t *));
2521 for(idy=0;idy<extensionCnt;idy++)
2523 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2524 array[0]->iE_Extensions->list.array[idy],\
2525 sizeof(struct ServedPLMNs_ItemExtIEs));
2527 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2528 array[0]->iE_Extensions->list.array,extensionCnt*\
2529 sizeof(struct ServedPLMNs_ItemExtIEs *));
2530 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2531 array[0]->iE_Extensions,\
2532 sizeof(struct ProtocolExtensionContainer_4624P3));
2533 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2534 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2535 for(idy=0;idy<servPlmnCnt;idy++)
2537 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2538 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2540 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2541 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2542 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2544 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2546 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2547 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2548 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2549 DU_FREE(cellsToModify->list.array[idy],\
2550 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2551 DU_FREE(cellsToModify->list.array,modifyCnt*\
2552 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2553 for(idy=0;idy<elementCnt;idy++)
2555 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2556 sizeof(GNBDUConfigurationUpdateIEs_t));
2558 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2559 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2560 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2561 (Size)sizeof(InitiatingMessage_t));
2562 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2565 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2566 freqBandListNr.list.array[0]->freqBandIndicatorNr = \
2567 duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.\
2568 freqBand[0].nrFreqBand;
2569 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2570 freqBandListNr.list.array[0]->supportedSULBandList.list.count=0;
2572 /*Transmission Bandwidth*/
2573 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2574 uL_Transmission_Bandwidth.nRSCS = duCfgParam.srvdCellLst[0].duCellInfo.\
2575 f1Mode.mode.fdd.ulTxBw.nrScs;
2576 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2577 uL_Transmission_Bandwidth.nRNRB = duCfgParam.srvdCellLst[0].duCellInfo.\
2578 f1Mode.mode.fdd.ulTxBw.nrb;
2580 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2581 dL_Transmission_Bandwidth.nRSCS = duCfgParam.srvdCellLst[0].duCellInfo.\
2582 f1Mode.mode.fdd.dlTxBw.nrScs;
2583 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2584 dL_Transmission_Bandwidth.nRNRB = duCfgParam.srvdCellLst[0].duCellInfo.\
2585 f1Mode.mode.fdd.dlTxBw.nrb;
2587 /*Measurement timing Config*/
2588 modifyItem->served_Cell_Information.measurementTimingConfiguration.size = \
2590 DU_ALLOC(modifyItem->served_Cell_Information.measurementTimingConfiguration.\
2591 buf,sizeof(uint8_t));
2592 if(modifyItem->served_Cell_Information.measurementTimingConfiguration.buf == NULLP)
2594 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2595 dL_NRFreqInfo.freqBandListNr.list.array[0],\
2596 sizeof(struct FreqBandNrItem));
2597 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2598 dL_NRFreqInfo.freqBandListNr.list.array,\
2599 sizeof(struct FreqBandNrItem *));
2600 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2601 uL_NRFreqInfo.freqBandListNr.list.\
2602 array[0],sizeof(struct FreqBandNrItem));
2603 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2604 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2605 array,sizeof(struct FreqBandNrItem *));
2606 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2607 sizeof(FDD_Info_t));
2608 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2609 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2610 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2611 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2612 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2613 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2614 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2615 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2616 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2617 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2618 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2619 list.array[0],sizeof( SliceSupportItem_t));
2620 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2621 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2622 list.array,sizeof( SliceSupportItem_t *));
2623 for(idy=0;idy<extensionCnt;idy++)
2625 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2626 array[0]->iE_Extensions->list.array[idy],\
2627 sizeof(struct ServedPLMNs_ItemExtIEs));
2629 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2630 array[0]->iE_Extensions->list.array,extensionCnt*\
2631 sizeof(struct ServedPLMNs_ItemExtIEs *));
2632 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2633 array[0]->iE_Extensions,\
2634 sizeof(struct ProtocolExtensionContainer_4624P3));
2635 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2636 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2637 for(idy=0;idy<servPlmnCnt;idy++)
2639 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2640 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2642 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2643 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2644 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2646 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2648 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2649 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2650 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2651 DU_FREE(cellsToModify->list.array[idy],\
2652 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2653 DU_FREE(cellsToModify->list.array,modifyCnt*\
2654 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2655 for(idy=0;idy<elementCnt;idy++)
2657 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2658 sizeof(GNBDUConfigurationUpdateIEs_t));
2660 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2661 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2662 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2663 (Size)sizeof(InitiatingMessage_t));
2664 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2667 modifyItem->served_Cell_Information.measurementTimingConfiguration.\
2668 buf[0] = duCfgParam.srvdCellLst[0].duCellInfo.measTimeCfg;
2671 // NOTE :GNB DU SYS INFO:MIB AND SIB1 INFORMATION TO BE BUILT AND FILLED HERE
2673 duCfgUpdate->protocolIEs.list.array[2]->id = ProtocolIE_ID_id_gNB_DU_ID;
2674 duCfgUpdate->protocolIEs.list.array[2]->criticality = Criticality_reject;
2675 duCfgUpdate->protocolIEs.list.array[2]->value.present = \
2676 GNBDUConfigurationUpdateIEs__value_PR_GNB_DU_ID;
2677 duCfgUpdate->protocolIEs.list.array[2]->value.choice.GNB_DU_ID.size = \
2679 DU_ALLOC(duCfgUpdate->protocolIEs.list.array[2]->value.choice.GNB_DU_ID.buf,\
2681 if(duCfgUpdate->protocolIEs.list.array[2]->value.choice.GNB_DU_ID.buf == NULLP)
2683 DU_FREE(modifyItem->served_Cell_Information.measurementTimingConfiguration.\
2684 buf,sizeof(uint8_t));
2685 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2686 dL_NRFreqInfo.freqBandListNr.list.array[0],\
2687 sizeof(struct FreqBandNrItem));
2688 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2689 dL_NRFreqInfo.freqBandListNr.list.array,\
2690 sizeof(struct FreqBandNrItem *));
2691 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2692 uL_NRFreqInfo.freqBandListNr.list.\
2693 array[0],sizeof(struct FreqBandNrItem));
2694 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2695 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2696 array,sizeof(struct FreqBandNrItem *));
2697 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2698 sizeof(FDD_Info_t));
2699 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2700 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2701 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2702 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2703 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2704 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2705 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2706 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2707 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2708 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2709 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2710 list.array[0],sizeof( SliceSupportItem_t));
2711 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2712 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2713 list.array,sizeof( SliceSupportItem_t *));
2714 for(idy=0;idy<extensionCnt;idy++)
2716 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2717 array[0]->iE_Extensions->list.array[idy],\
2718 sizeof(struct ServedPLMNs_ItemExtIEs));
2720 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2721 array[0]->iE_Extensions->list.array,extensionCnt*\
2722 sizeof(struct ServedPLMNs_ItemExtIEs *));
2723 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2724 array[0]->iE_Extensions,\
2725 sizeof(struct ProtocolExtensionContainer_4624P3));
2726 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2727 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2728 for(idy=0;idy<servPlmnCnt;idy++)
2730 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2731 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2733 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2734 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2735 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2737 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2739 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2740 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2741 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2742 DU_FREE(cellsToModify->list.array[idy],\
2743 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2744 DU_FREE(cellsToModify->list.array,modifyCnt*\
2745 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2746 for(idy=0;idy<elementCnt;idy++)
2748 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2749 sizeof(GNBDUConfigurationUpdateIEs_t));
2751 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2752 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2753 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2754 (Size)sizeof(InitiatingMessage_t));
2755 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2758 duCfgUpdate->protocolIEs.list.array[2]->value.choice.GNB_DU_ID.buf[0] = \
2764 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apDuCfg);
2766 /* Encode the DU Config Update type as APER */
2767 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
2769 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apDuCfg, PrepFinalEncBuf, encBuf);
2772 for(idx=0;idx<elementCnt;idx++)
2774 DU_FREE(duCfgUpdate->protocolIEs.list.array[idx], sizeof(GNBDUConfigurationUpdateIEs_t));
2776 DU_FREE(duCfgUpdate->protocolIEs.list.array, elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2777 DU_FREE(f1apDuCfg->choice.initiatingMessage, (Size)sizeof(InitiatingMessage_t));
2778 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2780 /* Checking encode results */
2781 if(encRetVal.encoded == ENCODE_FAIL)
2783 DU_LOG("F1AP : Could not encode DUConfigUpdate structure (at %s)\n",encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
2788 DU_LOG("\nF1AP : Created APER encoded buffer for DUConfigUpdate\n");
2789 for(int i=0; i< encBufSize; i++)
2791 printf("%x",encBuf[i]);
2796 if(SendF1APMsg(DU_APP_MEM_REGION, DU_POOL) != ROK)
2798 DU_LOG("\nF1AP : Sending GND-DU Config Update failed");
2802 }/* End of BuildAndSendDUConfigUpdate */
2804 /*******************************************************************
2806 * @brief Builds and sends the ULRRCMessageTransfer
2810 * Function : BuildAndSendULRRCMessageTransfer
2812 * Functionality: Constructs the UL RRC Message Transfer and sends
2813 * it to the CU through SCTP.
2817 * @return ROK - success
2820 * ****************************************************************/
2821 S16 BuildAndSendULRRCMessageTransfer()
2827 F1AP_PDU_t *f1apMsg = NULL;
2828 ULRRCMessageTransfer_t *ulRRCMsg;
2829 asn_enc_rval_t encRetVal; /* Encoder return value */
2831 DU_LOG("\n F1AP : Building UL RRC Message Transfer Message\n");
2833 DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t));
2834 if(f1apMsg == NULLP)
2836 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
2840 f1apMsg->present = F1AP_PDU_PR_initiatingMessage;
2841 DU_ALLOC(f1apMsg->choice.initiatingMessage,
2842 sizeof(InitiatingMessage_t));
2843 if(f1apMsg->choice.initiatingMessage == NULLP)
2845 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
2846 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
2850 f1apMsg->choice.initiatingMessage->procedureCode = \
2851 ProcedureCode_id_ULRRCMessageTransfer;
2852 f1apMsg->choice.initiatingMessage->criticality = Criticality_ignore;
2853 f1apMsg->choice.initiatingMessage->value.present = \
2854 InitiatingMessage__value_PR_ULRRCMessageTransfer;
2856 &f1apMsg->choice.initiatingMessage->value.choice.ULRRCMessageTransfer;
2858 ulRRCMsg->protocolIEs.list.count = elementCnt;
2859 ulRRCMsg->protocolIEs.list.size = \
2860 elementCnt * sizeof(ULRRCMessageTransferIEs_t *);
2862 /* Initialize the F1Setup members */
2863 DU_ALLOC(ulRRCMsg->protocolIEs.list.array, \
2864 elementCnt * sizeof(ULRRCMessageTransferIEs_t *));
2865 if(ulRRCMsg->protocolIEs.list.array == NULLP)
2867 DU_LOG(" F1AP : Memory allocation for UL RRC MessageTransferIEs failed");
2868 DU_FREE(f1apMsg->choice.initiatingMessage,
2869 sizeof(InitiatingMessage_t));
2870 DU_FREE(f1apMsg,(Size)sizeof(F1AP_PDU_t));
2874 for(idx=0; idx<elementCnt; idx++)
2876 DU_ALLOC(ulRRCMsg->protocolIEs.list.array[idx],\
2877 sizeof(ULRRCMessageTransferIEs_t));
2878 if(ulRRCMsg->protocolIEs.list.array[idx] == NULLP)
2880 for(ieId=0; ieId<idx; ieId++)
2882 DU_FREE(ulRRCMsg->protocolIEs.list.array[ieId],\
2883 sizeof(ULRRCMessageTransferIEs_t));
2885 DU_FREE(ulRRCMsg->protocolIEs.list.array,\
2886 elementCnt * sizeof(ULRRCMessageTransferIEs_t *));
2887 DU_FREE(f1apMsg->choice.initiatingMessage,\
2888 sizeof(InitiatingMessage_t));
2889 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
2896 /*GNB CU UE F1AP ID*/
2897 ulRRCMsg->protocolIEs.list.array[idx]->id = \
2898 ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID;
2899 ulRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
2900 ulRRCMsg->protocolIEs.list.array[idx]->value.present = \
2901 ULRRCMessageTransferIEs__value_PR_GNB_CU_UE_F1AP_ID;
2902 ulRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_CU_UE_F1AP_ID = CU_ID;
2904 /*GNB DU UE F1AP ID*/
2906 ulRRCMsg->protocolIEs.list.array[idx]->id = \
2907 ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
2908 ulRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
2909 ulRRCMsg->protocolIEs.list.array[idx]->value.present = \
2910 ULRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID;
2911 ulRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID = DU_ID;
2915 ulRRCMsg->protocolIEs.list.array[idx]->id = \
2916 ProtocolIE_ID_id_SRBID;
2917 ulRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
2918 ulRRCMsg->protocolIEs.list.array[idx]->value.present = \
2919 ULRRCMessageTransferIEs__value_PR_SRBID;
2920 ulRRCMsg->protocolIEs.list.array[idx]->value.choice.SRBID = UL_SRBID;
2925 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
2927 /* Encode the F1SetupRequest type as APER */
2928 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
2930 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\
2932 /* Encode results */
2933 if(encRetVal.encoded == ENCODE_FAIL)
2935 DU_LOG( "\n F1AP : Could not encode ULRRCMessageTransfer structure (at %s)\n",\
2936 encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
2941 DU_LOG("\n F1AP : Created APER encoded buffer for ULRRCMessageTransfer\n");
2942 for(int i=0; i< encBufSize; i++)
2944 printf("%x",encBuf[i]);
2949 if(SendF1APMsg(DU_APP_MEM_REGION,DU_POOL) != ROK)
2951 DU_LOG("\n F1AP : Sending UL RRC Message Transfer Failed");
2955 }/* End of BuildAndSendULRRCMessageTransfer*/
2957 /*******************************************************************
2959 * @brief Builds and sends the InitialULRRCMessage
2963 * Function : BuildAndSendRRCSetupReq
2965 * Functionality: Constructs the Initial UL RRC Message Transfer and sends
2966 * it to the CU through SCTP.
2970 * @return ROK - success
2973 * ****************************************************************/
2974 S16 BuildAndSendRRCSetupReq()
2980 F1AP_PDU_t *f1apMsg = NULL;
2981 InitialULRRCMessageTransfer_t *initULRRCMsg;
2982 asn_enc_rval_t encRetVal; /* Encoder return value */
2984 DU_LOG("\n F1AP : Building RRC Setup Request\n");
2986 DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t));
2987 if(f1apMsg == NULLP)
2989 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
2993 f1apMsg->present = F1AP_PDU_PR_initiatingMessage;
2994 DU_ALLOC(f1apMsg->choice.initiatingMessage,sizeof(InitiatingMessage_t));
2995 if(f1apMsg->choice.initiatingMessage == NULLP)
2997 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
2998 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3002 f1apMsg->choice.initiatingMessage->procedureCode = \
3003 ProcedureCode_id_InitialULRRCMessageTransfer;
3004 f1apMsg->choice.initiatingMessage->criticality = Criticality_ignore;
3005 f1apMsg->choice.initiatingMessage->value.present = \
3006 InitiatingMessage__value_PR_InitialULRRCMessageTransfer;
3008 &f1apMsg->choice.initiatingMessage->value.choice.InitialULRRCMessageTransfer;
3010 initULRRCMsg->protocolIEs.list.count = elementCnt;
3011 initULRRCMsg->protocolIEs.list.size = \
3012 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *);
3014 /* Initialize the F1Setup members */
3015 DU_ALLOC(initULRRCMsg->protocolIEs.list.array, \
3016 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *));
3017 if(initULRRCMsg->protocolIEs.list.array == NULLP)
3019 DU_LOG(" F1AP : Memory allocation for RRCSetupRequestMessageTransferIEs failed");
3020 DU_FREE(f1apMsg->choice.initiatingMessage,
3021 sizeof(InitiatingMessage_t));
3022 DU_FREE(f1apMsg,(Size)sizeof(F1AP_PDU_t));
3026 for(idx=0; idx<elementCnt; idx++)
3028 DU_ALLOC(initULRRCMsg->protocolIEs.list.array[idx],\
3029 sizeof(InitialULRRCMessageTransferIEs_t));
3030 if(initULRRCMsg->protocolIEs.list.array[idx] == NULLP)
3032 for(ieId=0; ieId<idx; ieId++)
3034 DU_FREE(initULRRCMsg->protocolIEs.list.array[ieId],\
3035 sizeof(InitialULRRCMessageTransferIEs_t));
3037 DU_FREE(initULRRCMsg->protocolIEs.list.array,\
3038 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *));
3039 DU_FREE(f1apMsg->choice.initiatingMessage,\
3040 sizeof(InitiatingMessage_t));
3041 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3048 /*GNB DU UE F1AP ID*/
3049 initULRRCMsg->protocolIEs.list.array[idx]->id = \
3050 ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
3051 initULRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3052 initULRRCMsg->protocolIEs.list.array[idx]->value.present = \
3053 InitialULRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID;
3054 initULRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID = DU_ID;
3058 initULRRCMsg->protocolIEs.list.array[idx]->id = \
3059 ProtocolIE_ID_id_NRCGI;
3060 initULRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3061 initULRRCMsg->protocolIEs.list.array[idx]->value.present = \
3062 InitialULRRCMessageTransferIEs__value_PR_NRCGI;
3064 BuildNrcgi(&initULRRCMsg->protocolIEs.list.array[idx]->value.choice.NRCGI);
3067 DU_FREE(initULRRCMsg->protocolIEs.list.array[idx]->value.choice.NRCGI.\
3068 nRCellIdentity.buf,initULRRCMsg->protocolIEs.list.array[idx]->\
3069 value.choice.NRCGI.nRCellIdentity.size);
3070 DU_FREE(initULRRCMsg->protocolIEs.list.array[idx]->value.choice.NRCGI.\
3071 pLMN_Identity.buf,initULRRCMsg->protocolIEs.list.array[idx]->\
3072 value.choice.NRCGI.pLMN_Identity.size);
3073 for(idx=0; idx<elementCnt; idx++)
3075 DU_FREE(initULRRCMsg->protocolIEs.list.array[idx],\
3076 sizeof(InitialULRRCMessageTransferIEs_t));
3078 DU_FREE(initULRRCMsg->protocolIEs.list.array,\
3079 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *));
3080 DU_FREE(f1apMsg->choice.initiatingMessage,\
3081 sizeof(InitiatingMessage_t));
3082 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3089 initULRRCMsg->protocolIEs.list.array[idx]->id = \
3090 ProtocolIE_ID_id_C_RNTI;
3091 initULRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3092 initULRRCMsg->protocolIEs.list.array[idx]->value.present = \
3093 InitialULRRCMessageTransferIEs__value_PR_C_RNTI;
3094 initULRRCMsg->protocolIEs.list.array[idx]->value.choice.C_RNTI = CRNTI;
3097 // Need to fill this.
3099 /*DUtoCURRCContainer*/
3100 //Need to fill this too.
3103 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
3105 /* Encode the F1SetupRequest type as APER */
3106 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
3108 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\
3110 /* Encode results */
3111 if(encRetVal.encoded == ENCODE_FAIL)
3113 DU_LOG( "\n F1AP : Could not encode Initial UL RRC Message Transfer structure (at %s)\n",\
3114 encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
3119 DU_LOG("\n F1AP : Created APER encoded buffer for Initial UL RRC Message transfer\n");
3120 for(int i=0; i< encBufSize; i++)
3122 printf("%x",encBuf[i]);
3127 if(SendF1APMsg(DU_APP_MEM_REGION,DU_POOL) != ROK)
3129 DU_LOG("\n F1AP : Sending Initial UL RRC Message Transfer Failed");
3133 }/* End of BuildAndSendRRCSetupReq*/
3135 /*******************************************************************
3137 * @brief Builds Special cell list for UE Setup Request
3141 * Function : BuildSplCellList
3143 * Functionality: Constructs the Special Cell list for UESetReq
3145 * @params[in] SCell_ToBeSetup_List_t *spCellLst
3147 * @return ROK - success
3150 * ****************************************************************/
3151 S16 BuildSplCellList(SCell_ToBeSetup_List_t *spCellLst)
3158 spCellLst->list.count = cellCnt;
3159 spCellLst->list.size = cellCnt * sizeof(struct SCell_ToBeSetup_ItemIEs *);
3160 DU_ALLOC(spCellLst->list.array,spCellLst->list.size);
3161 if(spCellLst->list.array == NULLP)
3165 for(idx=0; idx<cellCnt; idx++)
3167 DU_ALLOC(spCellLst->list.array[idx],sizeof(struct SCell_ToBeSetup_ItemIEs));
3168 if(spCellLst->list.array[idx] == NULLP)
3170 for(cellidx=0; cellidx<idx; cellidx++)
3172 DU_FREE(spCellLst->list.array[cellidx],sizeof(struct SCell_ToBeSetup_ItemIEs));
3174 DU_FREE(spCellLst->list.array,spCellLst->list.size);
3179 spCellLst->list.array[idx]->id = ProtocolIE_ID_id_SCell_ToBeSetup_Item;
3180 spCellLst->list.array[idx]->criticality = Criticality_ignore;
3181 spCellLst->list.array[idx]->value.present =\
3182 SCell_ToBeSetup_ItemIEs__value_PR_SCell_ToBeSetup_Item;
3183 /* Special Cell ID -NRCGI */
3184 ret = BuildNrcgi(&spCellLst->list.array[idx]->value.choice.SCell_ToBeSetup_Item.sCell_ID);
3187 for(cellidx=0; cellidx<cellCnt; cellidx++)
3189 DU_FREE(spCellLst->list.array[cellidx],sizeof(struct
3190 SCell_ToBeSetup_ItemIEs));
3192 DU_FREE(spCellLst->list.array,spCellLst->list.size);
3195 /*Special Cell Index*/
3196 spCellLst->list.array[idx]->value.choice.SCell_ToBeSetup_Item.sCellIndex = 1;
3198 }/* End of BuildSplCellList*/
3200 /*******************************************************************
3202 * @brief Builds SRBS to be setup
3206 * Function : BuildSRBSetup
3208 * Functionality: Constructs the SRB's for UESetReq
3210 * @params[in] SRBs_ToBeSetup_List_t *srbSet
3212 * @return ROK - success
3215 * ****************************************************************/
3216 S16 BuildSRBSetup(SRBs_ToBeSetup_List_t *srbSet)
3222 srbSet->list.count = srbCnt;
3223 srbSet->list.size = srbCnt*sizeof(struct SRBs_ToBeSetup_ItemIEs *);
3224 DU_ALLOC(srbSet->list.array,srbSet->list.size);
3225 if(srbSet->list.array == NULLP)
3229 for(idx=0; idx<srbCnt; idx++)
3231 DU_ALLOC(srbSet->list.array[idx],sizeof(struct SRBs_ToBeSetup_ItemIEs));
3232 if(srbSet->list.array[idx] == NULLP)
3234 for(srbidx=0; srbidx<idx; srbidx++)
3236 DU_FREE(srbSet->list.array[srbidx],sizeof(struct SRBs_ToBeSetup_ItemIEs));
3238 DU_FREE(srbSet->list.array,srbSet->list.size);
3242 srbSet->list.array[idx]->id = ProtocolIE_ID_id_SRBs_ToBeSetup_Item;
3243 srbSet->list.array[idx]->criticality = Criticality_ignore;
3244 srbSet->list.array[idx]->value.present = \
3245 SRBs_ToBeSetup_ItemIEs__value_PR_SRBs_ToBeSetup_Item;
3246 srbSet->list.array[idx]->value.choice.SRBs_ToBeSetup_Item.sRBID = 2;
3248 }/* End of BuildSRBSetup*/
3250 /*******************************************************************
3252 * @brief Builds QOS Info for DRB Setum Item
3256 * Function : BuildQOSInfo
3258 * Functionality: Constructs the QOS Info for DRB Setup Item
3260 * @params[in] QoSInformation_t *qosinfo
3262 * @return ROK - success
3265 * ****************************************************************/
3266 S16 BuildQOSInfo(QoSFlowLevelQoSParameters_t *drbQos)
3268 /* NonDynamic5QIDescriptor */
3269 drbQos->qoS_Characteristics.present = QoS_Characteristics_PR_non_Dynamic_5QI;
3270 DU_ALLOC(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI,sizeof(NonDynamic5QIDescriptor_t));
3271 if(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI == NULLP)
3276 drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->fiveQI = 0;
3278 DU_ALLOC(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
3279 sizeof(AveragingWindow_t));
3280 if(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow == \
3283 DU_FREE(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI,\
3284 sizeof(NonDynamic5QIDescriptor_t));
3287 *(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow) = 0;
3288 /*MaxDataBurstVolume*/
3289 DU_ALLOC(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,\
3290 sizeof(MaxDataBurstVolume_t));
3291 if(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume == \
3294 DU_FREE(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
3295 sizeof(AveragingWindow_t));
3296 DU_FREE(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI,\
3297 sizeof(NonDynamic5QIDescriptor_t));
3300 *(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume) = 0;
3302 /*nRGRAN Allocation Retention Priority*/
3303 drbQos->nGRANallocationRetentionPriority.priorityLevel = \
3304 PriorityLevel_highest;
3305 drbQos->nGRANallocationRetentionPriority.pre_emptionCapability = \
3306 Pre_emptionCapability_may_trigger_pre_emption;
3307 drbQos->nGRANallocationRetentionPriority.pre_emptionVulnerability = \
3308 Pre_emptionVulnerability_not_pre_emptable;
3310 /* TO DO: GBR_QoSFlowInformation */
3312 }/*End of BuildQOSInfo*/
3314 /*******************************************************************
3316 * @brief Builds SNSSAI
3320 * Function : BuildSNSSAI
3322 * Functionality: Constructs the SNSSAI For DRB list
3324 * @params[in] SNSSAI_t *snssai
3326 * @return ROK - success
3329 * ****************************************************************/
3330 S16 BuildSNSSAI(SNSSAI_t *snssai)
3334 snssai->sST.size = sizeof(U8);
3335 DU_ALLOC(snssai->sST.buf,snssai->sST.size);
3336 if(snssai->sST.buf == NULLP)
3340 snssai->sST.buf[0] = 3;
3342 DU_ALLOC(snssai->sD,sizeof(OCTET_STRING_t));
3343 if(snssai->sD == NULLP)
3345 DU_FREE(snssai->sST.buf,snssai->sST.size);
3348 snssai->sD->size = 3*sizeof(U8);
3349 DU_ALLOC(snssai->sD->buf,snssai->sD->size);
3350 if(snssai->sD->buf == NULLP)
3352 DU_FREE(snssai->sD,sizeof(OCTET_STRING_t));
3353 DU_FREE(snssai->sST.buf,snssai->sST.size);
3356 snssai->sD->buf[0] = 3;
3357 snssai->sD->buf[1] = 6;
3358 snssai->sD->buf[2] = 9;
3360 }/*End of BuildSNSSAI*/
3362 /*******************************************************************
3364 * @brief Builds the flow map.
3368 * Function : BuildFlowsMap
3370 * Functionality: Constructs the flowmap For DRB list
3372 * @params[in] Flows_Mapped_To_DRB_List_t *flowMap
3374 * @return ROK - success
3377 * ****************************************************************/
3378 S16 BuildFlowsMap(Flows_Mapped_To_DRB_List_t *flowMap)
3385 flowMap->list.count = flowCnt;
3386 flowMap->list.size = flowCnt * sizeof(struct Flows_Mapped_To_DRB_Item *);
3387 DU_ALLOC(flowMap->list.array,flowMap->list.size);
3388 if(flowMap->list.array == NULLP)
3392 for(idx=0; idx<flowCnt; idx++)
3394 DU_ALLOC(flowMap->list.array[idx],sizeof(struct Flows_Mapped_To_DRB_Item));
3395 if(flowMap->list.array[idx] == NULLP)
3397 for(flowidx=0; flowidx<idx; flowidx++)
3399 DU_FREE(flowMap->list.array[flowidx],sizeof(struct \
3400 Flows_Mapped_To_DRB_Item));
3403 DU_FREE(flowMap->list.array,flowMap->list.size);
3407 flowMap->list.array[idx]->qoSFlowIdentifier = 0;
3408 ret = BuildQOSInfo(&flowMap->list.array[idx]->qoSFlowLevelQoSParameters);
3411 DU_FREE(flowMap->list.array[idx]->qoSFlowLevelQoSParameters.\
3412 qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,\
3413 sizeof(MaxDataBurstVolume_t));
3414 DU_FREE(flowMap->list.array[idx]->qoSFlowLevelQoSParameters.\
3415 qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
3416 sizeof(AveragingWindow_t));
3417 DU_FREE(flowMap->list.array[idx]->qoSFlowLevelQoSParameters.\
3418 qoS_Characteristics.choice.non_Dynamic_5QI,\
3419 sizeof(NonDynamic5QIDescriptor_t));
3420 for(idx=0; idx<flowCnt; idx++)
3422 DU_FREE(flowMap->list.array[idx],sizeof(struct Flows_Mapped_To_DRB_Item));
3424 DU_FREE(flowMap->list.array,flowMap->list.size);
3428 }/*End of BuildFlowsMap*/
3430 /*******************************************************************
3432 * @brief Builds the Uplink Tunnel Info
3436 * Function : BuildULTnlInfo
3438 * Functionality: Constructs the UL TnlInfo For DRB list
3440 * @params[in] ULUPTNLInformation_ToBeSetup_List_t *ulInfo
3442 * @return ROK - success
3445 * ****************************************************************/
3446 S16 BuildULTnlInfo(ULUPTNLInformation_ToBeSetup_List_t *ulInfo)
3452 ulInfo->list.count = ulCnt;
3453 ulInfo->list.size = ulCnt * sizeof(struct \
3454 ULUPTNLInformation_ToBeSetup_Item *);
3455 DU_ALLOC(ulInfo->list.array,ulInfo->list.size);
3456 if(ulInfo->list.array == NULLP)
3460 for(idx=0; idx<ulCnt; idx++)
3462 DU_ALLOC(ulInfo->list.array[idx],sizeof(struct \
3463 ULUPTNLInformation_ToBeSetup_Item));
3464 if(ulInfo->list.array[idx] == NULLP)
3466 for(ulidx=0; ulidx<idx; ulidx++)
3468 DU_FREE(ulInfo->list.array[ulidx],sizeof(struct \
3469 ULUPTNLInformation_ToBeSetup_Item));
3471 DU_FREE(ulInfo->list.array,ulInfo->list.size);
3476 ulInfo->list.array[idx]->uLUPTNLInformation.present = \
3477 UPTransportLayerInformation_PR_gTPTunnel;
3479 DU_ALLOC(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel,\
3480 sizeof(struct GTPTunnel));
3481 if(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel == NULLP)
3483 for(idx=0; idx<ulCnt; idx++)
3485 DU_FREE(ulInfo->list.array[idx],sizeof(struct \
3486 ULUPTNLInformation_ToBeSetup_Item));
3488 DU_FREE(ulInfo->list.array,ulInfo->list.size);
3491 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3492 transportLayerAddress.size = 4*sizeof(U8);
3493 DU_ALLOC(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3494 transportLayerAddress.buf,ulInfo->list.array[idx]->\
3495 uLUPTNLInformation.choice.gTPTunnel->transportLayerAddress.size);
3496 if(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3497 transportLayerAddress.buf == NULLP)
3499 DU_FREE(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel,\
3500 sizeof(struct GTPTunnel));
3501 for(idx=0; idx<ulCnt; idx++)
3503 DU_FREE(ulInfo->list.array[idx],sizeof(struct \
3504 ULUPTNLInformation_ToBeSetup_Item));
3506 DU_FREE(ulInfo->list.array,ulInfo->list.size);
3509 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3510 transportLayerAddress.buf[0] = 4;
3511 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3512 transportLayerAddress.buf[1] = 4;
3513 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3514 transportLayerAddress.buf[2] = 4;
3515 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3516 transportLayerAddress.buf[3] = 5;
3517 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3518 transportLayerAddress.bits_unused = 0;
3520 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.size\
3522 DU_ALLOC(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3523 gTP_TEID.buf,ulInfo->list.array[idx]->uLUPTNLInformation.choice.\
3524 gTPTunnel->gTP_TEID.size);
3525 if(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.buf\
3528 DU_FREE(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3529 transportLayerAddress.buf,ulInfo->list.array[idx]->\
3530 uLUPTNLInformation.choice.gTPTunnel->transportLayerAddress.size);
3531 DU_FREE(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel,\
3532 sizeof(struct GTPTunnel));
3533 for(idx=0; idx<ulCnt; idx++)
3535 DU_FREE(ulInfo->list.array[idx],sizeof(struct \
3536 ULUPTNLInformation_ToBeSetup_Item));
3538 DU_FREE(ulInfo->list.array,ulInfo->list.size);
3541 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3542 gTP_TEID.buf[0] = 11;
3543 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3544 gTP_TEID.buf[1] = 0;
3545 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3546 gTP_TEID.buf[2] = 0;
3547 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3548 gTP_TEID.buf[3] = 1;
3551 }/*End of BuildULTnlInfo*/
3553 /*******************************************************************
3555 * @brief Builds DRBS to be setup
3559 * Function : BuildDRBSetup
3561 * Functionality: Constructs the DRB's for UESetReq
3563 * @params[in] DRBs_ToBeSetup_List_t *drbSet
3565 * @return ROK - success
3568 * ****************************************************************/
3569 S16 BuildDRBSetup(DRBs_ToBeSetup_List_t *drbSet)
3579 DRBs_ToBeSetup_Item_t *drbSetItem;
3581 drbSet->list.count = drbCnt;
3582 drbSet->list.size = drbCnt*sizeof(struct DRBs_ToBeSetup_ItemIEs *);
3583 DU_ALLOC(drbSet->list.array,drbSet->list.size);
3584 if(drbSet->list.array == NULLP)
3588 for(idx=0; idx<drbCnt; idx++)
3590 DU_ALLOC(drbSet->list.array[idx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3591 if(drbSet->list.array[idx] == NULLP)
3593 for(drbidx=0; drbidx<idx; drbidx++)
3595 DU_FREE(drbSet->list.array[drbidx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3597 DU_FREE(drbSet->list.array,drbSet->list.size);
3602 drbSet->list.array[idx]->id = ProtocolIE_ID_id_DRBs_ToBeSetup_Item;
3603 drbSet->list.array[idx]->criticality = Criticality_ignore;
3604 drbSet->list.array[idx]->value.present = \
3605 DRBs_ToBeSetup_ItemIEs__value_PR_DRBs_ToBeSetup_Item;
3606 drbSetItem = &drbSet->list.array[idx]->value.choice.DRBs_ToBeSetup_Item;
3608 drbSetItem->dRBID = 1;
3610 drbSetItem->qoSInformation.present = QoSInformation_PR_choice_extension;
3611 DU_ALLOC(drbSetItem->qoSInformation.choice.choice_extension,sizeof(struct\
3612 QoSInformation_ExtIEs));
3613 if(drbSetItem->qoSInformation.choice.choice_extension == NULLP)
3615 for(idx=0; idx<drbCnt; idx++)
3617 DU_FREE(drbSet->list.array[idx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3619 DU_FREE(drbSet->list.array,drbSet->list.size);
3622 drbSetItem->qoSInformation.choice.choice_extension->id = \
3623 ProtocolIE_ID_id_DRB_Information;
3624 drbSetItem->qoSInformation.choice.choice_extension->criticality = \
3626 drbSetItem->qoSInformation.choice.choice_extension->value.present = \
3627 QoSInformation_ExtIEs__value_PR_DRB_Information;
3628 ret = BuildQOSInfo(&drbSetItem->qoSInformation.choice.\
3629 choice_extension->value.choice.DRB_Information.dRB_QoS);
3632 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(struct\
3633 QoSInformation_ExtIEs));
3634 for(drbidx=0; drbidx<drbCnt; drbidx++)
3636 DU_FREE(drbSet->list.array[drbidx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3638 DU_FREE(drbSet->list.array,drbSet->list.size);
3642 ret = BuildSNSSAI(&drbSetItem->qoSInformation.choice.\
3643 choice_extension->value.choice.DRB_Information.sNSSAI);
3646 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3647 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3648 non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3649 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3650 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3651 non_Dynamic_5QI->maxDataBurstVolume,sizeof(MaxDataBurstVolume_t));
3652 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(struct\
3653 QoSInformation_ExtIEs));
3654 for(drbidx=0; drbidx<drbCnt; drbidx++)
3656 DU_FREE(drbSet->list.array[drbidx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3658 DU_FREE(drbSet->list.array,drbSet->list.size);
3661 /*Flows mapped to DRB List*/
3662 ret = BuildFlowsMap(&drbSetItem->qoSInformation.choice.\
3663 choice_extension->value.choice.DRB_Information.flows_Mapped_To_DRB_List);
3666 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3667 choice.DRB_Information.sNSSAI.sD,sizeof(OCTET_STRING_t));
3668 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3669 choice.DRB_Information.sNSSAI.sD->buf,drbSetItem->qoSInformation.\
3670 choice.choice_extension->value.choice.DRB_Information.\
3672 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3673 choice.DRB_Information.sNSSAI.sST.buf,drbSetItem->qoSInformation.\
3674 choice.choice_extension->value.choice.DRB_Information.\
3676 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3677 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3678 non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3679 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3680 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3681 non_Dynamic_5QI->maxDataBurstVolume,sizeof(MaxDataBurstVolume_t));
3682 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(struct\
3683 QoSInformation_ExtIEs));
3684 for(drbidx=0; drbidx<drbCnt; drbidx++)
3686 DU_FREE(drbSet->list.array[drbidx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3688 DU_FREE(drbSet->list.array,drbSet->list.size);
3691 /*ULUPTNLInformation To Be Setup List*/
3692 ret = BuildULTnlInfo(&drbSetItem->uLUPTNLInformation_ToBeSetup_List);
3696 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3697 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3698 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3699 choice.non_Dynamic_5QI->maxDataBurstVolume,\
3700 sizeof(MaxDataBurstVolume_t));
3701 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3702 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3703 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3704 choice.non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3705 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3706 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3707 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3708 choice.non_Dynamic_5QI,sizeof(NonDynamic5QIDescriptor_t));
3709 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3710 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3711 array,drbSetItem->qoSInformation.choice.choice_extension->\
3712 value.choice.DRB_Information.flows_Mapped_To_DRB_List.list.size);
3714 for(flowidx=0; flowidx<flowCnt;flowidx++)
3716 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3717 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3718 array[flowidx],sizeof(struct Flows_Mapped_To_DRB_Item));
3720 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3721 choice.DRB_Information.sNSSAI.sD,sizeof(OCTET_STRING_t));
3722 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3723 choice.DRB_Information.sNSSAI.sD->buf,drbSetItem->qoSInformation.\
3724 choice.choice_extension->value.choice.DRB_Information.\
3726 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3727 choice.DRB_Information.sNSSAI.sST.buf,drbSetItem->qoSInformation.\
3728 choice.choice_extension->value.choice.DRB_Information.\
3730 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3731 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3732 non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3733 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3734 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3735 non_Dynamic_5QI->maxDataBurstVolume,sizeof(MaxDataBurstVolume_t));
3736 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(struct\
3737 QoSInformation_ExtIEs));
3738 for(drbidx=0; drbidx<drbCnt; drbidx++)
3740 DU_FREE(drbSet->list.array[drbidx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3742 DU_FREE(drbSet->list.array,drbSet->list.size);
3746 drbSetItem->rLCMode = RLCMode_rlc_um_bidirectional;
3748 /*UL Configuration*/
3750 DU_ALLOC(drbSetItem->uLConfiguration,sizeof(struct ULConfiguration));
3751 if(drbSetItem->uLConfiguration == NULLP)
3754 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3755 uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.buf,\
3756 drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3757 uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.size);
3758 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3759 uLUPTNLInformation.choice.gTPTunnel->transportLayerAddress.buf,\
3760 drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3761 uLUPTNLInformation.choice.gTPTunnel->transportLayerAddress.size);
3762 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3763 uLUPTNLInformation.choice.gTPTunnel,sizeof(struct GTPTunnel));
3764 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array,\
3765 drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.size);
3766 for(ulidx=0; ulidx<ulCnt; ulidx++)
3768 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx],\
3769 sizeof(struct ULUPTNLInformation_ToBeSetup_Item));
3772 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3773 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3774 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3775 choice.non_Dynamic_5QI->maxDataBurstVolume,\
3776 sizeof(MaxDataBurstVolume_t));
3777 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3778 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3779 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3780 choice.non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3781 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3782 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3783 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3784 choice.non_Dynamic_5QI,sizeof(NonDynamic5QIDescriptor_t));
3785 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3786 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3787 array,drbSetItem->qoSInformation.choice.choice_extension->value.\
3788 choice.DRB_Information.flows_Mapped_To_DRB_List.list.size);
3790 for(flowidx=0; flowidx<flowCnt;flowidx++)
3792 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3793 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3794 array[flowidx],sizeof(struct Flows_Mapped_To_DRB_Item));
3796 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3797 choice.DRB_Information.sNSSAI.sD,sizeof(OCTET_STRING_t));
3798 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3799 choice.DRB_Information.sNSSAI.sD->buf,drbSetItem->qoSInformation.\
3800 choice.choice_extension->value.choice.DRB_Information.\
3802 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3803 choice.DRB_Information.sNSSAI.sST.buf,drbSetItem->qoSInformation.\
3804 choice.choice_extension->value.choice.DRB_Information.\
3806 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3807 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3808 non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3809 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3810 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3811 non_Dynamic_5QI->maxDataBurstVolume,sizeof(MaxDataBurstVolume_t));
3812 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(struct\
3813 QoSInformation_ExtIEs));
3814 for(drbidx=0; drbidx<drbCnt; drbidx++)
3816 DU_FREE(drbSet->list.array[drbidx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3818 DU_FREE(drbSet->list.array,drbSet->list.size);
3821 drbSetItem->uLConfiguration->uLUEConfiguration = ULUEConfiguration_no_data;
3823 }/* End of BuildDRBSetup*/
3825 /*******************************************************************
3827 * @brief Builds and sends the UE Setup Request
3831 * Function : BuildAndSendUESetReq
3833 * Functionality: Constructs the UE Setup Request and sends
3834 * it to the CU through SCTP.
3838 * @return ROK - success
3841 * ****************************************************************/
3842 S16 BuildAndSendUESetReq()
3858 F1AP_PDU_t *f1apMsg = NULL;
3859 UEContextSetupRequest_t *ueSetReq;
3860 asn_enc_rval_t encRetVal; /* Encoder return value */
3862 DU_LOG("\n F1AP : Building UE Context Setup Request\n");
3864 DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t));
3865 if(f1apMsg == NULLP)
3867 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
3871 f1apMsg->present = F1AP_PDU_PR_initiatingMessage;
3872 DU_ALLOC(f1apMsg->choice.initiatingMessage,
3873 sizeof(InitiatingMessage_t));
3874 if(f1apMsg->choice.initiatingMessage == NULLP)
3876 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
3877 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3881 f1apMsg->choice.initiatingMessage->procedureCode = \
3882 ProcedureCode_id_UEContextSetup;
3883 f1apMsg->choice.initiatingMessage->criticality = Criticality_reject;
3884 f1apMsg->choice.initiatingMessage->value.present = \
3885 InitiatingMessage__value_PR_UEContextSetupRequest;
3887 &f1apMsg->choice.initiatingMessage->value.choice.UEContextSetupRequest;
3889 ueSetReq->protocolIEs.list.count = elementCnt;
3890 ueSetReq->protocolIEs.list.size = \
3891 elementCnt * sizeof(UEContextSetupRequestIEs_t *);
3893 /* Initialize the UESetup members */
3894 DU_ALLOC(ueSetReq->protocolIEs.list.array, \
3895 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
3896 if(ueSetReq->protocolIEs.list.array == NULLP)
3898 DU_LOG(" F1AP : Memory allocation for UE Context SetupRequest failed");
3899 DU_FREE(f1apMsg->choice.initiatingMessage,
3900 sizeof(InitiatingMessage_t));
3901 DU_FREE(f1apMsg,(Size)sizeof(F1AP_PDU_t));
3905 for(idx=0; idx<elementCnt; idx++)
3907 DU_ALLOC(ueSetReq->protocolIEs.list.array[idx],\
3908 sizeof(UEContextSetupRequestIEs_t));
3909 if(ueSetReq->protocolIEs.list.array[idx] == NULLP)
3911 for(ieId=0; ieId<idx; ieId++)
3913 DU_FREE(ueSetReq->protocolIEs.list.array[ieId],\
3914 sizeof(UEContextSetupRequestIEs_t));
3916 DU_FREE(ueSetReq->protocolIEs.list.array,\
3917 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
3918 DU_FREE(f1apMsg->choice.initiatingMessage,\
3919 sizeof(InitiatingMessage_t));
3920 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3927 /*GNB CU UE F1AP ID*/
3928 ueSetReq->protocolIEs.list.array[idx]->id = \
3929 ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID;
3930 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3931 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3932 UEContextSetupRequestIEs__value_PR_GNB_CU_UE_F1AP_ID;
3933 ueSetReq->protocolIEs.list.array[idx]->value.choice.GNB_CU_UE_F1AP_ID = CU_ID;
3935 /*GNB DU UE F1AP ID*/
3937 ueSetReq->protocolIEs.list.array[idx]->id = \
3938 ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
3939 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_ignore;
3940 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3941 UEContextSetupRequestIEs__value_PR_GNB_DU_UE_F1AP_ID;
3942 ueSetReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID = DU_ID;
3946 ueSetReq->protocolIEs.list.array[idx]->id = \
3947 ProtocolIE_ID_id_SpCell_ID;
3948 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3949 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3950 UEContextSetupRequestIEs__value_PR_NRCGI;
3952 BuildNrcgi(&ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI);
3956 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
3957 nRCellIdentity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
3958 choice.NRCGI.nRCellIdentity.size));
3959 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
3960 pLMN_Identity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
3961 choice.NRCGI.pLMN_Identity.size));
3962 for(idx=0; idx<elementCnt; idx++)
3964 DU_FREE(ueSetReq->protocolIEs.list.array[idx],\
3965 sizeof(InitialULRRCMessageTransferIEs_t));
3967 DU_FREE(ueSetReq->protocolIEs.list.array,\
3968 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *));
3969 DU_FREE(f1apMsg->choice.initiatingMessage,\
3970 sizeof(InitiatingMessage_t));
3971 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3976 /*Served Cell Index*/
3978 ueSetReq->protocolIEs.list.array[idx]->id = \
3979 ProtocolIE_ID_id_ServCellIndex;
3980 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3981 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3982 UEContextSetupRequestIEs__value_PR_ServCellIndex;
3983 ueSetReq->protocolIEs.list.array[idx]->value.choice.ServCellIndex = \
3986 /*CellULConfigured*/
3988 ueSetReq->protocolIEs.list.array[idx]->id = \
3989 ProtocolIE_ID_id_SpCellULConfigured;
3990 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_ignore;
3991 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3992 UEContextSetupRequestIEs__value_PR_CellULConfigured;
3993 ueSetReq->protocolIEs.list.array[idx]->value.choice.CellULConfigured = \
3994 CellULConfigured_none;
3997 /*CUtoDURRCContainer*/
3999 ueSetReq->protocolIEs.list.array[idx]->id = \
4000 ProtocolIE_ID_id_CUtoDURRCInformation;
4001 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
4002 ueSetReq->protocolIEs.list.array[idx]->value.present = \
4003 UEContextSetupRequestIEs__value_PR_CUtoDURRCInformation;
4005 /*Special Cells to be SetupList*/
4007 ueSetReq->protocolIEs.list.array[idx]->id = \
4008 ProtocolIE_ID_id_SCell_ToBeSetup_List;
4009 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_ignore;
4010 ueSetReq->protocolIEs.list.array[idx]->value.present = \
4011 UEContextSetupRequestIEs__value_PR_SCell_ToBeSetup_List;
4013 ret = BuildSplCellList(&ueSetReq->protocolIEs.\
4014 list.array[idx]->value.choice.SCell_ToBeSetup_List);
4017 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4018 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4019 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.buf,\
4020 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4021 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4022 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.size);
4023 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4024 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4025 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.buf,\
4026 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4027 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4028 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.size);
4029 for(spId=0; spId<cellCnt; spId++)
4031 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4032 SCell_ToBeSetup_List.list.array[spId],sizeof(struct
4033 SCell_ToBeSetup_ItemIEs));
4035 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4036 SCell_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
4037 array[idx]->value.choice.SCell_ToBeSetup_List.list.size);
4040 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
4041 nRCellIdentity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
4042 choice.NRCGI.nRCellIdentity.size));
4043 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
4044 pLMN_Identity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
4045 choice.NRCGI.pLMN_Identity.size));
4046 for(idx=0; idx<elementCnt; idx++)
4048 DU_FREE(ueSetReq->protocolIEs.list.array[idx],\
4049 sizeof(UEContextSetupRequestIEs_t));
4051 DU_FREE(ueSetReq->protocolIEs.list.array,\
4052 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
4053 DU_FREE(f1apMsg->choice.initiatingMessage,\
4054 sizeof(InitiatingMessage_t));
4055 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
4058 /*SRBs To Be Setup List*/
4060 ueSetReq->protocolIEs.list.array[idx]->id = \
4061 ProtocolIE_ID_id_SRBs_ToBeSetup_List;
4062 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
4063 ueSetReq->protocolIEs.list.array[idx]->value.present = \
4064 UEContextSetupRequestIEs__value_PR_SRBs_ToBeSetup_List;
4066 ret = BuildSRBSetup(&ueSetReq->protocolIEs.list.array[idx]->value.\
4067 choice.SRBs_ToBeSetup_List);
4071 for(srbId=0; srbId<srbCnt; srbId++)
4073 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4074 SRBs_ToBeSetup_List.list.array[srbId],\
4075 sizeof(struct SRBs_ToBeSetup_ItemIEs));
4077 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4078 SRBs_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
4079 array[idx]->value.choice.SRBs_ToBeSetup_List.list.size);
4081 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4082 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4083 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.buf,\
4084 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4085 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4086 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.size);
4087 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4088 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4089 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.buf,\
4090 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4091 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4092 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.size);
4093 for(spId=0; spId<cellCnt; spId++)
4095 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4096 SCell_ToBeSetup_List.list.array[spId],sizeof(struct
4097 SCell_ToBeSetup_ItemIEs));
4099 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4100 SCell_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
4101 array[idx]->value.choice.SCell_ToBeSetup_List.list.size);
4103 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
4104 nRCellIdentity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
4105 choice.NRCGI.nRCellIdentity.size));
4106 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
4107 pLMN_Identity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
4108 choice.NRCGI.pLMN_Identity.size));
4109 for(idx=0; idx<elementCnt; idx++)
4111 DU_FREE(ueSetReq->protocolIEs.list.array[idx],\
4112 sizeof(UEContextSetupRequestIEs_t));
4114 DU_FREE(ueSetReq->protocolIEs.list.array,\
4115 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
4116 DU_FREE(f1apMsg->choice.initiatingMessage,\
4117 sizeof(InitiatingMessage_t));
4118 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
4121 /*DRBs to Be Setup List*/
4123 ueSetReq->protocolIEs.list.array[idx]->id = \
4124 ProtocolIE_ID_id_DRBs_ToBeSetup_List;
4125 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
4126 ueSetReq->protocolIEs.list.array[idx]->value.present = \
4127 UEContextSetupRequestIEs__value_PR_DRBs_ToBeSetup_List;
4131 ret = BuildDRBSetup(&ueSetReq->protocolIEs.list.array[idx]->value.\
4132 choice.DRBs_ToBeSetup_List);
4135 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4136 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4137 DRBs_ToBeSetup_Item.uLConfiguration,\
4138 sizeof(struct ULConfiguration));
4140 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4141 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4142 DRBs_ToBeSetup_Item.uLUPTNLInformation_ToBeSetup_List.list.\
4143 array[ulidx]->uLUPTNLInformation.choice.gTPTunnel,\
4144 sizeof(struct GTPTunnel));
4145 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4146 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4147 DRBs_ToBeSetup_Item.uLUPTNLInformation_ToBeSetup_List.list.\
4148 array,ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4149 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4150 DRBs_ToBeSetup_Item.uLUPTNLInformation_ToBeSetup_List.list.size);
4151 for(ulidx=0; ulidx<ulCnt;ulidx++)
4153 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4154 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4155 DRBs_ToBeSetup_Item.uLUPTNLInformation_ToBeSetup_List.list.\
4156 array[ulidx],sizeof(struct ULUPTNLInformation_ToBeSetup_Item));
4159 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4160 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4161 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4162 choice_extension->value.choice.DRB_Information.\
4163 flows_Mapped_To_DRB_List.list.array[idx]->qoSFlowLevelQoSParameters.\
4164 qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
4165 sizeof(AveragingWindow_t));
4166 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4167 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4168 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4169 choice_extension->value.choice.DRB_Information.\
4170 flows_Mapped_To_DRB_List.list.array[idx]->qoSFlowLevelQoSParameters.\
4171 qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,\
4172 sizeof(MaxDataBurstVolume_t));
4173 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4174 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4175 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4176 choice_extension->value.choice.DRB_Information.\
4177 flows_Mapped_To_DRB_List.list.array,ueSetReq->protocolIEs.list.\
4178 array[idx]->value.choice.\
4179 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4180 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4181 choice_extension->value.choice.DRB_Information.\
4182 flows_Mapped_To_DRB_List.list.size);
4183 for(flowidx=0;flowidx<flowCnt;flowidx++)
4185 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4186 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4187 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4188 choice_extension->value.choice.DRB_Information.\
4189 flows_Mapped_To_DRB_List.list.array[flowidx],sizeof(struct
4190 Flows_Mapped_To_DRB_Item));
4192 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4193 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4194 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4195 choice_extension->value.choice.DRB_Information.sNSSAI.\
4196 sD->buf,ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4197 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4198 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4199 choice_extension->value.choice.DRB_Information.sNSSAI.\
4201 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4202 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4203 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4204 choice_extension->value.choice.DRB_Information.sNSSAI.\
4205 sD,sizeof(OCTET_STRING_t));
4206 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4207 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4208 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4209 choice_extension->value.choice.DRB_Information.sNSSAI.\
4210 sST.buf,ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4211 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4212 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4213 choice_extension->value.choice.DRB_Information.sNSSAI.\
4215 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4216 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4217 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4218 choice_extension->value.choice.DRB_Information.dRB_QoS.\
4219 qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,\
4220 sizeof(MaxDataBurstVolume_t));
4221 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4222 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4223 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4224 choice_extension->value.choice.DRB_Information.dRB_QoS.\
4225 qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
4226 sizeof(AveragingWindow_t));
4227 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4228 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4229 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4230 choice_extension->value.choice.DRB_Information.dRB_QoS.\
4231 qoS_Characteristics.choice.non_Dynamic_5QI,\
4232 sizeof(NonDynamic5QIDescriptor_t));
4233 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4234 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4235 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4236 choice_extension,sizeof(struct QoSInformation_ExtIEs));
4237 for(drbId=0; drbId<drbCnt; drbId++)
4239 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4240 DRBs_ToBeSetup_List.list.array[drbId],\
4241 sizeof(struct DRBs_ToBeSetup_ItemIEs));
4243 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4244 DRBs_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
4245 array[idx]->value.choice.DRBs_ToBeSetup_List.list.size);
4247 for(srbId=0; srbId<srbCnt; srbId++)
4249 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4250 SRBs_ToBeSetup_List.list.array[srbId],\
4251 sizeof(struct SRBs_ToBeSetup_ItemIEs));
4253 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4254 SRBs_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
4255 array[idx]->value.choice.SRBs_ToBeSetup_List.list.size);
4257 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4258 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4259 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.buf,\
4260 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4261 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4262 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.size);
4263 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4264 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4265 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.buf,\
4266 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4267 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4268 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.size);
4269 for(spId=0; spId<cellCnt; spId++)
4271 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4272 SCell_ToBeSetup_List.list.array[spId],sizeof(struct
4273 SCell_ToBeSetup_ItemIEs));
4275 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4276 SCell_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
4277 array[idx]->value.choice.SCell_ToBeSetup_List.list.size);
4279 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
4280 nRCellIdentity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
4281 choice.NRCGI.nRCellIdentity.size));
4282 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
4283 pLMN_Identity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
4284 choice.NRCGI.pLMN_Identity.size));
4285 for(idx=0; idx<elementCnt; idx++)
4287 DU_FREE(ueSetReq->protocolIEs.list.array[idx],\
4288 sizeof(UEContextSetupRequestIEs_t));
4290 DU_FREE(ueSetReq->protocolIEs.list.array,\
4291 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
4292 DU_FREE(f1apMsg->choice.initiatingMessage,\
4293 sizeof(InitiatingMessage_t));
4294 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
4298 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
4300 /* Encode the F1SetupRequest type as APER */
4301 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
4303 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\
4305 /* Encode results */
4306 if(encRetVal.encoded == ENCODE_FAIL)
4308 DU_LOG( "\n F1AP : Could not encode UE Context Setup Request structure (at %s)\n",\
4309 encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
4314 DU_LOG("\n F1AP : Created APER encoded buffer for UE Context Setup Request\n");
4315 for(int i=0; i< encBufSize; i++)
4317 printf("%x",encBuf[i]);
4322 if(SendF1APMsg(DU_APP_MEM_REGION,DU_POOL) != ROK)
4324 DU_LOG("\n F1AP : Sending UE Context Setup Request Failed");
4328 }/* End of BuildAndSendUESetReq*/
4330 /*******************************************************************
4332 * @brief Handles received F1AP message and sends back response
4336 * Function : F1APMsgHdlr
4339 * - Decodes received F1AP control message
4340 * - Prepares response message, encodes and sends to SCTP
4343 * @return ROK - success
4346 * ****************************************************************/
4347 void F1APMsgHdlr(Buffer *mBuf)
4353 F1AP_PDU_t *f1apMsg;
4354 asn_dec_rval_t rval; /* Decoder return value */
4355 F1AP_PDU_t f1apasnmsg ;
4357 DU_LOG("\nF1AP : Received F1AP message buffer");
4358 SPrntMsg(mBuf, 0,0);
4360 /* Copy mBuf into char array to decode it */
4361 SFndLenMsg(mBuf, &recvBufLen);
4362 if(SGetSBuf(DFLT_REGION, DFLT_POOL, (Data **)&recvBuf, (Size)recvBufLen) != ROK)
4364 DU_LOG("\nF1AP : Memory allocation failed");
4367 if(SCpyMsgFix(mBuf, 0, recvBufLen, (Data *)recvBuf, ©Cnt) != ROK)
4369 DU_LOG("\nF1AP : Failed while copying %d", copyCnt);
4373 printf("\nF1AP : Received flat buffer to be decoded : ");
4374 for(i=0; i< recvBufLen; i++)
4376 printf("%x",recvBuf[i]);
4379 /* Decoding flat buffer into F1AP messsage */
4380 f1apMsg = &f1apasnmsg;
4381 memset(f1apMsg, 0, sizeof(F1AP_PDU_t));
4383 rval = aper_decode(0, &asn_DEF_F1AP_PDU, (void **)&f1apMsg, recvBuf, recvBufLen, 0, 0);
4384 SPutSBuf(DFLT_REGION, DFLT_POOL, (Data *)recvBuf, (Size)recvBufLen);
4385 if(rval.code == RC_FAIL || rval.code == RC_WMORE)
4387 DU_LOG("\nF1AP : ASN decode failed");
4391 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
4393 switch(f1apMsg->present)
4395 case F1AP_PDU_PR_successfulOutcome:
4397 switch(f1apMsg->choice.successfulOutcome->value.present)
4399 case SuccessfulOutcome__value_PR_F1SetupResponse:
4401 #ifndef ODU_TEST_STUB
4402 procF1SetupRsp(f1apMsg);
4407 case SuccessfulOutcome__value_PR_GNBDUConfigurationUpdateAcknowledge:
4409 procGNBDUCfgUpdAck(f1apMsg);
4415 DU_LOG("\nF1AP : Invalid type of successful outcome [%d]", f1apMsg->choice.successfulOutcome->value.present);
4418 }/* End of switch(successfulOutcome) */
4424 DU_LOG("\nF1AP : Invalid type of f1apMsg->present [%d]",f1apMsg->present);
4428 }/* End of switch(f1apMsg->present) */
4430 } /* End of F1APMsgHdlr */
4432 /*******************************************************************
4434 * @brief Processes GNB DU config update ack
4438 * Function : procGNBDUCfgUpdAck
4440 * Functionality: Processes GNB DU config update ack
4442 * @params[in] F1AP_PDU_t ASN decoded F1AP message
4443 * @return ROK - success
4446 * ****************************************************************/
4448 S16 procGNBDUCfgUpdAck(F1AP_PDU_t *f1apMsg)
4452 DU_LOG("\nF1AP : GNB-DU config update acknowledgment received");
4455 /* TODO :Check the deallocation */
4457 SPutSBuf(DU_APP_MEM_REGION,DU_POOL,(Data *)&(gNBDuCfgAck->protocolIEs.list.array),\
4458 (Size)elementCnt * sizeof(GNBDUConfigurationUpdateAcknowledgeIEs_t *));
4459 SPutSBuf(DU_APP_MEM_REGION,DU_POOL,(Data *)&(f1apMsg->choice.successfulOutcome),\
4460 (Size)sizeof(SuccessfulOutcome_t));
4461 SPutSBuf(DU_APP_MEM_REGION,DU_POOL,(Data *)&f1apMsg,(Size)sizeof(F1AP_PDU_t));
4466 /**********************************************************************
4468 **********************************************************************/