Merge "Pass all relevant resolver info to netd"
This commit is contained in:
@@ -4535,17 +4535,17 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
return nai.network.netId;
|
return nai.network.netId;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleRegisterNetworkAgent(NetworkAgentInfo na) {
|
private void handleRegisterNetworkAgent(NetworkAgentInfo nai) {
|
||||||
if (VDBG) log("Got NetworkAgent Messenger");
|
if (VDBG) log("Got NetworkAgent Messenger");
|
||||||
mNetworkAgentInfos.put(na.messenger, na);
|
mNetworkAgentInfos.put(nai.messenger, nai);
|
||||||
synchronized (mNetworkForNetId) {
|
synchronized (mNetworkForNetId) {
|
||||||
mNetworkForNetId.put(na.network.netId, na);
|
mNetworkForNetId.put(nai.network.netId, nai);
|
||||||
}
|
}
|
||||||
na.asyncChannel.connect(mContext, mTrackerHandler, na.messenger);
|
nai.asyncChannel.connect(mContext, mTrackerHandler, nai.messenger);
|
||||||
NetworkInfo networkInfo = na.networkInfo;
|
NetworkInfo networkInfo = nai.networkInfo;
|
||||||
na.networkInfo = null;
|
nai.networkInfo = null;
|
||||||
updateNetworkInfo(na, networkInfo);
|
updateNetworkInfo(nai, networkInfo);
|
||||||
updateUids(na, null, na.networkCapabilities);
|
updateUids(nai, null, nai.networkCapabilities);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateLinkProperties(NetworkAgentInfo networkAgent, LinkProperties oldLp) {
|
private void updateLinkProperties(NetworkAgentInfo networkAgent, LinkProperties oldLp) {
|
||||||
|
|||||||
@@ -192,6 +192,12 @@ public class DnsManager {
|
|||||||
|
|
||||||
public void setDnsConfigurationForNetwork(
|
public void setDnsConfigurationForNetwork(
|
||||||
int netId, LinkProperties lp, boolean isDefaultNetwork) {
|
int netId, LinkProperties lp, boolean isDefaultNetwork) {
|
||||||
|
final String[] assignedServers = NetworkUtils.makeStrings(lp.getDnsServers());
|
||||||
|
final String[] domainStrs = getDomainStrings(lp.getDomains());
|
||||||
|
|
||||||
|
updateParametersSettings();
|
||||||
|
final int[] params = { mSampleValidity, mSuccessThreshold, mMinSamples, mMaxSamples };
|
||||||
|
|
||||||
// We only use the PrivateDnsConfig data pushed to this class instance
|
// We only use the PrivateDnsConfig data pushed to this class instance
|
||||||
// from ConnectivityService because it works in coordination with
|
// from ConnectivityService because it works in coordination with
|
||||||
// NetworkMonitor to decide which networks need validation and runs the
|
// NetworkMonitor to decide which networks need validation and runs the
|
||||||
@@ -204,23 +210,20 @@ public class DnsManager {
|
|||||||
final boolean useTls = (privateDnsCfg != null) && privateDnsCfg.useTls;
|
final boolean useTls = (privateDnsCfg != null) && privateDnsCfg.useTls;
|
||||||
final boolean strictMode = (privateDnsCfg != null) && privateDnsCfg.inStrictMode();
|
final boolean strictMode = (privateDnsCfg != null) && privateDnsCfg.inStrictMode();
|
||||||
final String tlsHostname = strictMode ? privateDnsCfg.hostname : "";
|
final String tlsHostname = strictMode ? privateDnsCfg.hostname : "";
|
||||||
|
final String[] tlsServers =
|
||||||
final String[] serverStrs = NetworkUtils.makeStrings(
|
strictMode ? NetworkUtils.makeStrings(
|
||||||
strictMode ? Arrays.stream(privateDnsCfg.ips)
|
Arrays.stream(privateDnsCfg.ips)
|
||||||
.filter((ip) -> lp.isReachable(ip))
|
.filter((ip) -> lp.isReachable(ip))
|
||||||
.collect(Collectors.toList())
|
.collect(Collectors.toList()))
|
||||||
: lp.getDnsServers());
|
: useTls ? assignedServers // Opportunistic
|
||||||
final String[] domainStrs = getDomainStrings(lp.getDomains());
|
: new String[0]; // Off
|
||||||
|
|
||||||
updateParametersSettings();
|
|
||||||
final int[] params = { mSampleValidity, mSuccessThreshold, mMinSamples, mMaxSamples };
|
|
||||||
|
|
||||||
Slog.d(TAG, String.format("setDnsConfigurationForNetwork(%d, %s, %s, %s, %s, %s)",
|
Slog.d(TAG, String.format("setDnsConfigurationForNetwork(%d, %s, %s, %s, %s, %s)",
|
||||||
netId, Arrays.toString(serverStrs), Arrays.toString(domainStrs),
|
netId, Arrays.toString(assignedServers), Arrays.toString(domainStrs),
|
||||||
Arrays.toString(params), useTls, tlsHostname));
|
Arrays.toString(params), tlsHostname, Arrays.toString(tlsServers)));
|
||||||
try {
|
try {
|
||||||
mNMS.setDnsConfigurationForNetwork(
|
mNMS.setDnsConfigurationForNetwork(
|
||||||
netId, serverStrs, domainStrs, params, useTls, tlsHostname);
|
netId, assignedServers, domainStrs, params, tlsHostname, tlsServers);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Slog.e(TAG, "Error setting DNS configuration: " + e);
|
Slog.e(TAG, "Error setting DNS configuration: " + e);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ import static org.mockito.Matchers.anyInt;
|
|||||||
import static org.mockito.Matchers.anyString;
|
import static org.mockito.Matchers.anyString;
|
||||||
import static org.mockito.Mockito.any;
|
import static org.mockito.Mockito.any;
|
||||||
import static org.mockito.Mockito.atLeastOnce;
|
import static org.mockito.Mockito.atLeastOnce;
|
||||||
|
import static org.mockito.Mockito.eq;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.reset;
|
import static org.mockito.Mockito.reset;
|
||||||
@@ -133,6 +134,7 @@ import com.android.internal.util.test.BroadcastInterceptingContext;
|
|||||||
import com.android.internal.util.test.FakeSettingsProvider;
|
import com.android.internal.util.test.FakeSettingsProvider;
|
||||||
import com.android.server.connectivity.ConnectivityConstants;
|
import com.android.server.connectivity.ConnectivityConstants;
|
||||||
import com.android.server.connectivity.DefaultNetworkMetrics;
|
import com.android.server.connectivity.DefaultNetworkMetrics;
|
||||||
|
import com.android.server.connectivity.DnsManager;
|
||||||
import com.android.server.connectivity.IpConnectivityMetrics;
|
import com.android.server.connectivity.IpConnectivityMetrics;
|
||||||
import com.android.server.connectivity.MockableSystemProperties;
|
import com.android.server.connectivity.MockableSystemProperties;
|
||||||
import com.android.server.connectivity.NetworkAgentInfo;
|
import com.android.server.connectivity.NetworkAgentInfo;
|
||||||
@@ -749,6 +751,7 @@ public class ConnectivityServiceTest {
|
|||||||
|
|
||||||
// NetworkMonitor implementation allowing overriding of Internet connectivity probe result.
|
// NetworkMonitor implementation allowing overriding of Internet connectivity probe result.
|
||||||
private class WrappedNetworkMonitor extends NetworkMonitor {
|
private class WrappedNetworkMonitor extends NetworkMonitor {
|
||||||
|
public Handler connectivityHandler;
|
||||||
// HTTP response code fed back to NetworkMonitor for Internet connectivity probe.
|
// HTTP response code fed back to NetworkMonitor for Internet connectivity probe.
|
||||||
public int gen204ProbeResult = 500;
|
public int gen204ProbeResult = 500;
|
||||||
public String gen204ProbeRedirectUrl = null;
|
public String gen204ProbeRedirectUrl = null;
|
||||||
@@ -758,6 +761,7 @@ public class ConnectivityServiceTest {
|
|||||||
IpConnectivityLog log) {
|
IpConnectivityLog log) {
|
||||||
super(context, handler, networkAgentInfo, defaultRequest, log,
|
super(context, handler, networkAgentInfo, defaultRequest, log,
|
||||||
NetworkMonitor.NetworkMonitorSettings.DEFAULT);
|
NetworkMonitor.NetworkMonitorSettings.DEFAULT);
|
||||||
|
connectivityHandler = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -3664,18 +3668,29 @@ public class ConnectivityServiceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testBasicDnsConfigurationPushed() throws Exception {
|
public void testBasicDnsConfigurationPushed() throws Exception {
|
||||||
|
final String IFNAME = "test_rmnet_data0";
|
||||||
|
final String[] EMPTY_TLS_SERVERS = new String[0];
|
||||||
mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
|
mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
|
||||||
waitForIdle();
|
waitForIdle();
|
||||||
verify(mNetworkManagementService, never()).setDnsConfigurationForNetwork(
|
verify(mNetworkManagementService, never()).setDnsConfigurationForNetwork(
|
||||||
anyInt(), any(), any(), any(), anyBoolean(), anyString());
|
anyInt(), any(), any(), any(), anyString(), eq(EMPTY_TLS_SERVERS));
|
||||||
|
|
||||||
final LinkProperties cellLp = new LinkProperties();
|
final LinkProperties cellLp = new LinkProperties();
|
||||||
cellLp.setInterfaceName("test_rmnet_data0");
|
cellLp.setInterfaceName(IFNAME);
|
||||||
|
// Add IPv4 and IPv6 default routes, because DNS-over-TLS code does
|
||||||
|
// "is-reachable" testing in order to not program netd with unreachable
|
||||||
|
// nameservers that it might try repeated to validate.
|
||||||
|
cellLp.addLinkAddress(new LinkAddress("192.0.2.4/24"));
|
||||||
|
cellLp.addRoute(new RouteInfo((IpPrefix) null, InetAddress.getByName("192.0.2.4"), IFNAME));
|
||||||
|
cellLp.addLinkAddress(new LinkAddress("2001:db8:1::1/64"));
|
||||||
|
cellLp.addRoute(
|
||||||
|
new RouteInfo((IpPrefix) null, InetAddress.getByName("2001:db8:1::1"), IFNAME));
|
||||||
mCellNetworkAgent.sendLinkProperties(cellLp);
|
mCellNetworkAgent.sendLinkProperties(cellLp);
|
||||||
mCellNetworkAgent.connect(false);
|
mCellNetworkAgent.connect(false);
|
||||||
waitForIdle();
|
waitForIdle();
|
||||||
verify(mNetworkManagementService, times(1)).setDnsConfigurationForNetwork(
|
verify(mNetworkManagementService, times(1)).setDnsConfigurationForNetwork(
|
||||||
anyInt(), mStringArrayCaptor.capture(), any(), any(), anyBoolean(), anyString());
|
anyInt(), mStringArrayCaptor.capture(), any(), any(),
|
||||||
|
anyString(), eq(EMPTY_TLS_SERVERS));
|
||||||
// CS tells netd about the empty DNS config for this network.
|
// CS tells netd about the empty DNS config for this network.
|
||||||
assertEmpty(mStringArrayCaptor.getValue());
|
assertEmpty(mStringArrayCaptor.getValue());
|
||||||
reset(mNetworkManagementService);
|
reset(mNetworkManagementService);
|
||||||
@@ -3684,7 +3699,8 @@ public class ConnectivityServiceTest {
|
|||||||
mCellNetworkAgent.sendLinkProperties(cellLp);
|
mCellNetworkAgent.sendLinkProperties(cellLp);
|
||||||
waitForIdle();
|
waitForIdle();
|
||||||
verify(mNetworkManagementService, times(1)).setDnsConfigurationForNetwork(
|
verify(mNetworkManagementService, times(1)).setDnsConfigurationForNetwork(
|
||||||
anyInt(), mStringArrayCaptor.capture(), any(), any(), anyBoolean(), anyString());
|
anyInt(), mStringArrayCaptor.capture(), any(), any(),
|
||||||
|
anyString(), eq(EMPTY_TLS_SERVERS));
|
||||||
assertEquals(1, mStringArrayCaptor.getValue().length);
|
assertEquals(1, mStringArrayCaptor.getValue().length);
|
||||||
assertTrue(ArrayUtils.contains(mStringArrayCaptor.getValue(), "2001:db8::1"));
|
assertTrue(ArrayUtils.contains(mStringArrayCaptor.getValue(), "2001:db8::1"));
|
||||||
reset(mNetworkManagementService);
|
reset(mNetworkManagementService);
|
||||||
@@ -3693,7 +3709,26 @@ public class ConnectivityServiceTest {
|
|||||||
mCellNetworkAgent.sendLinkProperties(cellLp);
|
mCellNetworkAgent.sendLinkProperties(cellLp);
|
||||||
waitForIdle();
|
waitForIdle();
|
||||||
verify(mNetworkManagementService, times(1)).setDnsConfigurationForNetwork(
|
verify(mNetworkManagementService, times(1)).setDnsConfigurationForNetwork(
|
||||||
anyInt(), mStringArrayCaptor.capture(), any(), any(), anyBoolean(), anyString());
|
anyInt(), mStringArrayCaptor.capture(), any(), any(),
|
||||||
|
anyString(), eq(EMPTY_TLS_SERVERS));
|
||||||
|
assertEquals(2, mStringArrayCaptor.getValue().length);
|
||||||
|
assertTrue(ArrayUtils.containsAll(mStringArrayCaptor.getValue(),
|
||||||
|
new String[]{"2001:db8::1", "192.0.2.1"}));
|
||||||
|
reset(mNetworkManagementService);
|
||||||
|
|
||||||
|
final String TLS_SPECIFIER = "tls.example.com";
|
||||||
|
final String TLS_SERVER6 = "2001:db8:53::53";
|
||||||
|
final InetAddress[] TLS_IPS = new InetAddress[]{ InetAddress.getByName(TLS_SERVER6) };
|
||||||
|
final String[] TLS_SERVERS = new String[]{ TLS_SERVER6 };
|
||||||
|
final Handler h = mCellNetworkAgent.getWrappedNetworkMonitor().connectivityHandler;
|
||||||
|
h.sendMessage(h.obtainMessage(
|
||||||
|
NetworkMonitor.EVENT_PRIVATE_DNS_CONFIG_RESOLVED, 0,
|
||||||
|
mCellNetworkAgent.getNetwork().netId,
|
||||||
|
new DnsManager.PrivateDnsConfig(TLS_SPECIFIER, TLS_IPS)));
|
||||||
|
waitForIdle();
|
||||||
|
verify(mNetworkManagementService, times(1)).setDnsConfigurationForNetwork(
|
||||||
|
anyInt(), mStringArrayCaptor.capture(), any(), any(),
|
||||||
|
eq(TLS_SPECIFIER), eq(TLS_SERVERS));
|
||||||
assertEquals(2, mStringArrayCaptor.getValue().length);
|
assertEquals(2, mStringArrayCaptor.getValue().length);
|
||||||
assertTrue(ArrayUtils.containsAll(mStringArrayCaptor.getValue(),
|
assertTrue(ArrayUtils.containsAll(mStringArrayCaptor.getValue(),
|
||||||
new String[]{"2001:db8::1", "192.0.2.1"}));
|
new String[]{"2001:db8::1", "192.0.2.1"}));
|
||||||
|
|||||||
Reference in New Issue
Block a user