diff --git a/openair2/COMMON/f1ap_messages_types.h b/openair2/COMMON/f1ap_messages_types.h index 4cb1b4bbabe422e3fb0e82fae7a69b618ad7a67d..824cf657a5f50c265324cfb57a0ef70da62b4595 100644 --- a/openair2/COMMON/f1ap_messages_types.h +++ b/openair2/COMMON/f1ap_messages_types.h @@ -127,10 +127,15 @@ typedef struct f1ap_setup_req_s { uint8_t sul_scs; uint8_t sul_nrb; - uint8_t num_frequency_bands; - uint16_t nr_band[32]; - uint8_t num_sul_frequency_bands; - uint16_t nr_sul_band[32]; + uint8_t ul_num_frequency_bands; + uint16_t ul_nr_band[32]; + uint8_t ul_num_sul_frequency_bands; + uint16_t ul_nr_sul_band[32]; + + uint8_t dl_num_frequency_bands; + uint16_t dl_nr_band[32]; + uint8_t dl_num_sul_frequency_bands; + uint16_t dl_nr_sul_band[32]; } fdd; struct { diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index e4355e8e290b131a8982e994e1b07f2880ecf0a5..43a1c49a6031ea48878f6c41c6b5cf38d031cf7d 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -2473,11 +2473,21 @@ int RCconfig_DU_F1(MessageDef *msg_p, uint32_t i) { // use nrb field to hold LTE N_RB_DL (0...5) F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.ul_nrb = rrc->carrier[0].mib.message.dl_Bandwidth; F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.ul_nrb = rrc->carrier[0].mib.message.dl_Bandwidth; - F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.num_frequency_bands = 1; - F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.nr_band[0] = rrc->carrier[0].sib1->freqBandIndicator; + + // RK: we need to check there value for FDD's frequency_bands DL/UL + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.ul_num_frequency_bands = 1; + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.ul_nr_band[0] = rrc->carrier[0].sib1->freqBandIndicator; + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.dl_num_frequency_bands = 1; + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.dl_nr_band[0] = rrc->carrier[0].sib1->freqBandIndicator; + + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.ul_num_sul_frequency_bands = 0; + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.ul_nr_sul_band[0] = rrc->carrier[0].sib1->freqBandIndicator; + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.dl_num_sul_frequency_bands = 0; + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.dl_nr_sul_band[0] = rrc->carrier[0].sib1->freqBandIndicator; + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.sul_active = 0; } - F1AP_SETUP_REQ (msg_p).measurement_timing_information[k] = NULL; + F1AP_SETUP_REQ (msg_p).measurement_timing_information[k] = "0"; F1AP_SETUP_REQ (msg_p).ranac[k] = 0; F1AP_SETUP_REQ (msg_p).mib[k] = rrc->carrier[0].MIB; F1AP_SETUP_REQ (msg_p).sib1[k] = rrc->carrier[0].SIB1; diff --git a/openair2/F1AP/f1ap_common.h b/openair2/F1AP/f1ap_common.h index 3dced33ac9e6d4296a9b3281b6e8a6a8b470161b..384f261de20df2152e1feb510c89f2d5c141ce03 100644 --- a/openair2/F1AP/f1ap_common.h +++ b/openair2/F1AP/f1ap_common.h @@ -419,6 +419,7 @@ inline void ASN_DEBUG(const char *fmt, ...); /** \brief Function callback prototype. **/ typedef int (*f1ap_message_decoded_callback)( + instance_t instance, uint32_t assoc_id, uint32_t stream, F1AP_F1AP_PDU_t *message_p diff --git a/openair2/F1AP/f1ap_cu_interface_management.c b/openair2/F1AP/f1ap_cu_interface_management.c index ca1f590573d7dbb82fa908c33ef84f54efb4d1a8..67d1dbfa79d52eb6f8419c4955766d867a415ba3 100644 --- a/openair2/F1AP/f1ap_cu_interface_management.c +++ b/openair2/F1AP/f1ap_cu_interface_management.c @@ -31,25 +31,32 @@ */ #include "f1ap_common.h" -#include "f1ap_du_interface_management.h" +#include "f1ap_encoder.h" +#include "f1ap_decoder.h" +#include "f1ap_itti_messaging.h" +#include "f1ap_cu_interface_management.h" extern f1ap_setup_req_t *f1ap_du_data_from_du; -/* - Reset -*/ -void CU_send_RESET(F1AP_Reset_t *Reset) { + +int CU_send_RESET(instance_t instance, F1AP_Reset_t *Reset) { AssertFatal(1==0,"Not implemented yet\n"); } -void CU_handle_RESET_ACKKNOWLEDGE(F1AP_ResetAcknowledge_t *ResetAcknowledge) { +int CU_handle_RESET_ACKKNOWLEDGE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } -void CU_handle_RESET(F1AP_Reset_t *Reset) { +int CU_handle_RESET(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } -void CU_send_RESET_ACKKNOWLEDGE(F1AP_ResetAcknowledge_t *ResetAcknowledge) { +int CU_send_RESET_ACKNOWLEDGE(instance_t instance, F1AP_ResetAcknowledge_t *ResetAcknowledge) { AssertFatal(1==0,"Not implemented yet\n"); } @@ -57,11 +64,14 @@ void CU_send_RESET_ACKKNOWLEDGE(F1AP_ResetAcknowledge_t *ResetAcknowledge) { /* Error Indication */ -void CU_handle_ERROR_INDICATION(F1AP_ErrorIndication_t *ErrorIndication) { +int CU_handle_ERROR_INDICATION(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } -void CU_send_ERROR_INDICATION(F1AP_ErrorIndication_t *ErrorIndication) { +int CU_send_ERROR_INDICATION(instance_t instance, F1AP_ErrorIndication_t *ErrorIndication) { AssertFatal(1==0,"Not implemented yet\n"); } @@ -69,9 +79,10 @@ void CU_send_ERROR_INDICATION(F1AP_ErrorIndication_t *ErrorIndication) { /* F1 Setup */ -int CU_handle_F1_SETUP_REQUEST(uint32_t assoc_id, - uint32_t stream, - F1AP_F1AP_PDU_t *pdu) +int CU_handle_F1_SETUP_REQUEST(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { printf("CU_handle_F1_SETUP_REQUEST\n"); @@ -127,7 +138,6 @@ int CU_handle_F1_SETUP_REQUEST(uint32_t assoc_id, served_celles_item_p = &(((F1AP_GNB_DU_Served_Cells_ItemIEs_t *)ie->value.choice.GNB_DU_Served_Cells_List.list.array[i])->value.choice.GNB_DU_Served_Cells_Item); /* tac */ - // @issue in here OCTET_STRING_TO_INT16(&(served_celles_item_p->served_Cell_Information.fiveGS_TAC), F1AP_SETUP_REQ(message_p).tac[i]); printf ("F1AP_SETUP_REQ(message_p).tac[%d] %d \n", i, F1AP_SETUP_REQ(message_p).tac[i]); @@ -212,11 +222,17 @@ int CU_handle_F1_SETUP_REQUEST(uint32_t assoc_id, // } tdd; // } nr_mode_info[F1AP_MAX_NB_CELLS]; - - return itti_send_msg_to_task(TASK_RRC_ENB, ENB_MODULE_ID_TO_INSTANCE(assoc_id), message_p); + if (num_cells_available > 0) { + itti_send_msg_to_task(TASK_RRC_ENB, ENB_MODULE_ID_TO_INSTANCE(instance), message_p); + } else { + CU_send_F1_SETUP_FAILURE(instance); + return -1; + } + return 0; } -void CU_send_F1_SETUP_RESPONSE(instance_t instance, f1ap_setup_resp_t *f1ap_setup_resp) { +int CU_send_F1_SETUP_RESPONSE(instance_t instance, + f1ap_setup_resp_t *f1ap_setup_resp) { module_id_t enb_mod_idP; module_id_t cu_mod_idP; @@ -337,6 +353,7 @@ void CU_send_F1_SETUP_RESPONSE(instance_t instance, f1ap_setup_resp_t *f1ap_setu /* encode */ if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) { printf("Failed to encode F1 setup request\n"); + return -1; } // printf("\n"); @@ -348,12 +365,92 @@ void CU_send_F1_SETUP_RESPONSE(instance_t instance, f1ap_setup_resp_t *f1ap_setu //printf("F1 setup response present = %d\n", out->value.present); //f1ap_send_sctp_data_req(instance_p->instance, f1ap_mme_data_p->assoc_id, buffer, len, 0); + return 0; } -void CU_send_F1_SETUP_FAILURE(F1AP_F1SetupFailure_t *F1SetupFailure) { - AssertFatal(1==0,"Not implemented yet\n"); - //AssertFatal(1==0,"Not implemented yet\n"); - //f1ap_send_sctp_data_req(instance_p->instance, f1ap_mme_data_p->assoc_id, buffer, len, 0); +int CU_send_F1_SETUP_FAILURE(instance_t instance) { + printf("CU_send_F1_SETUP_FAILURE\n"); + + module_id_t enb_mod_idP; + module_id_t cu_mod_idP; + + enb_mod_idP = (module_id_t)12; + cu_mod_idP = (module_id_t)34; + + F1AP_F1AP_PDU_t pdu; + F1AP_F1SetupFailure_t *out; + F1AP_F1SetupFailureIEs_t *ie; + + uint8_t *buffer; + uint32_t len; + + /* Create */ + /* 0. Message Type */ + memset(&pdu, 0, sizeof(pdu)); + pdu.present = F1AP_F1AP_PDU_PR_unsuccessfulOutcome; + pdu.choice.unsuccessfulOutcome = (F1AP_UnsuccessfulOutcome_t *)calloc(1, sizeof(F1AP_UnsuccessfulOutcome_t)); + pdu.choice.unsuccessfulOutcome->procedureCode = F1AP_ProcedureCode_id_F1Setup; + pdu.choice.unsuccessfulOutcome->criticality = F1AP_Criticality_reject; + pdu.choice.unsuccessfulOutcome->value.present = F1AP_UnsuccessfulOutcome__value_PR_F1SetupFailure; + out = &pdu.choice.unsuccessfulOutcome->value.choice.F1SetupFailure; + + /* mandatory */ + /* c1. Transaction ID (integer value)*/ + ie = (F1AP_F1SetupFailureIEs_t *)calloc(1, sizeof(F1AP_F1SetupFailureIEs_t)); + ie->id = F1AP_ProtocolIE_ID_id_TransactionID; + ie->criticality = F1AP_Criticality_reject; + ie->value.present = F1AP_F1SetupFailureIEs__value_PR_TransactionID; + ie->value.choice.TransactionID = F1AP_get_next_transaction_identifier(enb_mod_idP, cu_mod_idP); + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + + /* mandatory */ + /* c2. Cause */ + ie = (F1AP_F1SetupFailureIEs_t *)calloc(1, sizeof(F1AP_F1SetupFailureIEs_t)); + ie->id = F1AP_ProtocolIE_ID_id_Cause; + ie->criticality = F1AP_Criticality_ignore; + ie->value.present = F1AP_F1SetupFailureIEs__value_PR_Cause; + ie->value.choice.Cause.present = F1AP_Cause_PR_radioNetwork; + ie->value.choice.Cause.choice.radioNetwork = F1AP_CauseRadioNetwork_unspecified; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + + /* optional */ + /* c3. TimeToWait */ + if (0) { + ie = (F1AP_F1SetupFailureIEs_t *)calloc(1, sizeof(F1AP_F1SetupFailureIEs_t)); + ie->id = F1AP_ProtocolIE_ID_id_TimeToWait; + ie->criticality = F1AP_Criticality_ignore; + ie->value.present = F1AP_F1SetupFailureIEs__value_PR_TimeToWait; + ie->value.choice.TimeToWait = F1AP_TimeToWait_v10s; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* optional */ + /* c4. CriticalityDiagnostics*/ + if (0) { + ie = (F1AP_F1SetupFailureIEs_t *)calloc(1, sizeof(F1AP_F1SetupFailureIEs_t)); + ie->id = F1AP_ProtocolIE_ID_id_CriticalityDiagnostics; + ie->criticality = F1AP_Criticality_ignore; + ie->value.present = F1AP_F1SetupFailureIEs__value_PR_CriticalityDiagnostics; + ie->value.choice.CriticalityDiagnostics.procedureCode = (F1AP_ProcedureCode_t *)calloc(1, sizeof(F1AP_ProcedureCode_t)); + *ie->value.choice.CriticalityDiagnostics.procedureCode = F1AP_ProcedureCode_id_UEContextSetup; + ie->value.choice.CriticalityDiagnostics.triggeringMessage = (F1AP_TriggeringMessage_t *)calloc(1, sizeof(F1AP_TriggeringMessage_t)); + *ie->value.choice.CriticalityDiagnostics.triggeringMessage = F1AP_TriggeringMessage_initiating_message; + ie->value.choice.CriticalityDiagnostics.procedureCriticality = (F1AP_Criticality_t *)calloc(1, sizeof(F1AP_Criticality_t)); + *ie->value.choice.CriticalityDiagnostics.procedureCriticality = F1AP_Criticality_reject; + ie->value.choice.CriticalityDiagnostics.transactionID = (F1AP_TransactionID_t *)calloc(1, sizeof(F1AP_TransactionID_t)); + *ie->value.choice.CriticalityDiagnostics.transactionID = 0; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* encode */ + if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) { + printf("Failed to encode F1 setup request\n"); + return -1; + } + + cu_f1ap_itti_send_sctp_data_req(instance, f1ap_du_data_from_du->assoc_id, buffer, len, 0); + + return 0; } @@ -362,15 +459,20 @@ void CU_send_F1_SETUP_FAILURE(F1AP_F1SetupFailure_t *F1SetupFailure) { gNB-DU Configuration Update */ -void CU_handle_gNB_DU_CONFIGURATION_UPDATE(F1AP_GNBDUConfigurationUpdate_t *GNBDUConfigurationUpdate) { +int CU_handle_gNB_DU_CONFIGURATION_UPDATE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } -void CU_send_gNB_DU_CONFIGURATION_FAILURE(F1AP_GNBDUConfigurationUpdateFailure_t *GNBDUConfigurationUpdateFailure) { +int CU_send_gNB_DU_CONFIGURATION_FAILURE(instance_t instance, + F1AP_GNBDUConfigurationUpdateFailure_t *GNBDUConfigurationUpdateFailure) { AssertFatal(1==0,"Not implemented yet\n"); } -void CU_send_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE(F1AP_GNBDUConfigurationUpdateAcknowledge_t *GNBDUConfigurationUpdateAcknowledge) { +int CU_send_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE(instance_t instance, + F1AP_GNBDUConfigurationUpdateAcknowledge_t *GNBDUConfigurationUpdateAcknowledge) { AssertFatal(1==0,"Not implemented yet\n"); } @@ -381,7 +483,7 @@ void CU_send_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE(F1AP_GNBDUConfigurationUpda */ //void CU_send_gNB_CU_CONFIGURATION_UPDATE(F1AP_GNBCUConfigurationUpdate_t *GNBCUConfigurationUpdate) { -void CU_send_gNB_CU_CONFIGURATION_UPDATE(module_id_t enb_mod_idP, module_id_t du_mod_idP) { +int CU_send_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, module_id_t du_mod_idP) { F1AP_F1AP_PDU_t pdu; F1AP_GNBCUConfigurationUpdate_t *out; F1AP_GNBCUConfigurationUpdateIEs_t *ie; @@ -411,7 +513,7 @@ void CU_send_gNB_CU_CONFIGURATION_UPDATE(module_id_t enb_mod_idP, module_id_t du ie->id = F1AP_ProtocolIE_ID_id_TransactionID; ie->criticality = F1AP_Criticality_reject; ie->value.present = F1AP_GNBCUConfigurationUpdateIEs__value_PR_TransactionID; - ie->value.choice.TransactionID = F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP); + ie->value.choice.TransactionID = F1AP_get_next_transaction_identifier(instance, du_mod_idP); ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); @@ -747,21 +849,36 @@ void CU_send_gNB_CU_CONFIGURATION_UPDATE(module_id_t enb_mod_idP, module_id_t du /* encode */ if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) { printf("Failed to encode F1 setup request\n"); - return; + return -1; } - printf("\n"); - - /* decode */ - if (f1ap_decode_pdu(&pdu, buffer, len) > 0) { - printf("Failed to decode F1 setup request\n"); - } + cu_f1ap_itti_send_sctp_data_req(instance, f1ap_du_data_from_du->assoc_id, buffer, len, 0); + return 0; } -void CU_handle_gNB_CU_CONFIGURATION_UPDATE_FALIURE(F1AP_GNBCUConfigurationUpdateFailure_t *GNBCUConfigurationUpdateFailure) { +int CU_handle_gNB_CU_CONFIGURATION_UPDATE_FAILURE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } -void CU_send_gNB_CU_CONFIGURATION_UPDATE_ACKNOWLEDGE(F1AP_GNBCUConfigurationUpdateAcknowledge_t *GNBCUConfigurationUpdateAcknowledge) { +int CU_handle_gNB_CU_CONFIGURATION_UPDATE_ACKNOWLEDGE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } + + +int CU_handle_gNB_DU_RESOURCE_COORDINATION_REQUEST(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { + AssertFatal(0, "Not implemented yet\n"); +} + +int CU_send_gNB_DU_RESOURCE_COORDINATION_RESPONSE(instance_t instance, + F1AP_GNBDUResourceCoordinationResponse_t *GNBDUResourceCoordinationResponse) { + AssertFatal(0, "Not implemented yet\n"); +} diff --git a/openair2/F1AP/f1ap_cu_interface_management.h b/openair2/F1AP/f1ap_cu_interface_management.h index a0b0ddb20ced32a3e43aeac7c710fa9da4e912a4..acad13836dea4e8043791945cb853fa3551d30ec 100644 --- a/openair2/F1AP/f1ap_cu_interface_management.h +++ b/openair2/F1AP/f1ap_cu_interface_management.h @@ -33,12 +33,79 @@ #ifndef F1AP_CU_INTERFACE_MANAGEMENT_H_ #define F1AP_CU_INTERFACE_MANAGEMENT_H_ -int CU_handle_F1_SETUP_REQUEST(uint32_t assoc_id, - uint32_t stream, - F1AP_F1AP_PDU_t *pdu); +/* + * Reset + */ +int CU_send_RESET(instance_t instance, F1AP_Reset_t *Reset); +int CU_handle_RESET_ACKKNOWLEDGE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); +int CU_handle_RESET(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); +int CU_send_RESET_ACKNOWLEDGE(instance_t instance, F1AP_ResetAcknowledge_t *ResetAcknowledge); + +/* + * Error Indication + */ +int CU_handle_ERROR_INDICATION(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); +int CU_send_ERROR_INDICATION(instance_t instance, F1AP_ErrorIndication_t *ErrorIndication); + +/* + * F1 Setup + */ +int CU_handle_F1_SETUP_REQUEST(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + +int CU_send_F1_SETUP_RESPONSE(instance_t instance, f1ap_setup_resp_t *f1ap_setup_resp); + +int CU_send_F1_SETUP_FAILURE(instance_t instance); + +/* + * gNB-DU Configuration Update + */ +int CU_handle_gNB_DU_CONFIGURATION_UPDATE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + +int CU_send_gNB_DU_CONFIGURATION_FAILURE(instance_t instance, + F1AP_GNBDUConfigurationUpdateFailure_t *GNBDUConfigurationUpdateFailure); -void CU_send_F1_SETUP_RESPONSE(instance_t instance, f1ap_setup_resp_t *f1ap_setup_resp); +int CU_send_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE(instance_t instance, + F1AP_GNBDUConfigurationUpdateAcknowledge_t *GNBDUConfigurationUpdateAcknowledge); + +/* + * gNB-CU Configuration Update + */ +int CU_send_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, module_id_t du_mod_idP); + +int CU_handle_gNB_CU_CONFIGURATION_UPDATE_FAILURE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + +int CU_handle_gNB_CU_CONFIGURATION_UPDATE_ACKNOWLEDGE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + +/* + * gNB-DU Resource Coordination + */ +int CU_handle_gNB_DU_RESOURCE_COORDINATION_REQUEST(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); -void CU_send_F1_SETUP_FAILURE(F1AP_F1SetupFailure_t *F1SetupFailure); +int CU_send_gNB_DU_RESOURCE_COORDINATION_RESPONSE(instance_t instance, + F1AP_GNBDUResourceCoordinationResponse_t *GNBDUResourceCoordinationResponse); -#endif /* F1AP_CU_INTERFACE_MANAGEMENT_H_ */ \ No newline at end of file +#endif /* F1AP_CU_INTERFACE_MANAGEMENT_H_ */ diff --git a/openair2/F1AP/f1ap_cu_rrc_message_transfer.c b/openair2/F1AP/f1ap_cu_rrc_message_transfer.c index b2a58a77bdcedbab13dfb97b6d16cac67e85e533..52a6a6332065343a4e286d0b12b6afaa2770ea8b 100644 --- a/openair2/F1AP/f1ap_cu_rrc_message_transfer.c +++ b/openair2/F1AP/f1ap_cu_rrc_message_transfer.c @@ -31,21 +31,117 @@ */ #include "f1ap_common.h" +#include "f1ap_encoder.h" +#include "f1ap_decoder.h" +#include "f1ap_itti_messaging.h" #include "f1ap_cu_rrc_message_transfer.h" +// undefine C_RNTI from +// openair1/PHY/LTE_TRANSPORT/transport_common.h which +// replaces in ie->value.choice.C_RNTI, causing +// a compile error +#undef C_RNTI /* Initial UL RRC Message Transfer */ -void CU_handle_UL_INITIAL_RRC_MESSAGE_TRANSFER(void) { +int CU_handle_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { - printf("CU_handle_UL_INITIAL_RRC_MESSAGE_TRANSFER\n"); + printf("CU_handle_INITIAL_UL_RRC_MESSAGE_TRANSFER\n"); // decode the F1 message // get the rrc message from the contauiner // call func rrc_eNB_decode_ccch: <-- needs some update here + MessageDef *message_p; + F1AP_InitialULRRCMessageTransfer_t *container; + F1AP_InitialULRRCMessageTransferIEs_t *ie; + + rnti_t rnti; + uint8_t *ccch_sdu; + sdu_size_t ccch_sdu_len; + int CC_id =0; + uint64_t du_ue_f1ap_id; + + DevAssert(pdu != NULL); + + if (stream != 0) { + LOG_E(F1AP, "[SCTP %d] Received F1 on stream != 0 (%d)\n", + assoc_id, stream); + return -1; + } + + container = &pdu->choice.initiatingMessage->value.choice.InitialULRRCMessageTransfer; + + /* GNB_DU_UE_F1AP_ID */ + F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_InitialULRRCMessageTransferIEs_t, ie, container, + F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, true); + du_ue_f1ap_id = ie->value.choice.GNB_DU_UE_F1AP_ID; + printf("du_ue_f1ap_id %lu \n", du_ue_f1ap_id); + + /* NRCGI */ + F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_InitialULRRCMessageTransferIEs_t, ie, container, + F1AP_ProtocolIE_ID_id_NRCGI, true); + + /* RNTI */ + F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_InitialULRRCMessageTransferIEs_t, ie, container, + F1AP_ProtocolIE_ID_id_C_RNTI, true); + BIT_STRING_TO_CELL_IDENTITY(&ie->value.choice.C_RNTI, rnti); + + /* RRC Container */ + F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_InitialULRRCMessageTransferIEs_t, ie, container, + F1AP_ProtocolIE_ID_id_RRCContainer, true); + + ccch_sdu = calloc(ie->value.choice.RRCContainer.size + 1, sizeof(char)); + memcpy(ccch_sdu, ie->value.choice.RRCContainer.buf, + ie->value.choice.RRCContainer.size); + /* Convert the mme name to a printable string */ + ccch_sdu[ie->value.choice.RRCContainer.size] = '\0'; + printf ("RRCContainer %s \n", ccch_sdu); + ccch_sdu_len = ie->value.choice.RRCContainer.size; + + // create an ITTI message + message_p = itti_alloc_new_message (TASK_CU_F1, RRC_MAC_CCCH_DATA_IND); + memset (RRC_MAC_CCCH_DATA_IND (message_p).sdu, 0, CCCH_SDU_SIZE); + memcpy (RRC_MAC_CCCH_DATA_IND (message_p).sdu, ccch_sdu, ccch_sdu_len); + RRC_MAC_CCCH_DATA_IND (message_p).frame = 0; + RRC_MAC_CCCH_DATA_IND (message_p).sub_frame = 0; + RRC_MAC_CCCH_DATA_IND (message_p).sdu_size = ccch_sdu_len; + RRC_MAC_CCCH_DATA_IND (message_p).enb_index = instance; // CU instance + RRC_MAC_CCCH_DATA_IND (message_p).rnti = rnti; + RRC_MAC_CCCH_DATA_IND (message_p).CC_id = CC_id; + itti_send_msg_to_task (TASK_RRC_ENB, instance, message_p); + + + // OR creat the ctxt and srb_info struct required by rrc_eNB_decode_ccch +/* + PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, + instance, // to fix + ENB_FLAG_YES, + rnti, + 0, // frame + 0); // slot + + CC_id = RRC_MAC_CCCH_DATA_IND(msg_p).CC_id; + srb_info_p = &RC.rrc[instance]->carrier[CC_id].Srb0; + + if (ccch_sdu_len >= RRC_BUFFER_SIZE_MAX) { + LOG_E(RRC, "CCCH message has size %d > %d\n",ccch_sdu_len,RRC_BUFFER_SIZE_MAX); + break; + } + memcpy(srb_info_p->Rx_buffer.Payload, + ccch_sdu, + ccch_sdu_len); + srb_info->Rx_buffer.payload_size = ccch_sdu_len; + + rrc_eNB_decode_ccch(&ctxt, srb_info, CC_id); + */ // if size > 0 // CU_send_DL_RRC_MESSAGE_TRANSFER(C.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload, RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size) + + return 0; } @@ -54,7 +150,7 @@ void CU_handle_UL_INITIAL_RRC_MESSAGE_TRANSFER(void) { */ //void CU_send_DL_RRC_MESSAGE_TRANSFER(F1AP_DLRRCMessageTransfer_t *DLRRCMessageTransfer) { -void CU_send_DL_RRC_MESSAGE_TRANSFER(void) { +int CU_send_DL_RRC_MESSAGE_TRANSFER(instance_t instance) { F1AP_F1AP_PDU_t pdu; F1AP_DLRRCMessageTransfer_t *out; F1AP_DLRRCMessageTransferIEs_t *ie; @@ -150,6 +246,7 @@ void CU_send_DL_RRC_MESSAGE_TRANSFER(void) { /* encode */ if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) { printf("Failed to encode F1 setup request\n"); + return -1; } printf("\n"); @@ -157,14 +254,19 @@ void CU_send_DL_RRC_MESSAGE_TRANSFER(void) { /* decode */ if (f1ap_decode_pdu(&pdu, buffer, len) > 0) { printf("Failed to decode F1 setup request\n"); + return -1; } - //AssertFatal(1==0,"Not implemented yet\n"); + + return 0; } /* UL RRC Message Transfer */ -void CU_handle_UL_RRC_MESSAGE_TRANSFER(F1AP_ULRRCMessageTransfer_t *ULRRCMessageTransfer) { +int CU_handle_UL_RRC_MESSAGE_TRANSFER(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } diff --git a/openair2/F1AP/f1ap_cu_rrc_message_transfer.h b/openair2/F1AP/f1ap_cu_rrc_message_transfer.h index 24d5a7528ae9040f3ae2294d5254517ffa3445e9..952297b0dd77443514a812c5ca497c7ab81337fd 100644 --- a/openair2/F1AP/f1ap_cu_rrc_message_transfer.h +++ b/openair2/F1AP/f1ap_cu_rrc_message_transfer.h @@ -33,4 +33,16 @@ #ifndef F1AP_CU_RRC_MESSAGE_TRANSFER_H_ #define F1AP_CU_RRC_MESSAGE_TRANSFER_H_ -#endif /* F1AP_CU_RRC_MESSAGE_TRANSFER_H_ */ \ No newline at end of file +int CU_handle_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + +int CU_send_DL_RRC_MESSAGE_TRANSFER(instance_t instance); + +int CU_handle_UL_RRC_MESSAGE_TRANSFER(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + +#endif /* F1AP_CU_RRC_MESSAGE_TRANSFER_H_ */ diff --git a/openair2/F1AP/f1ap_cu_task.c b/openair2/F1AP/f1ap_cu_task.c index 742e57b4040adc7a7b776e57485ca74adef5cc68..c7deb55e166d8863380ca4057c0faa5ab1e2b22d 100644 --- a/openair2/F1AP/f1ap_cu_task.c +++ b/openair2/F1AP/f1ap_cu_task.c @@ -65,12 +65,12 @@ void cu_task_handle_sctp_association_resp(instance_t instance, sctp_new_associat f1ap_du_data_from_du->sctp_out_streams = sctp_new_association_resp->out_streams; } -void cu_task_handle_sctp_data_ind(sctp_data_ind_t *sctp_data_ind) { +void cu_task_handle_sctp_data_ind(instance_t instance, sctp_data_ind_t *sctp_data_ind) { int result; DevAssert(sctp_data_ind != NULL); - f1ap_handle_message(sctp_data_ind->assoc_id, sctp_data_ind->stream, + f1ap_handle_message(instance, sctp_data_ind->assoc_id, sctp_data_ind->stream, sctp_data_ind->buffer, sctp_data_ind->buffer_length); result = itti_free(TASK_UNKNOWN, sctp_data_ind->buffer); @@ -132,7 +132,8 @@ void *F1AP_CU_task(void *arg) { case SCTP_DATA_IND: LOG_I(CU_F1AP, "SCTP_DATA_IND\n"); - cu_task_handle_sctp_data_ind(&received_msg->ittiMsg.sctp_data_ind); + cu_task_handle_sctp_data_ind(ITTI_MESSAGE_GET_INSTANCE(received_msg), + &received_msg->ittiMsg.sctp_data_ind); break; case F1AP_SETUP_RESP: // from rrc diff --git a/openair2/F1AP/f1ap_cu_task.h b/openair2/F1AP/f1ap_cu_task.h index b12b22dc788da05a75e165021f16c356a438d0a5..60747efbcb24acccd3bf9066cc87e6b0971a6d1f 100644 --- a/openair2/F1AP/f1ap_cu_task.h +++ b/openair2/F1AP/f1ap_cu_task.h @@ -24,7 +24,7 @@ void cu_task_handle_sctp_association_ind(instance_t instance, sctp_new_association_ind_t *sctp_new_association_ind); void cu_task_handle_sctp_association_resp(instance_t instance, sctp_new_association_resp_t *sctp_new_association_resp); -void cu_task_handle_sctp_data_ind(sctp_data_ind_t *sctp_data_ind); +void cu_task_handle_sctp_data_ind(instance_t instance, sctp_data_ind_t *sctp_data_ind); void cu_task_send_sctp_init_req(instance_t enb_id); void *F1AP_CU_task(void *arg); diff --git a/openair2/F1AP/f1ap_cu_ue_context_management.c b/openair2/F1AP/f1ap_cu_ue_context_management.c index 5be5e25ec0e209f49cedb959517e7e7bef0e19e8..3c11d09b1ef39c2c709231c93b9cdfedd0cf7622 100644 --- a/openair2/F1AP/f1ap_cu_ue_context_management.c +++ b/openair2/F1AP/f1ap_cu_ue_context_management.c @@ -19,8 +19,8 @@ * contact@openairinterface.org */ -/*! \file f1ap_du_interface_management.h - * \brief f1ap interface management for DU +/*! \file f1ap_cu_ue_context_management.c + * \brief F1AP UE Context Management, CU side * \author EURECOM/NTUST * \date 2018 * \version 0.1 @@ -30,14 +30,14 @@ * \warning */ -/* - UE Context Setup -*/ - #include "f1ap_common.h" +#include "f1ap_encoder.h" +#include "f1ap_decoder.h" +#include "f1ap_itti_messaging.h" +#include "f1ap_cu_ue_context_management.h" //void CU_send_UE_CONTEXT_SETUP_REQUEST(F1AP_UEContextSetupRequest_t *UEContextSetupRequest) { -void CU_send_UE_CONTEXT_SETUP_REQUEST(void) { +int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance) { F1AP_F1AP_PDU_t pdu; F1AP_UEContextSetupRequest_t *out; F1AP_UEContextSetupRequestIEs_t *ie; @@ -357,7 +357,7 @@ void CU_send_UE_CONTEXT_SETUP_REQUEST(void) { /* encode */ if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) { printf("Failed to encode F1 setup request\n"); - return; + return -1; } printf("\n"); @@ -365,44 +365,51 @@ void CU_send_UE_CONTEXT_SETUP_REQUEST(void) { /* decode */ if (f1ap_decode_pdu(&pdu, buffer, len) > 0) { printf("Failed to decode F1 setup request\n"); + return -1; } //AssertFatal(1==0,"Not implemented yet\n"); + return 0; } -void CU_handle_UE_CONTEXT_SETUP_RESPONSE(F1AP_UEContextSetupResponse_t *UEContextSetupResponse) { +int CU_handle_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } -void CU_handle_UE_CONTEXT_SETUP_FAILURE(F1AP_UEContextSetupFailure_t UEContextSetupFailure) { +int CU_handle_UE_CONTEXT_SETUP_FAILURE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } -/* - UE Context Release (gNB-CU initiated) -*/ - -void CU_handle_UE_CONTEXT_RELEASE_REQUEST(F1AP_UEContextReleaseRequest_t *UEContextReleaseRequest) { +int CU_handle_UE_CONTEXT_RELEASE_REQUEST(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } -void CU_send_UE_CONTEXT_RELEASE_COMMAND(F1AP_UEContextReleaseCommand_t *UEContextReleaseCommand) { +int CU_send_UE_CONTEXT_RELEASE_COMMAND(instance_t instance, + F1AP_UEContextReleaseCommand_t *UEContextReleaseCommand) { AssertFatal(1==0,"Not implemented yet\n"); } -void CU_handle_UE_CONTEXT_RELEASE_COMPLETE(F1AP_UEContextReleaseComplete_t *UEContextReleaseComplete) { +int CU_handle_UE_CONTEXT_RELEASE_COMPLETE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } -/* - UE Context Modification Required (gNB-DU initiated) -*/ - //void CU_send_UE_CONTEXT_MODIFICATION_REQUEST(F1AP_UEContextModificationRequest_t *UEContextModificationRequest) { -void CU_send_UE_CONTEXT_MODIFICATION_REQUEST(void) { +int CU_send_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance) { F1AP_F1AP_PDU_t pdu; F1AP_UEContextModificationRequest_t *out; F1AP_UEContextModificationRequestIEs_t *ie; @@ -863,7 +870,7 @@ void CU_send_UE_CONTEXT_MODIFICATION_REQUEST(void) { /* encode */ if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) { printf("Failed to encode F1 setup request\n"); - return; + return -1; } printf("\n"); @@ -871,22 +878,34 @@ void CU_send_UE_CONTEXT_MODIFICATION_REQUEST(void) { /* decode */ if (f1ap_decode_pdu(&pdu, buffer, len) > 0) { printf("Failed to decode F1 setup request\n"); + return -1; } + return 0; } -void CU_handle_UE_CONTEXT_MODIFICATION_RESPONSE(F1AP_UEContextModificationResponse_t *UEContextModificationResponse) { +int CU_handle_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } -void CU_handle_UE_CONTEXT_MODIFICATION_FAILURE(F1AP_UEContextModificationFailure_t EContextModificationFailure) { +int CU_handle_UE_CONTEXT_MODIFICATION_FAILURE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } -void CU_handle_UE_CONTEXT_MODIFICATION_REQUIRED(F1AP_UEContextModificationRequired_t *UEContextModificationRequired) { +int CU_handle_UE_CONTEXT_MODIFICATION_REQUIRED(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } -void CU_send_UE_CONTEXT_MODIFICATION_CONFIRM(F1AP_UEContextModificationConfirm_t UEContextModificationConfirm_t) { +int CU_send_UE_CONTEXT_MODIFICATION_CONFIRM(instance_t instance, + F1AP_UEContextModificationConfirm_t UEContextModificationConfirm_t) { AssertFatal(1==0,"Not implemented yet\n"); -} \ No newline at end of file +} diff --git a/openair2/F1AP/f1ap_cu_ue_context_management.h b/openair2/F1AP/f1ap_cu_ue_context_management.h index b6bbedba2f0ed9c62704a0f9fdcf52c3e182ed60..f103a170737d7e7a65d454e4b6cb05e80098c479 100644 --- a/openair2/F1AP/f1ap_cu_ue_context_management.h +++ b/openair2/F1AP/f1ap_cu_ue_context_management.h @@ -19,8 +19,8 @@ * contact@openairinterface.org */ -/*! \file f1ap_du_interface_management.h - * \brief f1ap interface management for DU +/*! \file f1ap_cu_ue_context_management.h + * \brief header file of CU UE Context management * \author EURECOM/NTUST * \date 2018 * \version 0.1 @@ -28,4 +28,74 @@ * \email: navid.nikaein@eurecom.fr, bing-kai.hong@eurecom.fr * \note * \warning - */ \ No newline at end of file + */ + +#ifndef F1AP_CU_UE_CONTEXT_MANAGEMENT_H_ +#define F1AP_CU_UE_CONTEXT_MANAGEMENT_H_ + +/* + * UE Context Setup + */ +int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance); + +int CU_handle_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + +int CU_handle_UE_CONTEXT_SETUP_FAILURE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + + +/* + * UE Context Release Request (gNB-DU initiated) + */ +int CU_handle_UE_CONTEXT_RELEASE_REQUEST(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + +/* + * UE Context Release (gNB-CU initiated) + */ +int CU_send_UE_CONTEXT_RELEASE_COMMAND(instance_t instance, + F1AP_UEContextReleaseCommand_t *UEContextReleaseCommand); +int CU_handle_UE_CONTEXT_RELEASE_COMPLETE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + +/* + * UE Context Modification (gNB-CU initiated) + */ +int CU_send_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance); +int CU_handle_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); +int CU_handle_UE_CONTEXT_MODIFICATION_FAILURE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + +/* + * UE Context Modification Required (gNB-DU initiated) + */ +int CU_handle_UE_CONTEXT_MODIFICATION_REQUIRED(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); +int CU_send_UE_CONTEXT_MODIFICATION_CONFIRM(instance_t instance, + F1AP_UEContextModificationConfirm_t UEContextModificationConfirm_t); + +/* + * UE Inactivity Notification + */ + +/* + * Notify + */ + +#endif /* F1AP_CU_UE_CONTEXT_MANAGEMENT_H_ */ diff --git a/openair2/F1AP/f1ap_du_interface_management.c b/openair2/F1AP/f1ap_du_interface_management.c index c83095447f4b7aab2ca97d3aa6a1b5519d4d2ec6..e6aef6166ca0178ee7c6b524126046fca32ee447 100644 --- a/openair2/F1AP/f1ap_du_interface_management.c +++ b/openair2/F1AP/f1ap_du_interface_management.c @@ -31,30 +31,34 @@ */ #include "f1ap_common.h" +#include "f1ap_encoder.h" +#include "f1ap_decoder.h" +#include "f1ap_itti_messaging.h" #include "f1ap_du_interface_management.h" #include "assertions.h" extern f1ap_setup_req_t *f1ap_du_data; -/* - Reset -*/ - - -void DU_handle_RESET(F1AP_Reset_t *Reset) { +int DU_handle_RESET(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } -void DU_send_RESET_ACKKNOWLEDGE(F1AP_ResetAcknowledge_t *ResetAcknowledge) { +int DU_send_RESET_ACKKNOWLEDGE(instance_t instance, F1AP_ResetAcknowledge_t *ResetAcknowledge) { AssertFatal(1==0,"Not implemented yet\n"); } -void DU_send_RESET(F1AP_Reset_t *Reset) { +int DU_send_RESET(instance_t instance, F1AP_Reset_t *Reset) { AssertFatal(1==0,"Not implemented yet\n"); } -void DU_handle_RESET_ACKKNOWLEDGE(F1AP_ResetAcknowledge_t *ResetAcknowledge) { +int DU_handle_RESET_ACKNOWLEDGE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } @@ -63,11 +67,14 @@ void DU_handle_RESET_ACKKNOWLEDGE(F1AP_ResetAcknowledge_t *ResetAcknowledge) { Error Indication */ -void DU_send_ERROR_INDICATION(struct F1AP_F1AP_PDU_t *pdu_p) { +int DU_send_ERROR_INDICATION(instance_t instance, F1AP_F1AP_PDU_t *pdu_p) { AssertFatal(1==0,"Not implemented yet\n"); } -void DU_handle_ERROR_INDICATION(F1AP_ErrorIndication_t *ErrorIndication) { +int DU_handle_ERROR_INDICATION(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } @@ -77,7 +84,7 @@ void DU_handle_ERROR_INDICATION(F1AP_ErrorIndication_t *ErrorIndication) { */ // SETUP REQUEST -void DU_send_F1_SETUP_REQUEST(instance_t instance) { +int DU_send_F1_SETUP_REQUEST(instance_t instance) { module_id_t enb_mod_idP; module_id_t du_mod_idP; @@ -203,73 +210,157 @@ void DU_send_F1_SETUP_REQUEST(instance_t instance) { //f1ap_du_data->fdd_flag = 1; if (f1ap_du_data->fdd_flag) { // FDD nR_Mode_Info.present = F1AP_NR_Mode_Info_PR_fDD; - /* > FDD >> FDD Info */ F1AP_FDD_Info_t *fDD_Info = (F1AP_FDD_Info_t *)calloc(1, sizeof(F1AP_FDD_Info_t)); - /* >>> UL NRFreqInfo */ - fDD_Info->uL_NRFreqInfo.nRARFCN = f1ap_du_data->nr_mode_info[i].fdd.ul_nr_arfcn; - - F1AP_FreqBandNrItem_t ul_freqBandNrItem; - memset((void *)&ul_freqBandNrItem, 0, sizeof(F1AP_FreqBandNrItem_t)); - ul_freqBandNrItem.freqBandIndicatorNr = 777L; - - F1AP_SupportedSULFreqBandItem_t ul_supportedSULFreqBandItem; - memset((void *)&ul_supportedSULFreqBandItem, 0, sizeof(F1AP_SupportedSULFreqBandItem_t)); - ul_supportedSULFreqBandItem.freqBandIndicatorNr = 777L; - ASN_SEQUENCE_ADD(&ul_freqBandNrItem.supportedSULBandList.list, &ul_supportedSULFreqBandItem); - - ASN_SEQUENCE_ADD(&fDD_Info->uL_NRFreqInfo.freqBandListNr.list, &ul_freqBandNrItem); - /* >>> DL NRFreqInfo */ - fDD_Info->dL_NRFreqInfo.nRARFCN = f1ap_du_data->nr_mode_info[i].fdd.dl_nr_arfcn; - - F1AP_FreqBandNrItem_t dl_freqBandNrItem; - memset((void *)&dl_freqBandNrItem, 0, sizeof(F1AP_FreqBandNrItem_t)); - dl_freqBandNrItem.freqBandIndicatorNr = 777L; - - F1AP_SupportedSULFreqBandItem_t dl_supportedSULFreqBandItem; - memset((void *)&dl_supportedSULFreqBandItem, 0, sizeof(F1AP_SupportedSULFreqBandItem_t)); - dl_supportedSULFreqBandItem.freqBandIndicatorNr = 777L; - ASN_SEQUENCE_ADD(&dl_freqBandNrItem.supportedSULBandList.list, &dl_supportedSULFreqBandItem); - - ASN_SEQUENCE_ADD(&fDD_Info->dL_NRFreqInfo.freqBandListNr.list, &dl_freqBandNrItem); - - /* >>> UL Transmission Bandwidth */ + /* FDD.1 UL NRFreqInfo */ + /* FDD.1.1 UL NRFreqInfo ARFCN */ + fDD_Info->uL_NRFreqInfo.nRARFCN = f1ap_du_data->nr_mode_info[i].fdd.ul_nr_arfcn; // Integer + + /* FDD.1.2 F1AP_SUL_Information */ + if(0) { // Optional + F1AP_SUL_Information_t *fdd_sul_info = (F1AP_SUL_Information_t *)calloc(1, sizeof(F1AP_SUL_Information_t)); + fdd_sul_info->sUL_NRARFCN = 0; + fdd_sul_info->sUL_transmission_Bandwidth.nRSCS = 0; + fdd_sul_info->sUL_transmission_Bandwidth.nRNRB = 0; + fDD_Info->uL_NRFreqInfo.sul_Information = fdd_sul_info; + } + + /* FDD.1.3 freqBandListNr */ + int fdd_ul_num_available_freq_Bands = f1ap_du_data->nr_mode_info[i].fdd.ul_num_frequency_bands; + printf("fdd_ul_num_available_freq_Bands = %d \n", fdd_ul_num_available_freq_Bands); + int fdd_ul_j; + for (fdd_ul_j=0; + fdd_ul_j<fdd_ul_num_available_freq_Bands; + fdd_ul_j++) { + + F1AP_FreqBandNrItem_t nr_freqBandNrItem; + memset((void *)&nr_freqBandNrItem, 0, sizeof(F1AP_FreqBandNrItem_t)); + /* FDD.1.3.1 freqBandIndicatorNr*/ + nr_freqBandNrItem.freqBandIndicatorNr = f1ap_du_data->nr_mode_info[i].fdd.ul_nr_band[fdd_ul_j]; // + + /* FDD.1.3.2 supportedSULBandList*/ + int num_available_supported_SULBands = f1ap_du_data->nr_mode_info[i].fdd.ul_num_sul_frequency_bands; + printf("num_available_supported_SULBands = %d \n", num_available_supported_SULBands); + int fdd_ul_k; + for (fdd_ul_k=0; + fdd_ul_k<num_available_supported_SULBands; + fdd_ul_k++) { + F1AP_SupportedSULFreqBandItem_t nr_supportedSULFreqBandItem; + memset((void *)&nr_supportedSULFreqBandItem, 0, sizeof(F1AP_SupportedSULFreqBandItem_t)); + /* FDD.1.3.2.1 freqBandIndicatorNr */ + nr_supportedSULFreqBandItem.freqBandIndicatorNr = f1ap_du_data->nr_mode_info[i].fdd.ul_nr_sul_band[fdd_ul_k]; // + ASN_SEQUENCE_ADD(&nr_freqBandNrItem.supportedSULBandList.list, &nr_supportedSULFreqBandItem); + } // for FDD : UL supported_SULBands + ASN_SEQUENCE_ADD(&fDD_Info->uL_NRFreqInfo.freqBandListNr.list, &nr_freqBandNrItem); + } // for FDD : UL freq_Bands + + /* FDD.2 DL NRFreqInfo */ + /* FDD.2.1 DL NRFreqInfo ARFCN */ + fDD_Info->dL_NRFreqInfo.nRARFCN = f1ap_du_data->nr_mode_info[i].fdd.dl_nr_arfcn; // Integer + + /* FDD.2.2 F1AP_SUL_Information */ + if(0) { // Optional + F1AP_SUL_Information_t *fdd_sul_info = (F1AP_SUL_Information_t *)calloc(1, sizeof(F1AP_SUL_Information_t)); + fdd_sul_info->sUL_NRARFCN = 0; + fdd_sul_info->sUL_transmission_Bandwidth.nRSCS = 0; + fdd_sul_info->sUL_transmission_Bandwidth.nRNRB = 0; + fDD_Info->dL_NRFreqInfo.sul_Information = fdd_sul_info; + } + + /* FDD.2.3 freqBandListNr */ + int fdd_dl_num_available_freq_Bands = f1ap_du_data->nr_mode_info[i].fdd.dl_num_frequency_bands; + printf("fdd_dl_num_available_freq_Bands = %d \n", fdd_dl_num_available_freq_Bands); + int fdd_dl_j; + for (fdd_dl_j=0; + fdd_dl_j<fdd_dl_num_available_freq_Bands; + fdd_dl_j++) { + + F1AP_FreqBandNrItem_t nr_freqBandNrItem; + memset((void *)&nr_freqBandNrItem, 0, sizeof(F1AP_FreqBandNrItem_t)); + /* FDD.2.3.1 freqBandIndicatorNr*/ + nr_freqBandNrItem.freqBandIndicatorNr = f1ap_du_data->nr_mode_info[i].fdd.dl_nr_band[fdd_dl_j]; // + + /* FDD.2.3.2 supportedSULBandList*/ + int num_available_supported_SULBands = f1ap_du_data->nr_mode_info[i].fdd.dl_num_sul_frequency_bands; + printf("num_available_supported_SULBands = %d \n", num_available_supported_SULBands); + int fdd_dl_k; + for (fdd_dl_k=0; + fdd_dl_k<num_available_supported_SULBands; + fdd_dl_k++) { + F1AP_SupportedSULFreqBandItem_t nr_supportedSULFreqBandItem; + memset((void *)&nr_supportedSULFreqBandItem, 0, sizeof(F1AP_SupportedSULFreqBandItem_t)); + /* FDD.2.3.2.1 freqBandIndicatorNr */ + nr_supportedSULFreqBandItem.freqBandIndicatorNr = f1ap_du_data->nr_mode_info[i].fdd.dl_nr_sul_band[fdd_dl_k]; // + ASN_SEQUENCE_ADD(&nr_freqBandNrItem.supportedSULBandList.list, &nr_supportedSULFreqBandItem); + } // for FDD : DL supported_SULBands + ASN_SEQUENCE_ADD(&fDD_Info->dL_NRFreqInfo.freqBandListNr.list, &nr_freqBandNrItem); + } // for FDD : DL freq_Bands + + /* FDD.3 UL Transmission Bandwidth */ fDD_Info->uL_Transmission_Bandwidth.nRSCS = f1ap_du_data->nr_mode_info[i].fdd.ul_scs; fDD_Info->uL_Transmission_Bandwidth.nRNRB = f1ap_du_data->nr_mode_info[i].fdd.ul_nrb; - /* >>> DL Transmission Bandwidth */ + /* FDD.4 DL Transmission Bandwidth */ fDD_Info->dL_Transmission_Bandwidth.nRSCS = f1ap_du_data->nr_mode_info[i].fdd.dl_scs; fDD_Info->dL_Transmission_Bandwidth.nRNRB = f1ap_du_data->nr_mode_info[i].fdd.dl_nrb; nR_Mode_Info.choice.fDD = fDD_Info; } else { // TDD nR_Mode_Info.present = F1AP_NR_Mode_Info_PR_tDD; - - /* > TDD >> TDD Info */ F1AP_TDD_Info_t *tDD_Info = (F1AP_TDD_Info_t *)calloc(1, sizeof(F1AP_TDD_Info_t)); - /* >>> ARFCN */ - tDD_Info->nRFreqInfo.nRARFCN = f1ap_du_data->nr_mode_info[i].tdd.nr_arfcn; // Integer - F1AP_FreqBandNrItem_t nr_freqBandNrItem; - memset((void *)&nr_freqBandNrItem, 0, sizeof(F1AP_FreqBandNrItem_t)); - // RK: missing params - nr_freqBandNrItem.freqBandIndicatorNr = 555L; - - F1AP_SupportedSULFreqBandItem_t nr_supportedSULFreqBandItem; - memset((void *)&nr_supportedSULFreqBandItem, 0, sizeof(F1AP_SupportedSULFreqBandItem_t)); - nr_supportedSULFreqBandItem.freqBandIndicatorNr = 444L; - ASN_SEQUENCE_ADD(&nr_freqBandNrItem.supportedSULBandList.list, &nr_supportedSULFreqBandItem); - - ASN_SEQUENCE_ADD(&tDD_Info->nRFreqInfo.freqBandListNr.list, &nr_freqBandNrItem); - tDD_Info->transmission_Bandwidth.nRSCS= f1ap_du_data->nr_mode_info[i].tdd.scs; - tDD_Info->transmission_Bandwidth.nRNRB= f1ap_du_data->nr_mode_info[i].tdd.nrb; + /* TDD.1 nRFreqInfo */ + /* TDD.1.1 nRFreqInfo ARFCN */ + tDD_Info->nRFreqInfo.nRARFCN = f1ap_du_data->nr_mode_info[i].tdd.nr_arfcn; // Integer + + /* TDD.1.2 F1AP_SUL_Information */ + if(0) { // Optional + F1AP_SUL_Information_t *tdd_sul_info = (F1AP_SUL_Information_t *)calloc(1, sizeof(F1AP_SUL_Information_t)); + tdd_sul_info->sUL_NRARFCN = 0; + tdd_sul_info->sUL_transmission_Bandwidth.nRSCS = 0; + tdd_sul_info->sUL_transmission_Bandwidth.nRNRB = 0; + tDD_Info->nRFreqInfo.sul_Information = tdd_sul_info; + } + + /* TDD.1.3 freqBandListNr */ + int tdd_num_available_freq_Bands = f1ap_du_data->nr_mode_info[i].tdd.num_frequency_bands; + printf("tdd_num_available_freq_Bands = %d \n", tdd_num_available_freq_Bands); + int j; + for (j=0; + j<tdd_num_available_freq_Bands; + j++) { + + F1AP_FreqBandNrItem_t nr_freqBandNrItem; + memset((void *)&nr_freqBandNrItem, 0, sizeof(F1AP_FreqBandNrItem_t)); + /* TDD.1.3.1 freqBandIndicatorNr*/ + nr_freqBandNrItem.freqBandIndicatorNr = *f1ap_du_data->nr_mode_info[i].tdd.nr_band; // + + /* TDD.1.3.2 supportedSULBandList*/ + int num_available_supported_SULBands = f1ap_du_data->nr_mode_info[i].tdd.num_sul_frequency_bands; + printf("num_available_supported_SULBands = %d \n", num_available_supported_SULBands); + int k; + for (k=0; + k<num_available_supported_SULBands; + k++) { + F1AP_SupportedSULFreqBandItem_t nr_supportedSULFreqBandItem; + memset((void *)&nr_supportedSULFreqBandItem, 0, sizeof(F1AP_SupportedSULFreqBandItem_t)); + /* TDD.1.3.2.1 freqBandIndicatorNr */ + nr_supportedSULFreqBandItem.freqBandIndicatorNr = *f1ap_du_data->nr_mode_info[i].tdd.nr_sul_band; // + ASN_SEQUENCE_ADD(&nr_freqBandNrItem.supportedSULBandList.list, &nr_supportedSULFreqBandItem); + } // for TDD : supported_SULBands + ASN_SEQUENCE_ADD(&tDD_Info->nRFreqInfo.freqBandListNr.list, &nr_freqBandNrItem); + } // for TDD : freq_Bands + + /* TDD.2 transmission_Bandwidth */ + tDD_Info->transmission_Bandwidth.nRSCS = f1ap_du_data->nr_mode_info[i].tdd.scs; + tDD_Info->transmission_Bandwidth.nRNRB = f1ap_du_data->nr_mode_info[i].tdd.nrb; nR_Mode_Info.choice.tDD = tDD_Info; - } + } // if nR_Mode_Info served_cell_information.nR_Mode_Info = nR_Mode_Info; /* - measurementTimingConfiguration */ - char *measurementTimingConfiguration = "0"; //&f1ap_du_data->measurement_timing_information[i]; // sept. 2018 + char *measurementTimingConfiguration = f1ap_du_data->measurement_timing_information[i]; // sept. 2018 OCTET_STRING_fromBuf(&served_cell_information.measurementTimingConfiguration, measurementTimingConfiguration, @@ -301,14 +392,18 @@ void DU_send_F1_SETUP_REQUEST(instance_t instance) { /* encode */ if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) { printf("Failed to encode F1 setup request\n"); + return -1; } du_f1ap_itti_send_sctp_data_req(instance, f1ap_du_data->assoc_id, buffer, len, 0); + + return 0; } -int DU_handle_F1_SETUP_RESPONSE(uint32_t assoc_id, - uint32_t stream, - F1AP_F1AP_PDU_t *pdu) +int DU_handle_F1_SETUP_RESPONSE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { printf("DU_handle_F1_SETUP_RESPONSE\n"); @@ -413,8 +508,12 @@ int DU_handle_F1_SETUP_RESPONSE(uint32_t assoc_id, } // SETUP FAILURE -void DU_handle_F1_SETUP_FAILURE(F1AP_F1AP_PDU_t *pdu_p) { - AssertFatal(1==0,"Not implemented yet\n"); +int DU_handle_F1_SETUP_FAILURE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { + LOG_E(DU_F1AP, "DU_handle_F1_SETUP_FAILURE\n"); + return 0; } @@ -423,7 +522,9 @@ void DU_handle_F1_SETUP_FAILURE(F1AP_F1AP_PDU_t *pdu_p) { */ //void DU_send_gNB_DU_CONFIGURATION_UPDATE(F1AP_GNBDUConfigurationUpdate_t *GNBDUConfigurationUpdate) { -void DU_send_gNB_DU_CONFIGURATION_UPDATE(module_id_t enb_mod_idP, module_id_t du_mod_idP, f1ap_setup_req_t *f1ap_du_data) { +int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance, + instance_t du_mod_idP, + f1ap_setup_req_t *f1ap_du_data) { F1AP_F1AP_PDU_t pdu; F1AP_GNBDUConfigurationUpdate_t *out; F1AP_GNBDUConfigurationUpdateIEs_t *ie; @@ -449,7 +550,7 @@ void DU_send_gNB_DU_CONFIGURATION_UPDATE(module_id_t enb_mod_idP, module_id_t du ie->id = F1AP_ProtocolIE_ID_id_TransactionID; ie->criticality = F1AP_Criticality_reject; ie->value.present = F1AP_GNBDUConfigurationUpdateIEs__value_PR_TransactionID; - ie->value.choice.TransactionID = F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP); + ie->value.choice.TransactionID = F1AP_get_next_transaction_identifier(instance, du_mod_idP); ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); @@ -480,15 +581,15 @@ void DU_send_gNB_DU_CONFIGURATION_UPDATE(module_id_t enb_mod_idP, module_id_t du /* - nRCGI */ F1AP_NRCGI_t nRCGI; MCC_MNC_TO_PLMNID(f1ap_du_data->mcc[i], f1ap_du_data->mnc[i], f1ap_du_data->mnc_digit_length[i], &nRCGI.pLMN_Identity); - NR_CELL_ID_TO_BIT_STRING(123456, &nRCGI.nRCellIdentity); + NR_CELL_ID_TO_BIT_STRING(f1ap_du_data->nr_cellid[i], &nRCGI.nRCellIdentity); served_cell_information.nRCGI = nRCGI; /* - nRPCI */ - served_cell_information.nRPCI = 321L; // int 0..1007 + served_cell_information.nRPCI = f1ap_du_data->nr_pci[i]; // int 0..1007 /* - fiveGS_TAC */ OCTET_STRING_fromBuf(&served_cell_information.fiveGS_TAC, - "10", + &f1ap_du_data->tac[i], 3); /* - Configured_EPS_TAC */ @@ -634,7 +735,7 @@ void DU_send_gNB_DU_CONFIGURATION_UPDATE(module_id_t enb_mod_idP, module_id_t du F1AP_NRCGI_t oldNRCGI; MCC_MNC_TO_PLMNID(f1ap_du_data->mcc[i], f1ap_du_data->mnc[i], f1ap_du_data->mnc_digit_length[i], &oldNRCGI.pLMN_Identity); - NR_CELL_ID_TO_BIT_STRING(123456, &oldNRCGI.nRCellIdentity); + NR_CELL_ID_TO_BIT_STRING(f1ap_du_data->nr_cellid[i], &oldNRCGI.nRCellIdentity); served_cells_to_modify_item.oldNRCGI = oldNRCGI; @@ -646,15 +747,15 @@ void DU_send_gNB_DU_CONFIGURATION_UPDATE(module_id_t enb_mod_idP, module_id_t du F1AP_NRCGI_t nRCGI; MCC_MNC_TO_PLMNID(f1ap_du_data->mcc[i], f1ap_du_data->mnc[i], f1ap_du_data->mnc_digit_length[i], &nRCGI.pLMN_Identity); - NR_CELL_ID_TO_BIT_STRING(123456, &nRCGI.nRCellIdentity); + NR_CELL_ID_TO_BIT_STRING(f1ap_du_data->nr_cellid[i], &nRCGI.nRCellIdentity); served_cell_information.nRCGI = nRCGI; /* - nRPCI */ - served_cell_information.nRPCI = 321L; // int 0..1007 + served_cell_information.nRPCI = f1ap_du_data->nr_pci[i]; // int 0..1007 /* - fiveGS_TAC */ OCTET_STRING_fromBuf(&served_cell_information.fiveGS_TAC, - "10", + &f1ap_du_data->tac[i], 3); /* - Configured_EPS_TAC */ @@ -800,7 +901,7 @@ void DU_send_gNB_DU_CONFIGURATION_UPDATE(module_id_t enb_mod_idP, module_id_t du F1AP_NRCGI_t oldNRCGI; MCC_MNC_TO_PLMNID(f1ap_du_data->mcc[i], f1ap_du_data->mnc[i], f1ap_du_data->mnc_digit_length[i], &oldNRCGI.pLMN_Identity); - NR_CELL_ID_TO_BIT_STRING(123456, &oldNRCGI.nRCellIdentity); + NR_CELL_ID_TO_BIT_STRING(f1ap_du_data->nr_cellid[i], &oldNRCGI.nRCellIdentity); served_cells_to_delete_item.oldNRCGI = oldNRCGI; /* ADD */ @@ -836,7 +937,7 @@ void DU_send_gNB_DU_CONFIGURATION_UPDATE(module_id_t enb_mod_idP, module_id_t du F1AP_NRCGI_t nRCGI; MCC_MNC_TO_PLMNID(f1ap_du_data->mcc[i], f1ap_du_data->mnc[i], f1ap_du_data->mnc_digit_length[i], &nRCGI.pLMN_Identity); - NR_CELL_ID_TO_BIT_STRING(123456, &nRCGI.nRCellIdentity); + NR_CELL_ID_TO_BIT_STRING(f1ap_du_data->nr_cellid[i], &nRCGI.nRCellIdentity); active_cells_item.nRCGI = nRCGI; /* ADD */ @@ -850,6 +951,7 @@ void DU_send_gNB_DU_CONFIGURATION_UPDATE(module_id_t enb_mod_idP, module_id_t du if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) { printf("Failed to encode F1 setup request\n"); + return -1; } printf("\n"); @@ -859,32 +961,55 @@ void DU_send_gNB_DU_CONFIGURATION_UPDATE(module_id_t enb_mod_idP, module_id_t du /* decode */ if (f1ap_decode_pdu(&pdu, buffer, len) > 0) { printf("Failed to decode F1 setup request\n"); + return -1; } + + return 0; } -void DU_handle_gNB_DU_CONFIGURATION_FAILURE(F1AP_GNBDUConfigurationUpdateFailure_t GNBDUConfigurationUpdateFailure) { +int DU_handle_gNB_DU_CONFIGURATION_FAILURE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } -void DU_handle_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE(F1AP_GNBDUConfigurationUpdateAcknowledge_t GNBDUConfigurationUpdateAcknowledge) { +int DU_handle_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } -/* - gNB-CU Configuration Update -*/ - -void DU_handle_gNB_CU_CONFIGURATION_UPDATE(F1AP_GNBCUConfigurationUpdate_t *GNBCUConfigurationUpdate) { +int DU_handle_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } -void DU_send_gNB_CU_CONFIGURATION_UPDATE_FALIURE(F1AP_GNBCUConfigurationUpdateFailure_t *GNBCUConfigurationUpdateFailure) { +int DU_send_gNB_CU_CONFIGURATION_UPDATE_FAILURE(instance_t instance, + F1AP_GNBCUConfigurationUpdateFailure_t *GNBCUConfigurationUpdateFailure) { AssertFatal(1==0,"Not implemented yet\n"); } -void DU_send_gNB_CU_CONFIGURATION_UPDATE_ACKNOWLEDGE(F1AP_GNBCUConfigurationUpdateAcknowledge_t *GNBCUConfigurationUpdateAcknowledge) { +int DU_send_gNB_CU_CONFIGURATION_UPDATE_ACKNOWLEDGE(instance_t instance, + F1AP_GNBCUConfigurationUpdateAcknowledge_t *GNBCUConfigurationUpdateAcknowledge) { AssertFatal(1==0,"Not implemented yet\n"); } + + +int DU_send_gNB_DU_RESOURCE_COORDINATION_REQUEST(instance_t instance, + F1AP_GNBDUResourceCoordinationRequest_t *GNBDUResourceCoordinationRequest) { + AssertFatal(0, "Not implemented yet\n"); +} + +int DU_handle_gNB_DU_RESOURCE_COORDINATION_RESPONSE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { + AssertFatal(0, "Not implemented yet\n"); +} diff --git a/openair2/F1AP/f1ap_du_interface_management.h b/openair2/F1AP/f1ap_du_interface_management.h index 1ee1be658f044f91dcf43203b73d5f84d4093af6..941b86a6d4228d7e61539c5de198178de363471e 100644 --- a/openair2/F1AP/f1ap_du_interface_management.h +++ b/openair2/F1AP/f1ap_du_interface_management.h @@ -33,12 +33,86 @@ #ifndef F1AP_DU_INTERFACE_MANAGEMENT_H_ #define F1AP_DU_INTERFACE_MANAGEMENT_H_ -void DU_send_F1_SETUP_REQUEST(instance_t instance); +/* + * Reset + */ +int DU_handle_RESET(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); +int DU_send_RESET_ACKKNOWLEDGE(instance_t instance, F1AP_ResetAcknowledge_t *ResetAcknowledge); +int DU_send_RESET(instance_t instance, F1AP_Reset_t *Reset); +int DU_handle_RESET_ACKNOWLEDGE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + +/* + * Error Indication + */ +int DU_send_ERROR_INDICATION(instance_t instance, F1AP_F1AP_PDU_t *pdu_p); +int DU_handle_ERROR_INDICATION(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + + +/* + * F1 Setup + */ +int DU_send_F1_SETUP_REQUEST(instance_t instance); + +int DU_handle_F1_SETUP_RESPONSE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + +int DU_handle_F1_SETUP_FAILURE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + +/* + * gNB-DU Configuration Update + */ +int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance, + instance_t du_mod_idP, + f1ap_setup_req_t *f1ap_du_data); + +int DU_handle_gNB_DU_CONFIGURATION_FAILURE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + +int DU_handle_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + +/* + * gNB-CU Configuration Update + */ +int DU_handle_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + +int DU_send_gNB_CU_CONFIGURATION_UPDATE_FAILURE(instance_t instance, + F1AP_GNBCUConfigurationUpdateFailure_t *GNBCUConfigurationUpdateFailure); + +int DU_send_gNB_CU_CONFIGURATION_UPDATE_ACKNOWLEDGE(instance_t instance, + F1AP_GNBCUConfigurationUpdateAcknowledge_t *GNBCUConfigurationUpdateAcknowledge); -int DU_handle_F1_SETUP_RESPONSE(uint32_t assoc_id, - uint32_t stream, - F1AP_F1AP_PDU_t *pdu); -void DU_handle_F1_SETUP_FAILURE(F1AP_F1AP_PDU_t *pdu_p); +/* + * gNB-DU Resource Coordination + */ +int DU_send_gNB_DU_RESOURCE_COORDINATION_REQUEST(instance_t instance, + F1AP_GNBDUResourceCoordinationRequest_t *GNBDUResourceCoordinationRequest); + +int DU_handle_gNB_DU_RESOURCE_COORDINATION_RESPONSE(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); -#endif /* F1AP_DU_INTERFACE_MANAGEMENT_H_ */ \ No newline at end of file +#endif /* F1AP_DU_INTERFACE_MANAGEMENT_H_ */ diff --git a/openair2/F1AP/f1ap_du_rrc_message_transfer.c b/openair2/F1AP/f1ap_du_rrc_message_transfer.c index 7e2a113329c1d4e716c68d512a8d24291d9563df..fef7fac0979983382a48f3f1beac675e0cf39afd 100644 --- a/openair2/F1AP/f1ap_du_rrc_message_transfer.c +++ b/openair2/F1AP/f1ap_du_rrc_message_transfer.c @@ -31,6 +31,9 @@ */ #include "f1ap_common.h" +#include "f1ap_encoder.h" +#include "f1ap_decoder.h" +#include "f1ap_itti_messaging.h" #include "f1ap_du_rrc_message_transfer.h" // undefine C_RNTI from // openair1/PHY/LTE_TRANSPORT/transport_common.h which @@ -41,12 +44,15 @@ extern f1ap_setup_req_t *f1ap_du_data; /* DL RRC Message Transfer */ -void DU_handle_DL_RRC_MESSAGE_TRANSFER(F1AP_DLRRCMessageTransfer_t *DLRRCMessageTransfer) { +int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } //void DU_send_UL_RRC_MESSAGE_TRANSFER(F1AP_ULRRCMessageTransfer_t *ULRRCMessageTransfer) { -void DU_send_UL_RRC_MESSAGE_TRANSFER(void) { +int DU_send_UL_RRC_MESSAGE_TRANSFER(void) { F1AP_F1AP_PDU_t pdu; F1AP_ULRRCMessageTransfer_t *out; F1AP_ULRRCMessageTransferIEs_t *ie; @@ -105,6 +111,7 @@ void DU_send_UL_RRC_MESSAGE_TRANSFER(void) { /* encode */ if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) { printf("Failed to encode F1 setup request\n"); + return -1; } printf("\n"); @@ -115,10 +122,12 @@ void DU_send_UL_RRC_MESSAGE_TRANSFER(void) { // printf("Failed to decode F1 setup request\n"); // } //AssertFatal(1==0,"Not implemented yet\n"); + + return 0; } /* UL RRC Message Transfer */ -void DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER( +int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER( module_id_t module_idP, int CC_idP, int UE_id, @@ -163,7 +172,7 @@ void DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER( F1AP_NRCGI_t nRCGI; MCC_MNC_TO_PLMNID(f1ap_du_data->mcc[0], f1ap_du_data->mnc[0], f1ap_du_data->mnc_digit_length[0], &nRCGI.pLMN_Identity); - NR_CELL_ID_TO_BIT_STRING(123456, &nRCGI.nRCellIdentity); + NR_CELL_ID_TO_BIT_STRING(f1ap_du_data->nr_cellid[0], &nRCGI.nRCellIdentity); ie->value.choice.NRCGI = nRCGI; ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); @@ -202,14 +211,16 @@ void DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER( /* encode */ if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) { printf("Failed to encode F1 setup request\n"); + return -1; } printf("\n"); - //du_f1ap_itti_send_sctp_data_req(instance, f1ap_setup_req->assoc_id, buffer, len, 0); + du_f1ap_itti_send_sctp_data_req(0, f1ap_du_data->assoc_id, buffer, len, 0); + return 0; /* decode */ // if (f1ap_decode_pdu(&pdu, buffer, len) > 0) { // printf("Failed to decode F1 setup request\n"); // } //AssertFatal(1==0,"Not implemented yet\n"); -} \ No newline at end of file +} diff --git a/openair2/F1AP/f1ap_du_rrc_message_transfer.h b/openair2/F1AP/f1ap_du_rrc_message_transfer.h index 24a48fdcdd2cd87cf60f2568cc6e1753b56b03de..a841d7a7ba5ee13269582b303e9a49ad127d2a2d 100644 --- a/openair2/F1AP/f1ap_du_rrc_message_transfer.h +++ b/openair2/F1AP/f1ap_du_rrc_message_transfer.h @@ -34,4 +34,19 @@ #ifndef F1AP_DU_RRC_MESSAGE_TRANSFER_H_ #define F1AP_DU_RRC_MESSAGE_TRANSFER_H_ -#endif /* F1AP_DU_RRC_MESSAGE_TRANSFER_H_ */ \ No newline at end of file +int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + +int DU_send_UL_RRC_MESSAGE_TRANSFER(void); + +int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER( + module_id_t module_idP, + int CC_idP, + int UE_id, + rnti_t rntiP, + uint8_t *sduP, + sdu_size_t sdu_lenP); + +#endif /* F1AP_DU_RRC_MESSAGE_TRANSFER_H_ */ diff --git a/openair2/F1AP/f1ap_du_task.c b/openair2/F1AP/f1ap_du_task.c index 091428b1e722ba28310cf35b32fad9df901ebc6d..1bc49270f0ba7f087c3da49f1dfc5b14579fd0c6 100644 --- a/openair2/F1AP/f1ap_du_task.c +++ b/openair2/F1AP/f1ap_du_task.c @@ -97,13 +97,13 @@ void du_task_handle_sctp_association_resp(instance_t instance, sctp_new_associat DU_send_F1_SETUP_REQUEST(instance); } -void du_task_handle_sctp_data_ind(sctp_data_ind_t *sctp_data_ind) +void du_task_handle_sctp_data_ind(instance_t instance, sctp_data_ind_t *sctp_data_ind) { int result; DevAssert(sctp_data_ind != NULL); - f1ap_handle_message(sctp_data_ind->assoc_id, sctp_data_ind->stream, + f1ap_handle_message(instance, sctp_data_ind->assoc_id, sctp_data_ind->stream, sctp_data_ind->buffer, sctp_data_ind->buffer_length); result = itti_free(TASK_UNKNOWN, sctp_data_ind->buffer); @@ -154,7 +154,8 @@ void *F1AP_DU_task(void *arg) { case SCTP_DATA_IND: // ex: any F1 incoming message for DU ends here LOG_I(DU_F1AP, "SCTP_DATA_IND\n"); - du_task_handle_sctp_data_ind(&received_msg->ittiMsg.sctp_data_ind); + du_task_handle_sctp_data_ind(ITTI_MESSAGE_GET_INSTANCE(received_msg), + &received_msg->ittiMsg.sctp_data_ind); break; case TERMINATE_MESSAGE: diff --git a/openair2/F1AP/f1ap_du_task.h b/openair2/F1AP/f1ap_du_task.h index ffae6ac339b28121d7f6147e27c25ac7bc7286a3..47d0827809e7488e25667d038a462579d955039a 100644 --- a/openair2/F1AP/f1ap_du_task.h +++ b/openair2/F1AP/f1ap_du_task.h @@ -24,7 +24,7 @@ void du_task_send_sctp_association_req(instance_t instance, f1ap_setup_req_t *f1ap_setup_req); void du_task_handle_sctp_association_resp(instance_t instance, sctp_new_association_resp_t *sctp_new_association_resp); -void du_task_handle_sctp_data_ind(sctp_data_ind_t *sctp_data_ind); +void du_task_handle_sctp_data_ind(instance_t instance, sctp_data_ind_t *sctp_data_ind); void *F1AP_DU_task(void *arg); #endif /* DU_F1AP_TASK_H_ */ diff --git a/openair2/F1AP/f1ap_du_ue_context_management.c b/openair2/F1AP/f1ap_du_ue_context_management.c index 281e5f58a664e8866dffa3dc590308bebbb632ec..c81c47723c2133822ccc6d30e5c79295e83298d0 100644 --- a/openair2/F1AP/f1ap_du_ue_context_management.c +++ b/openair2/F1AP/f1ap_du_ue_context_management.c @@ -19,8 +19,8 @@ * contact@openairinterface.org */ -/*! \file f1ap_du_interface_management.h - * \brief f1ap interface management for DU +/*! \file f1ap_du_ue_context_management.c + * \brief F1AP UE Context Management, DU side * \author EURECOM/NTUST * \date 2018 * \version 0.1 @@ -31,20 +31,22 @@ */ #include "f1ap_common.h" +#include "f1ap_encoder.h" +#include "f1ap_decoder.h" +#include "f1ap_itti_messaging.h" #include "f1ap_du_ue_context_management.h" extern f1ap_setup_req_t *f1ap_du_data; -/* - UE Context Setup -*/ - -void DU_handle_UE_CONTEXT_SETUP_REQUEST(F1AP_UEContextSetupRequest_t *UEContextSetupRequest) { +int DU_handle_UE_CONTEXT_SETUP_REQUEST(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } //void DU_send_UE_CONTEXT_SETUP_RESPONSE(F1AP_UEContextSetupResponse_t *UEContextSetupResponse) { -void DU_send_UE_CONTEXT_SETUP_RESPONSE(void) { +int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance) { F1AP_F1AP_PDU_t pdu; F1AP_UEContextSetupResponse_t *out; F1AP_UEContextSetupResponseIEs_t *ie; @@ -259,18 +261,8 @@ void DU_send_UE_CONTEXT_SETUP_RESPONSE(void) { /* - nRCGI */ F1AP_NRCGI_t nRCGI; // issue here MCC_MNC_TO_PLMNID(f1ap_du_data->mcc[i], f1ap_du_data->mnc[i], f1ap_du_data->mnc_digit_length[i], &nRCGI.pLMN_Identity); -// - // INT32_TO_BIT_STRING(123, &nRCGI.nRCellIdentity); - // nRCGI.nRCellIdentity.buf = malloc((36+7)/8); - - // nRCGI.nRCellIdentity.size = (36+7)/8; - // nRCGI.nRCellIdentity.bits_unused = 4; - - // nRCGI.nRCellIdentity.buf[0] = 123; - - //nRCGI.nRCellIdentity = 15; - NR_CELL_ID_TO_BIT_STRING(123456, &nRCGI.nRCellIdentity); + NR_CELL_ID_TO_BIT_STRING(f1ap_du_data->nr_cellid[0], &nRCGI.nRCellIdentity); sCell_FailedtoSetup_item.sCell_ID = nRCGI; @@ -307,7 +299,7 @@ void DU_send_UE_CONTEXT_SETUP_RESPONSE(void) { /* encode */ if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) { printf("Failed to encode F1 setup request\n"); - return; + return -1; } printf("\n"); @@ -317,41 +309,41 @@ void DU_send_UE_CONTEXT_SETUP_RESPONSE(void) { // printf("Failed to decode F1 setup request\n"); // } //du_f1ap_itti_send_sctp_data_req(instance, f1ap_setup_req->assoc_id, buffer, len, 0); + return 0; } -void DU_send_UE_CONTEXT_SETUP_FAILURE(F1AP_UEContextSetupFailure_t UEContextSetupFailure) { +int DU_send_UE_CONTEXT_SETUP_FAILURE(instance_t instance) { AssertFatal(1==0,"Not implemented yet\n"); } -/* - UE Context Release Request (gNB-DU initiated). -*/ -void DU_send_UE_CONTEXT_RELEASE_REQUEST(F1AP_UEContextReleaseRequest_t *UEContextReleaseRequest) { +int DU_send_UE_CONTEXT_RELEASE_REQUEST(instance_t instance) { AssertFatal(1==0,"Not implemented yet\n"); } -void DU_handle_UE_CONTEXT_RELEASE_COMMAND(F1AP_UEContextReleaseCommand_t *UEContextReleaseCommand) { +int DU_handle_UE_CONTEXT_RELEASE_COMMAND(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } -void DU_send_UE_CONTEXT_RELEASE_COMPLETE(F1AP_UEContextReleaseComplete_t *UEContextReleaseComplete) { +int DU_send_UE_CONTEXT_RELEASE_COMPLETE(instance_t instance) { AssertFatal(1==0,"Not implemented yet\n"); } -/* - UE Context Modification (gNB-CU initiated) -*/ - -void DU_handle_UE_CONTEXT_MODIFICATION_REQUEST(F1AP_UEContextModificationRequest_t *UEContextModificationRequest) { +int DU_handle_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); } //void DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(F1AP_UEContextModificationResponse_t *UEContextModificationResponse) { -void DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(void) { +int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) { F1AP_F1AP_PDU_t pdu; F1AP_UEContextModificationResponse_t *out; F1AP_UEContextModificationResponseIEs_t *ie; @@ -625,7 +617,7 @@ void DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(void) { MCC_MNC_TO_PLMNID(f1ap_du_data->mcc[i], f1ap_du_data->mnc[i], f1ap_du_data->mnc_digit_length[i], &nRCGI.pLMN_Identity); - NR_CELL_ID_TO_BIT_STRING(123456, &nRCGI.nRCellIdentity); + NR_CELL_ID_TO_BIT_STRING(f1ap_du_data->nr_cellid[0], &nRCGI.nRCellIdentity); scell_failedtoSetupMod_item.sCell_ID = nRCGI; @@ -697,7 +689,7 @@ void DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(void) { /* encode */ if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) { printf("Failed to encode F1 setup request\n"); - return; + return -1; } printf("\n"); @@ -707,17 +699,21 @@ void DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(void) { // printf("Failed to decode F1 setup request\n"); // } //du_f1ap_itti_send_sctp_data_req(instance, f1ap_setup_req->assoc_id, buffer, len, 0); + return 0; } -void DU_send_UE_CONTEXT_MODIFICATION_FAILURE(F1AP_UEContextModificationFailure_t UEContextModificationFailure) { +int DU_send_UE_CONTEXT_MODIFICATION_FAILURE(instance_t instance) { AssertFatal(1==0,"Not implemented yet\n"); } -void DU_send_UE_CONTEXT_MODIFICATION_REQUIRED(F1AP_UEContextModificationRequired_t *UEContextModificationRequired) { +int DU_send_UE_CONTEXT_MODIFICATION_REQUIRED(instance_t instance) { AssertFatal(1==0,"Not implemented yet\n"); } -void DU_handle_UE_CONTEXT_MODIFICATION_CONFIRM(F1AP_UEContextModificationConfirm_t UEContextModificationConfirm_t) { +int DU_handle_UE_CONTEXT_MODIFICATION_CONFIRM(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu) { AssertFatal(1==0,"Not implemented yet\n"); -} \ No newline at end of file +} diff --git a/openair2/F1AP/f1ap_du_ue_context_management.h b/openair2/F1AP/f1ap_du_ue_context_management.h index 4771c1a66d087ddf82672ae80b56ff75072682cc..15e987209b241037e66299f4794e9e11c85bb4f8 100644 --- a/openair2/F1AP/f1ap_du_ue_context_management.h +++ b/openair2/F1AP/f1ap_du_ue_context_management.h @@ -33,4 +33,59 @@ #ifndef F1AP_DU_UE_CONTEXT_MANAGEMENT_H_ #define F1AP_DU_UE_CONTEXT_MANAGEMENT_H_ -#endif /* F1AP_DU_UE_CONTEXT_MANAGEMENT_H_ */ \ No newline at end of file +/* + * UE Context Setup + */ +int DU_handle_UE_CONTEXT_SETUP_REQUEST(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); +int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance); +int DU_send_UE_CONTEXT_SETUP_FAILURE(instance_t instance); + + +/* + * UE Context Release Request (gNB-DU initiated) + */ +int DU_send_UE_CONTEXT_RELEASE_REQUEST(instance_t instance); + + +/* + * UE Context Release (gNB-CU initiated) + */ +int DU_handle_UE_CONTEXT_RELEASE_COMMAND(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); +int DU_send_UE_CONTEXT_RELEASE_COMPLETE(instance_t instance); + + +/* + * UE Context Modification (gNB-CU initiated) + */ +int DU_handle_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); +int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance); +int DU_send_UE_CONTEXT_MODIFICATION_FAILURE(instance_t instance); + + +/* + * UE Context Modification Required (gNB-DU initiated) + */ +int DU_send_UE_CONTEXT_MODIFICATION_REQUIRED(instance_t instance); +int DU_handle_UE_CONTEXT_MODIFICATION_CONFIRM(instance_t instance, + uint32_t assoc_id, + uint32_t stream, + F1AP_F1AP_PDU_t *pdu); + +/* + * UE Inactivity Notification + */ + +/* + * Notify + */ + +#endif /* F1AP_DU_UE_CONTEXT_MANAGEMENT_H_ */ diff --git a/openair2/F1AP/f1ap_handlers.c b/openair2/F1AP/f1ap_handlers.c index e4178e358c9683b5611294c1b3b587ae5f4b06f1..c2d647e9b8cd27c1c09963bcf1637aa1e6020623 100644 --- a/openair2/F1AP/f1ap_handlers.c +++ b/openair2/F1AP/f1ap_handlers.c @@ -32,8 +32,10 @@ #include "f1ap_common.h" #include "f1ap_handlers.h" +#include "f1ap_decoder.h" #include "f1ap_cu_interface_management.h" #include "f1ap_du_interface_management.h" +#include "f1ap_cu_rrc_message_transfer.h" extern f1ap_setup_req_t *f1ap_du_data_from_du; @@ -42,19 +44,19 @@ f1ap_message_decoded_callback f1ap_messages_callback[][3] = { { 0, 0, 0 }, /* Reset */ - { CU_handle_F1_SETUP_REQUEST, DU_handle_F1_SETUP_RESPONSE, 0 }, /* F1Setup */ + { CU_handle_F1_SETUP_REQUEST, DU_handle_F1_SETUP_RESPONSE, DU_handle_F1_SETUP_FAILURE }, /* F1Setup */ { 0, 0, 0 }, /* ErrorIndication */ - { CU_handle_F1_SETUP_REQUEST, 0, 0 }, /* gNBDUConfigurationUpdate */ - { CU_handle_F1_SETUP_REQUEST, 0, 0 }, /* gNBCUConfigurationUpdate */ - { CU_handle_F1_SETUP_REQUEST, 0, 0 }, /* UEContextSetup */ + { 0, 0, 0 }, /* gNBDUConfigurationUpdate */ + { 0, 0, 0 }, /* gNBCUConfigurationUpdate */ + { 0, 0, 0 }, /* UEContextSetup */ { 0, 0, 0 }, /* UEContextRelease */ - { CU_handle_F1_SETUP_REQUEST, 0, 0 }, /* UEContextModification */ + { 0, 0, 0 }, /* UEContextModification */ { 0, 0, 0 }, /* UEContextModificationRequired */ { 0, 0, 0 }, /* UEMobilityCommand */ { 0, 0, 0 }, /* UEContextReleaseRequest */ - { CU_handle_F1_SETUP_REQUEST, 0, 0 }, /* InitialULRRCMessageTransfer */ - { CU_handle_F1_SETUP_REQUEST, 0, 0 }, /* DLRRCMessageTransfer */ - { CU_handle_F1_SETUP_REQUEST, 0, 0 }, /* ULRRCMessageTransfer */ + { CU_handle_INITIAL_UL_RRC_MESSAGE_TRANSFER, 0, 0 }, /* InitialULRRCMessageTransfer */ + { 0, 0, 0 }, /* DLRRCMessageTransfer */ + { 0, 0, 0 }, /* ULRRCMessageTransfer */ { 0, 0, 0 }, /* privateMessage */ { 0, 0, 0 }, /* UEInactivityNotification */ { 0, 0, 0 }, /* GNBDUResourceCoordination */ @@ -77,7 +79,7 @@ static const char *f1ap_direction_String[] = { return(f1ap_direction_String[f1ap_dir]); } -int f1ap_handle_message(uint32_t assoc_id, int32_t stream, +int f1ap_handle_message(instance_t instance, uint32_t assoc_id, int32_t stream, const uint8_t * const data, const uint32_t data_length) { F1AP_F1AP_PDU_t pdu; @@ -115,7 +117,7 @@ int f1ap_handle_message(uint32_t assoc_id, int32_t stream, /* Calling the right handler */ ret = (*f1ap_messages_callback[pdu.choice.initiatingMessage->procedureCode][pdu.present - 1]) - (assoc_id, stream, &pdu); + (instance, assoc_id, stream, &pdu); ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_F1AP_F1AP_PDU, &pdu); return ret; -} \ No newline at end of file +} diff --git a/openair2/F1AP/f1ap_handlers.h b/openair2/F1AP/f1ap_handlers.h index c3a7b7b225a6de6b9f2406688ec88bc6d137d58b..631249a324287607d7c2c3ea539f6aea85913a9d 100644 --- a/openair2/F1AP/f1ap_handlers.h +++ b/openair2/F1AP/f1ap_handlers.h @@ -33,7 +33,7 @@ #ifndef F1AP_HANDLERS_H_ #define F1AP_HANDLERS_H_ -int f1ap_handle_message(uint32_t assoc_id, int32_t stream, +int f1ap_handle_message(instance_t instance, uint32_t assoc_id, int32_t stream, const uint8_t * const data, const uint32_t data_length); #endif /* F1AP_HANDLERS_H_ */ diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c index b8cf85a0a303e68bdba56f69139bc4a55a193f73..f55f22b8d43e9371dec292533e2055a1c3e1b319 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c @@ -367,7 +367,7 @@ rx_sdu(const module_id_t enb_mod_idP, ra = &mac->common_channels[CC_idP].ra[ii]; if ((ra->rnti == current_rnti) && (ra->state != IDLE)) { //int RC.cudu.du_flag = 1; - int du_flag = 1; + //int du_flag = 1; mac_rrc_data_ind( enb_mod_idP, CC_idP, @@ -377,7 +377,7 @@ rx_sdu(const module_id_t enb_mod_idP, (uint8_t *) payload_ptr, rx_lengths[i], 0, - du_flag + RC.rrc[enb_mod_idP]->node_type ); // prepare transmission of Msg4(RRCConnectionReconfiguration) ra->state = MSGCRNTI; @@ -619,7 +619,7 @@ rx_sdu(const module_id_t enb_mod_idP, } //int RC.cudu.du_flag = 1; - int du_flag = 1; + //int du_flag = 1; mac_rrc_data_ind( enb_mod_idP, CC_idP, @@ -629,7 +629,7 @@ rx_sdu(const module_id_t enb_mod_idP, (uint8_t *) payload_ptr, rx_lengths[i], 0, - du_flag + RC.rrc[enb_mod_idP]->node_type ); diff --git a/openair2/RRC/LTE/L2_interface.c b/openair2/RRC/LTE/L2_interface.c index e848ac47a9b4be383f9b6422103413dc7aee1d82..02335aa99a64f8ef74a2b93a27d7bb18fb213b41 100644 --- a/openair2/RRC/LTE/L2_interface.c +++ b/openair2/RRC/LTE/L2_interface.c @@ -226,31 +226,31 @@ mac_rrc_data_req( } //-------------------------------------------------------------------------- -int8_t -mac_du_data_ind( - const module_id_t module_idP, - const int CC_idP, - const int UE_id, - const rnti_t rntiP, - const uint8_t *sduP, - const sdu_size_t sdu_lenP -) -//-------------------------------------------------------------------------- -{ - printf( - "[F1 %d][RAPROC] CC_id %d current_rnti %x Received Msg3 from already registered UE %d: length %d, offset %ld\n", - module_idP, CC_idP, rntiP, - UE_id, sdu_lenP, sduP); - - DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER( - module_idP, - CC_idP, - UE_id, - rntiP, - sduP, - sdu_lenP - ); -} +// int8_t +// mac_du_data_ind( +// const module_id_t module_idP, +// const int CC_idP, +// const int UE_id, +// const rnti_t rntiP, +// const uint8_t *sduP, +// const sdu_size_t sdu_lenP +// ) +// //-------------------------------------------------------------------------- +// { +// printf( +// "[F1 %d][RAPROC] CC_id %d current_rnti %x Received Msg3 from already registered UE %d: length %d, offset %ld\n", +// module_idP, CC_idP, rntiP, +// UE_id, sdu_lenP, sduP); + +// DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER( +// module_idP, +// CC_idP, +// UE_id, +// rntiP, +// sduP, +// sdu_lenP +// ); +// } //------------------------------------------------------------------------------ int8_t @@ -265,21 +265,25 @@ mac_rrc_data_ind( const uint8_t* sduP, const sdu_size_t sdu_lenP, const uint8_t mbsfn_sync_areaP, - const int du_flag + const int node_type ) //-------------------------------------------------------------------------- { - - // navid update / Bing-Kai modify - if (du_flag) { - mac_du_data_ind( - module_idP, - CC_id, - UE_id, - rntiP, - sduP, - sdu_lenP); - } + LOG_E(RRC, "node_type == %d \n" , node_type); + if (node_type == ngran_eNB_DU) { + LOG_W(RRC,"[DU %d][RAPROC] Received SDU for CCCH on SRB %d length %d for UE id %d RNTI %x \n", + module_idP, srb_idP, sdu_lenP, UE_id, rntiP); + + DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER( + module_idP, + CC_id, + UE_id, + rntiP, + sduP, + sdu_lenP + ); + return(0); + } SRB_INFO *Srb_info; protocol_ctxt_t ctxt; diff --git a/openair2/RRC/LTE/rrc_proto.h b/openair2/RRC/LTE/rrc_proto.h index 0c87d18094bf2b85ef4e157ca94e75ae1e06b985..68c8655714e14f0579744d658feca18452ebd88f 100644 --- a/openair2/RRC/LTE/rrc_proto.h +++ b/openair2/RRC/LTE/rrc_proto.h @@ -428,7 +428,7 @@ mac_rrc_data_ind( const uint8_t* sduP, const sdu_size_t sdu_lenP, const uint8_t mbsfn_sync_areaP, - const int du_flag + const int node_type ); int8_t