llmx-rtaco 0.0.1
RTNL-only netlink control-plane library for Linux (C++23).
Loading...
Searching...
No Matches
llmx::rtaco::RequestTask< Derived, Result > Class Template Reference

Base template for single-request netlink tasks. More...

#include <nl_request_task.hxx>

Inheritance diagram for llmx::rtaco::RequestTask< Derived, Result >:
llmx::rtaco::AddressTask< Derived, Result > llmx::rtaco::LinkTask< Derived, Result > llmx::rtaco::NeighborTask< Derived, Result > llmx::rtaco::RouteTask< Derived, Result >

Public Member Functions

 RequestTask (SocketGuard &socket_guard, uint16_t ifindex, uint32_t sequence) noexcept
 Construct a RequestTask.
virtual ~RequestTask ()=default
 Virtual destructor.
auto async_run () -> boost::asio::awaitable< std::expected< Result, std::error_code > >
 Run the request asynchronously and return the result.

Protected Member Functions

auto socket () noexcept -> Socket &
auto sequence () const noexcept -> uint32_t
auto ifindex () const noexcept -> uint16_t

Private Member Functions

auto impl () noexcept -> Derived &
auto impl () const noexcept -> const Derived &
auto send_request () -> boost::asio::awaitable< std::expected< void, std::error_code > >
auto read_loop () -> boost::asio::awaitable< std::expected< Result, std::error_code > >

Private Attributes

std::array< uint8_t, MAX_RESPONSE_BYTESreceive_buffer_
SocketGuardsocket_guard_
uint16_t ifindex_
uint32_t sequence_

Static Private Attributes

static constexpr size_t MAX_RESPONSE_BYTES = 64U * 1024U

Detailed Description

template<typename Derived, typename Result>
class llmx::rtaco::RequestTask< Derived, Result >

Base template for single-request netlink tasks.

Implements the common flow: ask the Derived to prepare a request, send the request via the guarded socket, and read replies until the Derived signals completion via process_message.

Derived classes must implement prepare_request(), request_payload() and process_message(const nlmsghdr&).

Constructor & Destructor Documentation

◆ RequestTask()

template<typename Derived, typename Result>
llmx::rtaco::RequestTask< Derived, Result >::RequestTask ( SocketGuard & socket_guard,
uint16_t ifindex,
uint32_t sequence )
inlinenoexcept

Construct a RequestTask.

Parameters
socket_guardSocketGuard used for I/O.
ifindexInterface index associated with the request.
sequenceNetlink sequence number for messages.

◆ ~RequestTask()

template<typename Derived, typename Result>
virtual llmx::rtaco::RequestTask< Derived, Result >::~RequestTask ( )
virtualdefault

Virtual destructor.

Member Function Documentation

◆ async_run()

template<typename Derived, typename Result>
auto llmx::rtaco::RequestTask< Derived, Result >::async_run ( ) -> boost::asio::awaitable< std::expected< Result, std::error_code > >
inline

Run the request asynchronously and return the result.

This co-routine will send the prepared request, read replies and return the resulting expected<Result, std::error_code> when complete.

◆ ifindex()

template<typename Derived, typename Result>
auto llmx::rtaco::RequestTask< Derived, Result >::ifindex ( ) const -> uint16_t
inlineprotectednoexcept

◆ impl() [1/2]

template<typename Derived, typename Result>
auto llmx::rtaco::RequestTask< Derived, Result >::impl ( ) const -> const Derived &
inlineprivatenoexcept

◆ impl() [2/2]

template<typename Derived, typename Result>
auto llmx::rtaco::RequestTask< Derived, Result >::impl ( ) -> Derived &
inlineprivatenoexcept

◆ read_loop()

template<typename Derived, typename Result>
auto llmx::rtaco::RequestTask< Derived, Result >::read_loop ( ) -> boost::asio::awaitable< std::expected< Result, std::error_code > >
inlineprivate

◆ send_request()

template<typename Derived, typename Result>
auto llmx::rtaco::RequestTask< Derived, Result >::send_request ( ) -> boost::asio::awaitable< std::expected< void, std::error_code > >
inlineprivate

◆ sequence()

template<typename Derived, typename Result>
auto llmx::rtaco::RequestTask< Derived, Result >::sequence ( ) const -> uint32_t
inlineprotectednoexcept

◆ socket()

template<typename Derived, typename Result>
auto llmx::rtaco::RequestTask< Derived, Result >::socket ( ) -> Socket &
inlineprotectednoexcept

Member Data Documentation

◆ ifindex_

template<typename Derived, typename Result>
uint16_t llmx::rtaco::RequestTask< Derived, Result >::ifindex_
private

◆ MAX_RESPONSE_BYTES

template<typename Derived, typename Result>
size_t llmx::rtaco::RequestTask< Derived, Result >::MAX_RESPONSE_BYTES = 64U * 1024U
staticconstexprprivate

◆ receive_buffer_

template<typename Derived, typename Result>
std::array<uint8_t, MAX_RESPONSE_BYTES> llmx::rtaco::RequestTask< Derived, Result >::receive_buffer_
private

◆ sequence_

template<typename Derived, typename Result>
uint32_t llmx::rtaco::RequestTask< Derived, Result >::sequence_
private

◆ socket_guard_

template<typename Derived, typename Result>
SocketGuard& llmx::rtaco::RequestTask< Derived, Result >::socket_guard_
private

The documentation for this class was generated from the following file: