11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
23PROMEKI_NAMESPACE_BEGIN
59class NetworkInterface {
62 using List = ::promeki::List<NetworkInterface>;
71 static List enumerate();
74 static NetworkInterface findByName(
const String &name);
85 static NetworkInterface findByIpv4Address(
const Ipv4Address &addr);
92 static NetworkInterface findByIpv6Address(
const Ipv6Address &addr);
102 static NetworkInterface findByMacAddress(
const MacAddress &mac);
116 static List findRoutesTo(
const Ipv4Address &dest);
127 static List findRoutesTo(
const Ipv6Address &dest);
137 static NetworkInterface firstNonLoopback();
140 NetworkInterface() =
default;
143 explicit NetworkInterface(NetworkInterfaceImplPtr impl) : _d(std::move(impl)) {}
146 bool isValid()
const {
return _d.isValid(); }
159 NetworkInterfaceData data()
const;
171 String friendlyName()
const;
174 uint32_t index()
const;
177 MacAddress macAddress()
const;
180 MacAddress::List allMacAddresses()
const;
183 Ipv4Subnet::List ipv4Subnets()
const;
186 Ipv6Subnet::List ipv6Subnets()
const;
189 Ipv4Address::List ipv4Addresses()
const;
192 Ipv6Address::List ipv6Addresses()
const;
195 uint32_t mtu()
const;
198 NetworkInterfaceKind kind()
const;
201 uint64_t linkSpeedMbps()
const;
204 bool fullDuplex()
const;
210 bool isRunning()
const;
221 bool hasCarrier()
const;
224 bool isLoopback()
const;
227 bool isMulticast()
const;
235 bool canRoute(
const Ipv4Address &dest)
const;
243 bool canRoute(
const Ipv6Address &dest)
const;
246 NetworkInterfaceStats stats()
const;
254 String toString()
const;
257 const NetworkInterfaceImplPtr &impl()
const {
return _d; }
260 bool operator==(
const NetworkInterface &o)
const {
return _d == o._d; }
262 bool operator!=(
const NetworkInterface &o)
const {
return !(*
this == o); }
265 NetworkInterfaceImplPtr _d;
269TextStream &operator<<(TextStream &stream,
const NetworkInterface &iface);
273PROMEKI_FORMAT_VIA_TOSTRING(promeki::NetworkInterface);