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=nullptr)
 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=nullptr)
 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.
 

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<class Rep , class Period >
int waitResponse (ScopedLock< Mutex > &lock, uint32_t seq, std::chrono::duration< Rep, Period > timeout)
 wait for specific netlink response.
 
template<typename Func , typename... Args>
void pushJob (Func &&func, Args &&... args) noexcept
 push a job to be executed on the reactor thread.
 
virtual void onReceive (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.
 
- 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 = nullptr)
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: