X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fric_stub%2Fric_e2ap_msg_hdl.c;h=9a46679071846323ea570dba5a8e51279a79d36f;hb=8530ec005b20461df914fe0469342b076bd64656;hp=0d8555c1af05edb0a57b651f0f9653c7130f3a8c;hpb=76d2662c441ac10d75d004698ae6ca6a61814d72;p=o-du%2Fl2.git diff --git a/src/ric_stub/ric_e2ap_msg_hdl.c b/src/ric_stub/ric_e2ap_msg_hdl.c index 0d8555c1a..9a4667907 100644 --- a/src/ric_stub/ric_e2ap_msg_hdl.c +++ b/src/ric_stub/ric_e2ap_msg_hdl.c @@ -1107,8 +1107,8 @@ uint8_t fillActionToBeSetup(RICaction_ToBeSetup_ItemIEs_t *actionItem, RicSubscr actionItem->value.present = RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item; /* RIC Action ID */ - actionItem->value.choice.RICaction_ToBeSetup_Item.ricActionID = ++ricActionId; - ricSubsDb->actionSequence[ricActionId-1].id = \ + actionItem->value.choice.RICaction_ToBeSetup_Item.ricActionID = ricActionId++; + ricSubsDb->actionSequence[ricActionId].actionId = \ actionItem->value.choice.RICaction_ToBeSetup_Item.ricActionID; /* RIC Action Type */ @@ -1131,7 +1131,8 @@ uint8_t fillActionToBeSetup(RICaction_ToBeSetup_ItemIEs_t *actionItem, RicSubscr return ROK; } - memset(&ricSubsDb->actionSequence[ricActionId-1], 0, sizeof(ActionInfo)); + memset(&ricSubsDb->actionSequence[ricActionId], 0, sizeof(ActionInfo)); + ricSubsDb->actionSequence[ricActionId].actionId = -1; return RFAILED; } @@ -1253,6 +1254,7 @@ uint8_t fillEventTriggerDef(RICeventTriggerDefinition_t *ricEventTriggerDef) uint8_t BuildRicSubsDetails(RICsubscriptionDetails_t *subsDetails, RicSubscription *ricSubsDb) { + uint8_t actionIdx = 0; uint8_t elementCnt = 0; uint8_t elementIdx = 0; @@ -1294,6 +1296,11 @@ uint8_t BuildRicSubsDetails(RICsubscriptionDetails_t *subsDetails, RicSubscripti if(elementIdx < elementCnt) break; + for(actionIdx = 0; actionIdx < MAX_RIC_ACTION; actionIdx++) + { + ricSubsDb->actionSequence[actionIdx].actionId = -1; + } + elementIdx = 0; if(fillActionToBeSetup((RICaction_ToBeSetup_ItemIEs_t *)subsDetails->ricAction_ToBeSetup_List.list.array[elementIdx], \ ricSubsDb) != ROK) @@ -1542,10 +1549,11 @@ void ProcRicSubscriptionResponse(uint32_t duId, RICsubscriptionResponse_t *ricS if((ranFuncDb->subscriptionList[subsIdx].requestId.requestorId == ricReqId.requestorId) && (ranFuncDb->subscriptionList[subsIdx].requestId.instanceId == ricReqId.instanceId)) { - if(ranFuncDb->subscriptionList[subsIdx].actionSequence[actionId-1].id == actionId) + if(ranFuncDb->subscriptionList[subsIdx].actionSequence[actionId].actionId == actionId) { - memset(&ranFuncDb->subscriptionList[subsIdx].actionSequence[actionId-1], 0, \ + memset(&ranFuncDb->subscriptionList[subsIdx].actionSequence[actionId], 0, \ sizeof(ActionInfo)); + ranFuncDb->subscriptionList[subsIdx].actionSequence[actionId].actionId = -1; ranFuncDb->subscriptionList[subsIdx].numOfActions--; break; } @@ -3210,6 +3218,176 @@ uint8_t BuildAndSendErrorIndication(uint32_t duId, int8_t transId, RicRequestId return ret; } +/******************************************************************* + * + * @brief Deallocate the memory allocated for ResetRequest msg + * + * @details + * + * Function : FreeResetRequest + * + * Functionality: + * - freeing the memory allocated for ResetRequest + * + * @params[in] E2AP_PDU_t *e2apMsg + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +void FreeResetRequest(E2AP_PDU_t *e2apMsg) +{ + uint8_t ieIdx =0; + ResetRequestE2_t *resetReq = NULLP; + + if(e2apMsg != NULLP) + { + if(e2apMsg->choice.initiatingMessage != NULLP) + { + resetReq = &e2apMsg->choice.initiatingMessage->value.choice.ResetRequestE2; + if(resetReq->protocolIEs.list.array) + { + for(ieIdx = 0; ieIdx < resetReq->protocolIEs.list.count; ieIdx++) + { + RIC_FREE(resetReq->protocolIEs.list.array[ieIdx], sizeof(ResetRequestIEs_t)); + } + RIC_FREE(resetReq->protocolIEs.list.array, resetReq->protocolIEs.list.size); + } + RIC_FREE(e2apMsg->choice.initiatingMessage, sizeof(InitiatingMessageE2_t)); + } + RIC_FREE(e2apMsg, sizeof(E2AP_PDU_t)); + } +} + +/******************************************************************* + * + * @brief Build and send the reset request msg + * + * @details + * + * Function : BuildAndSendResetRequest + * + * Functionality: + * - Buld and send the reset request msg to E2 node + * + * @params[in] + * DU database + * Type of failure + * Cause of failure + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t BuildAndSendResetRequest(DuDb *duDb, CauseE2_PR causePresent, uint8_t reason) +{ + uint8_t ieIdx = 0, elementCnt = 0, transId = 0; + uint8_t ret = RFAILED; + E2AP_PDU_t *e2apMsg = NULLP; + ResetRequestE2_t *resetReq = NULLP; + asn_enc_rval_t encRetVal; /* Encoder return value */ + + DU_LOG("\nINFO --> E2AP : Building Reset Request\n"); + + do + { + RIC_ALLOC(e2apMsg, sizeof(E2AP_PDU_t)); + if(e2apMsg == NULLP) + { + DU_LOG("\nERROR --> E2AP : BuildAndSendResetRequest(): Memory allocation for E2AP-PDU failed"); + break; + } + + e2apMsg->present = E2AP_PDU_PR_initiatingMessage; + RIC_ALLOC(e2apMsg->choice.initiatingMessage, sizeof(InitiatingMessageE2_t)); + if(e2apMsg->choice.initiatingMessage == NULLP) + { + DU_LOG("\nERROR --> E2AP : BuildAndSendResetRequest(): Memory allocation for initiatingMessage"); + break; + } + + e2apMsg->choice.initiatingMessage->procedureCode = ProcedureCodeE2_id_Reset; + e2apMsg->choice.initiatingMessage->criticality = CriticalityE2_reject; + e2apMsg->choice.initiatingMessage->value.present = InitiatingMessageE2__value_PR_ResetRequestE2; + resetReq = &e2apMsg->choice.initiatingMessage->value.choice.ResetRequestE2; + + elementCnt = 2; + resetReq->protocolIEs.list.count = elementCnt; + resetReq->protocolIEs.list.size = elementCnt * sizeof(ResetRequestIEs_t *); + + RIC_ALLOC(resetReq->protocolIEs.list.array, resetReq->protocolIEs.list.size); + if(!resetReq->protocolIEs.list.array) + { + DU_LOG("\nERROR --> E2AP : BuildAndSendResetRequest(): Memory allocation failed for \ + Reset Request IE array"); + break; + } + + for(ieIdx = 0; ieIdx < elementCnt; ieIdx++) + { + RIC_ALLOC(resetReq->protocolIEs.list.array[ieIdx], sizeof(ResetRequestIEs_t)); + if(!resetReq->protocolIEs.list.array[ieIdx]) + { + DU_LOG("\nERROR --> E2AP : BuildAndSendResetRequest(): Memory allocation failed for \ + Reset Request IE array element"); + break; + } + } + + /* In case of failure */ + if(ieIdx < elementCnt) + break; + + ieIdx = 0; + resetReq->protocolIEs.list.array[ieIdx]->id = ProtocolIE_IDE2_id_TransactionID; + resetReq->protocolIEs.list.array[ieIdx]->criticality = CriticalityE2_reject; + resetReq->protocolIEs.list.array[ieIdx]->value.present = ResetRequestIEs__value_PR_TransactionID; + transId = assignTransactionId(duDb); + resetReq->protocolIEs.list.array[ieIdx]->value.choice.TransactionID = transId; + + ieIdx++; + resetReq->protocolIEs.list.array[ieIdx]->id = ProtocolIE_IDE2_id_CauseE2; + resetReq->protocolIEs.list.array[ieIdx]->criticality = CriticalityE2_ignore; + resetReq->protocolIEs.list.array[ieIdx]->value.present = ResetRequestIEs__value_PR_CauseE2; + fillE2FailureCause(&resetReq->protocolIEs.list.array[ieIdx]->value.choice.CauseE2, causePresent, reason); + + /* Prints the Msg formed */ + xer_fprint(stdout, &asn_DEF_E2AP_PDU, e2apMsg); + + memset(encBuf, 0, ENC_BUF_MAX_LEN); + encBufSize = 0; + encRetVal = aper_encode(&asn_DEF_E2AP_PDU, 0, e2apMsg, PrepFinalEncBuf,\ + encBuf); + if(encRetVal.encoded == ENCODE_FAIL) + { + DU_LOG("\nERROR --> E2AP : Could not encode reset request structure (at %s)\n",\ + encRetVal.failed_type ? encRetVal.failed_type->name : "unknown"); + break; + } + else + { + DU_LOG("\nDEBUG --> E2AP : Created APER encoded buffer for reset request\n"); +#ifdef DEBUG_ASN_PRINT + for(int i=0; i< encBufSize; i++) + { + printf("%x",encBuf[i]); + } +#endif + } + if(SendE2APMsg(RIC_APP_MEM_REG, RIC_POOL, duDb->duId) != ROK) + { + DU_LOG("\nERROR --> E2AP : Sending reset request failed"); + break; + } + + + ret = ROK; + break; + }while(true); + + /* Free all memory */ + FreeResetRequest(e2apMsg); + return ret; +} + /******************************************************************* * * @brief Handles received E2AP message and sends back response @@ -3302,7 +3480,7 @@ void E2APMsgHdlr(uint32_t *duId, Buffer *mBuf) } case InitiatingMessageE2__value_PR_RICindication: { - DU_LOG("\nINFO --> E2AP : RIC Indication Acknowledged"); + DU_LOG("\nINFO --> E2AP : RIC Indication received"); break; } case InitiatingMessageE2__value_PR_RICserviceUpdate: