13#ifndef LIBE3_E3_AGENT_HPP
14#define LIBE3_E3_AGENT_HPP
199 uint32_t ran_function_id,
200 const std::vector<uint8_t>& data
215 uint32_t ran_function_id,
216 const std::vector<uint8_t>& control_data,
252 std::optional<uint32_t>
dapp_id() const noexcept;
275 std::vector<uint32_t> telemetry_ids,
276 std::vector<uint32_t> control_ids,
277 std::optional<uint32_t> sub_time = std::nullopt,
278 std::optional<uint32_t> periodicity = std::nullopt,
279 uint32_t* out_request_id =
nullptr);
295 std::vector<uint8_t> action_data,
296 uint32_t sequence_id = 0,
297 uint32_t* out_message_id =
nullptr);
309 std::vector<uint8_t> report_data,
310 uint32_t sequence_id,
311 uint32_t* out_message_id =
nullptr);
336 uint32_t ran_function_id
356 uint32_t
dapp_id, uint32_t ran_function_id
365 uint32_t
dapp_id, uint32_t ran_function_id
374 uint32_t
dapp_id, uint32_t ran_function_id
402 std::unique_ptr<
Impl> impl_;
std::vector< uint32_t > get_registered_dapps() const
Get list of registered dApp IDs.
E3Agent(E3Agent &&) noexcept
void stop()
Stop the agent.
ErrorCode subscribe(uint32_t ran_function_id, std::vector< uint32_t > telemetry_ids, std::vector< uint32_t > control_ids, std::optional< uint32_t > sub_time=std::nullopt, std::optional< uint32_t > periodicity=std::nullopt, uint32_t *out_request_id=nullptr)
Subscribe to a RAN function. Must be called after a positive setup.
std::vector< uint32_t > get_subscription_telemetry_ids(uint32_t dapp_id, uint32_t ran_function_id) const
Get the telemetry IDs a dApp requested for a RAN function.
void set_xapp_control_handler(XAppControlHandler handler)
void set_setup_response_handler(SetupResponseHandler handler)
ErrorCode wait_for_setup(std::chrono::milliseconds timeout)
Block until the dApp setup handshake completes.
bool is_running() const noexcept
Check if agent is running.
std::vector< uint32_t > subscribed_ran_functions() const
void set_dapp_status_changed_handler(DAppStatusChangedHandler handler)
Set callback for dApp status changes. Called when a dApp connects, disconnects, subscribes,...
std::optional< uint32_t > dapp_id() const noexcept
dApp identifier assigned by the RAN in SetupResponse.
std::vector< uint32_t > get_available_ran_functions() const
Get available RAN function IDs.
std::vector< uint32_t > get_dapp_subscriptions(uint32_t dapp_id) const
Get subscriptions for a dApp.
E3Agent(E3Config config=E3Config{})
Construct an E3Agent with configuration.
std::vector< uint32_t > active_subscription_ids() const
std::vector< uint32_t > get_ran_function_subscribers(uint32_t ran_function_id) const
Get subscribers for a RAN function.
uint32_t get_subscription_periodicity(uint32_t dapp_id, uint32_t ran_function_id) const
Get the reporting periodicity a dApp requested for a RAN function.
ErrorCode register_sm(std::unique_ptr< ServiceModel > sm)
Register a Service Model.
ErrorCode unsubscribe(uint32_t ran_function_id)
size_t dapp_count() const
Get number of registered dApps.
void set_subscription_response_handler(SubscriptionResponseHandler handler)
E3Agent & operator=(const E3Agent &)=delete
~E3Agent()
Destructor - ensures clean shutdown.
const E3Config & config() const noexcept
Get current configuration.
std::vector< uint32_t > get_subscription_control_ids(uint32_t dapp_id, uint32_t ran_function_id) const
Get the control IDs a dApp requested for a RAN function.
ErrorCode send_report(uint32_t ran_function_id, std::vector< uint8_t > report_data, uint32_t sequence_id, uint32_t *out_message_id=nullptr)
Send a dApp report to the RAN.
E3Agent(const E3Agent &)=delete
ErrorCode send_indication(uint32_t dapp_id, uint32_t ran_function_id, const std::vector< uint8_t > &data)
Send an indication message to a specific dApp.
std::vector< uint32_t > get_active_ran_functions() const
Get the RAN functions that currently have at least one subscriber.
ErrorCode send_xapp_control(uint32_t dapp_id, uint32_t ran_function_id, const std::vector< uint8_t > &control_data, uint32_t sequence_id)
Send an xApp control action to a specific dApp coming from the E2SM-DAPP.
ErrorCode send_control(uint32_t ran_function_id, uint32_t control_id, std::vector< uint8_t > action_data, uint32_t sequence_id=0, uint32_t *out_message_id=nullptr)
Send a dApp control action to the RAN.
void set_indication_handler(IndicationHandler handler)
AgentState state() const noexcept
Get current agent state.
void set_dapp_report_handler(DAppReportHandler handler)
Set callback for incoming dApp reports (dApp → RAN). Call before start(). When a dApp sends a DApp re...
ErrorCode init()
Initialize the agent.
void set_message_ack_handler(MessageAckHandler handler)
size_t subscription_count() const
Get total number of active subscriptions.
ErrorCode start()
Start the agent.
ErrorCode send_message_ack(uint32_t request_id, ResponseCode response_code)
Send a message acknowledgment (e.g. ack a control/request from dApp).
E3Interface - Internal protocol coordination.
Abstract Service Model interface.
std::function< void(const SubscriptionResponse &)> SubscriptionResponseHandler
ErrorCode
Error codes returned by libe3 operations Use shared error-code list (see libe3/error_codes....
std::function< void(const XAppControlAction &)> XAppControlHandler
AgentState
Agent state machine states.
std::function< void()> DAppStatusChangedHandler
ResponseCode
E3AP response codes.
std::function< void(const DAppReport &)> DAppReportHandler
std::function< void(const SetupResponse &)> SetupResponseHandler
std::function< void(const MessageAck &)> MessageAckHandler
std::function< void(const IndicationMessage &)> IndicationHandler
Service Model Interface - Extension point for RAN vendors.
E3AP dApp Report structure.
E3Agent implementation details.
Configuration for E3Agent.
E3AP Indication Message structure.
E3AP Message Acknowledgment structure.
E3AP Setup Response structure.
E3AP Subscription Response structure.
E3AP xApp Control Action structure.
E3AP Protocol Types - Vendor-neutral type definitions.