1 /*******************************************************************************
2 ################################################################################
3 # Copyright (c) [2017-2019] [Radisys] #
5 # Licensed under the Apache License, Version 2.0 (the "License"); #
6 # you may not use this file except in compliance with the License. #
7 # You may obtain a copy of the License at #
9 # http://www.apache.org/licenses/LICENSE-2.0 #
11 # Unless required by applicable law or agreed to in writing, software #
12 # distributed under the License is distributed on an "AS IS" BASIS, #
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
14 # See the License for the specific language governing permissions and #
15 # limitations under the License. #
16 ################################################################################
17 *******************************************************************************/
19 /* This file contains F1AP message handler functions */
22 #include "du_mgr_main.h"
23 #include "du_cell_mgr.h"
24 #include "du_f1ap_msg_hdl.h"
25 #include "GNB-DU-System-Information.h"
27 extern char encBuf[ENC_BUF_MAX_LEN];
28 extern DuCfgParams duCfgParam;
29 S16 sctpSend(Buffer *mBuf, U8 itfType);
30 /*******************************************************************
32 * @brief Builds Uplink Info for NR
36 * Function : BuildULNRInfo
38 * Functionality: Building NR Uplink Info
40 * @params[in] NRFreqInfo_t *ulnrfreq
41 * @return ROK - success
44 * ****************************************************************/
45 S16 BuildULNRInfo(NRFreqInfo_t *ulnrfreq)
49 ulnrfreq->nRARFCN = duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.\
50 fdd.ulNrFreqInfo.nrArfcn;
51 ulnrfreq->freqBandListNr.list.count = 1;
52 ulnrfreq->freqBandListNr.list.size = sizeof(struct FreqBandNrItem *);
53 DU_ALLOC(ulnrfreq->freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
54 if(ulnrfreq->freqBandListNr.list.array == NULLP)
58 DU_ALLOC(ulnrfreq->freqBandListNr.list.array[idx],sizeof(struct FreqBandNrItem));
59 if(ulnrfreq->freqBandListNr.list.array[idx] == NULLP)
61 DU_FREE(ulnrfreq->freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
64 ulnrfreq->freqBandListNr.list.array[idx]->freqBandIndicatorNr = \
65 duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.\
66 freqBand[0].nrFreqBand;
67 ulnrfreq->freqBandListNr.list.array[idx]->supportedSULBandList.list.count = SUL_BAND_COUNT;
70 /*******************************************************************
72 * @brief Builds Downlink NR Info
76 * Function : BuildDLNRInfo
78 * Functionality: Building Downlink NR Info
80 * @params[in] NRFreqInfo_t *dlnrfreq
81 * @return ROK - success
84 * ****************************************************************/
85 S16 BuildDLNRInfo(NRFreqInfo_t *dlnrfreq)
88 dlnrfreq->nRARFCN = duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.\
89 fdd.dlNrFreqInfo.nrArfcn;
90 dlnrfreq->freqBandListNr.list.count = 1;
91 dlnrfreq->freqBandListNr.list.size = sizeof(struct FreqBandNrItem *);
92 DU_ALLOC(dlnrfreq->freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
93 if(dlnrfreq->freqBandListNr.list.array == NULLP)
97 DU_ALLOC(dlnrfreq->freqBandListNr.list.array[idx],sizeof(struct FreqBandNrItem));
98 if(dlnrfreq->freqBandListNr.list.array[idx] == NULLP)
100 DU_FREE(dlnrfreq->freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
103 dlnrfreq->freqBandListNr.list.array[idx]->freqBandIndicatorNr = \
104 duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.\
105 freqBand[0].nrFreqBand;
106 dlnrfreq->freqBandListNr.list.array[idx]->supportedSULBandList.list.count = SUL_BAND_COUNT;
110 /*******************************************************************
112 * @brief Builds Nrcgi
116 * Function : BuildNrcgi
118 * Functionality: Building the PLMN ID and NR Cell id
120 * @params[in] NRCGI_t *nrcgi
121 * @return ROK - success
124 * ****************************************************************/
125 S16 BuildNrcgi(NRCGI_t *nrcgi)
132 /* Allocate Buffer Memory */
133 nrcgi->pLMN_Identity.size = PLMN_SIZE * sizeof(U8);
134 DU_ALLOC(nrcgi->pLMN_Identity.buf, nrcgi->pLMN_Identity.size);
135 ret = buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
136 &nrcgi->pLMN_Identity); // Building PLMN function
142 //ret = BuildNrCellId(&nrcgi->nRCellIdentity);
143 nrcgi->nRCellIdentity.size = byteSize * sizeof(U8);
144 DU_ALLOC(nrcgi->nRCellIdentity.buf, nrcgi->nRCellIdentity.size);
145 if(nrcgi->nRCellIdentity.buf == NULLP)
149 ret = fillBitString(&nrcgi->nRCellIdentity, unused, byteSize, val);
153 DU_FREE(nrcgi->nRCellIdentity.buf, nrcgi->nRCellIdentity.size);
159 /*******************************************************************
161 * @brief Builds FiveGStac
165 * Function : BuildFiveGSTac
167 * Functionality: Building the FiveGSTac
169 * @params[in] OCTET_STRING_t *fivegsTac
170 * @return ROK - success
173 * ****************************************************************/
174 S16 BuildFiveGSTac(Served_Cell_Information_t *servcell)
176 DU_ALLOC(servcell->fiveGS_TAC,sizeof(FiveGS_TAC_t));
177 if(servcell->fiveGS_TAC == NULLP)
181 servcell->fiveGS_TAC->size = 3 * sizeof(U8);
182 DU_ALLOC(servcell->fiveGS_TAC->buf,\
183 sizeof(servcell->fiveGS_TAC->size));
184 if(servcell->fiveGS_TAC->buf == NULLP)
186 DU_FREE(servcell->fiveGS_TAC,sizeof(FiveGS_TAC_t));
189 servcell->fiveGS_TAC->buf[0] = 0;
190 servcell->fiveGS_TAC->buf[1] = 0;
191 servcell->fiveGS_TAC->buf[2] = duCfgParam.srvdCellLst[0].duCellInfo.tac;
194 /*******************************************************************
196 * @brief Builds NR Mode
200 * Function : BuildNrMode
202 * Functionality: Building the NR Mode
204 * @params[in] NR_Mode_Info_t *fdd
205 * @return ROK - success
208 * ****************************************************************/
209 S16 BuildNrMode(NR_Mode_Info_t *mode)
213 mode->present = NR_Mode_Info_PR_fDD;
214 if(mode->present == NR_Mode_Info_PR_fDD)
216 DU_ALLOC(mode->choice.fDD,\
218 if(mode->choice.fDD == NULLP)
222 ret = BuildULNRInfo(&mode->choice.fDD->uL_NRFreqInfo);
225 DU_FREE(mode->choice.fDD,\
229 ret = BuildDLNRInfo(&mode->choice.fDD->dL_NRFreqInfo);
232 DU_FREE(mode->choice.fDD,\
234 DU_FREE(mode->choice.fDD->uL_NRFreqInfo.\
235 freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
236 DU_FREE(mode->choice.fDD->uL_NRFreqInfo.\
237 freqBandListNr.list.array[0],sizeof(struct FreqBandNrItem));
241 mode->choice.fDD->uL_Transmission_Bandwidth.nRSCS = \
242 duCfgParam.srvdCellLst[0].duCellInfo.\
243 f1Mode.mode.fdd.ulTxBw.nrScs;
244 mode->choice.fDD->uL_Transmission_Bandwidth.nRNRB = \
245 duCfgParam.srvdCellLst[0].duCellInfo.\
246 f1Mode.mode.fdd.ulTxBw.nrb;
248 mode->choice.fDD->dL_Transmission_Bandwidth.nRSCS = \
249 duCfgParam.srvdCellLst[0].duCellInfo.\
250 f1Mode.mode.fdd.dlTxBw.nrScs;
251 mode->choice.fDD->dL_Transmission_Bandwidth.nRNRB = \
252 duCfgParam.srvdCellLst[0].duCellInfo.\
253 f1Mode.mode.fdd.dlTxBw.nrb;
256 /*******************************************************************
258 * @brief Builds IE Extensions for Served PLMNs
262 * Function : BuildExtensions
264 * Functionality: Building the IE Extensions
266 * @params[in] struct ProtocolExtensionContainer_4624P3 *buildextend
267 * @return ROK - success
270 * ****************************************************************/
271 S16 BuildExtensions(struct ProtocolExtensionContainer_4624P3 **ieExtend)
280 sizeof(struct ProtocolExtensionContainer_4624P3));
281 if((*ieExtend) == NULLP)
285 (*ieExtend)->list.count = extensionCnt;
286 (*ieExtend)->list.size = \
287 extensionCnt * sizeof(struct ServedPLMNs_ItemExtIEs *);
288 DU_ALLOC((*ieExtend)->list.array,\
289 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
290 if((*ieExtend)->list.array == NULLP)
292 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
295 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
297 DU_ALLOC((*ieExtend)->list.array[plmnidx],\
298 sizeof(struct ServedPLMNs_ItemExtIEs));
299 if((*ieExtend)->list.array[plmnidx] == NULLP)
301 for(extensionId=0 ; extensionId<plmnidx; extensionId++)
303 DU_FREE((*ieExtend)->list.array[extensionId],\
304 sizeof(struct ServedPLMNs_ItemExtIEs));
306 DU_FREE((*ieExtend)->list.array,\
307 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
308 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
313 (*ieExtend)->list.array[idx]->id = ProtocolIE_ID_id_TAISliceSupportList;
314 (*ieExtend)->list.array[idx]->criticality = Criticality_ignore;
315 (*ieExtend)->list.array[idx]->extensionValue.present = \
316 ServedPLMNs_ItemExtIEs__extensionValue_PR_SliceSupportList;
317 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
319 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
320 list.size = sizeof(SliceSupportItem_t *);
321 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
322 list.array,sizeof(SliceSupportItem_t *));
323 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
326 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
328 DU_FREE((*ieExtend)->list.array[plmnidx],\
329 sizeof(struct ServedPLMNs_ItemExtIEs));
331 DU_FREE((*ieExtend)->list.array,\
332 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
333 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
338 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
339 list.array[sliceId],sizeof(SliceSupportItem_t));
340 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
341 list.array[sliceId] == NULLP)
343 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
344 list.array,sizeof(SliceSupportItem_t *));
345 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
347 DU_FREE((*ieExtend)->list.array[plmnidx],\
348 sizeof(struct ServedPLMNs_ItemExtIEs));
350 DU_FREE((*ieExtend)->list.array,\
351 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
352 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
356 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
357 list.array[sliceId]->sNSSAI.sST.size = sizeof(U8);
358 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList\
359 .list.array[sliceId]->sNSSAI.sST.buf,(*ieExtend)->list.array[idx]->\
360 extensionValue.choice.SliceSupportList.\
361 list.array[sliceId]->sNSSAI.sST.size);
362 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList\
363 .list.array[sliceId]->sNSSAI.sST.buf == NULLP)
365 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
366 list.array[sliceId],sizeof(SliceSupportItem_t));
367 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
368 list.array,sizeof(SliceSupportItem_t *));
369 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
371 DU_FREE((*ieExtend)->list.array[plmnidx],\
372 sizeof(struct ServedPLMNs_ItemExtIEs));
374 DU_FREE((*ieExtend)->list.array,\
375 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
376 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
379 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
380 list.array[sliceId]->sNSSAI.sST.buf[0] = 3;
381 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
382 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
383 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
384 list.array[sliceId]->sNSSAI.sD == NULLP)
386 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList\
387 .list.array[sliceId]->sNSSAI.sST.buf,(*ieExtend)->list.array[idx]->\
388 extensionValue.choice.SliceSupportList.list.array[sliceId]->sNSSAI.sST.size);
389 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
390 list.array[sliceId],sizeof(SliceSupportItem_t));
391 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
392 list.array,sizeof(SliceSupportItem_t *));
393 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
395 DU_FREE((*ieExtend)->list.array[plmnidx],\
396 sizeof(struct ServedPLMNs_ItemExtIEs));
398 DU_FREE((*ieExtend)->list.array,\
399 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
400 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
403 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
404 list.array[sliceId]->sNSSAI.sD->size = 3*sizeof(U8);
405 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
406 list.array[sliceId]->sNSSAI.sD->buf,(*ieExtend)->list.array[idx]->extensionValue.choice.\
407 SliceSupportList.list.array[sliceId]->sNSSAI.sD->size);
408 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
409 list.array[sliceId]->sNSSAI.sD->buf == NULLP)
411 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
412 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
413 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList\
414 .list.array[sliceId]->sNSSAI.sST.buf,(*ieExtend)->list.array[idx]->extensionValue.\
415 choice.SliceSupportList.list.array[sliceId]->sNSSAI.sST.size);
416 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
417 list.array[sliceId],sizeof(SliceSupportItem_t));
418 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
419 list.array,sizeof(SliceSupportItem_t *));
420 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
422 DU_FREE((*ieExtend)->list.array[plmnidx],\
423 sizeof(struct ServedPLMNs_ItemExtIEs));
425 DU_FREE((*ieExtend)->list.array,\
426 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
427 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
431 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
432 list.array[sliceId]->sNSSAI.sD->buf[sdId] = 3;
434 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
435 list.array[sliceId]->sNSSAI.sD->buf[sdId] = 6;
437 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
438 list.array[sliceId]->sNSSAI.sD->buf[sdId] = 9;
441 /*******************************************************************
443 * @brief Builds Served PLMN
447 * Function : BuildServedPlmn
449 * Functionality: Building the Served PLMN
451 * @params[in] GNB_DU_Served_Cells_Item_t *srvCellItem
452 * @return ROK - success
455 * ****************************************************************/
456 S16 BuildServedPlmn(ServedPLMNs_List_t *srvplmn)
462 srvplmn->list.count = servPlmnCnt;
463 srvplmn->list.size = \
464 servPlmnCnt*sizeof(struct ServedPLMNs_Item *);
465 DU_ALLOC(srvplmn->list.array,\
466 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
467 if(srvplmn->list.array == NULLP)
472 for(plmnidx=0; plmnidx<servPlmnCnt; plmnidx++)
474 DU_ALLOC(srvplmn->list.array[plmnidx],\
475 sizeof(struct ServedPLMNs_Item));
476 if(srvplmn->list.array[plmnidx] == NULLP)
478 for(servPlmnid=0; servPlmnid<plmnidx;servPlmnid++)
480 DU_FREE(srvplmn->list.array[servPlmnid],\
481 sizeof(struct ServedPLMNs_Item));
483 DU_FREE(srvplmn->list.array,\
484 sizeof(struct ServedPLMNs_Item *));
488 /* Allocate Memory to Buffer */
489 srvplmn->list.array[0]->pLMN_Identity.size = PLMN_SIZE * sizeof(U8);
490 DU_ALLOC(srvplmn->list.array[0]->pLMN_Identity.buf, srvplmn->list.array[0]->pLMN_Identity.size);
491 ret = buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
492 &srvplmn->list.array[0]->pLMN_Identity);
495 for(plmnidx=0; plmnidx<servPlmnCnt; plmnidx++)
497 DU_FREE(srvplmn->list.array[plmnidx],\
498 sizeof(struct ServedPLMNs_Item *));
500 DU_FREE(srvplmn->list.array,\
501 sizeof(struct ServedPLMNs_Item *));
504 ret = BuildExtensions(&srvplmn->list.array[0]->iE_Extensions);
507 DU_FREE(srvplmn->list.\
508 array[0]->pLMN_Identity.buf,(Size)\
509 srvplmn->list.array[0]->pLMN_Identity.size * sizeof(U8));
510 for(plmnidx=0; plmnidx<servPlmnCnt; plmnidx++)
512 DU_FREE(srvplmn->list.array[plmnidx],\
513 sizeof(struct ServedPLMNs_Item *));
515 DU_FREE(srvplmn->list.array,\
516 sizeof(struct ServedPLMNs_Item *));
521 /*******************************************************************
523 * @brief Builds Served Cell List
527 * Function : BuildServedCellList
529 * Functionality: Building Served Cell List
531 * @params[in] PLMNID plmn
532 * @return ROK - success
535 * ****************************************************************/
537 S16 BuildServedCellList(GNB_DU_Served_Cells_List_t *duServedCell)
549 GNB_DU_Served_Cells_Item_t *srvCellItem;
551 duServedCell->list.size = plmnCnt * sizeof(GNB_DU_Served_Cells_ItemIEs_t *);
552 duServedCell->list.count = plmnCnt;
553 DU_ALLOC(duServedCell->list.array, plmnCnt * sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
554 if(duServedCell->list.array == NULLP)
558 for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
560 DU_ALLOC(duServedCell->list.array[plmnidx],\
561 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
562 if(duServedCell->list.array[plmnidx] == NULLP)
564 for(plmnId=0; plmnId<plmnidx ; plmnId++)
566 DU_FREE(duServedCell->list.array[plmnId],sizeof(GNB_DU_Served_Cells_ItemIEs_t));
568 DU_FREE(duServedCell->list.array,\
569 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
574 duServedCell->list.array[idx]->id = ProtocolIE_ID_id_GNB_DU_Served_Cells_Item;
575 duServedCell->list.array[idx]->criticality = Criticality_reject;
576 duServedCell->list.array[idx]->value.present = \
577 GNB_DU_Served_Cells_ItemIEs__value_PR_GNB_DU_Served_Cells_Item;
579 &duServedCell->list.array[idx]->value.choice.GNB_DU_Served_Cells_Item;
581 ret = BuildNrcgi(&srvCellItem->served_Cell_Information.nRCGI);
584 for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
586 DU_FREE(duServedCell->list.array[plmnidx],\
587 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
589 DU_FREE(duServedCell->list.array,\
590 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
595 srvCellItem->served_Cell_Information.nRPCI = \
596 duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrPci;
599 ret = BuildFiveGSTac(&srvCellItem->served_Cell_Information);
602 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
603 srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size * sizeof(U8));
604 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
605 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
606 for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
608 DU_FREE(duServedCell->list.array[plmnidx],\
609 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
611 DU_FREE(duServedCell->list.array,\
612 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
616 ret = BuildServedPlmn(&srvCellItem->served_Cell_Information.servedPLMNs);
619 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC->buf,\
620 sizeof(srvCellItem->served_Cell_Information.fiveGS_TAC->size));
621 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC,\
622 sizeof(FiveGS_TAC_t));
623 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
624 srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size * sizeof(U8));
625 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
626 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
627 for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
629 DU_FREE(duServedCell->list.array[plmnidx],\
630 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
632 DU_FREE(duServedCell->list.array,\
633 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
636 /*nR Mode Info with FDD*/
637 ret = BuildNrMode(&srvCellItem->served_Cell_Information.nR_Mode_Info);
643 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
644 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
645 list.array[sliceId]->sNSSAI.sD->buf, srvCellItem->served_Cell_Information.servedPLMNs.\
646 list.array[servId]->iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
647 list.array[sliceId]->sNSSAI.sD->size);
648 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
649 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
650 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
651 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
652 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList\
653 .list.array[sliceId]->sNSSAI.sST.buf,sizeof(U8));
654 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
655 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
656 list.array[sliceId],sizeof(SliceSupportItem_t));
657 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
658 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
659 list.array,sizeof(SliceSupportItem_t *));
660 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
662 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
663 array[servId]->iE_Extensions->list.array[plmnidx],\
664 sizeof(struct ServedPLMNs_ItemExtIEs));
666 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
667 array[servId]->iE_Extensions->list.array,\
668 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
669 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
670 array[servId]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
671 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
672 array[servId]->pLMN_Identity.buf,srvCellItem->served_Cell_Information.\
673 servedPLMNs.list.array[servId]->pLMN_Identity.size * sizeof(U8));
674 for(plmnidx=0; plmnidx<servPlmnCnt; plmnidx++)
676 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[plmnidx],\
677 sizeof(struct ServedPLMNs_Item *));
679 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array,\
680 sizeof(struct ServedPLMNs_Item *));
681 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC->buf,\
682 sizeof(srvCellItem->served_Cell_Information.fiveGS_TAC->size));
683 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC,\
684 sizeof(FiveGS_TAC_t));
685 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
686 srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size * sizeof(U8));
687 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
688 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
689 for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
691 DU_FREE(duServedCell->list.array[plmnidx],\
692 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
694 DU_FREE(duServedCell->list.array,\
695 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
700 /*Measurement timing Config*/
701 srvCellItem->served_Cell_Information.measurementTimingConfiguration.\
703 DU_ALLOC(srvCellItem->served_Cell_Information.\
704 measurementTimingConfiguration.buf,sizeof(U8));
705 if(srvCellItem->served_Cell_Information.\
706 measurementTimingConfiguration.buf == NULLP)
708 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
709 dL_NRFreqInfo.freqBandListNr.list.array[0],\
710 sizeof(struct FreqBandNrItem));
711 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
712 dL_NRFreqInfo.freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
713 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.\
714 fDD->uL_NRFreqInfo.freqBandListNr.list.array[0],\
715 sizeof(struct FreqBandNrItem));
716 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
717 uL_NRFreqInfo.freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
718 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
720 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
721 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
722 list.array[sliceId]->sNSSAI.sD->buf,srvCellItem->served_Cell_Information.servedPLMNs.\
723 list.array[servId]->iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
724 list.array[sliceId]->sNSSAI.sD->size);
725 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
726 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
727 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
728 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
729 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList\
730 .list.array[sliceId]->sNSSAI.sST.buf,sizeof(U8));
731 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
732 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
733 list.array[sliceId],sizeof(SliceSupportItem_t));
734 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
735 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
736 list.array,sizeof(SliceSupportItem_t *));
737 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
739 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
740 array[servId]->iE_Extensions->list.array[plmnidx],\
741 sizeof(struct ServedPLMNs_ItemExtIEs));
743 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
744 array[servId]->iE_Extensions->list.array,\
745 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
746 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
747 array[servId]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
748 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
749 array[servId]->pLMN_Identity.buf,srvCellItem->served_Cell_Information.\
750 servedPLMNs.list.array[servId]->pLMN_Identity.size * sizeof(U8));
751 for(plmnidx=0; plmnidx<servPlmnCnt; plmnidx++)
753 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[plmnidx],\
754 sizeof(struct ServedPLMNs_Item *));
756 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array,\
757 sizeof(struct ServedPLMNs_Item *));
758 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC->buf,\
759 sizeof(srvCellItem->served_Cell_Information.fiveGS_TAC->size));
760 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC,\
761 sizeof(FiveGS_TAC_t));
762 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
763 srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size * sizeof(U8));
764 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
765 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
766 for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
768 DU_FREE(duServedCell->list.array[plmnidx],\
769 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
771 DU_FREE(duServedCell->list.array,\
772 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
775 srvCellItem->served_Cell_Information.measurementTimingConfiguration.buf[0] = \
776 duCfgParam.srvdCellLst[0].duCellInfo.measTimeCfg;
778 /* GNB DU System Information */
779 DU_ALLOC(srvCellItem->gNB_DU_System_Information,
780 sizeof(GNB_DU_System_Information_t));
781 if(!srvCellItem->gNB_DU_System_Information)
783 DU_LOG("\nF1AP: Memory allocation failure for GNB_DU_System_Information");
787 srvCellItem->gNB_DU_System_Information->mIB_message.size =\
788 strlen(( char *)duCfgParam.srvdCellLst[0].duSysInfo.mibMsg);
789 DU_ALLOC(srvCellItem->gNB_DU_System_Information->mIB_message.buf,
790 srvCellItem->gNB_DU_System_Information->mIB_message.size);
791 if(!srvCellItem->gNB_DU_System_Information->mIB_message.buf)
793 DU_LOG("\nF1AP: Memory allocation failure for mIB message");
796 strcpy((char *)srvCellItem->gNB_DU_System_Information->mIB_message.buf,
797 (char *)duCfgParam.srvdCellLst[0].duSysInfo.mibMsg);
800 srvCellItem->gNB_DU_System_Information->sIB1_message.size =\
801 duCfgParam.srvdCellLst[0].duSysInfo.sib1Len;
802 DU_ALLOC(srvCellItem->gNB_DU_System_Information->sIB1_message.buf,
803 srvCellItem->gNB_DU_System_Information->sIB1_message.size);
804 if(!srvCellItem->gNB_DU_System_Information->sIB1_message.buf)
806 DU_LOG("\nF1AP: Memory allocation failure for SIB1 message");
809 for(int x=0; x<srvCellItem->gNB_DU_System_Information->sIB1_message.size; x++)
811 srvCellItem->gNB_DU_System_Information->sIB1_message.buf[x]=\
812 duCfgParam.srvdCellLst[0].duSysInfo.sib1Msg[x];
815 DU_FREE(duCfgParam.srvdCellLst[0].duSysInfo.sib1Msg,
816 srvCellItem->gNB_DU_System_Information->sIB1_message.size);
817 DU_FREE(duCfgParam.srvdCellLst[0].duSysInfo.mibMsg,
818 strlen((char *)duCfgParam.srvdCellLst[0].duSysInfo.mibMsg));
821 /*******************************************************************
823 * @brief Builds RRC Version
827 * Function : BuildRrcVer
829 * Functionality: Building RRC Version
831 * @params[in] int idx,int elementCnt,RRC_Version_t *rrcver
832 * @return ROK - success
835 * ****************************************************************/
836 S16 BuildRrcVer(RRC_Version_t *rrcVer)
840 rrcVer->latest_RRC_Version.size = sizeof(U8);
841 DU_ALLOC(rrcVer->latest_RRC_Version.buf,sizeof(U8));
842 if(rrcVer->latest_RRC_Version.buf == NULLP)
846 rrcVer->latest_RRC_Version.buf[0] = 0;
847 rrcVer->latest_RRC_Version.bits_unused = 5;
848 DU_ALLOC(rrcVer->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P81_t));
849 if(rrcVer->iE_Extensions == NULLP)
851 DU_FREE(rrcVer->latest_RRC_Version.buf,sizeof(U8));
854 rrcVer->iE_Extensions->list.count = 1;
855 rrcVer->iE_Extensions->list.size = sizeof(struct RRC_Version_ExtIEs *);
856 DU_ALLOC(rrcVer->iE_Extensions->list.array,\
857 sizeof(struct RRC_Version_ExtIEs *));
858 if(rrcVer->iE_Extensions->list.array == NULLP)
860 DU_FREE(rrcVer->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P81_t));
861 DU_FREE(rrcVer->latest_RRC_Version.buf,sizeof(U8));
865 DU_ALLOC(rrcVer->iE_Extensions->list.array[0],\
866 sizeof(struct RRC_Version_ExtIEs));
867 if(rrcVer->iE_Extensions->list.array[0] == NULLP)
869 DU_FREE(rrcVer->iE_Extensions->list.array,\
870 sizeof(struct RRC_Version_ExtIEs *));
871 DU_FREE(rrcVer->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P81_t));
872 DU_FREE(rrcVer->latest_RRC_Version.buf,sizeof(U8));
875 rrcVer->iE_Extensions->list.array[rrcExt]->id = \
876 ProtocolIE_ID_id_latest_RRC_Version_Enhanced;
877 rrcVer->iE_Extensions->list.array[rrcExt]->criticality = Criticality_reject;
878 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.present =\
879 RRC_Version_ExtIEs__extensionValue_PR_Latest_RRC_Version_Enhanced;
880 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice\
881 .Latest_RRC_Version_Enhanced.size = 3*sizeof(U8);
882 DU_ALLOC(rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice\
883 .Latest_RRC_Version_Enhanced.buf,rrcVer->iE_Extensions->list.\
884 array[rrcExt]->extensionValue.choice.Latest_RRC_Version_Enhanced.size);
885 if(rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice\
886 .Latest_RRC_Version_Enhanced.buf == NULLP)
888 DU_FREE(rrcVer->iE_Extensions->list.array[rrcExt],\
889 sizeof(struct RRC_Version_ExtIEs));
890 DU_FREE(rrcVer->iE_Extensions->list.array,\
891 sizeof(struct RRC_Version_ExtIEs *));
892 DU_FREE(rrcVer->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P81_t));
893 DU_FREE(rrcVer->latest_RRC_Version.buf,sizeof(U8));
897 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice.\
898 Latest_RRC_Version_Enhanced.buf[rrcLatest] = 15;
900 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice.\
901 Latest_RRC_Version_Enhanced.buf[rrcLatest] = 5;
903 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice.\
904 Latest_RRC_Version_Enhanced.buf[rrcLatest] = 0;
907 /*******************************************************************
909 * @brief Sends F1 msg over SCTP
913 * Function : SendF1APMsg
915 * Functionality: Sends F1 msg over SCTP
917 * @params[in] Region region
919 * @return ROK - success
922 * ****************************************************************/
923 S16 SendF1APMsg(Region region, Pool pool)
927 if(SGetMsg(region, pool, &mBuf) == ROK)
929 if(SAddPstMsgMult((Data *)encBuf, encBufSize, mBuf) == ROK)
933 if(sctpSend(mBuf, F1_INTERFACE) != ROK)
935 DU_LOG("\nF1AP : SCTP Send failed");
942 DU_LOG("\nF1AP : SAddPstMsgMult failed");
950 DU_LOG("\nF1AP : Failed to allocate memory");
957 /*******************************************************************
959 * @brief Builds and Send the F1SetupRequest
963 * Function : BuildAndSendF1SetupReq
965 * Functionality:Fills the F1SetupRequest
967 * @return ROK - success
970 ******************************************************************/
971 S16 BuildAndSendF1SetupReq()
983 F1AP_PDU_t *f1apMsg = NULL;
984 F1SetupRequest_t *f1SetupReq;
985 GNB_DU_Served_Cells_List_t *duServedCell;
986 GNB_DU_Served_Cells_Item_t *srvCellItem;
987 RRC_Version_t *rrcVer;
988 asn_enc_rval_t encRetVal; /* Encoder return value */
989 DU_LOG("\nF1AP : Building F1 Setup Request\n");
991 DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t));
994 DU_LOG("\nF1AP : Memory allocation for F1AP-PDU failed");
998 f1apMsg->present = F1AP_PDU_PR_initiatingMessage;
999 DU_ALLOC(f1apMsg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1000 if(f1apMsg->choice.initiatingMessage == NULLP)
1002 DU_LOG("\nF1AP : Memory allocation for F1AP-PDU failed");
1003 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1007 f1apMsg->choice.initiatingMessage->procedureCode = ProcedureCode_id_F1Setup;
1008 f1apMsg->choice.initiatingMessage->criticality = Criticality_reject;
1009 f1apMsg->choice.initiatingMessage->value.present = \
1010 InitiatingMessage__value_PR_F1SetupRequest;
1012 f1SetupReq = &f1apMsg->choice.initiatingMessage->value.choice.F1SetupRequest;
1014 elementCnt = (duCfgParam.duName != NULL) ? 5 : 4;
1016 f1SetupReq->protocolIEs.list.count = elementCnt;
1017 f1SetupReq->protocolIEs.list.size = elementCnt * sizeof(F1SetupRequestIEs_t *);
1019 /* Initialize the F1Setup members */
1020 DU_ALLOC(f1SetupReq->protocolIEs.list.array, \
1021 elementCnt * sizeof(F1SetupRequestIEs_t *));
1022 if(f1SetupReq->protocolIEs.list.array == NULLP)
1024 DU_LOG("\nF1AP : Memory allocation for F1RequestIEs failed");
1025 DU_FREE(f1apMsg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1026 DU_FREE(f1apMsg, (Size)sizeof(F1AP_PDU_t));
1030 for(idx=0; idx<elementCnt; idx++)
1032 DU_ALLOC(f1SetupReq->protocolIEs.list.array[idx],\
1033 sizeof(F1SetupRequestIEs_t));
1034 if(f1SetupReq->protocolIEs.list.array[idx] == NULLP)
1036 for(ieId=0 ; ieId<idx ;ieId++)
1038 DU_FREE(f1SetupReq->protocolIEs.list.array[ieId],\
1039 sizeof(F1SetupRequestIEs_t));
1041 DU_FREE(f1SetupReq->protocolIEs.list.array,\
1042 elementCnt * sizeof(F1SetupRequestIEs_t *));
1043 DU_FREE(f1apMsg->choice.initiatingMessage, \
1044 sizeof(InitiatingMessage_t));
1045 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1053 f1SetupReq->protocolIEs.list.array[idx]->id = ProtocolIE_ID_id_TransactionID;
1054 f1SetupReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1055 f1SetupReq->protocolIEs.list.array[idx]->value.present =\
1056 F1SetupRequestIEs__value_PR_TransactionID;
1057 f1SetupReq->protocolIEs.list.array[idx]->value.choice.TransactionID = \
1062 f1SetupReq->protocolIEs.list.array[idx]->id = ProtocolIE_ID_id_gNB_DU_ID;
1063 f1SetupReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1064 f1SetupReq->protocolIEs.list.array[idx]->value.present = \
1065 F1SetupRequestIEs__value_PR_GNB_DU_ID;
1066 f1SetupReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_ID.size =\
1069 DU_ALLOC(f1SetupReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_ID.buf,\
1071 if(f1SetupReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_ID.buf == \
1074 for(plmnidx=0; plmnidx<elementCnt; plmnidx++)
1076 DU_FREE(f1SetupReq->protocolIEs.list.array[plmnidx], \
1077 sizeof(F1SetupRequestIEs_t));
1079 DU_FREE(f1SetupReq->protocolIEs.list.array, \
1080 elementCnt * sizeof(F1SetupRequestIEs_t *));
1081 DU_FREE(f1apMsg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1082 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1086 f1SetupReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_ID.buf[0] =\
1090 if(duCfgParam.duName != NULL)
1093 f1SetupReq->protocolIEs.list.array[idx]->id = ProtocolIE_ID_id_gNB_DU_Name ;
1094 f1SetupReq->protocolIEs.list.array[idx]->criticality = Criticality_ignore;
1095 f1SetupReq->protocolIEs.list.array[idx]->value.present = \
1096 F1SetupRequestIEs__value_PR_GNB_DU_Name;
1097 f1SetupReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_Name.size =\
1098 sizeof(duCfgParam.duName);
1100 DU_ALLOC(f1SetupReq->protocolIEs.list.array[idx]->value.choice.\
1101 GNB_DU_Name.buf, sizeof(duCfgParam.duName));
1102 if(f1SetupReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_Name.\
1105 DU_FREE(f1SetupReq->protocolIEs.list.array[--idx]->value.choice.\
1106 GNB_DU_ID.buf, sizeof(U8));
1107 for(plmnidx=0; plmnidx<elementCnt; plmnidx++)
1109 DU_FREE(f1SetupReq->protocolIEs.list.array[plmnidx], \
1110 sizeof(F1SetupRequestIEs_t));
1112 DU_FREE(f1SetupReq->protocolIEs.list.array,\
1113 elementCnt * sizeof(F1SetupRequestIEs_t *));
1114 DU_FREE(f1apMsg->choice.initiatingMessage, \
1115 sizeof(InitiatingMessage_t));
1116 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1120 strcpy((char*)f1SetupReq->protocolIEs.list.array[idx]->value.\
1121 choice.GNB_DU_Name.buf,
1122 (char*)&duCfgParam.duName);
1125 /*Served Cell list */
1127 f1SetupReq->protocolIEs.list.array[idx]->id = \
1128 ProtocolIE_ID_id_gNB_DU_Served_Cells_List;
1129 f1SetupReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1130 f1SetupReq->protocolIEs.list.array[idx]->value.present = \
1131 F1SetupRequestIEs__value_PR_GNB_DU_Served_Cells_List;
1132 duServedCell = &f1SetupReq->protocolIEs.list.\
1133 array[idx]->value.choice.GNB_DU_Served_Cells_List;
1134 ret = BuildServedCellList(duServedCell);
1135 srvCellItem = &duServedCell->list.array[idx]->value. \
1136 choice.GNB_DU_Served_Cells_Item;
1139 DU_FREE(f1SetupReq->protocolIEs.list.array[--idx]->value.\
1140 choice.GNB_DU_Name.buf, sizeof(duCfgParam.duName));
1141 DU_FREE(f1SetupReq->protocolIEs.list.array[--idx]->value.\
1142 choice.GNB_DU_ID.buf, sizeof(U8));
1143 for(plmnidx=0; plmnidx<elementCnt; idx++)
1145 DU_FREE(f1SetupReq->protocolIEs.list.array[plmnidx],\
1146 sizeof(F1SetupRequestIEs_t));
1148 DU_FREE(f1SetupReq->protocolIEs.list.array, \
1149 elementCnt * sizeof(F1SetupRequestIEs_t *));
1150 DU_FREE(f1apMsg->choice.initiatingMessage,\
1151 sizeof(InitiatingMessage_t));
1152 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1156 f1SetupReq->protocolIEs.list.array[idx]->id = \
1157 ProtocolIE_ID_id_GNB_DU_RRC_Version ;
1158 f1SetupReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1159 f1SetupReq->protocolIEs.list.array[idx]->value.present = \
1160 F1SetupRequestIEs__value_PR_RRC_Version;
1161 rrcVer = &f1SetupReq->protocolIEs.list.array[idx]->value.choice.RRC_Version;
1162 ret = BuildRrcVer(rrcVer);
1168 DU_FREE(srvCellItem->served_Cell_Information.\
1169 measurementTimingConfiguration.buf,sizeof(U8));
1170 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1171 dL_NRFreqInfo.freqBandListNr.list.array[0],\
1172 sizeof(struct FreqBandNrItem));
1173 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1174 dL_NRFreqInfo.freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
1175 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.\
1176 fDD->uL_NRFreqInfo.freqBandListNr.list.array[0],\
1177 sizeof(struct FreqBandNrItem));
1178 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1179 uL_NRFreqInfo.freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
1180 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
1181 sizeof(FDD_Info_t));
1182 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1183 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1184 list.array[sliceId]->sNSSAI.sD->buf,srvCellItem->served_Cell_Information.servedPLMNs.\
1185 list.array[servId]->iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1186 list.array[sliceId]->sNSSAI.sD->size);
1187 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1188 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1189 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
1190 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1191 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList\
1192 .list.array[sliceId]->sNSSAI.sST.buf,sizeof(U8));
1193 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1194 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1195 list.array[sliceId],sizeof(SliceSupportItem_t));
1196 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1197 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1198 list.array,sizeof(SliceSupportItem_t *));
1199 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
1201 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1202 array[servId]->iE_Extensions->list.array[plmnidx],\
1203 sizeof(struct ServedPLMNs_ItemExtIEs));
1205 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1206 array[servId]->iE_Extensions->list.array,\
1207 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
1208 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1209 array[servId]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1210 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1211 array[servId]->pLMN_Identity.buf,srvCellItem->served_Cell_Information.\
1212 servedPLMNs.list.array[servId]->pLMN_Identity.size * sizeof(U8));
1213 for(plmnidx=0;plmnidx<servPlmnCnt; plmnidx++)
1215 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[plmnidx],\
1216 sizeof(struct ServedPLMNs_Item *));
1218 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array,\
1219 sizeof(struct ServedPLMNs_Item *));
1220 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC->buf,\
1221 sizeof(srvCellItem->served_Cell_Information.fiveGS_TAC->size));
1222 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC,\
1223 sizeof(FiveGS_TAC_t));
1224 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1225 srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size * sizeof(U8));
1226 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1227 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
1228 for(plmnidx=0; plmnidx<plmnCnt;plmnidx++)
1230 DU_FREE(duServedCell->list.array[plmnidx],\
1231 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
1233 DU_FREE(duServedCell->list.array,\
1234 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
1235 DU_FREE(f1SetupReq->protocolIEs.list.array[--idx]->value.\
1236 choice.GNB_DU_Name.buf, sizeof(duCfgParam.duName));
1237 DU_FREE(f1SetupReq->protocolIEs.list.array[--idx]->value.\
1238 choice.GNB_DU_ID.buf, sizeof(U8));
1239 for(plmnidx=0; plmnidx<elementCnt; plmnidx++)
1241 DU_FREE(f1SetupReq->protocolIEs.list.array[plmnidx],\
1242 sizeof(F1SetupRequestIEs_t));
1244 DU_FREE(f1SetupReq->protocolIEs.list.array,\
1245 elementCnt * sizeof(F1SetupRequestIEs_t *));
1246 DU_FREE(f1apMsg->choice.initiatingMessage,\
1247 sizeof(InitiatingMessage_t));
1248 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1251 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
1253 /* Encode the F1SetupRequest type as APER */
1254 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
1256 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\
1260 DU_FREE(srvCellItem->gNB_DU_System_Information->sIB1_message.buf,
1261 srvCellItem->gNB_DU_System_Information->sIB1_message.size);
1262 DU_FREE(srvCellItem->gNB_DU_System_Information->mIB_message.buf,
1263 srvCellItem->gNB_DU_System_Information->mIB_message.size);
1264 DU_FREE(srvCellItem->served_Cell_Information.\
1265 measurementTimingConfiguration.buf,sizeof(U8));
1266 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1267 dL_NRFreqInfo.freqBandListNr.list.array[0],\
1268 sizeof(struct FreqBandNrItem));
1269 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1270 dL_NRFreqInfo.freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
1271 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.\
1272 fDD->uL_NRFreqInfo.freqBandListNr.list.array[0],\
1273 sizeof(struct FreqBandNrItem));
1274 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1275 uL_NRFreqInfo.freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
1276 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
1277 sizeof(FDD_Info_t));
1278 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1279 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1280 list.array[sliceId]->sNSSAI.sD->buf,srvCellItem->served_Cell_Information.servedPLMNs.\
1281 list.array[servId]->iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1282 list.array[sliceId]->sNSSAI.sD->size);
1283 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1284 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1285 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
1286 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1287 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList\
1288 .list.array[sliceId]->sNSSAI.sST.buf,sizeof(U8));
1289 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1290 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1291 list.array[sliceId],sizeof(SliceSupportItem_t));
1292 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1293 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1294 list.array,sizeof(SliceSupportItem_t *));
1295 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
1297 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1298 array[servId]->iE_Extensions->list.array[plmnidx],\
1299 sizeof(struct ServedPLMNs_ItemExtIEs));
1301 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1302 array[servId]->iE_Extensions->list.array,\
1303 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
1304 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1305 array[servId]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1306 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1307 array[servId]->pLMN_Identity.buf,srvCellItem->served_Cell_Information.\
1308 servedPLMNs.list.array[servId]->pLMN_Identity.size * sizeof(U8));
1309 for(plmnidx=0;plmnidx<servPlmnCnt; plmnidx++)
1311 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[plmnidx],\
1312 sizeof(struct ServedPLMNs_Item *));
1314 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array,\
1315 sizeof(struct ServedPLMNs_Item *));
1316 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC->buf,\
1317 sizeof(srvCellItem->served_Cell_Information.fiveGS_TAC->size));
1318 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC,\
1319 sizeof(FiveGS_TAC_t));
1320 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1321 srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size * sizeof(U8));
1322 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1323 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
1324 for(plmnidx=0; plmnidx<plmnCnt;plmnidx++)
1326 DU_FREE(duServedCell->list.array[plmnidx],\
1327 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
1329 DU_FREE(duServedCell->list.array,\
1330 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
1333 if(duCfgParam.duName != NULL)
1335 DU_FREE(f1SetupReq->protocolIEs.list.array[idx]->value.choice.\
1336 GNB_DU_Name.buf, sizeof(duCfgParam.duName));
1338 DU_FREE(f1SetupReq->protocolIEs.list.array[--idx]->value.choice.GNB_DU_ID.\
1340 for(idx=0; idx<elementCnt; idx++)
1342 DU_FREE(f1SetupReq->protocolIEs.list.array[idx], sizeof(F1SetupRequestIEs_t));
1344 DU_FREE(f1SetupReq->protocolIEs.list.array, elementCnt * sizeof(F1SetupRequestIEs_t *));
1345 DU_FREE(f1apMsg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1346 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1347 /* Encode results */
1348 if(encRetVal.encoded == ENCODE_FAIL)
1350 DU_LOG("\nF1AP : Could not encode F1SetupRequest structure (at %s)\n",\
1351 encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
1356 DU_LOG("\nF1AP : Created APER encoded buffer for F1SetupRequest\n");
1357 for(int i=0; i< encBufSize; i++)
1359 printf("%x",encBuf[i]);
1364 if(SendF1APMsg(DU_APP_MEM_REGION, DU_POOL) != ROK)
1366 DU_LOG("\nF1AP : Sending F1 Setup request failed");
1370 }/* End of BuildAndSendF1SetupReq */
1372 /*******************************************************************
1374 * @brief Builds and sends the DUConfigUpdate
1378 * Function : BuildAndSendDUConfigUpdate
1380 * Functionality: Constructs the DU Update message and sends
1381 * it to the CU through SCTP.
1383 * @params[in] void **buf,Buffer to which encoded pattern is written into
1384 * @params[in] int *size,size of buffer
1386 * @return ROK - success
1389 * ****************************************************************/
1390 S16 BuildAndSendDUConfigUpdate()
1393 U8 elementCnt,modifyCnt,servPlmnCnt,extensionCnt;
1394 asn_enc_rval_t encRetVal; /* Encoder return value */
1395 F1AP_PDU_t *f1apDuCfg = NULL;
1396 GNBDUConfigurationUpdate_t *duCfgUpdate;
1397 Served_Cells_To_Modify_List_t *cellsToModify;
1398 Served_Cells_To_Modify_Item_t *modifyItem;
1399 DU_LOG("\nF1AP : Building DU config update\n");
1401 /* Allocate the memory for F1DuCfg */
1402 DU_ALLOC(f1apDuCfg, (Size)sizeof(F1AP_PDU_t));
1403 if(f1apDuCfg == NULLP)
1405 DU_LOG("\nF1AP : Memory allocation for F1AP-PDU failed");
1409 f1apDuCfg->present = F1AP_PDU_PR_initiatingMessage;
1410 DU_ALLOC(f1apDuCfg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1411 if(f1apDuCfg->choice.initiatingMessage == NULLP)
1413 DU_LOG("\nF1AP : Memory allocation for F1AP-PDU failed");
1414 DU_FREE(f1apDuCfg, (Size)sizeof(F1AP_PDU_t));
1418 f1apDuCfg->choice.initiatingMessage->procedureCode = \
1419 ProcedureCode_id_gNBDUConfigurationUpdate;
1420 f1apDuCfg->choice.initiatingMessage->criticality = Criticality_reject;
1421 f1apDuCfg->choice.initiatingMessage->value.present = \
1422 InitiatingMessage__value_PR_GNBDUConfigurationUpdate;
1423 duCfgUpdate = &f1apDuCfg->choice.initiatingMessage->value.\
1424 choice.GNBDUConfigurationUpdate;
1427 duCfgUpdate->protocolIEs.list.count = elementCnt;
1428 duCfgUpdate->protocolIEs.list.size = \
1429 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *);
1431 /* Initialize the F1Setup members */
1432 DU_ALLOC(duCfgUpdate->protocolIEs.list.array,\
1433 elementCnt*sizeof(GNBDUConfigurationUpdateIEs_t *));
1434 if(duCfgUpdate->protocolIEs.list.array == NULLP)
1436 DU_LOG("F1AP : Memory allocation for F1RequestIEs failed");
1437 DU_FREE(f1apDuCfg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1438 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1442 for(idx=0;idx<elementCnt;idx++)
1444 DU_ALLOC(duCfgUpdate->protocolIEs.list.array[idx], \
1445 sizeof(GNBDUConfigurationUpdateIEs_t));
1446 if(duCfgUpdate->protocolIEs.list.array[idx] == NULLP)
1448 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1449 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1450 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1451 (Size)sizeof(InitiatingMessage_t));
1452 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1459 duCfgUpdate->protocolIEs.list.array[idx]->id = \
1460 ProtocolIE_ID_id_TransactionID;
1461 duCfgUpdate->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1462 duCfgUpdate->protocolIEs.list.array[idx]->value.present = \
1463 GNBDUConfigurationUpdateIEs__value_PR_TransactionID;
1464 duCfgUpdate->protocolIEs.list.array[idx]->value.choice.TransactionID = \
1467 /*Served Cell to Modify */
1469 duCfgUpdate->protocolIEs.list.array[idx]->id = \
1470 ProtocolIE_ID_id_Served_Cells_To_Modify_List;
1471 duCfgUpdate->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1472 duCfgUpdate->protocolIEs.list.array[idx]->value.present = \
1473 GNBDUConfigurationUpdateIEs__value_PR_Served_Cells_To_Modify_List;
1474 cellsToModify = &duCfgUpdate->protocolIEs.list.array[1]->value.choice.\
1475 Served_Cells_To_Modify_List;
1477 cellsToModify->list.count = modifyCnt;
1478 cellsToModify->list.size = \
1479 modifyCnt*sizeof(struct Served_Cells_To_Modify_ItemIEs *);
1480 DU_ALLOC(cellsToModify->list.array,modifyCnt*\
1481 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1482 if(cellsToModify->list.array == NULLP)
1484 for(idy=0;idy<elementCnt;idy++)
1486 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1487 sizeof(GNBDUConfigurationUpdateIEs_t));
1489 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1490 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1491 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1492 (Size)sizeof(InitiatingMessage_t));
1493 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1497 for(idy=0; idy<modifyCnt ;idy++)
1499 DU_ALLOC(cellsToModify->list.array[idy],\
1500 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1501 if(cellsToModify->list.array[idy] == NULLP)
1503 DU_FREE(cellsToModify->list.array,modifyCnt*\
1504 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1505 for(idy=0;idy<elementCnt;idy++)
1507 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1508 sizeof(GNBDUConfigurationUpdateIEs_t));
1510 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1511 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1512 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1513 (Size)sizeof(InitiatingMessage_t));
1514 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1518 cellsToModify->list.array[0]->id = \
1519 ProtocolIE_ID_id_Served_Cells_To_Modify_Item;
1520 cellsToModify->list.array[0]->criticality = Criticality_reject;
1521 cellsToModify->list.array[0]->value.present = \
1522 Served_Cells_To_Modify_ItemIEs__value_PR_Served_Cells_To_Modify_Item;
1523 modifyItem=&cellsToModify->list.array[0]->value.choice.\
1524 Served_Cells_To_Modify_Item;
1527 modifyItem->oldNRCGI.pLMN_Identity.size = 3;
1528 DU_ALLOC(modifyItem->oldNRCGI.pLMN_Identity.buf, 3*sizeof(uint8_t));
1529 if(modifyItem->oldNRCGI.pLMN_Identity.buf == NULLP)
1531 for(idy=0; idy<modifyCnt ;idy++)
1533 DU_FREE(cellsToModify->list.array[idy],\
1534 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1535 DU_FREE(cellsToModify->list.array,modifyCnt*\
1536 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1537 for(idy=0;idy<elementCnt;idy++)
1539 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1540 sizeof(GNBDUConfigurationUpdateIEs_t));
1542 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1543 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1544 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1545 (Size)sizeof(InitiatingMessage_t));
1546 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1550 buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
1551 &modifyItem->oldNRCGI.pLMN_Identity);
1553 modifyItem->oldNRCGI.nRCellIdentity.size = 5;
1554 DU_ALLOC(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1555 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1556 if(modifyItem->oldNRCGI.nRCellIdentity.buf == NULLP)
1558 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1559 DU_FREE(cellsToModify->list.array[idy],\
1560 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1561 DU_FREE(cellsToModify->list.array,modifyCnt*\
1562 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1563 for(idy=0;idy<elementCnt;idy++)
1565 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1566 sizeof(GNBDUConfigurationUpdateIEs_t));
1568 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1569 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1570 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1571 (Size)sizeof(InitiatingMessage_t));
1572 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1575 for (int tmp = 0 ; tmp < modifyItem->oldNRCGI.nRCellIdentity.size-1 ; tmp++)
1577 modifyItem->oldNRCGI.nRCellIdentity.buf[tmp] = 0;
1579 modifyItem->oldNRCGI.nRCellIdentity.buf[4] = 16;
1580 modifyItem->oldNRCGI.nRCellIdentity.bits_unused = 4;
1583 modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.size = 3;
1584 DU_ALLOC(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1586 if(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf == NULLP)
1588 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1589 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1590 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1591 DU_FREE(cellsToModify->list.array[idy],\
1592 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1593 DU_FREE(cellsToModify->list.array,modifyCnt*\
1594 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1595 for(idy=0;idy<elementCnt;idy++)
1597 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1598 sizeof(GNBDUConfigurationUpdateIEs_t));
1600 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1601 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1602 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1603 (Size)sizeof(InitiatingMessage_t));
1604 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1607 buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
1608 &modifyItem->served_Cell_Information.nRCGI.pLMN_Identity);
1609 modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.size = 5;
1610 DU_ALLOC(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1612 if(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf == NULLP)
1614 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1616 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1617 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1618 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1619 DU_FREE(cellsToModify->list.array[idy],\
1620 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1621 DU_FREE(cellsToModify->list.array,modifyCnt*\
1622 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1623 for(idy=0;idy<elementCnt;idy++)
1625 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1626 sizeof(GNBDUConfigurationUpdateIEs_t));
1628 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1629 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1630 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1631 (Size)sizeof(InitiatingMessage_t));
1632 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1635 for (int tmp = 0 ; tmp < modifyItem->served_Cell_Information.\
1636 nRCGI.nRCellIdentity.size-1 ; tmp++)
1638 modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf[tmp] = 0;
1640 modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf[4] = 16;
1641 modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.bits_unused = 4;
1644 modifyItem->served_Cell_Information.nRPCI = \
1645 duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrPci;
1649 modifyItem->served_Cell_Information.servedPLMNs.list.count = servPlmnCnt;
1650 modifyItem->served_Cell_Information.servedPLMNs.list.size = \
1651 servPlmnCnt*sizeof(struct ServedPLMNs_Item *);
1652 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1653 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1654 if(modifyItem->served_Cell_Information.servedPLMNs.list.array == NULLP)
1656 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1658 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1660 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1661 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1662 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1663 DU_FREE(cellsToModify->list.array[idy],\
1664 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1665 DU_FREE(cellsToModify->list.array,modifyCnt*\
1666 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1667 for(idy=0;idy<elementCnt;idy++)
1669 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1670 sizeof(GNBDUConfigurationUpdateIEs_t));
1672 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1673 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1674 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1675 (Size)sizeof(InitiatingMessage_t));
1676 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1679 for(idy=0;idy<servPlmnCnt;idy++)
1681 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1682 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1683 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy] == NULLP)
1685 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1686 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1687 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1689 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1691 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1692 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1693 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1694 DU_FREE(cellsToModify->list.array[idy],\
1695 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1696 DU_FREE(cellsToModify->list.array,modifyCnt*\
1697 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1698 for(idy=0;idy<elementCnt;idy++)
1700 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1701 sizeof(GNBDUConfigurationUpdateIEs_t));
1703 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1704 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1705 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1706 (Size)sizeof(InitiatingMessage_t));
1707 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1711 modifyItem->served_Cell_Information.servedPLMNs.list.\
1712 array[0]->pLMN_Identity.size = 3;
1713 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
1714 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1715 if(modifyItem->served_Cell_Information.servedPLMNs.list.\
1716 array[0]->pLMN_Identity.buf == NULLP)
1718 for(idy=0;idy<servPlmnCnt;idy++)
1720 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1721 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1723 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1724 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1725 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1727 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1729 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1730 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1731 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1732 DU_FREE(cellsToModify->list.array[idy],\
1733 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1734 DU_FREE(cellsToModify->list.array,modifyCnt*\
1735 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1736 for(idy=0;idy<elementCnt;idy++)
1738 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1739 sizeof(GNBDUConfigurationUpdateIEs_t));
1741 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1742 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1743 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1744 (Size)sizeof(InitiatingMessage_t));
1745 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1748 buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.plmn[0],\
1749 &modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->pLMN_Identity);
1750 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
1751 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1752 if(modifyItem->served_Cell_Information.servedPLMNs.list.\
1753 array[0]->iE_Extensions == NULLP)
1755 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1756 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1757 for(idy=0;idy<servPlmnCnt;idy++)
1759 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1760 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1762 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1763 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1764 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1766 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1768 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1769 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1770 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1771 DU_FREE(cellsToModify->list.array[idy],\
1772 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1773 DU_FREE(cellsToModify->list.array,modifyCnt*\
1774 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1775 for(idy=0;idy<elementCnt;idy++)
1777 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1778 sizeof(GNBDUConfigurationUpdateIEs_t));
1780 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1781 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1782 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1783 (Size)sizeof(InitiatingMessage_t));
1784 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1788 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1789 iE_Extensions->list.count = extensionCnt;
1790 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1791 iE_Extensions->list.size = extensionCnt * \
1792 sizeof(struct ServedPLMNs_ItemExtIEs *);
1793 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
1794 array[0]->iE_Extensions->list.array,extensionCnt*\
1795 sizeof(struct ServedPLMNs_ItemExtIEs *));
1796 if(modifyItem->served_Cell_Information.servedPLMNs.list.\
1797 array[0]->iE_Extensions->list.array == NULLP)
1799 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1800 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1801 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1802 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1803 for(idy=0;idy<servPlmnCnt;idy++)
1805 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1806 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1808 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1809 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1810 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1812 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1814 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1815 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1816 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1817 DU_FREE(cellsToModify->list.array[idy],\
1818 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1819 DU_FREE(cellsToModify->list.array,modifyCnt*\
1820 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1821 for(idy=0;idy<elementCnt;idy++)
1823 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1824 sizeof(GNBDUConfigurationUpdateIEs_t));
1826 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1827 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1828 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1829 (Size)sizeof(InitiatingMessage_t));
1830 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1833 for(idy=0;idy<extensionCnt;idy++)
1835 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
1836 array[0]->iE_Extensions->list.array[idy],\
1837 sizeof(struct ServedPLMNs_ItemExtIEs));
1838 if(modifyItem->served_Cell_Information.servedPLMNs.list.\
1839 array[0]->iE_Extensions->list.array[idy] == NULLP)
1841 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1842 array[0]->iE_Extensions->list.array,extensionCnt*\
1843 sizeof(struct ServedPLMNs_ItemExtIEs *));
1844 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1845 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1846 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1847 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1848 for(idy=0;idy<servPlmnCnt;idy++)
1850 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1851 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1853 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1854 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1855 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1857 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1859 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1860 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1861 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1862 DU_FREE(cellsToModify->list.array[idy],\
1863 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1864 DU_FREE(cellsToModify->list.array,modifyCnt*\
1865 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1866 for(idy=0;idy<elementCnt;idy++)
1868 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1869 sizeof(GNBDUConfigurationUpdateIEs_t));
1871 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1872 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1873 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1874 (Size)sizeof(InitiatingMessage_t));
1875 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1879 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1880 iE_Extensions->list.array[0]->id = ProtocolIE_ID_id_TAISliceSupportList;
1881 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1882 iE_Extensions->list.array[0]->criticality = Criticality_ignore;
1883 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1884 iE_Extensions->list.array[0]->extensionValue.present = \
1885 ServedPLMNs_ItemExtIEs__extensionValue_PR_SliceSupportList;
1886 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1887 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1889 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1890 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1891 list.size = sizeof(SliceSupportItem_t *);
1892 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1893 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1894 list.array,sizeof( SliceSupportItem_t *));
1895 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1896 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1897 list.array == NULLP)
1899 for(idy=0;idy<extensionCnt;idy++)
1901 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1902 array[0]->iE_Extensions->list.array[idy],\
1903 sizeof(struct ServedPLMNs_ItemExtIEs));
1905 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1906 array[0]->iE_Extensions->list.array,extensionCnt*\
1907 sizeof(struct ServedPLMNs_ItemExtIEs *));
1908 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1909 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1910 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1911 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1912 for(idy=0;idy<servPlmnCnt;idy++)
1914 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1915 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1917 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1918 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1919 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1921 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1923 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1924 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1925 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1926 DU_FREE(cellsToModify->list.array[idy],\
1927 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1928 DU_FREE(cellsToModify->list.array,modifyCnt*\
1929 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1930 for(idy=0;idy<elementCnt;idy++)
1932 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1933 sizeof(GNBDUConfigurationUpdateIEs_t));
1935 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1936 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1937 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1938 (Size)sizeof(InitiatingMessage_t));
1939 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1942 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1943 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1944 list.array[0],sizeof( SliceSupportItem_t));
1945 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1946 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1947 list.array[0] == NULLP)
1949 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1950 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1951 list.array,sizeof( SliceSupportItem_t *));
1952 for(idy=0;idy<extensionCnt;idy++)
1954 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1955 array[0]->iE_Extensions->list.array[idy],\
1956 sizeof(struct ServedPLMNs_ItemExtIEs));
1958 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1959 array[0]->iE_Extensions->list.array,extensionCnt*\
1960 sizeof(struct ServedPLMNs_ItemExtIEs *));
1961 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1962 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1963 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1964 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1965 for(idy=0;idy<servPlmnCnt;idy++)
1967 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1968 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1970 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1971 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1972 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1974 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1976 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1977 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1978 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1979 DU_FREE(cellsToModify->list.array[idy],\
1980 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1981 DU_FREE(cellsToModify->list.array,modifyCnt*\
1982 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1983 for(idy=0;idy<elementCnt;idy++)
1985 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1986 sizeof(GNBDUConfigurationUpdateIEs_t));
1988 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1989 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1990 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1991 (Size)sizeof(InitiatingMessage_t));
1992 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1995 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1996 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1997 list.array[0]->sNSSAI.sST.size = sizeof(uint8_t);
1998 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1999 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2000 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2001 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2002 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2003 list.array[0]->sNSSAI.sST.buf == NULLP)
2005 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2006 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2007 list.array[0],sizeof( SliceSupportItem_t));
2008 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2009 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2010 list.array,sizeof( SliceSupportItem_t *));
2011 for(idy=0;idy<extensionCnt;idy++)
2013 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2014 array[0]->iE_Extensions->list.array[idy],\
2015 sizeof(struct ServedPLMNs_ItemExtIEs));
2017 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2018 array[0]->iE_Extensions->list.array,extensionCnt*\
2019 sizeof(struct ServedPLMNs_ItemExtIEs *));
2020 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2021 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
2022 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2023 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2024 for(idy=0;idy<servPlmnCnt;idy++)
2026 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2027 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2029 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2030 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2031 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2033 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2035 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2036 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2037 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2038 DU_FREE(cellsToModify->list.array[idy],\
2039 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2040 DU_FREE(cellsToModify->list.array,modifyCnt*\
2041 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2042 for(idy=0;idy<elementCnt;idy++)
2044 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2045 sizeof(GNBDUConfigurationUpdateIEs_t));
2047 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2048 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2049 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2050 (Size)sizeof(InitiatingMessage_t));
2051 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2054 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2055 iE_Extensions->list.array[0]->extensionValue. choice.SliceSupportList.\
2056 list.array[0]->sNSSAI.sST.buf[0] = 3;
2057 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2058 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2059 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2060 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2061 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2062 list.array[0]->sNSSAI.sD == NULLP)
2064 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2065 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2066 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2067 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2068 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2069 list.array[0],sizeof( SliceSupportItem_t));
2070 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2071 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2072 list.array,sizeof( SliceSupportItem_t *));
2073 for(idy=0;idy<extensionCnt;idy++)
2075 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2076 array[0]->iE_Extensions->list.array[idy],\
2077 sizeof(struct ServedPLMNs_ItemExtIEs));
2079 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2080 array[0]->iE_Extensions->list.array,extensionCnt*\
2081 sizeof(struct ServedPLMNs_ItemExtIEs *));
2082 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2083 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
2084 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2085 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2086 for(idy=0;idy<servPlmnCnt;idy++)
2088 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2089 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2091 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2092 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2093 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2095 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2097 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2098 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2099 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2100 DU_FREE(cellsToModify->list.array[idy],\
2101 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2102 DU_FREE(cellsToModify->list.array,modifyCnt*\
2103 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2104 for(idy=0;idy<elementCnt;idy++)
2106 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2107 sizeof(GNBDUConfigurationUpdateIEs_t));
2109 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2110 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2111 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2112 (Size)sizeof(InitiatingMessage_t));
2113 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2116 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2117 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2118 list.array[0]->sNSSAI.sD->size = 3*sizeof(uint8_t);
2119 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2120 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2121 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2122 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2123 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2124 list.array[0]->sNSSAI.sD->buf == NULLP)
2126 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2127 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2128 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2129 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2130 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2131 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2132 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2133 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2134 list.array[0],sizeof( SliceSupportItem_t));
2135 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2136 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2137 list.array,sizeof( SliceSupportItem_t *));
2138 for(idy=0;idy<extensionCnt;idy++)
2140 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2141 array[0]->iE_Extensions->list.array[idy],\
2142 sizeof(struct ServedPLMNs_ItemExtIEs));
2144 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2145 array[0]->iE_Extensions->list.array,extensionCnt*\
2146 sizeof(struct ServedPLMNs_ItemExtIEs *));
2147 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2148 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
2149 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2150 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2151 for(idy=0;idy<servPlmnCnt;idy++)
2153 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2154 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2156 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2157 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2158 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2160 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2162 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2163 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2164 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2165 DU_FREE(cellsToModify->list.array[idy],\
2166 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2167 DU_FREE(cellsToModify->list.array,modifyCnt*\
2168 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2169 for(idy=0;idy<elementCnt;idy++)
2171 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2172 sizeof(GNBDUConfigurationUpdateIEs_t));
2174 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2175 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2176 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2177 (Size)sizeof(InitiatingMessage_t));
2178 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2181 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2182 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2183 list.array[0]->sNSSAI.sD->buf[0] = 3;
2184 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2185 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2186 list.array[0]->sNSSAI.sD->buf[1] = 6;
2187 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2188 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2189 list.array[0]->sNSSAI.sD->buf[2] = 9;
2191 /*nR Mode Info with FDD*/
2192 modifyItem->served_Cell_Information.nR_Mode_Info.present = \
2193 NR_Mode_Info_PR_fDD;
2194 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2195 sizeof(FDD_Info_t));
2196 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD == NULLP)
2198 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2199 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2200 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2201 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2202 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2203 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2204 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2205 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2206 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2207 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2208 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2209 list.array[0],sizeof( SliceSupportItem_t));
2210 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2211 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2212 list.array,sizeof( SliceSupportItem_t *));
2213 for(idy=0;idy<extensionCnt;idy++)
2215 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2216 array[0]->iE_Extensions->list.array[idy],\
2217 sizeof(struct ServedPLMNs_ItemExtIEs));
2219 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2220 array[0]->iE_Extensions->list.array,extensionCnt*\
2221 sizeof(struct ServedPLMNs_ItemExtIEs *));
2222 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2223 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
2224 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2225 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2226 for(idy=0;idy<servPlmnCnt;idy++)
2228 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2229 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2231 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2232 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2233 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2235 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2237 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2238 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2239 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2240 DU_FREE(cellsToModify->list.array[idy],\
2241 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2242 DU_FREE(cellsToModify->list.array,modifyCnt*\
2243 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2244 for(idy=0;idy<elementCnt;idy++)
2246 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2247 sizeof(GNBDUConfigurationUpdateIEs_t));
2249 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2250 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2251 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2252 (Size)sizeof(InitiatingMessage_t));
2253 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2256 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2257 uL_NRFreqInfo.nRARFCN = duCfgParam.srvdCellLst[0].duCellInfo.\
2258 f1Mode.mode.fdd.ulNrFreqInfo.nrArfcn;
2259 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2260 uL_NRFreqInfo.freqBandListNr.list.count = 1;
2261 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2262 uL_NRFreqInfo.freqBandListNr.list.size = \
2263 sizeof(struct FreqBandNrItem *);
2264 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2265 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2266 array,sizeof(struct FreqBandNrItem *));
2267 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2268 fDD->uL_NRFreqInfo.freqBandListNr.list.array == NULLP)
2270 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2271 sizeof(FDD_Info_t));
2272 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2273 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2274 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2275 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2276 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2277 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2278 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2279 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2280 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2281 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2282 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2283 list.array[0],sizeof( SliceSupportItem_t));
2284 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2285 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2286 list.array,sizeof( SliceSupportItem_t *));
2287 for(idy=0;idy<extensionCnt;idy++)
2289 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2290 array[0]->iE_Extensions->list.array[idy],\
2291 sizeof(struct ServedPLMNs_ItemExtIEs));
2293 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2294 array[0]->iE_Extensions->list.array,extensionCnt*\
2295 sizeof(struct ServedPLMNs_ItemExtIEs *));
2296 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2297 array[0]->iE_Extensions,\
2298 sizeof(struct ProtocolExtensionContainer_4624P3));
2299 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2300 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2301 for(idy=0;idy<servPlmnCnt;idy++)
2303 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2304 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2306 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2307 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2308 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2310 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2312 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2313 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2314 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2315 DU_FREE(cellsToModify->list.array[idy],\
2316 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2317 DU_FREE(cellsToModify->list.array,modifyCnt*\
2318 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2319 for(idy=0;idy<elementCnt;idy++)
2321 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2322 sizeof(GNBDUConfigurationUpdateIEs_t));
2324 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2325 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2326 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2327 (Size)sizeof(InitiatingMessage_t));
2328 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2331 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2332 uL_NRFreqInfo.freqBandListNr.list.\
2333 array[0],sizeof(struct FreqBandNrItem));
2334 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2335 uL_NRFreqInfo.freqBandListNr.list.\
2338 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2339 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2340 array,sizeof(struct FreqBandNrItem *));
2341 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2342 sizeof(FDD_Info_t));
2343 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2344 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2345 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2346 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2347 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2348 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2349 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2350 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2351 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2352 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2353 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2354 list.array[0],sizeof( SliceSupportItem_t));
2355 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2356 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2357 list.array,sizeof( SliceSupportItem_t *));
2358 for(idy=0;idy<extensionCnt;idy++)
2360 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2361 array[0]->iE_Extensions->list.array[idy],\
2362 sizeof(struct ServedPLMNs_ItemExtIEs));
2364 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2365 array[0]->iE_Extensions->list.array,extensionCnt*\
2366 sizeof(struct ServedPLMNs_ItemExtIEs *));
2367 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2368 array[0]->iE_Extensions,\
2369 sizeof(struct ProtocolExtensionContainer_4624P3));
2370 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2371 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2372 for(idy=0;idy<servPlmnCnt;idy++)
2374 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2375 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2377 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2378 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2379 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2381 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2383 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2384 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2385 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2386 DU_FREE(cellsToModify->list.array[idy],\
2387 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2388 DU_FREE(cellsToModify->list.array,modifyCnt*\
2389 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2390 for(idy=0;idy<elementCnt;idy++)
2392 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2393 sizeof(GNBDUConfigurationUpdateIEs_t));
2395 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2396 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2397 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2398 (Size)sizeof(InitiatingMessage_t));
2399 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2402 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->uL_NRFreqInfo.\
2403 freqBandListNr.list.array[0]->freqBandIndicatorNr = \
2404 duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.\
2405 freqBand[0].nrFreqBand;
2406 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->uL_NRFreqInfo.\
2407 freqBandListNr.list.array[0]->supportedSULBandList.list.count=0;
2408 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2409 nRARFCN = duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.\
2410 dlNrFreqInfo.nrArfcn;
2411 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2412 freqBandListNr.list.count = 1;
2413 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2414 freqBandListNr.list.size = sizeof(struct FreqBandNrItem *);
2415 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2416 dL_NRFreqInfo.freqBandListNr.list.array,\
2417 sizeof(struct FreqBandNrItem *));
2418 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2419 dL_NRFreqInfo.freqBandListNr.list.array == NULLP)
2421 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2422 uL_NRFreqInfo.freqBandListNr.list.\
2423 array[0],sizeof(struct FreqBandNrItem));
2424 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2425 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2426 array,sizeof(struct FreqBandNrItem *));
2427 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2428 sizeof(FDD_Info_t));
2429 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2430 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2431 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2432 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2433 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2434 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2435 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2436 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2437 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2438 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2439 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2440 list.array[0],sizeof( SliceSupportItem_t));
2441 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2442 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2443 list.array,sizeof( SliceSupportItem_t *));
2444 for(idy=0;idy<extensionCnt;idy++)
2446 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2447 array[0]->iE_Extensions->list.array[idy],\
2448 sizeof(struct ServedPLMNs_ItemExtIEs));
2450 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2451 array[0]->iE_Extensions->list.array,extensionCnt*\
2452 sizeof(struct ServedPLMNs_ItemExtIEs *));
2453 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2454 array[0]->iE_Extensions,\
2455 sizeof(struct ProtocolExtensionContainer_4624P3));
2456 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2457 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2458 for(idy=0;idy<servPlmnCnt;idy++)
2460 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2461 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2463 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2464 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2465 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2467 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2469 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2470 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2471 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2472 DU_FREE(cellsToModify->list.array[idy],\
2473 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2474 DU_FREE(cellsToModify->list.array,modifyCnt*\
2475 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2476 for(idy=0;idy<elementCnt;idy++)
2478 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2479 sizeof(GNBDUConfigurationUpdateIEs_t));
2481 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2482 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2483 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2484 (Size)sizeof(InitiatingMessage_t));
2485 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2488 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2489 dL_NRFreqInfo.freqBandListNr.list.array[0],\
2490 sizeof(struct FreqBandNrItem));
2491 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2492 dL_NRFreqInfo.freqBandListNr.list.array[0] == NULLP)
2494 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2495 dL_NRFreqInfo.freqBandListNr.list.array,\
2496 sizeof(struct FreqBandNrItem *));
2497 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2498 uL_NRFreqInfo.freqBandListNr.list.\
2499 array[0],sizeof(struct FreqBandNrItem));
2500 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2501 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2502 array,sizeof(struct FreqBandNrItem *));
2503 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2504 sizeof(FDD_Info_t));
2505 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2506 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2507 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2508 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2509 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2510 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2511 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2512 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2513 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2514 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2515 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2516 list.array[0],sizeof( SliceSupportItem_t));
2517 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2518 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2519 list.array,sizeof( SliceSupportItem_t *));
2520 for(idy=0;idy<extensionCnt;idy++)
2522 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2523 array[0]->iE_Extensions->list.array[idy],\
2524 sizeof(struct ServedPLMNs_ItemExtIEs));
2526 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2527 array[0]->iE_Extensions->list.array,extensionCnt*\
2528 sizeof(struct ServedPLMNs_ItemExtIEs *));
2529 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2530 array[0]->iE_Extensions,\
2531 sizeof(struct ProtocolExtensionContainer_4624P3));
2532 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2533 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2534 for(idy=0;idy<servPlmnCnt;idy++)
2536 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2537 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2539 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2540 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2541 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2543 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2545 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2546 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2547 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2548 DU_FREE(cellsToModify->list.array[idy],\
2549 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2550 DU_FREE(cellsToModify->list.array,modifyCnt*\
2551 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2552 for(idy=0;idy<elementCnt;idy++)
2554 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2555 sizeof(GNBDUConfigurationUpdateIEs_t));
2557 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2558 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2559 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2560 (Size)sizeof(InitiatingMessage_t));
2561 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2564 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2565 freqBandListNr.list.array[0]->freqBandIndicatorNr = \
2566 duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.\
2567 freqBand[0].nrFreqBand;
2568 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2569 freqBandListNr.list.array[0]->supportedSULBandList.list.count=0;
2571 /*Transmission Bandwidth*/
2572 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2573 uL_Transmission_Bandwidth.nRSCS = duCfgParam.srvdCellLst[0].duCellInfo.\
2574 f1Mode.mode.fdd.ulTxBw.nrScs;
2575 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2576 uL_Transmission_Bandwidth.nRNRB = duCfgParam.srvdCellLst[0].duCellInfo.\
2577 f1Mode.mode.fdd.ulTxBw.nrb;
2579 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2580 dL_Transmission_Bandwidth.nRSCS = duCfgParam.srvdCellLst[0].duCellInfo.\
2581 f1Mode.mode.fdd.dlTxBw.nrScs;
2582 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2583 dL_Transmission_Bandwidth.nRNRB = duCfgParam.srvdCellLst[0].duCellInfo.\
2584 f1Mode.mode.fdd.dlTxBw.nrb;
2586 /*Measurement timing Config*/
2587 modifyItem->served_Cell_Information.measurementTimingConfiguration.size = \
2589 DU_ALLOC(modifyItem->served_Cell_Information.measurementTimingConfiguration.\
2590 buf,sizeof(uint8_t));
2591 if(modifyItem->served_Cell_Information.measurementTimingConfiguration.buf == NULLP)
2593 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2594 dL_NRFreqInfo.freqBandListNr.list.array[0],\
2595 sizeof(struct FreqBandNrItem));
2596 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2597 dL_NRFreqInfo.freqBandListNr.list.array,\
2598 sizeof(struct FreqBandNrItem *));
2599 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2600 uL_NRFreqInfo.freqBandListNr.list.\
2601 array[0],sizeof(struct FreqBandNrItem));
2602 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2603 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2604 array,sizeof(struct FreqBandNrItem *));
2605 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2606 sizeof(FDD_Info_t));
2607 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2608 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2609 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2610 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2611 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2612 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2613 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2614 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2615 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2616 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2617 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2618 list.array[0],sizeof( SliceSupportItem_t));
2619 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2620 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2621 list.array,sizeof( SliceSupportItem_t *));
2622 for(idy=0;idy<extensionCnt;idy++)
2624 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2625 array[0]->iE_Extensions->list.array[idy],\
2626 sizeof(struct ServedPLMNs_ItemExtIEs));
2628 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2629 array[0]->iE_Extensions->list.array,extensionCnt*\
2630 sizeof(struct ServedPLMNs_ItemExtIEs *));
2631 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2632 array[0]->iE_Extensions,\
2633 sizeof(struct ProtocolExtensionContainer_4624P3));
2634 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2635 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2636 for(idy=0;idy<servPlmnCnt;idy++)
2638 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2639 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2641 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2642 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2643 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2645 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2647 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2648 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2649 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2650 DU_FREE(cellsToModify->list.array[idy],\
2651 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2652 DU_FREE(cellsToModify->list.array,modifyCnt*\
2653 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2654 for(idy=0;idy<elementCnt;idy++)
2656 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2657 sizeof(GNBDUConfigurationUpdateIEs_t));
2659 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2660 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2661 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2662 (Size)sizeof(InitiatingMessage_t));
2663 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2666 modifyItem->served_Cell_Information.measurementTimingConfiguration.\
2667 buf[0] = duCfgParam.srvdCellLst[0].duCellInfo.measTimeCfg;
2670 // NOTE :GNB DU SYS INFO:MIB AND SIB1 INFORMATION TO BE BUILT AND FILLED HERE
2672 duCfgUpdate->protocolIEs.list.array[2]->id = ProtocolIE_ID_id_gNB_DU_ID;
2673 duCfgUpdate->protocolIEs.list.array[2]->criticality = Criticality_reject;
2674 duCfgUpdate->protocolIEs.list.array[2]->value.present = \
2675 GNBDUConfigurationUpdateIEs__value_PR_GNB_DU_ID;
2676 duCfgUpdate->protocolIEs.list.array[2]->value.choice.GNB_DU_ID.size = \
2678 DU_ALLOC(duCfgUpdate->protocolIEs.list.array[2]->value.choice.GNB_DU_ID.buf,\
2680 if(duCfgUpdate->protocolIEs.list.array[2]->value.choice.GNB_DU_ID.buf == NULLP)
2682 DU_FREE(modifyItem->served_Cell_Information.measurementTimingConfiguration.\
2683 buf,sizeof(uint8_t));
2684 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2685 dL_NRFreqInfo.freqBandListNr.list.array[0],\
2686 sizeof(struct FreqBandNrItem));
2687 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2688 dL_NRFreqInfo.freqBandListNr.list.array,\
2689 sizeof(struct FreqBandNrItem *));
2690 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2691 uL_NRFreqInfo.freqBandListNr.list.\
2692 array[0],sizeof(struct FreqBandNrItem));
2693 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2694 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2695 array,sizeof(struct FreqBandNrItem *));
2696 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2697 sizeof(FDD_Info_t));
2698 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2699 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2700 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2701 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2702 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2703 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2704 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2705 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2706 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2707 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2708 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2709 list.array[0],sizeof( SliceSupportItem_t));
2710 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2711 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2712 list.array,sizeof( SliceSupportItem_t *));
2713 for(idy=0;idy<extensionCnt;idy++)
2715 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2716 array[0]->iE_Extensions->list.array[idy],\
2717 sizeof(struct ServedPLMNs_ItemExtIEs));
2719 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2720 array[0]->iE_Extensions->list.array,extensionCnt*\
2721 sizeof(struct ServedPLMNs_ItemExtIEs *));
2722 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2723 array[0]->iE_Extensions,\
2724 sizeof(struct ProtocolExtensionContainer_4624P3));
2725 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2726 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2727 for(idy=0;idy<servPlmnCnt;idy++)
2729 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2730 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2732 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2733 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2734 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2736 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2738 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2739 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2740 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2741 DU_FREE(cellsToModify->list.array[idy],\
2742 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2743 DU_FREE(cellsToModify->list.array,modifyCnt*\
2744 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2745 for(idy=0;idy<elementCnt;idy++)
2747 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2748 sizeof(GNBDUConfigurationUpdateIEs_t));
2750 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2751 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2752 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2753 (Size)sizeof(InitiatingMessage_t));
2754 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2757 duCfgUpdate->protocolIEs.list.array[2]->value.choice.GNB_DU_ID.buf[0] = \
2763 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apDuCfg);
2765 /* Encode the DU Config Update type as APER */
2766 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
2768 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apDuCfg, PrepFinalEncBuf, encBuf);
2771 for(idx=0;idx<elementCnt;idx++)
2773 DU_FREE(duCfgUpdate->protocolIEs.list.array[idx], sizeof(GNBDUConfigurationUpdateIEs_t));
2775 DU_FREE(duCfgUpdate->protocolIEs.list.array, elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2776 DU_FREE(f1apDuCfg->choice.initiatingMessage, (Size)sizeof(InitiatingMessage_t));
2777 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2779 /* Checking encode results */
2780 if(encRetVal.encoded == ENCODE_FAIL)
2782 DU_LOG("F1AP : Could not encode DUConfigUpdate structure (at %s)\n",encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
2787 DU_LOG("\nF1AP : Created APER encoded buffer for DUConfigUpdate\n");
2788 for(int i=0; i< encBufSize; i++)
2790 printf("%x",encBuf[i]);
2795 if(SendF1APMsg(DU_APP_MEM_REGION, DU_POOL) != ROK)
2797 DU_LOG("\nF1AP : Sending GND-DU Config Update failed");
2801 }/* End of BuildAndSendDUConfigUpdate */
2803 /*******************************************************************
2805 * @brief Builds and sends the ULRRCMessageTransfer
2809 * Function : BuildAndSendULRRCMessageTransfer
2811 * Functionality: Constructs the UL RRC Message Transfer and sends
2812 * it to the CU through SCTP.
2816 * @return ROK - success
2819 * ****************************************************************/
2820 S16 BuildAndSendULRRCMessageTransfer()
2825 F1AP_PDU_t *f1apMsg = NULL;
2826 ULRRCMessageTransfer_t *ulRRCMsg;
2827 asn_enc_rval_t encRetVal; /* Encoder return value */
2829 DU_LOG("\n F1AP : Building UL RRC Message Transfer Message\n");
2831 DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t));
2832 if(f1apMsg == NULLP)
2834 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
2838 f1apMsg->present = F1AP_PDU_PR_initiatingMessage;
2839 DU_ALLOC(f1apMsg->choice.initiatingMessage,
2840 sizeof(InitiatingMessage_t));
2841 if(f1apMsg->choice.initiatingMessage == NULLP)
2843 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
2844 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
2848 f1apMsg->choice.initiatingMessage->procedureCode = \
2849 ProcedureCode_id_ULRRCMessageTransfer;
2850 f1apMsg->choice.initiatingMessage->criticality = Criticality_ignore;
2851 f1apMsg->choice.initiatingMessage->value.present = \
2852 InitiatingMessage__value_PR_ULRRCMessageTransfer;
2854 &f1apMsg->choice.initiatingMessage->value.choice.ULRRCMessageTransfer;
2856 ulRRCMsg->protocolIEs.list.count = elementCnt;
2857 ulRRCMsg->protocolIEs.list.size = \
2858 elementCnt * sizeof(ULRRCMessageTransferIEs_t *);
2860 /* Initialize the F1Setup members */
2861 DU_ALLOC(ulRRCMsg->protocolIEs.list.array, \
2862 elementCnt * sizeof(ULRRCMessageTransferIEs_t *));
2863 if(ulRRCMsg->protocolIEs.list.array == NULLP)
2865 DU_LOG(" F1AP : Memory allocation for UL RRC MessageTransferIEs failed");
2866 DU_FREE(f1apMsg->choice.initiatingMessage,
2867 sizeof(InitiatingMessage_t));
2868 DU_FREE(f1apMsg,(Size)sizeof(F1AP_PDU_t));
2872 for(idx=0; idx<elementCnt; idx++)
2874 DU_ALLOC(ulRRCMsg->protocolIEs.list.array[idx],\
2875 sizeof(ULRRCMessageTransferIEs_t));
2876 if(ulRRCMsg->protocolIEs.list.array[idx] == NULLP)
2878 for(ieId=0; ieId<idx; ieId++)
2880 DU_FREE(ulRRCMsg->protocolIEs.list.array[ieId],\
2881 sizeof(ULRRCMessageTransferIEs_t));
2883 DU_FREE(ulRRCMsg->protocolIEs.list.array,\
2884 elementCnt * sizeof(ULRRCMessageTransferIEs_t *));
2885 DU_FREE(f1apMsg->choice.initiatingMessage,\
2886 sizeof(InitiatingMessage_t));
2887 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
2894 /*GNB CU UE F1AP ID*/
2895 ulRRCMsg->protocolIEs.list.array[idx]->id = \
2896 ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID;
2897 ulRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
2898 ulRRCMsg->protocolIEs.list.array[idx]->value.present = \
2899 ULRRCMessageTransferIEs__value_PR_GNB_CU_UE_F1AP_ID;
2900 ulRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_CU_UE_F1AP_ID = CU_ID;
2902 /*GNB DU UE F1AP ID*/
2904 ulRRCMsg->protocolIEs.list.array[idx]->id = \
2905 ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
2906 ulRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
2907 ulRRCMsg->protocolIEs.list.array[idx]->value.present = \
2908 ULRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID;
2909 ulRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID = DU_ID;
2913 ulRRCMsg->protocolIEs.list.array[idx]->id = \
2914 ProtocolIE_ID_id_SRBID;
2915 ulRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
2916 ulRRCMsg->protocolIEs.list.array[idx]->value.present = \
2917 ULRRCMessageTransferIEs__value_PR_SRBID;
2918 ulRRCMsg->protocolIEs.list.array[idx]->value.choice.SRBID = UL_SRBID;
2923 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
2925 /* Encode the F1SetupRequest type as APER */
2926 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
2928 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\
2930 /* Encode results */
2931 if(encRetVal.encoded == ENCODE_FAIL)
2933 DU_LOG( "\n F1AP : Could not encode ULRRCMessageTransfer structure (at %s)\n",\
2934 encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
2939 DU_LOG("\n F1AP : Created APER encoded buffer for ULRRCMessageTransfer\n");
2940 for(int i=0; i< encBufSize; i++)
2942 printf("%x",encBuf[i]);
2947 if(SendF1APMsg(DU_APP_MEM_REGION,DU_POOL) != ROK)
2949 DU_LOG("\n F1AP : Sending UL RRC Message Transfer Failed");
2953 }/* End of BuildAndSendULRRCMessageTransfer*/
2955 /*******************************************************************
2957 * @brief Builds and sends the InitialULRRCMessage
2961 * Function : BuildAndSendRRCSetupReq
2963 * Functionality: Constructs the Initial UL RRC Message Transfer and sends
2964 * it to the CU through SCTP.
2968 * @return ROK - success
2971 * ****************************************************************/
2972 S16 BuildAndSendRRCSetupReq()
2978 F1AP_PDU_t *f1apMsg = NULL;
2979 InitialULRRCMessageTransfer_t *initULRRCMsg;
2980 asn_enc_rval_t encRetVal; /* Encoder return value */
2982 DU_LOG("\n F1AP : Building RRC Setup Request\n");
2984 DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t));
2985 if(f1apMsg == NULLP)
2987 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
2991 f1apMsg->present = F1AP_PDU_PR_initiatingMessage;
2992 DU_ALLOC(f1apMsg->choice.initiatingMessage,sizeof(InitiatingMessage_t));
2993 if(f1apMsg->choice.initiatingMessage == NULLP)
2995 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
2996 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3000 f1apMsg->choice.initiatingMessage->procedureCode = \
3001 ProcedureCode_id_InitialULRRCMessageTransfer;
3002 f1apMsg->choice.initiatingMessage->criticality = Criticality_ignore;
3003 f1apMsg->choice.initiatingMessage->value.present = \
3004 InitiatingMessage__value_PR_InitialULRRCMessageTransfer;
3006 &f1apMsg->choice.initiatingMessage->value.choice.InitialULRRCMessageTransfer;
3008 initULRRCMsg->protocolIEs.list.count = elementCnt;
3009 initULRRCMsg->protocolIEs.list.size = \
3010 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *);
3012 /* Initialize the F1Setup members */
3013 DU_ALLOC(initULRRCMsg->protocolIEs.list.array, \
3014 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *));
3015 if(initULRRCMsg->protocolIEs.list.array == NULLP)
3017 DU_LOG(" F1AP : Memory allocation for RRCSetupRequestMessageTransferIEs failed");
3018 DU_FREE(f1apMsg->choice.initiatingMessage,
3019 sizeof(InitiatingMessage_t));
3020 DU_FREE(f1apMsg,(Size)sizeof(F1AP_PDU_t));
3024 for(idx=0; idx<elementCnt; idx++)
3026 DU_ALLOC(initULRRCMsg->protocolIEs.list.array[idx],\
3027 sizeof(InitialULRRCMessageTransferIEs_t));
3028 if(initULRRCMsg->protocolIEs.list.array[idx] == NULLP)
3030 for(ieId=0; ieId<idx; ieId++)
3032 DU_FREE(initULRRCMsg->protocolIEs.list.array[ieId],\
3033 sizeof(InitialULRRCMessageTransferIEs_t));
3035 DU_FREE(initULRRCMsg->protocolIEs.list.array,\
3036 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *));
3037 DU_FREE(f1apMsg->choice.initiatingMessage,\
3038 sizeof(InitiatingMessage_t));
3039 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3046 /*GNB DU UE F1AP ID*/
3047 initULRRCMsg->protocolIEs.list.array[idx]->id = \
3048 ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
3049 initULRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3050 initULRRCMsg->protocolIEs.list.array[idx]->value.present = \
3051 InitialULRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID;
3052 initULRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID = DU_ID;
3056 initULRRCMsg->protocolIEs.list.array[idx]->id = \
3057 ProtocolIE_ID_id_NRCGI;
3058 initULRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3059 initULRRCMsg->protocolIEs.list.array[idx]->value.present = \
3060 InitialULRRCMessageTransferIEs__value_PR_NRCGI;
3062 BuildNrcgi(&initULRRCMsg->protocolIEs.list.array[idx]->value.choice.NRCGI);
3065 DU_FREE(initULRRCMsg->protocolIEs.list.array[idx]->value.choice.NRCGI.\
3066 nRCellIdentity.buf,initULRRCMsg->protocolIEs.list.array[idx]->\
3067 value.choice.NRCGI.nRCellIdentity.size);
3068 DU_FREE(initULRRCMsg->protocolIEs.list.array[idx]->value.choice.NRCGI.\
3069 pLMN_Identity.buf,initULRRCMsg->protocolIEs.list.array[idx]->\
3070 value.choice.NRCGI.pLMN_Identity.size);
3071 for(idx=0; idx<elementCnt; idx++)
3073 DU_FREE(initULRRCMsg->protocolIEs.list.array[idx],\
3074 sizeof(InitialULRRCMessageTransferIEs_t));
3076 DU_FREE(initULRRCMsg->protocolIEs.list.array,\
3077 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *));
3078 DU_FREE(f1apMsg->choice.initiatingMessage,\
3079 sizeof(InitiatingMessage_t));
3080 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3087 initULRRCMsg->protocolIEs.list.array[idx]->id = \
3088 ProtocolIE_ID_id_C_RNTI;
3089 initULRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3090 initULRRCMsg->protocolIEs.list.array[idx]->value.present = \
3091 InitialULRRCMessageTransferIEs__value_PR_C_RNTI;
3092 initULRRCMsg->protocolIEs.list.array[idx]->value.choice.C_RNTI = CRNTI;
3095 // Need to fill this.
3097 /*DUtoCURRCContainer*/
3098 //Need to fill this too.
3101 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
3103 /* Encode the F1SetupRequest type as APER */
3104 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
3106 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\
3108 /* Encode results */
3109 if(encRetVal.encoded == ENCODE_FAIL)
3111 DU_LOG( "\n F1AP : Could not encode Initial UL RRC Message Transfer structure (at %s)\n",\
3112 encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
3117 DU_LOG("\n F1AP : Created APER encoded buffer for Initial UL RRC Message transfer\n");
3118 for(int i=0; i< encBufSize; i++)
3120 printf("%x",encBuf[i]);
3125 if(SendF1APMsg(DU_APP_MEM_REGION,DU_POOL) != ROK)
3127 DU_LOG("\n F1AP : Sending Initial UL RRC Message Transfer Failed");
3131 }/* End of BuildAndSendRRCSetupReq*/
3133 /*******************************************************************
3135 * @brief Builds Special cell list for UE Setup Request
3139 * Function : BuildSplCellList
3141 * Functionality: Constructs the Special Cell list for UESetReq
3143 * @params[in] SCell_ToBeSetup_List_t *spCellLst
3145 * @return ROK - success
3148 * ****************************************************************/
3149 S16 BuildSplCellList(SCell_ToBeSetup_List_t *spCellLst)
3156 spCellLst->list.count = cellCnt;
3157 spCellLst->list.size = cellCnt * sizeof(struct SCell_ToBeSetup_ItemIEs *);
3158 DU_ALLOC(spCellLst->list.array,spCellLst->list.size);
3159 if(spCellLst->list.array == NULLP)
3163 for(idx=0; idx<cellCnt; idx++)
3165 DU_ALLOC(spCellLst->list.array[idx],sizeof(struct SCell_ToBeSetup_ItemIEs));
3166 if(spCellLst->list.array[idx] == NULLP)
3168 for(cellidx=0; cellidx<idx; cellidx++)
3170 DU_FREE(spCellLst->list.array[cellidx],sizeof(struct SCell_ToBeSetup_ItemIEs));
3172 DU_FREE(spCellLst->list.array,spCellLst->list.size);
3177 spCellLst->list.array[idx]->id = ProtocolIE_ID_id_SCell_ToBeSetup_Item;
3178 spCellLst->list.array[idx]->criticality = Criticality_ignore;
3179 spCellLst->list.array[idx]->value.present =\
3180 SCell_ToBeSetup_ItemIEs__value_PR_SCell_ToBeSetup_Item;
3181 /* Special Cell ID -NRCGI */
3182 ret = BuildNrcgi(&spCellLst->list.array[idx]->value.choice.SCell_ToBeSetup_Item.sCell_ID);
3185 for(cellidx=0; cellidx<cellCnt; cellidx++)
3187 DU_FREE(spCellLst->list.array[cellidx],sizeof(struct
3188 SCell_ToBeSetup_ItemIEs));
3190 DU_FREE(spCellLst->list.array,spCellLst->list.size);
3193 /*Special Cell Index*/
3194 spCellLst->list.array[idx]->value.choice.SCell_ToBeSetup_Item.sCellIndex = 1;
3196 }/* End of BuildSplCellList*/
3198 /*******************************************************************
3200 * @brief Builds SRBS to be setup
3204 * Function : BuildSRBSetup
3206 * Functionality: Constructs the SRB's for UESetReq
3208 * @params[in] SRBs_ToBeSetup_List_t *srbSet
3210 * @return ROK - success
3213 * ****************************************************************/
3214 S16 BuildSRBSetup(SRBs_ToBeSetup_List_t *srbSet)
3220 srbSet->list.count = srbCnt;
3221 srbSet->list.size = srbCnt*sizeof(struct SRBs_ToBeSetup_ItemIEs *);
3222 DU_ALLOC(srbSet->list.array,srbSet->list.size);
3223 if(srbSet->list.array == NULLP)
3227 for(idx=0; idx<srbCnt; idx++)
3229 DU_ALLOC(srbSet->list.array[idx],sizeof(struct SRBs_ToBeSetup_ItemIEs));
3230 if(srbSet->list.array[idx] == NULLP)
3232 for(srbidx=0; srbidx<idx; srbidx++)
3234 DU_FREE(srbSet->list.array[srbidx],sizeof(struct SRBs_ToBeSetup_ItemIEs));
3236 DU_FREE(srbSet->list.array,srbSet->list.size);
3240 srbSet->list.array[idx]->id = ProtocolIE_ID_id_SRBs_ToBeSetup_Item;
3241 srbSet->list.array[idx]->criticality = Criticality_ignore;
3242 srbSet->list.array[idx]->value.present = \
3243 SRBs_ToBeSetup_ItemIEs__value_PR_SRBs_ToBeSetup_Item;
3244 srbSet->list.array[idx]->value.choice.SRBs_ToBeSetup_Item.sRBID = 2;
3246 }/* End of BuildSRBSetup*/
3248 /*******************************************************************
3250 * @brief Builds QOS Info for DRB Setum Item
3254 * Function : BuildQOSInfo
3256 * Functionality: Constructs the QOS Info for DRB Setup Item
3258 * @params[in] QoSInformation_t *qosinfo
3260 * @return ROK - success
3263 * ****************************************************************/
3264 S16 BuildQOSInfo(QoSFlowLevelQoSParameters_t *drbQos)
3266 /* NonDynamic5QIDescriptor */
3267 drbQos->qoS_Characteristics.present = QoS_Characteristics_PR_non_Dynamic_5QI;
3268 DU_ALLOC(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI,sizeof(NonDynamic5QIDescriptor_t));
3269 if(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI == NULLP)
3274 drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->fiveQI = 0;
3276 DU_ALLOC(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
3277 sizeof(AveragingWindow_t));
3278 if(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow == \
3281 DU_FREE(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI,\
3282 sizeof(NonDynamic5QIDescriptor_t));
3285 *(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow) = 0;
3286 /*MaxDataBurstVolume*/
3287 DU_ALLOC(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,\
3288 sizeof(MaxDataBurstVolume_t));
3289 if(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume == \
3292 DU_FREE(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
3293 sizeof(AveragingWindow_t));
3294 DU_FREE(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI,\
3295 sizeof(NonDynamic5QIDescriptor_t));
3298 *(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume) = 0;
3300 /*nRGRAN Allocation Retention Priority*/
3301 drbQos->nGRANallocationRetentionPriority.priorityLevel = \
3302 PriorityLevel_highest;
3303 drbQos->nGRANallocationRetentionPriority.pre_emptionCapability = \
3304 Pre_emptionCapability_may_trigger_pre_emption;
3305 drbQos->nGRANallocationRetentionPriority.pre_emptionVulnerability = \
3306 Pre_emptionVulnerability_not_pre_emptable;
3308 /* TO DO: GBR_QoSFlowInformation */
3310 }/*End of BuildQOSInfo*/
3312 /*******************************************************************
3314 * @brief Builds SNSSAI
3318 * Function : BuildSNSSAI
3320 * Functionality: Constructs the SNSSAI For DRB list
3322 * @params[in] SNSSAI_t *snssai
3324 * @return ROK - success
3327 * ****************************************************************/
3328 S16 BuildSNSSAI(SNSSAI_t *snssai)
3332 snssai->sST.size = sizeof(U8);
3333 DU_ALLOC(snssai->sST.buf,snssai->sST.size);
3334 if(snssai->sST.buf == NULLP)
3338 snssai->sST.buf[0] = 3;
3340 DU_ALLOC(snssai->sD,sizeof(OCTET_STRING_t));
3341 if(snssai->sD == NULLP)
3343 DU_FREE(snssai->sST.buf,snssai->sST.size);
3346 snssai->sD->size = 3*sizeof(U8);
3347 DU_ALLOC(snssai->sD->buf,snssai->sD->size);
3348 if(snssai->sD->buf == NULLP)
3350 DU_FREE(snssai->sD,sizeof(OCTET_STRING_t));
3351 DU_FREE(snssai->sST.buf,snssai->sST.size);
3354 snssai->sD->buf[0] = 3;
3355 snssai->sD->buf[1] = 6;
3356 snssai->sD->buf[2] = 9;
3358 }/*End of BuildSNSSAI*/
3360 /*******************************************************************
3362 * @brief Builds the flow map.
3366 * Function : BuildFlowsMap
3368 * Functionality: Constructs the flowmap For DRB list
3370 * @params[in] Flows_Mapped_To_DRB_List_t *flowMap
3372 * @return ROK - success
3375 * ****************************************************************/
3376 S16 BuildFlowsMap(Flows_Mapped_To_DRB_List_t *flowMap)
3383 flowMap->list.count = flowCnt;
3384 flowMap->list.size = flowCnt * sizeof(struct Flows_Mapped_To_DRB_Item *);
3385 DU_ALLOC(flowMap->list.array,flowMap->list.size);
3386 if(flowMap->list.array == NULLP)
3390 for(idx=0; idx<flowCnt; idx++)
3392 DU_ALLOC(flowMap->list.array[idx],sizeof(struct Flows_Mapped_To_DRB_Item));
3393 if(flowMap->list.array[idx] == NULLP)
3395 for(flowidx=0; flowidx<idx; flowidx++)
3397 DU_FREE(flowMap->list.array[flowidx],sizeof(struct \
3398 Flows_Mapped_To_DRB_Item));
3401 DU_FREE(flowMap->list.array,flowMap->list.size);
3405 flowMap->list.array[idx]->qoSFlowIdentifier = 0;
3406 ret = BuildQOSInfo(&flowMap->list.array[idx]->qoSFlowLevelQoSParameters);
3409 DU_FREE(flowMap->list.array[idx]->qoSFlowLevelQoSParameters.\
3410 qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,\
3411 sizeof(MaxDataBurstVolume_t));
3412 DU_FREE(flowMap->list.array[idx]->qoSFlowLevelQoSParameters.\
3413 qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
3414 sizeof(AveragingWindow_t));
3415 DU_FREE(flowMap->list.array[idx]->qoSFlowLevelQoSParameters.\
3416 qoS_Characteristics.choice.non_Dynamic_5QI,\
3417 sizeof(NonDynamic5QIDescriptor_t));
3418 for(idx=0; idx<flowCnt; idx++)
3420 DU_FREE(flowMap->list.array[idx],sizeof(struct Flows_Mapped_To_DRB_Item));
3422 DU_FREE(flowMap->list.array,flowMap->list.size);
3426 }/*End of BuildFlowsMap*/
3428 /*******************************************************************
3430 * @brief Builds the Uplink Tunnel Info
3434 * Function : BuildULTnlInfo
3436 * Functionality: Constructs the UL TnlInfo For DRB list
3438 * @params[in] ULUPTNLInformation_ToBeSetup_List_t *ulInfo
3440 * @return ROK - success
3443 * ****************************************************************/
3444 S16 BuildULTnlInfo(ULUPTNLInformation_ToBeSetup_List_t *ulInfo)
3450 ulInfo->list.count = ulCnt;
3451 ulInfo->list.size = ulCnt * sizeof(struct \
3452 ULUPTNLInformation_ToBeSetup_Item *);
3453 DU_ALLOC(ulInfo->list.array,ulInfo->list.size);
3454 if(ulInfo->list.array == NULLP)
3458 for(idx=0; idx<ulCnt; idx++)
3460 DU_ALLOC(ulInfo->list.array[idx],sizeof(struct \
3461 ULUPTNLInformation_ToBeSetup_Item));
3462 if(ulInfo->list.array[idx] == NULLP)
3464 for(ulidx=0; ulidx<idx; ulidx++)
3466 DU_FREE(ulInfo->list.array[ulidx],sizeof(struct \
3467 ULUPTNLInformation_ToBeSetup_Item));
3469 DU_FREE(ulInfo->list.array,ulInfo->list.size);
3474 ulInfo->list.array[idx]->uLUPTNLInformation.present = \
3475 UPTransportLayerInformation_PR_gTPTunnel;
3477 DU_ALLOC(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel,\
3478 sizeof(struct GTPTunnel));
3479 if(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel == NULLP)
3481 for(idx=0; idx<ulCnt; idx++)
3483 DU_FREE(ulInfo->list.array[idx],sizeof(struct \
3484 ULUPTNLInformation_ToBeSetup_Item));
3486 DU_FREE(ulInfo->list.array,ulInfo->list.size);
3489 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3490 transportLayerAddress.size = 4*sizeof(U8);
3491 DU_ALLOC(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3492 transportLayerAddress.buf,ulInfo->list.array[idx]->\
3493 uLUPTNLInformation.choice.gTPTunnel->transportLayerAddress.size);
3494 if(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3495 transportLayerAddress.buf == NULLP)
3497 DU_FREE(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel,\
3498 sizeof(struct GTPTunnel));
3499 for(idx=0; idx<ulCnt; idx++)
3501 DU_FREE(ulInfo->list.array[idx],sizeof(struct \
3502 ULUPTNLInformation_ToBeSetup_Item));
3504 DU_FREE(ulInfo->list.array,ulInfo->list.size);
3507 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3508 transportLayerAddress.buf[0] = 4;
3509 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3510 transportLayerAddress.buf[1] = 4;
3511 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3512 transportLayerAddress.buf[2] = 4;
3513 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3514 transportLayerAddress.buf[3] = 5;
3515 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3516 transportLayerAddress.bits_unused = 0;
3518 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.size\
3520 DU_ALLOC(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3521 gTP_TEID.buf,ulInfo->list.array[idx]->uLUPTNLInformation.choice.\
3522 gTPTunnel->gTP_TEID.size);
3523 if(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.buf\
3526 DU_FREE(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3527 transportLayerAddress.buf,ulInfo->list.array[idx]->\
3528 uLUPTNLInformation.choice.gTPTunnel->transportLayerAddress.size);
3529 DU_FREE(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel,\
3530 sizeof(struct GTPTunnel));
3531 for(idx=0; idx<ulCnt; idx++)
3533 DU_FREE(ulInfo->list.array[idx],sizeof(struct \
3534 ULUPTNLInformation_ToBeSetup_Item));
3536 DU_FREE(ulInfo->list.array,ulInfo->list.size);
3539 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3540 gTP_TEID.buf[0] = 11;
3541 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3542 gTP_TEID.buf[1] = 0;
3543 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3544 gTP_TEID.buf[2] = 0;
3545 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3546 gTP_TEID.buf[3] = 1;
3549 }/*End of BuildULTnlInfo*/
3551 /*******************************************************************
3553 * @brief Builds DRBS to be setup
3557 * Function : BuildDRBSetup
3559 * Functionality: Constructs the DRB's for UESetReq
3561 * @params[in] DRBs_ToBeSetup_List_t *drbSet
3563 * @return ROK - success
3566 * ****************************************************************/
3567 S16 BuildDRBSetup(DRBs_ToBeSetup_List_t *drbSet)
3577 DRBs_ToBeSetup_Item_t *drbSetItem;
3579 drbSet->list.count = drbCnt;
3580 drbSet->list.size = drbCnt*sizeof(struct DRBs_ToBeSetup_ItemIEs *);
3581 DU_ALLOC(drbSet->list.array,drbSet->list.size);
3582 if(drbSet->list.array == NULLP)
3586 for(idx=0; idx<drbCnt; idx++)
3588 DU_ALLOC(drbSet->list.array[idx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3589 if(drbSet->list.array[idx] == NULLP)
3591 for(drbidx=0; drbidx<idx; drbidx++)
3593 DU_FREE(drbSet->list.array[drbidx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3595 DU_FREE(drbSet->list.array,drbSet->list.size);
3600 drbSet->list.array[idx]->id = ProtocolIE_ID_id_DRBs_ToBeSetup_Item;
3601 drbSet->list.array[idx]->criticality = Criticality_ignore;
3602 drbSet->list.array[idx]->value.present = \
3603 DRBs_ToBeSetup_ItemIEs__value_PR_DRBs_ToBeSetup_Item;
3604 drbSetItem = &drbSet->list.array[idx]->value.choice.DRBs_ToBeSetup_Item;
3606 drbSetItem->dRBID = 1;
3608 drbSetItem->qoSInformation.present = QoSInformation_PR_choice_extension;
3609 DU_ALLOC(drbSetItem->qoSInformation.choice.choice_extension,sizeof(struct\
3610 QoSInformation_ExtIEs));
3611 if(drbSetItem->qoSInformation.choice.choice_extension == NULLP)
3613 for(idx=0; idx<drbCnt; idx++)
3615 DU_FREE(drbSet->list.array[idx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3617 DU_FREE(drbSet->list.array,drbSet->list.size);
3620 drbSetItem->qoSInformation.choice.choice_extension->id = \
3621 ProtocolIE_ID_id_DRB_Information;
3622 drbSetItem->qoSInformation.choice.choice_extension->criticality = \
3624 drbSetItem->qoSInformation.choice.choice_extension->value.present = \
3625 QoSInformation_ExtIEs__value_PR_DRB_Information;
3626 ret = BuildQOSInfo(&drbSetItem->qoSInformation.choice.\
3627 choice_extension->value.choice.DRB_Information.dRB_QoS);
3630 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(struct\
3631 QoSInformation_ExtIEs));
3632 for(drbidx=0; drbidx<drbCnt; drbidx++)
3634 DU_FREE(drbSet->list.array[drbidx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3636 DU_FREE(drbSet->list.array,drbSet->list.size);
3640 ret = BuildSNSSAI(&drbSetItem->qoSInformation.choice.\
3641 choice_extension->value.choice.DRB_Information.sNSSAI);
3644 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3645 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3646 non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3647 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3648 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3649 non_Dynamic_5QI->maxDataBurstVolume,sizeof(MaxDataBurstVolume_t));
3650 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(struct\
3651 QoSInformation_ExtIEs));
3652 for(drbidx=0; drbidx<drbCnt; drbidx++)
3654 DU_FREE(drbSet->list.array[drbidx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3656 DU_FREE(drbSet->list.array,drbSet->list.size);
3659 /*Flows mapped to DRB List*/
3660 ret = BuildFlowsMap(&drbSetItem->qoSInformation.choice.\
3661 choice_extension->value.choice.DRB_Information.flows_Mapped_To_DRB_List);
3664 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3665 choice.DRB_Information.sNSSAI.sD,sizeof(OCTET_STRING_t));
3666 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3667 choice.DRB_Information.sNSSAI.sD->buf,drbSetItem->qoSInformation.\
3668 choice.choice_extension->value.choice.DRB_Information.\
3670 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3671 choice.DRB_Information.sNSSAI.sST.buf,drbSetItem->qoSInformation.\
3672 choice.choice_extension->value.choice.DRB_Information.\
3674 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3675 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3676 non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3677 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3678 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3679 non_Dynamic_5QI->maxDataBurstVolume,sizeof(MaxDataBurstVolume_t));
3680 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(struct\
3681 QoSInformation_ExtIEs));
3682 for(drbidx=0; drbidx<drbCnt; drbidx++)
3684 DU_FREE(drbSet->list.array[drbidx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3686 DU_FREE(drbSet->list.array,drbSet->list.size);
3689 /*ULUPTNLInformation To Be Setup List*/
3690 ret = BuildULTnlInfo(&drbSetItem->uLUPTNLInformation_ToBeSetup_List);
3694 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3695 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3696 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3697 choice.non_Dynamic_5QI->maxDataBurstVolume,\
3698 sizeof(MaxDataBurstVolume_t));
3699 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3700 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3701 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3702 choice.non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3703 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3704 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3705 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3706 choice.non_Dynamic_5QI,sizeof(NonDynamic5QIDescriptor_t));
3707 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3708 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3709 array,drbSetItem->qoSInformation.choice.choice_extension->\
3710 value.choice.DRB_Information.flows_Mapped_To_DRB_List.list.size);
3712 for(flowidx=0; flowidx<flowCnt;flowidx++)
3714 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3715 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3716 array[flowidx],sizeof(struct Flows_Mapped_To_DRB_Item));
3718 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3719 choice.DRB_Information.sNSSAI.sD,sizeof(OCTET_STRING_t));
3720 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3721 choice.DRB_Information.sNSSAI.sD->buf,drbSetItem->qoSInformation.\
3722 choice.choice_extension->value.choice.DRB_Information.\
3724 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3725 choice.DRB_Information.sNSSAI.sST.buf,drbSetItem->qoSInformation.\
3726 choice.choice_extension->value.choice.DRB_Information.\
3728 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3729 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3730 non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3731 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3732 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3733 non_Dynamic_5QI->maxDataBurstVolume,sizeof(MaxDataBurstVolume_t));
3734 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(struct\
3735 QoSInformation_ExtIEs));
3736 for(drbidx=0; drbidx<drbCnt; drbidx++)
3738 DU_FREE(drbSet->list.array[drbidx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3740 DU_FREE(drbSet->list.array,drbSet->list.size);
3744 drbSetItem->rLCMode = RLCMode_rlc_um_bidirectional;
3746 /*UL Configuration*/
3748 DU_ALLOC(drbSetItem->uLConfiguration,sizeof(struct ULConfiguration));
3749 if(drbSetItem->uLConfiguration == NULLP)
3752 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3753 uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.buf,\
3754 drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3755 uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.size);
3756 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3757 uLUPTNLInformation.choice.gTPTunnel->transportLayerAddress.buf,\
3758 drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3759 uLUPTNLInformation.choice.gTPTunnel->transportLayerAddress.size);
3760 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3761 uLUPTNLInformation.choice.gTPTunnel,sizeof(struct GTPTunnel));
3762 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array,\
3763 drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.size);
3764 for(ulidx=0; ulidx<ulCnt; ulidx++)
3766 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx],\
3767 sizeof(struct ULUPTNLInformation_ToBeSetup_Item));
3770 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3771 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3772 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3773 choice.non_Dynamic_5QI->maxDataBurstVolume,\
3774 sizeof(MaxDataBurstVolume_t));
3775 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3776 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3777 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3778 choice.non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3779 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3780 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3781 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3782 choice.non_Dynamic_5QI,sizeof(NonDynamic5QIDescriptor_t));
3783 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3784 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3785 array,drbSetItem->qoSInformation.choice.choice_extension->value.\
3786 choice.DRB_Information.flows_Mapped_To_DRB_List.list.size);
3788 for(flowidx=0; flowidx<flowCnt;flowidx++)
3790 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3791 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3792 array[flowidx],sizeof(struct Flows_Mapped_To_DRB_Item));
3794 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3795 choice.DRB_Information.sNSSAI.sD,sizeof(OCTET_STRING_t));
3796 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3797 choice.DRB_Information.sNSSAI.sD->buf,drbSetItem->qoSInformation.\
3798 choice.choice_extension->value.choice.DRB_Information.\
3800 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3801 choice.DRB_Information.sNSSAI.sST.buf,drbSetItem->qoSInformation.\
3802 choice.choice_extension->value.choice.DRB_Information.\
3804 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3805 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3806 non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3807 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3808 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3809 non_Dynamic_5QI->maxDataBurstVolume,sizeof(MaxDataBurstVolume_t));
3810 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(struct\
3811 QoSInformation_ExtIEs));
3812 for(drbidx=0; drbidx<drbCnt; drbidx++)
3814 DU_FREE(drbSet->list.array[drbidx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3816 DU_FREE(drbSet->list.array,drbSet->list.size);
3819 drbSetItem->uLConfiguration->uLUEConfiguration = ULUEConfiguration_no_data;
3821 }/* End of BuildDRBSetup*/
3823 /*******************************************************************
3825 * @brief Builds and sends the UE Setup Request
3829 * Function : BuildAndSendUESetReq
3831 * Functionality: Constructs the UE Setup Request and sends
3832 * it to the CU through SCTP.
3836 * @return ROK - success
3839 * ****************************************************************/
3840 S16 BuildAndSendUESetReq()
3856 F1AP_PDU_t *f1apMsg = NULL;
3857 UEContextSetupRequest_t *ueSetReq;
3858 asn_enc_rval_t encRetVal; /* Encoder return value */
3860 DU_LOG("\n F1AP : Building UE Context Setup Request\n");
3862 DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t));
3863 if(f1apMsg == NULLP)
3865 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
3869 f1apMsg->present = F1AP_PDU_PR_initiatingMessage;
3870 DU_ALLOC(f1apMsg->choice.initiatingMessage,
3871 sizeof(InitiatingMessage_t));
3872 if(f1apMsg->choice.initiatingMessage == NULLP)
3874 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
3875 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3879 f1apMsg->choice.initiatingMessage->procedureCode = \
3880 ProcedureCode_id_UEContextSetup;
3881 f1apMsg->choice.initiatingMessage->criticality = Criticality_reject;
3882 f1apMsg->choice.initiatingMessage->value.present = \
3883 InitiatingMessage__value_PR_UEContextSetupRequest;
3885 &f1apMsg->choice.initiatingMessage->value.choice.UEContextSetupRequest;
3887 ueSetReq->protocolIEs.list.count = elementCnt;
3888 ueSetReq->protocolIEs.list.size = \
3889 elementCnt * sizeof(UEContextSetupRequestIEs_t *);
3891 /* Initialize the UESetup members */
3892 DU_ALLOC(ueSetReq->protocolIEs.list.array, \
3893 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
3894 if(ueSetReq->protocolIEs.list.array == NULLP)
3896 DU_LOG(" F1AP : Memory allocation for UE Context SetupRequest failed");
3897 DU_FREE(f1apMsg->choice.initiatingMessage,
3898 sizeof(InitiatingMessage_t));
3899 DU_FREE(f1apMsg,(Size)sizeof(F1AP_PDU_t));
3903 for(idx=0; idx<elementCnt; idx++)
3905 DU_ALLOC(ueSetReq->protocolIEs.list.array[idx],\
3906 sizeof(UEContextSetupRequestIEs_t));
3907 if(ueSetReq->protocolIEs.list.array[idx] == NULLP)
3909 for(ieId=0; ieId<idx; ieId++)
3911 DU_FREE(ueSetReq->protocolIEs.list.array[ieId],\
3912 sizeof(UEContextSetupRequestIEs_t));
3914 DU_FREE(ueSetReq->protocolIEs.list.array,\
3915 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
3916 DU_FREE(f1apMsg->choice.initiatingMessage,\
3917 sizeof(InitiatingMessage_t));
3918 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3925 /*GNB CU UE F1AP ID*/
3926 ueSetReq->protocolIEs.list.array[idx]->id = \
3927 ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID;
3928 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3929 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3930 UEContextSetupRequestIEs__value_PR_GNB_CU_UE_F1AP_ID;
3931 ueSetReq->protocolIEs.list.array[idx]->value.choice.GNB_CU_UE_F1AP_ID = CU_ID;
3933 /*GNB DU UE F1AP ID*/
3935 ueSetReq->protocolIEs.list.array[idx]->id = \
3936 ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
3937 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_ignore;
3938 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3939 UEContextSetupRequestIEs__value_PR_GNB_DU_UE_F1AP_ID;
3940 ueSetReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID = DU_ID;
3944 ueSetReq->protocolIEs.list.array[idx]->id = \
3945 ProtocolIE_ID_id_SpCell_ID;
3946 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3947 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3948 UEContextSetupRequestIEs__value_PR_NRCGI;
3950 BuildNrcgi(&ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI);
3954 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
3955 nRCellIdentity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
3956 choice.NRCGI.nRCellIdentity.size));
3957 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
3958 pLMN_Identity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
3959 choice.NRCGI.pLMN_Identity.size));
3960 for(idx=0; idx<elementCnt; idx++)
3962 DU_FREE(ueSetReq->protocolIEs.list.array[idx],\
3963 sizeof(InitialULRRCMessageTransferIEs_t));
3965 DU_FREE(ueSetReq->protocolIEs.list.array,\
3966 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *));
3967 DU_FREE(f1apMsg->choice.initiatingMessage,\
3968 sizeof(InitiatingMessage_t));
3969 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3974 /*Served Cell Index*/
3976 ueSetReq->protocolIEs.list.array[idx]->id = \
3977 ProtocolIE_ID_id_ServCellIndex;
3978 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3979 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3980 UEContextSetupRequestIEs__value_PR_ServCellIndex;
3981 ueSetReq->protocolIEs.list.array[idx]->value.choice.ServCellIndex = \
3984 /*CellULConfigured*/
3986 ueSetReq->protocolIEs.list.array[idx]->id = \
3987 ProtocolIE_ID_id_SpCellULConfigured;
3988 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_ignore;
3989 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3990 UEContextSetupRequestIEs__value_PR_CellULConfigured;
3991 ueSetReq->protocolIEs.list.array[idx]->value.choice.CellULConfigured = \
3992 CellULConfigured_none;
3995 /*CUtoDURRCContainer*/
3997 ueSetReq->protocolIEs.list.array[idx]->id = \
3998 ProtocolIE_ID_id_CUtoDURRCInformation;
3999 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
4000 ueSetReq->protocolIEs.list.array[idx]->value.present = \
4001 UEContextSetupRequestIEs__value_PR_CUtoDURRCInformation;
4003 /*Special Cells to be SetupList*/
4005 ueSetReq->protocolIEs.list.array[idx]->id = \
4006 ProtocolIE_ID_id_SCell_ToBeSetup_List;
4007 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_ignore;
4008 ueSetReq->protocolIEs.list.array[idx]->value.present = \
4009 UEContextSetupRequestIEs__value_PR_SCell_ToBeSetup_List;
4011 ret = BuildSplCellList(&ueSetReq->protocolIEs.\
4012 list.array[idx]->value.choice.SCell_ToBeSetup_List);
4015 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4016 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4017 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.buf,\
4018 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4019 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4020 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.size);
4021 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4022 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4023 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.buf,\
4024 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4025 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4026 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.size);
4027 for(spId=0; spId<cellCnt; spId++)
4029 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4030 SCell_ToBeSetup_List.list.array[spId],sizeof(struct
4031 SCell_ToBeSetup_ItemIEs));
4033 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4034 SCell_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
4035 array[idx]->value.choice.SCell_ToBeSetup_List.list.size);
4038 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
4039 nRCellIdentity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
4040 choice.NRCGI.nRCellIdentity.size));
4041 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
4042 pLMN_Identity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
4043 choice.NRCGI.pLMN_Identity.size));
4044 for(idx=0; idx<elementCnt; idx++)
4046 DU_FREE(ueSetReq->protocolIEs.list.array[idx],\
4047 sizeof(UEContextSetupRequestIEs_t));
4049 DU_FREE(ueSetReq->protocolIEs.list.array,\
4050 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
4051 DU_FREE(f1apMsg->choice.initiatingMessage,\
4052 sizeof(InitiatingMessage_t));
4053 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
4056 /*SRBs To Be Setup List*/
4058 ueSetReq->protocolIEs.list.array[idx]->id = \
4059 ProtocolIE_ID_id_SRBs_ToBeSetup_List;
4060 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
4061 ueSetReq->protocolIEs.list.array[idx]->value.present = \
4062 UEContextSetupRequestIEs__value_PR_SRBs_ToBeSetup_List;
4064 ret = BuildSRBSetup(&ueSetReq->protocolIEs.list.array[idx]->value.\
4065 choice.SRBs_ToBeSetup_List);
4069 for(srbId=0; srbId<srbCnt; srbId++)
4071 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4072 SRBs_ToBeSetup_List.list.array[srbId],\
4073 sizeof(struct SRBs_ToBeSetup_ItemIEs));
4075 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4076 SRBs_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
4077 array[idx]->value.choice.SRBs_ToBeSetup_List.list.size);
4079 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4080 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4081 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.buf,\
4082 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4083 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4084 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.size);
4085 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4086 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4087 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.buf,\
4088 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4089 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4090 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.size);
4091 for(spId=0; spId<cellCnt; spId++)
4093 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4094 SCell_ToBeSetup_List.list.array[spId],sizeof(struct
4095 SCell_ToBeSetup_ItemIEs));
4097 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4098 SCell_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
4099 array[idx]->value.choice.SCell_ToBeSetup_List.list.size);
4101 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
4102 nRCellIdentity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
4103 choice.NRCGI.nRCellIdentity.size));
4104 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
4105 pLMN_Identity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
4106 choice.NRCGI.pLMN_Identity.size));
4107 for(idx=0; idx<elementCnt; idx++)
4109 DU_FREE(ueSetReq->protocolIEs.list.array[idx],\
4110 sizeof(UEContextSetupRequestIEs_t));
4112 DU_FREE(ueSetReq->protocolIEs.list.array,\
4113 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
4114 DU_FREE(f1apMsg->choice.initiatingMessage,\
4115 sizeof(InitiatingMessage_t));
4116 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
4119 /*DRBs to Be Setup List*/
4121 ueSetReq->protocolIEs.list.array[idx]->id = \
4122 ProtocolIE_ID_id_DRBs_ToBeSetup_List;
4123 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
4124 ueSetReq->protocolIEs.list.array[idx]->value.present = \
4125 UEContextSetupRequestIEs__value_PR_DRBs_ToBeSetup_List;
4129 ret = BuildDRBSetup(&ueSetReq->protocolIEs.list.array[idx]->value.\
4130 choice.DRBs_ToBeSetup_List);
4133 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4134 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4135 DRBs_ToBeSetup_Item.uLConfiguration,\
4136 sizeof(struct ULConfiguration));
4138 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4139 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4140 DRBs_ToBeSetup_Item.uLUPTNLInformation_ToBeSetup_List.list.\
4141 array[ulidx]->uLUPTNLInformation.choice.gTPTunnel,\
4142 sizeof(struct GTPTunnel));
4143 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4144 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4145 DRBs_ToBeSetup_Item.uLUPTNLInformation_ToBeSetup_List.list.\
4146 array,ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4147 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4148 DRBs_ToBeSetup_Item.uLUPTNLInformation_ToBeSetup_List.list.size);
4149 for(ulidx=0; ulidx<ulCnt;ulidx++)
4151 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4152 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4153 DRBs_ToBeSetup_Item.uLUPTNLInformation_ToBeSetup_List.list.\
4154 array[ulidx],sizeof(struct ULUPTNLInformation_ToBeSetup_Item));
4157 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4158 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4159 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4160 choice_extension->value.choice.DRB_Information.\
4161 flows_Mapped_To_DRB_List.list.array[idx]->qoSFlowLevelQoSParameters.\
4162 qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
4163 sizeof(AveragingWindow_t));
4164 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4165 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4166 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4167 choice_extension->value.choice.DRB_Information.\
4168 flows_Mapped_To_DRB_List.list.array[idx]->qoSFlowLevelQoSParameters.\
4169 qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,\
4170 sizeof(MaxDataBurstVolume_t));
4171 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4172 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4173 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4174 choice_extension->value.choice.DRB_Information.\
4175 flows_Mapped_To_DRB_List.list.array,ueSetReq->protocolIEs.list.\
4176 array[idx]->value.choice.\
4177 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4178 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4179 choice_extension->value.choice.DRB_Information.\
4180 flows_Mapped_To_DRB_List.list.size);
4181 for(flowidx=0;flowidx<flowCnt;flowidx++)
4183 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4184 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4185 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4186 choice_extension->value.choice.DRB_Information.\
4187 flows_Mapped_To_DRB_List.list.array[flowidx],sizeof(struct
4188 Flows_Mapped_To_DRB_Item));
4190 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4191 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4192 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4193 choice_extension->value.choice.DRB_Information.sNSSAI.\
4194 sD->buf,ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4195 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4196 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4197 choice_extension->value.choice.DRB_Information.sNSSAI.\
4199 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4200 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4201 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4202 choice_extension->value.choice.DRB_Information.sNSSAI.\
4203 sD,sizeof(OCTET_STRING_t));
4204 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4205 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4206 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4207 choice_extension->value.choice.DRB_Information.sNSSAI.\
4208 sST.buf,ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4209 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4210 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4211 choice_extension->value.choice.DRB_Information.sNSSAI.\
4213 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4214 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4215 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4216 choice_extension->value.choice.DRB_Information.dRB_QoS.\
4217 qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,\
4218 sizeof(MaxDataBurstVolume_t));
4219 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4220 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4221 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4222 choice_extension->value.choice.DRB_Information.dRB_QoS.\
4223 qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
4224 sizeof(AveragingWindow_t));
4225 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4226 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4227 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4228 choice_extension->value.choice.DRB_Information.dRB_QoS.\
4229 qoS_Characteristics.choice.non_Dynamic_5QI,\
4230 sizeof(NonDynamic5QIDescriptor_t));
4231 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4232 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4233 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4234 choice_extension,sizeof(struct QoSInformation_ExtIEs));
4235 for(drbId=0; drbId<drbCnt; drbId++)
4237 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4238 DRBs_ToBeSetup_List.list.array[drbId],\
4239 sizeof(struct DRBs_ToBeSetup_ItemIEs));
4241 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4242 DRBs_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
4243 array[idx]->value.choice.DRBs_ToBeSetup_List.list.size);
4245 for(srbId=0; srbId<srbCnt; srbId++)
4247 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4248 SRBs_ToBeSetup_List.list.array[srbId],\
4249 sizeof(struct SRBs_ToBeSetup_ItemIEs));
4251 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4252 SRBs_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
4253 array[idx]->value.choice.SRBs_ToBeSetup_List.list.size);
4255 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4256 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4257 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.buf,\
4258 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4259 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4260 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.size);
4261 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4262 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4263 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.buf,\
4264 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4265 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4266 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.size);
4267 for(spId=0; spId<cellCnt; spId++)
4269 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4270 SCell_ToBeSetup_List.list.array[spId],sizeof(struct
4271 SCell_ToBeSetup_ItemIEs));
4273 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4274 SCell_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
4275 array[idx]->value.choice.SCell_ToBeSetup_List.list.size);
4277 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
4278 nRCellIdentity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
4279 choice.NRCGI.nRCellIdentity.size));
4280 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
4281 pLMN_Identity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
4282 choice.NRCGI.pLMN_Identity.size));
4283 for(idx=0; idx<elementCnt; idx++)
4285 DU_FREE(ueSetReq->protocolIEs.list.array[idx],\
4286 sizeof(UEContextSetupRequestIEs_t));
4288 DU_FREE(ueSetReq->protocolIEs.list.array,\
4289 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
4290 DU_FREE(f1apMsg->choice.initiatingMessage,\
4291 sizeof(InitiatingMessage_t));
4292 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
4296 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
4298 /* Encode the F1SetupRequest type as APER */
4299 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
4301 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\
4303 /* Encode results */
4304 if(encRetVal.encoded == ENCODE_FAIL)
4306 DU_LOG( "\n F1AP : Could not encode UE Context Setup Request structure (at %s)\n",\
4307 encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
4312 DU_LOG("\n F1AP : Created APER encoded buffer for UE Context Setup Request\n");
4313 for(int i=0; i< encBufSize; i++)
4315 printf("%x",encBuf[i]);
4320 if(SendF1APMsg(DU_APP_MEM_REGION,DU_POOL) != ROK)
4322 DU_LOG("\n F1AP : Sending UE Context Setup Request Failed");
4326 }/* End of BuildAndSendUESetReq*/
4328 /*******************************************************************
4330 * @brief Handles received F1AP message and sends back response
4334 * Function : F1APMsgHdlr
4337 * - Decodes received F1AP control message
4338 * - Prepares response message, encodes and sends to SCTP
4341 * @return ROK - success
4344 * ****************************************************************/
4345 void F1APMsgHdlr(Buffer *mBuf)
4351 F1AP_PDU_t *f1apMsg;
4352 asn_dec_rval_t rval; /* Decoder return value */
4353 F1AP_PDU_t f1apasnmsg ;
4355 DU_LOG("\nF1AP : Received F1AP message buffer");
4356 SPrntMsg(mBuf, 0,0);
4358 /* Copy mBuf into char array to decode it */
4359 SFndLenMsg(mBuf, &recvBufLen);
4360 if(SGetSBuf(DFLT_REGION, DFLT_POOL, (Data **)&recvBuf, (Size)recvBufLen) != ROK)
4362 DU_LOG("\nF1AP : Memory allocation failed");
4365 if(SCpyMsgFix(mBuf, 0, recvBufLen, (Data *)recvBuf, ©Cnt) != ROK)
4367 DU_LOG("\nF1AP : Failed while copying %d", copyCnt);
4371 printf("\nF1AP : Received flat buffer to be decoded : ");
4372 for(i=0; i< recvBufLen; i++)
4374 printf("%x",recvBuf[i]);
4377 /* Decoding flat buffer into F1AP messsage */
4378 f1apMsg = &f1apasnmsg;
4379 memset(f1apMsg, 0, sizeof(F1AP_PDU_t));
4381 rval = aper_decode(0, &asn_DEF_F1AP_PDU, (void **)&f1apMsg, recvBuf, recvBufLen, 0, 0);
4382 SPutSBuf(DFLT_REGION, DFLT_POOL, (Data *)recvBuf, (Size)recvBufLen);
4383 if(rval.code == RC_FAIL || rval.code == RC_WMORE)
4385 DU_LOG("\nF1AP : ASN decode failed");
4389 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
4391 switch(f1apMsg->present)
4393 case F1AP_PDU_PR_successfulOutcome:
4395 switch(f1apMsg->choice.successfulOutcome->value.present)
4397 case SuccessfulOutcome__value_PR_F1SetupResponse:
4399 #ifndef ODU_TEST_STUB
4400 procF1SetupRsp(f1apMsg);
4405 case SuccessfulOutcome__value_PR_GNBDUConfigurationUpdateAcknowledge:
4407 procGNBDUCfgUpdAck(f1apMsg);
4413 DU_LOG("\nF1AP : Invalid type of successful outcome [%d]", f1apMsg->choice.successfulOutcome->value.present);
4416 }/* End of switch(successfulOutcome) */
4422 DU_LOG("\nF1AP : Invalid type of f1apMsg->present [%d]",f1apMsg->present);
4426 }/* End of switch(f1apMsg->present) */
4428 } /* End of F1APMsgHdlr */
4430 /*******************************************************************
4432 * @brief Processes GNB DU config update ack
4436 * Function : procGNBDUCfgUpdAck
4438 * Functionality: Processes GNB DU config update ack
4440 * @params[in] F1AP_PDU_t ASN decoded F1AP message
4441 * @return ROK - success
4444 * ****************************************************************/
4446 S16 procGNBDUCfgUpdAck(F1AP_PDU_t *f1apMsg)
4450 DU_LOG("\nF1AP : GNB-DU config update acknowledgment received");
4453 /* TODO :Check the deallocation */
4455 SPutSBuf(DU_APP_MEM_REGION,DU_POOL,(Data *)&(gNBDuCfgAck->protocolIEs.list.array),\
4456 (Size)elementCnt * sizeof(GNBDUConfigurationUpdateAcknowledgeIEs_t *));
4457 SPutSBuf(DU_APP_MEM_REGION,DU_POOL,(Data *)&(f1apMsg->choice.successfulOutcome),\
4458 (Size)sizeof(SuccessfulOutcome_t));
4459 SPutSBuf(DU_APP_MEM_REGION,DU_POOL,(Data *)&f1apMsg,(Size)sizeof(F1AP_PDU_t));
4464 /**********************************************************************
4466 **********************************************************************/