Merge "Use IDnsResolverUnsolicitedEventListener"
This commit is contained in:
@@ -90,6 +90,10 @@ import static android.net.OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID_
|
||||
import static android.net.OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY;
|
||||
import static android.net.OemNetworkPreferences.OEM_NETWORK_PREFERENCE_UNINITIALIZED;
|
||||
import static android.net.RouteInfo.RTN_UNREACHABLE;
|
||||
import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.PREFIX_OPERATION_ADDED;
|
||||
import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.PREFIX_OPERATION_REMOVED;
|
||||
import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.VALIDATION_RESULT_FAILURE;
|
||||
import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.VALIDATION_RESULT_SUCCESS;
|
||||
import static android.os.Process.INVALID_UID;
|
||||
import static android.system.OsConstants.IPPROTO_TCP;
|
||||
|
||||
@@ -217,6 +221,8 @@ import android.net.Uri;
|
||||
import android.net.VpnManager;
|
||||
import android.net.VpnTransportInfo;
|
||||
import android.net.metrics.IpConnectivityLog;
|
||||
import android.net.resolv.aidl.Nat64PrefixEventParcel;
|
||||
import android.net.resolv.aidl.PrivateDnsValidationEventParcel;
|
||||
import android.net.shared.NetworkMonitorUtils;
|
||||
import android.net.shared.PrivateDnsConfig;
|
||||
import android.net.util.MultinetworkPolicyTracker;
|
||||
@@ -5919,6 +5925,16 @@ public class ConnectivityServiceTest {
|
||||
assertEquals("strict.example.com", cbi.getLp().getPrivateDnsServerName());
|
||||
}
|
||||
|
||||
private PrivateDnsValidationEventParcel makePrivateDnsValidationEvent(
|
||||
final int netId, final String ipAddress, final String hostname, final int validation) {
|
||||
final PrivateDnsValidationEventParcel event = new PrivateDnsValidationEventParcel();
|
||||
event.netId = netId;
|
||||
event.ipAddress = ipAddress;
|
||||
event.hostname = hostname;
|
||||
event.validation = validation;
|
||||
return event;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLinkPropertiesWithPrivateDnsValidationEvents() throws Exception {
|
||||
// The default on Android is opportunistic mode ("Automatic").
|
||||
@@ -5949,8 +5965,9 @@ public class ConnectivityServiceTest {
|
||||
|
||||
// Send a validation event for a server that is not part of the current
|
||||
// resolver config. The validation event should be ignored.
|
||||
mService.mNetdEventCallback.onPrivateDnsValidationEvent(
|
||||
mCellNetworkAgent.getNetwork().netId, "", "145.100.185.18", true);
|
||||
mService.mResolverUnsolEventCallback.onPrivateDnsValidationEvent(
|
||||
makePrivateDnsValidationEvent(mCellNetworkAgent.getNetwork().netId, "",
|
||||
"145.100.185.18", VALIDATION_RESULT_SUCCESS));
|
||||
cellNetworkCallback.assertNoCallback();
|
||||
|
||||
// Add a dns server to the LinkProperties.
|
||||
@@ -5967,20 +5984,23 @@ public class ConnectivityServiceTest {
|
||||
|
||||
// Send a validation event containing a hostname that is not part of
|
||||
// the current resolver config. The validation event should be ignored.
|
||||
mService.mNetdEventCallback.onPrivateDnsValidationEvent(
|
||||
mCellNetworkAgent.getNetwork().netId, "145.100.185.16", "hostname", true);
|
||||
mService.mResolverUnsolEventCallback.onPrivateDnsValidationEvent(
|
||||
makePrivateDnsValidationEvent(mCellNetworkAgent.getNetwork().netId,
|
||||
"145.100.185.16", "hostname", VALIDATION_RESULT_SUCCESS));
|
||||
cellNetworkCallback.assertNoCallback();
|
||||
|
||||
// Send a validation event where validation failed.
|
||||
mService.mNetdEventCallback.onPrivateDnsValidationEvent(
|
||||
mCellNetworkAgent.getNetwork().netId, "145.100.185.16", "", false);
|
||||
mService.mResolverUnsolEventCallback.onPrivateDnsValidationEvent(
|
||||
makePrivateDnsValidationEvent(mCellNetworkAgent.getNetwork().netId,
|
||||
"145.100.185.16", "", VALIDATION_RESULT_FAILURE));
|
||||
cellNetworkCallback.assertNoCallback();
|
||||
|
||||
// Send a validation event where validation succeeded for a server in
|
||||
// the current resolver config. A LinkProperties callback with updated
|
||||
// private dns fields should be sent.
|
||||
mService.mNetdEventCallback.onPrivateDnsValidationEvent(
|
||||
mCellNetworkAgent.getNetwork().netId, "145.100.185.16", "", true);
|
||||
mService.mResolverUnsolEventCallback.onPrivateDnsValidationEvent(
|
||||
makePrivateDnsValidationEvent(mCellNetworkAgent.getNetwork().netId,
|
||||
"145.100.185.16", "", VALIDATION_RESULT_SUCCESS));
|
||||
cbi = cellNetworkCallback.expectCallback(CallbackEntry.LINK_PROPERTIES_CHANGED,
|
||||
mCellNetworkAgent);
|
||||
cellNetworkCallback.assertNoCallback();
|
||||
@@ -7824,6 +7844,16 @@ public class ConnectivityServiceTest {
|
||||
return stacked;
|
||||
}
|
||||
|
||||
private Nat64PrefixEventParcel makeNat64PrefixEvent(final int netId, final int prefixOperation,
|
||||
final String prefixAddress, final int prefixLength) {
|
||||
final Nat64PrefixEventParcel event = new Nat64PrefixEventParcel();
|
||||
event.netId = netId;
|
||||
event.prefixOperation = prefixOperation;
|
||||
event.prefixAddress = prefixAddress;
|
||||
event.prefixLength = prefixLength;
|
||||
return event;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStackedLinkProperties() throws Exception {
|
||||
final LinkAddress myIpv4 = new LinkAddress("1.2.3.4/24");
|
||||
@@ -7908,8 +7938,8 @@ public class ConnectivityServiceTest {
|
||||
// When NAT64 prefix discovery succeeds, LinkProperties are updated and clatd is started.
|
||||
Nat464Xlat clat = getNat464Xlat(mCellNetworkAgent);
|
||||
assertNull(mCm.getLinkProperties(mCellNetworkAgent.getNetwork()).getNat64Prefix());
|
||||
mService.mNetdEventCallback.onNat64PrefixEvent(cellNetId, true /* added */,
|
||||
kNat64PrefixString, 96);
|
||||
mService.mResolverUnsolEventCallback.onNat64PrefixEvent(
|
||||
makeNat64PrefixEvent(cellNetId, PREFIX_OPERATION_ADDED, kNat64PrefixString, 96));
|
||||
LinkProperties lpBeforeClat = networkCallback.expectCallback(
|
||||
CallbackEntry.LINK_PROPERTIES_CHANGED, mCellNetworkAgent).getLp();
|
||||
assertEquals(0, lpBeforeClat.getStackedLinks().size());
|
||||
@@ -7949,8 +7979,8 @@ public class ConnectivityServiceTest {
|
||||
.thenReturn(getClatInterfaceConfigParcel(myIpv4));
|
||||
// Change the NAT64 prefix without first removing it.
|
||||
// Expect clatd to be stopped and started with the new prefix.
|
||||
mService.mNetdEventCallback.onNat64PrefixEvent(cellNetId, true /* added */,
|
||||
kOtherNat64PrefixString, 96);
|
||||
mService.mResolverUnsolEventCallback.onNat64PrefixEvent(makeNat64PrefixEvent(
|
||||
cellNetId, PREFIX_OPERATION_ADDED, kOtherNat64PrefixString, 96));
|
||||
networkCallback.expectLinkPropertiesThat(mCellNetworkAgent,
|
||||
(lp) -> lp.getStackedLinks().size() == 0);
|
||||
verify(mMockNetd, times(1)).clatdStop(MOBILE_IFNAME);
|
||||
@@ -7998,8 +8028,8 @@ public class ConnectivityServiceTest {
|
||||
.thenReturn(getClatInterfaceConfigParcel(myIpv4));
|
||||
|
||||
// Stopping prefix discovery causes netd to tell us that the NAT64 prefix is gone.
|
||||
mService.mNetdEventCallback.onNat64PrefixEvent(cellNetId, false /* added */,
|
||||
kOtherNat64PrefixString, 96);
|
||||
mService.mResolverUnsolEventCallback.onNat64PrefixEvent(makeNat64PrefixEvent(
|
||||
cellNetId, PREFIX_OPERATION_REMOVED, kOtherNat64PrefixString, 96));
|
||||
networkCallback.expectLinkPropertiesThat(mCellNetworkAgent,
|
||||
(lp) -> lp.getNat64Prefix() == null);
|
||||
|
||||
@@ -8011,8 +8041,8 @@ public class ConnectivityServiceTest {
|
||||
networkCallback.expectCallback(CallbackEntry.LINK_PROPERTIES_CHANGED, mCellNetworkAgent);
|
||||
assertRoutesRemoved(cellNetId, ipv4Subnet); // Directly-connected routes auto-added.
|
||||
verify(mMockDnsResolver, times(1)).startPrefix64Discovery(cellNetId);
|
||||
mService.mNetdEventCallback.onNat64PrefixEvent(cellNetId, true /* added */,
|
||||
kNat64PrefixString, 96);
|
||||
mService.mResolverUnsolEventCallback.onNat64PrefixEvent(makeNat64PrefixEvent(
|
||||
cellNetId, PREFIX_OPERATION_ADDED, kNat64PrefixString, 96));
|
||||
networkCallback.expectCallback(CallbackEntry.LINK_PROPERTIES_CHANGED, mCellNetworkAgent);
|
||||
verify(mMockNetd, times(1)).clatdStart(MOBILE_IFNAME, kNat64Prefix.toString());
|
||||
|
||||
@@ -8024,8 +8054,8 @@ public class ConnectivityServiceTest {
|
||||
verify(mMockNetd, times(1)).networkAddInterface(cellNetId, CLAT_PREFIX + MOBILE_IFNAME);
|
||||
|
||||
// NAT64 prefix is removed. Expect that clat is stopped.
|
||||
mService.mNetdEventCallback.onNat64PrefixEvent(cellNetId, false /* added */,
|
||||
kNat64PrefixString, 96);
|
||||
mService.mResolverUnsolEventCallback.onNat64PrefixEvent(makeNat64PrefixEvent(
|
||||
cellNetId, PREFIX_OPERATION_REMOVED, kNat64PrefixString, 96));
|
||||
networkCallback.expectLinkPropertiesThat(mCellNetworkAgent,
|
||||
(lp) -> lp.getStackedLinks().size() == 0 && lp.getNat64Prefix() == null);
|
||||
assertRoutesRemoved(cellNetId, ipv4Subnet, stackedDefault);
|
||||
@@ -8113,8 +8143,8 @@ public class ConnectivityServiceTest {
|
||||
inOrder.verify(mMockDnsResolver).setPrefix64(netId, "");
|
||||
inOrder.verify(mMockDnsResolver).startPrefix64Discovery(netId);
|
||||
|
||||
mService.mNetdEventCallback.onNat64PrefixEvent(netId, true /* added */,
|
||||
pref64FromDnsStr, 96);
|
||||
mService.mResolverUnsolEventCallback.onNat64PrefixEvent(
|
||||
makeNat64PrefixEvent(netId, PREFIX_OPERATION_ADDED, pref64FromDnsStr, 96));
|
||||
expectNat64PrefixChange(callback, mWiFiNetworkAgent, pref64FromDns);
|
||||
inOrder.verify(mMockNetd).clatdStart(iface, pref64FromDns.toString());
|
||||
|
||||
@@ -8147,8 +8177,8 @@ public class ConnectivityServiceTest {
|
||||
inOrder.verify(mMockDnsResolver).stopPrefix64Discovery(netId);
|
||||
|
||||
// Stopping prefix discovery results in a prefix removed notification.
|
||||
mService.mNetdEventCallback.onNat64PrefixEvent(netId, false /* added */,
|
||||
pref64FromDnsStr, 96);
|
||||
mService.mResolverUnsolEventCallback.onNat64PrefixEvent(
|
||||
makeNat64PrefixEvent(netId, PREFIX_OPERATION_REMOVED, pref64FromDnsStr, 96));
|
||||
|
||||
inOrder.verify(mMockNetd).clatdStart(iface, pref64FromRa.toString());
|
||||
inOrder.verify(mMockDnsResolver).setPrefix64(netId, pref64FromRa.toString());
|
||||
@@ -8186,8 +8216,8 @@ public class ConnectivityServiceTest {
|
||||
inOrder.verify(mMockNetd).clatdStop(iface);
|
||||
inOrder.verify(mMockDnsResolver).setPrefix64(netId, "");
|
||||
inOrder.verify(mMockDnsResolver).startPrefix64Discovery(netId);
|
||||
mService.mNetdEventCallback.onNat64PrefixEvent(netId, true /* added */,
|
||||
pref64FromDnsStr, 96);
|
||||
mService.mResolverUnsolEventCallback.onNat64PrefixEvent(
|
||||
makeNat64PrefixEvent(netId, PREFIX_OPERATION_ADDED, pref64FromDnsStr, 96));
|
||||
expectNat64PrefixChange(callback, mWiFiNetworkAgent, pref64FromDns);
|
||||
inOrder.verify(mMockNetd).clatdStart(iface, pref64FromDns.toString());
|
||||
inOrder.verify(mMockDnsResolver, never()).setPrefix64(eq(netId), any());
|
||||
|
||||
@@ -22,6 +22,8 @@ import static android.net.NetworkCapabilities.MAX_TRANSPORT;
|
||||
import static android.net.NetworkCapabilities.MIN_TRANSPORT;
|
||||
import static android.net.NetworkCapabilities.TRANSPORT_VPN;
|
||||
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
|
||||
import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.VALIDATION_RESULT_FAILURE;
|
||||
import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.VALIDATION_RESULT_SUCCESS;
|
||||
import static android.provider.Settings.Global.PRIVATE_DNS_DEFAULT_MODE;
|
||||
import static android.provider.Settings.Global.PRIVATE_DNS_MODE;
|
||||
import static android.provider.Settings.Global.PRIVATE_DNS_SPECIFIER;
|
||||
@@ -164,7 +166,8 @@ public class DnsManagerTest {
|
||||
mDnsManager.flushVmDnsCache();
|
||||
mDnsManager.updatePrivateDnsValidation(
|
||||
new DnsManager.PrivateDnsValidationUpdate(TEST_NETID_ALTERNATE,
|
||||
InetAddress.parseNumericAddress("4.4.4.4"), "", true));
|
||||
InetAddress.parseNumericAddress("4.4.4.4"), "",
|
||||
VALIDATION_RESULT_SUCCESS));
|
||||
LinkProperties fixedLp = new LinkProperties(lp);
|
||||
mDnsManager.updatePrivateDnsStatus(TEST_NETID, fixedLp);
|
||||
assertFalse(fixedLp.isPrivateDnsActive());
|
||||
@@ -204,7 +207,8 @@ public class DnsManagerTest {
|
||||
// Validate one.
|
||||
mDnsManager.updatePrivateDnsValidation(
|
||||
new DnsManager.PrivateDnsValidationUpdate(TEST_NETID,
|
||||
InetAddress.parseNumericAddress("6.6.6.6"), "strictmode.com", true));
|
||||
InetAddress.parseNumericAddress("6.6.6.6"), "strictmode.com",
|
||||
VALIDATION_RESULT_SUCCESS));
|
||||
fixedLp = new LinkProperties(lp);
|
||||
mDnsManager.updatePrivateDnsStatus(TEST_NETID, fixedLp);
|
||||
assertEquals(Arrays.asList(InetAddress.parseNumericAddress("6.6.6.6")),
|
||||
@@ -212,7 +216,8 @@ public class DnsManagerTest {
|
||||
// Validate the 2nd one.
|
||||
mDnsManager.updatePrivateDnsValidation(
|
||||
new DnsManager.PrivateDnsValidationUpdate(TEST_NETID,
|
||||
InetAddress.parseNumericAddress("2001:db8:66:66::1"), "strictmode.com", true));
|
||||
InetAddress.parseNumericAddress("2001:db8:66:66::1"), "strictmode.com",
|
||||
VALIDATION_RESULT_SUCCESS));
|
||||
fixedLp = new LinkProperties(lp);
|
||||
mDnsManager.updatePrivateDnsStatus(TEST_NETID, fixedLp);
|
||||
assertEquals(Arrays.asList(
|
||||
@@ -232,7 +237,8 @@ public class DnsManagerTest {
|
||||
mDnsManager.flushVmDnsCache();
|
||||
mDnsManager.updatePrivateDnsValidation(
|
||||
new DnsManager.PrivateDnsValidationUpdate(TEST_NETID,
|
||||
InetAddress.parseNumericAddress("3.3.3.3"), "", true));
|
||||
InetAddress.parseNumericAddress("3.3.3.3"), "",
|
||||
VALIDATION_RESULT_SUCCESS));
|
||||
mDnsManager.updatePrivateDnsStatus(TEST_NETID, lp);
|
||||
assertFalse(lp.isPrivateDnsActive());
|
||||
assertNull(lp.getPrivateDnsServerName());
|
||||
@@ -245,7 +251,8 @@ public class DnsManagerTest {
|
||||
mDnsManager.flushVmDnsCache();
|
||||
mDnsManager.updatePrivateDnsValidation(
|
||||
new DnsManager.PrivateDnsValidationUpdate(TEST_NETID_UNTRACKED,
|
||||
InetAddress.parseNumericAddress("3.3.3.3"), "", true));
|
||||
InetAddress.parseNumericAddress("3.3.3.3"), "",
|
||||
VALIDATION_RESULT_SUCCESS));
|
||||
mDnsManager.updatePrivateDnsStatus(TEST_NETID, lp);
|
||||
assertFalse(lp.isPrivateDnsActive());
|
||||
assertNull(lp.getPrivateDnsServerName());
|
||||
@@ -253,7 +260,8 @@ public class DnsManagerTest {
|
||||
// Validation event has untracked ipAddress
|
||||
mDnsManager.updatePrivateDnsValidation(
|
||||
new DnsManager.PrivateDnsValidationUpdate(TEST_NETID,
|
||||
InetAddress.parseNumericAddress("4.4.4.4"), "", true));
|
||||
InetAddress.parseNumericAddress("4.4.4.4"), "",
|
||||
VALIDATION_RESULT_SUCCESS));
|
||||
mDnsManager.updatePrivateDnsStatus(TEST_NETID, lp);
|
||||
assertFalse(lp.isPrivateDnsActive());
|
||||
assertNull(lp.getPrivateDnsServerName());
|
||||
@@ -261,8 +269,8 @@ public class DnsManagerTest {
|
||||
// Validation event has untracked hostname
|
||||
mDnsManager.updatePrivateDnsValidation(
|
||||
new DnsManager.PrivateDnsValidationUpdate(TEST_NETID,
|
||||
InetAddress.parseNumericAddress("3.3.3.3"), "hostname",
|
||||
true));
|
||||
InetAddress.parseNumericAddress("3.3.3.3"), "hostname",
|
||||
VALIDATION_RESULT_SUCCESS));
|
||||
mDnsManager.updatePrivateDnsStatus(TEST_NETID, lp);
|
||||
assertFalse(lp.isPrivateDnsActive());
|
||||
assertNull(lp.getPrivateDnsServerName());
|
||||
@@ -270,7 +278,8 @@ public class DnsManagerTest {
|
||||
// Validation event failed
|
||||
mDnsManager.updatePrivateDnsValidation(
|
||||
new DnsManager.PrivateDnsValidationUpdate(TEST_NETID,
|
||||
InetAddress.parseNumericAddress("3.3.3.3"), "", false));
|
||||
InetAddress.parseNumericAddress("3.3.3.3"), "",
|
||||
VALIDATION_RESULT_FAILURE));
|
||||
mDnsManager.updatePrivateDnsStatus(TEST_NETID, lp);
|
||||
assertFalse(lp.isPrivateDnsActive());
|
||||
assertNull(lp.getPrivateDnsServerName());
|
||||
@@ -279,7 +288,7 @@ public class DnsManagerTest {
|
||||
mDnsManager.removeNetwork(new Network(TEST_NETID));
|
||||
mDnsManager.updatePrivateDnsValidation(
|
||||
new DnsManager.PrivateDnsValidationUpdate(TEST_NETID,
|
||||
InetAddress.parseNumericAddress("3.3.3.3"), "", true));
|
||||
InetAddress.parseNumericAddress("3.3.3.3"), "", VALIDATION_RESULT_SUCCESS));
|
||||
mDnsManager.updatePrivateDnsStatus(TEST_NETID, lp);
|
||||
assertFalse(lp.isPrivateDnsActive());
|
||||
assertNull(lp.getPrivateDnsServerName());
|
||||
@@ -293,7 +302,8 @@ public class DnsManagerTest {
|
||||
mDnsManager.flushVmDnsCache();
|
||||
mDnsManager.updatePrivateDnsValidation(
|
||||
new DnsManager.PrivateDnsValidationUpdate(TEST_NETID,
|
||||
InetAddress.parseNumericAddress("3.3.3.3"), "", true));
|
||||
InetAddress.parseNumericAddress("3.3.3.3"), "",
|
||||
VALIDATION_RESULT_SUCCESS));
|
||||
mDnsManager.updatePrivateDnsStatus(TEST_NETID, lp);
|
||||
assertFalse(lp.isPrivateDnsActive());
|
||||
assertNull(lp.getPrivateDnsServerName());
|
||||
@@ -398,7 +408,8 @@ public class DnsManagerTest {
|
||||
mDnsManager.updatePrivateDns(network, mDnsManager.getPrivateDnsConfig());
|
||||
mDnsManager.noteDnsServersForNetwork(TEST_NETID, lp);
|
||||
mDnsManager.updatePrivateDnsValidation(
|
||||
new DnsManager.PrivateDnsValidationUpdate(TEST_NETID, dnsAddr, "", true));
|
||||
new DnsManager.PrivateDnsValidationUpdate(TEST_NETID, dnsAddr, "",
|
||||
VALIDATION_RESULT_SUCCESS));
|
||||
mDnsManager.updatePrivateDnsStatus(TEST_NETID, lp);
|
||||
privateDnsCfg = mDnsManager.getPrivateDnsConfig(network);
|
||||
assertTrue(privateDnsCfg.useTls);
|
||||
|
||||
Reference in New Issue
Block a user