From bef7cbbe4123801f06b26e5096e8642e6c1a99fa Mon Sep 17 00:00:00 2001 From: spholz <44805808+spholz@users.noreply.github.com> Date: Thu, 12 Aug 2021 21:32:53 +0200 Subject: configuration: add option to select network interface This commit renames the "Services" tab to "Network" and adds a combobox that allows the user to select the network interface that yuzu should use. This new setting is now used to get the local IP address in Network::GetHostIPv4Address. This prevents yuzu from selecting the wrong network interface and thus using the wrong IP address. The return type of Network::GetHostIPv4Adress has also been changed. --- src/core/network/network_interface.cpp | 113 +++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 src/core/network/network_interface.cpp (limited to 'src/core/network/network_interface.cpp') diff --git a/src/core/network/network_interface.cpp b/src/core/network/network_interface.cpp new file mode 100644 index 0000000000..bba4c8b267 --- /dev/null +++ b/src/core/network/network_interface.cpp @@ -0,0 +1,113 @@ +// Copyright 2021 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include + +#include "common/common_types.h" +#include "common/logging/log.h" +#include "common/string_util.h" +#include "core/network/network_interface.h" + +#ifdef _WIN32 +#include +#else +#include +#include +#include +#endif + +namespace Network { + +#ifdef _WIN32 + +std::vector GetAvailableNetworkInterfaces() { + std::vector result; + + std::vector adapter_addresses_raw; + auto adapter_addresses = reinterpret_cast(adapter_addresses_raw.data()); + DWORD ret = ERROR_BUFFER_OVERFLOW; + DWORD buf_size = 0; + + // retry up to 5 times + for (int i = 0; i < 5 && ret == ERROR_BUFFER_OVERFLOW; i++) { + ret = GetAdaptersAddresses(AF_INET, GAA_FLAG_SKIP_MULTICAST | GAA_FLAG_SKIP_DNS_SERVER, + nullptr, adapter_addresses, &buf_size); + + if (ret == ERROR_BUFFER_OVERFLOW) { + adapter_addresses_raw.resize(buf_size); + adapter_addresses = + reinterpret_cast(adapter_addresses_raw.data()); + } else { + break; + } + } + + if (ret == NO_ERROR) { + for (auto current_address = adapter_addresses; current_address != nullptr; + current_address = current_address->Next) { + if (current_address->FirstUnicastAddress == nullptr || + current_address->FirstUnicastAddress->Address.lpSockaddr == nullptr) { + continue; + } + + if (current_address->OperStatus != IfOperStatusUp) { + continue; + } + + const auto ip_addr = std::bit_cast( + *current_address->FirstUnicastAddress->Address.lpSockaddr) + .sin_addr; + + result.push_back(NetworkInterface{ + .name{Common::UTF16ToUTF8(std::wstring{current_address->FriendlyName})}, + .ip_address{ip_addr} + }); + } + } else { + LOG_ERROR(Network, "Failed to get network interfaces with GetAdaptersAddresses"); + } + + return result; +} + +#else + +std::vector GetAvailableNetworkInterfaces() { + std::vector result; + + struct ifaddrs* ifaddr = nullptr; + + if (getifaddrs(&ifaddr) != 0) { + LOG_ERROR(Network, "Failed to get network interfaces with getifaddrs: {}", + std::strerror(errno)); + return result; + } + + for (auto ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next) { + if (ifa->ifa_addr == nullptr) { + continue; + } + + if (ifa->ifa_addr->sa_family != AF_INET) { + continue; + } + + if (!(ifa->ifa_flags & IFF_UP) || ifa->ifa_flags & IFF_LOOPBACK) { + continue; + } + + result.push_back(NetworkInterface{ + .name{ifa->ifa_name}, + .ip_address{std::bit_cast(*ifa->ifa_addr).sin_addr} + }); + } + + freeifaddrs(ifaddr); + + return result; +} + +#endif + +} // namespace Network -- cgit v1.2.3 From d5e4ac4b29907f8419567edcacfe6a2205d7d3af Mon Sep 17 00:00:00 2001 From: Sönke Holz Date: Thu, 12 Aug 2021 22:15:48 +0200 Subject: network: correct formatting in network.cpp and network_interface.cpp --- src/core/network/network.cpp | 6 +++--- src/core/network/network_interface.cpp | 8 +++----- 2 files changed, 6 insertions(+), 8 deletions(-) (limited to 'src/core/network/network_interface.cpp') diff --git a/src/core/network/network.cpp b/src/core/network/network.cpp index 67ecf57bd8..9a4ac7e837 100644 --- a/src/core/network/network.cpp +++ b/src/core/network/network.cpp @@ -13,13 +13,13 @@ #include #include #elif YUZU_UNIX +#include #include #include #include #include #include #include -#include #include #else #error "Unimplemented platform" @@ -363,8 +363,8 @@ NetworkInstance::~NetworkInstance() { std::optional GetHostIPv4Address() { const std::string& selected_network_interface = Settings::values.network_interface.GetValue(); const auto network_interfaces = Network::GetAvailableNetworkInterfaces(); - ASSERT_MSG(network_interfaces.size() > 0, "GetAvailableNetworkInterfaces returned no interfaces"); - + ASSERT_MSG(network_interfaces.size() > 0, + "GetAvailableNetworkInterfaces returned no interfaces"); const auto res = std::ranges::find_if(network_interfaces, [&selected_network_interface](const auto& interface) { diff --git a/src/core/network/network_interface.cpp b/src/core/network/network_interface.cpp index bba4c8b267..2b53682eaf 100644 --- a/src/core/network/network_interface.cpp +++ b/src/core/network/network_interface.cpp @@ -12,9 +12,9 @@ #ifdef _WIN32 #include #else +#include #include #include -#include #endif namespace Network { @@ -61,8 +61,7 @@ std::vector GetAvailableNetworkInterfaces() { result.push_back(NetworkInterface{ .name{Common::UTF16ToUTF8(std::wstring{current_address->FriendlyName})}, - .ip_address{ip_addr} - }); + .ip_address{ip_addr}}); } } else { LOG_ERROR(Network, "Failed to get network interfaces with GetAdaptersAddresses"); @@ -99,8 +98,7 @@ std::vector GetAvailableNetworkInterfaces() { result.push_back(NetworkInterface{ .name{ifa->ifa_name}, - .ip_address{std::bit_cast(*ifa->ifa_addr).sin_addr} - }); + .ip_address{std::bit_cast(*ifa->ifa_addr).sin_addr}}); } freeifaddrs(ifaddr); -- cgit v1.2.3 From a7e514f3db7adaa44bef4b8c16eb4f562e1a89d4 Mon Sep 17 00:00:00 2001 From: Sönke Holz Date: Fri, 13 Aug 2021 00:31:33 +0200 Subject: network: use explicit bool conversions in GetAvailableNetworkInterfaces --- src/core/network/network_interface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/core/network/network_interface.cpp') diff --git a/src/core/network/network_interface.cpp b/src/core/network/network_interface.cpp index 2b53682eaf..887aee7089 100644 --- a/src/core/network/network_interface.cpp +++ b/src/core/network/network_interface.cpp @@ -92,7 +92,7 @@ std::vector GetAvailableNetworkInterfaces() { continue; } - if (!(ifa->ifa_flags & IFF_UP) || ifa->ifa_flags & IFF_LOOPBACK) { + if ((ifa->ifa_flags & IFF_UP) == 0 || (ifa->ifa_flags & IFF_LOOPBACK) != 0) { continue; } -- cgit v1.2.3 From 8e6aa553c07285f3975118f345257a6c0669d920 Mon Sep 17 00:00:00 2001 From: Sönke Holz Date: Fri, 13 Aug 2021 00:37:03 +0200 Subject: network: narrow down scope of "result" in win32 code for GetAvailableNetworkInterfaces --- src/core/network/network_interface.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/core/network/network_interface.cpp') diff --git a/src/core/network/network_interface.cpp b/src/core/network/network_interface.cpp index 887aee7089..34e20f5474 100644 --- a/src/core/network/network_interface.cpp +++ b/src/core/network/network_interface.cpp @@ -22,8 +22,6 @@ namespace Network { #ifdef _WIN32 std::vector GetAvailableNetworkInterfaces() { - std::vector result; - std::vector adapter_addresses_raw; auto adapter_addresses = reinterpret_cast(adapter_addresses_raw.data()); DWORD ret = ERROR_BUFFER_OVERFLOW; @@ -44,6 +42,8 @@ std::vector GetAvailableNetworkInterfaces() { } if (ret == NO_ERROR) { + std::vector result; + for (auto current_address = adapter_addresses; current_address != nullptr; current_address = current_address->Next) { if (current_address->FirstUnicastAddress == nullptr || @@ -63,11 +63,12 @@ std::vector GetAvailableNetworkInterfaces() { .name{Common::UTF16ToUTF8(std::wstring{current_address->FriendlyName})}, .ip_address{ip_addr}}); } + + return result; } else { LOG_ERROR(Network, "Failed to get network interfaces with GetAdaptersAddresses"); + return {}; } - - return result; } #else -- cgit v1.2.3 From b8b4170dd63a834dcabb832547de35ccbd766521 Mon Sep 17 00:00:00 2001 From: Sönke Holz Date: Fri, 13 Aug 2021 01:28:14 +0200 Subject: network: use Common::BitCast instead of std::bit_cast --- src/core/network/network_interface.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/core/network/network_interface.cpp') diff --git a/src/core/network/network_interface.cpp b/src/core/network/network_interface.cpp index 34e20f5474..e9060f13fd 100644 --- a/src/core/network/network_interface.cpp +++ b/src/core/network/network_interface.cpp @@ -4,6 +4,7 @@ #include +#include "common/bit_cast.h" #include "common/common_types.h" #include "common/logging/log.h" #include "common/string_util.h" @@ -55,7 +56,7 @@ std::vector GetAvailableNetworkInterfaces() { continue; } - const auto ip_addr = std::bit_cast( + const auto ip_addr = Common::BitCast( *current_address->FirstUnicastAddress->Address.lpSockaddr) .sin_addr; @@ -99,7 +100,7 @@ std::vector GetAvailableNetworkInterfaces() { result.push_back(NetworkInterface{ .name{ifa->ifa_name}, - .ip_address{std::bit_cast(*ifa->ifa_addr).sin_addr}}); + .ip_address{Common::BitCast(*ifa->ifa_addr).sin_addr}}); } freeifaddrs(ifaddr); -- cgit v1.2.3 From 9826ea72b2b7fa45aa4659d1356adb8354a9d1d2 Mon Sep 17 00:00:00 2001 From: spholz <44805808+spholz@users.noreply.github.com> Date: Fri, 13 Aug 2021 11:58:34 +0200 Subject: network: don't use reinterpret_cast in GetAvailableNetworkInterfaces --- src/core/network/network_interface.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'src/core/network/network_interface.cpp') diff --git a/src/core/network/network_interface.cpp b/src/core/network/network_interface.cpp index e9060f13fd..75f4dc54fb 100644 --- a/src/core/network/network_interface.cpp +++ b/src/core/network/network_interface.cpp @@ -23,20 +23,17 @@ namespace Network { #ifdef _WIN32 std::vector GetAvailableNetworkInterfaces() { - std::vector adapter_addresses_raw; - auto adapter_addresses = reinterpret_cast(adapter_addresses_raw.data()); + std::vector adapter_addresses; DWORD ret = ERROR_BUFFER_OVERFLOW; DWORD buf_size = 0; // retry up to 5 times for (int i = 0; i < 5 && ret == ERROR_BUFFER_OVERFLOW; i++) { ret = GetAdaptersAddresses(AF_INET, GAA_FLAG_SKIP_MULTICAST | GAA_FLAG_SKIP_DNS_SERVER, - nullptr, adapter_addresses, &buf_size); + nullptr, adapter_addresses.data(), &buf_size); if (ret == ERROR_BUFFER_OVERFLOW) { - adapter_addresses_raw.resize(buf_size); - adapter_addresses = - reinterpret_cast(adapter_addresses_raw.data()); + adapter_addresses.resize((buf_size / sizeof(IP_ADAPTER_ADDRESSES)) + 1); } else { break; } @@ -45,7 +42,7 @@ std::vector GetAvailableNetworkInterfaces() { if (ret == NO_ERROR) { std::vector result; - for (auto current_address = adapter_addresses; current_address != nullptr; + for (auto current_address = adapter_addresses.data(); current_address != nullptr; current_address = current_address->Next) { if (current_address->FirstUnicastAddress == nullptr || current_address->FirstUnicastAddress->Address.lpSockaddr == nullptr) { -- cgit v1.2.3 From 363236e2c692e14f751941c99857a9dee7bad9e7 Mon Sep 17 00:00:00 2001 From: Sönke Holz Date: Mon, 16 Aug 2021 10:32:25 +0200 Subject: network: retrieve subnet mask and gateway info --- src/core/hle/service/nifm/nifm.cpp | 24 +++++--- src/core/network/network.cpp | 11 ---- src/core/network/network.h | 19 ++++++ src/core/network/network_interface.cpp | 103 +++++++++++++++++++++++++++++++-- src/core/network/network_interface.h | 4 ++ 5 files changed, 137 insertions(+), 24 deletions(-) (limited to 'src/core/network/network_interface.cpp') diff --git a/src/core/hle/service/nifm/nifm.cpp b/src/core/hle/service/nifm/nifm.cpp index 796c89d47d..0a53c0c816 100644 --- a/src/core/hle/service/nifm/nifm.cpp +++ b/src/core/hle/service/nifm/nifm.cpp @@ -11,6 +11,7 @@ #include "core/hle/service/nifm/nifm.h" #include "core/hle/service/service.h" #include "core/network/network.h" +#include "core/network/network_interface.h" namespace Service::NIFM { @@ -357,16 +358,10 @@ private: static_assert(sizeof(IpConfigInfo) == sizeof(IpAddressSetting) + sizeof(DnsSetting), "IpConfigInfo has incorrect size."); - auto ipv4 = Network::GetHostIPv4Address(); - if (!ipv4) { - LOG_ERROR(Service_NIFM, "Couldn't get host IPv4 address, defaulting to 0.0.0.0"); - ipv4.emplace(Network::IPv4Address{0, 0, 0, 0}); - } - - const IpConfigInfo ip_config_info{ + IpConfigInfo ip_config_info{ .ip_address_setting{ .is_automatic{true}, - .current_address{*ipv4}, + .current_address{0, 0, 0, 0}, .subnet_mask{255, 255, 255, 0}, .gateway{192, 168, 1, 1}, }, @@ -377,6 +372,19 @@ private: }, }; + const auto iface = Network::GetSelectedNetworkInterface(); + if (iface) { + ip_config_info.ip_address_setting = + IpAddressSetting{.is_automatic{true}, + .current_address{Network::TranslateIPv4(iface->ip_address)}, + .subnet_mask{Network::TranslateIPv4(iface->subnet_mask)}, + .gateway{Network::TranslateIPv4(iface->gateway)}}; + + } else { + LOG_ERROR(Service_NIFM, + "Couldn't get host network configuration info, using default values"); + } + IPC::ResponseBuilder rb{ctx, 2 + (sizeof(IpConfigInfo) + 3) / sizeof(u32)}; rb.Push(ResultSuccess); rb.PushRaw(ip_config_info); diff --git a/src/core/network/network.cpp b/src/core/network/network.cpp index 71583159a2..4732d44858 100644 --- a/src/core/network/network.cpp +++ b/src/core/network/network.cpp @@ -50,11 +50,6 @@ void Finalize() { WSACleanup(); } -constexpr IPv4Address TranslateIPv4(in_addr addr) { - auto& bytes = addr.S_un.S_un_b; - return IPv4Address{bytes.s_b1, bytes.s_b2, bytes.s_b3, bytes.s_b4}; -} - sockaddr TranslateFromSockAddrIn(SockAddrIn input) { sockaddr_in result; @@ -141,12 +136,6 @@ void Initialize() {} void Finalize() {} -constexpr IPv4Address TranslateIPv4(in_addr addr) { - const u32 bytes = addr.s_addr; - return IPv4Address{static_cast(bytes), static_cast(bytes >> 8), - static_cast(bytes >> 16), static_cast(bytes >> 24)}; -} - sockaddr TranslateFromSockAddrIn(SockAddrIn input) { sockaddr_in result; diff --git a/src/core/network/network.h b/src/core/network/network.h index cfa68d4785..fdd3e4655a 100644 --- a/src/core/network/network.h +++ b/src/core/network/network.h @@ -11,6 +11,12 @@ #include "common/common_funcs.h" #include "common/common_types.h" +#ifdef _WIN32 +#include +#elif YUZU_UNIX +#include +#endif + namespace Network { class Socket; @@ -93,6 +99,19 @@ public: ~NetworkInstance(); }; +#ifdef _WIN32 +constexpr IPv4Address TranslateIPv4(in_addr addr) { + auto& bytes = addr.S_un.S_un_b; + return IPv4Address{bytes.s_b1, bytes.s_b2, bytes.s_b3, bytes.s_b4}; +} +#elif YUZU_UNIX +constexpr IPv4Address TranslateIPv4(in_addr addr) { + const u32 bytes = addr.s_addr; + return IPv4Address{static_cast(bytes), static_cast(bytes >> 8), + static_cast(bytes >> 16), static_cast(bytes >> 24)}; +} +#endif + /// @brief Returns host's IPv4 address /// @return human ordered IPv4 address (e.g. 192.168.0.1) as an array std::optional GetHostIPv4Address(); diff --git a/src/core/network/network_interface.cpp b/src/core/network/network_interface.cpp index 75f4dc54fb..b719da8819 100644 --- a/src/core/network/network_interface.cpp +++ b/src/core/network/network_interface.cpp @@ -2,11 +2,15 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include +#include +#include #include #include "common/bit_cast.h" #include "common/common_types.h" #include "common/logging/log.h" +#include "common/settings.h" #include "common/string_util.h" #include "core/network/network_interface.h" @@ -29,8 +33,9 @@ std::vector GetAvailableNetworkInterfaces() { // retry up to 5 times for (int i = 0; i < 5 && ret == ERROR_BUFFER_OVERFLOW; i++) { - ret = GetAdaptersAddresses(AF_INET, GAA_FLAG_SKIP_MULTICAST | GAA_FLAG_SKIP_DNS_SERVER, - nullptr, adapter_addresses.data(), &buf_size); + ret = GetAdaptersAddresses( + AF_INET, GAA_FLAG_SKIP_MULTICAST | GAA_FLAG_SKIP_DNS_SERVER | GAA_FLAG_INCLUDE_GATEWAYS, + nullptr, adapter_addresses.data(), &buf_size); if (ret == ERROR_BUFFER_OVERFLOW) { adapter_addresses.resize((buf_size / sizeof(IP_ADAPTER_ADDRESSES)) + 1); @@ -57,9 +62,26 @@ std::vector GetAvailableNetworkInterfaces() { *current_address->FirstUnicastAddress->Address.lpSockaddr) .sin_addr; + ULONG mask = 0; + if (ConvertLengthToIpv4Mask(current_address->FirstUnicastAddress->OnLinkPrefixLength, + &mask) != NO_ERROR) { + LOG_ERROR(Network, "Failed to convert IPv4 prefix length to subnet mask"); + continue; + } + + struct in_addr gateway = {0}; + if (current_address->FirstGatewayAddress != nullptr && + current_address->FirstGatewayAddress->Address.lpSockaddr != nullptr) { + gateway = Common::BitCast( + *current_address->FirstGatewayAddress->Address.lpSockaddr) + .sin_addr; + } + result.push_back(NetworkInterface{ .name{Common::UTF16ToUTF8(std::wstring{current_address->FriendlyName})}, - .ip_address{ip_addr}}); + .ip_address{ip_addr}, + .subnet_mask = in_addr{.S_un{.S_addr{mask}}}, + .gateway = gateway}); } return result; @@ -83,7 +105,7 @@ std::vector GetAvailableNetworkInterfaces() { } for (auto ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next) { - if (ifa->ifa_addr == nullptr) { + if (ifa->ifa_addr == nullptr || ifa->ifa_netmask == nullptr) { continue; } @@ -95,9 +117,59 @@ std::vector GetAvailableNetworkInterfaces() { continue; } + std::uint32_t gateway{0}; + std::ifstream file{"/proc/net/route"}; + if (file.is_open()) { + + // ignore header + file.ignore(std::numeric_limits::max(), '\n'); + + bool gateway_found = false; + + for (std::string line; std::getline(file, line);) { + std::istringstream iss{line}; + + std::string iface_name{}; + iss >> iface_name; + if (iface_name != ifa->ifa_name) { + continue; + } + + iss >> std::hex; + + std::uint32_t dest{0}; + iss >> dest; + if (dest != 0) { + // not the default route + continue; + } + + iss >> gateway; + + std::uint16_t flags{0}; + iss >> flags; + + // flag RTF_GATEWAY (defined in ) + if ((flags & 0x2) == 0) { + continue; + } + + gateway_found = true; + break; + } + + if (!gateway_found) { + gateway = 0; + } + } else { + LOG_ERROR(Network, "Failed to open \"/proc/net/route\""); + } + result.push_back(NetworkInterface{ .name{ifa->ifa_name}, - .ip_address{Common::BitCast(*ifa->ifa_addr).sin_addr}}); + .ip_address{Common::BitCast(*ifa->ifa_addr).sin_addr}, + .subnet_mask{Common::BitCast(*ifa->ifa_netmask).sin_addr}, + .gateway{in_addr{.s_addr = gateway}}}); } freeifaddrs(ifaddr); @@ -107,4 +179,25 @@ std::vector GetAvailableNetworkInterfaces() { #endif +std::optional GetSelectedNetworkInterface() { + const std::string& selected_network_interface = Settings::values.network_interface.GetValue(); + const auto network_interfaces = Network::GetAvailableNetworkInterfaces(); + if (network_interfaces.size() == 0) { + LOG_ERROR(Network, "GetAvailableNetworkInterfaces returned no interfaces"); + return {}; + } + + const auto res = + std::ranges::find_if(network_interfaces, [&selected_network_interface](const auto& iface) { + return iface.name == selected_network_interface; + }); + + if (res != network_interfaces.end()) { + return *res; + } else { + LOG_ERROR(Network, "Couldn't find selected interface \"{}\"", selected_network_interface); + return {}; + } +} + } // namespace Network diff --git a/src/core/network/network_interface.h b/src/core/network/network_interface.h index d7184e14aa..980edb2f5c 100644 --- a/src/core/network/network_interface.h +++ b/src/core/network/network_interface.h @@ -4,6 +4,7 @@ #pragma once +#include #include #include @@ -18,8 +19,11 @@ namespace Network { struct NetworkInterface { std::string name; struct in_addr ip_address; + struct in_addr subnet_mask; + struct in_addr gateway; }; std::vector GetAvailableNetworkInterfaces(); +std::optional GetSelectedNetworkInterface(); } // namespace Network -- cgit v1.2.3 From 9701ec5ddf2fe7d979002106b9e7c48dcc42f3ac Mon Sep 17 00:00:00 2001 From: spholz <44805808+spholz@users.noreply.github.com> Date: Mon, 16 Aug 2021 12:06:35 +0200 Subject: network_interface: fix mingw-w64 build --- src/core/network/network_interface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/core/network/network_interface.cpp') diff --git a/src/core/network/network_interface.cpp b/src/core/network/network_interface.cpp index b719da8819..c60deb196b 100644 --- a/src/core/network/network_interface.cpp +++ b/src/core/network/network_interface.cpp @@ -69,7 +69,7 @@ std::vector GetAvailableNetworkInterfaces() { continue; } - struct in_addr gateway = {0}; + struct in_addr gateway{.S_un{.S_addr{0}}}; if (current_address->FirstGatewayAddress != nullptr && current_address->FirstGatewayAddress->Address.lpSockaddr != nullptr) { gateway = Common::BitCast( -- cgit v1.2.3 From 12499a34e653e70d9f84102ca4ca1dcdf5a9cffe Mon Sep 17 00:00:00 2001 From: Sönke Holz Date: Mon, 16 Aug 2021 12:18:19 +0200 Subject: network_interface: correct formatting --- src/core/network/network_interface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/core/network/network_interface.cpp') diff --git a/src/core/network/network_interface.cpp b/src/core/network/network_interface.cpp index c60deb196b..cecc9aa115 100644 --- a/src/core/network/network_interface.cpp +++ b/src/core/network/network_interface.cpp @@ -69,7 +69,7 @@ std::vector GetAvailableNetworkInterfaces() { continue; } - struct in_addr gateway{.S_un{.S_addr{0}}}; + struct in_addr gateway = {.S_un{.S_addr{0}}}; if (current_address->FirstGatewayAddress != nullptr && current_address->FirstGatewayAddress->Address.lpSockaddr != nullptr) { gateway = Common::BitCast( -- cgit v1.2.3