freeAperDecodingOfE2ConnectionUpdate(connectionUpdate);
}
-/*******************************************************************
- *
- * @brief Free RIC Subscription action to be added list
- *
- * @details
- *
- * Function : freeAperDecodingOfRicSubsActionToBeAdded
- *
- * Functionality: Free the RIC Subscription action to be added list
- *
- * @params[in] RICactions_ToBeAddedForModification_List_t *subsDetails
- * @return void
- *
- * ****************************************************************/
-void freeAperDecodingOfRicSubsActionToBeAdded(RICactions_ToBeAddedForModification_List_t *subsDetails)
-{
- uint8_t elementIdx = 0;
- RICaction_ToBeAddedForModification_ItemIEs_t *addedActionItemIe=NULLP;
-
- if(subsDetails->list.array)
- {
- for(elementIdx = 0; elementIdx < subsDetails->list.count; elementIdx++)
- {
- if(subsDetails->list.array[elementIdx])
- {
- addedActionItemIe = (RICaction_ToBeAddedForModification_ItemIEs_t*)subsDetails->list.array[elementIdx];
- free(addedActionItemIe->value.choice.RICaction_ToBeAddedForModification_Item.ricActionDefinition.buf);
- free(subsDetails->list.array[elementIdx]);
- }
- }
- free(subsDetails->list.array);
- }
-}
-
-/*******************************************************************
- *
- * @brief Deallocation of memory allocated by aper decoder for
- * RIC Subscription action to be removed list
- *
- * @details
- *
- * Function : freeAperDecodingOfRicSubsActionToBeRemoved
- *
- * Functionality: Free the RIC Subscription action to be removed list
- *
- * @params[in] RICactions_ToBeRemovedForModification_List_t *subsDetails
- * @return void
- *
- * ****************************************************************/
-void freeAperDecodingOfRicSubsActionToBeRemoved(RICactions_ToBeRemovedForModification_List_t *subsDetails)
-{
- uint8_t elementIdx = 0;
-
- if(subsDetails->list.array)
- {
- for(elementIdx = 0; elementIdx < subsDetails->list.count; elementIdx++)
- {
- if(subsDetails->list.array[elementIdx])
- {
- free(subsDetails->list.array[elementIdx]);
- }
- }
- free(subsDetails->list.array);
- }
-}
-
-/*******************************************************************
- *
- * @brief Deallocation of memory allocated by aper decoder for
- * RIC Subscription action to be modify
- *
- * @details
- *
- * Function : freeAperDecodingOfRicSubsActionToBeModified
- *
- * Functionality: Free the RIC Subscription action to be modify
- *
- * @params[in] RICactions_ToBeModifiedForModification_List_t List
- * @return void
- *
- * ****************************************************************/
-void freeAperDecodingOfRicSubsActionToBeModified(RICactions_ToBeModifiedForModification_List_t *subsDetails)
-{
- uint8_t elementIdx = 0;
- RICaction_ToBeModifiedForModification_ItemIEs_t *actionItem = NULLP;
-
- if(subsDetails->list.array)
- {
- for(elementIdx = 0; elementIdx < subsDetails->list.count; elementIdx++)
- {
- if(subsDetails->list.array[elementIdx])
- {
- actionItem = (RICaction_ToBeModifiedForModification_ItemIEs_t *)subsDetails->list.array[elementIdx];
- if(actionItem->value.choice.RICaction_ToBeModifiedForModification_Item.ricActionDefinition)
- {
- free(actionItem->value.choice.RICaction_ToBeModifiedForModification_Item.ricActionDefinition->buf);
- free(actionItem->value.choice.RICaction_ToBeModifiedForModification_Item.ricActionDefinition);
- }
- free(subsDetails->list.array[elementIdx]);
- }
- }
- free(subsDetails->list.array);
- }
-}
-
-/*******************************************************************
- *
- * @brief Deallocation of memory allocated by aper decoder for
- * RIC Subscription modification Request
- *
- * @details
- *
- * Function freeAperDecodingOfRicSubsModificationReq
- *
- * Functionality : Free RIC Subscription modification Request
- *
- * @params[in] E2AP_PDU
- * @return void
- *
- ******************************************************************/
-void freeAperDecodingOfRicSubsModificationReq(E2AP_PDU_t *e2apRicMsg)
-{
- uint8_t idx = 0;
- RICsubscriptionModificationRequest_t *ricSubscriptionModReq;
- RICsubscriptionModificationRequest_IEs_t *ricSubscriptionModReqIe;
-
- ricSubscriptionModReq = &e2apRicMsg->choice.initiatingMessage->value.choice.RICsubscriptionModificationRequest;
-
- if(ricSubscriptionModReq->protocolIEs.list.array)
- {
- for(idx=0; idx < ricSubscriptionModReq->protocolIEs.list.count; idx++)
- {
- if(ricSubscriptionModReq->protocolIEs.list.array[idx])
- {
- ricSubscriptionModReqIe = ricSubscriptionModReq->protocolIEs.list.array[idx];
-
- switch(ricSubscriptionModReq->protocolIEs.list.array[idx]->id)
- {
- case ProtocolIE_IDE2_id_RICrequestID:
- break;
-
- case ProtocolIE_IDE2_id_RANfunctionID:
- break;
-
- case ProtocolIE_IDE2_id_RICactionsToBeRemovedForModification_List:
- {
- freeAperDecodingOfRicSubsActionToBeRemoved(&(ricSubscriptionModReqIe->value.choice.RICactions_ToBeRemovedForModification_List));
- break;
- }
- case ProtocolIE_IDE2_id_RICactionsToBeModifiedForModification_List:
- {
- freeAperDecodingOfRicSubsActionToBeModified(&(ricSubscriptionModReqIe->value.choice.RICactions_ToBeModifiedForModification_List));
- break;
- }
- case ProtocolIE_IDE2_id_RICactionsToBeAddedForModification_List:
- {
- freeAperDecodingOfRicSubsActionToBeAdded(&(ricSubscriptionModReqIe->value.choice.RICactions_ToBeAddedForModification_List));
- break;
- }
- default:
- {
- DU_LOG("\nERROR --> E2AP : Received Invalid Ie [%ld]", ricSubscriptionModReq->protocolIEs.list.array[idx]->id);
- break;
- }
-
- }
-
- free(ricSubscriptionModReq->protocolIEs.list.array[idx]);
- }
- }
- free(ricSubscriptionModReq->protocolIEs.list.array);
- }
-}
-
-/*******************************************************************
- *
- * @brief Process RIC Subscription modification request
- *
- * @details
- *
- * Function : procRicSubscriptionModificationRequest
- *
- * Functionality: Process RIC subscription modification request.
- *
- * @params[in] E2AP PDU
- * @return void
- *
- ******************************************************************/
-void procRicSubscriptionModificationRequest(E2AP_PDU_t *e2apMsg)
-{
- uint8_t ieIdx = 0;
- uint16_t ranFuncId = 0;
- bool procFailure = false;
- RicRequestId ricReqId;
- RanFunction *ranFuncDb = NULLP;
- CmLList *ricSubsNode = NULLP;
- RicSubscription *ricSubsDb = NULLP;
- RICsubscriptionModificationRequest_t *ricSubsModifyReq = NULLP;
- RICsubscriptionModificationRequest_IEs_t *ricSubsModifyReqIe = NULLP;
-
- DU_LOG("\nINFO --> E2AP : %s: Received RIC Subscription Modification Request", __func__);
-
- do{
- if(!e2apMsg)
- {
- DU_LOG("\nERROR --> E2AP : %s: E2AP Message is NULL", __func__);
- break;
- }
-
- if(!e2apMsg->choice.initiatingMessage)
- {
- DU_LOG("\nERROR --> E2AP : %s: Initiating Message in E2AP PDU is NULL", __func__);
- break;
- }
-
- ricSubsModifyReq = &e2apMsg->choice.initiatingMessage->value.choice.RICsubscriptionModificationRequest;
- for(ieIdx = 0; ieIdx < ricSubsModifyReq->protocolIEs.list.count; ieIdx++)
- {
- if(!ricSubsModifyReq->protocolIEs.list.array[ieIdx])
- {
- DU_LOG("\nERROR --> E2AP : %s: IE at index [%d] in E2AP message IEs list is null", __func__, ieIdx);
- break;
- }
-
- ricSubsModifyReqIe = ricSubsModifyReq->protocolIEs.list.array[ieIdx];
- switch(ricSubsModifyReqIe->id)
- {
- case ProtocolIE_IDE2_id_RICrequestID:
- {
- memset(&ricReqId, 0, sizeof(RicRequestId));
- ricReqId.requestorId = ricSubsModifyReqIe->value.choice.RICrequestID.ricRequestorID;
- ricReqId.instanceId = ricSubsModifyReqIe->value.choice.RICrequestID.ricInstanceID;
- break;
- }
-
- case ProtocolIE_IDE2_id_RANfunctionID:
- {
- ranFuncId = ricSubsModifyReqIe->value.choice.RANfunctionID;
- ranFuncDb = fetchRanFuncFromRanFuncId(ranFuncId);
- if(!ranFuncDb)
- {
- DU_LOG("\nERROR --> E2AP : %s: RAN Function ID [%d] not found", __func__, ranFuncId);
- procFailure = true;
- break;
- }
-
- ricSubsDb = fetchSubsInfoFromRicReqId(ricReqId, ranFuncDb, &ricSubsNode);
- if(!ricSubsDb)
- {
- DU_LOG("\nERROR --> E2AP : %s: RIC Subscription not found for Requestor_ID [%d] Instance_ID [%d]",\
- __func__, ricReqId.requestorId, ricReqId.instanceId);
- procFailure = true;
- break;
- }
-
- break;
- }
-
- default:
- break;
- } /* End of switch for Protocol IE Id */
-
- if(procFailure)
- break;
- } /* End of for loop for Protocol IE list */
-
- break;
- }while(true);
-
- freeAperDecodingOfRicSubsModificationReq(e2apMsg);
-}
-
/*******************************************************************
*
* @brief Handles received E2AP message and sends back response
procE2ConnectionUpdate(e2apMsg);
break;
}
- case InitiatingMessageE2__value_PR_RICsubscriptionModificationRequest:
- {
- DU_LOG("\nINFO --> E2AP : RIC Subscription Modification Request received");
- procRicSubscriptionModificationRequest(e2apMsg);
- break;
- }
default:
{
DU_LOG("\nERROR --> E2AP : Invalid type of E2AP_PDU_PR_initiatingMessage [%d]",\
* RFAILED
*
* ****************************************************************/
-uint8_t fillRicActionDef(RICactionDefinition_t *ricActionDef, uint8_t ricActionId, ConfigType configType)
+uint8_t fillRicActionDef(RICactionDefinition_t *ricActionDef)
{
uint8_t ret = RFAILED;
asn_enc_rval_t encRetVal;
break;
/* Granularity Period */
- actionFormat1->granulPeriod = RIC_ACTION_GRANULARITY_PERIOD(configType, ricActionId); /* In ms */
- DU_LOG("\nPBORLA configType %d ricActionId %d, actionFormat1->granulPeriod %d", configType, ricActionId, actionFormat1->granulPeriod );
+ actionFormat1->granulPeriod = RIC_ACTION_GRANULARITY_PERIOD; /* In ms */
/* Prints the Msg formed */
xer_fprint(stdout, &asn_DEF_E2SM_KPM_ActionDefinition, &actionDef);
DU_LOG("\nERROR --> E2AP : Memory allocation failed at [%s] : line [%d]", __func__, __LINE__);
break;
}
- if(fillRicActionDef(actionItem->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition, ricActionId, CONFIG_ADD) != ROK)
+ if(fillRicActionDef(actionItem->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition) != ROK)
{
DU_LOG("\nERROR --> E2AP : Failed at [%s] : line [%d]", __func__, __LINE__);
break;
}
}
-/*******************************************************************
- *
- * @brief Free RIC Subscription action to be added list
- *
- * @details
- *
- * Function : FreeRicSubsActionToBeAdded
- *
- * Functionality: Free the RIC Subscription action to be added list
- *
- * @params[in] RICactions_ToBeAddedForModification_List_t *subsDetails
- * @return void
- *
- * ****************************************************************/
-void FreeRicSubsActionToBeAdded(RICactions_ToBeAddedForModification_List_t *subsDetails)
-{
- uint8_t elementIdx = 0;
- RICaction_ToBeAddedForModification_ItemIEs_t *addedActionItemIe=NULLP;
-
- if(subsDetails->list.array)
- {
- for(elementIdx = 0; elementIdx < subsDetails->list.count; elementIdx++)
- {
- if(subsDetails->list.array[elementIdx])
- {
- addedActionItemIe = (RICaction_ToBeAddedForModification_ItemIEs_t*)subsDetails->list.array[elementIdx];
- RIC_FREE(addedActionItemIe->value.choice.RICaction_ToBeAddedForModification_Item.ricActionDefinition.buf, \
- addedActionItemIe->value.choice.RICaction_ToBeAddedForModification_Item.ricActionDefinition.size);
- RIC_FREE(subsDetails->list.array[elementIdx], sizeof(RICaction_ToBeAddedForModification_ItemIEs_t));
- }
- }
- RIC_FREE(subsDetails->list.array, subsDetails->list.size);
- }
-}
-
-/*******************************************************************
- *
- * @brief Free RIC Subscription action to be removed list
- *
- * @details
- *
- * Function : FreeRicSubsActionToBeRemoved
- *
- * Functionality: Free the RIC Subscription action to be removed list
- *
- * @params[in] RICactions_ToBeRemovedForModification_List_t *subsDetails
- * @return void
- *
- * ****************************************************************/
-void FreeRicSubsActionToBeRemoved(RICactions_ToBeRemovedForModification_List_t *subsDetails)
-{
- uint8_t elementIdx = 0;
-
- if(subsDetails->list.array)
- {
- for(elementIdx = 0; elementIdx < subsDetails->list.count; elementIdx++)
- {
- RIC_FREE(subsDetails->list.array[elementIdx], sizeof(RICaction_ToBeRemovedForModification_ItemIEs_t));
- }
- RIC_FREE(subsDetails->list.array, subsDetails->list.size);
- }
-}
-
-/*******************************************************************
- *
- * @brief Free RIC Subscription action to be modify
- *
- * @details
- *
- * Function : FreeRicSubsActionToBeModified
- *
- * Functionality: Free the RIC Subscription action to be modify
- *
- * @params[in] RICactions_ToBeModifiedForModification_List_t List
- * @return void
- *
- * ****************************************************************/
-void FreeRicSubsActionToBeModified(RICactions_ToBeModifiedForModification_List_t *subsDetails)
-{
- uint8_t elementIdx = 0;
- RICaction_ToBeModifiedForModification_ItemIEs_t *actionItem = NULLP;
-
- if(subsDetails->list.array)
- {
- for(elementIdx = 0; elementIdx < subsDetails->list.count; elementIdx++)
- {
- if(subsDetails->list.array[elementIdx])
- {
- actionItem = (RICaction_ToBeModifiedForModification_ItemIEs_t *)subsDetails->list.array[elementIdx];
- if(actionItem->value.choice.RICaction_ToBeModifiedForModification_Item.ricActionDefinition)
- {
- RIC_FREE(actionItem->value.choice.RICaction_ToBeModifiedForModification_Item.ricActionDefinition->buf, \
- actionItem->value.choice.RICaction_ToBeModifiedForModification_Item.ricActionDefinition->size);
- RIC_FREE(actionItem->value.choice.RICaction_ToBeModifiedForModification_Item.ricActionDefinition, sizeof(RICactionDefinition_t));
- }
- RIC_FREE(subsDetails->list.array[elementIdx], sizeof(RICaction_ToBeModifiedForModification_ItemIEs_t))
- }
- }
- RIC_FREE(subsDetails->list.array, subsDetails->list.size);
- }
-}
-
-/*******************************************************************
- *
- * @brief Free RIC Subscription modification Request
- *
- * @details
- *
- * Function :FreeRicSubscriptionModReq
- *
- * Functionality : Free RIC Subscription modification Request
- *
- * @params[in] E2AP_PDU
- * @return void
- *
- ******************************************************************/
-void FreeRicSubscriptionModReq(E2AP_PDU_t *e2apRicMsg)
-{
- uint8_t idx = 0;
- RICsubscriptionModificationRequest_t *ricSubscriptionModReq =NULLP;
- RICsubscriptionModificationRequest_IEs_t *ricSubscriptionModReqIe=NULLP;
-
- if(e2apRicMsg)
- {
- if(e2apRicMsg->choice.initiatingMessage)
- {
- ricSubscriptionModReq = &e2apRicMsg->choice.initiatingMessage->value.choice.RICsubscriptionModificationRequest;
- if(ricSubscriptionModReq->protocolIEs.list.array)
- {
- for(idx=0; idx < ricSubscriptionModReq->protocolIEs.list.count; idx++)
- {
- if(ricSubscriptionModReq->protocolIEs.list.array[idx])
- {
- ricSubscriptionModReqIe = ricSubscriptionModReq->protocolIEs.list.array[idx];
- switch(ricSubscriptionModReq->protocolIEs.list.array[idx]->id)
- {
- case ProtocolIE_IDE2_id_RICrequestID:
- break;
- case ProtocolIE_IDE2_id_RANfunctionID:
- break;
- case ProtocolIE_IDE2_id_RICactionsToBeRemovedForModification_List:
- {
- FreeRicSubsActionToBeRemoved(&(ricSubscriptionModReqIe->value.choice.RICactions_ToBeRemovedForModification_List));
- break;
- }
- case ProtocolIE_IDE2_id_RICactionsToBeModifiedForModification_List:
- {
- FreeRicSubsActionToBeModified(&(ricSubscriptionModReqIe->value.choice.RICactions_ToBeModifiedForModification_List));
- break;
- }
- case ProtocolIE_IDE2_id_RICactionsToBeAddedForModification_List:
- {
- FreeRicSubsActionToBeAdded(&(ricSubscriptionModReqIe->value.choice.RICactions_ToBeAddedForModification_List));
- break;
- }
- default:
- {
- DU_LOG("\nERROR --> E2AP : Received Invalid Ie [%ld]", ricSubscriptionModReq->protocolIEs.list.array[idx]->id);
- break;
- }
-
- }
-
- RIC_FREE(ricSubscriptionModReq->protocolIEs.list.array[idx], sizeof(RICsubscriptionModificationRequest_IEs_t));
- }
- }
- RIC_FREE(ricSubscriptionModReq->protocolIEs.list.array, ricSubscriptionModReq->protocolIEs.list.size);
- }
- RIC_FREE(e2apRicMsg->choice.initiatingMessage, sizeof(InitiatingMessageE2_t));
- }
- RIC_FREE(e2apRicMsg, sizeof(E2AP_PDU_t));
- }
-}
-
-/*******************************************************************
-*
-* @brief Build Ric subscription action to be modify list
-*
-* @details
-*
-* Function : BuildRicSubsActionToBeModify
-*
-* Functionality: Build Ric subscription action to be modify list
-*
-* @params[in]
-* RICactions_ToBeModifiedForModification_List_t to be filled
-* Num of action to be modify
-* List of action to be modify
-*
-* @return ROK - success
-* RFAILED - failure
-*
-******************************************************************/
-
-uint8_t BuildRicSubsActionToBeModify(RICactions_ToBeModifiedForModification_List_t *modifyActionList, uint8_t numOfActionToBeModify, ActionInfo *actionToBeModify)
-{
- uint8_t arrIdx=0;
- RICaction_ToBeModifiedForModification_ItemIEs_t *modifiedActionItemIe=NULLP;
-
- modifyActionList->list.count = numOfActionToBeModify;
- modifyActionList->list.size = modifyActionList->list.count * sizeof(RICaction_ToBeModifiedForModification_ItemIEs_t*);
- RIC_ALLOC(modifyActionList->list.array, modifyActionList->list.size);
- if(!modifyActionList->list.array)
- {
- DU_LOG("\nERROR --> E2AP : Memory allocation failed at [%s] : line [%d]", __func__, __LINE__);
- return RFAILED;
- }
-
- for(arrIdx = 0; arrIdx< modifyActionList->list.count; arrIdx++)
- {
- RIC_ALLOC(modifyActionList->list.array[arrIdx], sizeof(RICaction_ToBeModifiedForModification_ItemIEs_t));
- if(!modifyActionList->list.array[arrIdx])
- {
- DU_LOG("\nERROR --> E2AP : Memory allocation failed at [%s] : line [%d]", __func__, __LINE__);
- return RFAILED;
- }
- modifiedActionItemIe = (RICaction_ToBeModifiedForModification_ItemIEs_t*)modifyActionList->list.array[arrIdx];
- modifiedActionItemIe->id = ProtocolIE_IDE2_id_RICaction_ToBeModifiedForModification_Item;
- modifiedActionItemIe->criticality = CriticalityE2_ignore;
- modifiedActionItemIe->value.present = RICaction_ToBeModifiedForModification_ItemIEs__value_PR_RICaction_ToBeModifiedForModification_Item;
- modifiedActionItemIe->value.choice.RICaction_ToBeModifiedForModification_Item.ricActionID = actionToBeModify[arrIdx].actionId;
-
- /* RIC Action Definition */
- RIC_ALLOC(modifiedActionItemIe->value.choice.RICaction_ToBeModifiedForModification_Item.ricActionDefinition, sizeof(RICactionDefinition_t));
- if(!modifiedActionItemIe->value.choice.RICaction_ToBeModifiedForModification_Item.ricActionDefinition)
- {
- DU_LOG("\nERROR --> E2AP : Memory allocation failed at [%s] : line [%d]", __func__, __LINE__);
- break;
- }
-
- if(fillRicActionDef(modifiedActionItemIe->value.choice.RICaction_ToBeModifiedForModification_Item.ricActionDefinition,\
- actionToBeModify[arrIdx].actionId, CONFIG_MOD) != ROK)
- {
- DU_LOG("\nERROR --> E2AP : Failed at [%s] : line [%d]", __func__, __LINE__);
- break;
- }
-
- }
- return ROK;
-}
-
-/*******************************************************************
-*
-* @brief Build Ric subscription action to be removed list
-*
-* @details
-*
-* Function : BuildRicSubsActionToBeRemoved
-*
-* Functionality: Build Ric subscription action to be removed list
-*
-* @params[in]
-* RICactions_ToBeRemovedForModification_List_t to be filled
-* Num Of Action To Be Remove
-* Action remove list
-*
-* @return ROK - success
-* RFAILED - failure
-*
-******************************************************************/
-
-uint8_t BuildRicSubsActionToBeRemoved(RICactions_ToBeRemovedForModification_List_t *removeActionList, uint8_t numOfActionToBeRemove, ActionInfo *actionToBeRemove)
-{
- uint8_t arrIdx=0;
- RICaction_ToBeRemovedForModification_ItemIEs_t *removeActionItemIe=NULLP;
-
- removeActionList->list.count = numOfActionToBeRemove;
- removeActionList->list.size = removeActionList->list.count * sizeof(RICaction_ToBeRemovedForModification_ItemIEs_t*);
- RIC_ALLOC(removeActionList->list.array, removeActionList->list.size);
- if(!removeActionList->list.array)
- {
- DU_LOG("\nERROR --> E2AP : Memory allocation failed at [%s] : line [%d]", __func__, __LINE__);
- return RFAILED;
- }
-
- for(arrIdx = 0; arrIdx< removeActionList->list.count; arrIdx++)
- {
- RIC_ALLOC(removeActionList->list.array[arrIdx], sizeof(RICaction_ToBeRemovedForModification_ItemIEs_t));
- if(!removeActionList->list.array[arrIdx])
- {
- DU_LOG("\nERROR --> E2AP : Memory allocation failed at [%s] : line [%d]", __func__, __LINE__);
- return RFAILED;
- }
- removeActionItemIe = (RICaction_ToBeRemovedForModification_ItemIEs_t*)removeActionList->list.array[arrIdx];
- removeActionItemIe->id = ProtocolIE_IDE2_id_RICaction_ToBeRemovedForModification_Item;
- removeActionItemIe->criticality = CriticalityE2_ignore;
- removeActionItemIe->value.present = RICaction_ToBeRemovedForModification_ItemIEs__value_PR_RICaction_ToBeRemovedForModification_Item;
- removeActionItemIe->value.choice.RICaction_ToBeRemovedForModification_Item.ricActionID = actionToBeRemove[arrIdx].actionId;
- }
- return ROK;
-}
-
-/*******************************************************************
-*
-* @brief Build Ric subscription action to be added list
-*
-* @details
-*
-* Function : BuildRicSubsActionToBeAdded
-*
-* Functionality: Build Ric subscription action to be added list
-*
-* @params[in]
-* RICactions_ToBeAddedForModification_List_t to be filled
-* Num Of Action To Be added
-* Action add list
-*
-* @return ROK - success
-* RFAILED - failure
-*
-******************************************************************/
-
-uint8_t BuildRicSubsActionToBeAdded(RICactions_ToBeAddedForModification_List_t *addedActionList, RicSubscription **ricSubsInfo, uint8_t numOfActionToBeAdded, ActionInfo *actionToBeAdded)
-{
- uint8_t arrIdx=0;
- RICaction_ToBeAddedForModification_ItemIEs_t *addedActionItemIe;
-
- addedActionList->list.count = numOfActionToBeAdded;
- addedActionList->list.size = addedActionList->list.count * sizeof(RICaction_ToBeAddedForModification_ItemIEs_t*);
- RIC_ALLOC(addedActionList->list.array, addedActionList->list.size);
- if(!addedActionList->list.array)
- {
- DU_LOG("\nERROR --> E2AP : Memory allocation failed at [%s] : line [%d]", __func__, __LINE__);
- return RFAILED;
- }
-
- for(arrIdx = 0; arrIdx< addedActionList->list.count; arrIdx++)
- {
- RIC_ALLOC(addedActionList->list.array[arrIdx], sizeof(RICaction_ToBeAddedForModification_ItemIEs_t));
- if(!addedActionList->list.array[arrIdx])
- {
- DU_LOG("\nERROR --> E2AP : Memory allocation failed at [%s] : line [%d]", __func__, __LINE__);
- return RFAILED;
- }
- addedActionItemIe = (RICaction_ToBeAddedForModification_ItemIEs_t*)addedActionList->list.array[arrIdx];
- addedActionItemIe->id = ProtocolIE_IDE2_id_RICaction_ToBeAddedForModification_Item;
- addedActionItemIe->criticality = CriticalityE2_ignore;
- addedActionItemIe->value.present = RICaction_ToBeAddedForModification_ItemIEs__value_PR_RICaction_ToBeAddedForModification_Item;
- addedActionItemIe->value.choice.RICaction_ToBeAddedForModification_Item.ricActionID = actionToBeAdded[arrIdx].actionId;
-
- addedActionItemIe->value.choice.RICaction_ToBeAddedForModification_Item.ricActionType = RICactionType_report;
-
- if(fillRicActionDef(&addedActionItemIe->value.choice.RICaction_ToBeAddedForModification_Item.ricActionDefinition, \
- actionToBeAdded[arrIdx].actionId, CONFIG_ADD) != ROK)
- {
- DU_LOG("\nERROR --> E2AP : Failed at [%s] : line [%d]", __func__, __LINE__);
- break;
- }
- (*ricSubsInfo)->actionSequence[(*ricSubsInfo)->numOfActions].actionId = (*ricSubsInfo)->numOfActions;
- (*ricSubsInfo)->numOfActions++;
- }
- return ROK;
-}
-
-/*******************************************************************
- *
- * @brief Builds and Send the RicSubscriptionModReq
- *
- * @details
- *
- * Function : BuildAndSendRicSubscriptionModReq
- *
- * Functionality:Builds and Send the RicSubscriptionModReq
- *
- * @params[in]
- * Du databse
- * Ric subs information
- * List of ric subs action which needs to modify/add/remove
- * @return ROK - success
- * RFAILED - failure
- *
- ******************************************************************/
-
-uint8_t BuildAndSendRicSubscriptionModReq(DuDb *duDb, RicSubscription **ricSubsInfo, RicSubsModReq ricSubsModReq)
-{
- uint8_t ret = RFAILED;
- uint8_t elementCnt = 0;
- uint8_t idx = 0, cfgIdx=0;
- asn_enc_rval_t encRetVal; /* Encoder return value */
- E2AP_PDU_t *e2apRicMsg = NULL;
- RICsubscriptionModificationRequest_t *ricSubscriptionModReq;
- RanFunction *ranFuncDb = &duDb->ranFunction[0];
- CmLList *subscriptionNode = NULLP;
-
- DU_LOG("\nINFO --> E2AP : Building RIC Subscription Request\n");
-
- while(true)
- {
- RIC_ALLOC(e2apRicMsg, sizeof(E2AP_PDU_t));
- if(e2apRicMsg == NULLP)
- {
- DU_LOG("\nERROR --> E2AP : Memory allocation failed at [%s] : line [%d]", __func__, __LINE__);
- break;
- }
-
- e2apRicMsg->present = E2AP_PDU_PR_initiatingMessage;
- RIC_ALLOC(e2apRicMsg->choice.initiatingMessage, sizeof(InitiatingMessageE2_t));
- if(e2apRicMsg->choice.initiatingMessage == NULLP)
- {
- DU_LOG("\nERROR --> E2AP : Memory allocation failed at [%s] : line [%d]", __func__, __LINE__);
- break;
- }
- e2apRicMsg->choice.initiatingMessage->procedureCode = ProcedureCodeE2_id_RICsubscriptionModification;
- e2apRicMsg->choice.initiatingMessage->criticality = CriticalityE2_reject;
- e2apRicMsg->choice.initiatingMessage->value.present = InitiatingMessageE2__value_PR_RICsubscriptionModificationRequest;
-
- ricSubscriptionModReq = &e2apRicMsg->choice.initiatingMessage->value.choice.RICsubscriptionModificationRequest;
-
- /* Increasing the elment count based on the number of configured action to be add, mod, delete */
- elementCnt = 2;
- if(ricSubsModReq.numOfActionToBeAdded)
- elementCnt++;
- if(ricSubsModReq.numOfActionToBeModify)
- elementCnt++;
- if(ricSubsModReq.numOfActionToBeRemove)
- elementCnt++;
-
- ricSubscriptionModReq->protocolIEs.list.count = elementCnt;
- ricSubscriptionModReq->protocolIEs.list.size = elementCnt * sizeof(RICsubscriptionModificationRequest_IEs_t);
-
- /* Initialize the subscription members */
- RIC_ALLOC(ricSubscriptionModReq->protocolIEs.list.array, ricSubscriptionModReq->protocolIEs.list.size);
- if(ricSubscriptionModReq->protocolIEs.list.array == NULLP)
- {
- DU_LOG("\nERROR --> E2AP : Memory allocation failed at [%s] : line [%d]", __func__, __LINE__);
- break;
- }
-
- for(idx=0; idx<elementCnt; idx++)
- {
- RIC_ALLOC(ricSubscriptionModReq->protocolIEs.list.array[idx], sizeof(RICsubscriptionModificationRequest_IEs_t));
- if(ricSubscriptionModReq->protocolIEs.list.array[idx] == NULLP)
- {
- DU_LOG("\nERROR --> E2AP : Memory allocation failed at [%s] : line [%d]", __func__, __LINE__);
- break;
- }
- }
- if(idx < elementCnt)
- break;
-
- /* Filling RIC Request Id */
- idx = 0;
- ricSubscriptionModReq->protocolIEs.list.array[idx]->id = ProtocolIE_IDE2_id_RICrequestID;
- ricSubscriptionModReq->protocolIEs.list.array[idx]->criticality = CriticalityE2_reject;
- ricSubscriptionModReq->protocolIEs.list.array[idx]->value.present =\
- RICsubscriptionModificationRequest_IEs__value_PR_RICrequestID;
- ricSubscriptionModReq->protocolIEs.list.array[idx]->value.choice.RICrequestID.ricRequestorID = (*ricSubsInfo)->requestId.requestorId;
- ricSubscriptionModReq->protocolIEs.list.array[idx]->value.choice.RICrequestID.ricInstanceID = (*ricSubsInfo)->requestId.instanceId;
-
- /* Filling RAN Function Id */
- idx++;
- ricSubscriptionModReq->protocolIEs.list.array[idx]->id = ProtocolIE_IDE2_id_RANfunctionID;
- ricSubscriptionModReq->protocolIEs.list.array[idx]->criticality = CriticalityE2_reject;
- ricSubscriptionModReq->protocolIEs.list.array[idx]->value.present =\
- RICsubscriptionModificationRequest_IEs__value_PR_RANfunctionID;
- ricSubscriptionModReq->protocolIEs.list.array[idx]->value.choice.RANfunctionID = (*ricSubsInfo)->ranFuncId;
-
- if(ricSubsModReq.numOfActionToBeRemove)
- {
- /* Filling RIC Subscription action to be removed */
- idx++;
- ricSubscriptionModReq->protocolIEs.list.array[idx]->id = ProtocolIE_IDE2_id_RICactionsToBeRemovedForModification_List;
- ricSubscriptionModReq->protocolIEs.list.array[idx]->criticality = CriticalityE2_ignore;
- ricSubscriptionModReq->protocolIEs.list.array[idx]->value.present = RICsubscriptionModificationRequest_IEs__value_PR_RICactions_ToBeRemovedForModification_List;
- if(BuildRicSubsActionToBeRemoved(&ricSubscriptionModReq->protocolIEs.list.array[idx]->value.choice.RICactions_ToBeRemovedForModification_List,\
- ricSubsModReq.numOfActionToBeRemove, ricSubsModReq.actionToBeRemove) != ROK)
- {
- DU_LOG("\nERROR --> E2AP : Failed at [%s] : line [%d]", __func__, __LINE__);
- break;
- }
- }
- if(ricSubsModReq.numOfActionToBeModify)
- {
- /* Filling RIC Subscription action to be modified */
- idx++;
- ricSubscriptionModReq->protocolIEs.list.array[idx]->id = ProtocolIE_IDE2_id_RICactionsToBeModifiedForModification_List;
- ricSubscriptionModReq->protocolIEs.list.array[idx]->criticality = CriticalityE2_ignore;
- ricSubscriptionModReq->protocolIEs.list.array[idx]->value.present = RICsubscriptionModificationRequest_IEs__value_PR_RICactions_ToBeModifiedForModification_List;
- if(BuildRicSubsActionToBeModify(&ricSubscriptionModReq->protocolIEs.list.array[idx]->value.choice.RICactions_ToBeModifiedForModification_List,\
- ricSubsModReq.numOfActionToBeModify, ricSubsModReq.actionToBeModify) != ROK)
- {
- DU_LOG("\nERROR --> E2AP : Failed at [%s] : line [%d]", __func__, __LINE__);
- break;
- }
- }
-
- if(ricSubsModReq.numOfActionToBeAdded)
- {
- /* Filling RIC Subscription action to be added */
- idx++;
- ricSubscriptionModReq->protocolIEs.list.array[idx]->id = ProtocolIE_IDE2_id_RICactionsToBeAddedForModification_List;
- ricSubscriptionModReq->protocolIEs.list.array[idx]->criticality = CriticalityE2_ignore;
- ricSubscriptionModReq->protocolIEs.list.array[idx]->value.present = RICsubscriptionModificationRequest_IEs__value_PR_RICactions_ToBeAddedForModification_List;
- if(BuildRicSubsActionToBeAdded(&ricSubscriptionModReq->protocolIEs.list.array[idx]->value.choice.RICactions_ToBeAddedForModification_List,\
- ricSubsInfo, ricSubsModReq.numOfActionToBeAdded, ricSubsModReq.actionToBeAdded) != ROK)
- {
- DU_LOG("\nERROR --> E2AP : Failed at [%s] : line [%d]", __func__, __LINE__);
- break;
- }
- }
-
- /* Prints the Msg formed */
- xer_fprint(stdout, &asn_DEF_E2AP_PDU, e2apRicMsg);
-
- memset(encBuf, 0, ENC_BUF_MAX_LEN);
- encBufSize = 0;
- encRetVal = aper_encode(&asn_DEF_E2AP_PDU, 0, e2apRicMsg, PrepFinalEncBuf, encBuf);
- if(encRetVal.encoded == ENCODE_FAIL)
- {
- DU_LOG("\nERROR --> E2AP : Could not encode RicSubscriptionModRequest structure (at %s)\n",\
- encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
- break;
- }
- else
- {
- DU_LOG("\nDEBUG --> E2AP : Created APER encoded buffer for RicSubscriptionModRequest\n");
- for(int i=0; i< encBufSize; i++)
- {
- DU_LOG("%x",encBuf[i]);
- }
- }
-
- /* Sending msg */
- if(SendE2APMsg(RIC_APP_MEM_REG, RIC_POOL, duDb->duId) != ROK)
- {
- DU_LOG("\nERROR --> E2AP : Sending RIC subscription Request failed");
- break;
- }
-
- ret = ROK;
- break;
- }
-
- FreeRicSubscriptionModReq(e2apRicMsg);
- return ret;
-}
-
-/*******************************************************************
- *
- * @brief Builds RicSubscriptionModReq
- *
- * @details
- *
- * Function : BuildRicSubscriptionModReq
- *
- * Functionality:Builds the RicSubscriptionModReq
- *
- * @params[in]
- * Du databse
- * @return void
- *
- * ****************************************************************/
-
-void BuildRicSubsModificationReq(DuDb *duDb, RicSubscription *ricSubsInfo)
-{
- uint8_t actionToBeAdded =0;
- uint8_t actionIdx =0, tmpActionIdx=0;
- RicSubsModReq ricSubsModReq;
-
- if(ricSubsInfo)
- {
- memset(&ricSubsModReq, 0, sizeof(RicSubsModReq));
- for(actionIdx=0; actionIdx<ricSubsInfo->numOfActions; actionIdx++)
- {
- /* Change the condition based on the action required to be modiified or removed */
- if(actionIdx%2 == 0)
- {
- tmpActionIdx = ricSubsModReq.numOfActionToBeModify;
- ricSubsModReq.actionToBeModify[tmpActionIdx].actionId = ricSubsInfo->actionSequence[actionIdx].actionId;
- ricSubsModReq.numOfActionToBeModify++;
- }
- else
- {
- tmpActionIdx = ricSubsModReq.numOfActionToBeRemove;
- ricSubsModReq.actionToBeRemove[tmpActionIdx].actionId = ricSubsInfo->actionSequence[actionIdx].actionId;
- ricSubsModReq.numOfActionToBeRemove++;
- }
- }
- /* Change the value of actionToBeAdded based on the number of action required to be added */
- actionToBeAdded =1;
- tmpActionIdx = ricSubsInfo->numOfActions;
- for(actionIdx=0; actionIdx<actionToBeAdded; actionIdx++)
- {
- ricSubsModReq.actionToBeAdded[actionIdx].actionId = tmpActionIdx;
- ricSubsModReq.numOfActionToBeAdded++;
- tmpActionIdx++;
- }
-
- if(BuildAndSendRicSubscriptionModReq(duDb, &ricSubsInfo, ricSubsModReq) != ROK)
- {
- DU_LOG("\nERROR --> E2AP : failed to build and send RIC Subscription Modification");
- return ;
- }
- }
-}
-
/*******************************************************************
*
* @brief Handles received E2AP message and sends back response