25#ifndef JOIN_FABRIC_INTERFACE_HPP
26#define JOIN_FABRIC_INTERFACE_HPP
44 class InterfaceManager;
60 using Ptr = std::shared_ptr<Interface>;
61 using Address = std::tuple<IpAddress, uint32_t, IpAddress>;
63 using Route = std::tuple<IpAddress, uint32_t, IpAddress, uint32_t>;
80 uint32_t
index () const noexcept;
100 int mtu (uint32_t mtuBytes,
bool sync = false) const;
106 uint32_t
mtu () const;
120 int mac (const
MacAddress& macAddress,
bool sync = false) const;
137 bool sync =
false)
const;
156 bool sync =
false)
const;
177 bool hasAddress (
const IpAddress& ipAddress)
const;
194 int addRoute (
const IpAddress& dest, uint32_t prefix,
const IpAddress& gateway = {}, uint32_t metric = 0,
195 bool sync =
false)
const;
214 int removeRoute (
const IpAddress& dest, uint32_t prefix,
const IpAddress& gateway = {}, uint32_t metric = 0,
215 bool sync =
false)
const;
239 bool hasRoute (
const IpAddress& dest, uint32_t prefix,
const IpAddress& gateway, uint32_t metric)
const;
254 int addToBridge (uint32_t masterIndex,
bool sync =
false)
const;
262 int addToBridge (
const std::string& masterName,
bool sync =
false)
const;
275 uint32_t
flags ()
const;
283 int enable (
bool enabled =
true,
bool sync =
false)
const;
377 uint32_t _master = 0;
401 mutable Mutex _mutex;
429 return lhs->_index == rhs->_index;
448 return lhs->_index < rhs->_index;
interface manager class.
Definition interfacemanager.hpp:162
interface class.
Definition interface.hpp:50
std::vector< Route > RouteList
Definition interface.hpp:64
bool isLoopback() const
is interface a loopback interface.
Definition interface.cpp:367
bool supportsMulticast() const
is interface supporting multicast.
Definition interface.cpp:449
int enable(bool enabled=true, bool sync=false) const
enable interface.
Definition interface.cpp:340
uint32_t master() const
get master index if bridged.
Definition interface.cpp:67
int removeRoute(const IpAddress &dest, uint32_t prefix, const IpAddress &gateway={}, uint32_t metric=0, bool sync=false) const
remove route from interface.
Definition interface.cpp:238
friend bool operator==(const Interface::Ptr &lhs, const Interface::Ptr &rhs) noexcept
compare if two interfaces are equals.
Definition interface.hpp:419
bool isDummy() const
is interface a dummy interface.
Definition interface.cpp:385
bool supportsIpv6() const
is interface supporting IPv6.
Definition interface.cpp:477
bool isRunning() const
is interface running.
Definition interface.cpp:358
uint32_t index() const noexcept
get interface index.
Definition interface.cpp:58
bool supportsBroadcast() const
is interface supporting broadcast.
Definition interface.cpp:440
int removeAddress(const IpAddress &ipAddress, uint32_t prefix, const IpAddress &broadcast={}, bool sync=false) const
remove address from interface.
Definition interface.cpp:153
std::vector< Address > AddressList
Definition interface.hpp:62
MacAddress mac() const
get interface mac address.
Definition interface.cpp:125
~Interface()=default
destroy instance.
bool supportsIpv4() const
is interface supporting IPv4.
Definition interface.cpp:458
bool hasRoute(const IpAddress &dest, uint32_t prefix, const IpAddress &gateway, uint32_t metric) const
check if interface has route stored.
Definition interface.cpp:267
bool isEnabled() const
is interface enabled.
Definition interface.cpp:349
std::string kind() const
get interface kind.
Definition interface.cpp:106
bool hasLocalAddress() const
check if interface has link local address stored.
Definition interface.cpp:200
std::shared_ptr< Interface > Ptr
Definition interface.hpp:60
RouteList routeList() const
get interface routes.
Definition interface.cpp:257
int removeFromBridge(bool sync=false) const
remove interface from bridge.
Definition interface.cpp:321
int addAddress(const IpAddress &ipAddress, uint32_t prefix, const IpAddress &broadcast={}, bool sync=false) const
add address to interface.
Definition interface.cpp:135
bool hasAddress(const IpAddress &ipAddress) const
check if interface has address stored.
Definition interface.cpp:181
uint32_t flags() const
get interface flags.
Definition interface.cpp:330
std::string name() const
get interface name.
Definition interface.cpp:77
int addRoute(const IpAddress &dest, uint32_t prefix, const IpAddress &gateway={}, uint32_t metric=0, bool sync=false) const
add route to interface.
Definition interface.cpp:219
bool isGre() const
is interface a gre interface.
Definition interface.cpp:421
std::tuple< IpAddress, uint32_t, IpAddress, uint32_t > Route
Definition interface.hpp:63
bool isVlan() const
is interface a vlan interface.
Definition interface.cpp:403
AddressList addressList() const
get interface ip addresses.
Definition interface.cpp:171
int addToBridge(uint32_t masterIndex, bool sync=false) const
add interface to bridge.
Definition interface.cpp:296
bool isVeth() const
is interface a veth interface.
Definition interface.cpp:412
uint32_t mtu() const
get interface mtu.
Definition interface.cpp:96
friend bool operator<(const Interface::Ptr &lhs, const Interface::Ptr &rhs) noexcept
compare if interface is inferior.
Definition interface.hpp:438
friend class InterfaceManager
Definition interface.hpp:410
std::tuple< IpAddress, uint32_t, IpAddress > Address
Definition interface.hpp:61
bool isBridge() const
is interface a bridge interface.
Definition interface.cpp:394
bool isTun() const
is interface a tun interface.
Definition interface.cpp:431
bool isPointToPoint() const
is interface a point to point interface.
Definition interface.cpp:376
Interface()=delete
create instance.
IPv6, IPv4 address class.
Definition ipaddress.hpp:51
MAC address class.
Definition macaddress.hpp:46
Definition acceptor.hpp:32
std::vector< Interface::Ptr > InterfaceList
list of interfaces.
Definition interface.hpp:452
bool operator<(const BasicUnixEndpoint< Protocol > &a, const BasicUnixEndpoint< Protocol > &b) noexcept
compare if endpoint is lower.
Definition endpoint.hpp:207
bool operator==(const BasicUnixEndpoint< Protocol > &a, const BasicUnixEndpoint< Protocol > &b) noexcept
compare if endpoints are equal.
Definition endpoint.hpp:183
IpAddress address
Definition tcpacceptor_test.cpp:35