join 1.0
lightweight network framework library
Loading...
Searching...
No Matches
interface.hpp
Go to the documentation of this file.
1
25#ifndef JOIN_FABRIC_INTERFACE_HPP
26#define JOIN_FABRIC_INTERFACE_HPP
27
28// libjoin.
29#include <join/macaddress.hpp>
30#include <join/ipaddress.hpp>
31
32// C++.
33#include <string>
34#include <memory>
35#include <vector>
36#include <tuple>
37
38// C.
39#include <cstdint>
40
41namespace join
42{
44 class InterfaceManager;
45
50 {
51 private:
57 explicit Interface (InterfaceManager* manager, uint32_t index);
58
59 public:
60 using Ptr = std::shared_ptr<Interface>;
61 using Address = std::tuple<IpAddress, uint32_t, IpAddress>;
62 using AddressList = std::vector<Address>;
63 using Route = std::tuple<IpAddress, uint32_t, IpAddress, uint32_t>;
64 using RouteList = std::vector<Route>;
65
69 Interface () = delete;
70
74 ~Interface () = default;
75
80 uint32_t index () const noexcept;
81
86 uint32_t master () const;
87
92 std::string name () const;
93
100 int mtu (uint32_t mtuBytes, bool sync = false) const;
101
106 uint32_t mtu () const;
107
112 std::string kind () const;
113
120 int mac (const MacAddress& macAddress, bool sync = false) const;
121
126 MacAddress mac () const;
127
136 int addAddress (const IpAddress& ipAddress, uint32_t prefix, const IpAddress& broadcast = {},
137 bool sync = false) const;
138
145 int addAddress (const Address& address, bool sync = false) const;
146
155 int removeAddress (const IpAddress& ipAddress, uint32_t prefix, const IpAddress& broadcast = {},
156 bool sync = false) const;
157
164 int removeAddress (const Address& address, bool sync = false) const;
165
170 AddressList addressList () const;
171
177 bool hasAddress (const IpAddress& ipAddress) const;
178
183 bool hasLocalAddress () const;
184
194 int addRoute (const IpAddress& dest, uint32_t prefix, const IpAddress& gateway = {}, uint32_t metric = 0,
195 bool sync = false) const;
196
203 int addRoute (const Route& route, bool sync = false) const;
204
214 int removeRoute (const IpAddress& dest, uint32_t prefix, const IpAddress& gateway = {}, uint32_t metric = 0,
215 bool sync = false) const;
216
223 int removeRoute (const Route& route, bool sync = false) const;
224
229 RouteList routeList () const;
230
239 bool hasRoute (const IpAddress& dest, uint32_t prefix, const IpAddress& gateway, uint32_t metric) const;
240
246 bool hasRoute (const Route& route) const;
247
254 int addToBridge (uint32_t masterIndex, bool sync = false) const;
255
262 int addToBridge (const std::string& masterName, bool sync = false) const;
263
269 int removeFromBridge (bool sync = false) const;
270
275 uint32_t flags () const;
276
283 int enable (bool enabled = true, bool sync = false) const;
284
289 bool isEnabled () const;
290
295 bool isRunning () const;
296
301 bool isLoopback () const;
302
307 bool isPointToPoint () const;
308
313 bool isDummy () const;
314
319 bool isBridge () const;
320
325 bool isVlan () const;
326
331 bool isVeth () const;
332
337 bool isGre () const;
338
343 bool isTun () const;
344
349 bool supportsBroadcast () const;
350
355 bool supportsMulticast () const;
356
361 bool supportsIpv4 () const;
362
367 bool supportsIpv6 () const;
368
369 private:
371 InterfaceManager* _manager = nullptr;
372
374 uint32_t _index = 0;
375
377 uint32_t _master = 0;
378
380 std::string _name;
381
383 std::string _kind;
384
386 uint32_t _mtu = 0;
387
389 uint32_t _flags = 0;
390
392 MacAddress _mac;
393
395 AddressList _addresses;
396
398 RouteList _routes;
399
401 mutable Mutex _mutex;
402
403 // friendship with equal operator.
404 friend bool operator== (const Interface::Ptr& lhs, const Interface::Ptr& rhs) noexcept;
405
406 // friendship with less operator.
407 friend bool operator< (const Interface::Ptr& lhs, const Interface::Ptr& rhs) noexcept;
408
409 // friendship with interface manager.
410 friend class InterfaceManager;
411 };
412
419 inline bool operator== (const Interface::Ptr& lhs, const Interface::Ptr& rhs) noexcept
420 {
421 if (!lhs && !rhs)
422 {
423 return true;
424 }
425 if (!lhs || !rhs)
426 {
427 return false;
428 }
429 return lhs->_index == rhs->_index;
430 }
431
438 inline bool operator< (const Interface::Ptr& lhs, const Interface::Ptr& rhs) noexcept
439 {
440 if (!lhs)
441 {
442 return true;
443 }
444 if (!rhs)
445 {
446 return false;
447 }
448 return lhs->_index < rhs->_index;
449 }
450
452 using InterfaceList = std::vector<Interface::Ptr>;
453}
454
455#endif
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
Definition error.hpp:137
IpAddress address
Definition tcpacceptor_test.cpp:35