11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
25PROMEKI_NAMESPACE_BEGIN
44struct NetworkInterfaceData {
48 MacAddress::List macAddresses;
49 Ipv4Subnet::List ipv4Subnets;
50 Ipv6Subnet::List ipv6Subnets;
52 NetworkInterfaceKind kind = NetworkInterfaceKind::Unknown;
53 uint64_t linkSpeedMbps = 0;
54 bool fullDuplex =
false;
56 bool isRunning =
false;
57 bool hasCarrier =
false;
58 bool isLoopback =
false;
59 bool isMulticast =
false;
77struct NetworkInterfaceStats {
79 uint64_t rxPackets = 0;
80 uint64_t rxErrors = 0;
81 uint64_t rxDropped = 0;
83 uint64_t txPackets = 0;
84 uint64_t txErrors = 0;
85 uint64_t txDropped = 0;
112class NetworkInterfaceImpl {
114 PROMEKI_SHARED_BASE(NetworkInterfaceImpl)
117 explicit NetworkInterfaceImpl(NetworkInterfaceData data) : _data(std::move(data)) {}
119 virtual ~NetworkInterfaceImpl() =
default;
129 NetworkInterfaceData data()
const {
130 ReadWriteLock::ReadLocker lock(_dataLock);
143 void replaceData(NetworkInterfaceData data) {
144 ReadWriteLock::WriteLocker lock(_dataLock);
145 _data = std::move(data);
157 virtual NetworkInterfaceStats stats()
const {
return NetworkInterfaceStats{}; }
160 mutable ReadWriteLock _dataLock;
161 NetworkInterfaceData _data;
165using NetworkInterfaceImplPtr = SharedPtr<NetworkInterfaceImpl, false>;
173TextStream &operator<<(TextStream &stream,
const NetworkInterfaceData &data);
180TextStream &operator<<(TextStream &stream,
const NetworkInterfaceStats &stats);