llmx-rtaco 0.0.1
RTNL-only netlink control-plane library for Linux (C++23).
Loading...
Searching...
No Matches
llmx::rtaco::Control Class Reference

High-level control interface for kernel netlink operations. More...

#include <nl_control.hxx>

Public Member Functions

 Control (boost::asio::io_context &io) noexcept
 Construct a Control instance attached to an io_context.
 ~Control ()
 Destroy the Control object and release resources.
 Control (const Control &)=delete
Controloperator= (const Control &)=delete
 Control (Control &&)=delete
Controloperator= (Control &&)=delete
auto dump_routes () -> route_list_result_t
 Synchronously dump routes from the kernel.
auto dump_addresses () -> address_list_result_t
 Synchronously dump addresses from the kernel.
auto dump_links () -> link_list_result_t
 Synchronously dump links from the kernel.
auto dump_neighbors () -> neighbor_list_result
 Synchronously dump neighbor entries from the kernel.
auto async_dump_routes () -> boost::asio::awaitable< route_list_result_t >
 Asynchronously dump routes.
auto async_dump_addresses () -> boost::asio::awaitable< address_list_result_t >
 Asynchronously dump addresses.
auto async_dump_links () -> boost::asio::awaitable< link_list_result_t >
 Asynchronously dump links.
auto async_dump_neighbors () -> boost::asio::awaitable< neighbor_list_result >
 Asynchronously dump neighbors.
auto probe_neighbor (uint16_t ifindex, std::span< uint8_t, 16 > address) -> void_result_t
 Probe a neighbor entry (synchronous).
auto flush_neighbor (uint16_t ifindex, std::span< uint8_t, 16 > address) -> void_result_t
 Flush a neighbour entry (synchronous).
auto get_neighbor (uint16_t ifindex, std::span< uint8_t, 16 > address) -> neighbor_result_t
 Get a neighbor entry synchronously.
auto async_probe_neighbor (uint16_t ifindex, std::span< uint8_t, 16 > address) -> boost::asio::awaitable< void_result_t >
 Asynchronously probe a neighbor.
auto async_flush_neighbor (uint16_t ifindex, std::span< uint8_t, 16 > address) -> boost::asio::awaitable< void_result_t >
 Asynchronously flush a neighbor.
auto async_get_neighbor (uint16_t ifindex, std::span< uint8_t, 16 > address) -> boost::asio::awaitable< neighbor_result_t >
 Asynchronously get a neighbor.
void stop ()
 Stop ongoing operations and release control resources.

Private Types

using route_list_result_t = std::expected<RouteEventList, std::error_code>
using address_list_result_t = std::expected<AddressEventList, std::error_code>
using link_list_result_t = std::expected<LinkEventList, std::error_code>
using neighbor_result_t = std::expected<NeighborEvent, std::error_code>
using neighbor_list_result = std::expected<NeighborEventList, std::error_code>
using void_result_t = std::expected<void, std::error_code>

Private Member Functions

auto acquire_socket_token () -> boost::asio::awaitable< void >
auto async_dump_routes_impl () -> boost::asio::awaitable< route_list_result_t >
auto async_dump_addresses_impl () -> boost::asio::awaitable< address_list_result_t >
auto async_dump_links_impl () -> boost::asio::awaitable< link_list_result_t >
auto async_dump_neighbors_impl () -> boost::asio::awaitable< neighbor_list_result >
auto async_probe_neighbor_impl (uint16_t ifindex, std::span< uint8_t, 16 > address) -> boost::asio::awaitable< void_result_t >
auto async_flush_neighbor_impl (uint16_t ifindex, std::span< uint8_t, 16 > address) -> boost::asio::awaitable< void_result_t >
auto async_get_neighbor_impl (uint16_t ifindex, std::span< uint8_t, 16 > address) -> boost::asio::awaitable< neighbor_result_t >

Private Attributes

boost::asio::io_context & io_
boost::asio::strand< boost::asio::io_context::executor_type > strand_
boost::asio::steady_timer gate_
SocketGuard socket_guard_
std::atomic_uint32_t sequence_ {1U}

Detailed Description

High-level control interface for kernel netlink operations.

The Control class provides synchronous and asynchronous methods to query kernel networking state (routes, addresses, links, neighbors) and to perform neighbor-related operations such as probe, flush, and get. It owns a SocketGuard, manages sequencing for netlink requests, and exposes both blocking and awaitable APIs to callers.

Member Typedef Documentation

◆ address_list_result_t

using llmx::rtaco::Control::address_list_result_t = std::expected<AddressEventList, std::error_code>
private

◆ link_list_result_t

using llmx::rtaco::Control::link_list_result_t = std::expected<LinkEventList, std::error_code>
private

◆ neighbor_list_result

using llmx::rtaco::Control::neighbor_list_result = std::expected<NeighborEventList, std::error_code>
private

◆ neighbor_result_t

using llmx::rtaco::Control::neighbor_result_t = std::expected<NeighborEvent, std::error_code>
private

◆ route_list_result_t

using llmx::rtaco::Control::route_list_result_t = std::expected<RouteEventList, std::error_code>
private

◆ void_result_t

using llmx::rtaco::Control::void_result_t = std::expected<void, std::error_code>
private

Constructor & Destructor Documentation

◆ Control() [1/3]

llmx::rtaco::Control::Control ( boost::asio::io_context & io)
noexcept

Construct a Control instance attached to an io_context.

Parameters
ioThe Boost.Asio io_context used for async operations.

◆ ~Control()

llmx::rtaco::Control::~Control ( )
default

Destroy the Control object and release resources.

◆ Control() [2/3]

llmx::rtaco::Control::Control ( const Control & )
delete

◆ Control() [3/3]

llmx::rtaco::Control::Control ( Control && )
delete

Member Function Documentation

◆ acquire_socket_token()

auto llmx::rtaco::Control::acquire_socket_token ( ) -> boost::asio::awaitable< void >
private

◆ async_dump_addresses()

auto llmx::rtaco::Control::async_dump_addresses ( ) -> boost::asio::awaitable< address_list_result_t >

Asynchronously dump addresses.

◆ async_dump_addresses_impl()

auto llmx::rtaco::Control::async_dump_addresses_impl ( ) -> boost::asio::awaitable< address_list_result_t >
private

◆ async_dump_links()

auto llmx::rtaco::Control::async_dump_links ( ) -> boost::asio::awaitable< link_list_result_t >

Asynchronously dump links.

◆ async_dump_links_impl()

auto llmx::rtaco::Control::async_dump_links_impl ( ) -> boost::asio::awaitable< link_list_result_t >
private

◆ async_dump_neighbors()

auto llmx::rtaco::Control::async_dump_neighbors ( ) -> boost::asio::awaitable< neighbor_list_result >

Asynchronously dump neighbors.

◆ async_dump_neighbors_impl()

auto llmx::rtaco::Control::async_dump_neighbors_impl ( ) -> boost::asio::awaitable< neighbor_list_result >
private

◆ async_dump_routes()

auto llmx::rtaco::Control::async_dump_routes ( ) -> boost::asio::awaitable< route_list_result_t >

Asynchronously dump routes.

Returns
Awaitable that yields the route list result.

◆ async_dump_routes_impl()

auto llmx::rtaco::Control::async_dump_routes_impl ( ) -> boost::asio::awaitable< route_list_result_t >
private

◆ async_flush_neighbor()

auto llmx::rtaco::Control::async_flush_neighbor ( uint16_t ifindex,
std::span< uint8_t, 16 > address ) -> boost::asio::awaitable< void_result_t >

Asynchronously flush a neighbor.

◆ async_flush_neighbor_impl()

auto llmx::rtaco::Control::async_flush_neighbor_impl ( uint16_t ifindex,
std::span< uint8_t, 16 > address ) -> boost::asio::awaitable< void_result_t >
private

◆ async_get_neighbor()

auto llmx::rtaco::Control::async_get_neighbor ( uint16_t ifindex,
std::span< uint8_t, 16 > address ) -> boost::asio::awaitable< neighbor_result_t >

Asynchronously get a neighbor.

◆ async_get_neighbor_impl()

auto llmx::rtaco::Control::async_get_neighbor_impl ( uint16_t ifindex,
std::span< uint8_t, 16 > address ) -> boost::asio::awaitable< neighbor_result_t >
private

◆ async_probe_neighbor()

auto llmx::rtaco::Control::async_probe_neighbor ( uint16_t ifindex,
std::span< uint8_t, 16 > address ) -> boost::asio::awaitable< void_result_t >

Asynchronously probe a neighbor.

◆ async_probe_neighbor_impl()

auto llmx::rtaco::Control::async_probe_neighbor_impl ( uint16_t ifindex,
std::span< uint8_t, 16 > address ) -> boost::asio::awaitable< void_result_t >
private

◆ dump_addresses()

auto llmx::rtaco::Control::dump_addresses ( ) -> address_list_result_t

Synchronously dump addresses from the kernel.

◆ dump_links()

auto llmx::rtaco::Control::dump_links ( ) -> link_list_result_t

Synchronously dump links from the kernel.

◆ dump_neighbors()

auto llmx::rtaco::Control::dump_neighbors ( ) -> neighbor_list_result

Synchronously dump neighbor entries from the kernel.

◆ dump_routes()

auto llmx::rtaco::Control::dump_routes ( ) -> route_list_result_t

Synchronously dump routes from the kernel.

Returns
Expected RouteEventList or an error_code on failure.

◆ flush_neighbor()

auto llmx::rtaco::Control::flush_neighbor ( uint16_t ifindex,
std::span< uint8_t, 16 > address ) -> void_result_t

Flush a neighbour entry (synchronous).

◆ get_neighbor()

auto llmx::rtaco::Control::get_neighbor ( uint16_t ifindex,
std::span< uint8_t, 16 > address ) -> neighbor_result_t

Get a neighbor entry synchronously.

◆ operator=() [1/2]

Control & llmx::rtaco::Control::operator= ( const Control & )
delete

◆ operator=() [2/2]

Control & llmx::rtaco::Control::operator= ( Control && )
delete

◆ probe_neighbor()

auto llmx::rtaco::Control::probe_neighbor ( uint16_t ifindex,
std::span< uint8_t, 16 > address ) -> void_result_t

Probe a neighbor entry (synchronous).

Parameters
ifindexInterface index to probe on.
addressIPv6/IPv4 address bytes (16-byte span).
Returns
Expected void or error on failure.

◆ stop()

void llmx::rtaco::Control::stop ( )

Stop ongoing operations and release control resources.

Member Data Documentation

◆ gate_

boost::asio::steady_timer llmx::rtaco::Control::gate_
private

◆ io_

boost::asio::io_context& llmx::rtaco::Control::io_
private

◆ sequence_

std::atomic_uint32_t llmx::rtaco::Control::sequence_ {1U}
private

◆ socket_guard_

SocketGuard llmx::rtaco::Control::socket_guard_
private

◆ strand_

boost::asio::strand<boost::asio::io_context::executor_type> llmx::rtaco::Control::strand_
private

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