You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

116 lines
4.1 KiB
C++

/**
* Copyright 2013-2022 Software Radio Systems Limited
*
* This file is part of srsRAN.
*
* srsRAN is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
*
* srsRAN is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* A copy of the GNU Affero General Public License can be found in
* the LICENSE file in the top-level directory of this distribution
* and at http://www.gnu.org/licenses/.
*
*/
#include "srsran/asn1/e2ap.h"
#include "srsran/common/byte_buffer.h"
#include "srsran/common/task_scheduler.h"
#include "srsran/interfaces/enb_metrics_interface.h"
#include "srsran/srsran.h"
#ifndef SRSRAN_E2SM_H
#define SRSRAN_E2SM_H
using namespace asn1::e2ap;
using namespace srsenb;
struct RANfunction_description;
typedef struct {
enum e2sm_event_trigger_type_t { E2SM_REPORT, E2SM_INSERT, E2SM_POLICY, UNKNOWN_TRIGGER };
e2sm_event_trigger_type_t type;
uint64_t report_period;
} RIC_event_trigger_definition_t;
typedef struct {
uint16_t ric_action_id;
ri_caction_type_e ric_action_type;
uint32_t sm_local_ric_action_id;
} E2AP_RIC_action_t;
typedef struct {
uint32_t ric_requestor_id;
uint32_t ric_instance_id;
uint32_t ra_nfunction_id;
uint32_t ri_caction_id;
bool ri_indication_sn_present;
uint32_t ri_indication_sn;
ri_cind_type_e indication_type;
srsran::unique_byte_buffer_t ri_cind_hdr;
srsran::unique_byte_buffer_t ri_cind_msg;
} ric_indication_t;
class e2sm
{
public:
e2sm();
e2sm(std::string short_name,
std::string oid,
std::string func_description,
uint32_t revision,
srsran::task_scheduler* _task_sched_ptr) :
_short_name(short_name),
_oid(oid),
_func_description(func_description),
_revision(revision),
task_sched_ptr(_task_sched_ptr){};
virtual ~e2sm() = default;
std::string get_short_name() { return _short_name; };
std::string get_oid() { return _oid; };
std::string get_func_description() { return _func_description; };
uint32_t get_revision() { return _revision; };
virtual bool generate_ran_function_description(RANfunction_description& desc, ra_nfunction_item_s& ran_func) = 0;
virtual bool process_ric_event_trigger_definition(ricsubscription_request_s subscription_request,
RIC_event_trigger_definition_t& event_def) = 0;
virtual bool process_ric_action_definition(ri_caction_to_be_setup_item_s ric_action,
E2AP_RIC_action_t& action_entry) = 0;
virtual bool remove_ric_action_definition(E2AP_RIC_action_t& action_entry) = 0;
virtual bool generate_ric_indication_content(E2AP_RIC_action_t& action_entry, ric_indication_t& ric_indication) = 0;
virtual void receive_e2_metrics_callback(const enb_metrics_t& m) = 0;
protected:
uint32_t _get_local_action_id() { return _registered_action_id_gen; };
uint32_t _generate_new_local_action_id() { return _registered_action_id_gen++; };
srsran::task_scheduler* task_sched_ptr = nullptr;
private:
const std::string _short_name;
const std::string _oid;
const std::string _func_description;
const uint32_t _revision = 0;
uint32_t _registered_action_id_gen = 1000;
};
struct RANfunction_description {
bool accepted = false;
int function_instance = 0;
e2sm* sm_ptr = nullptr;
std::string function_shortname;
std::string function_e2_sm_oid;
std::string function_desc;
};
#endif // SRSRAN_E2SM_H