libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
networkinterfaceimpl.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>
21#include <promeki/sharedptr.h>
23#include <promeki/enums.h>
24
25PROMEKI_NAMESPACE_BEGIN
26
27class TextStream;
28
44struct NetworkInterfaceData {
45 String name;
46 String friendlyName;
47 uint32_t index = 0;
48 MacAddress::List macAddresses;
49 Ipv4Subnet::List ipv4Subnets;
50 Ipv6Subnet::List ipv6Subnets;
51 uint32_t mtu = 0;
52 NetworkInterfaceKind kind = NetworkInterfaceKind::Unknown;
53 uint64_t linkSpeedMbps = 0;
54 bool fullDuplex = false;
55 bool isUp = false;
56 bool isRunning = false;
57 bool hasCarrier = false;
58 bool isLoopback = false;
59 bool isMulticast = false;
60};
61
77struct NetworkInterfaceStats {
78 uint64_t rxBytes = 0;
79 uint64_t rxPackets = 0;
80 uint64_t rxErrors = 0;
81 uint64_t rxDropped = 0;
82 uint64_t txBytes = 0;
83 uint64_t txPackets = 0;
84 uint64_t txErrors = 0;
85 uint64_t txDropped = 0;
86 bool valid = false;
87};
88
112class NetworkInterfaceImpl {
113 public:
114 PROMEKI_SHARED_BASE(NetworkInterfaceImpl)
115
116
117 explicit NetworkInterfaceImpl(NetworkInterfaceData data) : _data(std::move(data)) {}
118
119 virtual ~NetworkInterfaceImpl() = default;
120
129 NetworkInterfaceData data() const {
130 ReadWriteLock::ReadLocker lock(_dataLock);
131 return _data;
132 }
133
143 void replaceData(NetworkInterfaceData data) {
144 ReadWriteLock::WriteLocker lock(_dataLock);
145 _data = std::move(data);
146 }
147
157 virtual NetworkInterfaceStats stats() const { return NetworkInterfaceStats{}; }
158
159 private:
160 mutable ReadWriteLock _dataLock;
161 NetworkInterfaceData _data;
162};
163
165using NetworkInterfaceImplPtr = SharedPtr<NetworkInterfaceImpl, false>;
166
173TextStream &operator<<(TextStream &stream, const NetworkInterfaceData &data);
174
180TextStream &operator<<(TextStream &stream, const NetworkInterfaceStats &stats);
181
182PROMEKI_NAMESPACE_END
183
184#endif // PROMEKI_ENABLE_NETWORK