| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef NET_DNS_LOOPBACK_ONLY_H_ |
| #define NET_DNS_LOOPBACK_ONLY_H_ |
| |
| #include <type_traits> |
| #include "base/functional/callback.h" |
| #include "net/base/net_export.h" |
| |
| namespace net { |
| |
| // Results in true if it can determine that only loopback addresses are |
| // configured. I.e. if at most 127.0.0.1 and ::1 are routable. Note this results |
| // in true as long as there are no non-loopback, active internet connections. |
| // There do not have to be any loopback interfaces for this to result in true. |
| // Also results in false if it cannot determine this. |
| // |
| // The result is always passed to `finished_cb`, which is posted to the current |
| // thread. |
| // |
| // If the result cannot be computed without blocking, this will post a |
| // CONTINUE_ON_SHUTDOWN task to a thread pool which can take 40-100ms on some |
| // systems. |
| // |
| // IMPORTANT NOTE: the Posix (except Android) and Fuchsia implementations |
| // consider IPv6 link-local addresses to be loopback, because network interfaces |
| // may be configured with IPv6 link-local addresses regardless of network |
| // connectivity and are not used for network connections. IPv4 link-local |
| // addresses are part of APIPA, can be used for network connections, and are not |
| // typically configured automatically for network interfaces. See |
| // https://codereview.chromium.org/3331024 when this behavior was originally |
| // added, and the linked bug https://crbug.com/55041 for an example. Otherwise, |
| // if IPv6 link-local addresses are not considered loopback, then |
| // host_resolver_system_task.cc will always use AI_ADDRCONFIG for getaddrinfo() |
| // on a system with link-local IPv6 addresses, and then because there are no |
| // non-loopback IPv4 addresses configured, getaddrinfo() will refuse to resolve |
| // any name to any IPv4 address. This is problematic because then localhost will |
| // not resolve to 127.0.0.1. |
| // |
| // See https://fedoraproject.org/wiki/QA/Networking/NameResolution/ADDRCONFIG |
| // for a writeup on the issues that AI_ADDRCONFIG, as well as its handling of |
| // IPv6 link-local addresses, can cause. |
| void NET_EXPORT |
| RunHaveOnlyLoopbackAddressesJob(base::OnceCallback<void(bool)> finished_cb); |
| |
| } // namespace net |
| |
| #endif // NET_DNS_LOOPBACK_ONLY_H_ |