-/*******************************************************************
- *
- * @brief Builds DRBS to be setup
- *
- * @details
- *
- * Function : BuildDRBSetup
- *
- * Functionality: Constructs the DRB's for UESetReq
- *
- * @params[in] DRBs_ToBeSetup_List_t *drbSet
- *
- * @return ROK - success
- * RFAILED - failure
- *
- * ****************************************************************/
-uint8_t BuildDRBSetup(DRBs_ToBeSetup_List_t *drbSet)
-{
- uint8_t BuildQOSInforet;
- uint8_t BuildSNSSAIret;
- uint8_t BuildFlowsMapret;
- uint8_t idx;
- uint8_t drbCnt;
- DRBs_ToBeSetup_Item_t *drbSetItem;
- drbCnt = 1;
- drbSet->list.count = drbCnt;
- drbSet->list.size = drbCnt*sizeof(DRBs_ToBeSetup_ItemIEs_t *);
- DU_ALLOC(drbSet->list.array,drbSet->list.size);
- if(drbSet->list.array == NULLP)
- {
- return RFAILED;
- }
- for(idx=0; idx<drbCnt; idx++)
- {
- DU_ALLOC(drbSet->list.array[idx],sizeof(DRBs_ToBeSetup_ItemIEs_t));
- if(drbSet->list.array[idx] == NULLP)
- {
- return RFAILED;
- }
- }
- idx = 0;
- drbSet->list.array[idx]->id = ProtocolIE_ID_id_DRBs_ToBeSetup_Item;
- drbSet->list.array[idx]->criticality = Criticality_ignore;
- drbSet->list.array[idx]->value.present = \
- DRBs_ToBeSetup_ItemIEs__value_PR_DRBs_ToBeSetup_Item;
- drbSetItem = &drbSet->list.array[idx]->value.choice.DRBs_ToBeSetup_Item;
- /*dRBID*/
- drbSetItem->dRBID = 1;
- /*qoSInformation*/
- drbSetItem->qoSInformation.present = QoSInformation_PR_choice_extension;
- DU_ALLOC(drbSetItem->qoSInformation.choice.choice_extension,sizeof(QoSInformation_ExtIEs_t));
- if(drbSetItem->qoSInformation.choice.choice_extension == NULLP)
- {
- return RFAILED;
- }
- drbSetItem->qoSInformation.choice.choice_extension->id = \
- ProtocolIE_ID_id_DRB_Information;
- drbSetItem->qoSInformation.choice.choice_extension->criticality = \
- Criticality_ignore;
- drbSetItem->qoSInformation.choice.choice_extension->value.present = \
- QoSInformation_ExtIEs__value_PR_DRB_Information;
- BuildQOSInforet = BuildQOSInfo(&drbSetItem->qoSInformation.choice.\
- choice_extension->value.choice.DRB_Information.dRB_QoS);
- if(BuildQOSInforet != ROK)
- {
- return RFAILED;
- }
- /*SNSSAI*/
- BuildSNSSAIret = BuildSNSSAI(&drbSetItem->qoSInformation.choice.\
- choice_extension->value.choice.DRB_Information.sNSSAI);
- if(BuildSNSSAIret != ROK)
- {
- return RFAILED;
- }
- /*Flows mapped to DRB List*/
- BuildFlowsMapret = BuildFlowsMap(&drbSetItem->qoSInformation.choice.\
- choice_extension->value.choice.DRB_Information.flows_Mapped_To_DRB_List);
- if(BuildFlowsMapret != ROK)
- {
- return RFAILED;
- }
- /*ULUPTNLInformation To Be Setup List*/
- BuildULTnlInforet = BuildULTnlInfo(&drbSetItem->uLUPTNLInformation_ToBeSetup_List);
- if(BuildULTnlInforet != ROK)
- {
- return RFAILED;
- }
- /*RLCMode*/
- drbSetItem->rLCMode = RLCMode_rlc_um_bidirectional;
-
- /*UL Configuration*/
- DU_ALLOC(drbSetItem->uLConfiguration,sizeof(ULConfiguration_t));
- if(drbSetItem->uLConfiguration == NULLP)
- {
- return RFAILED;
- }
- drbSetItem->uLConfiguration->uLUEConfiguration = ULUEConfiguration_no_data;
- return ROK;
-}/* End of BuildDRBSetup*/
-/*******************************************************************
-*
-* @brief Deallocating memory of function BuildAndSendUESetReq
-*
-* @details
-*
-* Function : FreeNrcgi
-*
-* Functionality: Deallocating memory for function BuildNrcgi
-*
-* @params[in] NRCGI_t *nrcgi
-*
-* @return void
-*
-*******************************************************************/
-void FreeNrcgi(NRCGI_t *nrcgi)
-{
- if(nrcgi->pLMN_Identity.buf != NULLP)
- {
- if(nrcgi->nRCellIdentity.buf != NULLP)
- {
- DU_FREE(nrcgi->nRCellIdentity.buf, nrcgi->nRCellIdentity.size);
- }
- DU_FREE(nrcgi->pLMN_Identity.buf, nrcgi->pLMN_Identity.size);
- }
-}
-/*******************************************************************
-*
-* @brief Deallocating memory of function BuildAndSendUESetReq
-*
-* @details
-*
-* Function : FreeSplCellList
-*
-* Functionality: Deallocating memory for function BuildSplCellList
-*
-* @params[in] SCell_ToBeSetup_List_t *spCellLst
-*
-* @return void
-*
-*
-* *****************************************************************/
-void FreeSplCellList(SCell_ToBeSetup_List_t *spCellLst)
-{
- uint8_t cellidx;
- if(spCellLst->list.array != NULLP)
- {
- for(cellidx=0; cellidx<spCellLst->list.count; cellidx++)
- {
- if(cellidx==0&&spCellLst->list.array[cellidx]!=NULLP)
- {
- FreeNrcgi(&spCellLst->list.array[cellidx]->value.choice.SCell_ToBeSetup_Item.sCell_ID);
- }
- if(spCellLst->list.array[cellidx]!=NULLP)
- {
- DU_FREE(spCellLst->list.array[cellidx],sizeof(SCell_ToBeSetup_ItemIEs_t));
- }
- }
- DU_FREE(spCellLst->list.array,spCellLst->list.size);
- }
-}
- /*******************************************************************
- *
- * @brief Deallocating memory of function BuildAndSendUESetReq
- *
- * @details
- *
- * Function : FreeSRBSetup
- *
- * Functionality: Deallocating memory for function BuildSRBSetup
- *
- * @params[in] SRBs_ToBeSetup_List_t *srbSet
- *
- * @return void
- *
- *
- * ******************************************************************/
-void FreeSRBSetup(SRBs_ToBeSetup_List_t *srbSet)
-{
- uint8_t srbidx;
- if(srbSet->list.array != NULLP)
- {
- for(srbidx=0; srbidx<srbSet->list.count; srbidx++)
- {
- if(srbSet->list.array[srbidx]!=NULLP)
- {
- DU_FREE(srbSet->list.array[srbidx],sizeof(SRBs_ToBeSetup_ItemIEs_t));
- }
- }
- DU_FREE(srbSet->list.array,srbSet->list.size);
- }
-}
- /*******************************************************************
- *
- * @brief Deallocating memory of function BuildAndSendUESetReq
- *
- * @details
- *
- * Function : FreeQOSInfo
- *
- * Functionality: Deallocating memory for function BuildQOSInfo
- *
- * @params[in] QoSFlowLevelQoSParameters_t *drbQos
- *
- * @return void
- *
- * ****************************************************************/
-void FreeQOSInfo(QoSFlowLevelQoSParameters_t *drbQos)
-{
- if(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI != NULLP)
- {
- if(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow!=NULLP)
- {
- if(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume!=NULLP)
- {
- DU_FREE(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,\
- sizeof(MaxDataBurstVolume_t));
- }
- DU_FREE(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\
- sizeof(AveragingWindow_t));
- }
- DU_FREE(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI,\
- sizeof(NonDynamic5QIDescriptor_t));
- }
-}
- /*******************************************************************
- *
- * @brief Deallocating memory of function BuildAndSendUESetReq
- *
- * @details
- *
- * Function : FreeULTnlInfo
- *
- * Functionality: Deallocating memory for function BuildULTnlInfo
- *
- * @params[in] ULUPTNLInformation_ToBeSetup_List_t *ulInfo
- *
- * @return void
- *
-
- * ****************************************************************/
-void FreeULTnlInfo(ULUPTNLInformation_ToBeSetup_List_t *ulInfo)
-{
- uint8_t ulidx=0;
- if(ulInfo->list.array != NULLP)
- {
- for(ulidx=0; ulidx<ulInfo->list.count; ulidx++)
- {
- if(ulidx==0&&ulInfo->list.array[ulidx]!=NULLP)
- {
- if(ulInfo->list.array[ulidx]->uLUPTNLInformation.choice.gTPTunnel!=NULLP)
- {
- if(ulInfo->list.array[ulidx]->uLUPTNLInformation.choice.gTPTunnel->\
- transportLayerAddress.buf != NULLP)
- {
- if(ulInfo->list.array[ulidx]->uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.buf\
- !=NULLP)
- {
- DU_ALLOC(ulInfo->list.array[ulidx]->uLUPTNLInformation.choice.gTPTunnel->\
- gTP_TEID.buf,ulInfo->list.array[ulidx]->uLUPTNLInformation.choice.\
- gTPTunnel->gTP_TEID.size);
- }
- DU_FREE(ulInfo->list.array[ulidx]->uLUPTNLInformation.choice.gTPTunnel->\
- transportLayerAddress.buf,ulInfo->list.array[ulidx]->\
- uLUPTNLInformation.choice.gTPTunnel->transportLayerAddress.size);
- }
- DU_FREE(ulInfo->list.array[ulidx]->uLUPTNLInformation.choice.gTPTunnel,\
- sizeof(GTPTunnel_t));
- }
- }
- if(ulInfo->list.array[ulidx]!=NULLP)
- {
- DU_FREE(ulInfo->list.array[ulidx],sizeof(ULUPTNLInformation_ToBeSetup_Item_t));
- }
- }
- DU_FREE(ulInfo->list.array,ulInfo->list.size);
- }
-}
-/*******************************************************************
- *
- * @brief Deallocating memory for BuildAndSendUESetReq
- *
- * @details
- *
- * Function : FreeDRBSetup
- *
- * Functionality: Deallocating memory for BuildDRBSetup
- *
- * @params[in] DRBs_ToBeSetup_List_t *drbSet
- *
- * @return void
- *
- * ****************************************************************/
-void FreeDRBSetup(DRBs_ToBeSetup_List_t *drbSet)
-{
- DRBs_ToBeSetup_Item_t *drbSetItem;
- uint8_t flowidx;
- uint8_t drbidx;
- if(drbSet->list.array == NULLP)
- {
- for(drbidx=0; drbidx<drbSet->list.count; drbidx++)
- {
- if(drbidx==0&&drbSet->list.array[drbidx] != NULLP)
- {
- drbSetItem =&drbSet->list.array[drbidx]->value.choice.DRBs_ToBeSetup_Item;
- if(drbSetItem->qoSInformation.choice.choice_extension != NULLP)
- {
- if(drbSetItem->qoSInformation.choice.choice_extension->value.choice.DRB_Information.dRB_QoS.\
- qoS_Characteristics.choice.non_Dynamic_5QI !=NULLP)
- {
- if(drbSetItem->qoSInformation.choice.choice_extension->value.choice.DRB_Information.dRB_QoS.\
- qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow!=NULLP)
- {
- if(drbSetItem->qoSInformation.choice.choice_extension->value.choice.DRB_Information.dRB_QoS.\
- qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume!=NULLP)
- {
- if(drbSetItem->qoSInformation.choice.choice_extension->value.choice.DRB_Information.sNSSAI.sST.buf!=NULLP)
- {
- if(drbSetItem->qoSInformation.choice.choice_extension->value.choice.DRB_Information.sNSSAI.sD!=NULLP)
- {
- if(drbSetItem->qoSInformation.choice.choice_extension->value.choice.DRB_Information.sNSSAI.sD->buf!=NULLP)
- {
- if(drbSetItem->qoSInformation.choice.choice_extension->value.choice.DRB_Information.\
- flows_Mapped_To_DRB_List.list.array != NULLP)
- {
- for(flowidx=0;flowidx<drbSetItem->qoSInformation.choice.choice_extension->value.choice.DRB_Information.\
- flows_Mapped_To_DRB_List.list.count; flowidx++)
- {
- if(flowidx==0&&drbSetItem->qoSInformation.choice.choice_extension->value.choice.\
- DRB_Information.flows_Mapped_To_DRB_List.list.array[flowidx]!=NULLP)
- {
- if(drbSetItem->qoSInformation.choice.choice_extension->value.choice.\
- DRB_Information.flows_Mapped_To_DRB_List.list.array[flowidx]->qoSFlowLevelQoSParameters.\
- qoS_Characteristics.choice.non_Dynamic_5QI!=NULLP)
- {
- if(drbSetItem->qoSInformation.choice.choice_extension->value.choice.\
- DRB_Information.flows_Mapped_To_DRB_List.list.array[flowidx]->qoSFlowLevelQoSParameters.\
- qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow!=NULLP)
- {
- if(drbSetItem->qoSInformation.choice.choice_extension->value.choice.\
- DRB_Information.flows_Mapped_To_DRB_List.list.array[flowidx]->qoSFlowLevelQoSParameters.\
- qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume!=NULLP)
- {
- if((BuildULTnlInforet==ROK)&&(drbSetItem->uLConfiguration!=NULLP))
- {
- DU_FREE(drbSetItem->uLConfiguration,sizeof(ULConfiguration_t));
- }
- FreeULTnlInfo(&drbSetItem->uLUPTNLInformation_ToBeSetup_List);
- DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.choice.\
- DRB_Information.flows_Mapped_To_DRB_List.list.array[flowidx]->qoSFlowLevelQoSParameters.\
- qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,\
- sizeof(MaxDataBurstVolume_t));
- }
- DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.choice.\
- DRB_Information.flows_Mapped_To_DRB_List.list.array[flowidx]->qoSFlowLevelQoSParameters.\
- qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
- }
- DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.choice.\
- DRB_Information.flows_Mapped_To_DRB_List.list.array[flowidx]->qoSFlowLevelQoSParameters.\
- qoS_Characteristics.choice.non_Dynamic_5QI,sizeof(NonDynamic5QIDescriptor_t));
- }
- }
- if(drbSetItem->qoSInformation.choice.choice_extension->value.choice.\
- DRB_Information.flows_Mapped_To_DRB_List.list.array[flowidx]!=NULLP)
- {
- DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.choice.\
- DRB_Information.flows_Mapped_To_DRB_List.list.array[flowidx],sizeof(Flows_Mapped_To_DRB_Item_t));
- }
- }
- DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.choice.DRB_Information.\
- flows_Mapped_To_DRB_List.list.array,drbSetItem->qoSInformation.choice.choice_extension->value.\
- choice.DRB_Information.flows_Mapped_To_DRB_List.list.size);
- }
- DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.choice.DRB_Information.sNSSAI.sD->buf,\
- drbSetItem->qoSInformation.choice.choice_extension->value.choice.DRB_Information.sNSSAI.sD->size);
- }
- DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.choice.DRB_Information.sNSSAI.sD,\
- sizeof(OCTET_STRING_t));
- }
- DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.choice.DRB_Information.sNSSAI.sST.buf,\
- drbSetItem->qoSInformation.choice.choice_extension->value.choice.DRB_Information.sNSSAI.sST.size);
- }
- DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.choice.DRB_Information.dRB_QoS.\
- qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,sizeof(MaxDataBurstVolume_t));
- }
- DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.choice.DRB_Information.dRB_QoS.\
- qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,sizeof(AveragingWindow_t));
- }
- DU_FREE(drbSetItem->qoSInformation.choice.choice_extension->value.choice.DRB_Information.dRB_QoS.\
- qoS_Characteristics.choice.non_Dynamic_5QI, sizeof(NonDynamic5QIDescriptor_t));
- }
- DU_FREE(drbSetItem->qoSInformation.choice.choice_extension,sizeof(QoSInformation_ExtIEs_t));
- }
- }
- if(drbSet->list.array[drbidx]!=NULLP)
- {
- DU_FREE(drbSet->list.array[drbidx],sizeof(DRBs_ToBeSetup_ItemIEs_t));
- }
- }
- DU_FREE(drbSet->list.array,drbSet->list.size);
- }
-}
-/*******************************************************************
- *
- * @brief Free the UE Setup Request
- *
- * @details
- *
- * Function : FreeUESetReq
- *
- * Functionality: Deallocate the memory of BuildUESetReq
- *
- * @params[in] F1AP_PDU_t *f1apMsg
- *
- * @return void
- *
- *
- * ****************************************************************/
- void FreeUESetReq(F1AP_PDU_t *f1apMsg)
-{
- uint8_t idx=2;
- uint8_t ieId;
- UEContextSetupRequest_t *ueSetReq;
-
- if(f1apMsg != NULLP)
- {
- if(f1apMsg->choice.initiatingMessage != NULLP)
- {
- ueSetReq = &f1apMsg->choice.initiatingMessage->value.choice.UEContextSetupRequest;
- if(ueSetReq->protocolIEs.list.array != NULLP)
- {
- if(ueSetReq->protocolIEs.list.array[idx])
- {
- if(Nrcgiret==ROK )
- {
- idx=6;
- if(ueSetReq->protocolIEs.list.array[idx])
- {
- if(SplCellListret==ROK)
- {
- idx++;
- if(ueSetReq->protocolIEs.list.array[idx])
- {
- if(SRBSetupret == ROK)
- {
- idx=8;
- FreeDRBSetup(&ueSetReq->protocolIEs.list.array[idx]->value.choice.DRBs_ToBeSetup_List);
- }
- idx--;
- FreeSRBSetup(&ueSetReq->protocolIEs.list.array[idx]->value.choice.SRBs_ToBeSetup_List);
- }
- }
- idx--;
- FreeSplCellList(&ueSetReq->protocolIEs.list.array[idx]->value.choice.SCell_ToBeSetup_List);
- }
- }
- idx=2;
- FreeNrcgi(&ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI);
- }
- for(ieId=0; ieId<ueSetReq->protocolIEs.list.count; ieId++)
- {
- if(ueSetReq->protocolIEs.list.array[ieId] != NULLP)
- {
- DU_FREE(ueSetReq->protocolIEs.list.array[ieId],sizeof(UEContextSetupRequestIEs_t));
- }
- }
- DU_FREE(ueSetReq->protocolIEs.list.array,ueSetReq->protocolIEs.list.size);
- }
- DU_FREE(f1apMsg->choice.initiatingMessage,sizeof(InitiatingMessage_t));
- }
- DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
- }
- }