Pass NetworkCapabilities into DnsManager
1. At present, the transportTypes in NetworkCapabilities have been passed into DnsManager::updateTransportsForNetwork() as a parameter. In the following CL, we also need to pass the 'metered' (also in NetworkCapabilities) as a parameter to the function. Instead of passing the members of NetworkCapabilities one by one, it is better to pass the entire NetworkCapabilities. 2. Rename updateTransportsForNetwork() to updateCapabilitiesForNetwork(). Bug: 288340533 Test: presubmit Change-Id: I0966124f87b12c1d5a2eaee681885c3d5c7f74dc
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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<Integer, PrivateDnsValidationStatuses> mPrivateDnsValidationMap;
|
||||
private final Map<Integer, LinkProperties> mLinkPropertiesMap;
|
||||
private final Map<Integer, int[]> mTransportsMap;
|
||||
private final Map<Integer, NetworkCapabilities> 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) {
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user