From 91d4cd3cfda468a58974ee415573a5cbea3f3d9c Mon Sep 17 00:00:00 2001 From: Raymond Knopp <raymond.knopp@eurecom.fr> Date: Fri, 14 Sep 2018 18:58:46 +0200 Subject: [PATCH] debugging of F1AP-Setup-Resp procedure in DU. DU configuration is ok now. --- openair2/ENB_APP/enb_config.c | 179 ++++++++++--------- openair2/F1AP/f1ap_cu_interface_management.c | 4 +- openair2/F1AP/f1ap_decoder.c | 1 + openair2/F1AP/f1ap_du_interface_management.c | 100 ++++++++++- 4 files changed, 192 insertions(+), 92 deletions(-) diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index b6e16f35ae..e4355e8e29 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -800,10 +800,10 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc) { rrc->sctp_out_streams = (uint16_t)*(SCTPParams[ENB_SCTP_OUTSTREAMS_IDX].uptr); // MCC and MNC - rrc->mcc= (uint16_t)atoi( *(ENBParamList.paramarray[i][ENB_MOBILE_COUNTRY_CODE_IDX].strptr) ); - rrc->mnc= (uint16_t)atoi( *(ENBParamList.paramarray[i][ENB_MOBILE_NETWORK_CODE_IDX].strptr) ); - rrc->mnc_digit_length= strlen(*(ENBParamList.paramarray[i][ENB_MOBILE_NETWORK_CODE_IDX].strptr)); - rrc->tac= (uint16_t)atoi( *(ENBParamList.paramarray[i][ENB_TRACKING_AREA_CODE_IDX].strptr) ); + rrc->mcc= (uint16_t)atoi( *(ENBParamList.paramarray[i][ENB_MOBILE_COUNTRY_CODE_IDX].strptr) ); + rrc->mnc= (uint16_t)atoi( *(ENBParamList.paramarray[i][ENB_MOBILE_NETWORK_CODE_IDX].strptr) ); + rrc->mnc_digit_length= strlen(*(ENBParamList.paramarray[i][ENB_MOBILE_NETWORK_CODE_IDX].strptr)); + rrc->tac= (uint16_t)atoi( *(ENBParamList.paramarray[i][ENB_TRACKING_AREA_CODE_IDX].strptr) ); } @@ -2891,6 +2891,7 @@ void extract_and_decode_SI(int inst,int si_ind,uint8_t *si_container,int si_cont AssertFatal(si_ind==0,"Can only handle a single SI block for now\n"); + LOG_I(ENB_APP, "rrc inst %d: Trying to decode SI block %d @ %p, length %d\n",inst,si_ind,si_container,si_container_length); // point to first SI block bcch_message = &carrier->systemInformation; asn_dec_rval_t dec_rval = uper_decode_complete( NULL, @@ -2903,101 +2904,101 @@ void extract_and_decode_SI(int inst,int si_ind,uint8_t *si_container,int si_cont AssertFatal(1==0, "[ENB_APP][RRC inst %"PRIu8"] Failed to decode BCCH_DLSCH_MESSAGE (%zu bits)\n", inst, dec_rval.consumed ); - - if (bcch_message->message.present == BCCH_DL_SCH_MessageType_PR_c1) { - switch (bcch_message->message.choice.c1.present) { - case BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1: - AssertFatal(1==0,"Should have received SIB1 from CU\n"); - break; - case BCCH_DL_SCH_MessageType__c1_PR_systemInformation: - { - SystemInformation_t *si = &bcch_message->message.choice.c1.choice.systemInformation; + } + if (bcch_message->message.present == BCCH_DL_SCH_MessageType_PR_c1) { + switch (bcch_message->message.choice.c1.present) { + case BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1: + AssertFatal(1==0,"Should have received SIB1 from CU\n"); + break; + case BCCH_DL_SCH_MessageType__c1_PR_systemInformation: + { + SystemInformation_t *si = &bcch_message->message.choice.c1.choice.systemInformation; + + for (int i=0; i<si->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.count; i++) { + struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member *typeandinfo; + typeandinfo = si->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.array[i]; - for (int i=0; i<si->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.count; i++) { - struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member *typeandinfo; - typeandinfo = si->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.array[i]; + switch(typeandinfo->present) { + case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib2: + carrier->sib2 = &typeandinfo->choice.sib2; + LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB2 in CU F1AP_SETUP_RESP message\n", inst); + break; + case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib3: + carrier->sib3 = &typeandinfo->choice.sib3; + LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB3 in CU F1AP_SETUP_RESP message\n", inst); + break; + case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib4: + //carrier->sib4 = &typeandinfo->choice.sib4; + LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB4 in CU F1AP_SETUP_RESP message\n", inst); + break; + case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib5: + //carrier->sib5 = &typeandinfo->choice.sib5; + LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB5 in CU F1AP_SETUP_RESP message\n", inst); + break; + case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib6: + //carrier->sib6 = &typeandinfo->choice.sib6; + LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB6 in CU F1AP_SETUP_RESP message\n", inst); + break; + case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib7: + //carrier->sib7 = &typeandinfo->choice.sib7; + LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB7 in CU F1AP_SETUP_RESP message\n", inst); + break; + case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib8: + //carrier->sib8 = &typeandinfo->choice.sib8; + LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB8 in CU F1AP_SETUP_RESP message\n", inst); + break; + case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib9: + //carrier->sib9 = &typeandinfo->choice.sib9; + LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB9 in CU F1AP_SETUP_RESP message\n", inst); + break; + case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib10: + //carrier->sib10 = &typeandinfo->choice.sib10; + LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB10 in CU F1AP_SETUP_RESP message\n", inst); + break; + case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib11: + //carrier->sib11 = &typeandinfo->choice.sib11; + LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB11 in CU F1AP_SETUP_RESP message\n", inst); + break; - switch(typeandinfo->present) { - case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib2: - carrier->sib2 = &typeandinfo->choice.sib2; - LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB2 in CU F1AP_SETUP_RESP message\n", inst); - break; - case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib3: - carrier->sib3 = &typeandinfo->choice.sib3; - LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB3 in CU F1AP_SETUP_RESP message\n", inst); - break; - case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib4: - //carrier->sib4 = &typeandinfo->choice.sib4; - LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB4 in CU F1AP_SETUP_RESP message\n", inst); - break; - case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib5: - //carrier->sib5 = &typeandinfo->choice.sib5; - LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB5 in CU F1AP_SETUP_RESP message\n", inst); - break; - case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib6: - //carrier->sib6 = &typeandinfo->choice.sib6; - LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB6 in CU F1AP_SETUP_RESP message\n", inst); - break; - case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib7: - //carrier->sib7 = &typeandinfo->choice.sib7; - LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB7 in CU F1AP_SETUP_RESP message\n", inst); - break; - case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib8: - //carrier->sib8 = &typeandinfo->choice.sib8; - LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB8 in CU F1AP_SETUP_RESP message\n", inst); - break; - case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib9: - //carrier->sib9 = &typeandinfo->choice.sib9; - LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB9 in CU F1AP_SETUP_RESP message\n", inst); - break; - case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib10: - //carrier->sib10 = &typeandinfo->choice.sib10; - LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB10 in CU F1AP_SETUP_RESP message\n", inst); - break; - case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib11: - //carrier->sib11 = &typeandinfo->choice.sib11; - LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB11 in CU F1AP_SETUP_RESP message\n", inst); - break; - #if (RRC_VERSION >= MAKE_VERSION(9, 2, 0)) - - case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib12_v920: - //carrier->sib12 = &typeandinfo->choice.sib12; - LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB12 in CU F1AP_SETUP_RESP message\n", inst); - break; - - case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib13_v920: - carrier->sib13 = &typeandinfo->choice.sib13_v920; - LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB13 in CU F1AP_SETUP_RESP message\n", inst); - break; + + case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib12_v920: + //carrier->sib12 = &typeandinfo->choice.sib12; + LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB12 in CU F1AP_SETUP_RESP message\n", inst); + break; + + case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib13_v920: + carrier->sib13 = &typeandinfo->choice.sib13_v920; + LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB13 in CU F1AP_SETUP_RESP message\n", inst); + break; #endif #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) - //SIB18 - case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib18_v1250: - carrier->sib18 = &typeandinfo->choice.sib18_v1250; - LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB18 in CU F1AP_SETUP_RESP message\n", inst); - break; - //SIB19 - case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib19_v1250: - carrier->sib19 = &typeandinfo->choice.sib19_v1250; - LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB19 in CU F1AP_SETUP_RESP message\n", inst); - break; - //SIB21 - case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib21_v1430: - carrier->sib21 = &typeandinfo->choice.sib21_v1430; - LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB21 in CU F1AP_SETUP_RESP message\n", inst); - break; + //SIB18 + case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib18_v1250: + carrier->sib18 = &typeandinfo->choice.sib18_v1250; + LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB18 in CU F1AP_SETUP_RESP message\n", inst); + break; + //SIB19 + case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib19_v1250: + carrier->sib19 = &typeandinfo->choice.sib19_v1250; + LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB19 in CU F1AP_SETUP_RESP message\n", inst); + break; + //SIB21 + case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib21_v1430: + carrier->sib21 = &typeandinfo->choice.sib21_v1430; + LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB21 in CU F1AP_SETUP_RESP message\n", inst); + break; #endif - default: - AssertFatal(1==0,"Shouldn't have received this SI %d\n",typeandinfo->present); - break; - } + default: + AssertFatal(1==0,"Shouldn't have received this SI %d\n",typeandinfo->present); + break; } - break; } + break; } } - } + } + else AssertFatal(1==0,"No SI messages\n"); diff --git a/openair2/F1AP/f1ap_cu_interface_management.c b/openair2/F1AP/f1ap_cu_interface_management.c index e28a1ac811..ca1f590573 100644 --- a/openair2/F1AP/f1ap_cu_interface_management.c +++ b/openair2/F1AP/f1ap_cu_interface_management.c @@ -297,7 +297,7 @@ void CU_send_F1_SETUP_RESPONSE(instance_t instance, f1ap_setup_resp_t *f1ap_setu /* - nRPCI */ if (1) { cells_to_be_activated_list_item.nRPCI = (F1AP_NRPCI_t *)calloc(1, sizeof(F1AP_NRPCI_t)); - *cells_to_be_activated_list_item.nRPCI = 321L; // int 0..1007 + *cells_to_be_activated_list_item.nRPCI = f1ap_setup_resp->nrpci[i]; // int 0..1007 } /* optional */ @@ -764,4 +764,4 @@ void CU_handle_gNB_CU_CONFIGURATION_UPDATE_FALIURE(F1AP_GNBCUConfigurationUpdate void CU_send_gNB_CU_CONFIGURATION_UPDATE_ACKNOWLEDGE(F1AP_GNBCUConfigurationUpdateAcknowledge_t *GNBCUConfigurationUpdateAcknowledge) { AssertFatal(1==0,"Not implemented yet\n"); -} \ No newline at end of file +} diff --git a/openair2/F1AP/f1ap_decoder.c b/openair2/F1AP/f1ap_decoder.c index 53d68c09ca..6a6a761866 100644 --- a/openair2/F1AP/f1ap_decoder.c +++ b/openair2/F1AP/f1ap_decoder.c @@ -77,6 +77,7 @@ static int f1ap_decode_successful_outcome(F1AP_F1AP_PDU_t *pdu) switch(pdu->choice.successfulOutcome->procedureCode) { case F1AP_ProcedureCode_id_F1Setup: LOG_I(F1AP, "get F1AP_ProcedureCode_id_F1Setup\n"); + break; default: diff --git a/openair2/F1AP/f1ap_du_interface_management.c b/openair2/F1AP/f1ap_du_interface_management.c index 2efd22fb23..c83095447f 100644 --- a/openair2/F1AP/f1ap_du_interface_management.c +++ b/openair2/F1AP/f1ap_du_interface_management.c @@ -32,6 +32,7 @@ #include "f1ap_common.h" #include "f1ap_du_interface_management.h" +#include "assertions.h" extern f1ap_setup_req_t *f1ap_du_data; @@ -309,8 +310,105 @@ int DU_handle_F1_SETUP_RESPONSE(uint32_t assoc_id, uint32_t stream, F1AP_F1AP_PDU_t *pdu) { + printf("DU_handle_F1_SETUP_RESPONSE\n"); + AssertFatal(pdu->present == F1AP_F1AP_PDU_PR_successfulOutcome, + "pdu->present != F1AP_F1AP_PDU_PR_successfulOutcome\n"); + AssertFatal(pdu->choice.successfulOutcome->procedureCode == F1AP_ProcedureCode_id_F1Setup, + "pdu->choice.successfulOutcome->procedureCode != F1AP_ProcedureCode_id_F1Setup\n"); + AssertFatal(pdu->choice.successfulOutcome->criticality == F1AP_Criticality_reject, + "pdu->choice.successfulOutcome->criticality != F1AP_Criticality_reject\n"); + AssertFatal(pdu->choice.successfulOutcome->value.present == F1AP_SuccessfulOutcome__value_PR_F1SetupResponse, + "pdu->choice.successfulOutcome->value.present != F1AP_SuccessfulOutcome__value_PR_F1SetupResponse\n"); + + F1AP_F1SetupResponse_t *in = &pdu->choice.successfulOutcome->value.choice.F1SetupResponse; + + + F1AP_F1SetupResponseIEs_t *ie; + int TransactionId = -1; + int num_cells_to_activate = 0; + F1AP_Cells_to_be_Activated_List_Item_t *cell; + + MessageDef *msg_p = itti_alloc_new_message (TASK_ENB_APP, F1AP_SETUP_RESP); + + printf("F1AP: F1Setup-Resp: protocolIEs.list.count %d\n", + in->protocolIEs.list.count); + for (int i=0;i < in->protocolIEs.list.count; i++) { + ie = in->protocolIEs.list.array[i]; + switch (ie->id) { + case F1AP_ProtocolIE_ID_id_TransactionID: + AssertFatal(ie->criticality == F1AP_Criticality_reject, + "ie->criticality != F1AP_Criticality_reject\n"); + AssertFatal(ie->value.present == F1AP_F1SetupResponseIEs__value_PR_TransactionID, + "ie->value.present != F1AP_F1SetupResponseIEs__value_PR_TransactionID\n"); + TransactionId=ie->value.choice.TransactionID; + printf("F1AP: F1Setup-Resp: TransactionId %d\n", + TransactionId); + break; + case F1AP_ProtocolIE_ID_id_gNB_CU_Name: + AssertFatal(ie->criticality == F1AP_Criticality_ignore, + "ie->criticality != F1AP_Criticality_ignore\n"); + AssertFatal(ie->value.present == F1AP_F1SetupResponseIEs__value_PR_GNB_CU_Name, + "ie->value.present != F1AP_F1SetupResponseIEs__value_PR_TransactionID\n"); + F1AP_SETUP_RESP (msg_p).gNB_CU_name = malloc(ie->value.choice.GNB_CU_Name.size+1); + memcpy(F1AP_SETUP_RESP (msg_p).gNB_CU_name,ie->value.choice.GNB_CU_Name.buf,ie->value.choice.GNB_CU_Name.size); + F1AP_SETUP_RESP (msg_p).gNB_CU_name[ie->value.choice.GNB_CU_Name.size]='\0'; + printf("F1AP: F1Setup-Resp: gNB_CU_name %s\n", + F1AP_SETUP_RESP (msg_p).gNB_CU_name); + break; + case F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List: + AssertFatal(ie->criticality == F1AP_Criticality_reject, + "ie->criticality != F1AP_Criticality_reject\n"); + AssertFatal(ie->value.present == F1AP_F1SetupResponseIEs__value_PR_Cells_to_be_Activated_List, + "ie->value.present != F1AP_F1SetupResponseIEs__value_PR_Cells_to_be_Activated_List\n"); + num_cells_to_activate = ie->value.choice.Cells_to_be_Activated_List.list.count; + printf("F1AP: Activating %d cells\n",num_cells_to_activate); + for (int i=0;i<num_cells_to_activate;i++) { + + F1AP_Cells_to_be_Activated_List_ItemIEs_t *cells_to_be_activated_list_item_ies = ie->value.choice.Cells_to_be_Activated_List.list.array[i]; + + AssertFatal(cells_to_be_activated_list_item_ies->id == F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List_Item, + "cells_to_be_activated_list_item_ies->id != F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List_Item"); + AssertFatal(cells_to_be_activated_list_item_ies->criticality == F1AP_Criticality_reject, + "cells_to_be_activated_list_item_ies->criticality == F1AP_Criticality_reject"); + AssertFatal(cells_to_be_activated_list_item_ies->value.present == F1AP_Cells_to_be_Activated_List_ItemIEs__value_PR_Cells_to_be_Activated_List_Item, + "cells_to_be_activated_list_item_ies->value.present == F1AP_Cells_to_be_Activated_List_ItemIEs__value_PR_Cells_to_be_Activated_List_Item"); + + cell = &cells_to_be_activated_list_item_ies->value.choice.Cells_to_be_Activated_List_Item; + + TBCD_TO_MCC_MNC(&cell->nRCGI.pLMN_Identity, F1AP_SETUP_RESP (msg_p).mcc[i], F1AP_SETUP_RESP (msg_p).mnc[i], F1AP_SETUP_RESP (msg_p).mnc_digit_length[i]); + AssertFatal(cell->nRPCI != NULL, "nRPCI is null\n"); + + F1AP_SETUP_RESP (msg_p).nrpci[i] = *cell->nRPCI; + + F1AP_ProtocolExtensionContainer_160P9_t *ext = cell->iE_Extensions; + AssertFatal(ext!=NULL,"Extension for SI is null\n"); + F1AP_SETUP_RESP (msg_p).num_SI[i] = ext->list.count; + AssertFatal(ext->list.count==1,"At least one SI message should be there, and only 1 for now!\n"); + printf("F1AP: F1Setup-Resp Cell %d MCC %d MNC %d NRPCI %d\n",i,F1AP_SETUP_RESP (msg_p).mcc[i],F1AP_SETUP_RESP (msg_p).mnc[i],F1AP_SETUP_RESP (msg_p).nrpci[i],F1AP_SETUP_RESP (msg_p).num_SI[i]); + for (int si =0;si < ext->list.count;si++) { + size_t size = ext->list.array[si]->extensionValue.choice.GNB_CUSystemInformation.sImessage.size; + F1AP_SETUP_RESP (msg_p).SI_container_length[i][si] = size; + printf("F1AP: F1Setup-Resp SI_container_length[%d][%d] %d bytes\n",i,si,size); + F1AP_SETUP_RESP (msg_p).SI_container[i][si] = ext->list.array[si]->extensionValue.choice.GNB_CUSystemInformation.sImessage.buf; + } + } + break; + } + } + AssertFatal(TransactionId!=-1,"TransactionId was not sent\n"); + AssertFatal(num_cells_to_activate>0,"No cells activated\n"); + F1AP_SETUP_RESP (msg_p).num_cells_to_activate = num_cells_to_activate; + + for (int i=0;i<num_cells_to_activate;i++) + AssertFatal(F1AP_SETUP_RESP (msg_p).num_SI[i] > 0, "System Information %d is missing",i); + + + printf("Sending F1AP_SETUP_RESP ITTI message to ENB_APP with assoc_id (%d->%d)\n", + assoc_id,ENB_MODULE_ID_TO_INSTANCE(assoc_id)); + itti_send_msg_to_task(TASK_ENB_APP, ENB_MODULE_ID_TO_INSTANCE(assoc_id), msg_p); + return 0; } @@ -789,4 +887,4 @@ void DU_send_gNB_CU_CONFIGURATION_UPDATE_FALIURE(F1AP_GNBCUConfigurationUpdateFa void DU_send_gNB_CU_CONFIGURATION_UPDATE_ACKNOWLEDGE(F1AP_GNBCUConfigurationUpdateAcknowledge_t *GNBCUConfigurationUpdateAcknowledge) { AssertFatal(1==0,"Not implemented yet\n"); -} \ No newline at end of file +} -- GitLab