// SPDX-FileCopyrightText: 2002-2025 PCSX2 Dev Team // SPDX-License-Identifier: GPL-3.0+ #pragma once #ifdef _WIN32 #include "common/RedtapeWindows.h" #include #include #elif defined(__POSIX__) #include #include #endif #include #include #include #include #include "DEV9/PacketReader/MAC_Address.h" #include "DEV9/PacketReader/IP/IP_Address.h" namespace AdapterUtils { #ifdef _WIN32 typedef IP_ADAPTER_ADDRESSES Adapter; typedef std::unique_ptr AdapterBuffer; #elif defined(__POSIX__) typedef ifaddrs Adapter; struct IfAdaptersDeleter { void operator()(ifaddrs* buffer) const { freeifaddrs(buffer); } }; typedef std::unique_ptr AdapterBuffer; #endif u16 ReadAddressFamily(const sockaddr* unknownAddr); // Adapter is a structure that contains ptrs to data stored within AdapterBuffer. // We need to return this buffer the caller can free it after it's finished with Adapter. // AdapterBuffer is a unique_ptr, so will be freed when it leaves scope. #ifdef _WIN32 // includeHidden sets GAA_FLAG_INCLUDE_ALL_INTERFACES, used by TAPAdapter Adapter* GetAllAdapters(AdapterBuffer* buffer, bool includeHidden = false); #elif defined(__POSIX__) Adapter* GetAllAdapters(AdapterBuffer* buffer); #endif bool GetAdapter(const std::string& name, Adapter* adapter, AdapterBuffer* buffer); bool GetAdapterAuto(Adapter* adapter, AdapterBuffer* buffer); std::optional GetAdapterMAC(const Adapter* adapter); std::optional GetAdapterIP(const Adapter* adapter); // Mask. std::vector GetGateways(const Adapter* adapter); std::vector GetDNS(const Adapter* adapter); }; // namespace AdapterUtils