/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuNetAdapter.hpp Date: 2022-11-14 Author: Reece ***/ #pragma once namespace Aurora::IO::Net { struct NetAdapter : INetAdapter { const AuString &GetName() override; const AuString &GetDevice() override; AuUInt16 GetIndex() override; EIPProtocol GetFamily() override; EAdapterType GetAdapterType() override; EAdapterStatus GetAdapterStatus() override; const IPAddress &GetAddress() override; const IPAddress &GetBroadcastAddress() override; const IPAddress &GetAnycastAddress() override; const IPAddress &GetSubnetMask() override; const IPAddress &GetGateway() override; AuList GetDNS() override; AuArray GetMacAddress() override; bool HasDHCP() override; AuUInt32 GetMTU() override; AuUInt64 GetTransmitBytesPerSec() override; AuUInt64 GetReceiveBytesPerSec() override; // FriendlyName static AuString GetHostname(); static AuList> GetIPv4s(); // must be called first under lock static AuList> GetIPv6s(); // followed by me // other protocols can go here AuString name; AuString device; IPAddress address; IPAddress broadcast; IPAddress anycast; IPAddress subnet; IPAddress gateway; EAdapterType eNetworkType { EAdapterType::eUnknown }; EAdapterStatus eNetworkStatus { EAdapterStatus::eUp }; bool dhcp {}; AuArray mac; AuUInt64 uTransmitBytesPerSec { 10 * 1000 * 1000 / 8 }; AuUInt64 uReceiveBytesPerSec { 10 * 1000 * 1000 / 8 }; AuUInt32 mtu; AuList dns; AuUInt16 index {}; }; }