/*** 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; AuOptional GetAddress() override; AuOptional GetBroadcastAddress() override; AuOptional GetAnycastAddress() override; AuOptional GetSubnetMask() override; AuOptional GetGateway() override; const 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; AuOptional address; AuOptional broadcast; AuOptional anycast; AuOptional subnet; AuOptional 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 {}; }; }