X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_f1ap_msg_hdl.c;h=41d666cad7338341d76a7049022e32f2b9bb64da;hb=fe5d6711157dc1d3308a9754893b58b3872cd81a;hp=b7e82620d26cf686bb281ca5c84c96b434c7dcb6;hpb=9940b262cb8423e9af0f6a19cc1f3f6fd61eaacd;p=o-du%2Fl2.git diff --git a/src/du_app/du_f1ap_msg_hdl.c b/src/du_app/du_f1ap_msg_hdl.c index b7e82620d..41d666cad 100644 --- a/src/du_app/du_f1ap_msg_hdl.c +++ b/src/du_app/du_f1ap_msg_hdl.c @@ -13966,6 +13966,13 @@ uint8_t BuildDrbSetupModList(DRBs_SetupMod_List_t *drbSet , DuUeCfg *ueCfg) struct DRBs_SetupMod_ItemIEs *drbItemIe; drbCnt = ueCfg->numDrbSetupMod; + + if(!drbCnt) + { + DU_LOG("\nINFO --> F1AP : BuildDrbToBeSetupModList(): No DRB information to avaialble to add"); + return ROK; + } + drbSet->list.count = drbCnt; drbSet->list.size = drbCnt * sizeof(DRBs_SetupMod_ItemIEs_t *); DU_ALLOC(drbSet->list.array, drbSet->list.size); @@ -14162,7 +14169,12 @@ uint8_t BuildAndSendUeContextModRsp(DuUeCb *ueCb) ueContextModifyRes =&f1apMsg->choice.successfulOutcome->value.choice.UEContextModificationResponse; if(ueCb->f1UeDb->actionType == UE_CTXT_MOD) - elementCnt = 3; + { + if(ueCb->f1UeDb->duUeCfg.numDrbSetupMod) + elementCnt =3; + else + elementCnt =2; + } if(ueCb->f1UeDb->actionType == UE_CTXT_CFG_QUERY) elementCnt = 5; if(ueCb->f1UeDb->actionType == UE_CTXT_RRC_RECFG_COMPLETE) @@ -14213,28 +14225,31 @@ uint8_t BuildAndSendUeContextModRsp(DuUeCb *ueCb) } if((ueCb->f1UeDb->actionType == UE_CTXT_CFG_QUERY) || (ueCb->f1UeDb->actionType == UE_CTXT_MOD)) - { - ieIdx++; - ueContextModifyRes->protocolIEs.list.array[ieIdx]->id = ProtocolIE_ID_id_DRBs_SetupMod_List; - ueContextModifyRes->protocolIEs.list.array[ieIdx]->criticality = Criticality_reject; - ueContextModifyRes->protocolIEs.list.array[ieIdx]->value.present =\ - UEContextModificationResponseIEs__value_PR_DRBs_SetupMod_List; - if(ueCb->f1UeDb->actionType == UE_CTXT_CFG_QUERY) - { - for(tnlIdx = 0; tnlIdx < duCb.numTeId; tnlIdx++) + { + if(ueCb->f1UeDb->duUeCfg.numDrbSetupMod) + { + ieIdx++; + ueContextModifyRes->protocolIEs.list.array[ieIdx]->id = ProtocolIE_ID_id_DRBs_SetupMod_List; + ueContextModifyRes->protocolIEs.list.array[ieIdx]->criticality = Criticality_reject; + ueContextModifyRes->protocolIEs.list.array[ieIdx]->value.present =\ + UEContextModificationResponseIEs__value_PR_DRBs_SetupMod_List; + if(ueCb->f1UeDb->actionType == UE_CTXT_CFG_QUERY) { - if(duCb.upTnlCfg[tnlIdx]->ueId == ueCb->gnbDuUeF1apId) + for(tnlIdx = 0; tnlIdx < duCb.numTeId; tnlIdx++) { - memcpy(&ueCb->f1UeDb->duUeCfg.upTnlInfo[ueCb->f1UeDb->duUeCfg.numDrbSetupMod++], duCb.upTnlCfg[tnlIdx], sizeof(UpTnlCfg)); + if(duCb.upTnlCfg[tnlIdx]->ueId == ueCb->gnbDuUeF1apId) + { + memcpy(&ueCb->f1UeDb->duUeCfg.upTnlInfo[ueCb->f1UeDb->duUeCfg.numDrbSetupMod++], duCb.upTnlCfg[tnlIdx], sizeof(UpTnlCfg)); + } } } - } - ret = BuildDrbSetupModList(&(ueContextModifyRes->protocolIEs.list.array[ieIdx]->\ - value.choice.DRBs_SetupMod_List) , &ueCb->f1UeDb->duUeCfg); - if(ret != ROK) - { - DU_LOG( "\nERROR --> F1AP : Failed to build DRB setupmod List "); - break; + ret = BuildDrbSetupModList(&(ueContextModifyRes->protocolIEs.list.array[ieIdx]->\ + value.choice.DRBs_SetupMod_List) , &ueCb->f1UeDb->duUeCfg); + if(ret != ROK) + { + DU_LOG( "\nERROR --> F1AP : Failed to build DRB setupmod List "); + break; + } } } @@ -14522,17 +14537,17 @@ void freeAperDecodeDrbToBeSetupModList(DRBs_ToBeSetupMod_List_t *drbSet) * @return void * * ****************************************************************/ -void freeAperDecodeUeContextModificationReqMsg(UEContextModificationRequest_t *UeContextModifyReq ) +void freeAperDecodeUeContextModificationReqMsg(UEContextModificationRequest_t *ueContextModifyReq ) { uint8_t arrIdx, ieId; - if(UeContextModifyReq->protocolIEs.list.array) + if(ueContextModifyReq->protocolIEs.list.array) { - for( arrIdx = 0 ; arrIdxprotocolIEs.list.count ; arrIdx++) + for( arrIdx = 0 ; arrIdxprotocolIEs.list.count ; arrIdx++) { - if(UeContextModifyReq->protocolIEs.list.array[arrIdx]) + if(ueContextModifyReq->protocolIEs.list.array[arrIdx]) { - ieId = UeContextModifyReq->protocolIEs.list.array[arrIdx]->id; + ieId = ueContextModifyReq->protocolIEs.list.array[arrIdx]->id; switch(ieId) { case ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID: @@ -14541,15 +14556,21 @@ void freeAperDecodeUeContextModificationReqMsg(UEContextModificationRequest_t *U break; case ProtocolIE_ID_id_DRBs_ToBeSetupMod_List: { - freeAperDecodeDrbToBeSetupModList(&UeContextModifyReq->protocolIEs.list.array[arrIdx]->\ + freeAperDecodeDrbToBeSetupModList(&ueContextModifyReq->protocolIEs.list.array[arrIdx]->\ value.choice.DRBs_ToBeSetupMod_List); break; } + case ProtocolIE_ID_id_TransmissionActionIndicator: + break; + case ProtocolIE_ID_id_RRCContainer: + { + free(ueContextModifyReq->protocolIEs.list.array[arrIdx]->value.choice.RRCContainer.buf); + } } - free(UeContextModifyReq->protocolIEs.list.array[arrIdx]); + free(ueContextModifyReq->protocolIEs.list.array[arrIdx]); } } - free(UeContextModifyReq->protocolIEs.list.array); + free(ueContextModifyReq->protocolIEs.list.array); } } /******************************************************************* @@ -14602,6 +14623,7 @@ uint8_t procF1UeContextModificationReq(F1AP_PDU_t *f1apMsg) { DU_ALLOC(duUeCb->f1UeDb, sizeof(F1UeContextSetupDb)); duUeCb->f1UeDb->cellIdx = cellIdx; + duUeCb->f1UeDb->actionType = UE_CTXT_MOD; } break; } @@ -14615,12 +14637,34 @@ uint8_t procF1UeContextModificationReq(F1AP_PDU_t *f1apMsg) } break; } + + case ProtocolIE_ID_id_RRCContainer: + { + /* Filling Dl RRC Msg Info */ + DU_ALLOC_SHRABL_BUF(duUeCb->f1UeDb->dlRrcMsg, sizeof(F1DlRrcMsg)); + if(!duUeCb->f1UeDb->dlRrcMsg) + { + DU_LOG("\nERROR --> DU APP : procF1UeContextReleaseCommand(): \ + Memory allocation failed "); + ret = RFAILED; + } + else + { + duUeCb->f1UeDb->dlRrcMsgPres = true; + memset(duUeCb->f1UeDb->dlRrcMsg, 0, sizeof(F1DlRrcMsg)); + ret = extractDlRrcMsg(gnbDuUeF1apId, gnbCuUeF1apId, duUeCb->f1UeDb->dlRrcMsg,\ + &ueContextModifyReq->protocolIEs.list.array[ieIdx]->\ + value.choice.RRCContainer); + } + + break; + } + case ProtocolIE_ID_id_DRBs_ToBeSetupMod_List: case ProtocolIE_ID_id_DRBs_ToBeModified_List: { if(duUeCb->f1UeDb) { - duUeCb->f1UeDb->actionType = UE_CTXT_MOD; if(ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.present ==\ UEContextModificationRequestIEs__value_PR_DRBs_ToBeSetupMod_List) { @@ -14671,6 +14715,31 @@ uint8_t procF1UeContextModificationReq(F1AP_PDU_t *f1apMsg) } break; } + case ProtocolIE_ID_id_TransmissionActionIndicator: + { + if(duUeCb->f1UeDb) + { + if(ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.choice.TransmissionActionIndicator == TransmissionActionIndicator_stop) + { + duUeCb->f1UeDb->duUeCfg.dataTransmissionAction = STOP_TRANSMISSION; + } + else + { + duUeCb->f1UeDb->duUeCfg.dataTransmissionAction = RESTART_TRANSMISSION; + } + } + break; + } + + case ProtocolIE_ID_id_RRCDeliveryStatusRequest: + { + if(duUeCb->f1UeDb->dlRrcMsg->rrcMsgPdu) + { + duUeCb->f1UeDb->dlRrcMsg->deliveryStatRpt = true; + } + break; + } + } }