libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
networkinterface.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
13#include <promeki/namespace.h>
14#include <promeki/string.h>
15#include <promeki/list.h>
16#include <promeki/macaddress.h>
17#include <promeki/ipv4address.h>
18#include <promeki/ipv6address.h>
19#include <promeki/ipv4subnet.h>
20#include <promeki/ipv6subnet.h>
22
23PROMEKI_NAMESPACE_BEGIN
24
25class TextStream;
26
59class NetworkInterface {
60 public:
62 using List = ::promeki::List<NetworkInterface>;
63
71 static List enumerate();
72
74 static NetworkInterface findByName(const String &name);
75
85 static NetworkInterface findByIpv4Address(const Ipv4Address &addr);
86
92 static NetworkInterface findByIpv6Address(const Ipv6Address &addr);
93
102 static NetworkInterface findByMacAddress(const MacAddress &mac);
103
116 static List findRoutesTo(const Ipv4Address &dest);
117
127 static List findRoutesTo(const Ipv6Address &dest);
128
137 static NetworkInterface firstNonLoopback();
138
140 NetworkInterface() = default;
141
143 explicit NetworkInterface(NetworkInterfaceImplPtr impl) : _d(std::move(impl)) {}
144
146 bool isValid() const { return _d.isValid(); }
147
159 NetworkInterfaceData data() const;
160
162 String name() const;
163
171 String friendlyName() const;
172
174 uint32_t index() const;
175
177 MacAddress macAddress() const;
178
180 MacAddress::List allMacAddresses() const;
181
183 Ipv4Subnet::List ipv4Subnets() const;
184
186 Ipv6Subnet::List ipv6Subnets() const;
187
189 Ipv4Address::List ipv4Addresses() const;
190
192 Ipv6Address::List ipv6Addresses() const;
193
195 uint32_t mtu() const;
196
198 NetworkInterfaceKind kind() const;
199
201 uint64_t linkSpeedMbps() const;
202
204 bool fullDuplex() const;
205
207 bool isUp() const;
208
210 bool isRunning() const;
211
221 bool hasCarrier() const;
222
224 bool isLoopback() const;
225
227 bool isMulticast() const;
228
235 bool canRoute(const Ipv4Address &dest) const;
236
243 bool canRoute(const Ipv6Address &dest) const;
244
246 NetworkInterfaceStats stats() const;
247
254 String toString() const;
255
257 const NetworkInterfaceImplPtr &impl() const { return _d; }
258
260 bool operator==(const NetworkInterface &o) const { return _d == o._d; }
262 bool operator!=(const NetworkInterface &o) const { return !(*this == o); }
263
264 private:
265 NetworkInterfaceImplPtr _d;
266};
267
269TextStream &operator<<(TextStream &stream, const NetworkInterface &iface);
270
271PROMEKI_NAMESPACE_END
272
273PROMEKI_FORMAT_VIA_TOSTRING(promeki::NetworkInterface);
274
275#endif // PROMEKI_ENABLE_NETWORK