#define RES_ALLOC_TYPE 1 /* Resource allocation type */
#define FIVE_QI_VALUE 9 /*spec 23.501, Table 5.7.4-1*/
/*******************************************************************
-*
-* @brief Sends F1 msg over SCTP
-*
-* @details
-*
-* Function : SendF1APMsg
-*
-* Functionality: Sends F1 msg over SCTP
-*
-* @params[in] Region region
-* Pool pool
-* @return ROK - success
-* RFAILED - failure
-*
-* ****************************************************************/
+ *
+ * @brief Sends F1 msg over SCTP
+ *
+ * @details
+ *
+ * Function : SendF1APMsg
+ *
+ * Functionality: Sends F1 msg over SCTP
+ *
+ * @params[in] Region region
+ * Pool pool
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ * ****************************************************************/
S16 SendF1APMsg(Region region, Pool pool)
{
Buffer *mBuf = NULLP;
{
if(ODU_ADD_POST_MSG_MULT((Data *)encBuf, encBufSize, mBuf) == ROK)
{
- ODU_PRINT_MSG(mBuf, 0,0);
+ ODU_PRINT_MSG(mBuf, 0,0);
- if(sctpSend(mBuf) != ROK)
- {
- DU_LOG("\nERROR --> F1AP : SCTP Send failed");
- ODU_PUT_MSG_BUF(mBuf);
- return RFAILED;
- }
+ if(sctpSend(mBuf) != ROK)
+ {
+ DU_LOG("\nERROR --> F1AP : SCTP Send failed");
+ ODU_PUT_MSG_BUF(mBuf);
+ return RFAILED;
+ }
}
else
{
- DU_LOG("\nERROR --> F1AP : ODU_ADD_POST_MSG_MULT failed");
- ODU_PUT_MSG_BUF(mBuf);
- return RFAILED;
+ DU_LOG("\nERROR --> F1AP : ODU_ADD_POST_MSG_MULT failed");
+ ODU_PUT_MSG_BUF(mBuf);
+ return RFAILED;
}
ODU_PUT_MSG_BUF(mBuf);
}
f1apMsg->choice.successfulOutcome->procedureCode = ProcedureCode_id_F1Setup;
f1apMsg->choice.successfulOutcome->criticality = Criticality_reject;
f1apMsg->choice.successfulOutcome->value.present = \
- SuccessfulOutcome__value_PR_F1SetupResponse;
+ SuccessfulOutcome__value_PR_F1SetupResponse;
f1SetupRsp = &f1apMsg->choice.successfulOutcome->value.choice.F1SetupResponse;
elementCnt = 4;
f1SetupRsp->protocolIEs.list.size = elementCnt*sizeof(F1SetupResponseIEs_t *);
CU_ALLOC(f1SetupRsp->protocolIEs.list.array, \
- elementCnt * sizeof(F1SetupResponseIEs_t *));
+ elementCnt * sizeof(F1SetupResponseIEs_t *));
if(f1SetupRsp->protocolIEs.list.array == NULLP)
{
DU_LOG("\nERROR --> F1AP : Memory allocation for F1ResponseIEs failed");
for(idx=0; idx<elementCnt; idx++)
{
CU_ALLOC(f1SetupRsp->protocolIEs.list.array[idx], \
- sizeof(F1SetupResponseIEs_t));
+ sizeof(F1SetupResponseIEs_t));
if(f1SetupRsp->protocolIEs.list.array[idx] == NULLP)
{
- CU_FREE(f1SetupRsp->protocolIEs.list.array,\
- elementCnt * sizeof(F1SetupResponseIEs_t *));
- CU_FREE(f1apMsg->choice.successfulOutcome, \
- sizeof(SuccessfulOutcome_t));
- CU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
- return RFAILED;
+ CU_FREE(f1SetupRsp->protocolIEs.list.array,\
+ elementCnt * sizeof(F1SetupResponseIEs_t *));
+ CU_FREE(f1apMsg->choice.successfulOutcome, \
+ sizeof(SuccessfulOutcome_t));
+ CU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
+ return RFAILED;
}
}
f1SetupRsp->protocolIEs.list.array[idx]->id = ProtocolIE_ID_id_TransactionID;
f1SetupRsp->protocolIEs.list.array[idx]->criticality = Criticality_reject;
f1SetupRsp->protocolIEs.list.array[idx]->value.present = \
- F1SetupResponseIEs__value_PR_TransactionID;
+ F1SetupResponseIEs__value_PR_TransactionID;
f1SetupRsp->protocolIEs.list.array[idx]->value.choice.TransactionID =\
- TRANS_ID;
+ TRANS_ID;
/*CU Name*/
idx++;
f1SetupRsp->protocolIEs.list.array[idx]->id = ProtocolIE_ID_id_gNB_CU_Name;
f1SetupRsp->protocolIEs.list.array[idx]->criticality = Criticality_ignore;
f1SetupRsp->protocolIEs.list.array[idx]->value.present = \
- F1SetupResponseIEs__value_PR_GNB_CU_Name;
+ F1SetupResponseIEs__value_PR_GNB_CU_Name;
cuName = &f1SetupRsp->protocolIEs.list.array[idx]->value.choice.GNB_CU_Name;
cuName->size = sizeof(cuCfgParams.cuName);
{
for(ieIdx=0; ieIdx<elementCnt; ieIdx++)
{
- CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx],\
- sizeof(F1SetupResponseIEs_t));
+ CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx],\
+ sizeof(F1SetupResponseIEs_t));
}
CU_FREE(f1SetupRsp->protocolIEs.list.array,\
- elementCnt * sizeof(F1SetupResponseIEs_t *));
+ elementCnt * sizeof(F1SetupResponseIEs_t *));
CU_FREE(f1apMsg->choice.successfulOutcome,\
- sizeof(SuccessfulOutcome_t));
+ sizeof(SuccessfulOutcome_t));
CU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
return RFAILED;
}
/*Cells to be activated list*/
idx++;
f1SetupRsp->protocolIEs.list.array[idx]->id = \
- ProtocolIE_ID_id_Cells_to_be_Activated_List ;
+ ProtocolIE_ID_id_Cells_to_be_Activated_List ;
f1SetupRsp->protocolIEs.list.array[idx]->criticality = Criticality_reject;
f1SetupRsp->protocolIEs.list.array[idx]->value.present = \
- F1SetupResponseIEs__value_PR_Cells_to_be_Activated_List;
+ F1SetupResponseIEs__value_PR_Cells_to_be_Activated_List;
cellToActivate = &f1SetupRsp->protocolIEs.list.array[idx]->value.choice.\
- Cells_to_be_Activated_List;
+ Cells_to_be_Activated_List;
cellCnt=1;
cellToActivate->list.count = cellCnt;
cellToActivate->list.size = \
- cellCnt*sizeof(struct Cells_to_be_Activated_List_ItemIEs *);
+ cellCnt*sizeof(struct Cells_to_be_Activated_List_ItemIEs *);
CU_ALLOC(cellToActivate->list.array,\
- sizeof(struct Cells_to_be_Activated_List_ItemIEs *));
+ sizeof(struct Cells_to_be_Activated_List_ItemIEs *));
if(cellToActivate->list.array == NULLP)
{
CU_FREE(cuName->buf, sizeof(cuName->size));
for(ieIdx=0; ieIdx<elementCnt; ieIdx++)
{
- CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx],\
- sizeof(F1SetupResponseIEs_t));
+ CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx],\
+ sizeof(F1SetupResponseIEs_t));
}
CU_FREE(f1SetupRsp->protocolIEs.list.array,\
- elementCnt * sizeof(F1SetupResponseIEs_t *));
+ elementCnt * sizeof(F1SetupResponseIEs_t *));
CU_FREE(f1apMsg->choice.successfulOutcome, sizeof(SuccessfulOutcome_t));
CU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
return RFAILED;
CU_ALLOC(cellToActivate->list.array[ieIdx],sizeof(struct Cells_to_be_Activated_List_ItemIEs ));
if(cellToActivate->list.array[ieIdx] == NULLP)
{
- CU_FREE(cellToActivate->list.array,\
- sizeof(struct Cells_to_be_Activated_List_ItemIEs *));
- CU_FREE(cuName->buf, sizeof(cuName->size));
- for(ieIdx=0; ieIdx<elementCnt; ieIdx++)
- {
- CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx], \
- sizeof(F1SetupResponseIEs_t));
- }
- CU_FREE(f1SetupRsp->protocolIEs.list.array, \
- elementCnt * sizeof(F1SetupResponseIEs_t *));
- CU_FREE(f1apMsg->choice.successfulOutcome, \
- sizeof(SuccessfulOutcome_t));
- CU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
- return RFAILED;
+ CU_FREE(cellToActivate->list.array,\
+ sizeof(struct Cells_to_be_Activated_List_ItemIEs *));
+ CU_FREE(cuName->buf, sizeof(cuName->size));
+ for(ieIdx=0; ieIdx<elementCnt; ieIdx++)
+ {
+ CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx], \
+ sizeof(F1SetupResponseIEs_t));
+ }
+ CU_FREE(f1SetupRsp->protocolIEs.list.array, \
+ elementCnt * sizeof(F1SetupResponseIEs_t *));
+ CU_FREE(f1apMsg->choice.successfulOutcome, \
+ sizeof(SuccessfulOutcome_t));
+ CU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
+ return RFAILED;
}
}
cellToActivate->list.array[0]->id = \
- ProtocolIE_ID_id_Cells_to_be_Activated_List_Item;
+ ProtocolIE_ID_id_Cells_to_be_Activated_List_Item;
cellToActivate->list.array[0]->criticality = Criticality_ignore;
cellToActivate->list.array[0]->value.present = \
- Cells_to_be_Activated_List_ItemIEs__value_PR_Cells_to_be_Activated_List_Item;
+ Cells_to_be_Activated_List_ItemIEs__value_PR_Cells_to_be_Activated_List_Item;
cellToActivate->list.array[0]->value.choice.Cells_to_be_Activated_List_Item.\
nRCGI.pLMN_Identity.size = 3*sizeof(uint8_t);
CU_ALLOC(cellToActivate->list.array[0]->\
- value.choice.Cells_to_be_Activated_List_Item.nRCGI.pLMN_Identity.buf,\
- 3*sizeof(uint8_t));
+ value.choice.Cells_to_be_Activated_List_Item.nRCGI.pLMN_Identity.buf,\
+ 3*sizeof(uint8_t));
if(cellToActivate->list.array[0]->value.choice.\
- Cells_to_be_Activated_List_Item.nRCGI.pLMN_Identity.buf == NULLP)
+ Cells_to_be_Activated_List_Item.nRCGI.pLMN_Identity.buf == NULLP)
{
for(ieIdx=0; ieIdx<cellCnt; ieIdx++)
{
- CU_FREE(cellToActivate->list.array[ieIdx],\
- sizeof(struct Cells_to_be_Activated_List_ItemIEs ));
+ CU_FREE(cellToActivate->list.array[ieIdx],\
+ sizeof(struct Cells_to_be_Activated_List_ItemIEs ));
}
CU_FREE(cellToActivate->list.array,\
- sizeof(struct Cells_to_be_Activated_List_ItemIEs *));
+ sizeof(struct Cells_to_be_Activated_List_ItemIEs *));
CU_FREE(cuName->buf, sizeof(cuName->size));
for(ieIdx=0; ieIdx<elementCnt; ieIdx++)
{
- CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx], \
- sizeof(F1SetupResponseIEs_t));
+ CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx], \
+ sizeof(F1SetupResponseIEs_t));
}
CU_FREE(f1SetupRsp->protocolIEs.list.array, \
- elementCnt * sizeof(F1SetupResponseIEs_t *));
+ elementCnt * sizeof(F1SetupResponseIEs_t *));
CU_FREE(f1apMsg->choice.successfulOutcome, \
- sizeof(SuccessfulOutcome_t));
+ sizeof(SuccessfulOutcome_t));
CU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
return RFAILED;
}
buildPlmnId(cuCfgParams.plmn , cellToActivate->list.array[0]->value.choice.\
- Cells_to_be_Activated_List_Item.nRCGI.pLMN_Identity.buf);
+ Cells_to_be_Activated_List_Item.nRCGI.pLMN_Identity.buf);
cellToActivate->list.array[0]->value.choice.Cells_to_be_Activated_List_Item.\
nRCGI.nRCellIdentity.size = 5;
CU_ALLOC(cellToActivate->list.array[0]->value.choice.\
- Cells_to_be_Activated_List_Item.nRCGI.nRCellIdentity.buf,\
- 5*sizeof(uint8_t));
+ Cells_to_be_Activated_List_Item.nRCGI.nRCellIdentity.buf,\
+ 5*sizeof(uint8_t));
if(cellToActivate->list.array[0]->value.choice.\
- Cells_to_be_Activated_List_Item.nRCGI.nRCellIdentity.buf == NULLP)
+ Cells_to_be_Activated_List_Item.nRCGI.nRCellIdentity.buf == NULLP)
{
CU_FREE(cellToActivate->list.array[0]->\
- value.choice.Cells_to_be_Activated_List_Item.nRCGI.pLMN_Identity.buf,\
- 3*sizeof(uint8_t));
+ value.choice.Cells_to_be_Activated_List_Item.nRCGI.pLMN_Identity.buf,\
+ 3*sizeof(uint8_t));
for(ieIdx=0; ieIdx<cellCnt; ieIdx++)
{
- CU_FREE(cellToActivate->list.array[ieIdx],\
- sizeof(struct Cells_to_be_Activated_List_ItemIEs ));
+ CU_FREE(cellToActivate->list.array[ieIdx],\
+ sizeof(struct Cells_to_be_Activated_List_ItemIEs ));
}
CU_FREE(cellToActivate->list.array,\
- sizeof(struct Cells_to_be_Activated_List_ItemIEs *));
+ sizeof(struct Cells_to_be_Activated_List_ItemIEs *));
CU_FREE(cuName->buf, sizeof(cuName->size));
for(ieIdx=0; ieIdx<elementCnt; ieIdx++)
{
- CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx], \
- sizeof(F1SetupResponseIEs_t));
+ CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx], \
+ sizeof(F1SetupResponseIEs_t));
}
CU_FREE(f1SetupRsp->protocolIEs.list.array, \
- elementCnt * sizeof(F1SetupResponseIEs_t *));
+ elementCnt * sizeof(F1SetupResponseIEs_t *));
CU_FREE(f1apMsg->choice.successfulOutcome, \
- sizeof(SuccessfulOutcome_t));
+ sizeof(SuccessfulOutcome_t));
CU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
return RFAILED;
}
/* RRC Version */
idx++;
f1SetupRsp->protocolIEs.list.array[idx]->id = \
- ProtocolIE_ID_id_GNB_CU_RRC_Version;
+ ProtocolIE_ID_id_GNB_CU_RRC_Version;
f1SetupRsp->protocolIEs.list.array[idx]->criticality = Criticality_reject;
f1SetupRsp->protocolIEs.list.array[idx]->value.present = \
- F1SetupResponseIEs__value_PR_RRC_Version;
+ F1SetupResponseIEs__value_PR_RRC_Version;
rrcVer = &f1SetupRsp->protocolIEs.list.array[idx]->value.choice.RRC_Version;
rrcVer->latest_RRC_Version.size = RRC_SIZE;
CU_FREE(cuName->buf, sizeof(cuName->size));
for(ieIdx=0; ieIdx<elementCnt; idx++)
{
- CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx], \
- sizeof(F1SetupResponseIEs_t));
+ CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx], \
+ sizeof(F1SetupResponseIEs_t));
}
CU_FREE(f1SetupRsp->protocolIEs.list.array,\
- elementCnt * sizeof(F1SetupResponseIEs_t *));
+ elementCnt * sizeof(F1SetupResponseIEs_t *));
CU_FREE(f1apMsg->choice.successfulOutcome, sizeof(SuccessfulOutcome_t));
CU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
return RFAILED;
CU_FREE(cuName->buf, sizeof(cuName->size));
for(ieIdx=0; ieIdx<elementCnt; ieIdx++)
{
- CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx], \
- sizeof(F1SetupResponseIEs_t));
+ CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx], \
+ sizeof(F1SetupResponseIEs_t));
}
CU_FREE(f1SetupRsp->protocolIEs.list.array,\
- elementCnt * sizeof(F1SetupResponseIEs_t *));
+ elementCnt * sizeof(F1SetupResponseIEs_t *));
CU_FREE(f1apMsg->choice.successfulOutcome, sizeof(SuccessfulOutcome_t));
CU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
return RFAILED;
rrcVer->iE_Extensions->list.count = 1;
rrcVer->iE_Extensions->list.size = sizeof(struct RRC_Version_ExtIEs *);
CU_ALLOC(rrcVer->iE_Extensions->list.array,\
- sizeof(struct RRC_Version_ExtIEs *));
+ sizeof(struct RRC_Version_ExtIEs *));
if(rrcVer->iE_Extensions->list.array == NULLP)
{
CU_FREE(rrcVer->iE_Extensions,\
- sizeof(ProtocolExtensionContainer_4624P81_t));
+ sizeof(ProtocolExtensionContainer_4624P81_t));
CU_FREE(rrcVer->latest_RRC_Version.buf, sizeof(uint8_t));
CU_FREE(cuName->buf, sizeof(cuName->size));
for(ieIdx=0; ieIdx<elementCnt; ieIdx++)
{
- CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx], \
- sizeof(F1SetupResponseIEs_t));
+ CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx], \
+ sizeof(F1SetupResponseIEs_t));
}
CU_FREE(f1SetupRsp->protocolIEs.list.array,\
- elementCnt * sizeof(F1SetupResponseIEs_t *));
+ elementCnt * sizeof(F1SetupResponseIEs_t *));
CU_FREE(f1apMsg->choice.successfulOutcome, sizeof(SuccessfulOutcome_t));
CU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
return RFAILED;
}
CU_ALLOC(rrcVer->iE_Extensions->list.array[0],\
- sizeof(struct RRC_Version_ExtIEs));
+ sizeof(struct RRC_Version_ExtIEs));
if(rrcVer->iE_Extensions->list.array[0] == NULLP)
{
CU_FREE(rrcVer->iE_Extensions->list.array,\
- sizeof(struct RRC_Version_ExtIEs *));
+ sizeof(struct RRC_Version_ExtIEs *));
CU_FREE(rrcVer->iE_Extensions,\
- sizeof(ProtocolExtensionContainer_4624P81_t));
+ sizeof(ProtocolExtensionContainer_4624P81_t));
CU_FREE(rrcVer->latest_RRC_Version.buf, sizeof(uint8_t));
CU_FREE(cuName->buf, sizeof(cuName->size));
for(ieIdx=0; ieIdx<elementCnt; ieIdx++)
{
- CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx], \
- sizeof(F1SetupResponseIEs_t));
+ CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx], \
+ sizeof(F1SetupResponseIEs_t));
}
CU_FREE(f1SetupRsp->protocolIEs.list.array,\
- elementCnt * sizeof(F1SetupResponseIEs_t *));
+ elementCnt * sizeof(F1SetupResponseIEs_t *));
CU_FREE(f1apMsg->choice.successfulOutcome, sizeof(SuccessfulOutcome_t));
CU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
return RFAILED;
}
rrcVer->iE_Extensions->list.array[0]->id = \
- ProtocolIE_ID_id_latest_RRC_Version_Enhanced;
+ ProtocolIE_ID_id_latest_RRC_Version_Enhanced;
rrcVer->iE_Extensions->list.array[0]->criticality = Criticality_reject;
rrcVer->iE_Extensions->list.array[0]->extensionValue.present = \
- RRC_Version_ExtIEs__extensionValue_PR_Latest_RRC_Version_Enhanced;
+ RRC_Version_ExtIEs__extensionValue_PR_Latest_RRC_Version_Enhanced;
rrcVer->iE_Extensions->list.array[0]->extensionValue.choice.\
Latest_RRC_Version_Enhanced.size = 3*sizeof(uint8_t);
CU_ALLOC(rrcVer->iE_Extensions->list.\
- array[0]->extensionValue.choice.Latest_RRC_Version_Enhanced.buf,\
- 3*sizeof(uint8_t));
+ array[0]->extensionValue.choice.Latest_RRC_Version_Enhanced.buf,\
+ 3*sizeof(uint8_t));
if(rrcVer->iE_Extensions->list.\
- array[0]->extensionValue.choice.Latest_RRC_Version_Enhanced.buf == NULLP)
+ array[0]->extensionValue.choice.Latest_RRC_Version_Enhanced.buf == NULLP)
{
CU_FREE(rrcVer->iE_Extensions->list.array[0],\
- sizeof(struct RRC_Version_ExtIEs));
+ sizeof(struct RRC_Version_ExtIEs));
CU_FREE(rrcVer->iE_Extensions->list.array,\
- sizeof(struct RRC_Version_ExtIEs *));
+ sizeof(struct RRC_Version_ExtIEs *));
CU_FREE(rrcVer->iE_Extensions,\
- sizeof(ProtocolExtensionContainer_4624P81_t));
+ sizeof(ProtocolExtensionContainer_4624P81_t));
CU_FREE(rrcVer->latest_RRC_Version.buf, sizeof(uint8_t));
CU_FREE(cuName->buf, sizeof(cuName->size));
for(ieIdx=0; ieIdx<elementCnt; ieIdx++)
{
- CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx], \
- sizeof(F1SetupResponseIEs_t));
+ CU_FREE(f1SetupRsp->protocolIEs.list.array[ieIdx], \
+ sizeof(F1SetupResponseIEs_t));
}
CU_FREE(f1SetupRsp->protocolIEs.list.array,\
- elementCnt * sizeof(F1SetupResponseIEs_t *));
+ elementCnt * sizeof(F1SetupResponseIEs_t *));
CU_FREE(f1apMsg->choice.successfulOutcome, sizeof(SuccessfulOutcome_t));
CU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
return RFAILED;
if(encRetVal.encoded == ENCODE_FAIL)
{
DU_LOG("\nERROR --> F1AP : Could not encode F1SetupResponse structure (at %s)\n",\
- encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
+ encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
return RFAILED;
}
else
DU_LOG("\nDEBUG --> F1AP : Created APER encoded buffer for F1SetupResponse\n");
for(int i=0; i< encBufSize; i++)
{
- DU_LOG("%x",encBuf[i]);
+ DU_LOG("%x",encBuf[i]);
}
}
* Functionality: Constructs the DU Update Acknowledge message and sends
* it to the DU through SCTP.
*
- * @params[in] void **buf,Buffer to which encoded pattern is written into
- * @params[in] int *size,size of buffer
+ * @params[in]
*
* @return ROK - success
* RFAILED - failure
CU_ALLOC(gNBDuCfgAck->protocolIEs.list.array[idx], sizeof(GNBDUConfigurationUpdateAcknowledgeIEs_t));
if(gNBDuCfgAck->protocolIEs.list.array[idx] == NULLP)
{
- CU_FREE(gNBDuCfgAck->protocolIEs.list.array, elementCnt * sizeof(GNBDUConfigurationUpdateAcknowledgeIEs_t *));
- CU_FREE(f1apMsg->choice.successfulOutcome, sizeof(SuccessfulOutcome_t));
- CU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
- return RFAILED;
+ CU_FREE(gNBDuCfgAck->protocolIEs.list.array, elementCnt * sizeof(GNBDUConfigurationUpdateAcknowledgeIEs_t *));
+ CU_FREE(f1apMsg->choice.successfulOutcome, sizeof(SuccessfulOutcome_t));
+ CU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
+ return RFAILED;
}
}
idx = 0;
gNBDuCfgAck->protocolIEs.list.array[idx]->id = ProtocolIE_ID_id_TransactionID ;
gNBDuCfgAck->protocolIEs.list.array[idx]->criticality = Criticality_reject;
- gNBDuCfgAck->protocolIEs.list.array[idx]->value.present = GNBDUConfigurationUpdateAcknowledgeIEs__value_PR_TransactionID;
+ gNBDuCfgAck->protocolIEs.list.array[idx]->value.present =\
+ GNBDUConfigurationUpdateAcknowledgeIEs__value_PR_TransactionID;
gNBDuCfgAck->protocolIEs.list.array[idx]->value.choice.TransactionID = TRANS_ID;
xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
/* Checking encode results */
if(enRetVal.encoded == ENCODE_FAIL)
{
- DU_LOG("\nERROR --> F1AP : Could not encode DUConfigUpdateAcknowledge structure (at %s)",enRetVal.failed_type ? enRetVal.failed_type->name : "unknown");
+ DU_LOG("\nERROR --> F1AP : Could not encode DUConfigUpdateAcknowledge structure (at %s)",\
+ enRetVal.failed_type ? enRetVal.failed_type->name : "unknown");
return RFAILED;
}
else
DU_LOG("\nDEBUG --> F1AP : Created APER encoded buffer for DuConfigUpdateAcknowledge\n");
for(int i=0; i< encBufSize; i++)
{
- DU_LOG("%x",encBuf[i]);
+ DU_LOG("%x",encBuf[i]);
}
}
}
return ROK;
}
+/*******************************************************************
+*
+* @brief processing of Gnb-DU config update
+*
+* @details
+*
+* Function : procGnbDuUpdate
+*
+* Functionality:
+* - processing of Gnb-DU config update
+*
+* @params[in] F1AP_PDU_t *f1apMsg
+* @return ROK - success
+* RFAILED - failure
+*
+* ****************************************************************/
+uint8_t procGnbDuUpdate(F1AP_PDU_t *f1apMsg)
+{
+ bool cellToBeDelete = false;
+ uint8_t ieIdx = 0;
+ GNBDUConfigurationUpdate_t *duCfgUpdate = NULLP;
+
+ duCfgUpdate = &f1apMsg->choice.initiatingMessage->value.choice.GNBDUConfigurationUpdate;
+
+ for(ieIdx=0; ieIdx < duCfgUpdate->protocolIEs.list.count; ieIdx++)
+ {
+ switch(duCfgUpdate->protocolIEs.list.array[ieIdx]->id)
+ {
+ case ProtocolIE_ID_id_TransactionID:
+ break;
+ case ProtocolIE_ID_id_Served_Cells_To_Modify_List:
+ break;
+ case ProtocolIE_ID_id_Served_Cells_To_Delete_List:
+ {
+ cellToBeDelete = true;
+ break;
+ }
+ case ProtocolIE_ID_id_gNB_DU_ID:
+ break;
+ }
+ }
+ if(BuildAndSendDUUpdateAck() != ROK)
+ {
+ DU_LOG("ERROR --> F1AP : Failed to build and send DUUpdateAck");
+ return RFAILED;
+ }
+
+ if(cellToBeDelete == false)
+ {
+ DU_LOG("\nINFO --> F1AP : Sending F1 reset request");
+ if(BuildAndSendF1ResetReq() != ROK)
+ {
+ DU_LOG("ERROR --> F1AP : Failed to build and send F1 reset request");
+ return RFAILED;
+ }
+ }
+
+ return ROK;
+}
/*******************************************************************
*
* @brief Handles received F1AP message and sends back response
case InitiatingMessage__value_PR_GNBDUConfigurationUpdate:
{
DU_LOG("\nINFO --> F1AP : GNB-DU config update received");
- BuildAndSendDUUpdateAck();
- DU_LOG("\nINFO --> F1AP : Sending F1 reset request");
- BuildAndSendF1ResetReq();
+ procGnbDuUpdate(f1apMsg);
break;
}
case InitiatingMessage__value_PR_InitialULRRCMessageTransfer:
#include "legtp.h"
#include "lkw.x"
#include "lrg.x"
+#include "F1AP-PDU.h"
#include "du_app_mac_inf.h"
#include "du_cfg.h"
#include "du_app_rlc_inf.h"
#include "SchedulingRequestResourceConfig.h"
#include<ProtocolIE-Field.h>
#include "ProtocolExtensionField.h"
-#include "F1AP-PDU.h"
#include "odu_common_codec.h"
#include "du_mgr.h"
#include "du_cell_mgr.h"
#endif
DuCfgParams duCfgParam;
+
/************************************************************************
*
* @brief Converts enum values into actual value of Poll retransmit timer
return statProhTmr;
}
+/*******************************************************************
+*
+* @brief Adding F1AP pdu to reserved pdu list
+*
+* @details
+*
+* Function : addToReservedF1apPduList
+*
+* Functionality: Adding F1AP pdu to reserved pdu list.
+* These pdu are awaiting aknowledgment from CU
+*
+* @params[in] uint8_t transId, F1AP_PDU_t *f1apMsg
+*
+* @return ROK - success
+* RFAILED - failure
+*
+* ****************************************************************/
+
+void addToReservedF1apPduList(uint8_t transId, F1AP_PDU_t *f1apPdu)
+{
+ CmLList *node = NULLP;
+ ReservedF1apPduInfo *pduInfo = NULLP;
+ DU_ALLOC(pduInfo, sizeof(ReservedF1apPduInfo));
+ if(pduInfo)
+ {
+ DU_ALLOC(node, sizeof(CmLList));
+ if(node)
+ {
+ pduInfo->transId = transId;
+ pduInfo->f1apMsg = (void*) f1apPdu;
+
+ node->node = (PTR)pduInfo;
+ cmLListAdd2Tail(&duCb.reservedF1apPduList, node);
+ }
+ }
+}
+
+/*******************************************************************
+*
+* @brief searching for F1AP pdu from ReservedF1apPduList
+*
+* @details
+*
+* Function : searchFromReservedF1apPduList
+*
+* Functionality: searching for F1AP pdu information
+*
+* @params[in] uint8_t transId
+*
+* @return pointer to F1AP_PDU_t
+*
+* ****************************************************************/
+
+CmLList *searchFromReservedF1apPduList(uint8_t transId)
+{
+ CmLList *node;
+ ReservedF1apPduInfo *f1apPdu;
+ if(duCb.reservedF1apPduList.count)
+ {
+ CM_LLIST_FIRST_NODE(&duCb.reservedF1apPduList, node);
+ while(node)
+ {
+ f1apPdu = (ReservedF1apPduInfo*)node->node;
+ if(f1apPdu->transId == transId)
+ {
+ return node;
+ }
+ node = node->next;
+ }
+ }
+ return NULL;
+}
+
+/*******************************************************************
+*
+* @brief deleting F1AP pdu information from ReservedF1apPduList
+*
+* @details
+*
+* Function : deleteFromReservedF1apPduList
+*
+* Functionality: deleting pdu information from ReservedF1apPduList
+*
+* @params[in] CmLList *node
+*
+* @return void
+*
+* ****************************************************************/
+
+void deleteFromReservedF1apPduList(CmLList *node)
+{
+ ReservedF1apPduInfo *f1apPdu;
+
+ if(node != NULL)
+ {
+ f1apPdu = (ReservedF1apPduInfo *)node->node;
+ cmLListDelFrm(&duCb.reservedF1apPduList, node);
+ DU_FREE(f1apPdu, sizeof(ReservedF1apPduInfo));
+ DU_FREE(node, sizeof(CmLList));
+ node = NULL;
+ }
+}
+
/*******************************************************************
*
* @brief Builds Uplink Info for NR
return ret;
}/* End of BuildAndSendF1SetupReq */
+/*******************************************************************
+ *
+ * @brief Deallocating memory allocated for Served_Cells_To_Modify_Item_t
+ *
+ * @details
+ *
+ * Function : freeCellsToModifyItem
+ *
+ * Functionality: Deallocating memory of variables allocated in
+ * BuildAndSendDUConfigUpdate function
+ *
+ * @params[in] Served_Cells_To_Modify_Item_t *modifyItem
+ *
+ * @return ROK - void
+ *
+ * ****************************************************************/
+
+void freeCellsToModifyItem(Served_Cells_To_Modify_Item_t *modifyItem)
+{
+ uint8_t arrIdx=0,i=0;
+ if(modifyItem->oldNRCGI.pLMN_Identity.buf != NULLP)
+ {
+ if(modifyItem->oldNRCGI.nRCellIdentity.buf != NULLP)
+ {
+ if(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf != NULLP)
+ {
+ if(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf
+ != NULLP)
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array\
+ != NULLP)
+ {
+ if(!modifyItem->served_Cell_Information.servedPLMNs.list.array[arrIdx])
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[arrIdx]->pLMN_Identity.buf != NULLP)
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[arrIdx]->iE_Extensions!= NULLP)
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[arrIdx]->iE_Extensions->list.array != NULLP)
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[arrIdx]->iE_Extensions->list.array[arrIdx])
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array[arrIdx]->\
+ iE_Extensions->list.array[arrIdx]->extensionValue.choice.SliceSupportList.\
+ list.array !=NULLP)
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array[arrIdx]->\
+ iE_Extensions->list.array[arrIdx]->extensionValue.choice.SliceSupportList.\
+ list.array[arrIdx]!=NULLP)
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array[arrIdx]->\
+ iE_Extensions->list.array[arrIdx]->extensionValue.choice.SliceSupportList.\
+ list.array[arrIdx]->sNSSAI.sST.buf!=NULLP)
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array[arrIdx]->\
+ iE_Extensions->list.array[arrIdx]->extensionValue.choice.\
+ SliceSupportList.\
+ list.array[arrIdx]->sNSSAI.sD != NULLP)
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array[arrIdx]->\
+ iE_Extensions->list.array[arrIdx]->extensionValue.\
+ choice.SliceSupportList.\
+ list.array[arrIdx]->sNSSAI.sD->buf!=NULLP)
+ {
+ if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD
+ !=NULLP)
+ {
+ if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
+ fDD->uL_NRFreqInfo.freqBandListNr.list.array!=NULLP)
+ {
+ if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
+ fDD->uL_NRFreqInfo.freqBandListNr.list.array[arrIdx]!=NULLP)
+ {
+ if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
+ fDD->dL_NRFreqInfo.freqBandListNr.list.array !=NULLP)
+ {
+ if(modifyItem->served_Cell_Information.nR_Mode_Info.\
+ choice.fDD->dL_NRFreqInfo.freqBandListNr.list.\
+ array[arrIdx]!= NULLP)
+ {
+ if(modifyItem->served_Cell_Information.\
+ measurementTimingConfiguration.buf !=NULLP)
+ {
+ DU_FREE(modifyItem->served_Cell_Information.\
+ measurementTimingConfiguration.\
+ buf,modifyItem->served_Cell_Information.\
+ measurementTimingConfiguration.size);
+ }
+ DU_FREE(modifyItem->served_Cell_Information.\
+ nR_Mode_Info.choice.fDD->dL_NRFreqInfo.\
+ freqBandListNr.\
+ list.array[arrIdx],sizeof(FreqBandNrItem_t));
+ }
+ DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info\
+ .choice.fDD->dL_NRFreqInfo.freqBandListNr.list.array,\
+ modifyItem->served_Cell_Information.nR_Mode_Info.\
+ choice.fDD->dL_NRFreqInfo.freqBandListNr.list.size);
+ }
+ DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.\
+ choice.fDD->uL_NRFreqInfo.freqBandListNr.list.\
+ array[arrIdx],sizeof(FreqBandNrItem_t));
+ }
+ DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.\
+ choice.\
+ fDD->uL_NRFreqInfo.freqBandListNr.list.\
+ array,modifyItem->served_Cell_Information.nR_Mode_Info.\
+ choice.fDD->uL_NRFreqInfo.freqBandListNr.list.size);
+ }
+ DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
+ fDD,sizeof(FDD_Info_t));
+ }
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[arrIdx]->iE_Extensions->list.array[arrIdx]->extensionValue.\
+ choice.SliceSupportList.\
+ list.array[arrIdx]->sNSSAI.sD->buf,modifyItem->\
+ served_Cell_Information.\
+ servedPLMNs.list.array[arrIdx]->iE_Extensions->list.\
+ array[arrIdx]->\
+ extensionValue.choice.SliceSupportList.list.array[arrIdx]->\
+ sNSSAI.sD->size);
+
+ }
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[arrIdx]->\
+ iE_Extensions->list.array[arrIdx]->extensionValue.choice.\
+ SliceSupportList.\
+ list.array[arrIdx]->sNSSAI.sD,sizeof(OCTET_STRING_t));
+ }
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[arrIdx]->\
+ iE_Extensions->list.array[arrIdx]->extensionValue.choice.\
+ SliceSupportList.\
+ list.array[arrIdx]->sNSSAI.sST.buf,modifyItem->served_Cell_Information.\
+ servedPLMNs.\
+ list.array[arrIdx]->iE_Extensions->list.array[arrIdx]->\
+ extensionValue.choice.\
+ SliceSupportList.list.array[arrIdx]->sNSSAI.sST.size);
+ }
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[arrIdx]->\
+ iE_Extensions->list.array[arrIdx]->extensionValue.choice.SliceSupportList.\
+ list.array[arrIdx],sizeof(SliceSupportItem_t));
+ }
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[arrIdx]->\
+ iE_Extensions->list.array[arrIdx]->extensionValue.choice.SliceSupportList.\
+ list.array,\
+ modifyItem->served_Cell_Information.servedPLMNs.list.array[arrIdx]->\
+ iE_Extensions->list.array[arrIdx]->extensionValue.choice.\
+ SliceSupportList.list.size);
+ }
+ }
+ for(i=0;i<modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[arrIdx]->iE_Extensions->list.count;i++)
+ {
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[arrIdx]->iE_Extensions->list.array[i],\
+ sizeof(ServedPLMNs_ItemExtIEs_t ));
+ }
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[arrIdx]->iE_Extensions->list.array,modifyItem->served_Cell_Information.\
+ servedPLMNs.list.array[arrIdx]->iE_Extensions->list.size);
+ }
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[arrIdx]->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P3_t));
+ }
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
+ array[arrIdx]->pLMN_Identity.buf,
+ modifyItem->served_Cell_Information.servedPLMNs.list.array[arrIdx]->pLMN_Identity.size);
+ }
+ }
+ for(i=0;i<modifyItem->served_Cell_Information.servedPLMNs.list.count;i++)
+ {
+ if(modifyItem->served_Cell_Information.servedPLMNs.list.array[i]
+ != NULLP)
+ {
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[i],\
+ sizeof(ServedPLMNs_Item_t));
+ }
+ }
+ DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
+ modifyItem->served_Cell_Information.servedPLMNs.list.size);
+ }
+ DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
+ modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.size);
+ }
+ DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
+ modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.size);
+ }
+ DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
+ modifyItem->oldNRCGI.nRCellIdentity.size);
+ }
+ DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,\
+ modifyItem->oldNRCGI.pLMN_Identity.size);
+ }
+}
/*******************************************************************
*
* @brief Deallocating memory of BuildAndSendDUConfigUpdate
* ****************************************************************/
void FreeDUConfigUpdate(F1AP_PDU_t *f1apDuCfg)
{
- uint8_t i;
- uint8_t idx;
+ uint8_t ieIdx=0, cellModifyIdx=0, cellDeleteIdx=0;
GNBDUConfigurationUpdate_t *duCfgUpdate = NULLP;
- Served_Cells_To_Modify_List_t *cellsToModify;
- Served_Cells_To_Modify_Item_t *modifyItem;
- idx=0;
- i=1;
+ Served_Cells_To_Modify_List_t *cellsToModify=NULLP;
+ Served_Cells_To_Delete_List_t *cellsToDelete=NULLP;
+ Served_Cells_To_Delete_Item_t *deleteItem = NULLP;
+ Served_Cells_To_Delete_ItemIEs_t *deleteItemIe = NULLP;
+
if(f1apDuCfg != NULLP)
{
if(f1apDuCfg->choice.initiatingMessage != NULLP)
{
- duCfgUpdate = &f1apDuCfg->choice.initiatingMessage->\
- value.choice.GNBDUConfigurationUpdate;
- if(duCfgUpdate->protocolIEs.list.array != NULLP)
- {
- if(duCfgUpdate->protocolIEs.list.array[i] != NULLP)
- {
- cellsToModify = &duCfgUpdate->protocolIEs.list.array[i]->\
- value.choice.Served_Cells_To_Modify_List;
- if(cellsToModify->list.array != NULLP)
- {
- if(cellsToModify->list.array[idx] != NULLP)
- {
- modifyItem=&cellsToModify->list.array[idx]->value.choice.\
- Served_Cells_To_Modify_Item;
- if(modifyItem->oldNRCGI.pLMN_Identity.buf != NULLP)
- {
- if(modifyItem->oldNRCGI.nRCellIdentity.buf != NULLP)
- {
- if(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf != NULLP)
- {
- if(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf
- != NULLP)
- {
- if(modifyItem->served_Cell_Information.servedPLMNs.list.array\
- != NULLP)
- {
- if(!modifyItem->served_Cell_Information.servedPLMNs.list.array[idx])
- {
- if(modifyItem->served_Cell_Information.servedPLMNs.list.\
- array[idx]->pLMN_Identity.buf != NULLP)
- {
- if(modifyItem->served_Cell_Information.servedPLMNs.list.\
- array[idx]->iE_Extensions!= NULLP)
- {
- if(modifyItem->served_Cell_Information.servedPLMNs.list.\
- array[idx]->iE_Extensions->list.array != NULLP)
- {
- if(modifyItem->served_Cell_Information.servedPLMNs.list.\
- array[idx]->iE_Extensions->list.array[idx])
- {
- if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
- iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
- list.array !=NULLP)
- {
- if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
- iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
- list.array[idx]!=NULLP)
- {
- if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
- iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
- list.array[idx]->sNSSAI.sST.buf!=NULLP)
- {
- if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
- iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
- list.array[idx]->sNSSAI.sD != NULLP)
- {
- if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
- iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
- list.array[idx]->sNSSAI.sD->buf!=NULLP)
- {
- if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD
- !=NULLP)
- {
- if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
- fDD->uL_NRFreqInfo.freqBandListNr.list.array!=NULLP)
- {
- if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
- fDD->uL_NRFreqInfo.freqBandListNr.list.array[idx]!=NULLP)
- {
- if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
- fDD->dL_NRFreqInfo.freqBandListNr.list.array !=NULLP)
- {
- if(modifyItem->served_Cell_Information.nR_Mode_Info.\
- choice.fDD->dL_NRFreqInfo.freqBandListNr.list.\
- array[idx]!= NULLP)
- {
- if(modifyItem->served_Cell_Information.\
- measurementTimingConfiguration.buf !=NULLP)
- {
- idx=2;
- if(duCfgUpdate->protocolIEs.list.array[idx]->value.\
- choice.GNB_DU_ID.buf!=NULLP)
- {
- DU_FREE(duCfgUpdate->protocolIEs.list.\
- array[idx]->value.choice.GNB_DU_ID.buf,\
- duCfgUpdate->protocolIEs.list.array[idx]->\
- value.choice.GNB_DU_ID.size);
- }
- idx=0;
- DU_FREE(modifyItem->served_Cell_Information.\
- measurementTimingConfiguration.\
- buf,modifyItem->served_Cell_Information.\
- measurementTimingConfiguration.size);
- }
- DU_FREE(modifyItem->served_Cell_Information.\
- nR_Mode_Info.choice.fDD->dL_NRFreqInfo.freqBandListNr.\
- list.array[idx],sizeof(FreqBandNrItem_t));
- }
- DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info\
- .choice.fDD->dL_NRFreqInfo.freqBandListNr.list.array,\
- modifyItem->served_Cell_Information.nR_Mode_Info.\
- choice.fDD->dL_NRFreqInfo.freqBandListNr.list.size);
- }
- DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.\
- choice.fDD->uL_NRFreqInfo.freqBandListNr.list.\
- array[idx],sizeof(FreqBandNrItem_t));
- }
- DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.\
- choice.\
- fDD->uL_NRFreqInfo.freqBandListNr.list.\
- array,modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
- fDD->uL_NRFreqInfo.freqBandListNr.list.size);
- }
- DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
- fDD,sizeof(FDD_Info_t));
- }
- DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
- array[idx]->iE_Extensions->list.array[idx]->extensionValue.choice.\
- SliceSupportList.\
- list.array[idx]->sNSSAI.sD->buf,modifyItem->served_Cell_Information.\
- servedPLMNs.list.array[idx]->iE_Extensions->list.array[idx]->\
- extensionValue.choice.SliceSupportList.list.array[idx]->\
- sNSSAI.sD->size);
+ duCfgUpdate = &f1apDuCfg->choice.initiatingMessage->\
+ value.choice.GNBDUConfigurationUpdate;
+ if(duCfgUpdate->protocolIEs.list.array != NULLP)
+ {
+ for(ieIdx=0; ieIdx<duCfgUpdate->protocolIEs.list.count; ieIdx++)
+ {
+ if(duCfgUpdate->protocolIEs.list.array[ieIdx] != NULLP)
+ {
+ switch(duCfgUpdate->protocolIEs.list.array[ieIdx]->id)
+ {
+ case ProtocolIE_ID_id_Served_Cells_To_Modify_List:
+ {
+ cellsToModify = &duCfgUpdate->protocolIEs.list.array[ieIdx]->\
+ value.choice.Served_Cells_To_Modify_List;
+ if(cellsToModify->list.array != NULLP)
+ {
+ for(cellModifyIdx=0; cellModifyIdx<cellsToModify->list.count ;cellModifyIdx++)
+ {
+ if(cellsToModify->list.array[cellModifyIdx] != NULLP)
+ {
+ freeCellsToModifyItem(&cellsToModify->list.array[cellModifyIdx]->value.choice.\
+ Served_Cells_To_Modify_Item);
+ DU_FREE(cellsToModify->list.array[cellModifyIdx],\
+ sizeof(Served_Cells_To_Modify_ItemIEs_t));
+ }
+ }
+ DU_FREE(cellsToModify->list.array,cellsToModify->list.size);
+ }
+ break;
+ }
+ case ProtocolIE_ID_id_Served_Cells_To_Delete_List:
+ {
+ cellsToDelete = &duCfgUpdate->protocolIEs.list.array[ieIdx]->\
+ value.choice.Served_Cells_To_Delete_List;
+ if(cellsToDelete->list.array != NULLP)
+ {
+ for(cellDeleteIdx=0; cellDeleteIdx<cellsToDelete->list.count ;cellDeleteIdx++)
+ {
+ if(cellsToDelete->list.array[cellDeleteIdx] != NULLP)
+ {
+ deleteItemIe = ((Served_Cells_To_Delete_ItemIEs_t*)\
+ cellsToDelete->list.array[cellDeleteIdx]);
+ deleteItem=&deleteItemIe->value.choice.Served_Cells_To_Delete_Item;
+ DU_FREE(deleteItem->oldNRCGI.pLMN_Identity.buf,\
+ deleteItem->oldNRCGI.pLMN_Identity.size);
+ DU_FREE(deleteItem->oldNRCGI.nRCellIdentity.buf,\
+ deleteItem->oldNRCGI.nRCellIdentity.size);
+ DU_FREE(cellsToDelete->list.array[cellDeleteIdx],\
+ sizeof(Served_Cells_To_Delete_ItemIEs_t));
+ }
+ }
+ DU_FREE(cellsToDelete->list.array,cellsToDelete->list.size);
+ }
- }
- DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
- array[idx]->\
- iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
- list.array[idx]->sNSSAI.sD,sizeof(OCTET_STRING_t));
- }
- DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
- iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
- list.array[idx]->sNSSAI.sST.buf,modifyItem->served_Cell_Information.\
- servedPLMNs.\
- list.array[idx]->iE_Extensions->list.array[idx]->extensionValue.choice.\
- SliceSupportList.list.array[idx]->sNSSAI.sST.size);
- }
- DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
- iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
- list.array[idx],sizeof(SliceSupportItem_t));
- }
- DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
- iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
- list.array,\
- modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
- iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.list.size);
- }
- }
- for(i=0;i<modifyItem->served_Cell_Information.servedPLMNs.list.\
- array[idx]->iE_Extensions->list.count;i++)
- {
- DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
- array[idx]->iE_Extensions->list.array[i],\
- sizeof(ServedPLMNs_ItemExtIEs_t ));
- }
- DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
- array[idx]->iE_Extensions->list.array,modifyItem->served_Cell_Information.servedPLMNs.
- list.array[idx]->iE_Extensions->list.size);
- }
- DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
- array[idx]->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P3_t));
- }
- DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
- array[idx]->pLMN_Identity.buf,
- modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->pLMN_Identity.size);
- }
- }
- for(i=0;i<modifyItem->served_Cell_Information.servedPLMNs.list.count;i++)
- {
- if(modifyItem->served_Cell_Information.servedPLMNs.list.array[i]
- != NULLP)
- {
- DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[i],\
- sizeof(ServedPLMNs_Item_t));
- }
- }
- DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
- modifyItem->served_Cell_Information.servedPLMNs.list.size);
- }
- DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
- modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.size);
- }
- DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
- modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.size);
- }
- DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
- modifyItem->oldNRCGI.nRCellIdentity.size);
- }
- DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,\
- modifyItem->oldNRCGI.pLMN_Identity.size);
- }
- }
- for(i=0; i<cellsToModify->list.count ;i++)
- {
- if(cellsToModify->list.array[i] != NULLP)
- {
- DU_FREE(cellsToModify->list.array[i],\
- sizeof(Served_Cells_To_Modify_ItemIEs_t));
- }
- }
- DU_FREE(cellsToModify->list.array,cellsToModify->list.size);
- }
- }
- for(i=0;i<duCfgUpdate->protocolIEs.list.count;i++)
- {
- if(duCfgUpdate->protocolIEs.list.array[i] !=NULLP)
- {
- DU_FREE(duCfgUpdate->protocolIEs.list.array[i],\
- sizeof(GNBDUConfigurationUpdateIEs_t));
- }
- }
- DU_FREE(duCfgUpdate->protocolIEs.list.array,duCfgUpdate->protocolIEs.list.size);
- }
- DU_FREE(f1apDuCfg->choice.initiatingMessage,sizeof(InitiatingMessage_t));
+ break;
+ }
+ case GNBDUConfigurationUpdateIEs__value_PR_GNB_DU_ID:
+ {
+ DU_FREE(duCfgUpdate->protocolIEs.list.array[ieIdx]->value.choice.GNB_DU_ID.buf,\
+ duCfgUpdate->protocolIEs.list.array[ieIdx]->value.choice.GNB_DU_ID.size);
+ break;
+ }
+ }
+ DU_FREE(duCfgUpdate->protocolIEs.list.array[ieIdx],\
+ sizeof(GNBDUConfigurationUpdateIEs_t));
+ }
+ }
+ DU_FREE(duCfgUpdate->protocolIEs.list.array,duCfgUpdate->protocolIEs.list.size);
+ }
+ DU_FREE(f1apDuCfg->choice.initiatingMessage,sizeof(InitiatingMessage_t));
}
DU_FREE(f1apDuCfg, (Size)sizeof(F1AP_PDU_t));
}
else
return ROK;
}
+/*******************************************************************
+ *
+ * @brief filling the DeleteItemList
+ *
+ * @details
+ *
+ * Function : fillCellToDeleteItem
+ *
+ * Functionality: Filling the DeleteItemIe
+ *
+ * @params[in] Pointer to Served_Cells_To_Delete_ItemIEs_t
+ *
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ *****************************************************************/
+uint8_t fillCellToDeleteItem(struct Served_Cells_To_Delete_ItemIEs *deleteItemIe)
+{
+ uint8_t arrIdx;
+ Served_Cells_To_Delete_Item_t *deleteItem=NULLP;
+
+ deleteItemIe->id = ProtocolIE_ID_id_Served_Cells_To_Delete_Item;
+ deleteItemIe->criticality = Criticality_reject;
+ deleteItemIe->value.present =\
+ Served_Cells_To_Delete_ItemIEs__value_PR_Served_Cells_To_Delete_Item;
+ deleteItem=&deleteItemIe->value.choice.Served_Cells_To_Delete_Item;
+
+ /*pLMN_Identity*/
+ deleteItem->oldNRCGI.pLMN_Identity.size = 3*sizeof(uint8_t);
+ DU_ALLOC(deleteItem->oldNRCGI.pLMN_Identity.buf,deleteItem->oldNRCGI.pLMN_Identity.size);
+ if(deleteItem->oldNRCGI.pLMN_Identity.buf == NULLP)
+ {
+ DU_LOG("ERROR --> F1AP: fillCellToDeleteItem(): Failed to allocate the memory");
+ return RFAILED;
+ }
+ buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
+ deleteItem->oldNRCGI.pLMN_Identity.buf);
+
+ /*nRCellIdentity*/
+ deleteItem->oldNRCGI.nRCellIdentity.size = 5*sizeof(uint8_t);
+ DU_ALLOC(deleteItem->oldNRCGI.nRCellIdentity.buf,\
+ deleteItem->oldNRCGI.nRCellIdentity.size);
+ if(deleteItem->oldNRCGI.nRCellIdentity.buf == NULLP)
+ {
+ DU_LOG("ERROR --> F1AP: fillCellToDeleteItem(): Failed to allocate the memory");
+ return RFAILED;
+ }
+ for(arrIdx = 0; arrIdx < deleteItem->oldNRCGI.nRCellIdentity.size-1; arrIdx++)
+ {
+ deleteItem->oldNRCGI.nRCellIdentity.buf[arrIdx] = 0;
+ }
+ deleteItem->oldNRCGI.nRCellIdentity.buf[4] = 16;
+ deleteItem->oldNRCGI.nRCellIdentity.bits_unused = 4;
+ return ROK;
+}
+/*******************************************************************
+ *
+ * @brief Builds ServCellToDeleteList
+ *
+ * @details
+ *
+ * Function : buildServCellToDeleteList
+ *
+ * Functionality: Builds the serv cell to delete List
+ *
+ * @params[in] Pointer to Served_Cells_To_Delete_List_t *
+ *
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ *****************************************************************/
+
+uint8_t buildServCellToDeleteList(Served_Cells_To_Delete_List_t *cellsToDelete)
+{
+ uint8_t ieListCnt, arrIdx;
+
+ ieListCnt = 1;
+ cellsToDelete->list.count = ieListCnt;
+ cellsToDelete->list.size = ieListCnt*sizeof(Served_Cells_To_Delete_ItemIEs_t *);
+
+ DU_ALLOC(cellsToDelete->list.array,cellsToDelete->list.size);
+ if(cellsToDelete->list.array == NULLP)
+ {
+ DU_LOG("\nERROR --> F1AP : buildServCellToDeleteList(): Memory allocation failed");
+ return RFAILED;
+ }
+
+ for(arrIdx=0; arrIdx< ieListCnt; arrIdx++)
+ {
+ DU_ALLOC(cellsToDelete->list.array[arrIdx],sizeof(Served_Cells_To_Delete_ItemIEs_t));
+ if(cellsToDelete->list.array[arrIdx] == NULLP)
+ {
+ DU_LOG("\nERROR --> F1AP : buildServCellToDeleteList(): Memory allocation failed");
+ return RFAILED;
+ }
+ }
+
+ arrIdx=0;
+ if(fillCellToDeleteItem((Served_Cells_To_Delete_ItemIEs_t*)cellsToDelete->list.array[arrIdx]) !=ROK)
+ {
+ DU_LOG("\nERROR --> F1AP: buildServCellToDeleteList(): failed to fill Served_Cells_To_Delete_ItemIEs");
+ return RFAILED;
+ }
+ return ROK;
+}
/*******************************************************************
*
* RFAILED - failure
*
* ****************************************************************/
-uint8_t BuildAndSendDUConfigUpdate()
+uint8_t BuildAndSendDUConfigUpdate(ServCellAction servCellAction)
{
- uint8_t ret, ieIdx, elementCnt;
+ uint8_t ret =0, ieIdx=0, elementCnt=0;
+ bool memAlloctionFailure = false;
F1AP_PDU_t *f1apDuCfg = NULLP;
GNBDUConfigurationUpdate_t *duCfgUpdate = NULLP;
asn_enc_rval_t encRetVal; /* Encoder return value */
+
memset(&encRetVal, 0, sizeof(asn_enc_rval_t));
ret= RFAILED;
DU_ALLOC(f1apDuCfg, sizeof(F1AP_PDU_t));
if(f1apDuCfg == NULLP)
{
- DU_LOG("\nERROR --> F1AP : Memory allocation for F1AP-PDU failed");
- break;
+ DU_LOG("\nERROR --> F1AP : BuildAndSendDUConfigUpdate(): Memory allocation for F1AP-PDU failed");
+ break;
}
f1apDuCfg->present = F1AP_PDU_PR_initiatingMessage;
DU_ALLOC(f1apDuCfg->choice.initiatingMessage,sizeof(InitiatingMessage_t));
if(f1apDuCfg->choice.initiatingMessage == NULLP)
{
- DU_LOG("\nERROR --> F1AP : Memory allocation for F1AP-PDU failed");
- break;
+ DU_LOG("\nERROR --> F1AP : BuildAndSendDUConfigUpdate(): Memory allocation for F1AP-PDU failed");
+ break;
}
f1apDuCfg->choice.initiatingMessage->procedureCode = \
- ProcedureCode_id_gNBDUConfigurationUpdate;
+ ProcedureCode_id_gNBDUConfigurationUpdate;
f1apDuCfg->choice.initiatingMessage->criticality = Criticality_reject;
f1apDuCfg->choice.initiatingMessage->value.present = \
- InitiatingMessage__value_PR_GNBDUConfigurationUpdate;
+ InitiatingMessage__value_PR_GNBDUConfigurationUpdate;
duCfgUpdate = &f1apDuCfg->choice.initiatingMessage->value.\
- choice.GNBDUConfigurationUpdate;
+ choice.GNBDUConfigurationUpdate;
elementCnt = 3;
duCfgUpdate->protocolIEs.list.count = elementCnt;
duCfgUpdate->protocolIEs.list.size = \
- elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t*);
+ elementCnt * sizeof(GNBDUConfigurationUpdateIEs_t*);
/* Initialize the F1Setup members */
DU_ALLOC(duCfgUpdate->protocolIEs.list.array,duCfgUpdate->protocolIEs.list.size);
if(duCfgUpdate->protocolIEs.list.array == NULLP)
{
- DU_LOG("ERROR --> F1AP : Memory allocation for F1RequestIEs failed");
- break;
+ DU_LOG("ERROR --> F1AP : BuildAndSendDUConfigUpdate(): Memory allocation failed");
+ break;
}
for(ieIdx=0; ieIdx<elementCnt; ieIdx++)
{
- DU_ALLOC(duCfgUpdate->protocolIEs.list.array[ieIdx],sizeof(GNBDUConfigurationUpdateIEs_t));
- if(duCfgUpdate->protocolIEs.list.array[ieIdx] == NULLP)
- {
- break;
- }
+ DU_ALLOC(duCfgUpdate->protocolIEs.list.array[ieIdx],sizeof(GNBDUConfigurationUpdateIEs_t));
+ if(duCfgUpdate->protocolIEs.list.array[ieIdx] == NULLP)
+ {
+ DU_LOG("ERROR --> F1AP : BuildAndSendDUConfigUpdate(): Memory allocation failed");
+ memAlloctionFailure = true;
+ break;
+ }
+ }
+
+ if(memAlloctionFailure == true)
+ {
+ break;
}
-
/*TransactionID*/
ieIdx = 0;
duCfgUpdate->protocolIEs.list.array[ieIdx]->id=ProtocolIE_ID_id_TransactionID;
duCfgUpdate->protocolIEs.list.array[ieIdx]->criticality= Criticality_reject;
duCfgUpdate->protocolIEs.list.array[ieIdx]->value.present = \
- GNBDUConfigurationUpdateIEs__value_PR_TransactionID;
+ GNBDUConfigurationUpdateIEs__value_PR_TransactionID;
duCfgUpdate->protocolIEs.list.array[ieIdx]->value.choice.TransactionID = TRANS_ID;
-
- /*Served Cell to Modify */
+
ieIdx++;
- duCfgUpdate->protocolIEs.list.array[ieIdx]->id = \
- ProtocolIE_ID_id_Served_Cells_To_Modify_List;
- duCfgUpdate->protocolIEs.list.array[ieIdx]->criticality =Criticality_reject;
- duCfgUpdate->protocolIEs.list.array[ieIdx]->value.present = \
- GNBDUConfigurationUpdateIEs__value_PR_Served_Cells_To_Modify_List;
- if(buildServCellToModList(&duCfgUpdate->protocolIEs.list.array[ieIdx]->value.choice.\
- Served_Cells_To_Modify_List))
- break;
-
+ if(servCellAction == SERV_CELL_TO_MODIFY)
+ {
+ /*Served Cell to Modify */
+ duCfgUpdate->protocolIEs.list.array[ieIdx]->id = \
+ ProtocolIE_ID_id_Served_Cells_To_Modify_List;
+ duCfgUpdate->protocolIEs.list.array[ieIdx]->criticality =Criticality_reject;
+ duCfgUpdate->protocolIEs.list.array[ieIdx]->value.present = \
+ GNBDUConfigurationUpdateIEs__value_PR_Served_Cells_To_Modify_List;
+ if(buildServCellToModList(&duCfgUpdate->protocolIEs.list.array[ieIdx]->value.choice.\
+ Served_Cells_To_Modify_List))
+ {
+ DU_LOG("ERROR --> DU APP : BuildAndSendDUConfigUpdate(): failed to build ServCellToModList");
+ break;
+ }
+ }
+ else
+ {
+ /*Served Cell to Delete */
+ duCfgUpdate->protocolIEs.list.array[ieIdx]->id = \
+ ProtocolIE_ID_id_Served_Cells_To_Delete_List;
+ duCfgUpdate->protocolIEs.list.array[ieIdx]->criticality =Criticality_reject;
+ duCfgUpdate->protocolIEs.list.array[ieIdx]->value.present = \
+ GNBDUConfigurationUpdateIEs__value_PR_Served_Cells_To_Delete_List;
+ if(buildServCellToDeleteList(&duCfgUpdate->protocolIEs.list.array[ieIdx]->value.choice.\
+ Served_Cells_To_Delete_List)!=ROK)
+ {
+ DU_LOG("ERROR --> DU APP : BuildAndSendDUConfigUpdate(): failed to build ServCellToDeleteList");
+ break;
+ }
+
+ }
// NOTE :GNB DU SYS INFO:MIB AND SIB1 INFORMATION TO BE BUILT AND FILLED HERE
/*GNB DU ID */
ieIdx++;
duCfgUpdate->protocolIEs.list.array[ieIdx]->id = ProtocolIE_ID_id_gNB_DU_ID;
duCfgUpdate->protocolIEs.list.array[ieIdx]->criticality = Criticality_reject;
duCfgUpdate->protocolIEs.list.array[ieIdx]->value.present = \
- GNBDUConfigurationUpdateIEs__value_PR_GNB_DU_ID;
+ GNBDUConfigurationUpdateIEs__value_PR_GNB_DU_ID;
duCfgUpdate->protocolIEs.list.array[ieIdx]->value.choice.GNB_DU_ID.size = sizeof(uint8_t);
DU_ALLOC(duCfgUpdate->protocolIEs.list.array[ieIdx]->value.choice.GNB_DU_ID.buf,\
- duCfgUpdate->protocolIEs.list.array[ieIdx]->value.choice.GNB_DU_ID.size);
+ duCfgUpdate->protocolIEs.list.array[ieIdx]->value.choice.GNB_DU_ID.size);
if(duCfgUpdate->protocolIEs.list.array[ieIdx]->value.choice.GNB_DU_ID.buf == NULLP)
{
- break;
+ DU_LOG("ERROR --> DU APP : BuildAndSendDUConfigUpdate(): Memory allocation failed for GNB_DU_ID");
+ break;
}
duCfgUpdate->protocolIEs.list.array[ieIdx]->value.choice.GNB_DU_ID.buf[0] = duCfgParam.duId;
/* Checking encode results */
if(encRetVal.encoded == ENCODE_FAIL)
{
- DU_LOG("ERROR --> F1AP : Could not encode DUConfigUpdate structure (at %s)\n",\
- encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
- break;
+ DU_LOG("ERROR --> F1AP : Could not encode DUConfigUpdate structure (at %s)\n",\
+ encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
+ break;
}
else
{
- DU_LOG("\nDEBUG --> F1AP : Created APER encoded buffer for DUConfigUpdate\n");
- for(ieIdx =0; ieIdx < encBufSize; ieIdx++)
- {
- printf("%x",encBuf[ieIdx]);
- }
+ DU_LOG("\nDEBUG --> F1AP : Created APER encoded buffer for DUConfigUpdate\n");
+ for(ieIdx =0; ieIdx < encBufSize; ieIdx++)
+ {
+ printf("%x",encBuf[ieIdx]);
+ }
}
/* Sending msg */
if(sendF1APMsg() != ROK)
{
- DU_LOG("\nERROR --> F1AP : Sending GNB-DU Config Update failed");
- break;
+ DU_LOG("\nERROR --> F1AP : Sending GNB-DU Config Update failed");
+ break;
}
ret = ROK;
break;
}
- FreeDUConfigUpdate(f1apDuCfg);
-
+
+ addToReservedF1apPduList(TRANS_ID,f1apDuCfg);
return ret;
}
free(gnbDuAck->protocolIEs.list.array);
}
}
+
+/*******************************************************************
+*
+* @brief Building result of gnb-du config update ack output
+*
+* @details
+*
+* Function : duProcGnbDuCfgUpdAckMsg
+*
+* Functionality:
+* Building output of gnb-du config update ack
+*
+* @params[in] transId
+* @return void
+*
+* ****************************************************************/
+
+uint8_t duProcGnbDuCfgUpdAckMsg(uint8_t transId)
+{
+ uint8_t ueId =0 , ueIdx =0, ieIdx=0,arrIdx=0;
+ uint8_t cellId =0, cellIdx =0, crnti=0;
+ CmLList *f1apPduNode;
+ ReservedF1apPduInfo *f1apPduInfo;
+ F1AP_PDU_t *f1apMsgPdu = NULLP;
+ GNBDUConfigurationUpdate_t *gnbDuConfigUpdate = NULLP;
+ BIT_STRING_t *cellIdentity;
+ struct Served_Cells_To_Delete_ItemIEs *deleteItemIe;
+ Served_Cells_To_Delete_List_t *cellsToDelete;
+ Served_Cells_To_Delete_Item_t *deleteItem=NULLP;
+
+ DU_LOG("\nINFO --> DU APP: GNB-DU config update Ack received ");
+ f1apPduNode = searchFromReservedF1apPduList(transId);
+ f1apPduInfo = (ReservedF1apPduInfo *)f1apPduNode->node;
+ f1apMsgPdu = (F1AP_PDU_t *)f1apPduInfo->f1apMsg;
+
+ if(f1apMsgPdu)
+ {
+ if(f1apMsgPdu->choice.initiatingMessage)
+ {
+ gnbDuConfigUpdate = &f1apMsgPdu->choice.initiatingMessage->value.choice.GNBDUConfigurationUpdate;
+ for(ieIdx=0; ieIdx < gnbDuConfigUpdate->protocolIEs.list.count; ieIdx++)
+ {
+ switch(gnbDuConfigUpdate->protocolIEs.list.array[ieIdx]->id)
+ {
+ case ProtocolIE_ID_id_Served_Cells_To_Delete_List:
+ {
+ cellsToDelete = &gnbDuConfigUpdate->protocolIEs.list.array[ieIdx]->value.choice.\
+ Served_Cells_To_Delete_List;
+ if(cellsToDelete->list.array)
+ {
+ if(cellsToDelete->list.array[arrIdx])
+ {
+ deleteItemIe = (Served_Cells_To_Delete_ItemIEs_t*)cellsToDelete->list.array[arrIdx];
+ deleteItem=&deleteItemIe->value.choice.Served_Cells_To_Delete_Item;
+ if(deleteItem->oldNRCGI.nRCellIdentity.buf)
+ {
+ cellIdentity = &deleteItem->oldNRCGI.nRCellIdentity;
+ bitStringToInt(cellIdentity, &cellId);
+ }
+ }
+ }
+
+ GET_CELL_IDX(cellId, cellIdx);
+ if(duCb.actvCellLst[cellIdx] != NULLP)
+ {
+ for(ueIdx = 0; ueIdx < duCb.numUe; ueIdx++)
+ {
+ crnti = duCb.actvCellLst[cellIdx]->ueCb[ueIdx].crnti;
+ GET_UE_IDX(crnti,ueId);
+ BuildAndSendUeContextReleaseReq(cellId, ueId);
+ }
+ }
+ else
+ {
+ DU_LOG("ERROR --> DU_APP : duProcGnbDuCfgUpdAckMsg(): CellId [%d] not found", cellId);
+ return RFAILED;
+ }
+
+ break;
+ }
+
+ default:
+ break;
+ }
+ }
+ }
+ }
+
+ FreeDUConfigUpdate(f1apMsgPdu);
+ deleteFromReservedF1apPduList(f1apPduNode);
+ return ROK;
+}
+
/*******************************************************************
*
* @brief Processes GNB DU config update ack
* ****************************************************************/
uint8_t procF1GNBDUCfgUpdAck(F1AP_PDU_t *f1apMsg)
{
- uint8_t ieIdx;
+ uint8_t ieIdx=0,transId=0;
GNBDUConfigurationUpdateAcknowledge_t *gnbDuAck = NULLP;
-
+
DU_LOG("\nINFO --> F1AP : GNB-DU config update acknowledgment");
gnbDuAck = &f1apMsg->choice.successfulOutcome->value.choice.GNBDUConfigurationUpdateAcknowledge;
-
+
for(ieIdx=0; ieIdx < gnbDuAck->protocolIEs.list.count; ieIdx++)
{
switch(gnbDuAck->protocolIEs.list.array[ieIdx]->id)
{
case ProtocolIE_ID_id_TransactionID:
- break;
+ {
+ transId = gnbDuAck->protocolIEs.list.array[ieIdx]->value.choice.TransactionID;
+ break;
+ }
case ProtocolIE_ID_id_Cells_to_be_Activated_List:
- break;
+ {
+ break;
+ }
default :
- DU_LOG("\nERROR --> F1AP: Invalid IE Received: %ld, at procF1GNBDUCfgUpdAck()", \
- gnbDuAck->protocolIEs.list.array[ieIdx]->id);
- break;
+ {
+ DU_LOG("\nERROR --> F1AP: procF1GNBDUCfgUpdAck(): Invalid IE Received: %ld", \
+ gnbDuAck->protocolIEs.list.array[ieIdx]->id);
+ break;
+ }
}
}
- duProcGnbDuCfgUpdAckMsg();
+
+ duProcGnbDuCfgUpdAckMsg(transId);
+
#if 0
+ /* presently we are not supporting F1 Reset from DU to CU , we are only
+ * supporting F1 Reset from CU to DU */
+
if(BuildAndSendF1ResetReq() != ROK)
{
return RFAILED;