diff --git a/framework/src/android/net/ConnectivitySettingsManager.java b/framework/src/android/net/ConnectivitySettingsManager.java index ba7df7ff9b102624a2b2a5dc8fa05b43b8eef7f6..f3758c54c59921512b3bd73892031529f0616ef1 100644 --- a/framework/src/android/net/ConnectivitySettingsManager.java +++ b/framework/src/android/net/ConnectivitySettingsManager.java @@ -356,6 +356,12 @@ public class ConnectivitySettingsManager { */ public static final int PRIVATE_DNS_MODE_OFF = ConnectivitySettingsUtils.PRIVATE_DNS_MODE_OFF; + /** + * @hide + */ + public static final int PRIVATE_DNS_MODE_QUADNINE = + ConnectivitySettingsUtils.PRIVATE_DNS_MODE_QUADNINE; + /** * One of the private DNS modes that indicates the private DNS mode is automatic, which * will try to use the current DNS as private DNS. @@ -371,10 +377,17 @@ public class ConnectivitySettingsManager { public static final int PRIVATE_DNS_MODE_PROVIDER_HOSTNAME = ConnectivitySettingsUtils.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; + /** + * @hide + */ + public static final String PRIVATE_DNS_SPECIFIER_QUADNINE = "dns.quad9.net"; + + /** @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(value = { PRIVATE_DNS_MODE_OFF, + PRIVATE_DNS_MODE_QUADNINE, PRIVATE_DNS_MODE_OPPORTUNISTIC, PRIVATE_DNS_MODE_PROVIDER_HOSTNAME, }) @@ -829,6 +842,7 @@ public class ConnectivitySettingsManager { public static void setPrivateDnsDefaultMode(@NonNull Context context, @NonNull @PrivateDnsMode int mode) { if (!(mode == PRIVATE_DNS_MODE_OFF + || mode == PRIVATE_DNS_MODE_QUADNINE || mode == PRIVATE_DNS_MODE_OPPORTUNISTIC || mode == PRIVATE_DNS_MODE_PROVIDER_HOSTNAME)) { throw new IllegalArgumentException("Invalid private dns mode"); diff --git a/service/src/com/android/server/connectivity/DnsManager.java b/service/src/com/android/server/connectivity/DnsManager.java index c940eecd4638f709839231a5edf5ef2430c5ece6..20f2e9bf98e9ba7d5f9c9dd518d7804b622ed484 100644 --- a/service/src/com/android/server/connectivity/DnsManager.java +++ b/service/src/com/android/server/connectivity/DnsManager.java @@ -23,8 +23,10 @@ import static android.net.ConnectivitySettingsManager.DNS_RESOLVER_SUCCESS_THRES import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_DEFAULT_MODE; import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE; import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_OFF; +import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_QUADNINE; import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER; +import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER_QUADNINE; import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.VALIDATION_RESULT_FAILURE; import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.VALIDATION_RESULT_SUCCESS; @@ -145,6 +147,10 @@ public class DnsManager { return new PrivateDnsConfig(specifier, null); } + if (PRIVATE_DNS_MODE_QUADNINE == mode) { + return new PrivateDnsConfig(PRIVATE_DNS_SPECIFIER_QUADNINE, null); + } + return new PrivateDnsConfig(useTls); } diff --git a/staticlibs/framework/com/android/net/module/util/ConnectivitySettingsUtils.java b/staticlibs/framework/com/android/net/module/util/ConnectivitySettingsUtils.java index f4856b344fd47300fb72586c9734ba784e46c70b..08619fe3e27af849789ec5f3349ad5f4054da898 100644 --- a/staticlibs/framework/com/android/net/module/util/ConnectivitySettingsUtils.java +++ b/staticlibs/framework/com/android/net/module/util/ConnectivitySettingsUtils.java @@ -32,10 +32,12 @@ public class ConnectivitySettingsUtils { public static final int PRIVATE_DNS_MODE_OFF = 1; public static final int PRIVATE_DNS_MODE_OPPORTUNISTIC = 2; public static final int PRIVATE_DNS_MODE_PROVIDER_HOSTNAME = 3; + public static final int PRIVATE_DNS_MODE_QUADNINE = 4; public static final String PRIVATE_DNS_DEFAULT_MODE = "private_dns_default_mode"; public static final String PRIVATE_DNS_MODE = "private_dns_mode"; public static final String PRIVATE_DNS_MODE_OFF_STRING = "off"; + public static final String PRIVATE_DNS_MODE_QUADNINE_STRING = "quadnine"; public static final String PRIVATE_DNS_MODE_OPPORTUNISTIC_STRING = "opportunistic"; public static final String PRIVATE_DNS_MODE_PROVIDER_HOSTNAME_STRING = "hostname"; public static final String PRIVATE_DNS_SPECIFIER = "private_dns_specifier"; @@ -50,6 +52,8 @@ public class ConnectivitySettingsUtils { switch (mode) { case PRIVATE_DNS_MODE_OFF: return PRIVATE_DNS_MODE_OFF_STRING; + case PRIVATE_DNS_MODE_QUADNINE: + return PRIVATE_DNS_MODE_QUADNINE_STRING; case PRIVATE_DNS_MODE_OPPORTUNISTIC: return PRIVATE_DNS_MODE_OPPORTUNISTIC_STRING; case PRIVATE_DNS_MODE_PROVIDER_HOSTNAME: @@ -67,6 +71,8 @@ public class ConnectivitySettingsUtils { switch (mode) { case "off": return PRIVATE_DNS_MODE_OFF; + case "quadnine": + return PRIVATE_DNS_MODE_QUADNINE; case "hostname": return PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; case "opportunistic": @@ -100,6 +106,7 @@ public class ConnectivitySettingsUtils { */ public static void setPrivateDnsMode(@NonNull Context context, int mode) { if (!(mode == PRIVATE_DNS_MODE_OFF + || mode == PRIVATE_DNS_MODE_QUADNINE || mode == PRIVATE_DNS_MODE_OPPORTUNISTIC || mode == PRIVATE_DNS_MODE_PROVIDER_HOSTNAME)) { throw new IllegalArgumentException("Invalid private dns mode: " + mode);