diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java index c4cb4c7bcc..5ed50ce96a 100755 --- a/service/src/com/android/server/ConnectivityService.java +++ b/service/src/com/android/server/ConnectivityService.java @@ -5074,8 +5074,8 @@ public class ConnectivityService extends IConnectivityManager.Stub } mNetd.networkCreate(config); mDnsResolver.createNetworkCache(nai.network.getNetId()); - mDnsManager.updateTransportsForNetwork(nai.network.getNetId(), - nai.networkCapabilities.getTransportTypes()); + mDnsManager.updateCapabilitiesForNetwork(nai.network.getNetId(), + nai.networkCapabilities); return true; } catch (RemoteException | ServiceSpecificException e) { loge("Error creating network " + nai.toShortString() + ": " + e.getMessage()); @@ -8899,8 +8899,7 @@ public class ConnectivityService extends IConnectivityManager.Stub propagateUnderlyingNetworkCapabilities(nai.network); if (!newNc.equalsTransportTypes(prevNc)) { - mDnsManager.updateTransportsForNetwork( - nai.network.getNetId(), newNc.getTransportTypes()); + mDnsManager.updateCapabilitiesForNetwork(nai.network.getNetId(), newNc); } maybeSendProxyBroadcast(nai, prevNc, newNc); diff --git a/service/src/com/android/server/connectivity/DnsManager.java b/service/src/com/android/server/connectivity/DnsManager.java index 1493cae79a..81b2289ebe 100644 --- a/service/src/com/android/server/connectivity/DnsManager.java +++ b/service/src/com/android/server/connectivity/DnsManager.java @@ -38,6 +38,7 @@ import android.net.IDnsResolver; import android.net.InetAddresses; import android.net.LinkProperties; import android.net.Network; +import android.net.NetworkCapabilities; import android.net.ResolverParamsParcel; import android.net.Uri; import android.net.shared.PrivateDnsConfig; @@ -251,7 +252,7 @@ public class DnsManager { // TODO: Replace the Map with SparseArrays. private final Map mPrivateDnsValidationMap; private final Map mLinkPropertiesMap; - private final Map mTransportsMap; + private final Map mNetworkCapabilitiesMap; private int mSampleValidity; private int mSuccessThreshold; @@ -265,7 +266,7 @@ public class DnsManager { mPrivateDnsMap = new ConcurrentHashMap<>(); mPrivateDnsValidationMap = new HashMap<>(); mLinkPropertiesMap = new HashMap<>(); - mTransportsMap = new HashMap<>(); + mNetworkCapabilitiesMap = new HashMap<>(); // TODO: Create and register ContentObservers to track every setting // used herein, posting messages to respond to changes. @@ -278,7 +279,7 @@ public class DnsManager { public void removeNetwork(Network network) { mPrivateDnsMap.remove(network.getNetId()); mPrivateDnsValidationMap.remove(network.getNetId()); - mTransportsMap.remove(network.getNetId()); + mNetworkCapabilitiesMap.remove(network.getNetId()); mLinkPropertiesMap.remove(network.getNetId()); } @@ -326,12 +327,12 @@ public class DnsManager { /** * When creating a new network or transport types are changed in a specific network, - * transport types are always saved to a hashMap before update dns config. + * capabilities are always saved to a hashMap before update dns config. * When destroying network, the specific network will be removed from the hashMap. * The hashMap is always accessed on the same thread. */ - public void updateTransportsForNetwork(int netId, @NonNull int[] transportTypes) { - mTransportsMap.put(netId, transportTypes); + public void updateCapabilitiesForNetwork(int netId, @NonNull final NetworkCapabilities nc) { + mNetworkCapabilitiesMap.put(netId, nc); sendDnsConfigurationForNetwork(netId); } @@ -351,8 +352,8 @@ public class DnsManager { */ public void sendDnsConfigurationForNetwork(int netId) { final LinkProperties lp = mLinkPropertiesMap.get(netId); - final int[] transportTypes = mTransportsMap.get(netId); - if (lp == null || transportTypes == null) return; + final NetworkCapabilities nc = mNetworkCapabilitiesMap.get(netId); + if (lp == null || nc == null) return; updateParametersSettings(); final ResolverParamsParcel paramsParcel = new ResolverParamsParcel(); @@ -383,7 +384,7 @@ public class DnsManager { .collect(Collectors.toList())) : useTls ? paramsParcel.servers // Opportunistic : new String[0]; // Off - paramsParcel.transportTypes = transportTypes; + paramsParcel.transportTypes = nc.getTransportTypes(); // Prepare to track the validation status of the DNS servers in the // resolver config when private DNS is in opportunistic or strict mode. if (useTls) { diff --git a/tests/unit/java/com/android/server/connectivity/DnsManagerTest.java b/tests/unit/java/com/android/server/connectivity/DnsManagerTest.java index 24aecdb90a..9a6fd38024 100644 --- a/tests/unit/java/com/android/server/connectivity/DnsManagerTest.java +++ b/tests/unit/java/com/android/server/connectivity/DnsManagerTest.java @@ -169,10 +169,12 @@ public class DnsManagerTest { lp.addDnsServer(InetAddress.getByName("4.4.4.4")); // Send a validation event that is tracked on the alternate netId - mDnsManager.updateTransportsForNetwork(TEST_NETID, TEST_TRANSPORT_TYPES); + final NetworkCapabilities nc = new NetworkCapabilities(); + nc.setTransportTypes(TEST_TRANSPORT_TYPES); + mDnsManager.updateCapabilitiesForNetwork(TEST_NETID, nc); mDnsManager.noteDnsServersForNetwork(TEST_NETID, lp); mDnsManager.flushVmDnsCache(); - mDnsManager.updateTransportsForNetwork(TEST_NETID_ALTERNATE, TEST_TRANSPORT_TYPES); + mDnsManager.updateCapabilitiesForNetwork(TEST_NETID_ALTERNATE, nc); mDnsManager.noteDnsServersForNetwork(TEST_NETID_ALTERNATE, lp); mDnsManager.flushVmDnsCache(); mDnsManager.updatePrivateDnsValidation( @@ -205,7 +207,7 @@ public class DnsManagerTest { InetAddress.parseNumericAddress("6.6.6.6"), InetAddress.parseNumericAddress("2001:db8:66:66::1") })); - mDnsManager.updateTransportsForNetwork(TEST_NETID, TEST_TRANSPORT_TYPES); + mDnsManager.updateCapabilitiesForNetwork(TEST_NETID, nc); mDnsManager.noteDnsServersForNetwork(TEST_NETID, lp); mDnsManager.flushVmDnsCache(); fixedLp = new LinkProperties(lp); @@ -242,7 +244,9 @@ public class DnsManagerTest { // be tracked. LinkProperties lp = new LinkProperties(); lp.addDnsServer(InetAddress.getByName("3.3.3.3")); - mDnsManager.updateTransportsForNetwork(TEST_NETID, TEST_TRANSPORT_TYPES); + final NetworkCapabilities nc = new NetworkCapabilities(); + nc.setTransportTypes(TEST_TRANSPORT_TYPES); + mDnsManager.updateCapabilitiesForNetwork(TEST_NETID, nc); mDnsManager.noteDnsServersForNetwork(TEST_NETID, lp); mDnsManager.flushVmDnsCache(); mDnsManager.updatePrivateDnsValidation( @@ -256,7 +260,7 @@ public class DnsManagerTest { // Validation event has untracked netId mDnsManager.updatePrivateDns(new Network(TEST_NETID), mDnsManager.getPrivateDnsConfig()); - mDnsManager.updateTransportsForNetwork(TEST_NETID, TEST_TRANSPORT_TYPES); + mDnsManager.updateCapabilitiesForNetwork(TEST_NETID, nc); mDnsManager.noteDnsServersForNetwork(TEST_NETID, lp); mDnsManager.flushVmDnsCache(); mDnsManager.updatePrivateDnsValidation( @@ -307,7 +311,7 @@ public class DnsManagerTest { ConnectivitySettingsManager.setPrivateDnsMode(mCtx, PRIVATE_DNS_MODE_OFF); mDnsManager.updatePrivateDns(new Network(TEST_NETID), mDnsManager.getPrivateDnsConfig()); - mDnsManager.updateTransportsForNetwork(TEST_NETID, TEST_TRANSPORT_TYPES); + mDnsManager.updateCapabilitiesForNetwork(TEST_NETID, nc); mDnsManager.noteDnsServersForNetwork(TEST_NETID, lp); mDnsManager.flushVmDnsCache(); mDnsManager.updatePrivateDnsValidation( @@ -352,7 +356,9 @@ public class DnsManagerTest { lp.setInterfaceName(TEST_IFACENAME); lp.addDnsServer(InetAddress.getByName("3.3.3.3")); lp.addDnsServer(InetAddress.getByName("4.4.4.4")); - mDnsManager.updateTransportsForNetwork(TEST_NETID, TEST_TRANSPORT_TYPES); + final NetworkCapabilities nc = new NetworkCapabilities(); + nc.setTransportTypes(TEST_TRANSPORT_TYPES); + mDnsManager.updateCapabilitiesForNetwork(TEST_NETID, nc); mDnsManager.noteDnsServersForNetwork(TEST_NETID, lp); mDnsManager.flushVmDnsCache();