diff --git a/src/core/internal_network/network_interface.cpp b/src/core/internal_network/network_interface.cpp index 7c37f660bb..3d99bdf5ce 100644 --- a/src/core/internal_network/network_interface.cpp +++ b/src/core/internal_network/network_interface.cpp @@ -1,5 +1,5 @@ -// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later +// SPDX-FileCopyrightText: Copyright yuzu/Citra Emulator Project / Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later #include #include @@ -117,6 +117,16 @@ std::vector GetAvailableNetworkInterfaces() { continue; } +#ifdef ANDROID + // On Android, we can't reliably get gateway info from /proc/net/route + // Just use 0 as the gateway address + result.emplace_back(NetworkInterface{ + .name{ifa->ifa_name}, + .ip_address{Common::BitCast(*ifa->ifa_addr).sin_addr}, + .subnet_mask{Common::BitCast(*ifa->ifa_netmask).sin_addr}, + .gateway{in_addr{.s_addr = 0}} + }); +#else u32 gateway{}; std::ifstream file{"/proc/net/route"}; @@ -177,14 +187,14 @@ std::vector GetAvailableNetworkInterfaces() { .ip_address{Common::BitCast(*ifa->ifa_addr).sin_addr}, .subnet_mask{Common::BitCast(*ifa->ifa_netmask).sin_addr}, .gateway{in_addr{.s_addr = gateway}}}); +#endif // ANDROID } freeifaddrs(ifaddr); - return result; } -#endif +#endif // _WIN32 std::optional GetSelectedNetworkInterface() { const auto& selected_network_interface = Settings::values.network_interface.GetValue(); @@ -194,6 +204,12 @@ std::optional GetSelectedNetworkInterface() { return std::nullopt; } + #ifdef __ANDROID__ + if (selected_network_interface.empty()) { + return network_interfaces[0]; + } + #endif + const auto res = std::ranges::find_if(network_interfaces, [&selected_network_interface](const auto& iface) { return iface.name == selected_network_interface;