1*6777b538SAndroid Build Coastguard Worker // Copyright 2018 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef NET_DNS_DNS_CONFIG_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_DNS_DNS_CONFIG_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <memory> 9*6777b538SAndroid Build Coastguard Worker #include <string> 10*6777b538SAndroid Build Coastguard Worker #include <vector> 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h" 13*6777b538SAndroid Build Coastguard Worker #include "base/values.h" 14*6777b538SAndroid Build Coastguard Worker #include "net/base/ip_endpoint.h" 15*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 16*6777b538SAndroid Build Coastguard Worker #include "net/dns/dns_hosts.h" 17*6777b538SAndroid Build Coastguard Worker #include "net/dns/public/dns_over_https_config.h" 18*6777b538SAndroid Build Coastguard Worker #include "net/dns/public/secure_dns_mode.h" 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Worker namespace net { 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker constexpr base::TimeDelta kDnsDefaultFallbackPeriod = base::Seconds(1); 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker // DnsConfig stores configuration of the system resolver. 25*6777b538SAndroid Build Coastguard Worker struct NET_EXPORT DnsConfig { 26*6777b538SAndroid Build Coastguard Worker DnsConfig(); 27*6777b538SAndroid Build Coastguard Worker DnsConfig(const DnsConfig& other); 28*6777b538SAndroid Build Coastguard Worker DnsConfig(DnsConfig&& other); 29*6777b538SAndroid Build Coastguard Worker explicit DnsConfig(std::vector<IPEndPoint> nameservers); 30*6777b538SAndroid Build Coastguard Worker ~DnsConfig(); 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Worker DnsConfig& operator=(const DnsConfig& other); 33*6777b538SAndroid Build Coastguard Worker DnsConfig& operator=(DnsConfig&& other); 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Worker bool Equals(const DnsConfig& d) const; 36*6777b538SAndroid Build Coastguard Worker bool operator==(const DnsConfig& d) const; 37*6777b538SAndroid Build Coastguard Worker bool operator!=(const DnsConfig& d) const; 38*6777b538SAndroid Build Coastguard Worker 39*6777b538SAndroid Build Coastguard Worker bool EqualsIgnoreHosts(const DnsConfig& d) const; 40*6777b538SAndroid Build Coastguard Worker 41*6777b538SAndroid Build Coastguard Worker void CopyIgnoreHosts(const DnsConfig& src); 42*6777b538SAndroid Build Coastguard Worker 43*6777b538SAndroid Build Coastguard Worker // Returns a Dict representation of |this|. For performance reasons, the 44*6777b538SAndroid Build Coastguard Worker // Dict only contains the number of hosts rather than the full list. 45*6777b538SAndroid Build Coastguard Worker base::Value::Dict ToDict() const; 46*6777b538SAndroid Build Coastguard Worker IsValidDnsConfig47*6777b538SAndroid Build Coastguard Worker bool IsValid() const { 48*6777b538SAndroid Build Coastguard Worker return !nameservers.empty() || !doh_config.servers().empty(); 49*6777b538SAndroid Build Coastguard Worker } 50*6777b538SAndroid Build Coastguard Worker 51*6777b538SAndroid Build Coastguard Worker // List of name server addresses. 52*6777b538SAndroid Build Coastguard Worker std::vector<IPEndPoint> nameservers; 53*6777b538SAndroid Build Coastguard Worker 54*6777b538SAndroid Build Coastguard Worker // Status of system DNS-over-TLS (DoT). 55*6777b538SAndroid Build Coastguard Worker bool dns_over_tls_active = false; 56*6777b538SAndroid Build Coastguard Worker std::string dns_over_tls_hostname; 57*6777b538SAndroid Build Coastguard Worker 58*6777b538SAndroid Build Coastguard Worker // Suffix search list; used on first lookup when number of dots in given name 59*6777b538SAndroid Build Coastguard Worker // is less than |ndots|. 60*6777b538SAndroid Build Coastguard Worker std::vector<std::string> search; 61*6777b538SAndroid Build Coastguard Worker 62*6777b538SAndroid Build Coastguard Worker DnsHosts hosts; 63*6777b538SAndroid Build Coastguard Worker 64*6777b538SAndroid Build Coastguard Worker // True if there are options set in the system configuration that are not yet 65*6777b538SAndroid Build Coastguard Worker // supported by DnsClient. 66*6777b538SAndroid Build Coastguard Worker bool unhandled_options = false; 67*6777b538SAndroid Build Coastguard Worker 68*6777b538SAndroid Build Coastguard Worker // AppendToMultiLabelName: is suffix search performed for multi-label names? 69*6777b538SAndroid Build Coastguard Worker // True, except on Windows where it can be configured. 70*6777b538SAndroid Build Coastguard Worker bool append_to_multi_label_name = true; 71*6777b538SAndroid Build Coastguard Worker 72*6777b538SAndroid Build Coastguard Worker // Resolver options; see man resolv.conf. 73*6777b538SAndroid Build Coastguard Worker 74*6777b538SAndroid Build Coastguard Worker // Minimum number of dots before global resolution precedes |search|. 75*6777b538SAndroid Build Coastguard Worker int ndots = 1; 76*6777b538SAndroid Build Coastguard Worker // Time between retransmissions, see res_state.retrans. 77*6777b538SAndroid Build Coastguard Worker // Used by Chrome as the initial transaction attempt fallback period (before 78*6777b538SAndroid Build Coastguard Worker // exponential backoff and dynamic period determination based on previous 79*6777b538SAndroid Build Coastguard Worker // attempts.) 80*6777b538SAndroid Build Coastguard Worker base::TimeDelta fallback_period = kDnsDefaultFallbackPeriod; 81*6777b538SAndroid Build Coastguard Worker // Maximum number of attempts, see res_state.retry. 82*6777b538SAndroid Build Coastguard Worker int attempts = 2; 83*6777b538SAndroid Build Coastguard Worker // Maximum number of times a DoH server is attempted per attempted per DNS 84*6777b538SAndroid Build Coastguard Worker // transaction. This is separate from the global failure limit. 85*6777b538SAndroid Build Coastguard Worker int doh_attempts = 1; 86*6777b538SAndroid Build Coastguard Worker // Round robin entries in |nameservers| for subsequent requests. 87*6777b538SAndroid Build Coastguard Worker bool rotate = false; 88*6777b538SAndroid Build Coastguard Worker 89*6777b538SAndroid Build Coastguard Worker // Indicates system configuration uses local IPv6 connectivity, e.g., 90*6777b538SAndroid Build Coastguard Worker // DirectAccess. This is exposed for HostResolver to skip IPv6 probes, 91*6777b538SAndroid Build Coastguard Worker // as it may cause them to return incorrect results. 92*6777b538SAndroid Build Coastguard Worker bool use_local_ipv6 = false; 93*6777b538SAndroid Build Coastguard Worker 94*6777b538SAndroid Build Coastguard Worker // DNS over HTTPS server configuration. 95*6777b538SAndroid Build Coastguard Worker DnsOverHttpsConfig doh_config; 96*6777b538SAndroid Build Coastguard Worker 97*6777b538SAndroid Build Coastguard Worker // The default SecureDnsMode to use when resolving queries. It can be 98*6777b538SAndroid Build Coastguard Worker // overridden for individual requests (such as requests to resolve a DoH 99*6777b538SAndroid Build Coastguard Worker // server hostname) using |HostResolver::ResolveHostParameters:: 100*6777b538SAndroid Build Coastguard Worker // secure_dns_mode_override|. 101*6777b538SAndroid Build Coastguard Worker SecureDnsMode secure_dns_mode = SecureDnsMode::kOff; 102*6777b538SAndroid Build Coastguard Worker 103*6777b538SAndroid Build Coastguard Worker // If set to |true|, we will attempt to upgrade the user's DNS configuration 104*6777b538SAndroid Build Coastguard Worker // to use DoH server(s) operated by the same provider(s) when the user is 105*6777b538SAndroid Build Coastguard Worker // in AUTOMATIC mode and has not pre-specified DoH servers. 106*6777b538SAndroid Build Coastguard Worker bool allow_dns_over_https_upgrade = false; 107*6777b538SAndroid Build Coastguard Worker }; 108*6777b538SAndroid Build Coastguard Worker 109*6777b538SAndroid Build Coastguard Worker } // namespace net 110*6777b538SAndroid Build Coastguard Worker 111*6777b538SAndroid Build Coastguard Worker #endif // NET_DNS_DNS_CONFIG_H_ 112