/* 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<ProtocolIE-Field.h>
+#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"
#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"
#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
#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
* RFAILED - failure
*
* ****************************************************************/
-S16 BuildAndSendF1SetupRsp()
+S16 BuildAndSendF1SetupRsp(BIT_STRING_t *nrcellId)
{
uint8_t idx,ieIdx;
uint8_t elementCnt,cellCnt;
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 = \
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;
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);
{
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;
}
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)
{
}
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;
}
}
}
+
+/*******************************************************************
+ *
+ * @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
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));
}
}
}
* 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;
{
/*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
{
*
* ****************************************************************/
-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;
}
/*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");
*
* ****************************************************************/
-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;
*
* ****************************************************************/
-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;
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;
*
* ****************************************************************/
-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;
}/* 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)
{
*
* ****************************************************************/
-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;
*
* ****************************************************************/
-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);
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;
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 */
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 */
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)
{
return RFAILED;
}
}
- else
+#endif
+ if(cellToBeDelete == true)
{
for(ueIdx = 0; ueIdx < MAX_NUM_UE; ueIdx++)
{
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;
{
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));
}
}
}
}
if(ret == ROK)
{
- BuildAndSendF1SetupRsp();
+ BuildAndSendF1SetupRsp(&nrcellIdentity);
}
else
{