diff options
| author | Briar <205427297+icy-briar@users.noreply.github.com> | 2025-04-10 00:40:07 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-10 00:40:07 +0200 |
| commit | 216ded699791dcbfbfc122b6fc2b12d1252f15bb (patch) | |
| tree | 365ab97c70a035f46f62d5bf153990b7859b7e06 /src/core/internal_network | |
| parent | 5f0542c2bf2edb3481ca042e6ad3367b68634bf0 (diff) | |
android: Improve network gateway handling
Diffstat (limited to 'src/core/internal_network')
| -rw-r--r-- | src/core/internal_network/network_interface.cpp | 24 |
1 files changed, 20 insertions, 4 deletions
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 <algorithm> #include <fstream> @@ -117,6 +117,16 @@ std::vector<NetworkInterface> 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<struct sockaddr_in>(*ifa->ifa_addr).sin_addr}, + .subnet_mask{Common::BitCast<struct sockaddr_in>(*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<NetworkInterface> GetAvailableNetworkInterfaces() { .ip_address{Common::BitCast<struct sockaddr_in>(*ifa->ifa_addr).sin_addr}, .subnet_mask{Common::BitCast<struct sockaddr_in>(*ifa->ifa_netmask).sin_addr}, .gateway{in_addr{.s_addr = gateway}}}); +#endif // ANDROID } freeifaddrs(ifaddr); - return result; } -#endif +#endif // _WIN32 std::optional<NetworkInterface> GetSelectedNetworkInterface() { const auto& selected_network_interface = Settings::values.network_interface.GetValue(); @@ -194,6 +204,12 @@ std::optional<NetworkInterface> 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; |
