X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_f1ap_msg_hdl.c;h=87c15361ae21a17638b02ceb87c68013b6db0470;hb=2e3617064e27b8d7bb5ba74319f8c1c99491b8dd;hp=eeaa1d3b8b8801194761f2d452dbedab19e61c65;hpb=bf5434b9c6c179180c5bc37640ed700b1a4cbfa7;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 eeaa1d3b8..87c15361a 100644 --- a/src/du_app/du_f1ap_msg_hdl.c +++ b/src/du_app/du_f1ap_msg_hdl.c @@ -18,6 +18,7 @@ /* This file contains F1AP message handler functions */ #include "common_def.h" +#include "du_tmr.h" #include "ckw.h" #include "ckw.x" #include "kwu.h" @@ -33,6 +34,8 @@ #include "du_app_mac_inf.h" #include "du_cfg.h" #include "du_app_rlc_inf.h" +#include "du_e2ap_mgr.h" +#include "du_e2ap_msg_hdl.h" #include "du_mgr_main.h" #include "du_mgr.h" #include "du_utils.h" @@ -160,7 +163,6 @@ #include "UPTransportLayerInformation.h" #include "GTPTunnel.h" #include "SupportedSULFreqBandItem.h" -#include "du_e2ap_msg_hdl.h" #include "du_f1ap_conversions.h" #include "CNUEPagingIdentity.h" #include "PCCH-Config.h" @@ -1754,23 +1756,22 @@ uint8_t BuildAndSendF1SetupReq() printf("%x",encBuf[ieIdx]); } #endif + - duCb.f1SetupReqAndRspMsg.f1MsgReqBufSize = encBufSize; - DU_ALLOC(duCb.f1SetupReqAndRspMsg.f1MsgReqBuf, encBufSize); - if(duCb.f1SetupReqAndRspMsg.f1MsgReqBuf == NULLP) - { - DU_LOG("\nERROR --> F1AP : Memory allocation failed to store the encoding of f1setup req"); - return RFAILED; - } - memcpy(duCb.f1SetupReqAndRspMsg.f1MsgReqBuf, &encBuf, duCb.f1SetupReqAndRspMsg.f1MsgReqBufSize); } - + /* Sending msg */ if(sendF1APMsg() != ROK) { DU_LOG("\nERROR --> F1AP : Sending F1 Setup request failed"); break; } + + if(fillE2NodeComponentReqInfo(F1, duCfgParam.duId, E2_NODE_COMPONENT_ADD, encBufSize, encBuf) !=ROK) + { + DU_LOG("\nERROR --> F1AP : Failed to add the e2 node in the list"); + break; + } ret=ROK; break; @@ -2763,12 +2764,19 @@ uint8_t BuildAndSendDUConfigUpdate(ServCellAction servCellAction) } #endif } + /* Sending msg */ if(sendF1APMsg() != ROK) { DU_LOG("\nERROR --> F1AP : Sending GNB-DU Config Update failed"); break; } + + if(fillE2NodeComponentReqInfo(F1, duCfgParam.duId, E2_NODE_COMPONENT_UPDATE, encBufSize, encBuf)!=ROK) + { + DU_LOG("\nERROR --> F1AP : Failed to update the e2 node in the list"); + break; + } ret = ROK; break; @@ -3946,6 +3954,76 @@ uint8_t BuildControlRSetToAddModList(PdcchConfig *pdcchCfg, struct PDCCH_Config_ return ROK; } /* End BuildControlRSetToAddModList */ +/******************************************************************* + * + * @brief build SlotOffset for SearchSpace + * + * @details + * + * Function : BuildSearchSpcSlotOffset + * + * Functionality: Build Slot Offset for search space to add/modify list + * + * @params[in] SearchSpace__monitoringSlotPeriodicityAndOffset *mSlotPeriodicityAndOffset + * uint16_t slotOffset + * @return void + * + * ****************************************************************/ +void BuildSearchSpcSlotOffset(struct SearchSpace__monitoringSlotPeriodicityAndOffset *mSlotPeriodicityAndOffset, uint16_t slotOffset) +{ + switch(mSlotPeriodicityAndOffset->present) + { + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1: + mSlotPeriodicityAndOffset->choice.sl1 = slotOffset; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2: + mSlotPeriodicityAndOffset->choice.sl2 = slotOffset; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl4: + mSlotPeriodicityAndOffset->choice.sl4 = slotOffset; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl5: + mSlotPeriodicityAndOffset->choice.sl5 = slotOffset; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl8: + mSlotPeriodicityAndOffset->choice.sl8 = slotOffset; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl10: + mSlotPeriodicityAndOffset->choice.sl10 = slotOffset; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl16: + mSlotPeriodicityAndOffset->choice.sl16 = slotOffset; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl20: + mSlotPeriodicityAndOffset->choice.sl20 = slotOffset; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl40: + mSlotPeriodicityAndOffset->choice.sl40 = slotOffset; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl80: + mSlotPeriodicityAndOffset->choice.sl80 = slotOffset; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl160: + mSlotPeriodicityAndOffset->choice.sl160 = slotOffset; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl320: + mSlotPeriodicityAndOffset->choice.sl320 = slotOffset; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl640: + mSlotPeriodicityAndOffset->choice.sl640 = slotOffset; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1280: + mSlotPeriodicityAndOffset->choice.sl1280 = slotOffset; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2560: + mSlotPeriodicityAndOffset->choice.sl2560 = slotOffset; + break; + default: + break; + } +} + + /******************************************************************* * * @brief Build search space to add/modify list @@ -4028,7 +4106,12 @@ uint8_t BuildSearchSpcToAddModList(PdcchConfig *pdcchCfg, struct PDCCH_Config__s if(pdcchCfg == NULLP) searchSpc->monitoringSlotPeriodicityAndOffset->present = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1; else - searchSpc->monitoringSlotPeriodicityAndOffset->present = pdcchCfg->searchSpcToAddModList[idx].mSlotPeriodicityAndOffset; + { + searchSpc->monitoringSlotPeriodicityAndOffset->present = \ + pdcchCfg->searchSpcToAddModList[idx].mSlotPeriodicityAndOffset.mSlotPeriodicity; + BuildSearchSpcSlotOffset(searchSpc->monitoringSlotPeriodicityAndOffset, \ + pdcchCfg->searchSpcToAddModList[idx].mSlotPeriodicityAndOffset.mSlotOffset); + } searchSpc->duration = NULLP; searchSpc->monitoringSymbolsWithinSlot = NULLP; @@ -4174,7 +4257,6 @@ uint8_t BuildBWPDlDedPdcchCfg(PdcchConfig *pdcchCfgDb, struct PDCCH_Config *pdcc } /******************************************************************* - * * @brief Builds DMRS DL PDSCH Mapping type A * * @details @@ -10485,7 +10567,7 @@ uint8_t extractUpTnlInfo(uint8_t drbId, uint8_t configType,\ #ifdef O1_ENABLE cmInetAddr((S8*)g_cfg.DU_IPV4_Addr, &ipv4_du); #else - cmInetAddr((char *)DU_IP_V4_ADDR, &ipv4_du); + ipv4_du = duCfgParam.egtpParams.localIp.ipV4Addr; #endif for(tnlIdx=0; tnlIdx < tnlInfo->list.count; tnlIdx++) @@ -11028,6 +11110,80 @@ void extractTagReconfig(TAG_Config_t *cuTagCfg, TagCfg *macTagCfg) } } +/******************************************************************* + * + * @brief Fills SlotOffset value for SearchSpace received by CU + * + * @details + * + * Function : extractSlotOffset + * + * Functionality: Fills SlotOffset received by CU + * + * @params[in] SearchSpace__monitoringSlotPeriodicityAndOffset *mSlotPeriodicityOffset, + * uint16_t *slotOffset + * @return void + * + * + ****************************************************************/ +void extractSlotOffset(struct SearchSpace__monitoringSlotPeriodicityAndOffset *mSlotPeriodicityAndOffset, uint16_t *slotOffset) +{ + switch(mSlotPeriodicityAndOffset->present) + { + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_NOTHING: + *slotOffset = NULLD; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1: + *slotOffset = mSlotPeriodicityAndOffset->choice.sl1; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2: + *slotOffset = mSlotPeriodicityAndOffset->choice.sl2; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl4: + *slotOffset = mSlotPeriodicityAndOffset->choice.sl4; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl5: + *slotOffset = mSlotPeriodicityAndOffset->choice.sl5; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl8: + *slotOffset = mSlotPeriodicityAndOffset->choice.sl8; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl10: + *slotOffset = mSlotPeriodicityAndOffset->choice.sl10; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl16: + *slotOffset = mSlotPeriodicityAndOffset->choice.sl16; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl20: + *slotOffset = mSlotPeriodicityAndOffset->choice.sl20; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl40: + *slotOffset = mSlotPeriodicityAndOffset->choice.sl40; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl80: + *slotOffset = mSlotPeriodicityAndOffset->choice.sl80; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl160: + *slotOffset = mSlotPeriodicityAndOffset->choice.sl160; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl320: + *slotOffset = mSlotPeriodicityAndOffset->choice.sl320; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl640: + *slotOffset = mSlotPeriodicityAndOffset->choice.sl640; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1280: + *slotOffset = mSlotPeriodicityAndOffset->choice.sl1280; + break; + case SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2560: + *slotOffset = mSlotPeriodicityAndOffset->choice.sl2560; + break; + default: + *slotOffset = 0; + } +} + + /******************************************************************* * * @brief Fills PdcchCfg received by CU @@ -11120,8 +11276,10 @@ void extractPdcchCfg(PDCCH_Config_t *cuPdcchCfg, PdcchConfig *macPdcchCfg) *(srchSpcToAddModList->list.array[srchSpcIdx]->controlResourceSetId); if(srchSpcToAddModList->list.array[srchSpcIdx]->monitoringSlotPeriodicityAndOffset) { - macPdcchCfg->searchSpcToAddModList[srchSpcIdx].mSlotPeriodicityAndOffset =\ - srchSpcToAddModList->list.array[srchSpcIdx]->monitoringSlotPeriodicityAndOffset->present; + macPdcchCfg->searchSpcToAddModList[srchSpcIdx].mSlotPeriodicityAndOffset.mSlotPeriodicity =\ + srchSpcToAddModList->list.array[srchSpcIdx]->monitoringSlotPeriodicityAndOffset->present; + extractSlotOffset(srchSpcToAddModList->list.array[srchSpcIdx]->monitoringSlotPeriodicityAndOffset,\ + &macPdcchCfg->searchSpcToAddModList[srchSpcIdx].mSlotPeriodicityAndOffset.mSlotOffset); } if(srchSpcToAddModList->list.array[srchSpcIdx]->monitoringSymbolsWithinSlot) { @@ -15547,15 +15705,12 @@ uint8_t procF1SetupRsp(F1AP_PDU_t *f1apMsg, MsgLen recvBufLen, char *recvBuf) duProcF1SetupRsp(); freeAperDecodeF1SetupRsp(f1SetRspMsg); - - duCb.f1SetupReqAndRspMsg.f1MsgRspBufSize = recvBufLen; - DU_ALLOC(duCb.f1SetupReqAndRspMsg.f1MsgRspBuf, duCb.f1SetupReqAndRspMsg.f1MsgRspBufSize); - if(duCb.f1SetupReqAndRspMsg.f1MsgReqBuf == NULLP) + + if(fillE2NodeComponentRspInfo(F1, duCfgParam.duId, E2_NODE_COMPONENT_ADD, recvBufLen, recvBuf) !=ROK) { - DU_LOG("\nERROR --> F1AP : Memory allocation failed to store the buf of F1setup response"); + DU_LOG("\nERROR --> F1AP : Failed to add the e2 node in the list"); return RFAILED; } - memcpy(duCb.f1SetupReqAndRspMsg.f1MsgRspBuf, recvBuf, recvBufLen); if(BuildAndSendE2SetupReq() != ROK) { @@ -15733,11 +15888,12 @@ uint8_t duProcGnbDuCfgUpdAckMsg(uint8_t transId) * * Functionality: added free part for the memory allocated by aper_decoder * -* @params[in] F1AP_PDU_t *f1apMsg +* @params[in] F1AP_PDU_t *f1apMsg, MsgLen recvBufLen, char *recvBuf * @return void * * ****************************************************************/ -uint8_t procF1GNBDUCfgUpdAck(F1AP_PDU_t *f1apMsg) + +uint8_t procF1GNBDUCfgUpdAck(F1AP_PDU_t *f1apMsg, MsgLen recvBufLen, char *recvBuf) { uint8_t ieIdx=0,transId=0; GNBDUConfigurationUpdateAcknowledge_t *gnbDuAck = NULLP; @@ -15780,6 +15936,13 @@ uint8_t procF1GNBDUCfgUpdAck(F1AP_PDU_t *f1apMsg) #endif freeAperDecodeGnbDuAck(gnbDuAck); + + if(fillE2NodeComponentRspInfo(F1,duCfgParam.duId, E2_NODE_COMPONENT_UPDATE, recvBufLen, recvBuf) !=ROK) + { + DU_LOG("\nERROR --> F1AP : Failed to update the e2 node in the list"); + return RFAILED; + } + return ROK; } /****************************************************************** @@ -17962,7 +18125,7 @@ void F1APMsgHdlr(Buffer *mBuf) case SuccessfulOutcome__value_PR_GNBDUConfigurationUpdateAcknowledge: { - procF1GNBDUCfgUpdAck(f1apMsg); + procF1GNBDUCfgUpdAck(f1apMsg, recvBufLen, recvBuf); break; }