1 /*******************************************************************************
2 ################################################################################
3 # Copyright (c) [2017-2019] [Radisys] #
5 # Licensed under the Apache License, Version 2.0 (the "License"); #
6 # you may not use this file except in compliance with the License. #
7 # You may obtain a copy of the License at #
9 # http://www.apache.org/licenses/LICENSE-2.0 #
11 # Unless required by applicable law or agreed to in writing, software #
12 # distributed under the License is distributed on an "AS IS" BASIS, #
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
14 # See the License for the specific language governing permissions and #
15 # limitations under the License. #
16 ################################################################################
17 *******************************************************************************/
19 /* This file contains F1AP message handler functions */
22 #include "du_mgr_main.h"
23 #include "du_cell_mgr.h"
24 #include "du_f1ap_msg_hdl.h"
25 #include "GNB-DU-System-Information.h"
27 extern char encBuf[ENC_BUF_MAX_LEN];
29 extern DuCfgParams duCfgParam;
31 /*******************************************************************
33 * @brief Builds Uplink Info for NR
37 * Function : BuildULNRInfo
39 * Functionality: Building NR Uplink Info
41 * @params[in] NRFreqInfo_t *ulnrfreq
42 * @return ROK - success
45 * ****************************************************************/
46 S16 BuildULNRInfo(NRFreqInfo_t *ulnrfreq)
50 ulnrfreq->nRARFCN = duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.\
51 fdd.ulNrFreqInfo.nrArfcn;
52 ulnrfreq->freqBandListNr.list.count = 1;
53 ulnrfreq->freqBandListNr.list.size = sizeof(struct FreqBandNrItem *);
54 DU_ALLOC(ulnrfreq->freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
55 if(ulnrfreq->freqBandListNr.list.array == NULLP)
59 DU_ALLOC(ulnrfreq->freqBandListNr.list.array[idx],sizeof(struct FreqBandNrItem));
60 if(ulnrfreq->freqBandListNr.list.array[idx] == NULLP)
62 DU_FREE(ulnrfreq->freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
65 ulnrfreq->freqBandListNr.list.array[idx]->freqBandIndicatorNr = \
66 duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.\
67 freqBand[0].nrFreqBand;
68 ulnrfreq->freqBandListNr.list.array[idx]->supportedSULBandList.list.count = SUL_BAND_COUNT;
71 /*******************************************************************
73 * @brief Builds Downlink NR Info
77 * Function : BuildDLNRInfo
79 * Functionality: Building Downlink NR Info
81 * @params[in] NRFreqInfo_t *dlnrfreq
82 * @return ROK - success
85 * ****************************************************************/
86 S16 BuildDLNRInfo(NRFreqInfo_t *dlnrfreq)
89 dlnrfreq->nRARFCN = duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.\
90 fdd.dlNrFreqInfo.nrArfcn;
91 dlnrfreq->freqBandListNr.list.count = 1;
92 dlnrfreq->freqBandListNr.list.size = sizeof(struct FreqBandNrItem *);
93 DU_ALLOC(dlnrfreq->freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
94 if(dlnrfreq->freqBandListNr.list.array == NULLP)
98 DU_ALLOC(dlnrfreq->freqBandListNr.list.array[idx],sizeof(struct FreqBandNrItem));
99 if(dlnrfreq->freqBandListNr.list.array[idx] == NULLP)
101 DU_FREE(dlnrfreq->freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
104 dlnrfreq->freqBandListNr.list.array[idx]->freqBandIndicatorNr = \
105 duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.\
106 freqBand[0].nrFreqBand;
107 dlnrfreq->freqBandListNr.list.array[idx]->supportedSULBandList.list.count = SUL_BAND_COUNT;
111 /*******************************************************************
113 * @brief Builds Nrcgi
117 * Function : BuildNrcgi
119 * Functionality: Building the PLMN ID and NR Cell id
121 * @params[in] NRCGI_t *nrcgi
122 * @return ROK - success
125 * ****************************************************************/
126 S16 BuildNrcgi(NRCGI_t *nrcgi)
133 GNB_DU_Served_Cells_Item_t *srvCellItem;
134 /* Allocate Buffer Memory */
135 nrcgi->pLMN_Identity.size = PLMN_SIZE * sizeof(U8);
136 DU_ALLOC(nrcgi->pLMN_Identity.buf, nrcgi->pLMN_Identity.size);
137 ret = buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
138 &nrcgi->pLMN_Identity); // Building PLMN function
144 //ret = BuildNrCellId(&nrcgi->nRCellIdentity);
145 nrcgi->nRCellIdentity.size = byteSize * sizeof(U8);
146 DU_ALLOC(nrcgi->nRCellIdentity.buf, nrcgi->nRCellIdentity.size);
147 ret = fillBitString(&nrcgi->nRCellIdentity, unused, byteSize, val);
151 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
152 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
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)
212 GNB_DU_Served_Cells_Item_t *srvCellItem;
214 mode->present = NR_Mode_Info_PR_fDD;
215 if(mode->present == NR_Mode_Info_PR_fDD)
217 DU_ALLOC(mode->choice.fDD,\
219 if(mode->choice.fDD == NULLP)
223 ret = BuildULNRInfo(&mode->choice.fDD->uL_NRFreqInfo);
226 DU_FREE(mode->choice.fDD,\
230 ret = BuildDLNRInfo(&mode->choice.fDD->dL_NRFreqInfo);
233 DU_FREE(mode->choice.fDD,\
235 DU_FREE(srvCellItem->served_Cell_Information.\
236 nR_Mode_Info.choice.fDD->uL_NRFreqInfo.\
237 freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
238 DU_FREE(srvCellItem->served_Cell_Information.\
239 nR_Mode_Info.choice.fDD->uL_NRFreqInfo.\
240 freqBandListNr.list.array[0],sizeof(struct FreqBandNrItem));
244 mode->choice.fDD->uL_Transmission_Bandwidth.nRSCS = \
245 duCfgParam.srvdCellLst[0].duCellInfo.\
246 f1Mode.mode.fdd.ulTxBw.nrScs;
247 mode->choice.fDD->uL_Transmission_Bandwidth.nRNRB = \
248 duCfgParam.srvdCellLst[0].duCellInfo.\
249 f1Mode.mode.fdd.ulTxBw.nrb;
251 mode->choice.fDD->dL_Transmission_Bandwidth.nRSCS = \
252 duCfgParam.srvdCellLst[0].duCellInfo.\
253 f1Mode.mode.fdd.dlTxBw.nrScs;
254 mode->choice.fDD->dL_Transmission_Bandwidth.nRNRB = \
255 duCfgParam.srvdCellLst[0].duCellInfo.\
256 f1Mode.mode.fdd.dlTxBw.nrb;
259 /*******************************************************************
261 * @brief Builds IE Extensions for Served PLMNs
265 * Function : BuildExtensions
267 * Functionality: Building the IE Extensions
269 * @params[in] struct ProtocolExtensionContainer_4624P3 *buildextend
270 * @return ROK - success
273 * ****************************************************************/
274 S16 BuildExtensions(struct ProtocolExtensionContainer_4624P3 **ieExtend)
283 sizeof(struct ProtocolExtensionContainer_4624P3));
284 if((*ieExtend) == NULLP)
289 (*ieExtend)->list.count = extensionCnt;
290 (*ieExtend)->list.size = \
291 extensionCnt * sizeof(struct ServedPLMNs_ItemExtIEs *);
292 DU_ALLOC((*ieExtend)->list.array,\
293 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
294 if((*ieExtend)->list.array == NULLP)
296 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
299 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
301 DU_ALLOC((*ieExtend)->list.array[plmnidx],\
302 sizeof(struct ServedPLMNs_ItemExtIEs));
303 if((*ieExtend)->list.array[plmnidx] == NULLP)
305 for(extensionId=0 ; extensionId<plmnidx; extensionId++)
307 DU_FREE((*ieExtend)->list.array[extensionId],\
308 sizeof(struct ServedPLMNs_ItemExtIEs));
310 DU_FREE((*ieExtend)->list.array,\
311 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
312 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
317 (*ieExtend)->list.array[idx]->id = ProtocolIE_ID_id_TAISliceSupportList;
318 (*ieExtend)->list.array[idx]->criticality = Criticality_ignore;
319 (*ieExtend)->list.array[idx]->extensionValue.present = \
320 ServedPLMNs_ItemExtIEs__extensionValue_PR_SliceSupportList;
321 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
323 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
324 list.size = sizeof(SliceSupportItem_t *);
325 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
326 list.array,sizeof(SliceSupportItem_t *));
327 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
330 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
332 DU_FREE((*ieExtend)->list.array[plmnidx],\
333 sizeof(struct ServedPLMNs_ItemExtIEs));
335 DU_FREE((*ieExtend)->list.array,\
336 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
337 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
342 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
343 list.array[sliceId],sizeof(SliceSupportItem_t));
344 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
345 list.array[sliceId] == NULLP)
347 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
348 list.array,sizeof(SliceSupportItem_t *));
349 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
351 DU_FREE((*ieExtend)->list.array[plmnidx],\
352 sizeof(struct ServedPLMNs_ItemExtIEs));
354 DU_FREE((*ieExtend)->list.array,\
355 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
356 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
360 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
361 list.array[sliceId]->sNSSAI.sST.size = sizeof(U8);
362 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList\
363 .list.array[sliceId]->sNSSAI.sST.buf,(*ieExtend)->list.array[idx]->\
364 extensionValue.choice.SliceSupportList.\
365 list.array[sliceId]->sNSSAI.sST.size);
366 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList\
367 .list.array[sliceId]->sNSSAI.sST.buf == NULLP)
369 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
370 list.array[sliceId],sizeof(SliceSupportItem_t));
371 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
372 list.array,sizeof(SliceSupportItem_t *));
373 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
375 DU_FREE((*ieExtend)->list.array[plmnidx],\
376 sizeof(struct ServedPLMNs_ItemExtIEs));
378 DU_FREE((*ieExtend)->list.array,\
379 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
380 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
383 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
384 list.array[sliceId]->sNSSAI.sST.buf[0] = 3;
385 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
386 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
387 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
388 list.array[sliceId]->sNSSAI.sD == NULLP)
390 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList\
391 .list.array[sliceId]->sNSSAI.sST.buf,(*ieExtend)->list.array[idx]->\
392 extensionValue.choice.SliceSupportList.list.array[sliceId]->sNSSAI.sST.size);
393 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
394 list.array[sliceId],sizeof(SliceSupportItem_t));
395 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
396 list.array,sizeof(SliceSupportItem_t *));
397 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
399 DU_FREE((*ieExtend)->list.array[plmnidx],\
400 sizeof(struct ServedPLMNs_ItemExtIEs));
402 DU_FREE((*ieExtend)->list.array,\
403 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
404 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
407 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
408 list.array[sliceId]->sNSSAI.sD->size = 3*sizeof(U8);
409 DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
410 list.array[sliceId]->sNSSAI.sD->buf,(*ieExtend)->list.array[idx]->extensionValue.choice.\
411 SliceSupportList.list.array[sliceId]->sNSSAI.sD->size);
412 if((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
413 list.array[sliceId]->sNSSAI.sD->buf == NULLP)
415 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
416 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
417 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList\
418 .list.array[sliceId]->sNSSAI.sST.buf,(*ieExtend)->list.array[idx]->extensionValue.\
419 choice.SliceSupportList.list.array[sliceId]->sNSSAI.sST.size);
420 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
421 list.array[sliceId],sizeof(SliceSupportItem_t));
422 DU_FREE((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
423 list.array,sizeof(SliceSupportItem_t *));
424 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
426 DU_FREE((*ieExtend)->list.array[plmnidx],\
427 sizeof(struct ServedPLMNs_ItemExtIEs));
429 DU_FREE((*ieExtend)->list.array,\
430 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
431 DU_FREE((*ieExtend),sizeof(struct ProtocolExtensionContainer_4624P3));
435 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
436 list.array[sliceId]->sNSSAI.sD->buf[sdId] = 3;
438 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
439 list.array[sliceId]->sNSSAI.sD->buf[sdId] = 6;
441 (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
442 list.array[sliceId]->sNSSAI.sD->buf[sdId] = 9;
445 /*******************************************************************
447 * @brief Builds Served PLMN
451 * Function : BuildServedPlmn
453 * Functionality: Building the Served PLMN
455 * @params[in] GNB_DU_Served_Cells_Item_t *srvCellItem
456 * @return ROK - success
459 * ****************************************************************/
460 S16 BuildServedPlmn(ServedPLMNs_List_t *srvplmn)
466 GNB_DU_Served_Cells_Item_t *srvCellItem;
468 srvplmn->list.count = servPlmnCnt;
469 srvplmn->list.size = \
470 servPlmnCnt*sizeof(struct ServedPLMNs_Item *);
471 DU_ALLOC(srvplmn->list.array,\
472 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
473 if(srvplmn->list.array == NULLP)
478 for(plmnidx=0; plmnidx<servPlmnCnt; plmnidx++)
480 DU_ALLOC(srvplmn->list.array[plmnidx],\
481 sizeof(struct ServedPLMNs_Item));
482 if(srvplmn->list.array[plmnidx] == NULLP)
484 for(servPlmnid=0; servPlmnid<plmnidx;servPlmnid++)
486 DU_FREE(srvplmn->list.array[servPlmnid],\
487 sizeof(struct ServedPLMNs_Item));
489 DU_FREE(srvplmn->list.array,\
490 sizeof(struct ServedPLMNs_Item *));
494 /* Allocate Memory to Buffer */
495 srvplmn->list.array[0]->pLMN_Identity.size = PLMN_SIZE * sizeof(U8);
496 DU_ALLOC(srvplmn->list.array[0]->pLMN_Identity.buf, srvplmn->list.array[0]->pLMN_Identity.size);
497 ret = buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
498 &srvplmn->list.array[0]->pLMN_Identity);
501 for(plmnidx=0; plmnidx<servPlmnCnt; plmnidx++)
503 DU_FREE(srvplmn->list.array[plmnidx],\
504 sizeof(struct ServedPLMNs_Item *));
506 DU_FREE(srvplmn->list.array,\
507 sizeof(struct ServedPLMNs_Item *));
510 ret = BuildExtensions(&srvplmn->list.array[0]->iE_Extensions);
513 DU_FREE(srvplmn->list.\
514 array[0]->pLMN_Identity.buf,(Size)\
515 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
516 for(plmnidx=0; plmnidx<servPlmnCnt; plmnidx++)
518 DU_FREE(srvplmn->list.array[plmnidx],\
519 sizeof(struct ServedPLMNs_Item *));
521 DU_FREE(srvplmn->list.array,\
522 sizeof(struct ServedPLMNs_Item *));
527 /*******************************************************************
529 * @brief Builds Served Cell List
533 * Function : BuildServedCellList
535 * Functionality: Building Served Cell List
537 * @params[in] PLMNID plmn
538 * @return ROK - success
541 * ****************************************************************/
543 S16 BuildServedCellList(GNB_DU_Served_Cells_List_t *duServedCell)
555 GNB_DU_Served_Cells_Item_t *srvCellItem;
558 duServedCell->list.size = plmnCnt * sizeof(GNB_DU_Served_Cells_ItemIEs_t *);
559 duServedCell->list.count = plmnCnt;
560 DU_ALLOC(duServedCell->list.array, plmnCnt * sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
561 if(duServedCell->list.array == NULLP)
565 for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
567 DU_ALLOC(duServedCell->list.array[plmnidx],\
568 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
569 if(duServedCell->list.array[plmnidx] == NULLP)
571 for(plmnId=0; plmnId<plmnidx ; plmnId++)
573 DU_FREE(duServedCell->list.array[plmnId],sizeof(GNB_DU_Served_Cells_ItemIEs_t));
575 DU_FREE(duServedCell->list.array,\
576 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
581 duServedCell->list.array[idx]->id = ProtocolIE_ID_id_GNB_DU_Served_Cells_Item;
582 duServedCell->list.array[idx]->criticality = Criticality_reject;
583 duServedCell->list.array[idx]->value.present = \
584 GNB_DU_Served_Cells_ItemIEs__value_PR_GNB_DU_Served_Cells_Item;
586 &duServedCell->list.array[idx]->value.choice.GNB_DU_Served_Cells_Item;
588 ret = BuildNrcgi(&srvCellItem->served_Cell_Information.nRCGI);
591 for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
593 DU_FREE(duServedCell->list.array[plmnidx],\
594 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
596 DU_FREE(duServedCell->list.array,\
597 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
602 srvCellItem->served_Cell_Information.nRPCI = \
603 duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrPci;
606 ret = BuildFiveGSTac(&srvCellItem->served_Cell_Information);
609 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
610 srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size * sizeof(U8));
611 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
612 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
613 for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
615 DU_FREE(duServedCell->list.array[plmnidx],\
616 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
618 DU_FREE(duServedCell->list.array,\
619 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
623 ret = BuildServedPlmn(&srvCellItem->served_Cell_Information.servedPLMNs);
626 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC->buf,\
627 sizeof(srvCellItem->served_Cell_Information.fiveGS_TAC->size));
628 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC,\
629 sizeof(FiveGS_TAC_t));
630 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
631 srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size * sizeof(U8));
632 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
633 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
634 for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
636 DU_FREE(duServedCell->list.array[plmnidx],\
637 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
639 DU_FREE(duServedCell->list.array,\
640 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
643 /*nR Mode Info with FDD*/
644 ret = BuildNrMode(&srvCellItem->served_Cell_Information.nR_Mode_Info);
650 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
651 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
652 list.array[sliceId]->sNSSAI.sD->buf, srvCellItem->served_Cell_Information.servedPLMNs.\
653 list.array[servId]->iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
654 list.array[sliceId]->sNSSAI.sD->size);
655 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
656 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
657 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
658 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
659 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList\
660 .list.array[sliceId]->sNSSAI.sST.buf,sizeof(U8));
661 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
662 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
663 list.array[sliceId],sizeof(SliceSupportItem_t));
664 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
665 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
666 list.array,sizeof(SliceSupportItem_t *));
667 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
669 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
670 array[servId]->iE_Extensions->list.array[plmnidx],\
671 sizeof(struct ServedPLMNs_ItemExtIEs));
673 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
674 array[servId]->iE_Extensions->list.array,\
675 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
676 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
677 array[servId]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
678 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
679 array[servId]->pLMN_Identity.buf,srvCellItem->served_Cell_Information.\
680 servedPLMNs.list.array[servId]->pLMN_Identity.size * sizeof(U8));
681 for(plmnidx=0; plmnidx<servPlmnCnt; plmnidx++)
683 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[plmnidx],\
684 sizeof(struct ServedPLMNs_Item *));
686 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array,\
687 sizeof(struct ServedPLMNs_Item *));
688 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC->buf,\
689 sizeof(srvCellItem->served_Cell_Information.fiveGS_TAC->size));
690 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC,\
691 sizeof(FiveGS_TAC_t));
692 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
693 srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size * sizeof(U8));
694 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
695 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
696 for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
698 DU_FREE(duServedCell->list.array[plmnidx],\
699 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
701 DU_FREE(duServedCell->list.array,\
702 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
707 /*Measurement timing Config*/
708 srvCellItem->served_Cell_Information.measurementTimingConfiguration.\
710 DU_ALLOC(srvCellItem->served_Cell_Information.\
711 measurementTimingConfiguration.buf,sizeof(U8));
712 if(srvCellItem->served_Cell_Information.\
713 measurementTimingConfiguration.buf == NULLP)
715 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
716 dL_NRFreqInfo.freqBandListNr.list.array[0],\
717 sizeof(struct FreqBandNrItem));
718 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
719 dL_NRFreqInfo.freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
720 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.\
721 fDD->uL_NRFreqInfo.freqBandListNr.list.array[0],\
722 sizeof(struct FreqBandNrItem));
723 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
724 uL_NRFreqInfo.freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
725 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
727 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
728 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
729 list.array[sliceId]->sNSSAI.sD->buf,srvCellItem->served_Cell_Information.servedPLMNs.\
730 list.array[servId]->iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
731 list.array[sliceId]->sNSSAI.sD->size);
732 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
733 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
734 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
735 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
736 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList\
737 .list.array[sliceId]->sNSSAI.sST.buf,sizeof(U8));
738 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
739 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
740 list.array[sliceId],sizeof(SliceSupportItem_t));
741 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
742 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
743 list.array,sizeof(SliceSupportItem_t *));
744 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
746 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
747 array[servId]->iE_Extensions->list.array[plmnidx],\
748 sizeof(struct ServedPLMNs_ItemExtIEs));
750 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
751 array[servId]->iE_Extensions->list.array,\
752 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
753 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
754 array[servId]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
755 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
756 array[servId]->pLMN_Identity.buf,srvCellItem->served_Cell_Information.\
757 servedPLMNs.list.array[servId]->pLMN_Identity.size * sizeof(U8));
758 for(plmnidx=0; plmnidx<servPlmnCnt; plmnidx++)
760 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[plmnidx],\
761 sizeof(struct ServedPLMNs_Item *));
763 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array,\
764 sizeof(struct ServedPLMNs_Item *));
765 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC->buf,\
766 sizeof(srvCellItem->served_Cell_Information.fiveGS_TAC->size));
767 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC,\
768 sizeof(FiveGS_TAC_t));
769 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
770 srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size * sizeof(U8));
771 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
772 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
773 for(plmnidx=0; plmnidx<plmnCnt; plmnidx++)
775 DU_FREE(duServedCell->list.array[plmnidx],\
776 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
778 DU_FREE(duServedCell->list.array,\
779 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
782 srvCellItem->served_Cell_Information.measurementTimingConfiguration.buf[0] = \
783 duCfgParam.srvdCellLst[0].duCellInfo.measTimeCfg;
785 /* GNB DU System Information */
786 DU_ALLOC(srvCellItem->gNB_DU_System_Information,
787 sizeof(GNB_DU_System_Information_t));
788 if(!srvCellItem->gNB_DU_System_Information)
790 DU_LOG("\nF1AP: Memory allocation failure for GNB_DU_System_Information");
794 srvCellItem->gNB_DU_System_Information->mIB_message.size =\
795 strlen(duCfgParam.srvdCellLst[0].duSysInfo.mibMsg);
796 DU_ALLOC(srvCellItem->gNB_DU_System_Information->mIB_message.buf,
797 srvCellItem->gNB_DU_System_Information->mIB_message.size);
798 if(!srvCellItem->gNB_DU_System_Information->mIB_message.buf)
800 DU_LOG("\nF1AP: Memory allocation failure for mIB message");
803 strcpy(srvCellItem->gNB_DU_System_Information->mIB_message.buf,
804 duCfgParam.srvdCellLst[0].duSysInfo.mibMsg);
807 srvCellItem->gNB_DU_System_Information->sIB1_message.size =\
808 duCfgParam.srvdCellLst[0].duSysInfo.sib1Len;
809 DU_ALLOC(srvCellItem->gNB_DU_System_Information->sIB1_message.buf,
810 srvCellItem->gNB_DU_System_Information->sIB1_message.size);
811 if(!srvCellItem->gNB_DU_System_Information->sIB1_message.buf)
813 DU_LOG("\nF1AP: Memory allocation failure for SIB1 message");
816 for(int x=0; x<srvCellItem->gNB_DU_System_Information->sIB1_message.size; x++)
818 srvCellItem->gNB_DU_System_Information->sIB1_message.buf[x]=\
819 duCfgParam.srvdCellLst[0].duSysInfo.sib1Msg[x];
822 DU_FREE(duCfgParam.srvdCellLst[0].duSysInfo.sib1Msg,
823 srvCellItem->gNB_DU_System_Information->sIB1_message.size);
824 DU_FREE(duCfgParam.srvdCellLst[0].duSysInfo.mibMsg,
825 strlen(duCfgParam.srvdCellLst[0].duSysInfo.mibMsg));
828 /*******************************************************************
830 * @brief Builds RRC Version
834 * Function : BuildRrcVer
836 * Functionality: Building RRC Version
838 * @params[in] int idx,int elementCnt,RRC_Version_t *rrcver
839 * @return ROK - success
842 * ****************************************************************/
843 S16 BuildRrcVer(RRC_Version_t *rrcVer)
847 rrcVer->latest_RRC_Version.size = sizeof(U8);
848 DU_ALLOC(rrcVer->latest_RRC_Version.buf,sizeof(U8));
849 if(rrcVer->latest_RRC_Version.buf == NULLP)
853 rrcVer->latest_RRC_Version.buf[0] = 0;
854 rrcVer->latest_RRC_Version.bits_unused = 5;
855 DU_ALLOC(rrcVer->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P81_t));
856 if(rrcVer->iE_Extensions == NULLP)
858 DU_FREE(rrcVer->latest_RRC_Version.buf,sizeof(U8));
861 rrcVer->iE_Extensions->list.count = 1;
862 rrcVer->iE_Extensions->list.size = sizeof(struct RRC_Version_ExtIEs *);
863 DU_ALLOC(rrcVer->iE_Extensions->list.array,\
864 sizeof(struct RRC_Version_ExtIEs *));
865 if(rrcVer->iE_Extensions->list.array == NULLP)
867 DU_FREE(rrcVer->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P81_t));
868 DU_FREE(rrcVer->latest_RRC_Version.buf,sizeof(U8));
872 DU_ALLOC(rrcVer->iE_Extensions->list.array[0],\
873 sizeof(struct RRC_Version_ExtIEs));
874 if(rrcVer->iE_Extensions->list.array[0] == NULLP)
876 DU_FREE(rrcVer->iE_Extensions->list.array,\
877 sizeof(struct RRC_Version_ExtIEs *));
878 DU_FREE(rrcVer->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P81_t));
879 DU_FREE(rrcVer->latest_RRC_Version.buf,sizeof(U8));
882 rrcVer->iE_Extensions->list.array[rrcExt]->id = \
883 ProtocolIE_ID_id_latest_RRC_Version_Enhanced;
884 rrcVer->iE_Extensions->list.array[rrcExt]->criticality = Criticality_reject;
885 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.present =\
886 RRC_Version_ExtIEs__extensionValue_PR_Latest_RRC_Version_Enhanced;
887 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice\
888 .Latest_RRC_Version_Enhanced.size = 3*sizeof(U8);
889 DU_ALLOC(rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice\
890 .Latest_RRC_Version_Enhanced.buf,rrcVer->iE_Extensions->list.\
891 array[rrcExt]->extensionValue.choice.Latest_RRC_Version_Enhanced.size);
892 if(rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice\
893 .Latest_RRC_Version_Enhanced.buf == NULLP)
895 DU_FREE(rrcVer->iE_Extensions->list.array[rrcExt],\
896 sizeof(struct RRC_Version_ExtIEs));
897 DU_FREE(rrcVer->iE_Extensions->list.array,\
898 sizeof(struct RRC_Version_ExtIEs *));
899 DU_FREE(rrcVer->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P81_t));
900 DU_FREE(rrcVer->latest_RRC_Version.buf,sizeof(U8));
904 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice.\
905 Latest_RRC_Version_Enhanced.buf[rrcLatest] = 15;
907 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice.\
908 Latest_RRC_Version_Enhanced.buf[rrcLatest] = 5;
910 rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice.\
911 Latest_RRC_Version_Enhanced.buf[rrcLatest] = 0;
914 /*******************************************************************
916 * @brief Sends F1 msg over SCTP
920 * Function : SendF1APMsg
922 * Functionality: Sends F1 msg over SCTP
924 * @params[in] Region region
926 * @return ROK - success
929 * ****************************************************************/
930 S16 SendF1APMsg(Region region, Pool pool)
934 if(SGetMsg(region, pool, &mBuf) == ROK)
936 if(SAddPstMsgMult((Data *)encBuf, encBufSize, mBuf) == ROK)
940 if(sctpSend(mBuf, F1_INTERFACE) != ROK)
942 DU_LOG("\nF1AP : SCTP Send failed");
949 DU_LOG("\nF1AP : SAddPstMsgMult failed");
957 DU_LOG("\nF1AP : Failed to allocate memory");
965 /*******************************************************************
967 * @brief Builds and Send the F1SetupRequest
971 * Function : BuildAndSendF1SetupReq
973 * Functionality:Fills the F1SetupRequest
975 * @return ROK - success
978 ******************************************************************/
979 S16 BuildAndSendF1SetupReq()
991 F1AP_PDU_t *f1apMsg = NULL;
992 F1SetupRequest_t *f1SetupReq;
993 GNB_DU_Served_Cells_List_t *duServedCell;
994 GNB_DU_Served_Cells_Item_t *srvCellItem;
995 RRC_Version_t *rrcVer;
996 asn_enc_rval_t encRetVal; /* Encoder return value */
998 DU_LOG("\nF1AP : Building F1 Setup Request\n");
1000 DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t));
1001 if(f1apMsg == NULLP)
1003 DU_LOG("\nF1AP : Memory allocation for F1AP-PDU failed");
1007 f1apMsg->present = F1AP_PDU_PR_initiatingMessage;
1008 DU_ALLOC(f1apMsg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1009 if(f1apMsg->choice.initiatingMessage == NULLP)
1011 DU_LOG("\nF1AP : Memory allocation for F1AP-PDU failed");
1012 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1016 f1apMsg->choice.initiatingMessage->procedureCode = ProcedureCode_id_F1Setup;
1017 f1apMsg->choice.initiatingMessage->criticality = Criticality_reject;
1018 f1apMsg->choice.initiatingMessage->value.present = \
1019 InitiatingMessage__value_PR_F1SetupRequest;
1021 f1SetupReq = &f1apMsg->choice.initiatingMessage->value.choice.F1SetupRequest;
1023 elementCnt = (duCfgParam.duName[0] != NULL) ? 5 : 4;
1025 f1SetupReq->protocolIEs.list.count = elementCnt;
1026 f1SetupReq->protocolIEs.list.size = elementCnt * sizeof(F1SetupRequestIEs_t *);
1028 /* Initialize the F1Setup members */
1029 DU_ALLOC(f1SetupReq->protocolIEs.list.array, \
1030 elementCnt * sizeof(F1SetupRequestIEs_t *));
1031 if(f1SetupReq->protocolIEs.list.array == NULLP)
1033 DU_LOG("\nF1AP : Memory allocation for F1RequestIEs failed");
1034 DU_FREE(f1apMsg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1035 DU_FREE(f1apMsg, (Size)sizeof(F1AP_PDU_t));
1039 for(idx=0; idx<elementCnt; idx++)
1041 DU_ALLOC(f1SetupReq->protocolIEs.list.array[idx],\
1042 sizeof(F1SetupRequestIEs_t));
1043 if(f1SetupReq->protocolIEs.list.array[idx] == NULLP)
1045 for(ieId=0 ; ieId<idx ;ieId++)
1047 DU_FREE(f1SetupReq->protocolIEs.list.array[ieId],\
1048 sizeof(F1SetupRequestIEs_t));
1050 DU_FREE(f1SetupReq->protocolIEs.list.array,\
1051 elementCnt * sizeof(F1SetupRequestIEs_t *));
1052 DU_FREE(f1apMsg->choice.initiatingMessage, \
1053 sizeof(InitiatingMessage_t));
1054 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1062 f1SetupReq->protocolIEs.list.array[idx]->id = ProtocolIE_ID_id_TransactionID;
1063 f1SetupReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1064 f1SetupReq->protocolIEs.list.array[idx]->value.present =\
1065 F1SetupRequestIEs__value_PR_TransactionID;
1066 f1SetupReq->protocolIEs.list.array[idx]->value.choice.TransactionID = \
1071 f1SetupReq->protocolIEs.list.array[idx]->id = ProtocolIE_ID_id_gNB_DU_ID;
1072 f1SetupReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1073 f1SetupReq->protocolIEs.list.array[idx]->value.present = \
1074 F1SetupRequestIEs__value_PR_GNB_DU_ID;
1075 f1SetupReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_ID.size =\
1078 DU_ALLOC(f1SetupReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_ID.buf,\
1080 if(f1SetupReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_ID.buf == \
1083 for(plmnidx=0; plmnidx<elementCnt; plmnidx++)
1085 DU_FREE(f1SetupReq->protocolIEs.list.array[plmnidx], \
1086 sizeof(F1SetupRequestIEs_t));
1088 DU_FREE(f1SetupReq->protocolIEs.list.array, \
1089 elementCnt * sizeof(F1SetupRequestIEs_t *));
1090 DU_FREE(f1apMsg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1091 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1095 f1SetupReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_ID.buf[0] =\
1099 if(duCfgParam.duName[0] != NULL)
1102 f1SetupReq->protocolIEs.list.array[idx]->id = ProtocolIE_ID_id_gNB_DU_Name ;
1103 f1SetupReq->protocolIEs.list.array[idx]->criticality = Criticality_ignore;
1104 f1SetupReq->protocolIEs.list.array[idx]->value.present = \
1105 F1SetupRequestIEs__value_PR_GNB_DU_Name;
1106 f1SetupReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_Name.size =\
1107 sizeof(duCfgParam.duName);
1109 DU_ALLOC(f1SetupReq->protocolIEs.list.array[idx]->value.choice.\
1110 GNB_DU_Name.buf, sizeof(duCfgParam.duName));
1111 if(f1SetupReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_Name.\
1114 DU_FREE(f1SetupReq->protocolIEs.list.array[--idx]->value.choice.\
1115 GNB_DU_ID.buf, sizeof(U8));
1116 for(plmnidx=0; plmnidx<elementCnt; plmnidx++)
1118 DU_FREE(f1SetupReq->protocolIEs.list.array[plmnidx], \
1119 sizeof(F1SetupRequestIEs_t));
1121 DU_FREE(f1SetupReq->protocolIEs.list.array,\
1122 elementCnt * sizeof(F1SetupRequestIEs_t *));
1123 DU_FREE(f1apMsg->choice.initiatingMessage, \
1124 sizeof(InitiatingMessage_t));
1125 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1129 strcpy((char*)f1SetupReq->protocolIEs.list.array[idx]->value.\
1130 choice.GNB_DU_Name.buf,
1131 (char*)&duCfgParam.duName);
1134 /*Served Cell list */
1136 f1SetupReq->protocolIEs.list.array[idx]->id = \
1137 ProtocolIE_ID_id_gNB_DU_Served_Cells_List;
1138 f1SetupReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1139 f1SetupReq->protocolIEs.list.array[idx]->value.present = \
1140 F1SetupRequestIEs__value_PR_GNB_DU_Served_Cells_List;
1141 duServedCell = &f1SetupReq->protocolIEs.list.\
1142 array[idx]->value.choice.GNB_DU_Served_Cells_List;
1143 ret = BuildServedCellList(duServedCell);
1147 DU_FREE(f1SetupReq->protocolIEs.list.array[--idx]->value.\
1148 choice.GNB_DU_Name.buf, sizeof(duCfgParam.duName));
1149 DU_FREE(f1SetupReq->protocolIEs.list.array[--idx]->value.\
1150 choice.GNB_DU_ID.buf, sizeof(U8));
1151 for(plmnidx=0; plmnidx<elementCnt; idx++)
1153 DU_FREE(f1SetupReq->protocolIEs.list.array[plmnidx],\
1154 sizeof(F1SetupRequestIEs_t));
1156 DU_FREE(f1SetupReq->protocolIEs.list.array, \
1157 elementCnt * sizeof(F1SetupRequestIEs_t *));
1158 DU_FREE(f1apMsg->choice.initiatingMessage,\
1159 sizeof(InitiatingMessage_t));
1160 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1164 f1SetupReq->protocolIEs.list.array[idx]->id = \
1165 ProtocolIE_ID_id_GNB_DU_RRC_Version ;
1166 f1SetupReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1167 f1SetupReq->protocolIEs.list.array[idx]->value.present = \
1168 F1SetupRequestIEs__value_PR_RRC_Version;
1169 rrcVer = &f1SetupReq->protocolIEs.list.array[idx]->value.choice.RRC_Version;
1170 ret = BuildRrcVer(rrcVer);
1176 DU_FREE(srvCellItem->served_Cell_Information.\
1177 measurementTimingConfiguration.buf,sizeof(U8));
1178 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1179 dL_NRFreqInfo.freqBandListNr.list.array[0],\
1180 sizeof(struct FreqBandNrItem));
1181 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1182 dL_NRFreqInfo.freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
1183 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.\
1184 fDD->uL_NRFreqInfo.freqBandListNr.list.array[0],\
1185 sizeof(struct FreqBandNrItem));
1186 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1187 uL_NRFreqInfo.freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
1188 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
1189 sizeof(FDD_Info_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.sD->buf,srvCellItem->served_Cell_Information.servedPLMNs.\
1193 list.array[servId]->iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1194 list.array[sliceId]->sNSSAI.sD->size);
1195 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1196 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1197 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
1198 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1199 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList\
1200 .list.array[sliceId]->sNSSAI.sST.buf,sizeof(U8));
1201 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1202 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1203 list.array[sliceId],sizeof(SliceSupportItem_t));
1204 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1205 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1206 list.array,sizeof(SliceSupportItem_t *));
1207 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
1209 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1210 array[servId]->iE_Extensions->list.array[plmnidx],\
1211 sizeof(struct ServedPLMNs_ItemExtIEs));
1213 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1214 array[servId]->iE_Extensions->list.array,\
1215 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
1216 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1217 array[servId]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1218 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1219 array[servId]->pLMN_Identity.buf,srvCellItem->served_Cell_Information.\
1220 servedPLMNs.list.array[servId]->pLMN_Identity.size * sizeof(U8));
1221 for(plmnidx=0;plmnidx<servPlmnCnt; plmnidx++)
1223 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[plmnidx],\
1224 sizeof(struct ServedPLMNs_Item *));
1226 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array,\
1227 sizeof(struct ServedPLMNs_Item *));
1228 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC->buf,\
1229 sizeof(srvCellItem->served_Cell_Information.fiveGS_TAC->size));
1230 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC,\
1231 sizeof(FiveGS_TAC_t));
1232 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1233 srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size * sizeof(U8));
1234 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1235 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
1236 for(plmnidx=0; plmnidx<plmnCnt;plmnidx++)
1238 DU_FREE(duServedCell->list.array[plmnidx],\
1239 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
1241 DU_FREE(duServedCell->list.array,\
1242 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
1243 DU_FREE(f1SetupReq->protocolIEs.list.array[--idx]->value.\
1244 choice.GNB_DU_Name.buf, sizeof(duCfgParam.duName));
1245 DU_FREE(f1SetupReq->protocolIEs.list.array[--idx]->value.\
1246 choice.GNB_DU_ID.buf, sizeof(U8));
1247 for(plmnidx=0; plmnidx<elementCnt; plmnidx++)
1249 DU_FREE(f1SetupReq->protocolIEs.list.array[plmnidx],\
1250 sizeof(F1SetupRequestIEs_t));
1252 DU_FREE(f1SetupReq->protocolIEs.list.array,\
1253 elementCnt * sizeof(F1SetupRequestIEs_t *));
1254 DU_FREE(f1apMsg->choice.initiatingMessage,\
1255 sizeof(InitiatingMessage_t));
1256 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1259 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
1261 /* Encode the F1SetupRequest type as APER */
1262 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
1264 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\
1268 DU_FREE(srvCellItem->gNB_DU_System_Information->sIB1_message.buf,
1269 srvCellItem->gNB_DU_System_Information->sIB1_message.size);
1270 DU_FREE(srvCellItem->gNB_DU_System_Information->mIB_message.buf,
1271 srvCellItem->gNB_DU_System_Information->mIB_message.size);
1272 DU_FREE(srvCellItem->served_Cell_Information.\
1273 measurementTimingConfiguration.buf,sizeof(U8));
1274 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1275 dL_NRFreqInfo.freqBandListNr.list.array[0],\
1276 sizeof(struct FreqBandNrItem));
1277 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1278 dL_NRFreqInfo.freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
1279 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.\
1280 fDD->uL_NRFreqInfo.freqBandListNr.list.array[0],\
1281 sizeof(struct FreqBandNrItem));
1282 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
1283 uL_NRFreqInfo.freqBandListNr.list.array,sizeof(struct FreqBandNrItem *));
1284 DU_FREE(srvCellItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
1285 sizeof(FDD_Info_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.sD->buf,srvCellItem->served_Cell_Information.servedPLMNs.\
1289 list.array[servId]->iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1290 list.array[sliceId]->sNSSAI.sD->size);
1291 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1292 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1293 list.array[sliceId]->sNSSAI.sD,sizeof(OCTET_STRING_t));
1294 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1295 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList\
1296 .list.array[sliceId]->sNSSAI.sST.buf,sizeof(U8));
1297 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1298 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1299 list.array[sliceId],sizeof(SliceSupportItem_t));
1300 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
1301 iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.\
1302 list.array,sizeof(SliceSupportItem_t *));
1303 for(plmnidx=0;plmnidx<extensionCnt;plmnidx++)
1305 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1306 array[servId]->iE_Extensions->list.array[plmnidx],\
1307 sizeof(struct ServedPLMNs_ItemExtIEs));
1309 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1310 array[servId]->iE_Extensions->list.array,\
1311 extensionCnt*sizeof(struct ServedPLMNs_ItemExtIEs *));
1312 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1313 array[servId]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1314 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
1315 array[servId]->pLMN_Identity.buf,srvCellItem->served_Cell_Information.\
1316 servedPLMNs.list.array[servId]->pLMN_Identity.size * sizeof(U8));
1317 for(plmnidx=0;plmnidx<servPlmnCnt; plmnidx++)
1319 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[plmnidx],\
1320 sizeof(struct ServedPLMNs_Item *));
1322 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array,\
1323 sizeof(struct ServedPLMNs_Item *));
1324 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC->buf,\
1325 sizeof(srvCellItem->served_Cell_Information.fiveGS_TAC->size));
1326 DU_FREE(srvCellItem->served_Cell_Information.fiveGS_TAC,\
1327 sizeof(FiveGS_TAC_t));
1328 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1329 srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size * sizeof(U8));
1330 DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1331 srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size * sizeof(U8));
1332 for(plmnidx=0; plmnidx<plmnCnt;plmnidx++)
1334 DU_FREE(duServedCell->list.array[plmnidx],\
1335 sizeof(GNB_DU_Served_Cells_ItemIEs_t));
1337 DU_FREE(duServedCell->list.array,\
1338 plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t *));
1341 if(duCfgParam.duName[0] != NULL)
1343 DU_FREE(f1SetupReq->protocolIEs.list.array[idx]->value.choice.\
1344 GNB_DU_Name.buf, sizeof(duCfgParam.duName));
1346 DU_FREE(f1SetupReq->protocolIEs.list.array[--idx]->value.choice.GNB_DU_ID.\
1348 for(idx=0; idx<elementCnt; idx++)
1350 DU_FREE(f1SetupReq->protocolIEs.list.array[idx], sizeof(F1SetupRequestIEs_t));
1352 DU_FREE(f1SetupReq->protocolIEs.list.array, elementCnt * sizeof(F1SetupRequestIEs_t *));
1353 DU_FREE(f1apMsg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1354 DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
1355 /* Encode results */
1356 if(encRetVal.encoded == ENCODE_FAIL)
1358 DU_LOG("\nF1AP : Could not encode F1SetupRequest structure (at %s)\n",\
1359 encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
1364 DU_LOG("\nF1AP : Created APER encoded buffer for F1SetupRequest\n");
1365 for(int i=0; i< encBufSize; i++)
1367 printf("%x",encBuf[i]);
1372 if(SendF1APMsg(DU_APP_MEM_REGION, DU_POOL) != ROK)
1374 DU_LOG("\nF1AP : Sending F1 Setup request failed");
1379 }/* End of BuildAndSendF1SetupReq */
1381 /*******************************************************************
1383 * @brief Builds and sends the DUConfigUpdate
1387 * Function : BuildAndSendDUConfigUpdate
1389 * Functionality: Constructs the DU Update message and sends
1390 * it to the CU through SCTP.
1392 * @params[in] void **buf,Buffer to which encoded pattern is written into
1393 * @params[in] int *size,size of buffer
1395 * @return ROK - success
1398 * ****************************************************************/
1399 S16 BuildAndSendDUConfigUpdate()
1402 U8 elementCnt,modifyCnt,servPlmnCnt,extensionCnt;
1403 asn_enc_rval_t encRetVal; /* Encoder return value */
1404 F1AP_PDU_t *f1apDuCfg = NULL;
1405 GNBDUConfigurationUpdate_t *duCfgUpdate;
1406 Served_Cells_To_Modify_List_t *cellsToModify;
1407 Served_Cells_To_Modify_Item_t *modifyItem;
1408 DU_LOG("\nF1AP : Building DU config update\n");
1410 /* Allocate the memory for F1DuCfg */
1411 DU_ALLOC(f1apDuCfg, (Size)sizeof(F1AP_PDU_t));
1412 if(f1apDuCfg == NULLP)
1414 DU_LOG("\nF1AP : Memory allocation for F1AP-PDU failed");
1418 f1apDuCfg->present = F1AP_PDU_PR_initiatingMessage;
1419 DU_ALLOC(f1apDuCfg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1420 if(f1apDuCfg->choice.initiatingMessage == NULLP)
1422 DU_LOG("\nF1AP : Memory allocation for F1AP-PDU failed");
1423 DU_FREE(f1apDuCfg, (Size)sizeof(F1AP_PDU_t));
1427 f1apDuCfg->choice.initiatingMessage->procedureCode = \
1428 ProcedureCode_id_gNBDUConfigurationUpdate;
1429 f1apDuCfg->choice.initiatingMessage->criticality = Criticality_reject;
1430 f1apDuCfg->choice.initiatingMessage->value.present = \
1431 InitiatingMessage__value_PR_GNBDUConfigurationUpdate;
1432 duCfgUpdate = &f1apDuCfg->choice.initiatingMessage->value.\
1433 choice.GNBDUConfigurationUpdate;
1436 duCfgUpdate->protocolIEs.list.count = elementCnt;
1437 duCfgUpdate->protocolIEs.list.size = \
1438 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *);
1440 /* Initialize the F1Setup members */
1441 DU_ALLOC(duCfgUpdate->protocolIEs.list.array,\
1442 elementCnt*sizeof(GNBDUConfigurationUpdateIEs_t *));
1443 if(duCfgUpdate->protocolIEs.list.array == NULLP)
1445 DU_LOG("F1AP : Memory allocation for F1RequestIEs failed");
1446 DU_FREE(f1apDuCfg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
1447 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1451 for(idx=0;idx<elementCnt;idx++)
1453 DU_ALLOC(duCfgUpdate->protocolIEs.list.array[idx], \
1454 sizeof(GNBDUConfigurationUpdateIEs_t));
1455 if(duCfgUpdate->protocolIEs.list.array[idx] == NULLP)
1457 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1458 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1459 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1460 (Size)sizeof(InitiatingMessage_t));
1461 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1468 duCfgUpdate->protocolIEs.list.array[idx]->id = \
1469 ProtocolIE_ID_id_TransactionID;
1470 duCfgUpdate->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1471 duCfgUpdate->protocolIEs.list.array[idx]->value.present = \
1472 GNBDUConfigurationUpdateIEs__value_PR_TransactionID;
1473 duCfgUpdate->protocolIEs.list.array[idx]->value.choice.TransactionID = \
1476 /*Served Cell to Modify */
1478 duCfgUpdate->protocolIEs.list.array[idx]->id = \
1479 ProtocolIE_ID_id_Served_Cells_To_Modify_List;
1480 duCfgUpdate->protocolIEs.list.array[idx]->criticality = Criticality_reject;
1481 duCfgUpdate->protocolIEs.list.array[idx]->value.present = \
1482 GNBDUConfigurationUpdateIEs__value_PR_Served_Cells_To_Modify_List;
1483 cellsToModify = &duCfgUpdate->protocolIEs.list.array[1]->value.choice.\
1484 Served_Cells_To_Modify_List;
1486 cellsToModify->list.count = modifyCnt;
1487 cellsToModify->list.size = \
1488 modifyCnt*sizeof(struct Served_Cells_To_Modify_ItemIEs *);
1489 DU_ALLOC(cellsToModify->list.array,modifyCnt*\
1490 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1491 if(cellsToModify->list.array == NULLP)
1493 for(idy=0;idy<elementCnt;idy++)
1495 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1496 sizeof(GNBDUConfigurationUpdateIEs_t));
1498 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1499 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1500 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1501 (Size)sizeof(InitiatingMessage_t));
1502 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1506 for(idy=0; idy<modifyCnt ;idy++)
1508 DU_ALLOC(cellsToModify->list.array[idy],\
1509 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1510 if(cellsToModify->list.array[idy] == NULLP)
1512 DU_FREE(cellsToModify->list.array,modifyCnt*\
1513 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1514 for(idy=0;idy<elementCnt;idy++)
1516 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1517 sizeof(GNBDUConfigurationUpdateIEs_t));
1519 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1520 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1521 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1522 (Size)sizeof(InitiatingMessage_t));
1523 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1527 cellsToModify->list.array[0]->id = \
1528 ProtocolIE_ID_id_Served_Cells_To_Modify_Item;
1529 cellsToModify->list.array[0]->criticality = Criticality_reject;
1530 cellsToModify->list.array[0]->value.present = \
1531 Served_Cells_To_Modify_ItemIEs__value_PR_Served_Cells_To_Modify_Item;
1532 modifyItem=&cellsToModify->list.array[0]->value.choice.\
1533 Served_Cells_To_Modify_Item;
1536 modifyItem->oldNRCGI.pLMN_Identity.size = 3;
1537 DU_ALLOC(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1538 if(modifyItem->oldNRCGI.pLMN_Identity.buf == NULLP)
1540 for(idy=0; idy<modifyCnt ;idy++)
1542 DU_FREE(cellsToModify->list.array[idy],\
1543 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1544 DU_FREE(cellsToModify->list.array,modifyCnt*\
1545 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1546 for(idy=0;idy<elementCnt;idy++)
1548 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1549 sizeof(GNBDUConfigurationUpdateIEs_t));
1551 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1552 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1553 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1554 (Size)sizeof(InitiatingMessage_t));
1555 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1559 buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
1560 &modifyItem->oldNRCGI.pLMN_Identity);
1562 modifyItem->oldNRCGI.nRCellIdentity.size = 5;
1563 DU_ALLOC(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1564 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1565 if(modifyItem->oldNRCGI.nRCellIdentity.buf == NULLP)
1567 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1568 DU_FREE(cellsToModify->list.array[idy],\
1569 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1570 DU_FREE(cellsToModify->list.array,modifyCnt*\
1571 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1572 for(idy=0;idy<elementCnt;idy++)
1574 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1575 sizeof(GNBDUConfigurationUpdateIEs_t));
1577 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1578 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1579 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1580 (Size)sizeof(InitiatingMessage_t));
1581 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1584 for (int tmp = 0 ; tmp < modifyItem->oldNRCGI.nRCellIdentity.size-1 ; tmp++)
1586 modifyItem->oldNRCGI.nRCellIdentity.buf[tmp] = 0;
1588 modifyItem->oldNRCGI.nRCellIdentity.buf[4] = 16;
1589 modifyItem->oldNRCGI.nRCellIdentity.bits_unused = 4;
1592 modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.size = 3;
1593 DU_ALLOC(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1595 if(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf == NULLP)
1597 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1598 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1599 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1600 DU_FREE(cellsToModify->list.array[idy],\
1601 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1602 DU_FREE(cellsToModify->list.array,modifyCnt*\
1603 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1604 for(idy=0;idy<elementCnt;idy++)
1606 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1607 sizeof(GNBDUConfigurationUpdateIEs_t));
1609 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1610 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1611 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1612 (Size)sizeof(InitiatingMessage_t));
1613 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1616 buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
1617 &modifyItem->served_Cell_Information.nRCGI.pLMN_Identity);
1618 modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.size = 5;
1619 DU_ALLOC(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1621 if(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf == NULLP)
1623 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1625 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1626 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1627 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1628 DU_FREE(cellsToModify->list.array[idy],\
1629 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1630 DU_FREE(cellsToModify->list.array,modifyCnt*\
1631 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1632 for(idy=0;idy<elementCnt;idy++)
1634 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1635 sizeof(GNBDUConfigurationUpdateIEs_t));
1637 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1638 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1639 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1640 (Size)sizeof(InitiatingMessage_t));
1641 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1644 for (int tmp = 0 ; tmp < modifyItem->served_Cell_Information.\
1645 nRCGI.nRCellIdentity.size-1 ; tmp++)
1647 modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf[tmp] = 0;
1649 modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf[4] = 16;
1650 modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.bits_unused = 4;
1653 modifyItem->served_Cell_Information.nRPCI = \
1654 duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrPci;
1658 modifyItem->served_Cell_Information.servedPLMNs.list.count = servPlmnCnt;
1659 modifyItem->served_Cell_Information.servedPLMNs.list.size = \
1660 servPlmnCnt*sizeof(struct ServedPLMNs_Item *);
1661 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1662 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1663 if(modifyItem->served_Cell_Information.servedPLMNs.list.array == NULLP)
1665 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1667 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1669 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1670 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1671 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1672 DU_FREE(cellsToModify->list.array[idy],\
1673 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1674 DU_FREE(cellsToModify->list.array,modifyCnt*\
1675 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1676 for(idy=0;idy<elementCnt;idy++)
1678 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1679 sizeof(GNBDUConfigurationUpdateIEs_t));
1681 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1682 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1683 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1684 (Size)sizeof(InitiatingMessage_t));
1685 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1688 for(idy=0;idy<servPlmnCnt;idy++)
1690 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1691 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1692 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy] == NULLP)
1694 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1695 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1696 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1698 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1700 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1701 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1702 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1703 DU_FREE(cellsToModify->list.array[idy],\
1704 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1705 DU_FREE(cellsToModify->list.array,modifyCnt*\
1706 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1707 for(idy=0;idy<elementCnt;idy++)
1709 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1710 sizeof(GNBDUConfigurationUpdateIEs_t));
1712 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1713 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1714 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1715 (Size)sizeof(InitiatingMessage_t));
1716 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1720 modifyItem->served_Cell_Information.servedPLMNs.list.\
1721 array[0]->pLMN_Identity.size = 3;
1722 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
1723 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1724 if(modifyItem->served_Cell_Information.servedPLMNs.list.\
1725 array[0]->pLMN_Identity.buf == NULLP)
1727 for(idy=0;idy<servPlmnCnt;idy++)
1729 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1730 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1732 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1733 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1734 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1736 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1738 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1739 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1740 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1741 DU_FREE(cellsToModify->list.array[idy],\
1742 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1743 DU_FREE(cellsToModify->list.array,modifyCnt*\
1744 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1745 for(idy=0;idy<elementCnt;idy++)
1747 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1748 sizeof(GNBDUConfigurationUpdateIEs_t));
1750 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1751 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1752 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1753 (Size)sizeof(InitiatingMessage_t));
1754 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1757 buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.plmn[0],\
1758 &modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->pLMN_Identity);
1759 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
1760 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1761 if(modifyItem->served_Cell_Information.servedPLMNs.list.\
1762 array[0]->iE_Extensions == NULLP)
1764 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1765 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1766 for(idy=0;idy<servPlmnCnt;idy++)
1768 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1769 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1771 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1772 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1773 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1775 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1777 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1778 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1779 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1780 DU_FREE(cellsToModify->list.array[idy],\
1781 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1782 DU_FREE(cellsToModify->list.array,modifyCnt*\
1783 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1784 for(idy=0;idy<elementCnt;idy++)
1786 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1787 sizeof(GNBDUConfigurationUpdateIEs_t));
1789 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1790 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1791 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1792 (Size)sizeof(InitiatingMessage_t));
1793 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1797 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1798 iE_Extensions->list.count = extensionCnt;
1799 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1800 iE_Extensions->list.size = extensionCnt * \
1801 sizeof(struct ServedPLMNs_ItemExtIEs *);
1802 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
1803 array[0]->iE_Extensions->list.array,extensionCnt*\
1804 sizeof(struct ServedPLMNs_ItemExtIEs *));
1805 if(modifyItem->served_Cell_Information.servedPLMNs.list.\
1806 array[0]->iE_Extensions->list.array == NULLP)
1808 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1809 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1810 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1811 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1812 for(idy=0;idy<servPlmnCnt;idy++)
1814 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1815 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1817 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1818 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1819 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1821 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1823 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1824 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1825 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1826 DU_FREE(cellsToModify->list.array[idy],\
1827 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1828 DU_FREE(cellsToModify->list.array,modifyCnt*\
1829 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1830 for(idy=0;idy<elementCnt;idy++)
1832 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1833 sizeof(GNBDUConfigurationUpdateIEs_t));
1835 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1836 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1837 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1838 (Size)sizeof(InitiatingMessage_t));
1839 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1842 for(idy=0;idy<extensionCnt;idy++)
1844 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.\
1845 array[0]->iE_Extensions->list.array[idy],\
1846 sizeof(struct ServedPLMNs_ItemExtIEs));
1847 if(modifyItem->served_Cell_Information.servedPLMNs.list.\
1848 array[0]->iE_Extensions->list.array[idy] == NULLP)
1850 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1851 array[0]->iE_Extensions->list.array,extensionCnt*\
1852 sizeof(struct ServedPLMNs_ItemExtIEs *));
1853 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1854 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1855 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1856 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1857 for(idy=0;idy<servPlmnCnt;idy++)
1859 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1860 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1862 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1863 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1864 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1866 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1868 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1869 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1870 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1871 DU_FREE(cellsToModify->list.array[idy],\
1872 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1873 DU_FREE(cellsToModify->list.array,modifyCnt*\
1874 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1875 for(idy=0;idy<elementCnt;idy++)
1877 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1878 sizeof(GNBDUConfigurationUpdateIEs_t));
1880 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1881 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1882 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1883 (Size)sizeof(InitiatingMessage_t));
1884 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1888 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1889 iE_Extensions->list.array[0]->id = ProtocolIE_ID_id_TAISliceSupportList;
1890 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1891 iE_Extensions->list.array[0]->criticality = Criticality_ignore;
1892 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1893 iE_Extensions->list.array[0]->extensionValue.present = \
1894 ServedPLMNs_ItemExtIEs__extensionValue_PR_SliceSupportList;
1895 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1896 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1898 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1899 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1900 list.size = sizeof(SliceSupportItem_t *);
1901 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1902 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1903 list.array,sizeof( SliceSupportItem_t *));
1904 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1905 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1906 list.array == NULLP)
1908 for(idy=0;idy<extensionCnt;idy++)
1910 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1911 array[0]->iE_Extensions->list.array[idy],\
1912 sizeof(struct ServedPLMNs_ItemExtIEs));
1914 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1915 array[0]->iE_Extensions->list.array,extensionCnt*\
1916 sizeof(struct ServedPLMNs_ItemExtIEs *));
1917 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1918 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1919 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1920 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1921 for(idy=0;idy<servPlmnCnt;idy++)
1923 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1924 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1926 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1927 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1928 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1930 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1932 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1933 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1934 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1935 DU_FREE(cellsToModify->list.array[idy],\
1936 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1937 DU_FREE(cellsToModify->list.array,modifyCnt*\
1938 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1939 for(idy=0;idy<elementCnt;idy++)
1941 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1942 sizeof(GNBDUConfigurationUpdateIEs_t));
1944 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1945 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1946 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
1947 (Size)sizeof(InitiatingMessage_t));
1948 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
1951 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1952 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1953 list.array[0],sizeof( SliceSupportItem_t));
1954 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1955 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1956 list.array[0] == NULLP)
1958 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
1959 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
1960 list.array,sizeof( SliceSupportItem_t *));
1961 for(idy=0;idy<extensionCnt;idy++)
1963 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1964 array[0]->iE_Extensions->list.array[idy],\
1965 sizeof(struct ServedPLMNs_ItemExtIEs));
1967 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1968 array[0]->iE_Extensions->list.array,extensionCnt*\
1969 sizeof(struct ServedPLMNs_ItemExtIEs *));
1970 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1971 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
1972 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
1973 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
1974 for(idy=0;idy<servPlmnCnt;idy++)
1976 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
1977 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
1979 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
1980 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
1981 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
1983 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
1985 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
1986 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
1987 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
1988 DU_FREE(cellsToModify->list.array[idy],\
1989 sizeof(struct Served_Cells_To_Modify_ItemIEs));
1990 DU_FREE(cellsToModify->list.array,modifyCnt*\
1991 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
1992 for(idy=0;idy<elementCnt;idy++)
1994 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
1995 sizeof(GNBDUConfigurationUpdateIEs_t));
1997 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
1998 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
1999 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2000 (Size)sizeof(InitiatingMessage_t));
2001 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2004 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2005 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2006 list.array[0]->sNSSAI.sST.size = sizeof(uint8_t);
2007 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2008 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2009 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2010 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2011 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2012 list.array[0]->sNSSAI.sST.buf == NULLP)
2014 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2015 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2016 list.array[0],sizeof( SliceSupportItem_t));
2017 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2018 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2019 list.array,sizeof( SliceSupportItem_t *));
2020 for(idy=0;idy<extensionCnt;idy++)
2022 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2023 array[0]->iE_Extensions->list.array[idy],\
2024 sizeof(struct ServedPLMNs_ItemExtIEs));
2026 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2027 array[0]->iE_Extensions->list.array,extensionCnt*\
2028 sizeof(struct ServedPLMNs_ItemExtIEs *));
2029 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2030 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
2031 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2032 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2033 for(idy=0;idy<servPlmnCnt;idy++)
2035 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2036 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2038 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2039 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2040 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2042 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2044 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2045 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2046 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2047 DU_FREE(cellsToModify->list.array[idy],\
2048 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2049 DU_FREE(cellsToModify->list.array,modifyCnt*\
2050 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2051 for(idy=0;idy<elementCnt;idy++)
2053 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2054 sizeof(GNBDUConfigurationUpdateIEs_t));
2056 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2057 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2058 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2059 (Size)sizeof(InitiatingMessage_t));
2060 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2063 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2064 iE_Extensions->list.array[0]->extensionValue. choice.SliceSupportList.\
2065 list.array[0]->sNSSAI.sST.buf[0] = 3;
2066 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2067 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2068 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2069 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2070 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2071 list.array[0]->sNSSAI.sD == NULLP)
2073 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2074 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2075 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2076 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2077 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2078 list.array[0],sizeof( SliceSupportItem_t));
2079 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2080 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2081 list.array,sizeof( SliceSupportItem_t *));
2082 for(idy=0;idy<extensionCnt;idy++)
2084 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2085 array[0]->iE_Extensions->list.array[idy],\
2086 sizeof(struct ServedPLMNs_ItemExtIEs));
2088 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2089 array[0]->iE_Extensions->list.array,extensionCnt*\
2090 sizeof(struct ServedPLMNs_ItemExtIEs *));
2091 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2092 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
2093 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2094 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2095 for(idy=0;idy<servPlmnCnt;idy++)
2097 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2098 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2100 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2101 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2102 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2104 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2106 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2107 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2108 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2109 DU_FREE(cellsToModify->list.array[idy],\
2110 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2111 DU_FREE(cellsToModify->list.array,modifyCnt*\
2112 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2113 for(idy=0;idy<elementCnt;idy++)
2115 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2116 sizeof(GNBDUConfigurationUpdateIEs_t));
2118 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2119 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2120 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2121 (Size)sizeof(InitiatingMessage_t));
2122 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2125 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2126 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2127 list.array[0]->sNSSAI.sD->size = 3*sizeof(uint8_t);
2128 DU_ALLOC(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2129 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2130 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2131 if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2132 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2133 list.array[0]->sNSSAI.sD->buf == NULLP)
2135 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2136 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2137 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2138 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2139 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2140 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2141 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2142 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2143 list.array[0],sizeof( SliceSupportItem_t));
2144 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2145 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2146 list.array,sizeof( SliceSupportItem_t *));
2147 for(idy=0;idy<extensionCnt;idy++)
2149 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2150 array[0]->iE_Extensions->list.array[idy],\
2151 sizeof(struct ServedPLMNs_ItemExtIEs));
2153 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2154 array[0]->iE_Extensions->list.array,extensionCnt*\
2155 sizeof(struct ServedPLMNs_ItemExtIEs *));
2156 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2157 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
2158 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2159 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2160 for(idy=0;idy<servPlmnCnt;idy++)
2162 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2163 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2165 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2166 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2167 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2169 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2171 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2172 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2173 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2174 DU_FREE(cellsToModify->list.array[idy],\
2175 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2176 DU_FREE(cellsToModify->list.array,modifyCnt*\
2177 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2178 for(idy=0;idy<elementCnt;idy++)
2180 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2181 sizeof(GNBDUConfigurationUpdateIEs_t));
2183 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2184 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2185 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2186 (Size)sizeof(InitiatingMessage_t));
2187 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2190 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2191 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2192 list.array[0]->sNSSAI.sD->buf[0] = 3;
2193 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2194 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2195 list.array[0]->sNSSAI.sD->buf[1] = 6;
2196 modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2197 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2198 list.array[0]->sNSSAI.sD->buf[2] = 9;
2200 /*nR Mode Info with FDD*/
2201 modifyItem->served_Cell_Information.nR_Mode_Info.present = \
2202 NR_Mode_Info_PR_fDD;
2203 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2204 sizeof(FDD_Info_t));
2205 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD == NULLP)
2207 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2208 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2209 list.array[0]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2210 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2211 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2212 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2213 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2214 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2215 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2216 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2217 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2218 list.array[0],sizeof( SliceSupportItem_t));
2219 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2220 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2221 list.array,sizeof( SliceSupportItem_t *));
2222 for(idy=0;idy<extensionCnt;idy++)
2224 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2225 array[0]->iE_Extensions->list.array[idy],\
2226 sizeof(struct ServedPLMNs_ItemExtIEs));
2228 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2229 array[0]->iE_Extensions->list.array,extensionCnt*\
2230 sizeof(struct ServedPLMNs_ItemExtIEs *));
2231 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2232 array[0]->iE_Extensions,sizeof(struct ProtocolExtensionContainer_4624P3));
2233 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2234 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2235 for(idy=0;idy<servPlmnCnt;idy++)
2237 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2238 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2240 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2241 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2242 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2244 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2246 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2247 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2248 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2249 DU_FREE(cellsToModify->list.array[idy],\
2250 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2251 DU_FREE(cellsToModify->list.array,modifyCnt*\
2252 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2253 for(idy=0;idy<elementCnt;idy++)
2255 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2256 sizeof(GNBDUConfigurationUpdateIEs_t));
2258 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2259 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2260 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2261 (Size)sizeof(InitiatingMessage_t));
2262 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2265 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2266 uL_NRFreqInfo.nRARFCN = duCfgParam.srvdCellLst[0].duCellInfo.\
2267 f1Mode.mode.fdd.ulNrFreqInfo.nrArfcn;
2268 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2269 uL_NRFreqInfo.freqBandListNr.list.count = 1;
2270 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2271 uL_NRFreqInfo.freqBandListNr.list.size = \
2272 sizeof(struct FreqBandNrItem *);
2273 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2274 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2275 array,sizeof(struct FreqBandNrItem *));
2276 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2277 fDD->uL_NRFreqInfo.freqBandListNr.list.array == NULLP)
2279 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2280 sizeof(FDD_Info_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]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2284 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2285 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2286 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2287 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2288 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2289 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2290 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2291 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2292 list.array[0],sizeof( SliceSupportItem_t));
2293 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2294 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2295 list.array,sizeof( SliceSupportItem_t *));
2296 for(idy=0;idy<extensionCnt;idy++)
2298 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2299 array[0]->iE_Extensions->list.array[idy],\
2300 sizeof(struct ServedPLMNs_ItemExtIEs));
2302 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2303 array[0]->iE_Extensions->list.array,extensionCnt*\
2304 sizeof(struct ServedPLMNs_ItemExtIEs *));
2305 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2306 array[0]->iE_Extensions,\
2307 sizeof(struct ProtocolExtensionContainer_4624P3));
2308 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2309 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2310 for(idy=0;idy<servPlmnCnt;idy++)
2312 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2313 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2315 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2316 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2317 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2319 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2321 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2322 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2323 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2324 DU_FREE(cellsToModify->list.array[idy],\
2325 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2326 DU_FREE(cellsToModify->list.array,modifyCnt*\
2327 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2328 for(idy=0;idy<elementCnt;idy++)
2330 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2331 sizeof(GNBDUConfigurationUpdateIEs_t));
2333 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2334 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2335 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2336 (Size)sizeof(InitiatingMessage_t));
2337 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2340 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2341 uL_NRFreqInfo.freqBandListNr.list.\
2342 array[0],sizeof(struct FreqBandNrItem));
2343 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2344 uL_NRFreqInfo.freqBandListNr.list.\
2347 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2348 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2349 array,sizeof(struct FreqBandNrItem *));
2350 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2351 sizeof(FDD_Info_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]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2355 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2356 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2357 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2358 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2359 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2360 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2361 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2362 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2363 list.array[0],sizeof( SliceSupportItem_t));
2364 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2365 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2366 list.array,sizeof( SliceSupportItem_t *));
2367 for(idy=0;idy<extensionCnt;idy++)
2369 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2370 array[0]->iE_Extensions->list.array[idy],\
2371 sizeof(struct ServedPLMNs_ItemExtIEs));
2373 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2374 array[0]->iE_Extensions->list.array,extensionCnt*\
2375 sizeof(struct ServedPLMNs_ItemExtIEs *));
2376 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2377 array[0]->iE_Extensions,\
2378 sizeof(struct ProtocolExtensionContainer_4624P3));
2379 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2380 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2381 for(idy=0;idy<servPlmnCnt;idy++)
2383 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2384 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2386 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2387 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2388 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2390 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2392 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2393 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2394 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2395 DU_FREE(cellsToModify->list.array[idy],\
2396 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2397 DU_FREE(cellsToModify->list.array,modifyCnt*\
2398 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2399 for(idy=0;idy<elementCnt;idy++)
2401 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2402 sizeof(GNBDUConfigurationUpdateIEs_t));
2404 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2405 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2406 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2407 (Size)sizeof(InitiatingMessage_t));
2408 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2411 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->uL_NRFreqInfo.\
2412 freqBandListNr.list.array[0]->freqBandIndicatorNr = \
2413 duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.\
2414 freqBand[0].nrFreqBand;
2415 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->uL_NRFreqInfo.\
2416 freqBandListNr.list.array[0]->supportedSULBandList.list.count=0;
2417 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2418 nRARFCN = duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.\
2419 dlNrFreqInfo.nrArfcn;
2420 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2421 freqBandListNr.list.count = 1;
2422 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2423 freqBandListNr.list.size = sizeof(struct FreqBandNrItem *);
2424 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2425 dL_NRFreqInfo.freqBandListNr.list.array,\
2426 sizeof(struct FreqBandNrItem *));
2427 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2428 dL_NRFreqInfo.freqBandListNr.list.array == NULLP)
2430 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2431 uL_NRFreqInfo.freqBandListNr.list.\
2432 array[0],sizeof(struct FreqBandNrItem));
2433 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2434 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2435 array,sizeof(struct FreqBandNrItem *));
2436 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2437 sizeof(FDD_Info_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]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2441 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2442 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2443 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2444 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2445 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2446 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2447 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2448 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2449 list.array[0],sizeof( SliceSupportItem_t));
2450 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2451 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2452 list.array,sizeof( SliceSupportItem_t *));
2453 for(idy=0;idy<extensionCnt;idy++)
2455 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2456 array[0]->iE_Extensions->list.array[idy],\
2457 sizeof(struct ServedPLMNs_ItemExtIEs));
2459 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2460 array[0]->iE_Extensions->list.array,extensionCnt*\
2461 sizeof(struct ServedPLMNs_ItemExtIEs *));
2462 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2463 array[0]->iE_Extensions,\
2464 sizeof(struct ProtocolExtensionContainer_4624P3));
2465 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2466 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2467 for(idy=0;idy<servPlmnCnt;idy++)
2469 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2470 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2472 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2473 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2474 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2476 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2478 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2479 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2480 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2481 DU_FREE(cellsToModify->list.array[idy],\
2482 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2483 DU_FREE(cellsToModify->list.array,modifyCnt*\
2484 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2485 for(idy=0;idy<elementCnt;idy++)
2487 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2488 sizeof(GNBDUConfigurationUpdateIEs_t));
2490 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2491 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2492 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2493 (Size)sizeof(InitiatingMessage_t));
2494 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2497 DU_ALLOC(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2498 dL_NRFreqInfo.freqBandListNr.list.array[0],\
2499 sizeof(struct FreqBandNrItem));
2500 if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2501 dL_NRFreqInfo.freqBandListNr.list.array[0] == NULLP)
2503 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2504 dL_NRFreqInfo.freqBandListNr.list.array,\
2505 sizeof(struct FreqBandNrItem *));
2506 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2507 uL_NRFreqInfo.freqBandListNr.list.\
2508 array[0],sizeof(struct FreqBandNrItem));
2509 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2510 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2511 array,sizeof(struct FreqBandNrItem *));
2512 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2513 sizeof(FDD_Info_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]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2517 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2518 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2519 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2520 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2521 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2522 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2523 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2524 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2525 list.array[0],sizeof( SliceSupportItem_t));
2526 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2527 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2528 list.array,sizeof( SliceSupportItem_t *));
2529 for(idy=0;idy<extensionCnt;idy++)
2531 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2532 array[0]->iE_Extensions->list.array[idy],\
2533 sizeof(struct ServedPLMNs_ItemExtIEs));
2535 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2536 array[0]->iE_Extensions->list.array,extensionCnt*\
2537 sizeof(struct ServedPLMNs_ItemExtIEs *));
2538 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2539 array[0]->iE_Extensions,\
2540 sizeof(struct ProtocolExtensionContainer_4624P3));
2541 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2542 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2543 for(idy=0;idy<servPlmnCnt;idy++)
2545 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2546 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2548 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2549 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2550 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2552 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2554 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2555 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2556 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2557 DU_FREE(cellsToModify->list.array[idy],\
2558 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2559 DU_FREE(cellsToModify->list.array,modifyCnt*\
2560 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2561 for(idy=0;idy<elementCnt;idy++)
2563 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2564 sizeof(GNBDUConfigurationUpdateIEs_t));
2566 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2567 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2568 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2569 (Size)sizeof(InitiatingMessage_t));
2570 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2573 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2574 freqBandListNr.list.array[0]->freqBandIndicatorNr = \
2575 duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.\
2576 freqBand[0].nrFreqBand;
2577 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
2578 freqBandListNr.list.array[0]->supportedSULBandList.list.count=0;
2580 /*Transmission Bandwidth*/
2581 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2582 uL_Transmission_Bandwidth.nRSCS = duCfgParam.srvdCellLst[0].duCellInfo.\
2583 f1Mode.mode.fdd.ulTxBw.nrScs;
2584 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2585 uL_Transmission_Bandwidth.nRNRB = duCfgParam.srvdCellLst[0].duCellInfo.\
2586 f1Mode.mode.fdd.ulTxBw.nrb;
2588 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2589 dL_Transmission_Bandwidth.nRSCS = duCfgParam.srvdCellLst[0].duCellInfo.\
2590 f1Mode.mode.fdd.dlTxBw.nrScs;
2591 modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2592 dL_Transmission_Bandwidth.nRNRB = duCfgParam.srvdCellLst[0].duCellInfo.\
2593 f1Mode.mode.fdd.dlTxBw.nrb;
2595 /*Measurement timing Config*/
2596 modifyItem->served_Cell_Information.measurementTimingConfiguration.size = \
2598 DU_ALLOC(modifyItem->served_Cell_Information.measurementTimingConfiguration.\
2599 buf,sizeof(uint8_t));
2600 if(modifyItem->served_Cell_Information.measurementTimingConfiguration.buf == NULLP)
2602 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2603 dL_NRFreqInfo.freqBandListNr.list.array[0],\
2604 sizeof(struct FreqBandNrItem));
2605 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2606 dL_NRFreqInfo.freqBandListNr.list.array,\
2607 sizeof(struct FreqBandNrItem *));
2608 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2609 uL_NRFreqInfo.freqBandListNr.list.\
2610 array[0],sizeof(struct FreqBandNrItem));
2611 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2612 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2613 array,sizeof(struct FreqBandNrItem *));
2614 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2615 sizeof(FDD_Info_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]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2619 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2620 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2621 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2622 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2623 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2624 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2625 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2626 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2627 list.array[0],sizeof( SliceSupportItem_t));
2628 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2629 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2630 list.array,sizeof( SliceSupportItem_t *));
2631 for(idy=0;idy<extensionCnt;idy++)
2633 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2634 array[0]->iE_Extensions->list.array[idy],\
2635 sizeof(struct ServedPLMNs_ItemExtIEs));
2637 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2638 array[0]->iE_Extensions->list.array,extensionCnt*\
2639 sizeof(struct ServedPLMNs_ItemExtIEs *));
2640 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2641 array[0]->iE_Extensions,\
2642 sizeof(struct ProtocolExtensionContainer_4624P3));
2643 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2644 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2645 for(idy=0;idy<servPlmnCnt;idy++)
2647 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2648 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2650 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2651 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2652 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2654 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2656 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2657 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2658 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2659 DU_FREE(cellsToModify->list.array[idy],\
2660 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2661 DU_FREE(cellsToModify->list.array,modifyCnt*\
2662 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2663 for(idy=0;idy<elementCnt;idy++)
2665 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2666 sizeof(GNBDUConfigurationUpdateIEs_t));
2668 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2669 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2670 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2671 (Size)sizeof(InitiatingMessage_t));
2672 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2675 modifyItem->served_Cell_Information.measurementTimingConfiguration.\
2676 buf[0] = duCfgParam.srvdCellLst[0].duCellInfo.measTimeCfg;
2679 // NOTE :GNB DU SYS INFO:MIB AND SIB1 INFORMATION TO BE BUILT AND FILLED HERE
2681 duCfgUpdate->protocolIEs.list.array[2]->id = ProtocolIE_ID_id_gNB_DU_ID;
2682 duCfgUpdate->protocolIEs.list.array[2]->criticality = Criticality_reject;
2683 duCfgUpdate->protocolIEs.list.array[2]->value.present = \
2684 GNBDUConfigurationUpdateIEs__value_PR_GNB_DU_ID;
2685 duCfgUpdate->protocolIEs.list.array[2]->value.choice.GNB_DU_ID.size = \
2687 DU_ALLOC(duCfgUpdate->protocolIEs.list.array[2]->value.choice.GNB_DU_ID.buf,\
2689 if(duCfgUpdate->protocolIEs.list.array[2]->value.choice.GNB_DU_ID.buf == NULLP)
2691 DU_FREE(modifyItem->served_Cell_Information.measurementTimingConfiguration.\
2692 buf,sizeof(uint8_t));
2693 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2694 dL_NRFreqInfo.freqBandListNr.list.array[0],\
2695 sizeof(struct FreqBandNrItem));
2696 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2697 dL_NRFreqInfo.freqBandListNr.list.array,\
2698 sizeof(struct FreqBandNrItem *));
2699 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD->\
2700 uL_NRFreqInfo.freqBandListNr.list.\
2701 array[0],sizeof(struct FreqBandNrItem));
2702 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
2703 fDD->uL_NRFreqInfo.freqBandListNr.list.\
2704 array,sizeof(struct FreqBandNrItem *));
2705 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD,\
2706 sizeof(FDD_Info_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]->sNSSAI.sD->buf,3*sizeof(uint8_t));
2710 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2711 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2712 list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
2713 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2714 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2715 list.array[0]->sNSSAI.sST.buf,sizeof(uint8_t));
2716 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2717 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2718 list.array[0],sizeof( SliceSupportItem_t));
2719 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
2720 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
2721 list.array,sizeof( SliceSupportItem_t *));
2722 for(idy=0;idy<extensionCnt;idy++)
2724 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2725 array[0]->iE_Extensions->list.array[idy],\
2726 sizeof(struct ServedPLMNs_ItemExtIEs));
2728 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2729 array[0]->iE_Extensions->list.array,extensionCnt*\
2730 sizeof(struct ServedPLMNs_ItemExtIEs *));
2731 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2732 array[0]->iE_Extensions,\
2733 sizeof(struct ProtocolExtensionContainer_4624P3));
2734 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
2735 array[0]->pLMN_Identity.buf,3*sizeof(uint8_t));
2736 for(idy=0;idy<servPlmnCnt;idy++)
2738 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idy],\
2739 servPlmnCnt*sizeof(struct ServedPLMNs_Item));
2741 DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
2742 servPlmnCnt*sizeof(struct ServedPLMNs_Item *));
2743 DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
2745 DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
2747 DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
2748 modifyItem->oldNRCGI.nRCellIdentity.size*sizeof(uint8_t));
2749 DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,3*sizeof(uint8_t));
2750 DU_FREE(cellsToModify->list.array[idy],\
2751 sizeof(struct Served_Cells_To_Modify_ItemIEs));
2752 DU_FREE(cellsToModify->list.array,modifyCnt*\
2753 sizeof(struct Served_Cells_To_Modify_ItemIEs *));
2754 for(idy=0;idy<elementCnt;idy++)
2756 DU_FREE(duCfgUpdate->protocolIEs.list.array[idy], \
2757 sizeof(GNBDUConfigurationUpdateIEs_t));
2759 DU_FREE(duCfgUpdate->protocolIEs.list.array,\
2760 elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2761 DU_FREE(f1apDuCfg->choice.initiatingMessage,\
2762 (Size)sizeof(InitiatingMessage_t));
2763 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2766 duCfgUpdate->protocolIEs.list.array[2]->value.choice.GNB_DU_ID.buf[0] = \
2772 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apDuCfg);
2774 /* Encode the DU Config Update type as APER */
2775 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
2777 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apDuCfg, PrepFinalEncBuf, encBuf);
2780 for(idx=0;idx<elementCnt;idx++)
2782 DU_FREE(duCfgUpdate->protocolIEs.list.array[idx], sizeof(GNBDUConfigurationUpdateIEs_t));
2784 DU_FREE(duCfgUpdate->protocolIEs.list.array, elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t *));
2785 DU_FREE(f1apDuCfg->choice.initiatingMessage, (Size)sizeof(InitiatingMessage_t));
2786 DU_FREE(f1apDuCfg, sizeof(F1AP_PDU_t));
2788 /* Checking encode results */
2789 if(encRetVal.encoded == ENCODE_FAIL)
2791 DU_LOG("F1AP : Could not encode DUConfigUpdate structure (at %s)\n",encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
2796 DU_LOG("\nF1AP : Created APER encoded buffer for DUConfigUpdate\n");
2797 for(int i=0; i< encBufSize; i++)
2799 printf("%x",encBuf[i]);
2804 if(SendF1APMsg(DU_APP_MEM_REGION, DU_POOL) != ROK)
2806 DU_LOG("\nF1AP : Sending GND-DU Config Update failed");
2811 }/* End of BuildAndSendDUConfigUpdate */
2813 /*******************************************************************
2815 * @brief Builds and sends the ULRRCMessageTransfer
2819 * Function : BuildAndSendULRRCMessageTransfer
2821 * Functionality: Constructs the UL RRC Message Transfer and sends
2822 * it to the CU through SCTP.
2826 * @return ROK - success
2829 * ****************************************************************/
2830 S16 BuildAndSendULRRCMessageTransfer()
2836 F1AP_PDU_t *f1apMsg = NULL;
2837 ULRRCMessageTransfer_t *ulRRCMsg;
2838 asn_enc_rval_t encRetVal; /* Encoder return value */
2840 DU_LOG("\n F1AP : Building UL RRC Message Transfer Message\n");
2842 DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t));
2843 if(f1apMsg == NULLP)
2845 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
2849 f1apMsg->present = F1AP_PDU_PR_initiatingMessage;
2850 DU_ALLOC(f1apMsg->choice.initiatingMessage,
2851 sizeof(InitiatingMessage_t));
2852 if(f1apMsg->choice.initiatingMessage == NULLP)
2854 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
2855 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
2859 f1apMsg->choice.initiatingMessage->procedureCode = \
2860 ProcedureCode_id_ULRRCMessageTransfer;
2861 f1apMsg->choice.initiatingMessage->criticality = Criticality_ignore;
2862 f1apMsg->choice.initiatingMessage->value.present = \
2863 InitiatingMessage__value_PR_ULRRCMessageTransfer;
2865 &f1apMsg->choice.initiatingMessage->value.choice.ULRRCMessageTransfer;
2867 ulRRCMsg->protocolIEs.list.count = elementCnt;
2868 ulRRCMsg->protocolIEs.list.size = \
2869 elementCnt * sizeof(ULRRCMessageTransferIEs_t *);
2871 /* Initialize the F1Setup members */
2872 DU_ALLOC(ulRRCMsg->protocolIEs.list.array, \
2873 elementCnt * sizeof(ULRRCMessageTransferIEs_t *));
2874 if(ulRRCMsg->protocolIEs.list.array == NULLP)
2876 DU_LOG(" F1AP : Memory allocation for UL RRC MessageTransferIEs failed");
2877 DU_FREE(f1apMsg->choice.initiatingMessage,
2878 sizeof(InitiatingMessage_t));
2879 DU_FREE(f1apMsg,(Size)sizeof(F1AP_PDU_t));
2883 for(idx=0; idx<elementCnt; idx++)
2885 DU_ALLOC(ulRRCMsg->protocolIEs.list.array[idx],\
2886 sizeof(ULRRCMessageTransferIEs_t));
2887 if(ulRRCMsg->protocolIEs.list.array[idx] == NULLP)
2889 for(ieId=0; ieId<idx; ieId++)
2891 DU_FREE(ulRRCMsg->protocolIEs.list.array[ieId],\
2892 sizeof(ULRRCMessageTransferIEs_t));
2894 DU_FREE(ulRRCMsg->protocolIEs.list.array,\
2895 elementCnt * sizeof(ULRRCMessageTransferIEs_t *));
2896 DU_FREE(f1apMsg->choice.initiatingMessage,\
2897 sizeof(InitiatingMessage_t));
2898 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
2905 /*GNB CU UE F1AP ID*/
2906 ulRRCMsg->protocolIEs.list.array[idx]->id = \
2907 ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID;
2908 ulRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
2909 ulRRCMsg->protocolIEs.list.array[idx]->value.present = \
2910 ULRRCMessageTransferIEs__value_PR_GNB_CU_UE_F1AP_ID;
2911 ulRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_CU_UE_F1AP_ID = CU_ID;
2913 /*GNB DU UE F1AP ID*/
2915 ulRRCMsg->protocolIEs.list.array[idx]->id = \
2916 ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
2917 ulRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
2918 ulRRCMsg->protocolIEs.list.array[idx]->value.present = \
2919 ULRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID;
2920 ulRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID = DU_ID;
2924 ulRRCMsg->protocolIEs.list.array[idx]->id = \
2925 ProtocolIE_ID_id_SRBID;
2926 ulRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
2927 ulRRCMsg->protocolIEs.list.array[idx]->value.present = \
2928 ULRRCMessageTransferIEs__value_PR_SRBID;
2929 ulRRCMsg->protocolIEs.list.array[idx]->value.choice.SRBID = UL_SRBID;
2934 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
2936 /* Encode the F1SetupRequest type as APER */
2937 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
2939 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\
2941 /* Encode results */
2942 if(encRetVal.encoded == ENCODE_FAIL)
2944 DU_LOG( "\n F1AP : Could not encode ULRRCMessageTransfer structure (at %s)\n",\
2945 encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
2950 DU_LOG("\n F1AP : Created APER encoded buffer for ULRRCMessageTransfer\n");
2951 for(int i=0; i< encBufSize; i++)
2953 printf("%x",encBuf[i]);
2958 if(SendF1APMsg(DU_APP_MEM_REGION,DU_POOL) != ROK)
2960 DU_LOG("\n F1AP : Sending UL RRC Message Transfer Failed");
2965 }/* End of BuildAndSendULRRCMessageTransfer*/
2967 /*******************************************************************
2969 * @brief Builds and sends the InitialULRRCMessage
2973 * Function : BuildAndSendRRCSetupReq
2975 * Functionality: Constructs the Initial UL RRC Message Transfer and sends
2976 * it to the CU through SCTP.
2980 * @return ROK - success
2983 * ****************************************************************/
2984 S16 BuildAndSendRRCSetupReq()
2990 F1AP_PDU_t *f1apMsg = NULL;
2991 InitialULRRCMessageTransfer_t *initULRRCMsg;
2992 asn_enc_rval_t encRetVal; /* Encoder return value */
2994 DU_LOG("\n F1AP : Building RRC Setup Request\n");
2996 DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t));
2997 if(f1apMsg == NULLP)
2999 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
3003 f1apMsg->present = F1AP_PDU_PR_initiatingMessage;
3004 DU_ALLOC(f1apMsg->choice.initiatingMessage,sizeof(InitiatingMessage_t));
3005 if(f1apMsg->choice.initiatingMessage == NULLP)
3007 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
3008 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3012 f1apMsg->choice.initiatingMessage->procedureCode = \
3013 ProcedureCode_id_InitialULRRCMessageTransfer;
3014 f1apMsg->choice.initiatingMessage->criticality = Criticality_ignore;
3015 f1apMsg->choice.initiatingMessage->value.present = \
3016 InitiatingMessage__value_PR_InitialULRRCMessageTransfer;
3018 &f1apMsg->choice.initiatingMessage->value.choice.InitialULRRCMessageTransfer;
3020 initULRRCMsg->protocolIEs.list.count = elementCnt;
3021 initULRRCMsg->protocolIEs.list.size = \
3022 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *);
3024 /* Initialize the F1Setup members */
3025 DU_ALLOC(initULRRCMsg->protocolIEs.list.array, \
3026 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *));
3027 if(initULRRCMsg->protocolIEs.list.array == NULLP)
3029 DU_LOG(" F1AP : Memory allocation for RRCSetupRequestMessageTransferIEs failed");
3030 DU_FREE(f1apMsg->choice.initiatingMessage,
3031 sizeof(InitiatingMessage_t));
3032 DU_FREE(f1apMsg,(Size)sizeof(F1AP_PDU_t));
3036 for(idx=0; idx<elementCnt; idx++)
3038 DU_ALLOC(initULRRCMsg->protocolIEs.list.array[idx],\
3039 sizeof(InitialULRRCMessageTransferIEs_t));
3040 if(initULRRCMsg->protocolIEs.list.array[idx] == NULLP)
3042 for(ieId=0; ieId<idx; ieId++)
3044 DU_FREE(initULRRCMsg->protocolIEs.list.array[ieId],\
3045 sizeof(InitialULRRCMessageTransferIEs_t));
3047 DU_FREE(initULRRCMsg->protocolIEs.list.array,\
3048 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *));
3049 DU_FREE(f1apMsg->choice.initiatingMessage,\
3050 sizeof(InitiatingMessage_t));
3051 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3058 /*GNB DU UE F1AP ID*/
3059 initULRRCMsg->protocolIEs.list.array[idx]->id = \
3060 ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
3061 initULRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3062 initULRRCMsg->protocolIEs.list.array[idx]->value.present = \
3063 InitialULRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID;
3064 initULRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID = DU_ID;
3068 initULRRCMsg->protocolIEs.list.array[idx]->id = \
3069 ProtocolIE_ID_id_NRCGI;
3070 initULRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3071 initULRRCMsg->protocolIEs.list.array[idx]->value.present = \
3072 InitialULRRCMessageTransferIEs__value_PR_NRCGI;
3074 BuildNrcgi(&initULRRCMsg->protocolIEs.list.array[idx]->value.choice.NRCGI);
3077 DU_FREE(initULRRCMsg->protocolIEs.list.array[idx]->value.choice.NRCGI.\
3078 nRCellIdentity.buf,initULRRCMsg->protocolIEs.list.array[idx]->\
3079 value.choice.NRCGI.nRCellIdentity.size);
3080 DU_FREE(initULRRCMsg->protocolIEs.list.array[idx]->value.choice.NRCGI.\
3081 pLMN_Identity.buf,initULRRCMsg->protocolIEs.list.array[idx]->\
3082 value.choice.NRCGI.pLMN_Identity.size);
3083 for(idx=0; idx<elementCnt; idx++)
3085 DU_FREE(initULRRCMsg->protocolIEs.list.array[idx],\
3086 sizeof(InitialULRRCMessageTransferIEs_t));
3088 DU_FREE(initULRRCMsg->protocolIEs.list.array,\
3089 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *));
3090 DU_FREE(f1apMsg->choice.initiatingMessage,\
3091 sizeof(InitiatingMessage_t));
3092 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3099 initULRRCMsg->protocolIEs.list.array[idx]->id = \
3100 ProtocolIE_ID_id_C_RNTI;
3101 initULRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3102 initULRRCMsg->protocolIEs.list.array[idx]->value.present = \
3103 InitialULRRCMessageTransferIEs__value_PR_C_RNTI;
3104 initULRRCMsg->protocolIEs.list.array[idx]->value.choice.C_RNTI = CRNTI;
3107 // Need to fill this.
3109 /*DUtoCURRCContainer*/
3110 //Need to fill this too.
3113 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
3115 /* Encode the F1SetupRequest type as APER */
3116 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
3118 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\
3120 /* Encode results */
3121 if(encRetVal.encoded == ENCODE_FAIL)
3123 DU_LOG( "\n F1AP : Could not encode Initial UL RRC Message Transfer structure (at %s)\n",\
3124 encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
3129 DU_LOG("\n F1AP : Created APER encoded buffer for Initial UL RRC Message transfer\n");
3130 for(int i=0; i< encBufSize; i++)
3132 printf("%x",encBuf[i]);
3137 if(SendF1APMsg(DU_APP_MEM_REGION,DU_POOL) != ROK)
3139 DU_LOG("\n F1AP : Sending Initial UL RRC Message Transfer Failed");
3144 }/* End of BuildAndSendRRCSetupReq*/
3146 /*******************************************************************
3148 * @brief Builds Special cell list for UE Setup Request
3152 * Function : BuildSplCellList
3154 * Functionality: Constructs the Special Cell list for UESetReq
3156 * @params[in] SCell_ToBeSetup_List_t *spCellLst
3158 * @return ROK - success
3161 * ****************************************************************/
3162 S16 BuildSplCellList(SCell_ToBeSetup_List_t *spCellLst)
3169 spCellLst->list.count = cellCnt;
3170 spCellLst->list.size = cellCnt * sizeof(struct SCell_ToBeSetup_ItemIEs *);
3171 DU_ALLOC(spCellLst->list.array,spCellLst->list.size);
3172 if(spCellLst->list.array == NULLP)
3176 for(idx=0; idx<cellCnt; idx++)
3178 DU_ALLOC(spCellLst->list.array[idx],sizeof(struct SCell_ToBeSetup_ItemIEs));
3179 if(spCellLst->list.array[idx] == NULLP)
3181 for(cellidx=0; cellidx<idx; cellidx++)
3183 DU_FREE(spCellLst->list.array[cellidx],sizeof(struct SCell_ToBeSetup_ItemIEs));
3185 DU_FREE(spCellLst->list.array,spCellLst->list.size);
3190 spCellLst->list.array[idx]->id = ProtocolIE_ID_id_SCell_ToBeSetup_Item;
3191 spCellLst->list.array[idx]->criticality = Criticality_ignore;
3192 spCellLst->list.array[idx]->value.present = \
3193 SCell_ToBeSetup_ItemIEs__value_PR_SCell_ToBeSetup_Item;
3194 /* Special Cell ID -NRCGI */
3195 ret = BuildNrcgi(&spCellLst->list.array[idx]->value.choice.SCell_ToBeSetup_Item.sCell_ID);
3198 for(cellidx=0; cellidx<cellCnt; cellidx++)
3200 DU_FREE(spCellLst->list.array[cellidx],sizeof(struct
3201 SCell_ToBeSetup_ItemIEs));
3203 DU_FREE(spCellLst->list.array,spCellLst->list.size);
3206 /*Special Cell Index*/
3207 spCellLst->list.array[idx]->value.choice.SCell_ToBeSetup_Item.sCellIndex = 1;
3210 }/* End of BuildSplCellList*/
3212 /*******************************************************************
3214 * @brief Builds SRBS to be setup
3218 * Function : BuildSRBSetup
3220 * Functionality: Constructs the SRB's for UESetReq
3222 * @params[in] SRBs_ToBeSetup_List_t *srbSet
3224 * @return ROK - success
3227 * ****************************************************************/
3228 S16 BuildSRBSetup(SRBs_ToBeSetup_List_t *srbSet)
3234 srbSet->list.count = srbCnt;
3235 srbSet->list.size = srbCnt*sizeof(struct SRBs_ToBeSetup_ItemIEs *);
3236 DU_ALLOC(srbSet->list.array,srbSet->list.size);
3237 if(srbSet->list.array == NULLP)
3241 for(idx=0; idx<srbCnt; idx++)
3243 DU_ALLOC(srbSet->list.array[idx],sizeof(struct SRBs_ToBeSetup_ItemIEs));
3244 if(srbSet->list.array[idx] == NULLP)
3246 for(srbidx=0; srbidx<idx; srbidx++)
3248 DU_FREE(srbSet->list.array[srbidx],sizeof(struct SRBs_ToBeSetup_ItemIEs));
3250 DU_FREE(srbSet->list.array,srbSet->list.size);
3254 srbSet->list.array[idx]->id = ProtocolIE_ID_id_SRBs_ToBeSetup_Item;
3255 srbSet->list.array[idx]->criticality = Criticality_ignore;
3256 srbSet->list.array[idx]->value.present = \
3257 SRBs_ToBeSetup_ItemIEs__value_PR_SRBs_ToBeSetup_Item;
3258 srbSet->list.array[idx]->value.choice.SRBs_ToBeSetup_Item.sRBID = 2;
3260 }/* End of BuildSRBSetup*/
3262 /*******************************************************************
3264 * @brief Builds QOS Info for DRB Setum Item
3268 * Function : BuildQOSInfo
3270 * Functionality: Constructs the QOS Info for DRB Setup Item
3272 * @params[in] QoSInformation_t *qosinfo
3274 * @return ROK - success
3277 * ****************************************************************/
3278 S16 BuildQOSInfo(QoSFlowLevelQoSParameters_t *drbQos)
3280 /* NonDynamic5QIDescriptor */
3281 drbQos->qoS_Characteristics.present = QoS_Characteristics_PR_non_Dynamic_5QI;
3282 DU_ALLOC(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI,sizeof(NonDynamic5QIDescriptor_t));
3283 if(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI == NULLP)
3288 drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->fiveQI = 0;
3290 DU_ALLOC(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
3291 sizeof(AveragingWindow_t));
3292 if(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow == \
3295 DU_FREE(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI,\
3296 sizeof(NonDynamic5QIDescriptor_t));
3299 *(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow) = 0;
3300 /*MaxDataBurstVolume*/
3301 DU_ALLOC(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,\
3302 sizeof(MaxDataBurstVolume_t));
3303 if(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume == \
3306 DU_FREE(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
3307 sizeof(AveragingWindow_t));
3308 DU_FREE(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI,\
3309 sizeof(NonDynamic5QIDescriptor_t));
3312 *(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume) = 0;
3314 /*nRGRAN Allocation Retention Priority*/
3315 drbQos->nGRANallocationRetentionPriority.priorityLevel = \
3316 PriorityLevel_highest;
3317 drbQos->nGRANallocationRetentionPriority.pre_emptionCapability = \
3318 Pre_emptionCapability_may_trigger_pre_emption;
3319 drbQos->nGRANallocationRetentionPriority.pre_emptionVulnerability = \
3320 Pre_emptionVulnerability_not_pre_emptable;
3322 /* TO DO: GBR_QoSFlowInformation */
3324 }/*End of BuildQOSInfo*/
3326 /*******************************************************************
3328 * @brief Builds SNSSAI
3332 * Function : BuildSNSSAI
3334 * Functionality: Constructs the SNSSAI For DRB list
3336 * @params[in] SNSSAI_t *snssai
3338 * @return ROK - success
3341 * ****************************************************************/
3342 S16 BuildSNSSAI(SNSSAI_t *snssai)
3346 snssai->sST.size = sizeof(U8);
3347 DU_ALLOC(snssai->sST.buf,snssai->sST.size);
3348 if(snssai->sST.buf == NULLP)
3352 snssai->sST.buf[0] = 3;
3354 DU_ALLOC(snssai->sD,sizeof(OCTET_STRING_t));
3355 if(snssai->sD == NULLP)
3357 DU_FREE(snssai->sST.buf,snssai->sST.size);
3360 snssai->sD->size = 3*sizeof(U8);
3361 DU_ALLOC(snssai->sD->buf,snssai->sD->size);
3362 if(snssai->sD->buf == NULLP)
3364 DU_FREE(snssai->sD,sizeof(OCTET_STRING_t));
3365 DU_FREE(snssai->sST.buf,snssai->sST.size);
3368 snssai->sD->buf[0] = 3;
3369 snssai->sD->buf[1] = 6;
3370 snssai->sD->buf[2] = 9;
3373 }/*End of BuildSNSSAI*/
3375 /*******************************************************************
3377 * @brief Builds the flow map.
3381 * Function : BuildFlowsMap
3383 * Functionality: Constructs the flowmap For DRB list
3385 * @params[in] Flows_Mapped_To_DRB_List_t *flowMap
3387 * @return ROK - success
3390 * ****************************************************************/
3391 S16 BuildFlowsMap(Flows_Mapped_To_DRB_List_t *flowMap)
3398 flowMap->list.count = flowCnt;
3399 flowMap->list.size = flowCnt * sizeof(struct Flows_Mapped_To_DRB_Item *);
3400 DU_ALLOC(flowMap->list.array,flowMap->list.size);
3401 if(flowMap->list.array == NULLP)
3405 for(idx=0; idx<flowCnt; idx++)
3407 DU_ALLOC(flowMap->list.array[idx],sizeof(struct Flows_Mapped_To_DRB_Item));
3408 if(flowMap->list.array[idx] == NULLP)
3410 for(flowidx=0; flowidx<idx; flowidx++)
3412 DU_FREE(flowMap->list.array[flowidx],sizeof(struct \
3413 Flows_Mapped_To_DRB_Item));
3416 DU_FREE(flowMap->list.array,flowMap->list.size);
3420 flowMap->list.array[idx]->qoSFlowIdentifier = 0;
3421 ret = BuildQOSInfo(&flowMap->list.array[idx]->qoSFlowLevelQoSParameters);
3424 DU_FREE(flowMap->list.array[idx]->qoSFlowLevelQoSParameters.\
3425 qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,\
3426 sizeof(MaxDataBurstVolume_t));
3427 DU_FREE(flowMap->list.array[idx]->qoSFlowLevelQoSParameters.\
3428 qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
3429 sizeof(AveragingWindow_t));
3430 DU_FREE(flowMap->list.array[idx]->qoSFlowLevelQoSParameters.\
3431 qoS_Characteristics.choice.non_Dynamic_5QI,\
3432 sizeof(NonDynamic5QIDescriptor_t));
3433 for(idx=0; idx<flowCnt; idx++)
3435 DU_FREE(flowMap->list.array[idx],sizeof(struct Flows_Mapped_To_DRB_Item));
3437 DU_FREE(flowMap->list.array,flowMap->list.size);
3441 }/*End of BuildFlowsMap*/
3443 /*******************************************************************
3445 * @brief Builds the Uplink Tunnel Info
3449 * Function : BuildULTnlInfo
3451 * Functionality: Constructs the UL TnlInfo For DRB list
3453 * @params[in] ULUPTNLInformation_ToBeSetup_List_t *ulInfo
3455 * @return ROK - success
3458 * ****************************************************************/
3459 S16 BuildULTnlInfo(ULUPTNLInformation_ToBeSetup_List_t *ulInfo)
3466 ulInfo->list.count = ulCnt;
3467 ulInfo->list.size = ulCnt * sizeof(struct \
3468 ULUPTNLInformation_ToBeSetup_Item *);
3469 DU_ALLOC(ulInfo->list.array,ulInfo->list.size);
3470 if(ulInfo->list.array == NULLP)
3474 for(idx=0; idx<ulCnt; idx++)
3476 DU_ALLOC(ulInfo->list.array[idx],sizeof(struct \
3477 ULUPTNLInformation_ToBeSetup_Item));
3478 if(ulInfo->list.array[idx] == NULLP)
3480 for(ulidx=0; ulidx<idx; ulidx++)
3482 DU_FREE(ulInfo->list.array[ulidx],sizeof(struct \
3483 ULUPTNLInformation_ToBeSetup_Item));
3485 DU_FREE(ulInfo->list.array,ulInfo->list.size);
3490 ulInfo->list.array[idx]->uLUPTNLInformation.present = \
3491 UPTransportLayerInformation_PR_gTPTunnel;
3493 DU_ALLOC(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel,\
3494 sizeof(struct GTPTunnel));
3495 if(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel == NULLP)
3497 for(idx=0; idx<ulCnt; idx++)
3499 DU_FREE(ulInfo->list.array[idx],sizeof(struct \
3500 ULUPTNLInformation_ToBeSetup_Item));
3502 DU_FREE(ulInfo->list.array,ulInfo->list.size);
3505 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3506 transportLayerAddress.size = 4*sizeof(U8);
3507 DU_ALLOC(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3508 transportLayerAddress.buf,ulInfo->list.array[idx]->\
3509 uLUPTNLInformation.choice.gTPTunnel->transportLayerAddress.size);
3510 if(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3511 transportLayerAddress.buf == NULLP)
3513 DU_FREE(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel,\
3514 sizeof(struct GTPTunnel));
3515 for(idx=0; idx<ulCnt; idx++)
3517 DU_FREE(ulInfo->list.array[idx],sizeof(struct \
3518 ULUPTNLInformation_ToBeSetup_Item));
3520 DU_FREE(ulInfo->list.array,ulInfo->list.size);
3523 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3524 transportLayerAddress.buf[0] = 4;
3525 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3526 transportLayerAddress.buf[1] = 4;
3527 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3528 transportLayerAddress.buf[2] = 4;
3529 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3530 transportLayerAddress.buf[3] = 5;
3531 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3532 transportLayerAddress.bits_unused = 0;
3534 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.size\
3536 DU_ALLOC(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3537 gTP_TEID.buf,ulInfo->list.array[idx]->uLUPTNLInformation.choice.\
3538 gTPTunnel->gTP_TEID.size);
3539 if(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.buf\
3542 DU_FREE(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3543 transportLayerAddress.buf,ulInfo->list.array[idx]->\
3544 uLUPTNLInformation.choice.gTPTunnel->transportLayerAddress.size);
3545 DU_FREE(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel,\
3546 sizeof(struct GTPTunnel));
3547 for(idx=0; idx<ulCnt; idx++)
3549 DU_FREE(ulInfo->list.array[idx],sizeof(struct \
3550 ULUPTNLInformation_ToBeSetup_Item));
3552 DU_FREE(ulInfo->list.array,ulInfo->list.size);
3555 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3556 gTP_TEID.buf[0] = 11;
3557 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3558 gTP_TEID.buf[1] = 0;
3559 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3560 gTP_TEID.buf[2] = 0;
3561 ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
3562 gTP_TEID.buf[3] = 1;
3565 }/*End of BuildULTnlInfo*/
3567 /*******************************************************************
3569 * @brief Builds DRBS to be setup
3573 * Function : BuildDRBSetup
3575 * Functionality: Constructs the DRB's for UESetReq
3577 * @params[in] DRBs_ToBeSetup_List_t *drbSet
3579 * @return ROK - success
3582 * ****************************************************************/
3583 S16 BuildDRBSetup(DRBs_ToBeSetup_List_t *drbSet)
3593 DRBs_ToBeSetup_Item_t *drbSetItem;
3595 drbSet->list.count = drbCnt;
3596 drbSet->list.size = drbCnt*sizeof(struct DRBs_ToBeSetup_ItemIEs *);
3597 DU_ALLOC(drbSet->list.array,drbSet->list.size);
3598 if(drbSet->list.array == NULLP)
3602 for(idx=0; idx<drbCnt; idx++)
3604 DU_ALLOC(drbSet->list.array[idx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3605 if(drbSet->list.array[idx] == NULLP)
3607 for(drbidx=0; drbidx<idx; drbidx++)
3609 DU_FREE(drbSet->list.array[drbidx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3611 DU_FREE(drbSet->list.array,drbSet->list.size);
3616 drbSet->list.array[idx]->id = ProtocolIE_ID_id_DRBs_ToBeSetup_Item;
3617 drbSet->list.array[idx]->criticality = Criticality_ignore;
3618 drbSet->list.array[idx]->value.present = \
3619 DRBs_ToBeSetup_ItemIEs__value_PR_DRBs_ToBeSetup_Item;
3620 drbSetItem = &drbSet->list.array[idx]->value.choice.DRBs_ToBeSetup_Item;
3622 drbSetItem->dRBID = 1;
3624 drbSetItem->qoSInformation.present = QoSInformation_PR_choice_extension;
3625 DU_ALLOC(drbSetItem->qoSInformation.choice.choice_extension,sizeof(struct\
3626 QoSInformation_ExtIEs));
3627 if(drbSetItem->qoSInformation.choice.choice_extension == NULLP)
3629 for(idx=0; idx<drbCnt; idx++)
3631 DU_FREE(drbSet->list.array[idx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3633 DU_FREE(drbSet->list.array,drbSet->list.size);
3636 drbSetItem->qoSInformation.choice.choice_extension->id = \
3637 ProtocolIE_ID_id_DRB_Information;
3638 drbSetItem->qoSInformation.choice.choice_extension->criticality = \
3640 drbSetItem->qoSInformation.choice.choice_extension->value.present = \
3641 QoSInformation_ExtIEs__value_PR_DRB_Information;
3642 ret = BuildQOSInfo(&drbSetItem->qoSInformation.choice.\
3643 choice_extension->value.choice.DRB_Information.dRB_QoS);
3646 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(struct\
3647 QoSInformation_ExtIEs));
3648 for(drbidx=0; drbidx<drbCnt; drbidx++)
3650 DU_FREE(drbSet->list.array[drbidx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3652 DU_FREE(drbSet->list.array,drbSet->list.size);
3656 ret = BuildSNSSAI(&drbSetItem->qoSInformation.choice.\
3657 choice_extension->value.choice.DRB_Information.sNSSAI);
3660 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3661 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3662 non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3663 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3664 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3665 non_Dynamic_5QI->maxDataBurstVolume,sizeof(MaxDataBurstVolume_t));
3666 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(struct\
3667 QoSInformation_ExtIEs));
3668 for(drbidx=0; drbidx<drbCnt; drbidx++)
3670 DU_FREE(drbSet->list.array[drbidx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3672 DU_FREE(drbSet->list.array,drbSet->list.size);
3675 /*Flows mapped to DRB List*/
3676 ret = BuildFlowsMap(&drbSetItem->qoSInformation.choice.\
3677 choice_extension->value.choice.DRB_Information.flows_Mapped_To_DRB_List);
3680 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3681 choice.DRB_Information.sNSSAI.sD,sizeof(OCTET_STRING_t));
3682 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3683 choice.DRB_Information.sNSSAI.sD->buf,drbSetItem->qoSInformation.\
3684 choice.choice_extension->value.choice.DRB_Information.\
3686 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3687 choice.DRB_Information.sNSSAI.sST.buf,drbSetItem->qoSInformation.\
3688 choice.choice_extension->value.choice.DRB_Information.\
3690 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3691 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3692 non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3693 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3694 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3695 non_Dynamic_5QI->maxDataBurstVolume,sizeof(MaxDataBurstVolume_t));
3696 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(struct\
3697 QoSInformation_ExtIEs));
3698 for(drbidx=0; drbidx<drbCnt; drbidx++)
3700 DU_FREE(drbSet->list.array[drbidx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3702 DU_FREE(drbSet->list.array,drbSet->list.size);
3705 /*ULUPTNLInformation To Be Setup List*/
3706 ret = BuildULTnlInfo(&drbSetItem->uLUPTNLInformation_ToBeSetup_List);
3710 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3711 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3712 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3713 choice.non_Dynamic_5QI->maxDataBurstVolume,\
3714 sizeof(MaxDataBurstVolume_t));
3715 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3716 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3717 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3718 choice.non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3719 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3720 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3721 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3722 choice.non_Dynamic_5QI,sizeof(NonDynamic5QIDescriptor_t));
3723 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3724 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3725 array,drbSetItem->qoSInformation.choice.choice_extension->\
3726 value.choice.DRB_Information.flows_Mapped_To_DRB_List.list.size);
3728 for(flowidx=0; flowidx<flowCnt;flowidx++)
3730 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3731 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3732 array[flowidx],sizeof(struct Flows_Mapped_To_DRB_Item));
3734 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3735 choice.DRB_Information.sNSSAI.sD,sizeof(OCTET_STRING_t));
3736 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3737 choice.DRB_Information.sNSSAI.sD->buf,drbSetItem->qoSInformation.\
3738 choice.choice_extension->value.choice.DRB_Information.\
3740 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3741 choice.DRB_Information.sNSSAI.sST.buf,drbSetItem->qoSInformation.\
3742 choice.choice_extension->value.choice.DRB_Information.\
3744 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3745 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3746 non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3747 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3748 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3749 non_Dynamic_5QI->maxDataBurstVolume,sizeof(MaxDataBurstVolume_t));
3750 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(struct\
3751 QoSInformation_ExtIEs));
3752 for(drbidx=0; drbidx<drbCnt; drbidx++)
3754 DU_FREE(drbSet->list.array[drbidx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3756 DU_FREE(drbSet->list.array,drbSet->list.size);
3760 drbSetItem->rLCMode = RLCMode_rlc_um_bidirectional;
3762 /*UL Configuration*/
3764 DU_ALLOC(drbSetItem->uLConfiguration,sizeof(struct ULConfiguration));
3765 if(drbSetItem->uLConfiguration == NULLP)
3768 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3769 uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.buf,\
3770 drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3771 uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.size);
3772 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3773 uLUPTNLInformation.choice.gTPTunnel->transportLayerAddress.buf,\
3774 drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3775 uLUPTNLInformation.choice.gTPTunnel->transportLayerAddress.size);
3776 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx]->\
3777 uLUPTNLInformation.choice.gTPTunnel,sizeof(struct GTPTunnel));
3778 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array,\
3779 drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.size);
3780 for(ulidx=0; ulidx<ulCnt; ulidx++)
3782 DU_FREE(drbSetItem->uLUPTNLInformation_ToBeSetup_List.list.array[ulidx],\
3783 sizeof(struct ULUPTNLInformation_ToBeSetup_Item));
3786 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3787 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3788 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3789 choice.non_Dynamic_5QI->maxDataBurstVolume,\
3790 sizeof(MaxDataBurstVolume_t));
3791 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3792 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3793 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3794 choice.non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3795 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3796 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3797 array[flowidx]->qoSFlowLevelQoSParameters.qoS_Characteristics.\
3798 choice.non_Dynamic_5QI,sizeof(NonDynamic5QIDescriptor_t));
3799 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3800 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3801 array,drbSetItem->qoSInformation.choice.choice_extension->value.\
3802 choice.DRB_Information.flows_Mapped_To_DRB_List.list.size);
3804 for(flowidx=0; flowidx<flowCnt;flowidx++)
3806 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3807 choice.DRB_Information.flows_Mapped_To_DRB_List.list.\
3808 array[flowidx],sizeof(struct Flows_Mapped_To_DRB_Item));
3810 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3811 choice.DRB_Information.sNSSAI.sD,sizeof(OCTET_STRING_t));
3812 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3813 choice.DRB_Information.sNSSAI.sD->buf,drbSetItem->qoSInformation.\
3814 choice.choice_extension->value.choice.DRB_Information.\
3816 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3817 choice.DRB_Information.sNSSAI.sST.buf,drbSetItem->qoSInformation.\
3818 choice.choice_extension->value.choice.DRB_Information.\
3820 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3821 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3822 non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
3823 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.\
3824 choice.DRB_Information.dRB_QoS.qoS_Characteristics.choice.\
3825 non_Dynamic_5QI->maxDataBurstVolume,sizeof(MaxDataBurstVolume_t));
3826 DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(struct\
3827 QoSInformation_ExtIEs));
3828 for(drbidx=0; drbidx<drbCnt; drbidx++)
3830 DU_FREE(drbSet->list.array[drbidx],sizeof(struct DRBs_ToBeSetup_ItemIEs));
3832 DU_FREE(drbSet->list.array,drbSet->list.size);
3835 drbSetItem->uLConfiguration->uLUEConfiguration = ULUEConfiguration_no_data;
3838 }/* End of BuildDRBSetup*/
3840 /*******************************************************************
3842 * @brief Builds and sends the UE Setup Request
3846 * Function : BuildAndSendUESetReq
3848 * Functionality: Constructs the UE Setup Request and sends
3849 * it to the CU through SCTP.
3853 * @return ROK - success
3856 * ****************************************************************/
3857 S16 BuildAndSendUESetReq()
3873 F1AP_PDU_t *f1apMsg = NULL;
3874 UEContextSetupRequest_t *ueSetReq;
3875 SCell_ToBeSetup_List_t *spCellLst;
3876 asn_enc_rval_t encRetVal; /* Encoder return value */
3878 DU_LOG("\n F1AP : Building UE Context Setup Request\n");
3880 DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t));
3881 if(f1apMsg == NULLP)
3883 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
3887 f1apMsg->present = F1AP_PDU_PR_initiatingMessage;
3888 DU_ALLOC(f1apMsg->choice.initiatingMessage,
3889 sizeof(InitiatingMessage_t));
3890 if(f1apMsg->choice.initiatingMessage == NULLP)
3892 DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
3893 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3897 f1apMsg->choice.initiatingMessage->procedureCode = \
3898 ProcedureCode_id_UEContextSetup;
3899 f1apMsg->choice.initiatingMessage->criticality = Criticality_reject;
3900 f1apMsg->choice.initiatingMessage->value.present = \
3901 InitiatingMessage__value_PR_UEContextSetupRequest;
3903 &f1apMsg->choice.initiatingMessage->value.choice.UEContextSetupRequest;
3905 ueSetReq->protocolIEs.list.count = elementCnt;
3906 ueSetReq->protocolIEs.list.size = \
3907 elementCnt * sizeof(UEContextSetupRequestIEs_t *);
3909 /* Initialize the UESetup members */
3910 DU_ALLOC(ueSetReq->protocolIEs.list.array, \
3911 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
3912 if(ueSetReq->protocolIEs.list.array == NULLP)
3914 DU_LOG(" F1AP : Memory allocation for UE Context SetupRequest failed");
3915 DU_FREE(f1apMsg->choice.initiatingMessage,
3916 sizeof(InitiatingMessage_t));
3917 DU_FREE(f1apMsg,(Size)sizeof(F1AP_PDU_t));
3921 for(idx=0; idx<elementCnt; idx++)
3923 DU_ALLOC(ueSetReq->protocolIEs.list.array[idx],\
3924 sizeof(UEContextSetupRequestIEs_t));
3925 if(ueSetReq->protocolIEs.list.array[idx] == NULLP)
3927 for(ieId=0; ieId<idx; ieId++)
3929 DU_FREE(ueSetReq->protocolIEs.list.array[ieId],\
3930 sizeof(UEContextSetupRequestIEs_t));
3932 DU_FREE(ueSetReq->protocolIEs.list.array,\
3933 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
3934 DU_FREE(f1apMsg->choice.initiatingMessage,\
3935 sizeof(InitiatingMessage_t));
3936 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3943 /*GNB CU UE F1AP ID*/
3944 ueSetReq->protocolIEs.list.array[idx]->id = \
3945 ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID;
3946 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3947 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3948 UEContextSetupRequestIEs__value_PR_GNB_CU_UE_F1AP_ID;
3949 ueSetReq->protocolIEs.list.array[idx]->value.choice.GNB_CU_UE_F1AP_ID = CU_ID;
3951 /*GNB DU UE F1AP ID*/
3953 ueSetReq->protocolIEs.list.array[idx]->id = \
3954 ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
3955 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_ignore;
3956 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3957 UEContextSetupRequestIEs__value_PR_GNB_DU_UE_F1AP_ID;
3958 ueSetReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID = DU_ID;
3962 ueSetReq->protocolIEs.list.array[idx]->id = \
3963 ProtocolIE_ID_id_SpCell_ID;
3964 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3965 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3966 UEContextSetupRequestIEs__value_PR_NRCGI;
3968 BuildNrcgi(&ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI);
3972 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
3973 nRCellIdentity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
3974 choice.NRCGI.nRCellIdentity.size));
3975 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
3976 pLMN_Identity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
3977 choice.NRCGI.pLMN_Identity.size));
3978 for(idx=0; idx<elementCnt; idx++)
3980 DU_FREE(ueSetReq->protocolIEs.list.array[idx],\
3981 sizeof(InitialULRRCMessageTransferIEs_t));
3983 DU_FREE(ueSetReq->protocolIEs.list.array,\
3984 elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *));
3985 DU_FREE(f1apMsg->choice.initiatingMessage,\
3986 sizeof(InitiatingMessage_t));
3987 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
3992 /*Served Cell Index*/
3994 ueSetReq->protocolIEs.list.array[idx]->id = \
3995 ProtocolIE_ID_id_ServCellIndex;
3996 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
3997 ueSetReq->protocolIEs.list.array[idx]->value.present = \
3998 UEContextSetupRequestIEs__value_PR_ServCellIndex;
3999 ueSetReq->protocolIEs.list.array[idx]->value.choice.ServCellIndex = \
4002 /*CellULConfigured*/
4004 ueSetReq->protocolIEs.list.array[idx]->id = \
4005 ProtocolIE_ID_id_SpCellULConfigured;
4006 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_ignore;
4007 ueSetReq->protocolIEs.list.array[idx]->value.present = \
4008 UEContextSetupRequestIEs__value_PR_CellULConfigured;
4009 ueSetReq->protocolIEs.list.array[idx]->value.choice.CellULConfigured = \
4010 CellULConfigured_none;
4013 /*CUtoDURRCContainer*/
4015 ueSetReq->protocolIEs.list.array[idx]->id = \
4016 ProtocolIE_ID_id_CUtoDURRCInformation;
4017 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
4018 ueSetReq->protocolIEs.list.array[idx]->value.present = \
4019 UEContextSetupRequestIEs__value_PR_CUtoDURRCInformation;
4021 /*Special Cells to be SetupList*/
4023 ueSetReq->protocolIEs.list.array[idx]->id = \
4024 ProtocolIE_ID_id_SCell_ToBeSetup_List;
4025 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_ignore;
4026 ueSetReq->protocolIEs.list.array[idx]->value.present = \
4027 UEContextSetupRequestIEs__value_PR_SCell_ToBeSetup_List;
4029 ret = BuildSplCellList(&ueSetReq->protocolIEs.\
4030 list.array[idx]->value.choice.SCell_ToBeSetup_List);
4033 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4034 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4035 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.buf,\
4036 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4037 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4038 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.size);
4039 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4040 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4041 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.buf,\
4042 ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4043 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4044 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.size);
4045 for(spId=0; spId<cellCnt; spId++)
4047 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4048 SCell_ToBeSetup_List.list.array[spId],sizeof(struct
4049 SCell_ToBeSetup_ItemIEs));
4051 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4052 SCell_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
4053 array[idx]->value.choice.SCell_ToBeSetup_List.list.size);
4056 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
4057 nRCellIdentity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
4058 choice.NRCGI.nRCellIdentity.size));
4059 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
4060 pLMN_Identity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
4061 choice.NRCGI.pLMN_Identity.size));
4062 for(idx=0; idx<elementCnt; idx++)
4064 DU_FREE(ueSetReq->protocolIEs.list.array[idx],\
4065 sizeof(UEContextSetupRequestIEs_t));
4067 DU_FREE(ueSetReq->protocolIEs.list.array,\
4068 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
4069 DU_FREE(f1apMsg->choice.initiatingMessage,\
4070 sizeof(InitiatingMessage_t));
4071 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
4074 /*SRBs To Be Setup List*/
4076 ueSetReq->protocolIEs.list.array[idx]->id = \
4077 ProtocolIE_ID_id_SRBs_ToBeSetup_List;
4078 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
4079 ueSetReq->protocolIEs.list.array[idx]->value.present = \
4080 UEContextSetupRequestIEs__value_PR_SRBs_ToBeSetup_List;
4082 ret = BuildSRBSetup(&ueSetReq->protocolIEs.list.array[idx]->value.\
4083 choice.SRBs_ToBeSetup_List);
4086 for(srbId=0; srbId<srbCnt; srbId++)
4088 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4089 SRBs_ToBeSetup_List.list.array[srbId],\
4090 sizeof(struct SRBs_ToBeSetup_ItemIEs));
4092 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4093 SRBs_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
4094 array[idx]->value.choice.SRBs_ToBeSetup_List.list.size);
4096 DU_FREE(ueSetReq->protocolIEs.list.array[--idx]->value.choice.\
4097 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4098 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.buf,\
4099 ueSetReq->protocolIEs.list.array[--idx]->value.choice.\
4100 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4101 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.size);
4102 DU_FREE(ueSetReq->protocolIEs.list.array[--idx]->value.choice.\
4103 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4104 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.buf,\
4105 ueSetReq->protocolIEs.list.array[--idx]->value.choice.\
4106 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4107 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.size);
4108 for(spId=0; spId<cellCnt; spId++)
4110 DU_FREE(ueSetReq->protocolIEs.list.array[--idx]->value.choice.\
4111 SCell_ToBeSetup_List.list.array[spId],sizeof(struct
4112 SCell_ToBeSetup_ItemIEs));
4114 DU_FREE(ueSetReq->protocolIEs.list.array[--idx]->value.choice.\
4115 SCell_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
4116 array[--idx]->value.choice.SCell_ToBeSetup_List.list.size);
4119 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
4120 nRCellIdentity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
4121 choice.NRCGI.nRCellIdentity.size));
4122 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
4123 pLMN_Identity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
4124 choice.NRCGI.pLMN_Identity.size));
4125 for(idx=0; idx<elementCnt; idx++)
4127 DU_FREE(ueSetReq->protocolIEs.list.array[idx],\
4128 sizeof(UEContextSetupRequestIEs_t));
4130 DU_FREE(ueSetReq->protocolIEs.list.array,\
4131 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
4132 DU_FREE(f1apMsg->choice.initiatingMessage,\
4133 sizeof(InitiatingMessage_t));
4134 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
4137 /*DRBs to Be Setup List*/
4139 ueSetReq->protocolIEs.list.array[idx]->id = \
4140 ProtocolIE_ID_id_DRBs_ToBeSetup_List;
4141 ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
4142 ueSetReq->protocolIEs.list.array[idx]->value.present = \
4143 UEContextSetupRequestIEs__value_PR_DRBs_ToBeSetup_List;
4147 ret = BuildDRBSetup(&ueSetReq->protocolIEs.list.array[idx]->value.\
4148 choice.DRBs_ToBeSetup_List);
4151 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4152 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4153 DRBs_ToBeSetup_Item.uLConfiguration,\
4154 sizeof(struct ULConfiguration));
4156 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4157 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4158 DRBs_ToBeSetup_Item.uLUPTNLInformation_ToBeSetup_List.list.\
4159 array[ulidx]->uLUPTNLInformation.choice.gTPTunnel,\
4160 sizeof(struct GTPTunnel));
4161 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4162 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4163 DRBs_ToBeSetup_Item.uLUPTNLInformation_ToBeSetup_List.list.\
4164 array,ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4165 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4166 DRBs_ToBeSetup_Item.uLUPTNLInformation_ToBeSetup_List.list.size);
4167 for(ulidx=0; ulidx<ulCnt;ulidx++)
4169 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4170 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4171 DRBs_ToBeSetup_Item.uLUPTNLInformation_ToBeSetup_List.list.\
4172 array[ulidx],sizeof(struct ULUPTNLInformation_ToBeSetup_Item));
4175 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4176 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4177 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4178 choice_extension->value.choice.DRB_Information.\
4179 flows_Mapped_To_DRB_List.list.array[idx]->qoSFlowLevelQoSParameters.\
4180 qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
4181 sizeof(AveragingWindow_t));
4182 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4183 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4184 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4185 choice_extension->value.choice.DRB_Information.\
4186 flows_Mapped_To_DRB_List.list.array[idx]->qoSFlowLevelQoSParameters.\
4187 qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,\
4188 sizeof(MaxDataBurstVolume_t));
4189 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4190 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4191 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4192 choice_extension->value.choice.DRB_Information.\
4193 flows_Mapped_To_DRB_List.list.array,ueSetReq->protocolIEs.list.\
4194 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.\
4198 flows_Mapped_To_DRB_List.list.size);
4199 for(flowidx=0;flowidx<flowCnt;flowidx++)
4201 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4202 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4203 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4204 choice_extension->value.choice.DRB_Information.\
4205 flows_Mapped_To_DRB_List.list.array[flowidx],sizeof(struct
4206 Flows_Mapped_To_DRB_Item));
4208 DU_FREE(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.\
4212 sD->buf,ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4213 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4214 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4215 choice_extension->value.choice.DRB_Information.sNSSAI.\
4217 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4218 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4219 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4220 choice_extension->value.choice.DRB_Information.sNSSAI.\
4221 sD,sizeof(OCTET_STRING_t));
4222 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4223 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4224 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4225 choice_extension->value.choice.DRB_Information.sNSSAI.\
4226 sST.buf,ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4227 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4228 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4229 choice_extension->value.choice.DRB_Information.sNSSAI.\
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->value.choice.DRB_Information.dRB_QoS.\
4235 qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,\
4236 sizeof(MaxDataBurstVolume_t));
4237 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4238 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4239 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4240 choice_extension->value.choice.DRB_Information.dRB_QoS.\
4241 qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
4242 sizeof(AveragingWindow_t));
4243 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4244 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4245 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4246 choice_extension->value.choice.DRB_Information.dRB_QoS.\
4247 qoS_Characteristics.choice.non_Dynamic_5QI,\
4248 sizeof(NonDynamic5QIDescriptor_t));
4249 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4250 DRBs_ToBeSetup_List.list.array[0]->value.choice.\
4251 DRBs_ToBeSetup_Item.qoSInformation.choice.\
4252 choice_extension,sizeof(struct QoSInformation_ExtIEs));
4253 for(drbId=0; drbId<drbCnt; drbId++)
4255 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4256 DRBs_ToBeSetup_List.list.array[drbId],\
4257 sizeof(struct DRBs_ToBeSetup_ItemIEs));
4259 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.\
4260 DRBs_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
4261 array[idx]->value.choice.DRBs_ToBeSetup_List.list.size);
4263 for(srbId=0; srbId<srbCnt; srbId++)
4265 DU_FREE(ueSetReq->protocolIEs.list.array[--idx]->value.choice.\
4266 SRBs_ToBeSetup_List.list.array[srbId],\
4267 sizeof(struct SRBs_ToBeSetup_ItemIEs));
4269 DU_FREE(ueSetReq->protocolIEs.list.array[--idx]->value.choice.\
4270 SRBs_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
4271 array[--idx]->value.choice.SRBs_ToBeSetup_List.list.size);
4273 DU_FREE(ueSetReq->protocolIEs.list.array[--idx]->value.choice.\
4274 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4275 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.buf,\
4276 ueSetReq->protocolIEs.list.array[--idx]->value.choice.\
4277 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4278 SCell_ToBeSetup_Item.sCell_ID.nRCellIdentity.size);
4279 DU_FREE(ueSetReq->protocolIEs.list.array[--idx]->value.choice.\
4280 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4281 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.buf,\
4282 ueSetReq->protocolIEs.list.array[--idx]->value.choice.\
4283 SCell_ToBeSetup_List.list.array[0]->value.choice.\
4284 SCell_ToBeSetup_Item.sCell_ID.pLMN_Identity.size);
4285 for(spId=0; spId<cellCnt; spId++)
4287 DU_FREE(ueSetReq->protocolIEs.list.array[--idx]->value.choice.\
4288 SCell_ToBeSetup_List.list.array[spId],sizeof(struct
4289 SCell_ToBeSetup_ItemIEs));
4291 DU_FREE(ueSetReq->protocolIEs.list.array[--idx]->value.choice.\
4292 SCell_ToBeSetup_List.list.array,ueSetReq->protocolIEs.list.\
4293 array[--idx]->value.choice.SCell_ToBeSetup_List.list.size);
4296 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
4297 nRCellIdentity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
4298 choice.NRCGI.nRCellIdentity.size));
4299 DU_FREE(ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI.\
4300 pLMN_Identity.buf,sizeof(ueSetReq->protocolIEs.list.array[idx]->value.\
4301 choice.NRCGI.pLMN_Identity.size));
4302 for(idx=0; idx<elementCnt; idx++)
4304 DU_FREE(ueSetReq->protocolIEs.list.array[idx],\
4305 sizeof(UEContextSetupRequestIEs_t));
4307 DU_FREE(ueSetReq->protocolIEs.list.array,\
4308 elementCnt * sizeof(UEContextSetupRequestIEs_t *));
4309 DU_FREE(f1apMsg->choice.initiatingMessage,\
4310 sizeof(InitiatingMessage_t));
4311 DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
4315 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
4317 /* Encode the F1SetupRequest type as APER */
4318 cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
4320 encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\
4322 /* Encode results */
4323 if(encRetVal.encoded == ENCODE_FAIL)
4325 DU_LOG( "\n F1AP : Could not encode UE Context Setup Request structure (at %s)\n",\
4326 encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
4331 DU_LOG("\n F1AP : Created APER encoded buffer for UE Context Setup Request\n");
4332 for(int i=0; i< encBufSize; i++)
4334 printf("%x",encBuf[i]);
4339 if(SendF1APMsg(DU_APP_MEM_REGION,DU_POOL) != ROK)
4341 DU_LOG("\n F1AP : Sending UE Context Setup Request Failed");
4346 }/* End of BuildAndSendUESetReq*/
4348 /*******************************************************************
4350 * @brief Handles received F1AP message and sends back response
4354 * Function : F1APMsgHdlr
4357 * - Decodes received F1AP control message
4358 * - Prepares response message, encodes and sends to SCTP
4361 * @return ROK - success
4364 * ****************************************************************/
4365 void F1APMsgHdlr(Buffer *mBuf)
4371 F1AP_PDU_t *f1apMsg;
4372 asn_dec_rval_t rval; /* Decoder return value */
4373 F1AP_PDU_t f1apasnmsg ;
4375 DU_LOG("\nF1AP : Received F1AP message buffer");
4376 SPrntMsg(mBuf, 0,0);
4378 /* Copy mBuf into char array to decode it */
4379 SFndLenMsg(mBuf, &recvBufLen);
4380 if(SGetSBuf(DFLT_REGION, DFLT_POOL, (Data **)&recvBuf, (Size)recvBufLen) != ROK)
4382 DU_LOG("\nF1AP : Memory allocation failed");
4385 if(SCpyMsgFix(mBuf, 0, recvBufLen, (Data *)recvBuf, ©Cnt) != ROK)
4387 DU_LOG("\nF1AP : Failed while copying %d", copyCnt);
4391 printf("\nF1AP : Received flat buffer to be decoded : ");
4392 for(i=0; i< recvBufLen; i++)
4394 printf("%x",recvBuf[i]);
4397 /* Decoding flat buffer into F1AP messsage */
4398 f1apMsg = &f1apasnmsg;
4399 memset(f1apMsg, 0, sizeof(F1AP_PDU_t));
4401 rval = aper_decode(0, &asn_DEF_F1AP_PDU, (void **)&f1apMsg, recvBuf, recvBufLen, 0, 0);
4402 SPutSBuf(DFLT_REGION, DFLT_POOL, (Data *)recvBuf, (Size)recvBufLen);
4403 if(rval.code == RC_FAIL || rval.code == RC_WMORE)
4405 DU_LOG("\nF1AP : ASN decode failed");
4409 xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
4411 switch(f1apMsg->present)
4413 case F1AP_PDU_PR_successfulOutcome:
4415 switch(f1apMsg->choice.successfulOutcome->value.present)
4417 case SuccessfulOutcome__value_PR_F1SetupResponse:
4419 #ifndef ODU_TEST_STUB
4420 procF1SetupRsp(f1apMsg);
4425 case SuccessfulOutcome__value_PR_GNBDUConfigurationUpdateAcknowledge:
4427 procGNBDUCfgUpdAck(f1apMsg);
4433 DU_LOG("\nF1AP : Invalid type of successful outcome [%d]", f1apMsg->choice.successfulOutcome->value.present);
4436 }/* End of switch(successfulOutcome) */
4442 DU_LOG("\nF1AP : Invalid type of f1apMsg->present [%d]",f1apMsg->present);
4446 }/* End of switch(f1apMsg->present) */
4448 } /* End of F1APMsgHdlr */
4450 /*******************************************************************
4452 * @brief Processes GNB DU config update ack
4456 * Function : procGNBDUCfgUpdAck
4458 * Functionality: Processes GNB DU config update ack
4460 * @params[in] F1AP_PDU_t ASN decoded F1AP message
4461 * @return ROK - success
4464 * ****************************************************************/
4466 S16 procGNBDUCfgUpdAck(F1AP_PDU_t *f1apMsg)
4468 F1GnbDuCfgUpdAck duCfgUpdAckDb;
4469 GNBDUConfigurationUpdateAcknowledge_t *gnbDuCfgUpdAckMsg;
4472 DU_LOG("\nF1AP : GNB-DU config update acknowledgment received");
4474 /* Store the received info in local database */
4475 gnbDuCfgUpdAckMsg = &f1apMsg->choice.successfulOutcome->value.choice.GNBDUConfigurationUpdateAcknowledge;
4476 duCfgUpdAckDb.transId = gnbDuCfgUpdAckMsg->protocolIEs.list.array[0]->value.choice.TransactionID;
4478 /* TODO :Check the deallocation */
4480 SPutSBuf(DU_APP_MEM_REGION,DU_POOL,(Data *)&(gNBDuCfgAck->protocolIEs.list.array),\
4481 (Size)elementCnt * sizeof(GNBDUConfigurationUpdateAcknowledgeIEs_t *));
4482 SPutSBuf(DU_APP_MEM_REGION,DU_POOL,(Data *)&(f1apMsg->choice.successfulOutcome),\
4483 (Size)sizeof(SuccessfulOutcome_t));
4484 SPutSBuf(DU_APP_MEM_REGION,DU_POOL,(Data *)&f1apMsg,(Size)sizeof(F1AP_PDU_t));
4490 /**********************************************************************
4492 **********************************************************************/