diff --git a/openair2/E2AP/RAN_FUNCTION/CMakeLists.txt b/openair2/E2AP/RAN_FUNCTION/CMakeLists.txt index acada2c6dd..1d47f029d9 100644 --- a/openair2/E2AP/RAN_FUNCTION/CMakeLists.txt +++ b/openair2/E2AP/RAN_FUNCTION/CMakeLists.txt @@ -1,16 +1,15 @@ add_library(e2_ran_func_cuup STATIC init_ran_func.c read_setup_ran.c - ../flexric/test/rnd/fill_rnd_data_e2_setup_req.c # this is not rnd data; it is used to fill E2 Node Component Configuration Addition List in E2 Setup Request message - CUSTOMIZED/ran_func_gtp.c # current implementation doesn't take split architecture into account, neither CU/DU nor CU-UP/CU-CP - CUSTOMIZED/ran_func_pdcp.c # current implementation doesn't take split architecture into account, neither CU/DU nor CU-UP/CU-CP + O-RAN/ran_e2sm_ue_id.c + O-RAN/ran_func_kpm.c + O-RAN/ran_func_kpm_subs.c + O-RAN/ran_func_rc.c + O-RAN/ran_func_rc_subs.c + CUSTOMIZED/ran_func_gtp.c # GTP SM not yet implemented in CU-UP + CUSTOMIZED/ran_func_pdcp.c CUSTOMIZED/ran_func_tc.c # currently, not implemented; therefore, filling rnd data ../flexric/test/rnd/fill_rnd_data_tc.c - O-RAN/ran_e2sm_ue_id.c - O-RAN/ran_func_kpm.c # this file should only contain PDCP-U/GTP; to be done in the future - O-RAN/ran_func_kpm_subs.c - O-RAN/ran_func_rc.c # this file should only contain PDCP-U/GTP; to be done in the future - O-RAN/ran_func_rc_subs.c ) target_link_libraries(e2_ran_func_cuup PUBLIC asn1_nr_rrc nr_rrc asn1_nr_rrc_hdrs e2_time_obj kpm_ric_info_common_obj 3gpp_derived_ie_obj sm_common_ie_obj) @@ -20,24 +19,31 @@ target_compile_definitions(e2_ran_func_cuup PUBLIC ${E2AP_VERSION} ${KPM_VERSIO add_library(e2_ran_func_du_cucp_cuup STATIC init_ran_func.c read_setup_ran.c - ../flexric/test/rnd/fill_rnd_data_e2_setup_req.c # this is not rnd data; it is used to fill E2 Node Component Configuration Addition List in E2 Setup Request message - CUSTOMIZED/ran_func_gtp.c # current implementation doesn't take split architecture into account, neither CU/DU nor CU-UP/CU-CP - CUSTOMIZED/ran_func_pdcp.c # current implementation doesn't take split architecture into account, neither CU/DU nor CU-UP/CU-CP O-RAN/ran_e2sm_ue_id.c - O-RAN/ran_func_kpm.c # this file should only contain RRC/PDCP-C; to be done in the future - # when nr-softmodem is divided in separate executables + O-RAN/ran_func_kpm.c O-RAN/ran_func_kpm_subs.c - O-RAN/ran_func_rc.c # this file should only contain RRC/PDCP-C; to be done in the future - # when nr-softmodem is divided in separate executables + O-RAN/ran_func_rc.c O-RAN/ran_func_rc_subs.c ../flexric/src/sm/rc_sm/ie/rc_data_ie.c + CUSTOMIZED/ran_func_gtp.c + CUSTOMIZED/ran_func_pdcp.c CUSTOMIZED/ran_func_mac.c CUSTOMIZED/ran_func_rlc.c - CUSTOMIZED/ran_func_slice.c - CUSTOMIZED/ran_func_tc.c - ../flexric/test/rnd/fill_rnd_data_tc.c + CUSTOMIZED/ran_func_slice.c # currently, not implemented; therefore, filling rnd data ../flexric/test/rnd/fill_rnd_data_slice.c + CUSTOMIZED/ran_func_tc.c # currently, not implemented; therefore, filling rnd data + ../flexric/test/rnd/fill_rnd_data_tc.c ) -target_link_libraries(e2_ran_func_du_cucp_cuup PUBLIC asn1_nr_rrc nr_rrc asn1_nr_rrc_hdrs e2_time_obj kpm_ric_info_common_obj 3gpp_derived_ie_obj e2sm_rc_ir_obj sm_common_ie_obj e2_agent) -target_compile_definitions(e2_ran_func_du_cucp_cuup PUBLIC ${E2AP_VERSION} ${KPM_VERSION} NGRAN_GNB_DU NGRAN_GNB_CUCP NGRAN_GNB_CUUP) +target_link_libraries(e2_ran_func_du_cucp_cuup PUBLIC asn1_nr_rrc nr_rrc asn1_nr_rrc_hdrs e2_time_obj kpm_ric_info_common_obj 3gpp_derived_ie_obj e2sm_rc_ir_obj sm_common_ie_obj) +target_compile_definitions(e2_ran_func_du_cucp_cuup PUBLIC ${E2AP_VERSION} ${KPM_VERSION} NGRAN_GNB_DU NGRAN_GNB_CUCP NGRAN_GNB_CUUP) + +# Current implementation: +# - we only have one executable nr-softmodem for 4 node types: DU, CU, gNB-mono, CU-CP + +# In the future, when nr-softmodem is separated, linking should be done as following: +# - DU: e2_ran_func_du +# - CU-CP : e2_ran_func_cucp +# - CU-UP: e2_ran_func_cuup (this is available at the moment, executable nr-cuup) +# - CU: e2_ran_func_cucp + e2_ran_func_cuup +# - gNB-mono: e2_ran_func_du + e2_ran_func_cucp + e2_ran_func_cuup diff --git a/openair2/E2AP/RAN_FUNCTION/read_setup_ran.c b/openair2/E2AP/RAN_FUNCTION/read_setup_ran.c index 774ea290d6..922816f5fc 100644 --- a/openair2/E2AP/RAN_FUNCTION/read_setup_ran.c +++ b/openair2/E2AP/RAN_FUNCTION/read_setup_ran.c @@ -21,10 +21,109 @@ #include "read_setup_ran.h" #include "../../E2AP/flexric/src/lib/e2ap/e2ap_node_component_config_add_wrapper.h" -#include "../../E2AP/flexric/test/rnd/fill_rnd_data_e2_setup_req.h" #include #include +#if defined(E2AP_V2) || defined(E2AP_V3) +// NGAP +static e2ap_node_component_config_add_t fill_ngap_e2ap_node_component_config_add(void) +{ + e2ap_node_component_config_add_t dst = {0}; + + // Mandatory + // 9.2.26 + dst.e2_node_comp_interface_type = NG_E2AP_NODE_COMP_INTERFACE_TYPE; + // Bug!! Optional in the standard, mandatory in ASN.1 + // 9.2.32 + dst.e2_node_comp_id.type = NG_E2AP_NODE_COMP_INTERFACE_TYPE; + + const char ng_msg[] = "Dummy message"; + dst.e2_node_comp_id.ng_amf_name = cp_str_to_ba(ng_msg); + + // Mandatory + // 9.2.27 + const char req[] = "NGAP Request Message sent"; + const char res[] = "NGAP Response Message reveived"; + + dst.e2_node_comp_conf.request = cp_str_to_ba(req); + dst.e2_node_comp_conf.response = cp_str_to_ba(res); + return dst; +} + +// F1AP +static e2ap_node_component_config_add_t fill_f1ap_e2ap_node_component_config_add(void) +{ + e2ap_node_component_config_add_t dst = {0}; + + // Mandatory + // 9.2.26 + dst.e2_node_comp_interface_type = F1_E2AP_NODE_COMP_INTERFACE_TYPE; + // Bug!! Optional in the standard, mandatory in ASN.1 + // 9.2.32 + dst.e2_node_comp_id.type = F1_E2AP_NODE_COMP_INTERFACE_TYPE; + + dst.e2_node_comp_id.f1_gnb_du_id = 1023; + + // Mandatory + // 9.2.27 + const char req[] = "F1AP Request Message sent"; + const char res[] = "F1AP Response Message reveived"; + + dst.e2_node_comp_conf.request = cp_str_to_ba(req); + dst.e2_node_comp_conf.response = cp_str_to_ba(res); + return dst; +} + +// E1AP +static e2ap_node_component_config_add_t fill_e1ap_e2ap_node_component_config_add(void) +{ + e2ap_node_component_config_add_t dst = {0}; + + // Mandatory + // 9.2.26 + dst.e2_node_comp_interface_type = E1_E2AP_NODE_COMP_INTERFACE_TYPE; + // Bug!! Optional in the standard, mandatory in ASN.1 + // 9.2.32 + dst.e2_node_comp_id.type = E1_E2AP_NODE_COMP_INTERFACE_TYPE; + + dst.e2_node_comp_id.e1_gnb_cu_up_id = 1025; + + // Mandatory + // 9.2.27 + const char req[] = "E1AP Request Message sent"; + const char res[] = "E1AP Response Message reveived"; + + dst.e2_node_comp_conf.request = cp_str_to_ba(req); + dst.e2_node_comp_conf.response = cp_str_to_ba(res); + return dst; +} + +// S1AP +static e2ap_node_component_config_add_t fill_s1ap_e2ap_node_component_config_add(void) +{ + e2ap_node_component_config_add_t dst = {0}; + + // Mandatory + // 9.2.26 + dst.e2_node_comp_interface_type = S1_E2AP_NODE_COMP_INTERFACE_TYPE; + // Bug!! Optional in the standard, mandatory in ASN.1 + // 9.2.32 + dst.e2_node_comp_id.type = S1_E2AP_NODE_COMP_INTERFACE_TYPE; + + const char str[] = "S1 NAME"; + dst.e2_node_comp_id.s1_mme_name = cp_str_to_ba(str); + + // Mandatory + // 9.2.27 + const char req[] = "S1AP Request Message sent"; + const char res[] = "S1AP Response Message reveived"; + + dst.e2_node_comp_conf.request = cp_str_to_ba(req); + dst.e2_node_comp_conf.response = cp_str_to_ba(res); + return dst; +} +#endif + void read_setup_ran(void* data, const ngran_node_t node_type) { assert(data != NULL);