X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fcu_stub%2Fcu_f1ap_msg_hdl.c;h=231746662dfb64b5ca0b6bd92c8fc06eeef7ac91;hb=6eda577056855df28788aef28ee0a29c9128d1f5;hp=fd8dac49f4157cd9407dd0b0fd43f616e2f8def1;hpb=67b89506e1d6a7a775d5095f390d5dcb610deb86;p=o-du%2Fl2.git diff --git a/src/cu_stub/cu_f1ap_msg_hdl.c b/src/cu_stub/cu_f1ap_msg_hdl.c index fd8dac49f..231746662 100644 --- a/src/cu_stub/cu_f1ap_msg_hdl.c +++ b/src/cu_stub/cu_f1ap_msg_hdl.c @@ -19,13 +19,14 @@ /* This file contains F1AP message handler functions */ #include "common_def.h" #include "OCTET_STRING.h" -#include "BIT_STRING.h" -#include "odu_common_codec.h" #include "cu_stub_sctp.h" +#include "cu_stub_egtp.h" #include "cu_f1ap_msg_hdl.h" -#include "legtp.h" -/*header files needed for Ue Context Setup */ -#include +#include "cu_stub.h" + +#include "BIT_STRING.h" +#include "odu_common_codec.h" +#include "ProtocolIE-Field.h" #include "ProtocolExtensionField.h" #include "ProtocolIE-SingleContainer.h" #include "F1AP-PDU.h" @@ -74,6 +75,10 @@ #include "SRS-ResourceSet.h" #include "SRS-Config.h" #include "PUCCH-Config.h" +#include "PUCCH-ResourceSet.h" +#include "PUCCH-Resource.h" +#include "PUCCH-format1.h" +#include "PUCCH-FormatConfig.h" #include "BWP-UplinkDedicated.h" #include "PUSCH-ServingCellConfig.h" #include "UplinkConfig.h" @@ -88,6 +93,18 @@ #include "UPTransportLayerInformation.h" #include "GTPTunnel.h" #include "QoSInformation.h" +#include "Cells-to-be-Activated-List.h" +#include "DL-CCCH-Message.h" +#include "SRB-ToAddModList.h" +#include "SRB-ToAddMod.h" +#include "RRCSetup-IEs.h" +#include "RRCSetup.h" +#include "DL-DCCH-Message.h" +#include "RRCReconfiguration-IEs.h" +#include "RRCReconfiguration.h" +#include "DRB-ToAddModList.h" +#include "DRB-ToAddMod.h" +#include "SDAP-Config.h" /* MACRO for CUtoDURRCInformation */ #define CELL_GRP_ID 1 @@ -120,8 +137,8 @@ #define PDSCH_MAPPING_TYPE_B 1 /* MACRO Define for PUSCH Configuration */ -#define PUSCH_K2_CFG1 3 -#define PUSCH_K2_CFG2 4 +#define PUSCH_K2_CFG1 1 +#define PUSCH_K2_CFG2 2 #define PUSCH_MSG3_DELTA_PREAMBLE 0 #define PUSCH_P0_NOMINAL_WITH_GRANT -70 @@ -279,7 +296,7 @@ S16 BuildNrCellId(BIT_STRING_t *nrcell) * RFAILED - failure * * ****************************************************************/ -S16 BuildAndSendF1SetupRsp() +S16 BuildAndSendF1SetupRsp(BIT_STRING_t *nrcellId) { uint8_t idx,ieIdx; uint8_t elementCnt,cellCnt; @@ -497,7 +514,7 @@ S16 BuildAndSendF1SetupRsp() CU_FREE(f1apMsg, sizeof(F1AP_PDU_t)); return RFAILED; } - BuildNrCellId(&(cellToActivate->list.array[0]->value.choice.Cells_to_be_Activated_List_Item.nRCGI.nRCellIdentity)); + memcpy(&cellToActivate->list.array[0]->value.choice.Cells_to_be_Activated_List_Item.nRCGI.nRCellIdentity, nrcellId, sizeof(BIT_STRING_t)); /* RRC Version */ idx++; f1SetupRsp->protocolIEs.list.array[idx]->id = \ @@ -1813,7 +1830,7 @@ uint8_t procInitULRRCMsg(F1AP_PDU_t *f1apMsg) uint8_t idx, rrcMsgType, gnbDuUeF1apId; uint8_t ret =ROK; InitialULRRCMessageTransfer_t *initULRRCMsg = NULLP; - DU_LOG("\nINFO --> F1AP : filling the required values in DB in procInitULRRCMsg"); + DU_LOG("\nINFO --> F1AP : filling the required values in DB in procInitULRRCMsg"); initULRRCMsg = &f1apMsg->choice.initiatingMessage->value.choice.InitialULRRCMessageTransfer; @@ -1890,7 +1907,7 @@ uint8_t BuildNrcgi(NRCGI_t *nrcgi) uint8_t ret; uint8_t unused_bits = 4; uint8_t byteSize = 5; - uint8_t val = 1; + uint8_t val = 16; /* Allocate Buffer Memory */ nrcgi->pLMN_Identity.size = 3 * sizeof(uint8_t); CU_ALLOC(nrcgi->pLMN_Identity.buf, nrcgi->pLMN_Identity.size); @@ -1910,16 +1927,7 @@ uint8_t BuildNrcgi(NRCGI_t *nrcgi) { return RFAILED; } -#if 0 - ret = fillBitString(&nrcgi->nRCellIdentity, unused, byteSize, val); - if(ret != ROK) - { - return RFAILED; - } -#endif - memset(nrcgi->nRCellIdentity.buf, 0, nrcgi->nRCellIdentity.size); - nrcgi->nRCellIdentity.buf[0] |= val; - nrcgi->nRCellIdentity.bits_unused = unused_bits; + fillBitString(&nrcgi->nRCellIdentity, unused_bits, byteSize, val); return ROK; } @@ -3825,7 +3833,63 @@ uint8_t BuildBWPUlDedPuschCfg(PUSCH_Config_t *puschCfg) uint8_t BuildBWPUlDedPucchCfg(PUCCH_Config_t *pucchCfg) { uint8_t arrIdx, elementCnt; + uint8_t rsrcIdx, rsrcSetIdx; + PUCCH_ResourceSet_t *rsrcSet = NULLP; + PUCCH_Resource_t *rsrc = NULLP; + + //RESOURCE SET + elementCnt = 1; + CU_ALLOC(pucchCfg->resourceSetToAddModList, sizeof(struct PUCCH_Config__resourceSetToAddModList)); + pucchCfg->resourceSetToAddModList->list.count = elementCnt; + pucchCfg->resourceSetToAddModList->list.size = elementCnt * sizeof(PUCCH_ResourceSet_t *); + CU_ALLOC(pucchCfg->resourceSetToAddModList->list.array, pucchCfg->resourceSetToAddModList->list.size); + for(rsrcSetIdx=0; rsrcSetIdx < pucchCfg->resourceSetToAddModList->list.count; rsrcSetIdx++) + { + CU_ALLOC(pucchCfg->resourceSetToAddModList->list.array[rsrcSetIdx], sizeof(PUCCH_ResourceSet_t)); + } + rsrcSetIdx = 0; + rsrcSet = pucchCfg->resourceSetToAddModList->list.array[rsrcSetIdx]; + rsrcSet->pucch_ResourceSetId = 1; + elementCnt = 1; + rsrcSet->resourceList.list.count = elementCnt; + rsrcSet->resourceList.list.size = elementCnt * sizeof(PUCCH_ResourceId_t *); + CU_ALLOC(rsrcSet->resourceList.list.array, rsrcSet->resourceList.list.size); + for(rsrcIdx=0; rsrcIdx < rsrcSet->resourceList.list.count; rsrcIdx++) + { + CU_ALLOC(rsrcSet->resourceList.list.array[rsrcIdx], sizeof(PUCCH_ResourceId_t)); + } + rsrcIdx = 0; + *(rsrcSet->resourceList.list.array[rsrcIdx]) = 1; + //RESOURCE + elementCnt = 1; + CU_ALLOC(pucchCfg->resourceToAddModList, sizeof(struct PUCCH_Config__resourceToAddModList)); + pucchCfg->resourceToAddModList->list.count = elementCnt; + pucchCfg->resourceToAddModList->list.size = elementCnt * sizeof(PUCCH_Resource_t *); + CU_ALLOC(pucchCfg->resourceToAddModList->list.array, pucchCfg->resourceToAddModList->list.size); + for(rsrcIdx=0; rsrcIdx < pucchCfg->resourceToAddModList->list.count; rsrcIdx++) + { + CU_ALLOC(pucchCfg->resourceToAddModList->list.array[rsrcIdx], sizeof(PUCCH_Resource_t)); + } + rsrcIdx = 0; + rsrc = pucchCfg->resourceToAddModList->list.array[rsrcIdx]; + rsrc->pucch_ResourceId = 1; + rsrc->startingPRB = 0; + rsrc->format.present = PUCCH_Resource__format_PR_format1; + CU_ALLOC(rsrc->format.choice.format1, sizeof(PUCCH_format1_t)); + rsrc->format.choice.format1->initialCyclicShift = 0; + rsrc->format.choice.format1->nrofSymbols = 4; + rsrc->format.choice.format1->startingSymbolIndex = 0; + rsrc->format.choice.format1->timeDomainOCC = 0; + + //PUCCH Format 1 + CU_ALLOC(pucchCfg->format1, sizeof(struct PUCCH_Config__format1)); + pucchCfg->format1->present = PUCCH_Config__format1_PR_setup; + CU_ALLOC(pucchCfg->format1->choice.setup, sizeof(PUCCH_FormatConfig_t)); + CU_ALLOC(pucchCfg->format1->choice.setup->nrofSlots, sizeof(long)); + *(pucchCfg->format1->choice.setup->nrofSlots) = PUCCH_FormatConfig__nrofSlots_n4; + + //DL DATA TO UL ACK CU_ALLOC(pucchCfg->dl_DataToUL_ACK, sizeof(struct PUCCH_Config__dl_DataToUL_ACK)); if(pucchCfg->dl_DataToUL_ACK == NULLP) { @@ -3854,8 +3918,8 @@ uint8_t BuildBWPUlDedPucchCfg(PUCCH_Config_t *pucchCfg) } arrIdx = 0; - *(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx++]) = 1; - *(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx]) = 2; + *(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx++]) = 4; + *(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx]) = 5; return ROK; } @@ -5017,6 +5081,105 @@ void FreePuschTimeDomAllocList(PUSCH_Config_t *puschCfg) } } + +/******************************************************************* + * + * @brief Frees memory allocated for Dedicated PUCCH config + * + * @details + * + * Function : FreeBWPUlDedPucchCfg + * + * Functionality: Deallocating memory of Dedicated PUCCH cfg + * + * @params[in] BWP_UplinkDedicated__pucch_Config *ulBwpPucchCfg + * + * @return void + * + * ****************************************************************/ +void FreeBWPUlDedPucchCfg(struct BWP_UplinkDedicated__pucch_Config *ulBwpPucchCfg) +{ + uint8_t arrIdx, rsrcIdx, rsrcSetIdx; + PUCCH_Config_t *pucchCfg = NULLP; + PUCCH_ResourceSet_t *rsrcSet = NULLP; + PUCCH_Resource_t *rsrc = NULLP; + + if(ulBwpPucchCfg) + { + if(ulBwpPucchCfg->choice.setup) + { + pucchCfg = ulBwpPucchCfg->choice.setup; + + //Free resource set list + if(pucchCfg->resourceSetToAddModList) + { + if(pucchCfg->resourceSetToAddModList->list.array) + { + for(rsrcSetIdx=0; rsrcSetIdx < pucchCfg->resourceSetToAddModList->list.count; rsrcSetIdx++) + { + rsrcSet = pucchCfg->resourceSetToAddModList->list.array[rsrcSetIdx]; + if(rsrcSet->resourceList.list.array) + { + for(rsrcIdx=0; rsrcIdx < rsrcSet->resourceList.list.count; rsrcIdx++) + { + CU_FREE(rsrcSet->resourceList.list.array[rsrcIdx], sizeof(PUCCH_ResourceId_t)); + } + CU_FREE(rsrcSet->resourceList.list.array, rsrcSet->resourceList.list.size); + } + CU_FREE(pucchCfg->resourceSetToAddModList->list.array[rsrcSetIdx], sizeof(PUCCH_ResourceSet_t)); + } + CU_FREE(pucchCfg->resourceSetToAddModList->list.array, pucchCfg->resourceSetToAddModList->list.size); + } + CU_FREE(pucchCfg->resourceSetToAddModList, sizeof(struct PUCCH_Config__resourceSetToAddModList)); + } + + //Free resource list + if(pucchCfg->resourceToAddModList) + { + if(pucchCfg->resourceToAddModList->list.array) + { + for(rsrcIdx=0; rsrcIdx < pucchCfg->resourceToAddModList->list.count; rsrcIdx++) + { + rsrc = pucchCfg->resourceToAddModList->list.array[rsrcIdx]; + CU_FREE(rsrc->format.choice.format1, sizeof(PUCCH_format1_t)); + CU_FREE(pucchCfg->resourceToAddModList->list.array[rsrcIdx], sizeof(PUCCH_Resource_t)); + } + CU_FREE(pucchCfg->resourceToAddModList->list.array, pucchCfg->resourceToAddModList->list.size); + } + CU_FREE(pucchCfg->resourceToAddModList, sizeof(struct PUCCH_Config__resourceToAddModList)); + } + + //PUCCH Format 1 + if(pucchCfg->format1) + { + if(pucchCfg->format1->choice.setup) + { + CU_FREE(pucchCfg->format1->choice.setup->nrofSlots, sizeof(long)); + CU_FREE(pucchCfg->format1->choice.setup, sizeof(PUCCH_FormatConfig_t)); + } + CU_FREE(pucchCfg->format1, sizeof(struct PUCCH_Config__format1)); + } + + //DL DATA TO UL ACK + if(pucchCfg->dl_DataToUL_ACK) + { + if(pucchCfg->dl_DataToUL_ACK->list.array) + { + for(arrIdx = 0; arrIdx < pucchCfg->dl_DataToUL_ACK->list.count; arrIdx++) + { + CU_FREE(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx], sizeof(long)); + } + CU_FREE(pucchCfg->dl_DataToUL_ACK->list.array, pucchCfg->dl_DataToUL_ACK->list.size); + } + CU_FREE(pucchCfg->dl_DataToUL_ACK, sizeof(struct PUCCH_Config__dl_DataToUL_ACK)); + } + + CU_FREE(ulBwpPucchCfg->choice.setup, sizeof(PUCCH_Config_t)); + } + CU_FREE(ulBwpPucchCfg, sizeof(struct BWP_UplinkDedicated__pucch_Config)); + } +} + /******************************************************************* * * @brief Frees memory allocated for InitialUlBWP @@ -5042,114 +5205,116 @@ void FreeInitialUlBWP(BWP_UplinkDedicated_t *ulBwp) struct SRS_ResourceSet__srs_ResourceIdList *rsrcIdList = NULLP; struct SRS_Config__srs_ResourceToAddModList *resourceList = NULLP; + FreeBWPUlDedPucchCfg(ulBwp->pucch_Config); + if(ulBwp->pusch_Config) { if(ulBwp->pusch_Config->choice.setup) { - puschCfg=ulBwp->pusch_Config->choice.setup; - if(puschCfg->dataScramblingIdentityPUSCH) - { - if(puschCfg->dmrs_UplinkForPUSCH_MappingTypeA) - { - FreePuschTimeDomAllocList(puschCfg); - dmrsUlCfg=puschCfg->dmrs_UplinkForPUSCH_MappingTypeA; - if(dmrsUlCfg->choice.setup) - { - if(dmrsUlCfg->choice.setup->dmrs_AdditionalPosition) - { - if(dmrsUlCfg->choice.setup->transformPrecodingDisabled) - { - CU_FREE(dmrsUlCfg->choice.setup->transformPrecodingDisabled->scramblingID0,\ - sizeof(long)); - CU_FREE(dmrsUlCfg->choice.setup->transformPrecodingDisabled, - sizeof(struct DMRS_UplinkConfig__transformPrecodingDisabled)); - } - CU_FREE(dmrsUlCfg->choice.setup->dmrs_AdditionalPosition, - sizeof(long)); - } - CU_FREE(dmrsUlCfg->choice.setup,sizeof(DMRS_UplinkConfig_t)); - } - CU_FREE(puschCfg->dmrs_UplinkForPUSCH_MappingTypeA, \ - sizeof(struct PUSCH_Config__dmrs_UplinkForPUSCH_MappingTypeA)); - } - CU_FREE(puschCfg->dataScramblingIdentityPUSCH, sizeof(long)); - } - CU_FREE(ulBwp->pusch_Config->choice.setup, sizeof(PUSCH_Config_t)); + puschCfg=ulBwp->pusch_Config->choice.setup; + if(puschCfg->dataScramblingIdentityPUSCH) + { + if(puschCfg->dmrs_UplinkForPUSCH_MappingTypeA) + { + FreePuschTimeDomAllocList(puschCfg); + dmrsUlCfg=puschCfg->dmrs_UplinkForPUSCH_MappingTypeA; + if(dmrsUlCfg->choice.setup) + { + if(dmrsUlCfg->choice.setup->dmrs_AdditionalPosition) + { + if(dmrsUlCfg->choice.setup->transformPrecodingDisabled) + { + CU_FREE(dmrsUlCfg->choice.setup->transformPrecodingDisabled->scramblingID0,\ + sizeof(long)); + CU_FREE(dmrsUlCfg->choice.setup->transformPrecodingDisabled, + sizeof(struct DMRS_UplinkConfig__transformPrecodingDisabled)); + } + CU_FREE(dmrsUlCfg->choice.setup->dmrs_AdditionalPosition, + sizeof(long)); + } + CU_FREE(dmrsUlCfg->choice.setup,sizeof(DMRS_UplinkConfig_t)); + } + CU_FREE(puschCfg->dmrs_UplinkForPUSCH_MappingTypeA, \ + sizeof(struct PUSCH_Config__dmrs_UplinkForPUSCH_MappingTypeA)); + } + CU_FREE(puschCfg->dataScramblingIdentityPUSCH, sizeof(long)); + } + CU_FREE(ulBwp->pusch_Config->choice.setup, sizeof(PUSCH_Config_t)); } CU_FREE(ulBwp->pusch_Config, sizeof(struct BWP_UplinkDedicated__pusch_Config)); /* Free SRS-Config */ if(ulBwp->srs_Config) { - if(ulBwp->srs_Config->choice.setup) - { - srsCfg = ulBwp->srs_Config->choice.setup; + if(ulBwp->srs_Config->choice.setup) + { + srsCfg = ulBwp->srs_Config->choice.setup; - /* Free Resource Set to add/mod list */ - if(srsCfg->srs_ResourceSetToAddModList) - { - rsrcSetList = srsCfg->srs_ResourceSetToAddModList; - if(rsrcSetList->list.array) - { - rSetIdx = 0; + /* Free Resource Set to add/mod list */ + if(srsCfg->srs_ResourceSetToAddModList) + { + rsrcSetList = srsCfg->srs_ResourceSetToAddModList; + if(rsrcSetList->list.array) + { + rSetIdx = 0; - /* Free SRS resource Id list in this SRS resource set */ - if(rsrcSetList->list.array[rSetIdx]->srs_ResourceIdList) - { - rsrcIdList = rsrcSetList->list.array[rSetIdx]->srs_ResourceIdList; + /* Free SRS resource Id list in this SRS resource set */ + if(rsrcSetList->list.array[rSetIdx]->srs_ResourceIdList) + { + rsrcIdList = rsrcSetList->list.array[rSetIdx]->srs_ResourceIdList; - if(rsrcIdList->list.array) - { - for(rsrcIdx = 0; rsrcIdx < rsrcIdList->list.count; rsrcIdx++) - { - CU_FREE(rsrcIdList->list.array[rsrcIdx], sizeof(SRS_ResourceId_t)); - } - CU_FREE(rsrcIdList->list.array, rsrcIdList->list.size); - } - CU_FREE(rsrcSetList->list.array[rSetIdx]->srs_ResourceIdList,\ - sizeof(struct SRS_ResourceSet__srs_ResourceIdList)); - } + if(rsrcIdList->list.array) + { + for(rsrcIdx = 0; rsrcIdx < rsrcIdList->list.count; rsrcIdx++) + { + CU_FREE(rsrcIdList->list.array[rsrcIdx], sizeof(SRS_ResourceId_t)); + } + CU_FREE(rsrcIdList->list.array, rsrcIdList->list.size); + } + CU_FREE(rsrcSetList->list.array[rSetIdx]->srs_ResourceIdList,\ + sizeof(struct SRS_ResourceSet__srs_ResourceIdList)); + } - /* Free resource type info for this SRS resource set */ - CU_FREE(rsrcSetList->list.array[rSetIdx]->resourceType.choice.aperiodic, \ - sizeof(struct SRS_ResourceSet__resourceType__aperiodic)); + /* Free resource type info for this SRS resource set */ + CU_FREE(rsrcSetList->list.array[rSetIdx]->resourceType.choice.aperiodic, \ + sizeof(struct SRS_ResourceSet__resourceType__aperiodic)); - /* Free memory for each resource set */ - for(rSetIdx = 0; rSetIdx < rsrcSetList->list.count; rSetIdx++) - { - CU_FREE(rsrcSetList->list.array[rSetIdx], sizeof(SRS_ResourceSet_t)); - } - CU_FREE(rsrcSetList->list.array, rsrcSetList->list.size); - } - CU_FREE(srsCfg->srs_ResourceSetToAddModList, \ - sizeof(struct SRS_Config__srs_ResourceSetToAddModList)); - } + /* Free memory for each resource set */ + for(rSetIdx = 0; rSetIdx < rsrcSetList->list.count; rSetIdx++) + { + CU_FREE(rsrcSetList->list.array[rSetIdx], sizeof(SRS_ResourceSet_t)); + } + CU_FREE(rsrcSetList->list.array, rsrcSetList->list.size); + } + CU_FREE(srsCfg->srs_ResourceSetToAddModList, \ + sizeof(struct SRS_Config__srs_ResourceSetToAddModList)); + } - /* Free resource to add/modd list */ - if(srsCfg->srs_ResourceToAddModList) - { - resourceList = srsCfg->srs_ResourceToAddModList; - if(resourceList->list.array) - { - rsrcIdx = 0; - CU_FREE(resourceList->list.array[rsrcIdx]->transmissionComb.choice.n2,\ - sizeof(struct SRS_Resource__transmissionComb__n2)); - CU_FREE(resourceList->list.array[rsrcIdx]->resourceType.choice.aperiodic,\ - sizeof(struct SRS_Resource__resourceType__aperiodic)); + /* Free resource to add/modd list */ + if(srsCfg->srs_ResourceToAddModList) + { + resourceList = srsCfg->srs_ResourceToAddModList; + if(resourceList->list.array) + { + rsrcIdx = 0; + CU_FREE(resourceList->list.array[rsrcIdx]->transmissionComb.choice.n2,\ + sizeof(struct SRS_Resource__transmissionComb__n2)); + CU_FREE(resourceList->list.array[rsrcIdx]->resourceType.choice.aperiodic,\ + sizeof(struct SRS_Resource__resourceType__aperiodic)); - for(rsrcIdx = 0; rsrcIdx < resourceList->list.count; rsrcIdx++) - { - CU_FREE(resourceList->list.array[rsrcIdx], sizeof(SRS_Resource_t)); - } - CU_FREE(resourceList->list.array, resourceList->list.size); - } - CU_FREE(srsCfg->srs_ResourceToAddModList, \ - sizeof(struct SRS_Config__srs_ResourceToAddModList)); - } + for(rsrcIdx = 0; rsrcIdx < resourceList->list.count; rsrcIdx++) + { + CU_FREE(resourceList->list.array[rsrcIdx], sizeof(SRS_Resource_t)); + } + CU_FREE(resourceList->list.array, resourceList->list.size); + } + CU_FREE(srsCfg->srs_ResourceToAddModList, \ + sizeof(struct SRS_Config__srs_ResourceToAddModList)); + } - CU_FREE(ulBwp->srs_Config->choice.setup, sizeof(SRS_Config_t)); - } - CU_FREE(ulBwp->srs_Config, sizeof(struct BWP_UplinkDedicated__srs_Config)); + CU_FREE(ulBwp->srs_Config->choice.setup, sizeof(SRS_Config_t)); + } + CU_FREE(ulBwp->srs_Config, sizeof(struct BWP_UplinkDedicated__srs_Config)); } } } @@ -7196,7 +7361,7 @@ uint8_t deleteEgtpTunnel(uint8_t *buf) * RFAILED - failure * * ****************************************************************/ -uint8_t BuildUlTnlInfoforSetupMod(ULUPTNLInformation_ToBeSetup_List_t *ulInfo, uint8_t actionType) +uint8_t BuildUlTnlInfoforSetupMod(uint8_t ueId, uint8_t drbId, ULUPTNLInformation_ToBeSetup_List_t *ulInfo, uint8_t actionType) { uint8_t arrIdx; uint8_t ulCnt; @@ -7277,9 +7442,10 @@ uint8_t BuildUlTnlInfoforSetupMod(ULUPTNLInformation_ToBeSetup_List_t *ulInfo, u { /*TODO: DRB context to be stored in CU STUB so that tunnel Id can be easily * fetched based on the Drb Id */ - ulInfo->list.array[arrIdx]->uLUPTNLInformation.choice.gTPTunnel->\ - gTP_TEID.buf[3] = 2; /* Tunnel Id for Drb is 2. Hence passing the same TeId */ + /*For For UE Id=1, DRB=2 is modified. For UE Id = 2, DRB=5 is modified and so on.*/ + ulInfo->list.array[arrIdx]->uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.buf[3]=\ + (MAX_NUM_DRB_ADDED_PER_UE *(ueId - 1)) + drbId; } else { @@ -7390,12 +7556,12 @@ void FreeDrbItem(DRBs_ToBeSetupMod_Item_t *drbItem) * * ****************************************************************/ -uint8_t FillDrbItemToSetupMod(uint8_t arrIdx, DRBs_ToBeSetupMod_Item_t *drbItem) +uint8_t FillDrbItemToSetupMod(uint8_t ueId, uint8_t arrIdx, DRBs_ToBeSetupMod_Item_t *drbItem) { uint8_t ret = ROK; /*Drb Id */ - drbItem->dRBID = arrIdx + DRB3; + drbItem->dRBID = arrIdx + DRB_ID_TO_ADD_MOD; /*qoSInformation*/ drbItem->qoSInformation.present = QoSInformation_PR_choice_extension; @@ -7469,7 +7635,8 @@ uint8_t FillDrbItemToSetupMod(uint8_t arrIdx, DRBs_ToBeSetupMod_Item_t *drbItem) } /*ULUPTNLInformation To Be Setup List*/ - ret = BuildUlTnlInfoforSetupMod(&drbItem->uLUPTNLInformation_ToBeSetup_List, ProtocolIE_ID_id_DRBs_ToBeSetupMod_Item); + ret = BuildUlTnlInfoforSetupMod(ueId, drbItem->dRBID, &drbItem->uLUPTNLInformation_ToBeSetup_List, \ + ProtocolIE_ID_id_DRBs_ToBeSetupMod_Item); if(ret != ROK) { DU_LOG("\nERROR --> F1AP : BuildUlTnlInfoforSetupMod failed"); @@ -7498,13 +7665,13 @@ uint8_t FillDrbItemToSetupMod(uint8_t arrIdx, DRBs_ToBeSetupMod_Item_t *drbItem) * * ****************************************************************/ -uint8_t FillDrbItemList(uint8_t arrIdx, struct DRBs_ToBeSetupMod_ItemIEs *drbItemIe) +uint8_t FillDrbItemList(uint8_t ueId, uint8_t arrIdx, struct DRBs_ToBeSetupMod_ItemIEs *drbItemIe) { drbItemIe->id = ProtocolIE_ID_id_DRBs_ToBeSetupMod_Item; drbItemIe->criticality = Criticality_reject; drbItemIe->value.present = DRBs_ToBeSetupMod_ItemIEs__value_PR_DRBs_ToBeSetupMod_Item; - if(FillDrbItemToSetupMod(arrIdx, (&(drbItemIe->value.choice.DRBs_ToBeSetupMod_Item))) != ROK) + if(FillDrbItemToSetupMod(ueId, arrIdx, (&(drbItemIe->value.choice.DRBs_ToBeSetupMod_Item))) != ROK) { DU_LOG("\nERROR --> F1AP : FillDrbItemToSetupMod failed"); return RFAILED; @@ -7568,7 +7735,7 @@ void FreeDrbToBeSetupModList(DRBs_ToBeSetupMod_List_t *drbSet) * * ****************************************************************/ -uint8_t BuildDrbToBeSetupList(DRBs_ToBeSetupMod_List_t *drbSet) +uint8_t BuildDrbToBeSetupList(uint8_t ueId, DRBs_ToBeSetupMod_List_t *drbSet) { uint8_t ret = ROK; uint8_t arrIdx =0; @@ -7590,15 +7757,14 @@ uint8_t BuildDrbToBeSetupList(DRBs_ToBeSetupMod_List_t *drbSet) if(drbSet->list.array[arrIdx] == NULLP) { DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildDrbToBeSetupList for array idx [%d]", arrIdx); - return RFAILED; + return RFAILED; } - } - arrIdx = 0; - ret = FillDrbItemList(arrIdx, (DRBs_ToBeSetupMod_ItemIEs_t *)drbSet->list.array[arrIdx]); - if(ret != ROK) - { - DU_LOG("\nERROR --> F1AP : FillDrbItemList failed"); + ret = FillDrbItemList(ueId, arrIdx, (DRBs_ToBeSetupMod_ItemIEs_t *)drbSet->list.array[arrIdx]); + if(ret != ROK) + { + DU_LOG("\nERROR --> F1AP : FillDrbItemList failed"); + } } return ret; @@ -7621,12 +7787,12 @@ uint8_t BuildDrbToBeSetupList(DRBs_ToBeSetupMod_List_t *drbSet) * * ****************************************************************/ -uint8_t FillDrbToBeModItem(DRBs_ToBeModified_Item_t *drbItem) +uint8_t FillDrbToBeModItem(uint8_t ueId, uint8_t arrIdx, DRBs_ToBeModified_Item_t *drbItem) { uint8_t ret = ROK; /*Drb Id */ - drbItem->dRBID = DRB2; + drbItem->dRBID = DRB2 + arrIdx; /*qoSInformation*/ drbItem->qoSInformation = NULLP; @@ -7705,7 +7871,7 @@ uint8_t FillDrbToBeModItem(DRBs_ToBeModified_Item_t *drbItem) }/* End of QoS */ /*ULUPTNLInformation To Be Setup List*/ - ret = BuildUlTnlInfoforSetupMod(&drbItem->uLUPTNLInformation_ToBeSetup_List,\ + ret = BuildUlTnlInfoforSetupMod(ueId, drbItem->dRBID, &drbItem->uLUPTNLInformation_ToBeSetup_List,\ ProtocolIE_ID_id_DRBs_ToBeModified_Item); if(ret != ROK) { @@ -7732,12 +7898,12 @@ uint8_t FillDrbToBeModItem(DRBs_ToBeModified_Item_t *drbItem) * * ****************************************************************/ -uint8_t FillDrbToBeModItemList(struct DRBs_ToBeModified_ItemIEs *drbItemIe) +uint8_t FillDrbToBeModItemList(uint8_t ueId, uint8_t arrIdx, struct DRBs_ToBeModified_ItemIEs *drbItemIe) { drbItemIe->id = ProtocolIE_ID_id_DRBs_ToBeModified_Item; drbItemIe->criticality = Criticality_reject; drbItemIe->value.present = DRBs_ToBeModified_ItemIEs__value_PR_DRBs_ToBeModified_Item; - if(FillDrbToBeModItem(&(drbItemIe->value.choice.DRBs_ToBeModified_Item)) != ROK) + if(FillDrbToBeModItem(ueId, arrIdx, &(drbItemIe->value.choice.DRBs_ToBeModified_Item)) != ROK) { DU_LOG("\nERROR --> F1AP : FillDrbToBeModItem failed"); return RFAILED; @@ -7763,13 +7929,13 @@ uint8_t FillDrbToBeModItemList(struct DRBs_ToBeModified_ItemIEs *drbItemIe) * * ****************************************************************/ -uint8_t BuildDrbToBeModifiedList(DRBs_ToBeModified_List_t *drbSet) +uint8_t BuildDrbToBeModifiedList(uint8_t ueId, DRBs_ToBeModified_List_t *drbSet) { uint8_t ret = ROK; uint8_t arrIdx =0; uint8_t drbCnt =0; - drbCnt = 1; + drbCnt = MAX_DRB_MODIFIED_UE_MOD_REQ; drbSet->list.count = drbCnt; drbSet->list.size = drbCnt * sizeof(DRBs_ToBeModified_ItemIEs_t *); CU_ALLOC(drbSet->list.array, drbSet->list.size); @@ -7784,15 +7950,14 @@ uint8_t BuildDrbToBeModifiedList(DRBs_ToBeModified_List_t *drbSet) if(drbSet->list.array[arrIdx] == NULLP) { DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildDrbToBeSetupList"); - return RFAILED; + return RFAILED; } - } - arrIdx=0; - ret = FillDrbToBeModItemList((DRBs_ToBeModified_ItemIEs_t *)drbSet->list.array[arrIdx]); - if(ret != ROK) - { - DU_LOG("\nERROR --> F1AP : FillDrbToBeModItemList failed"); + ret = FillDrbToBeModItemList(ueId, arrIdx, (DRBs_ToBeModified_ItemIEs_t *)drbSet->list.array[arrIdx]); + if(ret != ROK) + { + DU_LOG("\nERROR --> F1AP : FillDrbToBeModItemList failed"); + } } return ret; @@ -8075,7 +8240,7 @@ uint8_t BuildAndSendUeContextModificationReq(uint8_t ueId) ueContextModifyReq->protocolIEs.list.array[ieIdx]->criticality = Criticality_reject; ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.present =\ UEContextModificationRequestIEs__value_PR_DRBs_ToBeSetupMod_List; - ret = BuildDrbToBeSetupList(&(ueContextModifyReq->protocolIEs.list.array[ieIdx]->\ + ret = BuildDrbToBeSetupList(ueId, &(ueContextModifyReq->protocolIEs.list.array[ieIdx]->\ value.choice.DRBs_ToBeSetupMod_List)); /* DRB to be modified list */ @@ -8084,7 +8249,7 @@ uint8_t BuildAndSendUeContextModificationReq(uint8_t ueId) ueContextModifyReq->protocolIEs.list.array[ieIdx]->criticality = Criticality_reject; ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.present =\ UEContextModificationRequestIEs__value_PR_DRBs_ToBeModified_List; - ret = BuildDrbToBeModifiedList(&(ueContextModifyReq->protocolIEs.list.array[ieIdx]->\ + ret = BuildDrbToBeModifiedList(ueId, &(ueContextModifyReq->protocolIEs.list.array[ieIdx]->\ value.choice.DRBs_ToBeModified_List)); /* TODO: DRB to be release list */ @@ -8416,6 +8581,9 @@ uint8_t procGnbDuUpdate(F1AP_PDU_t *f1apMsg) DU_LOG("ERROR --> F1AP : Failed to build and send DUUpdateAck"); return RFAILED; } +#if 0 + /* We don't require F1 Reset message in Cell Up and Broadcast Procedure flow, So that's why + * commented this trigger for now */ if(cellToBeDelete == false) { @@ -8426,7 +8594,8 @@ uint8_t procGnbDuUpdate(F1AP_PDU_t *f1apMsg) return RFAILED; } } - else +#endif + if(cellToBeDelete == true) { for(ueIdx = 0; ueIdx < MAX_NUM_UE; ueIdx++) { @@ -8656,6 +8825,7 @@ uint8_t procUeContextModificationResponse(F1AP_PDU_t *f1apMsg) void procF1SetupReq(F1AP_PDU_t *f1apMsg) { uint8_t ieIdx = 0, plmnidx=0, ret=ROK; + BIT_STRING_t nrcellIdentity; F1SetupRequest_t *f1SetupReq = NULLP; GNB_DU_Served_Cells_Item_t *srvCellItem = NULLP; GNB_DU_Served_Cells_List_t *duServedCell = NULLP; @@ -8680,6 +8850,7 @@ void procF1SetupReq(F1AP_PDU_t *f1apMsg) { srvCellItem = &duServedCell->list.array[plmnidx]->value.choice.GNB_DU_Served_Cells_Item; ret = procServedCellPlmnList(&srvCellItem->served_Cell_Information.servedPLMNs); + memcpy(&nrcellIdentity, &srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity, sizeof(BIT_STRING_t)); } } } @@ -8690,7 +8861,7 @@ void procF1SetupReq(F1AP_PDU_t *f1apMsg) } if(ret == ROK) { - BuildAndSendF1SetupRsp(); + BuildAndSendF1SetupRsp(&nrcellIdentity); } else {