X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fcu_stub%2Fcu_f1ap_msg_hdl.c;h=1c4eb0ac664d79670d63a5a1f193be51ef3a7bee;hb=e596baac85d7993d92b3077ddc1b99af14b5e8a6;hp=f292045e3c8c12c5b53bb98fac2d49ca99f3e792;hpb=0ba7b600f85b2975e1d60e5b8ad1523349b5f396;p=o-du%2Fl2.git diff --git a/src/cu_stub/cu_f1ap_msg_hdl.c b/src/cu_stub/cu_f1ap_msg_hdl.c index f292045e3..1c4eb0ac6 100644 --- a/src/cu_stub/cu_f1ap_msg_hdl.c +++ b/src/cu_stub/cu_f1ap_msg_hdl.c @@ -24,7 +24,18 @@ #include "ProtocolIE-Field.h" #include "ProtocolExtensionField.h" #include "ProtocolIE-SingleContainer.h" +#include "F1SetupResponse.h" +#include "SuccessfulOutcome.h" +#include "InitiatingMessage.h" +#include "NonDynamic5QIDescriptor.h" +#include "AveragingWindow.h" +#include "MaxDataBurstVolume.h" +#include "Flows-Mapped-To-DRB-Item.h" +#include "SliceSupportItem.h" +#include "ServedPLMNs-Item.h" #include "F1AP-PDU.h" +#include "ULUPTNLInformation-ToBeSetup-Item.h" +#include "ULConfiguration.h" #include "ModulationOrder.h" #include "BandNR.h" #include "UE-CapabilityRAT-Container.h" @@ -1826,108 +1837,108 @@ uint8_t setDlRRCMsgType(CuUeCb *ueCb) * RFAILED - failure * * ****************************************************************/ -void fillLongCycleOffsetValue(DrxLongCycleStartOffset *drxLongCycleStartOffset, struct DRX_ConfigRrc__recvedLongCycleOffsetVal *recvedLongCycleOffsetVal) +void fillLongCycleOffsetValue(DrxLongCycleStartOffset *drxLongCycleStartOffset, struct DRX_ConfigRrc__drx_LongCycleStartOffset *recvedLongCycleOffsetVal) { drxLongCycleStartOffset->drxLongCycleStartOffsetChoice = recvedLongCycleOffsetVal->present; switch(recvedLongCycleOffsetVal->present) { - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms10: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms10: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms10; break; } - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms20: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms20: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms20; break; } - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms32: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms32: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms32; break; } - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms40: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms40: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms40; break; } - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms60: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms60: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms60; break; } - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms64: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms64: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms64; break; } - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms70: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms70: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms70; break; } - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms80: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms80: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms80; break; } - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms128: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms128: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms128; break; } - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms160: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms160: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms160; break; } - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms256: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms256: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms256; break; } - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms320: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms320: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms320; break; } - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms512: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms512: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms512; break; } - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms640: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms640: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms640; break; } - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms1024: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms1024: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms1024; break; } - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms1280: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms1280: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms1280; break; } - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms2048: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms2048: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms2048; break; } - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms2560: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms2560: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms2560; break; } - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms5120: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms5120: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms5120; break; } - case DRX_ConfigRrc__recvedLongCycleOffsetVal_PR_ms10240: + case DRX_ConfigRrc__drx_LongCycleStartOffset_PR_ms10240: { drxLongCycleStartOffset->drxLongCycleStartOffsetVal = recvedLongCycleOffsetVal->choice.ms10240; break; @@ -1954,25 +1965,22 @@ void fillLongCycleOffsetValue(DrxLongCycleStartOffset *drxLongCycleStartOffset, * ****************************************************************/ void storeDrxCfgInUeCb(struct DRX_ConfigRrc *drxSetup, DrxCfg *drxCfg) { - if(drxSetup) + switch(drxSetup->drx_onDurationTimer.present) { - switch(drxSetup->drx_onDurationTimer.present) - { - case DRX_ConfigRrc__drx_onDurationTimer_PR_NOTHING: + case DRX_ConfigRrc__drx_onDurationTimer_PR_NOTHING: + break; + case DRX_ConfigRrc__drx_onDurationTimer_PR_milliSeconds: + { + drxCfg->drxOnDurationTimer.onDurationTimerValInMs = true; + drxCfg->drxOnDurationTimer.onDurationtimerValue.milliSeconds=drxSetup->drx_onDurationTimer.choice.milliSeconds; break; - case DRX_ConfigRrc__drx_onDurationTimer_PR_milliSeconds: - { - drxCfg->drxOnDurationTimer.onDurationTimerValInMs = true; - drxCfg->drxOnDurationTimer.onDurationtimerValue.milliSeconds=drxSetup->drx_onDurationTimer.choice.milliSeconds; - break; - } - case DRX_ConfigRrc__drx_onDurationTimer_PR_subMilliSeconds: - { - drxCfg->drxOnDurationTimer.onDurationTimerValInMs = false; - drxCfg->drxOnDurationTimer.onDurationtimerValue.subMilliSeconds = drxSetup->drx_onDurationTimer.choice.subMilliSeconds; - break; - } - } + } + case DRX_ConfigRrc__drx_onDurationTimer_PR_subMilliSeconds: + { + drxCfg->drxOnDurationTimer.onDurationTimerValInMs = false; + drxCfg->drxOnDurationTimer.onDurationtimerValue.subMilliSeconds = drxSetup->drx_onDurationTimer.choice.subMilliSeconds; + break; + } } fillLongCycleOffsetValue(&drxCfg->drxLongCycleStartOffset, &drxSetup->drx_LongCycleStartOffset); drxCfg->drxInactivityTimer = drxSetup->drx_InactivityTimer; @@ -2049,7 +2057,11 @@ uint8_t extractCellGroupConfig(CuUeCb *ueCb, CellGroupConfigRrc_t *cellGrpCfg) case MAC_CellGroupConfig__drx_ConfigRrc_PR_setup: { - storeDrxCfgInUeCb(cellGrpCfg->mac_CellGroupConfig->drx_ConfigRrc->choice.setup, &ueCb->drxCfg); + if(cellGrpCfg->mac_CellGroupConfig->drx_ConfigRrc->choice.setup) + { + ueCb->drxCfgPresent = true; + storeDrxCfgInUeCb(cellGrpCfg->mac_CellGroupConfig->drx_ConfigRrc->choice.setup, &ueCb->drxCfg); + } break; } @@ -9060,7 +9072,7 @@ uint8_t fillCuToDuContainer(CuUeCb *ueCb, CUtoDURRCInformation_t *rrcMsg) ******************************************************************/ uint8_t BuildDrxCycle(DRXCycle_t *drxCycle) { - drxCycle->longDRXCycleLength = LongDRXCycleLength_ms40; + drxCycle->longDRXCycleLength = LongDRXCycleLength_ms80; CU_ALLOC(drxCycle->shortDRXCycleLength, sizeof(ShortDRXCycleLength_t)); if(!drxCycle->shortDRXCycleLength) { @@ -10944,7 +10956,11 @@ uint8_t BuildAndSendUeContextModificationReq(uint32_t duId, void *cuUeCb, UeCtxt elementCnt = 3; else if((action == STOP_DATA_TX) || (action == RESTART_DATA_TX)) elementCnt = 5; - + +#ifdef NR_DRX + if(DRX_TO_BE_RELEASE && ueCb->drxCfgPresent) + elementCnt++; +#endif ueContextModifyReq->protocolIEs.list.count = elementCnt; ueContextModifyReq->protocolIEs.list.size = elementCnt*sizeof(UEContextModificationRequest_t *); @@ -11070,6 +11086,20 @@ uint8_t BuildAndSendUeContextModificationReq(uint32_t duId, void *cuUeCb, UeCtxt ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.choice.RRCDeliveryStatusRequest = RRCDeliveryStatusRequest_true; } +#ifdef NR_DRX + if(DRX_TO_BE_RELEASE && ueCb->drxCfgPresent) + { + /* DRX Configuration Indicator */ + ieIdx++; + ueContextModifyReq->protocolIEs.list.array[ieIdx]->id = ProtocolIE_ID_id_DRXConfigurationIndicator; + ueContextModifyReq->protocolIEs.list.array[ieIdx]->criticality = Criticality_ignore; + ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.present = UEContextModificationRequestIEs__value_PR_DRXConfigurationIndicator; + ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.choice.DRXConfigurationIndicator = DRXConfigurationIndicator_release; + ueCb->drxCfgPresent = false; + memset(&ueCb->drxCfg, 0, sizeof(DrxCfg)); + } +#endif + xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg); /* Encode the F1SetupRequest type as APER */