enable connection with flexric

master
Piotr Gawlowicz 2 years ago committed by Justin Tallon
parent 2de3c199cb
commit 315727e612

@ -58,10 +58,10 @@ private:
srslog::basic_logger& logger; srslog::basic_logger& logger;
e2sm_kpm e2sm_; e2sm_kpm e2sm_;
bool setup_response_received = false; bool setup_response_received = false;
bool pending_subscription_request = false; bool pending_subscription_request = false;
int setup_procedure_transaction_id = 0; int setup_procedure_transaction_id = 0;
uint64_t plmn_id = 3617847; uint64_t plmn_id = 0x05f510;
uint64_t gnb_id = 381210353; uint64_t gnb_id = 1;
global_ric_id_t global_ric_id = {}; global_ric_id_t global_ric_id = {};
std::map<uint32_t, RANfunction_description> ran_functions; std::map<uint32_t, RANfunction_description> ran_functions;
srsenb::e2_interface_metrics* gnb_metrics = nullptr; srsenb::e2_interface_metrics* gnb_metrics = nullptr;

@ -21,7 +21,7 @@ e2_ap_pdu_c e2ap::generate_setup_request()
auto& gnb_ = setup->global_e2node_id.value.set_gnb(); auto& gnb_ = setup->global_e2node_id.value.set_gnb();
gnb_.global_g_nb_id.plmn_id.from_number(plmn_id); gnb_.global_g_nb_id.plmn_id.from_number(plmn_id);
gnb_.global_g_nb_id.gnb_id.gnb_id().from_number(gnb_id); gnb_.global_g_nb_id.gnb_id.gnb_id().from_number(gnb_id, 28); // TODO: to keep flexric happy, provide them feedback
setup->ra_nfunctions_added.crit = asn1::crit_opts::reject; setup->ra_nfunctions_added.crit = asn1::crit_opts::reject;
auto& list = setup->ra_nfunctions_added.value; auto& list = setup->ra_nfunctions_added.value;
@ -29,15 +29,15 @@ e2_ap_pdu_c e2ap::generate_setup_request()
setup->ra_nfunctions_added.id = ASN1_E2AP_ID_RA_NFUNCTIONS_ADDED; setup->ra_nfunctions_added.id = ASN1_E2AP_ID_RA_NFUNCTIONS_ADDED;
asn1::protocol_ie_single_container_s<ra_nfunction_item_ies_o> item; asn1::protocol_ie_single_container_s<ra_nfunction_item_ies_o> item;
item.load_info_obj(ASN1_E2AP_ID_RA_NFUNCTION_ITEM); item.load_info_obj(ASN1_E2AP_ID_RA_NFUNCTION_ITEM);
item.value().ra_nfunction_item().ran_function_id = 0; item.value().ra_nfunction_item().ran_function_id = 147;
item.value().ra_nfunction_item().ran_function_revision = 1; item.value().ra_nfunction_item().ran_function_revision = 0;
// pack E2SM-KPM-PDU into ran function definition // pack E2SM-KPM-PDU into ran function definition
// add function to map // add function to map
RANfunction_description add_func; RANfunction_description add_func;
add_func.function_desc = "KPM monitor"; add_func.function_desc = "KPM monitor";
add_func.function_shortname = "ORAN-E2SM-KPM"; add_func.function_shortname = "ORAN-E2SM-KPM";
add_func.function_e2_sm_oid = "OID123"; add_func.function_e2_sm_oid = "1.3.6.1.4.1.53148.1.2.2.2";
add_func.function_instance = 0; add_func.function_instance = 0;
ran_functions[item.value().ra_nfunction_item().ran_function_id] = add_func; ran_functions[item.value().ra_nfunction_item().ran_function_id] = add_func;
@ -45,9 +45,13 @@ e2_ap_pdu_c e2ap::generate_setup_request()
srsran::unique_byte_buffer_t buf = srsran::make_byte_buffer(); srsran::unique_byte_buffer_t buf = srsran::make_byte_buffer();
e2sm_.generate_ran_function_description(item.value().ra_nfunction_item().ran_function_id, add_func, buf); e2sm_.generate_ran_function_description(item.value().ra_nfunction_item().ran_function_id, add_func, buf);
ran_func_def.resize(buf->N_bytes); ran_func_def.resize(buf->N_bytes);
buf->msg[1] = 0x30; // TODO: needed to keep wireshak happy, need better fix
std::copy(buf->msg, buf->msg + buf->N_bytes, ran_func_def.data()); std::copy(buf->msg, buf->msg + buf->N_bytes, ran_func_def.data());
item.value().ra_nfunction_item().ran_function_oid.resize(1); std::string oid_str = "ORAN-E2SM-KPM";
item.value().ra_nfunction_item().ran_function_oid.resize(oid_str.size());
item.value().ra_nfunction_item().ran_function_oid.from_string(oid_str);
setup->ra_nfunctions_added.value.push_back(item); setup->ra_nfunctions_added.value.push_back(item);
setup->e2node_component_cfg_addition.crit = asn1::crit_opts::reject; setup->e2node_component_cfg_addition.crit = asn1::crit_opts::reject;
@ -67,20 +71,33 @@ e2_ap_pdu_c e2ap::generate_subscription_response()
e2_ap_pdu_c pdu; e2_ap_pdu_c pdu;
successful_outcome_s& success = pdu.set_successful_outcome(); successful_outcome_s& success = pdu.set_successful_outcome();
success.load_info_obj(ASN1_E2AP_ID_RICSUBSCRIPTION); success.load_info_obj(ASN1_E2AP_ID_RICSUBSCRIPTION);
success.crit = asn1::crit_opts::reject;
ricsubscription_resp_s& sub_resp = success.value.ricsubscription_resp(); ricsubscription_resp_s& sub_resp = success.value.ricsubscription_resp();
sub_resp->ri_crequest_id.crit = asn1::crit_opts::reject; sub_resp->ri_crequest_id.crit = asn1::crit_opts::reject;
sub_resp->ri_crequest_id.id = ASN1_E2AP_ID_RI_CREQUEST_ID; sub_resp->ri_crequest_id.id = ASN1_E2AP_ID_RI_CREQUEST_ID;
sub_resp->ri_crequest_id.value.ric_requestor_id = 123; sub_resp->ri_crequest_id.value.ric_requestor_id = 1021;
sub_resp->ri_crequest_id.value.ric_instance_id = 21; sub_resp->ri_crequest_id.value.ric_instance_id = 0;
sub_resp->ra_nfunction_id.crit = asn1::crit_opts::reject; sub_resp->ra_nfunction_id.crit = asn1::crit_opts::reject;
sub_resp->ra_nfunction_id.id = ASN1_E2AP_ID_RA_NFUNCTION_ID; sub_resp->ra_nfunction_id.id = ASN1_E2AP_ID_RA_NFUNCTION_ID;
sub_resp->ra_nfunction_id->value = 147;
sub_resp->ri_cactions_admitted.crit = asn1::crit_opts::reject; sub_resp->ri_cactions_admitted.crit = asn1::crit_opts::reject;
auto& action_admit_list = sub_resp->ri_cactions_admitted.value; auto& action_admit_list = sub_resp->ri_cactions_admitted.value;
action_admit_list.resize(1); action_admit_list.resize(1);
action_admit_list[0].load_info_obj(ASN1_E2AP_ID_RI_CACTION_ADMITTED_ITEM); action_admit_list[0].load_info_obj(ASN1_E2AP_ID_RI_CACTION_ADMITTED_ITEM);
action_admit_list[0].value().ri_caction_admitted_item().ric_action_id = 1; ri_caction_admitted_item_s& a_item = action_admit_list[0]->ri_caction_admitted_item();
a_item.ric_action_id = 0;
sub_resp->ri_cactions_not_admitted.crit = asn1::crit_opts::reject;
auto& action_not_admit_list = sub_resp->ri_cactions_not_admitted.value;
action_not_admit_list.resize(1);
action_not_admit_list[0].load_info_obj(ASN1_E2AP_ID_RI_CACTION_NOT_ADMITTED_ITEM);
ri_caction_not_admitted_item_s& not_a_item = action_not_admit_list[0]->ri_caction_not_admitted_item();
not_a_item.ric_action_id = 10;
not_a_item.cause.misc();
return pdu; return pdu;
} }

@ -8,12 +8,13 @@ bool e2sm_kpm::generate_ran_function_description(int f
{ {
using namespace asn1::e2sm_kpm; using namespace asn1::e2sm_kpm;
e2_sm_kpm_ra_nfunction_description_s e2sm_kpm_ra_nfunction_description; e2_sm_kpm_ra_nfunction_description_s e2sm_kpm_ra_nfunction_description;
e2sm_kpm_ra_nfunction_description.ran_function_name.ran_function_instance_present = true; e2sm_kpm_ra_nfunction_description.ran_function_name.ran_function_instance_present = false;
e2sm_kpm_ra_nfunction_description.ran_function_name.ran_function_instance = desc.function_instance; // e2sm_kpm_ra_nfunction_description.ran_function_name.ran_function_instance = desc.function_instance;
e2sm_kpm_ra_nfunction_description.ran_function_name.ran_function_short_name.from_string(desc.function_shortname); e2sm_kpm_ra_nfunction_description.ran_function_name.ran_function_short_name.from_string(desc.function_shortname);
e2sm_kpm_ra_nfunction_description.ran_function_name.ran_function_e2_sm_oid.from_string(desc.function_e2_sm_oid); e2sm_kpm_ra_nfunction_description.ran_function_name.ran_function_e2_sm_oid.from_string(desc.function_e2_sm_oid);
e2sm_kpm_ra_nfunction_description.ran_function_name.ran_function_description.from_string(desc.function_desc); e2sm_kpm_ra_nfunction_description.ran_function_name.ran_function_description.from_string(desc.function_desc);
/*
e2sm_kpm_ra_nfunction_description.e2_sm_kpm_ra_nfunction_item.ric_event_trigger_style_list.resize(1); e2sm_kpm_ra_nfunction_description.e2_sm_kpm_ra_nfunction_item.ric_event_trigger_style_list.resize(1);
auto& ric_event_trigger_style_list_item = auto& ric_event_trigger_style_list_item =
e2sm_kpm_ra_nfunction_description.e2_sm_kpm_ra_nfunction_item.ric_event_trigger_style_list[0]; e2sm_kpm_ra_nfunction_description.e2_sm_kpm_ra_nfunction_item.ric_event_trigger_style_list[0];
@ -56,7 +57,7 @@ bool e2sm_kpm::generate_ran_function_description(int f
}; };
ric_report_style_list_item.ric_report_style_name.from_string("Periodic report"); ric_report_style_list_item.ric_report_style_name.from_string("Periodic report");
} }
*/
logger.info("Generating RAN function description"); logger.info("Generating RAN function description");
asn1::bit_ref bref(buf->msg, buf->get_tailroom()); asn1::bit_ref bref(buf->msg, buf->get_tailroom());
if (e2sm_kpm_ra_nfunction_description.pack(bref) != asn1::SRSASN_SUCCESS) { if (e2sm_kpm_ra_nfunction_description.pack(bref) != asn1::SRSASN_SUCCESS) {

@ -54,7 +54,7 @@ bool ric_client::init()
rx_sockets.add_socket_handler(ric_socket.fd(), rx_sockets.add_socket_handler(ric_socket.fd(),
srsran::make_sctp_sdu_handler(logger, ric_rece_task_queue, rx_callback)); srsran::make_sctp_sdu_handler(logger, ric_rece_task_queue, rx_callback));
printf("SCTP socket connected with RIC. fd=%d", ric_socket.fd()); printf("SCTP socket connected with RIC. fd=%d \n", ric_socket.fd());
running = true; running = true;
start(0); start(0);
return SRSRAN_SUCCESS; return SRSRAN_SUCCESS;
@ -135,7 +135,7 @@ bool ric_client::send_e2_msg(e2_msg_type_t msg_type)
} }
asn1::bit_ref bref(buf->msg, buf->get_tailroom()); asn1::bit_ref bref(buf->msg, buf->get_tailroom());
if (send_pdu.pack(bref) != asn1::SRSASN_SUCCESS) { if (send_pdu.pack(bref) != asn1::SRSASN_SUCCESS) {
logger.error("Failed to pack TX E2 PDU"); logger.error("Failed to pack TX E2 PDU: %s", message_name);
return false; return false;
} }
buf->N_bytes = bref.distance_bytes(); buf->N_bytes = bref.distance_bytes();

Loading…
Cancel
Save