join 1.0
lightweight network framework library
Loading...
Searching...
No Matches
join::RouteManager Class Reference

kernel routing table manager class. More...

#include <routemanager.hpp>

Inheritance diagram for join::RouteManager:
Collaboration diagram for join::RouteManager:

Public Types

using RouteNotify = std::function<void (const RouteInfo& info)>
 

Public Member Functions

 RouteManager (Reactor &reactor=ReactorThread::reactor())
 create instance.
 
 RouteManager (const RouteManager &)=delete
 create instance by copy.
 
 RouteManager (RouteManager &&)=delete
 create instance by move.
 
RouteManageroperator= (const RouteManager &)=delete
 assign instance by copy.
 
RouteManageroperator= (RouteManager &&)=delete
 assign instance by move.
 
 ~RouteManager ()
 destroy instance.
 
Route::Ptr findByIndex (uint32_t index, const IpAddress &dest, uint32_t prefix)
 find a route entry by interface index, destination and prefix.
 
Route::Ptr findByName (const std::string &interfaceName, const IpAddress &dest, uint32_t prefix)
 find a route entry by interface name, destination and prefix.
 
RouteList enumerate ()
 enumerate all cached route entries.
 
RouteList enumerate (uint32_t index)
 enumerate all cached route entries for a given interface.
 
RouteList enumerate (const std::string &interfaceName)
 enumerate all cached route entries for a given interface.
 
int refresh ()
 refresh all data.
 
uint64_t addRouteListener (const RouteNotify &cb)
 register a callback invoked on any route table change.
 
void removeRouteListener (uint64_t id)
 unregister a previously registered callback.
 
int addRoute (uint32_t index, const IpAddress &dest, uint32_t prefix, const IpAddress &gateway={}, uint32_t metric=0, bool sync=false)
 add a route entry in the kernel table.
 
int addRoute (const std::string &interfaceName, const IpAddress &dest, uint32_t prefix, const IpAddress &gateway={}, uint32_t metric=0, bool sync=false)
 add a route entry in the kernel table.
 
int removeRoute (uint32_t index, const IpAddress &dest, uint32_t prefix, bool sync=false)
 remove a route entry from the kernel table.
 
int removeRoute (const std::string &interfaceName, const IpAddress &dest, uint32_t prefix, bool sync=false)
 remove a route entry from the kernel table.
 
int flushRoutes (uint32_t index, bool sync=false)
 flush all route entries for a given interface.
 
int flushRoutes (const std::string &interfaceName, bool sync=false)
 flush all route entries for a given interface.
 
- Public Member Functions inherited from join::NetlinkManager
 NetlinkManager (uint32_t groups, Reactor &reactor=ReactorThread::reactor())
 create instance.
 
 NetlinkManager (const NetlinkManager &)=delete
 create instance by copy.
 
 NetlinkManager (NetlinkManager &&)=delete
 create instance by move.
 
NetlinkManageroperator= (const NetlinkManager &)=delete
 assign instance by copy.
 
NetlinkManageroperator= (NetlinkManager &&)=delete
 assign instance by move.
 
virtual ~NetlinkManager ()
 destroy instance.
 
Reactorreactor () const noexcept
 get the event loop reactor.
 
- Public Member Functions inherited from join::EventHandler
 EventHandler ()=default
 create instance.
 
 EventHandler (const EventHandler &other)=default
 copy constructor.
 
EventHandleroperator= (const EventHandler &other)=default
 copy assignment operator.
 
 EventHandler (EventHandler &&other)=default
 move constructor.
 
EventHandleroperator= (EventHandler &&other)=default
 move assignment operator.
 
virtual ~EventHandler ()=default
 destroy instance.
 

Static Public Member Functions

static RouteManagerinstance ()
 get the singleton instance.
 

Friends

class Route
 

Additional Inherited Members

- Protected Member Functions inherited from join::NetlinkManager
void start ()
 start listening for netlink events.
 
void stop ()
 stop listening for netlink events.
 
int sendRequest (struct nlmsghdr *nlh, bool sync, std::chrono::milliseconds timeout=std::chrono::seconds(5))
 send a netlink request, optionally waiting for the ack.
 
template<typename Func , typename... Args>
void pushJob (Func &&func, Args &&... args) noexcept
 push a job to be executed on the reactor thread.
 
virtual void onReadable (int fd) override final
 method called when data are ready to be read on handle.
 
void notifyRequest (uint32_t seq, int error=0)
 notify a pending synchronous request.
 
- Protected Member Functions inherited from join::EventHandler
virtual void onWriteable (int fd)
 method called when data are ready to be written on handle.
 
virtual void onClose (int fd)
 method called when handle was closed by the peer.
 
virtual void onError (int fd)
 method called when an error occurred on handle.
 
- Static Protected Member Functions inherited from join::NetlinkManager
static void addAttributes (struct nlmsghdr *nlh, int type, const void *data, int alen)
 add an attribute to a netlink message.
 
static struct rtattr * startNestedAttributes (struct nlmsghdr *nlh, int type)
 open a nested attribute block.
 
static int stopNestedAttributes (struct nlmsghdr *nlh, struct rtattr *nested)
 close a nested attribute block.
 
template<typename T , typename Flag >
static Flag updateValue (T &oldVal, const T &newVal, Flag changed)
 update a value in place and report whether it changed.
 
- Protected Attributes inherited from join::NetlinkManager
std::unique_ptr< char[]> _buffer
 internal read buffer.
 
std::atomic< uint32_t > _seq
 sequence number.
 
std::unordered_map< uint32_t, std::unique_ptr< PendingRequest > > _pending
 synchronous requests indexed by sequence number.
 
Mutex _syncMutex
 protection mutex.
 
LocalMem::Mpsc::Queue< Job * > _jobs
 job queue.
 
int _wakeup = -1
 eventfd used to wake the reactor thread for pending jobs.
 
Reactor_reactor
 event loop reactor.
 
- Static Protected Attributes inherited from join::NetlinkManager
static constexpr size_t _bufferSize = 16384
 internal buffer size.
 
static constexpr size_t _jobQueueSize = 256
 job queue size.
 

Detailed Description

kernel routing table manager class.

Member Typedef Documentation

◆ RouteNotify

using join::RouteManager::RouteNotify = std::function<void (const RouteInfo& info)>

Constructor & Destructor Documentation

◆ RouteManager() [1/3]

RouteManager::RouteManager ( Reactor & reactor = ReactorThread::reactor ())
explicit

create instance.

Parameters
reactorevent loop reactor (uses ReactorThread if nullptr).

◆ RouteManager() [2/3]

join::RouteManager::RouteManager ( const RouteManager & )
delete

create instance by copy.

◆ RouteManager() [3/3]

join::RouteManager::RouteManager ( RouteManager && )
delete

create instance by move.

◆ ~RouteManager()

RouteManager::~RouteManager ( )

destroy instance.

Member Function Documentation

◆ addRoute() [1/2]

int RouteManager::addRoute ( const std::string & interfaceName,
const IpAddress & dest,
uint32_t prefix,
const IpAddress & gateway = {},
uint32_t metric = 0,
bool sync = false )

add a route entry in the kernel table.

Parameters
interfaceNameinterface name.
destdestination network address.
prefixprefix length.
gatewaygateway address.
metricroute metric.
syncwait for completion.
Returns
0 on success, -1 on failure.

◆ addRoute() [2/2]

int RouteManager::addRoute ( uint32_t index,
const IpAddress & dest,
uint32_t prefix,
const IpAddress & gateway = {},
uint32_t metric = 0,
bool sync = false )

add a route entry in the kernel table.

Parameters
indexinterface index.
destdestination network address.
prefixprefix length.
gatewaygateway address.
metricroute metric.
syncwait for completion.
Returns
0 on success, -1 on failure.

◆ addRouteListener()

uint64_t RouteManager::addRouteListener ( const RouteNotify & cb)

register a callback invoked on any route table change.

Parameters
cbcallback to register.
Returns
unique id for the callback.

◆ enumerate() [1/3]

RouteList RouteManager::enumerate ( )

enumerate all cached route entries.

Returns
snapshot of the current route list.

◆ enumerate() [2/3]

RouteList RouteManager::enumerate ( const std::string & interfaceName)

enumerate all cached route entries for a given interface.

Parameters
interfaceNameinterface name.
Returns
snapshot of route entries on that interface.

◆ enumerate() [3/3]

RouteList RouteManager::enumerate ( uint32_t index)

enumerate all cached route entries for a given interface.

Parameters
indexinterface index.
Returns
snapshot of route entries on that interface.

◆ findByIndex()

Route::Ptr RouteManager::findByIndex ( uint32_t index,
const IpAddress & dest,
uint32_t prefix )

find a route entry by interface index, destination and prefix.

Parameters
indexinterface index.
destdestination network address.
prefixprefix length.
Returns
route pointer, or nullptr if not found.

◆ findByName()

Route::Ptr RouteManager::findByName ( const std::string & interfaceName,
const IpAddress & dest,
uint32_t prefix )

find a route entry by interface name, destination and prefix.

Parameters
interfaceNameinterface name.
destdestination network address.
prefixprefix length.
Returns
route pointer, or nullptr if not found.

◆ flushRoutes() [1/2]

int RouteManager::flushRoutes ( const std::string & interfaceName,
bool sync = false )

flush all route entries for a given interface.

Parameters
interfaceNameinterface name.
syncwait for completion.
Returns
0 on success, -1 on failure.

◆ flushRoutes() [2/2]

int RouteManager::flushRoutes ( uint32_t index,
bool sync = false )

flush all route entries for a given interface.

Parameters
indexinterface index.
syncwait for completion.
Returns
0 on success, -1 on failure.

◆ instance()

RouteManager & RouteManager::instance ( )
static

get the singleton instance.

Returns
reference to the singleton instance.

◆ operator=() [1/2]

RouteManager & join::RouteManager::operator= ( const RouteManager & )
delete

assign instance by copy.

◆ operator=() [2/2]

RouteManager & join::RouteManager::operator= ( RouteManager && )
delete

assign instance by move.

◆ refresh()

int RouteManager::refresh ( )

refresh all data.

Returns
0 on success, -1 on failure.

◆ removeRoute() [1/2]

int RouteManager::removeRoute ( const std::string & interfaceName,
const IpAddress & dest,
uint32_t prefix,
bool sync = false )

remove a route entry from the kernel table.

Parameters
interfaceNameinterface name.
destdestination network address.
prefixprefix length.
syncwait for completion.
Returns
0 on success, -1 on failure.

◆ removeRoute() [2/2]

int RouteManager::removeRoute ( uint32_t index,
const IpAddress & dest,
uint32_t prefix,
bool sync = false )

remove a route entry from the kernel table.

Parameters
indexinterface index.
destdestination network address.
prefixprefix length.
syncwait for completion.
Returns
0 on success, -1 on failure.

◆ removeRouteListener()

void RouteManager::removeRouteListener ( uint64_t id)

unregister a previously registered callback.

Parameters
idunique id of the callback function to remove.

Friends And Related Symbol Documentation

◆ Route

friend class Route
friend

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