X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_f1ap_msg_hdl.c;h=ac1fdb86962a477c88d443f17735cf9207b06817;hb=088bb8763eaf91c139ede025faf2fac7e57d25ed;hp=3cd438c0e7006b171370f353df3b5339da973eb0;hpb=0bdd575f55257e64b4becb4cee0df0dab2bac3fa;p=o-du%2Fl2.git diff --git a/src/du_app/du_f1ap_msg_hdl.c b/src/du_app/du_f1ap_msg_hdl.c index 3cd438c0e..ac1fdb869 100644 --- a/src/du_app/du_f1ap_msg_hdl.c +++ b/src/du_app/du_f1ap_msg_hdl.c @@ -17,11 +17,17 @@ *******************************************************************************/ /* This file contains F1AP message handler functions */ - -#include "du_mgr.h" +#include "common_def.h" +#include "lrg.h" +#include "legtp.h" +#include "lkw.x" +#include "lrg.x" +#include "du_app_mac_inf.h" +#include "du_cfg.h" +#include "du_app_rlc_inf.h" +#include "E2AP-PDU.h" #include "du_mgr_main.h" -#include "du_cell_mgr.h" -#include "du_f1ap_msg_hdl.h" +#include "du_utils.h" #include "GNB-DU-System-Information.h" #include "CellGroupConfigRrc.h" #include "MAC-CellGroupConfig.h" @@ -60,16 +66,22 @@ #include "UplinkConfig.h" #include "PDSCH-ServingCellConfig.h" #include "DUtoCURRCContainer.h" +#include +#include "ProtocolExtensionField.h" +#include "F1AP-PDU.h" +#include "odu_common_codec.h" +#include "du_mgr.h" +#include "du_f1ap_msg_hdl.h" -extern char encBuf[ENC_BUF_MAX_LEN]; extern DuCfgParams duCfgParam; -uint8_t BuildULTnlInforet=RFAILED; uint8_t ServedCellListreturn=RFAILED; -S16 sctpSend(Buffer *mBuf, U8 itfType); -uint8_t Nrcgiret=RFAILED; -uint8_t SplCellListret=RFAILED; -uint8_t SRBSetupret=RFAILED; + +uint8_t procGNBDUCfgUpdAck(F1AP_PDU_t *f1apMsg); +uint8_t procDlRrcMsgTrans(F1AP_PDU_t *f1apMsg); +void FreeDUConfigUpdate(F1AP_PDU_t *f1apDuCfg); +uint8_t sctpSend(Buffer *mBuf, uint8_t itfType); uint8_t BuildInitialUlBWP(BWP_UplinkDedicated_t *ulBwp); +uint8_t procUeContextSetupReq(F1AP_PDU_t *f1apMsg); /******************************************************************* * @@ -671,26 +683,26 @@ uint8_t SendF1APMsg(Region region, Pool pool) { Buffer *mBuf; - if(SGetMsg(region, pool, &mBuf) == ROK) + if(ODU_GET_MSG_BUF(region, pool, &mBuf) == ROK) { - if(SAddPstMsgMult((Data *)encBuf, encBufSize, mBuf) == ROK) + if(ODU_ADD_POST_MSG_MULT((Data *)encBuf, encBufSize, mBuf) == ROK) { - SPrntMsg(mBuf, 0,0); + ODU_PRINT_MSG(mBuf, 0,0); if(sctpSend(mBuf, F1_INTERFACE) != ROK) { DU_LOG("\nF1AP : SCTP Send failed"); - SPutMsg(mBuf); + ODU_PUT_MSG_BUF(mBuf); return RFAILED; } } else { - DU_LOG("\nF1AP : SAddPstMsgMult failed"); - SPutMsg(mBuf); + DU_LOG("\nF1AP : ODU_ADD_POST_MSG_MULT failed"); + ODU_PUT_MSG_BUF(mBuf); return RFAILED; } - SPutMsg(mBuf); + ODU_PUT_MSG_BUF(mBuf); } else { @@ -1133,7 +1145,7 @@ uint8_t BuildAndSendF1SetupReq() xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg); /* Encode the F1SetupRequest type as APER */ - cmMemset((uint8_t *)encBuf, 0, ENC_BUF_MAX_LEN); + memset((uint8_t *)encBuf, 0, ENC_BUF_MAX_LEN); encBufSize = 0; encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\ encBuf); @@ -1163,7 +1175,7 @@ uint8_t BuildAndSendF1SetupReq() ret=ROK; break; - }while(1); + }while(true); FreeF1SetupReq(f1apMsg); @@ -1207,7 +1219,7 @@ uint8_t BuildAndSendDUConfigUpdate() uint8_t ret= RFAILED; uint8_t i; - while(1) + while(true) { DU_LOG("\nF1AP : Building DU config update\n"); /* Allocate the memory for F1DuCfg */ @@ -1609,7 +1621,7 @@ uint8_t BuildAndSendDUConfigUpdate() xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apDuCfg); /* Encode the DU Config Update type as APER */ - cmMemset((uint8_t *)encBuf, 0, ENC_BUF_MAX_LEN); + memset((uint8_t *)encBuf, 0, ENC_BUF_MAX_LEN); encBufSize = 0; encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apDuCfg, PrepFinalEncBuf, encBuf); @@ -1920,6 +1932,12 @@ void FreeULRRCMessageTransfer( F1AP_PDU_t *f1apMsg) { if(ulRRCMsg->protocolIEs.list.array[idx1] != NULLP) { + if(ulRRCMsg->protocolIEs.list.array[idx1]->value.present == + ULRRCMessageTransferIEs__value_PR_RRCContainer) + { + DU_FREE(ulRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.buf, + ulRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.size); + } DU_FREE(ulRRCMsg->protocolIEs.list.array[idx1],sizeof(ULRRCMessageTransferIEs_t)); } } @@ -1947,124 +1965,135 @@ void FreeULRRCMessageTransfer( F1AP_PDU_t *f1apMsg) * RFAILED - failure * * ****************************************************************/ -uint8_t BuildAndSendULRRCMessageTransfer() +uint8_t BuildAndSendULRRCMessageTransfer(DuUeCb ueCb, uint8_t lcId, \ + uint16_t msgLen, uint8_t *rrcMsg) { - uint8_t elementCnt; - uint8_t idx1; - uint8_t idx; - F1AP_PDU_t *f1apMsg = NULL; + uint8_t elementCnt; + uint8_t idx1; + uint8_t idx; + F1AP_PDU_t *f1apMsg = NULL; ULRRCMessageTransfer_t *ulRRCMsg; - asn_enc_rval_t encRetVal; /* Encoder return value */ + asn_enc_rval_t encRetVal; /* Encoder return value */ uint8_t ret =RFAILED; - while(1) - { - DU_LOG("\n F1AP : Building UL RRC Message Transfer Message\n"); + while(true) + { + DU_LOG("\n F1AP : Building UL RRC Message Transfer Message\n"); - DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t)); - if(f1apMsg == NULLP) - { - DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed"); - break; - } + DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t)); + if(f1apMsg == NULLP) + { + DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed"); + break; + } - f1apMsg->present = F1AP_PDU_PR_initiatingMessage; - DU_ALLOC(f1apMsg->choice.initiatingMessage,sizeof(InitiatingMessage_t)); - if(f1apMsg->choice.initiatingMessage == NULLP) - { - DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed"); - break; - } - f1apMsg->choice.initiatingMessage->procedureCode = \ - ProcedureCode_id_ULRRCMessageTransfer; - f1apMsg->choice.initiatingMessage->criticality = Criticality_ignore; - f1apMsg->choice.initiatingMessage->value.present = \ - InitiatingMessage__value_PR_ULRRCMessageTransfer; - ulRRCMsg = - &f1apMsg->choice.initiatingMessage->value.choice.ULRRCMessageTransfer; - elementCnt = 3; - ulRRCMsg->protocolIEs.list.count = elementCnt; - ulRRCMsg->protocolIEs.list.size = \ - elementCnt * sizeof(ULRRCMessageTransferIEs_t *); - - /* Initialize the F1Setup members */ - DU_ALLOC(ulRRCMsg->protocolIEs.list.array, ulRRCMsg->protocolIEs.list.size); - if(ulRRCMsg->protocolIEs.list.array == NULLP) - { - DU_LOG(" F1AP : Memory allocation for UL RRC MessageTransferIEs failed"); - break; - } - for(idx=0; idxprotocolIEs.list.array[idx],sizeof(ULRRCMessageTransferIEs_t)); - if(ulRRCMsg->protocolIEs.list.array[idx] == NULLP) - { - break; - } - } + f1apMsg->present = F1AP_PDU_PR_initiatingMessage; + DU_ALLOC(f1apMsg->choice.initiatingMessage,sizeof(InitiatingMessage_t)); + if(f1apMsg->choice.initiatingMessage == NULLP) + { + DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed"); + break; + } + f1apMsg->choice.initiatingMessage->procedureCode = ProcedureCode_id_ULRRCMessageTransfer; + f1apMsg->choice.initiatingMessage->criticality = Criticality_ignore; + f1apMsg->choice.initiatingMessage->value.present = \ + InitiatingMessage__value_PR_ULRRCMessageTransfer; + ulRRCMsg = + &f1apMsg->choice.initiatingMessage->value.choice.ULRRCMessageTransfer; + elementCnt = 4; + ulRRCMsg->protocolIEs.list.count = elementCnt; + ulRRCMsg->protocolIEs.list.size = \ + elementCnt * sizeof(ULRRCMessageTransferIEs_t *); - idx1 = 0; - - /*GNB CU UE F1AP ID*/ - ulRRCMsg->protocolIEs.list.array[idx1]->id = \ - ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID; - ulRRCMsg->protocolIEs.list.array[idx1]->criticality = Criticality_reject; - ulRRCMsg->protocolIEs.list.array[idx1]->value.present = \ - ULRRCMessageTransferIEs__value_PR_GNB_CU_UE_F1AP_ID; - ulRRCMsg->protocolIEs.list.array[idx1]->value.choice.GNB_CU_UE_F1AP_ID = CU_ID; - - /*GNB DU UE F1AP ID*/ - idx1++; - ulRRCMsg->protocolIEs.list.array[idx1]->id = \ - ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID; - ulRRCMsg->protocolIEs.list.array[idx1]->criticality = Criticality_reject; - ulRRCMsg->protocolIEs.list.array[idx1]->value.present = \ - ULRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID; - ulRRCMsg->protocolIEs.list.array[idx1]->value.choice.GNB_DU_UE_F1AP_ID = DU_ID; - - /*SRBID*/ - idx1++; - ulRRCMsg->protocolIEs.list.array[idx1]->id = \ - ProtocolIE_ID_id_SRBID; - ulRRCMsg->protocolIEs.list.array[idx1]->criticality = Criticality_reject; - ulRRCMsg->protocolIEs.list.array[idx1]->value.present = \ - ULRRCMessageTransferIEs__value_PR_SRBID; - ulRRCMsg->protocolIEs.list.array[idx1]->value.choice.SRBID = UL_SRBID; - - /*RRCContainer*/ - //YET TO FILL - - xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg); - - /* Encode the F1SetupRequest type as APER */ - cmMemset((uint8_t *)encBuf, 0, ENC_BUF_MAX_LEN); - encBufSize = 0; - encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\ - encBuf); - /* Encode results */ - if(encRetVal.encoded == ENCODE_FAIL) - { - DU_LOG( "\n F1AP : Could not encode ULRRCMessageTransfer structure (at %s)\n",\ - encRetVal.failed_type ? encRetVal.failed_type->name : "unknown"); - break; - } - else - { - DU_LOG("\n F1AP : Created APER encoded buffer for ULRRCMessageTransfer\n"); - for(int i=0; i< encBufSize; i++) - { - printf("%x",encBuf[i]); - } - } + /* Initialize the F1Setup members */ + DU_ALLOC(ulRRCMsg->protocolIEs.list.array, ulRRCMsg->protocolIEs.list.size); + if(ulRRCMsg->protocolIEs.list.array == NULLP) + { + DU_LOG(" F1AP : Memory allocation for UL RRC MessageTransferIEs failed"); + break; + } + for(idx=0; idxprotocolIEs.list.array[idx],sizeof(ULRRCMessageTransferIEs_t)); + if(ulRRCMsg->protocolIEs.list.array[idx] == NULLP) + { + break; + } + } - /* Sending msg */ - if(SendF1APMsg(DU_APP_MEM_REGION,DU_POOL) != ROK) - { - DU_LOG("\n F1AP : Sending UL RRC Message Transfer Failed"); - break; - } + idx1 = 0; + + /*GNB CU UE F1AP ID*/ + ulRRCMsg->protocolIEs.list.array[idx1]->id = ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID; + ulRRCMsg->protocolIEs.list.array[idx1]->criticality = Criticality_reject; + ulRRCMsg->protocolIEs.list.array[idx1]->value.present = \ + ULRRCMessageTransferIEs__value_PR_GNB_CU_UE_F1AP_ID; + ulRRCMsg->protocolIEs.list.array[idx1]->value.choice.GNB_CU_UE_F1AP_ID = ueCb.gnbCuUeF1apId; + + /*GNB DU UE F1AP ID*/ + idx1++; + ulRRCMsg->protocolIEs.list.array[idx1]->id = ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID; + ulRRCMsg->protocolIEs.list.array[idx1]->criticality = Criticality_reject; + ulRRCMsg->protocolIEs.list.array[idx1]->value.present = \ + ULRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID; + ulRRCMsg->protocolIEs.list.array[idx1]->value.choice.GNB_DU_UE_F1AP_ID = ueCb.gnbDuUeF1apId; + + /*SRBID*/ + idx1++; + ulRRCMsg->protocolIEs.list.array[idx1]->id = ProtocolIE_ID_id_SRBID; + ulRRCMsg->protocolIEs.list.array[idx1]->criticality = Criticality_reject; + ulRRCMsg->protocolIEs.list.array[idx1]->value.present = \ + ULRRCMessageTransferIEs__value_PR_SRBID; + ulRRCMsg->protocolIEs.list.array[idx1]->value.choice.SRBID = lcId; + + /*RRCContainer*/ + idx1++; + ulRRCMsg->protocolIEs.list.array[idx1]->id = ProtocolIE_ID_id_RRCContainer; + ulRRCMsg->protocolIEs.list.array[idx1]->criticality = Criticality_reject; + ulRRCMsg->protocolIEs.list.array[idx1]->value.present = \ + ULRRCMessageTransferIEs__value_PR_RRCContainer; + ulRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.size = msgLen; + DU_ALLOC(ulRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.buf, + ulRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.size) + if(!ulRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.buf) + { + DU_LOG(" F1AP : Memory allocation for BuildAndSendULRRCMessageTransfer failed"); + break; + } + memcpy(ulRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.buf, \ + rrcMsg, ulRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.size); + + xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg); + + /* Encode the F1SetupRequest type as APER */ + memset((uint8_t *)encBuf, 0, ENC_BUF_MAX_LEN); + encBufSize = 0; + encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\ + encBuf); + /* Encode results */ + if(encRetVal.encoded == ENCODE_FAIL) + { + DU_LOG( "\n F1AP : Could not encode ULRRCMessageTransfer structure (at %s)\n",\ + encRetVal.failed_type ? encRetVal.failed_type->name : "unknown"); + break; + } + else + { + DU_LOG("\n F1AP : Created APER encoded buffer for ULRRCMessageTransfer\n"); + for(int i=0; i< encBufSize; i++) + { + printf("%x",encBuf[i]); + } + } + + /* Sending msg */ + if(SendF1APMsg(DU_APP_MEM_REGION,DU_POOL) != ROK) + { + DU_LOG("\n F1AP : Sending UL RRC Message Transfer Failed"); + break; + } ret = ROK; - break; - } + break; + } FreeULRRCMessageTransfer(f1apMsg); return ret; @@ -2496,10 +2525,11 @@ struct PDCCH_Config__controlResourceSetToAddModList *controlRSetList { uint8_t idx; uint8_t elementCnt; - uint8_t numBytes; - uint8_t byteIdx; - uint8_t bitsUnused; + uint8_t numBytes, bitsUnused; struct ControlResourceSet *controlRSet; + uint8_t freqDomainResource[FREQ_DOM_RSRC_SIZE] = {0}; + uint8_t coreset0EndPrb, coreset1StartPrb, coreset1NumPrb; + elementCnt = 1; controlRSetList->list.count = elementCnt; @@ -2516,7 +2546,7 @@ struct PDCCH_Config__controlResourceSetToAddModList *controlRSetList for(idx = 0; idx < elementCnt; idx++) { - controlRSetList->list.array[idx] = NULLP; + controlRSetList->list.array[idx] = NULLP; DU_ALLOC(controlRSetList->list.array[idx], sizeof(struct ControlResourceSet)); if(!controlRSetList->list.array[idx]) { @@ -2535,7 +2565,7 @@ struct PDCCH_Config__controlResourceSetToAddModList *controlRSetList * 3 LSBs unsued * Bit string stored ff0000000000 */ - numBytes = 6; + numBytes = 6; bitsUnused = 3; controlRSet->frequencyDomainResources.size = numBytes * sizeof(uint8_t); @@ -2547,13 +2577,15 @@ struct PDCCH_Config__controlResourceSetToAddModList *controlRSetList DU_LOG("\nF1AP : Memory allocation failed in BuildControlRSetToAddModList"); return RFAILED; } - byteIdx = 0; - controlRSet->frequencyDomainResources.buf[byteIdx] = PDCCH_FREQ_DOM_RSRC; /* setting 8 MSBs i.e. ff */ - for(byteIdx = 1; byteIdx < numBytes; byteIdx++) - { - controlRSet->frequencyDomainResources.buf[byteIdx] = 0; - } - controlRSet->frequencyDomainResources.bits_unused = bitsUnused; + + memset(controlRSet->frequencyDomainResources.buf, 0, FREQ_DOM_RSRC_SIZE); + coreset0EndPrb = CORESET0_END_PRB; + coreset1StartPrb = coreset0EndPrb + 6; + coreset1NumPrb = CORESET1_NUM_PRB; + /* calculate the PRBs */ + schAllocFreqDomRscType0(((coreset1StartPrb)/6), (coreset1NumPrb/6), freqDomainResource); + memcpy(controlRSet->frequencyDomainResources.buf, freqDomainResource, FREQ_DOM_RSRC_SIZE); + controlRSet->frequencyDomainResources.bits_unused = bitsUnused; controlRSet->duration = PDCCH_CTRL_RSRC_SET_ONE_DURATION; controlRSet->cce_REG_MappingType.present = \ @@ -4867,7 +4899,7 @@ uint8_t BuildDuToCuRrcContainer(DUtoCURRCContainer_t *duToCuRrcContainer) asn_enc_rval_t encRetVal; uint8_t ret = RFAILED; - while(1) + while(true) { cellGrpCfg.cellGroupId = CELL_GRP_ID; @@ -4931,7 +4963,7 @@ uint8_t BuildDuToCuRrcContainer(DUtoCURRCContainer_t *duToCuRrcContainer) /* encode cellGrpCfg into duToCuRrcContainer */ xer_fprint(stdout, &asn_DEF_CellGroupConfigRrc, &cellGrpCfg); - cmMemset((uint8_t *)encBuf, 0, ENC_BUF_MAX_LEN); + memset((uint8_t *)encBuf, 0, ENC_BUF_MAX_LEN); encBufSize = 0; encRetVal = aper_encode(&asn_DEF_CellGroupConfigRrc, 0, &cellGrpCfg, PrepFinalEncBuf, encBuf); /* Encode results */ @@ -4983,7 +5015,7 @@ uint8_t BuildDuToCuRrcContainer(DUtoCURRCContainer_t *duToCuRrcContainer) * * ****************************************************************/ uint8_t BuildAndSendInitialRrcMsgTransfer(uint32_t gnbDuUeF1apId, uint16_t crnti, - uint8_t *rrcContainer) + uint16_t rrcContSize, uint8_t *rrcContainer) { uint8_t ret; uint8_t elementCnt; @@ -4994,7 +5026,7 @@ uint8_t BuildAndSendInitialRrcMsgTransfer(uint32_t gnbDuUeF1apId, uint16_t crnti InitialULRRCMessageTransfer_t *initULRRCMsg=NULLP; asn_enc_rval_t encRetVal; bool checkvar=false; - while(1) + while(true) { DU_LOG("\n F1AP : Building RRC Setup Request\n"); DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t)); @@ -5080,18 +5112,17 @@ uint8_t BuildAndSendInitialRrcMsgTransfer(uint32_t gnbDuUeF1apId, uint16_t crnti initULRRCMsg->protocolIEs.list.array[idx1]->value.present =\ InitialULRRCMessageTransferIEs__value_PR_RRCContainer; - initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.size =\ - strlen((const char*)rrcContainer); - DU_ALLOC(initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.buf, - initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.size) + initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.size = rrcContSize; + DU_ALLOC(initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.buf, + initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.size) if(!initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.buf) { - DU_LOG(" F1AP : Memory allocation for RRCSetupRequestMessageTransferIEs failed"); + DU_LOG(" F1AP : Memory allocation for RRCSetupRequestMessageTransferIEs failed"); break; } - memcpy(initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.buf, rrcContainer, - initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.size); + memcpy(initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.buf, rrcContainer, + initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.size); /*DUtoCURRCContainer*/ @@ -5111,7 +5142,7 @@ uint8_t BuildAndSendInitialRrcMsgTransfer(uint32_t gnbDuUeF1apId, uint16_t crnti xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg); /* Encode the F1SetupRequest type as APER */ - cmMemset((uint8_t *)encBuf, 0, ENC_BUF_MAX_LEN); + memset((uint8_t *)encBuf, 0, ENC_BUF_MAX_LEN); encBufSize = 0; encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf, encBuf); /* Encode results */ @@ -5201,1025 +5232,183 @@ uint8_t BuildAndSendInitialRrcMsgTransfer(uint32_t gnbDuUeF1apId, uint16_t crnti /******************************************************************* * - * @brief Builds Special cell list for UE Setup Request + * @brief Free the memory allocated for UE Setup response * * @details * - * Function : BuildSplCellList + * Function : FreeUeSetupRsp * - * Functionality: Constructs the Special Cell list for UESetReq - * - * @params[in] SCell_ToBeSetup_List_t *spCellLst + * Functionality: + * Free the memory allocated for UE Setup response * + * @params[in] F1AP PDU for UE setup response * @return ROK - success * RFAILED - failure * * ****************************************************************/ -uint8_t BuildSplCellList(SCell_ToBeSetup_List_t *spCellLst) +void FreeUeSetupRsp(F1AP_PDU_t *f1apMsg) { - uint8_t cellCnt; - uint8_t idx; - uint8_t ret; - cellCnt = 1; - spCellLst->list.count = cellCnt; - spCellLst->list.size = cellCnt * sizeof(SCell_ToBeSetup_ItemIEs_t *); - DU_ALLOC(spCellLst->list.array,spCellLst->list.size); - if(spCellLst->list.array == NULLP) - { - return RFAILED; - } - for(idx=0; idxlist.array[idx],sizeof(SCell_ToBeSetup_ItemIEs_t)); - if(spCellLst->list.array[idx] == NULLP) - { - return RFAILED; - } - } - idx = 0; - spCellLst->list.array[idx]->id = ProtocolIE_ID_id_SCell_ToBeSetup_Item; - spCellLst->list.array[idx]->criticality = Criticality_ignore; - spCellLst->list.array[idx]->value.present =\ - SCell_ToBeSetup_ItemIEs__value_PR_SCell_ToBeSetup_Item; - /* Special Cell ID -NRCGI */ - ret = BuildNrcgi(&spCellLst->list.array[idx]->value.choice.SCell_ToBeSetup_Item.sCell_ID); - if(ret != ROK) - { - return RFAILED; - } - /*Special Cell Index*/ - spCellLst->list.array[idx]->value.choice.SCell_ToBeSetup_Item.sCellIndex = 1; - return ROK; -}/* End of BuildSplCellList*/ + uint8_t idx; + UEContextSetupResponse_t *ueSetRsp; -/******************************************************************* - * - * @brief Builds SRBS to be setup - * - * @details - * - * Function : BuildSRBSetup - * - * Functionality: Constructs the SRB's for UESetReq - * - * @params[in] SRBs_ToBeSetup_List_t *srbSet - * - * @return ROK - success - * RFAILED - failure - * - * ****************************************************************/ -uint8_t BuildSRBSetup(SRBs_ToBeSetup_List_t *srbSet) -{ - uint8_t idx; - uint8_t srbCnt; - srbCnt = 1; - srbSet->list.count = srbCnt; - srbSet->list.size = srbCnt*sizeof(SRBs_ToBeSetup_ItemIEs_t *); - DU_ALLOC(srbSet->list.array,srbSet->list.size); - if(srbSet->list.array == NULLP) - { - return RFAILED; - } - for(idx=0; idxlist.array[idx],sizeof(SRBs_ToBeSetup_ItemIEs_t)); - if(srbSet->list.array[idx] == NULLP) - { - return RFAILED; - } - } - idx = 0; - srbSet->list.array[idx]->id = ProtocolIE_ID_id_SRBs_ToBeSetup_Item; - srbSet->list.array[idx]->criticality = Criticality_ignore; - srbSet->list.array[idx]->value.present = \ - SRBs_ToBeSetup_ItemIEs__value_PR_SRBs_ToBeSetup_Item; - srbSet->list.array[idx]->value.choice.SRBs_ToBeSetup_Item.sRBID = 2; - return ROK; -}/* End of BuildSRBSetup*/ + if(f1apMsg) + { + if(f1apMsg->choice.successfulOutcome) + { + ueSetRsp = &f1apMsg->choice.successfulOutcome->value.choice.\ + UEContextSetupResponse; + if(ueSetRsp->protocolIEs.list.array) + { + for(idx = 0; idx < ueSetRsp->protocolIEs.list.size; idx++) + { + DU_FREE(ueSetRsp->protocolIEs.list.array[idx],\ + sizeof(UEContextSetupResponseIEs_t)); + } + DU_FREE(ueSetRsp->protocolIEs.list.array, \ + ueSetRsp->protocolIEs.list.size); + } + DU_FREE(f1apMsg->choice.successfulOutcome, sizeof(SuccessfulOutcome_t)); + } + DU_FREE(f1apMsg, sizeof(F1AP_PDU_t)); + } +} /******************************************************************* * - * @brief Builds QOS Info for DRB Setum Item + * @brief Builds and sends the UE Setup Response * * @details * - * Function : BuildQOSInfo + * Function : BuildAndSendUESetRsp * - * Functionality: Constructs the QOS Info for DRB Setup Item + * Functionality: Constructs the UE Setup Response and sends + * it to the DU through SCTP. * - * @params[in] QoSInformation_t *qosinfo + * @params[in] * * @return ROK - success * RFAILED - failure * * ****************************************************************/ -uint8_t BuildQOSInfo(QoSFlowLevelQoSParameters_t *drbQos) +uint8_t BuildAndSendUESetRsp() { - /* NonDynamic5QIDescriptor */ - drbQos->qoS_Characteristics.present = QoS_Characteristics_PR_non_Dynamic_5QI; - DU_ALLOC(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI,sizeof(NonDynamic5QIDescriptor_t)); - if(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI == NULLP) - { - return RFAILED; - } - /*FiveQI*/ - drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->fiveQI = 0; - /*AveragingWindow*/ - DU_ALLOC(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow,\ - sizeof(AveragingWindow_t)); - if(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow == \ - NULLP) - { - return RFAILED; - } - *(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow) = 0; - /*MaxDataBurstVolume*/ - DU_ALLOC(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume,\ - sizeof(MaxDataBurstVolume_t)); - if(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume == \ - NULLP) - { - return RFAILED; - } - *(drbQos->qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume) = 0; + uint8_t ret = RFAILED; + uint8_t elementCnt; + uint8_t idx; + F1AP_PDU_t *f1apMsg = NULL; + UEContextSetupResponse_t *ueSetRsp; + asn_enc_rval_t encRetVal; /* Encoder return value */ - /*nRGRAN Allocation Retention Priority*/ - drbQos->nGRANallocationRetentionPriority.priorityLevel = \ - PriorityLevel_highest; - drbQos->nGRANallocationRetentionPriority.pre_emptionCapability = \ - Pre_emptionCapability_may_trigger_pre_emption; - drbQos->nGRANallocationRetentionPriority.pre_emptionVulnerability = \ - Pre_emptionVulnerability_not_pre_emptable; + DU_LOG("\n F1AP : Building UE Context Setup Response\n"); - /* TO DO: GBR_QoSFlowInformation */ - return ROK; -}/*End of BuildQOSInfo*/ + while(true) + { + DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t)); + if(f1apMsg == NULLP) + { + DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed"); + break; + } -/******************************************************************* - * - * @brief Builds SNSSAI - * - * @details - * - * Function : BuildSNSSAI - * - * Functionality: Constructs the SNSSAI For DRB list - * - * @params[in] SNSSAI_t *snssai - * - * @return ROK - success - * RFAILED - failure - * - * ****************************************************************/ -uint8_t BuildSNSSAI(SNSSAI_t *snssai) -{ - /*SNSSAI*/ - /*ssT*/ - snssai->sST.size = sizeof(uint8_t); - DU_ALLOC(snssai->sST.buf,snssai->sST.size); - if(snssai->sST.buf == NULLP) - { - return RFAILED; - } - snssai->sST.buf[0] = 3; - /*sD*/ - DU_ALLOC(snssai->sD,sizeof(OCTET_STRING_t)); - if(snssai->sD == NULLP) - { - return RFAILED; - } - snssai->sD->size = 3*sizeof(uint8_t); - DU_ALLOC(snssai->sD->buf,snssai->sD->size); - if(snssai->sD->buf == NULLP) - { - return RFAILED; - } - snssai->sD->buf[0] = 3; - snssai->sD->buf[1] = 6; - snssai->sD->buf[2] = 9; - return ROK; -}/*End of BuildSNSSAI*/ + f1apMsg->present = F1AP_PDU_PR_successfulOutcome; + DU_ALLOC(f1apMsg->choice.successfulOutcome, + sizeof(SuccessfulOutcome_t)); + if(f1apMsg->choice.successfulOutcome == NULLP) + { + DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed"); + break; + } -/******************************************************************* - * - * @brief Builds the flow map. - * - * @details - * - * Function : BuildFlowsMap - * - * Functionality: Constructs the flowmap For DRB list - * - * @params[in] Flows_Mapped_To_DRB_List_t *flowMap - * - * @return ROK - success - * RFAILED - failure - * - * ****************************************************************/ -uint8_t BuildFlowsMap(Flows_Mapped_To_DRB_List_t *flowMap) -{ - uint8_t ret; - uint8_t idx; - uint8_t flowCnt; - flowCnt = 1; - flowMap->list.count = flowCnt; - flowMap->list.size = flowCnt * sizeof(Flows_Mapped_To_DRB_Item_t *); - DU_ALLOC(flowMap->list.array,flowMap->list.size); - if(flowMap->list.array == NULLP) - { - return RFAILED; - } - for(idx=0; idxlist.array[idx],sizeof(Flows_Mapped_To_DRB_Item_t)); - if(flowMap->list.array[idx] == NULLP) - { - return RFAILED; - } - } - idx = 0; - flowMap->list.array[idx]->qoSFlowIdentifier = 0; - ret = BuildQOSInfo(&flowMap->list.array[idx]->qoSFlowLevelQoSParameters); - if(ret != ROK) - { - return RFAILED; - } - return ROK; -}/*End of BuildFlowsMap*/ + f1apMsg->choice.successfulOutcome->procedureCode = \ + ProcedureCode_id_UEContextSetup; + f1apMsg->choice.successfulOutcome->criticality = Criticality_reject; + f1apMsg->choice.successfulOutcome->value.present = \ + SuccessfulOutcome__value_PR_UEContextSetupResponse; + + ueSetRsp = + &f1apMsg->choice.successfulOutcome->value.choice.UEContextSetupResponse; + elementCnt = 2; + ueSetRsp->protocolIEs.list.count = elementCnt; + ueSetRsp->protocolIEs.list.size = \ + elementCnt * sizeof(UEContextSetupResponse_t *); + + /* Initialize the UESetup members */ + DU_ALLOC(ueSetRsp->protocolIEs.list.array, \ + ueSetRsp->protocolIEs.list.size); + if(ueSetRsp->protocolIEs.list.array == NULLP) + { + DU_LOG(" F1AP : Memory allocation for UE Setup Response failed"); + break; + } -/******************************************************************* - * - * @brief Builds the Uplink Tunnel Info - * - * @details - * - * Function : BuildULTnlInfo - * - * Functionality: Constructs the UL TnlInfo For DRB list - * - * @params[in] ULUPTNLInformation_ToBeSetup_List_t *ulInfo - * - * @return ROK - success - * RFAILED - failure - * - * ****************************************************************/ -uint8_t BuildULTnlInfo(ULUPTNLInformation_ToBeSetup_List_t *ulInfo) -{ - uint8_t idx; - uint8_t ulCnt; - ulCnt = 1; - ulInfo->list.count = ulCnt; - ulInfo->list.size = ulCnt * sizeof(ULUPTNLInformation_ToBeSetup_Item_t *); - DU_ALLOC(ulInfo->list.array,ulInfo->list.size); - if(ulInfo->list.array == NULLP) - { - return RFAILED; - } - for(idx=0; idxlist.array[idx],sizeof(ULUPTNLInformation_ToBeSetup_Item_t)); - if(ulInfo->list.array[idx] == NULLP) - { - return RFAILED; - } - } - idx = 0; - ulInfo->list.array[idx]->uLUPTNLInformation.present = \ - UPTransportLayerInformation_PR_gTPTunnel; - /*GTP TUNNEL*/ - DU_ALLOC(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel,\ - sizeof(GTPTunnel_t)); - if(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel == NULLP) - { - return RFAILED; - } - ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\ - transportLayerAddress.size = 4*sizeof(uint8_t); - DU_ALLOC(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\ - transportLayerAddress.buf,ulInfo->list.array[idx]->\ - uLUPTNLInformation.choice.gTPTunnel->transportLayerAddress.size); - if(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\ - transportLayerAddress.buf == NULLP) - { - return RFAILED; - } - ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\ - transportLayerAddress.buf[0] = 4; - ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\ - transportLayerAddress.buf[1] = 4; - ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\ - transportLayerAddress.buf[2] = 4; - ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\ - transportLayerAddress.buf[3] = 5; - ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\ - transportLayerAddress.bits_unused = 0; - /*GTP TEID*/ - ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.size\ - = 4 * sizeof(uint8_t); - DU_ALLOC(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\ - gTP_TEID.buf,ulInfo->list.array[idx]->uLUPTNLInformation.choice.\ - gTPTunnel->gTP_TEID.size); - if(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.buf\ - == NULLP) - { - return RFAILED; - } - ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\ - gTP_TEID.buf[0] = 11; - ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\ - gTP_TEID.buf[1] = 0; - ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\ - gTP_TEID.buf[2] = 0; - ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\ - gTP_TEID.buf[3] = 1; + for(idx=0; idxprotocolIEs.list.array[idx],\ + sizeof(UEContextSetupResponseIEs_t)); + if(ueSetRsp->protocolIEs.list.array[idx] == NULLP) + { + DU_LOG(" F1AP : Memory allocation for UE Setup Response failed"); + break; + } + } - return ROK; -}/*End of BuildULTnlInfo*/ + idx = 0; -/******************************************************************* - * - * @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; idxlist.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; cellidxlist.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; srbidxlist.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; ulidxlist.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; drbidxlist.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;flowidxqoSInformation.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; ieIdprotocolIEs.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)); - } - } + /*GNB CU UE F1AP ID*/ + ueSetRsp->protocolIEs.list.array[idx]->id = \ + ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID; + ueSetRsp->protocolIEs.list.array[idx]->criticality = Criticality_reject; + ueSetRsp->protocolIEs.list.array[idx]->value.present = \ + UEContextSetupResponseIEs__value_PR_GNB_CU_UE_F1AP_ID; + ueSetRsp->protocolIEs.list.array[idx]->value.choice.GNB_CU_UE_F1AP_ID = CU_ID; -/******************************************************************* - * - * @brief Builds and sends the UE Setup Request - * - * @details - * - * Function : BuildAndSendUESetReq - * - * Functionality: Constructs the UE Setup Request and sends - * it to the CU through SCTP. - * - * @params[in] - * - * @return ROK - success - * RFAILED - failure - * - * ****************************************************************/ -uint8_t BuildAndSendUESetReq() -{ - - uint8_t elementCnt; - uint8_t idx; - uint8_t idx1; - F1AP_PDU_t *f1apMsg = NULL; - UEContextSetupRequest_t *ueSetReq; - asn_enc_rval_t encRetVal; /* Encoder return value */ - uint8_t ret= RFAILED; - uint8_t ret1; - while(1) - { - DU_LOG("\n F1AP : Building UE Context Setup Request\n"); - - DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t)); - if(f1apMsg == NULLP) - { - DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed"); - break; - } + /*GNB DU UE F1AP ID*/ + idx++; + ueSetRsp->protocolIEs.list.array[idx]->id = \ + ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID; + ueSetRsp->protocolIEs.list.array[idx]->criticality = Criticality_reject; + ueSetRsp->protocolIEs.list.array[idx]->value.present = \ + UEContextSetupResponseIEs__value_PR_GNB_DU_UE_F1AP_ID; + ueSetRsp->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID = DU_ID; - f1apMsg->present = F1AP_PDU_PR_initiatingMessage; - DU_ALLOC(f1apMsg->choice.initiatingMessage,sizeof(InitiatingMessage_t)); - if(f1apMsg->choice.initiatingMessage == NULLP) - { - DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed"); - break; - } - - f1apMsg->choice.initiatingMessage->procedureCode = \ - ProcedureCode_id_UEContextSetup; - f1apMsg->choice.initiatingMessage->criticality = Criticality_reject; - f1apMsg->choice.initiatingMessage->value.present = \ - InitiatingMessage__value_PR_UEContextSetupRequest; - ueSetReq = - &f1apMsg->choice.initiatingMessage->value.choice.UEContextSetupRequest; - elementCnt = 9; - ueSetReq->protocolIEs.list.count = elementCnt; - ueSetReq->protocolIEs.list.size = \ - elementCnt * sizeof(UEContextSetupRequestIEs_t *); - - /* Initialize the UESetup members */ - DU_ALLOC(ueSetReq->protocolIEs.list.array,ueSetReq->protocolIEs.list.size); - - if(ueSetReq->protocolIEs.list.array == NULLP) - { - DU_LOG(" F1AP : Memory allocation for UE Context SetupRequest failed"); - break; - } - for(idx1=0; idx1protocolIEs.list.array[idx1],sizeof(UEContextSetupRequestIEs_t)); - if(ueSetReq->protocolIEs.list.array[idx1] == NULLP) - { - break; - } - } - - idx = 0; - - /*GNB CU UE F1AP ID*/ - ueSetReq->protocolIEs.list.array[idx]->id = \ - ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID; - ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject; - ueSetReq->protocolIEs.list.array[idx]->value.present = \ - UEContextSetupRequestIEs__value_PR_GNB_CU_UE_F1AP_ID; - ueSetReq->protocolIEs.list.array[idx]->value.choice.GNB_CU_UE_F1AP_ID = CU_ID; - - /*GNB DU UE F1AP ID*/ - idx++; - ueSetReq->protocolIEs.list.array[idx]->id = \ - ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID; - ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_ignore; - ueSetReq->protocolIEs.list.array[idx]->value.present = \ - UEContextSetupRequestIEs__value_PR_GNB_DU_UE_F1AP_ID; - ueSetReq->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID = DU_ID; - - /*Special Cell ID*/ - idx++; - ueSetReq->protocolIEs.list.array[idx]->id = \ - ProtocolIE_ID_id_SpCell_ID; - ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject; - ueSetReq->protocolIEs.list.array[idx]->value.present = \ - UEContextSetupRequestIEs__value_PR_NRCGI; - Nrcgiret = BuildNrcgi(&ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI); - if(Nrcgiret != ROK) - { - break; - } - - /*Served Cell Index*/ - idx++; - ueSetReq->protocolIEs.list.array[idx]->id = \ - ProtocolIE_ID_id_ServCellIndex; - ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject; - ueSetReq->protocolIEs.list.array[idx]->value.present = \ - UEContextSetupRequestIEs__value_PR_ServCellIndex; - ueSetReq->protocolIEs.list.array[idx]->value.choice.ServCellIndex = \ - CELL_INDEX; - - /*CellULConfigured*/ - idx++; - ueSetReq->protocolIEs.list.array[idx]->id = \ - ProtocolIE_ID_id_SpCellULConfigured; - ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_ignore; - ueSetReq->protocolIEs.list.array[idx]->value.present = \ - UEContextSetupRequestIEs__value_PR_CellULConfigured; - ueSetReq->protocolIEs.list.array[idx]->value.choice.CellULConfigured = \ - CellULConfigured_none; - - - /*CUtoDURRCContainer*/ - idx++; - ueSetReq->protocolIEs.list.array[idx]->id = \ - ProtocolIE_ID_id_CUtoDURRCInformation; - ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject; - ueSetReq->protocolIEs.list.array[idx]->value.present = \ - UEContextSetupRequestIEs__value_PR_CUtoDURRCInformation; - - /*Special Cells to be SetupList*/ - idx++; - ueSetReq->protocolIEs.list.array[idx]->id = \ - ProtocolIE_ID_id_SCell_ToBeSetup_List; - ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_ignore; - ueSetReq->protocolIEs.list.array[idx]->value.present = \ - UEContextSetupRequestIEs__value_PR_SCell_ToBeSetup_List; - SplCellListret = BuildSplCellList(&ueSetReq->protocolIEs.list.array[idx]->value.choice.SCell_ToBeSetup_List); - if(SplCellListret != ROK) - { - break; - } - /*SRBs To Be Setup List*/ - idx++; - ueSetReq->protocolIEs.list.array[idx]->id = \ - ProtocolIE_ID_id_SRBs_ToBeSetup_List; - ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject; - ueSetReq->protocolIEs.list.array[idx]->value.present = \ - UEContextSetupRequestIEs__value_PR_SRBs_ToBeSetup_List; - SRBSetupret = BuildSRBSetup(&ueSetReq->protocolIEs.list.array[idx]->value.choice.SRBs_ToBeSetup_List); - if(SRBSetupret != ROK) - { - break; - } - /*DRBs to Be Setup List*/ - idx++; - ueSetReq->protocolIEs.list.array[idx]->id = \ - ProtocolIE_ID_id_DRBs_ToBeSetup_List; - ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject; - ueSetReq->protocolIEs.list.array[idx]->value.present = \ - UEContextSetupRequestIEs__value_PR_DRBs_ToBeSetup_List; - ret1 = BuildDRBSetup(&ueSetReq->protocolIEs.list.array[idx]->value.choice.DRBs_ToBeSetup_List); - if(ret1 != ROK) - { - break; - } - - xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg); + xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg); - /* Encode the F1SetupRequest type as APER */ - cmMemset((uint8_t *)encBuf, 0, ENC_BUF_MAX_LEN); - encBufSize = 0; - encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\ - encBuf); - /* Encode results */ - if(encRetVal.encoded == ENCODE_FAIL) - { - DU_LOG( "\n F1AP : Could not encode UE Context Setup Request structure (at %s)\n",\ - encRetVal.failed_type ? encRetVal.failed_type->name : "unknown"); - break; - } - else - { - DU_LOG("\n F1AP : Created APER encoded buffer for UE Context Setup Request\n"); - for(int i=0; i< encBufSize; i++) - { - printf("%x",encBuf[i]); - } - } + /* Encode the UE context setup response type as APER */ + memset((uint8_t *)encBuf, 0, ENC_BUF_MAX_LEN); + encBufSize = 0; + encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\ + encBuf); + /* Encode results */ + if(encRetVal.encoded == ENCODE_FAIL) + { + DU_LOG( "\n F1AP : Could not encode UE Context Setup Request structure (at %s)\n",\ + encRetVal.failed_type ? encRetVal.failed_type->name : "unknown"); + break; + } + else + { + DU_LOG("\n F1AP : Created APER encoded buffer for UE Context Setup Request\n"); + for(int i=0; i< encBufSize; i++) + { + printf("%x",encBuf[i]); + } + } - /* Sending msg */ - if(SendF1APMsg(DU_APP_MEM_REGION,DU_POOL) != ROK) - { - DU_LOG("\n F1AP : Sending UE Context Setup Request Failed"); - break; - } - ret = ROK; - break; + /* Sending msg */ + if(SendF1APMsg(DU_APP_MEM_REGION,DU_POOL) != ROK) + { + DU_LOG("\n F1AP : Sending UE Context Setup Request Failed"); + break; + } + ret = ROK; + break; } - FreeUESetReq(f1apMsg); - return ret; -}/* End of BuildAndSendUESetReq*/ + FreeUeSetupRsp(f1apMsg); + return ret;; +}/* End of BuildAndSendUESetRsp */ + /******************************************************************* * @@ -6247,18 +5436,20 @@ void F1APMsgHdlr(Buffer *mBuf) F1AP_PDU_t *f1apMsg; asn_dec_rval_t rval; /* Decoder return value */ F1AP_PDU_t f1apasnmsg ; - + DU_LOG("\nF1AP : Received F1AP message buffer"); - SPrntMsg(mBuf, 0,0); + ODU_PRINT_MSG(mBuf, 0,0); /* Copy mBuf into char array to decode it */ - SFndLenMsg(mBuf, &recvBufLen); - if(SGetSBuf(DFLT_REGION, DFLT_POOL, (Data **)&recvBuf, (Size)recvBufLen) != ROK) + ODU_FIND_MSG_LEN(mBuf, &recvBufLen); + DU_ALLOC(recvBuf, (Size)recvBufLen); + + if(recvBuf == NULLP) { DU_LOG("\nF1AP : Memory allocation failed"); return; } - if(SCpyMsgFix(mBuf, 0, recvBufLen, (Data *)recvBuf, ©Cnt) != ROK) + if(ODU_COPY_MSG_TO_FIX_BUF(mBuf, 0, recvBufLen, (Data *)recvBuf, ©Cnt) != ROK) { DU_LOG("\nF1AP : Failed while copying %d", copyCnt); return; @@ -6267,15 +5458,16 @@ void F1APMsgHdlr(Buffer *mBuf) printf("\nF1AP : Received flat buffer to be decoded : "); for(i=0; i< recvBufLen; i++) { - printf("%x",recvBuf[i]); + printf("%x",recvBuf[i]); } /* Decoding flat buffer into F1AP messsage */ f1apMsg = &f1apasnmsg; memset(f1apMsg, 0, sizeof(F1AP_PDU_t)); - + rval = aper_decode(0, &asn_DEF_F1AP_PDU, (void **)&f1apMsg, recvBuf, recvBufLen, 0, 0); - SPutSBuf(DFLT_REGION, DFLT_POOL, (Data *)recvBuf, (Size)recvBufLen); + DU_FREE(recvBuf, (Size)recvBufLen); + if(rval.code == RC_FAIL || rval.code == RC_WMORE) { DU_LOG("\nF1AP : ASN decode failed"); @@ -6287,59 +5479,64 @@ void F1APMsgHdlr(Buffer *mBuf) switch(f1apMsg->present) { case F1AP_PDU_PR_successfulOutcome: - { - switch(f1apMsg->choice.successfulOutcome->value.present) - { - case SuccessfulOutcome__value_PR_F1SetupResponse: - { + { + switch(f1apMsg->choice.successfulOutcome->value.present) + { + case SuccessfulOutcome__value_PR_F1SetupResponse: + { #ifndef ODU_TEST_STUB - procF1SetupRsp(f1apMsg); + procF1SetupRsp(f1apMsg); #endif - break; - } - - case SuccessfulOutcome__value_PR_GNBDUConfigurationUpdateAcknowledge: - { - procGNBDUCfgUpdAck(f1apMsg); - break; - } + break; + } - default: - { - DU_LOG("\nF1AP : Invalid type of successful outcome [%d]", f1apMsg->choice.successfulOutcome->value.present); - return; - } - }/* End of switch(successfulOutcome) */ - break; - } - case F1AP_PDU_PR_initiatingMessage: - { - switch(f1apMsg->choice.initiatingMessage->value.present) - { - case InitiatingMessage__value_PR_DLRRCMessageTransfer: - { - procDlRrcMsgTrans(f1apMsg); - break; - } + case SuccessfulOutcome__value_PR_GNBDUConfigurationUpdateAcknowledge: + { + procGNBDUCfgUpdAck(f1apMsg); + break; + } - default: - { - DU_LOG("\nF1AP : Invalid type of initiating message[%d]", - f1apMsg->choice.initiatingMessage->value.present); - return; - } - }/* End of switch(initiatingMessage) */ - break; - } + default: + { + DU_LOG("\nF1AP : Invalid type of successful outcome [%d]", f1apMsg->choice.successfulOutcome->value.present); + return; + } + }/* End of switch(successfulOutcome) */ + break; + } + case F1AP_PDU_PR_initiatingMessage: + { + switch(f1apMsg->choice.initiatingMessage->value.present) + { + case InitiatingMessage__value_PR_DLRRCMessageTransfer: + { + procDlRrcMsgTrans(f1apMsg); + break; + } + case InitiatingMessage__value_PR_UEContextSetupRequest: + { + procUeContextSetupReq(f1apMsg); + break; + } + + default: + { + DU_LOG("\nF1AP : Invalid type of initiating message[%d]", + f1apMsg->choice.initiatingMessage->value.present); + return; + } + }/* End of switch(initiatingMessage) */ + break; + } default: - { - DU_LOG("\nF1AP : Invalid type of f1apMsg->present [%d]",f1apMsg->present); - return; - } + { + DU_LOG("\nF1AP : Invalid type of f1apMsg->present [%d]",f1apMsg->present); + return; + } }/* End of switch(f1apMsg->present) */ - + } /* End of F1APMsgHdlr */ /**********************************************************************