Have NetworkMonitor validate VPNs that request it.
Test: New test in Ikev2VpnTest
Also FrameworksNetTests
Change-Id: I7b1b172c4aa63014a2267faa08c6adcabe1d0796
diff --git a/common/moduleutils/src/android/net/shared/NetworkMonitorUtils.java b/common/moduleutils/src/android/net/shared/NetworkMonitorUtils.java
index b151cb9..583a356 100644
--- a/common/moduleutils/src/android/net/shared/NetworkMonitorUtils.java
+++ b/common/moduleutils/src/android/net/shared/NetworkMonitorUtils.java
@@ -26,9 +26,11 @@
import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
+import android.annotation.NonNull;
import android.net.NetworkCapabilities;
import com.android.modules.utils.build.SdkLevel;
+import com.android.networkstack.apishim.common.NetworkAgentConfigShim;
/** @hide */
public class NetworkMonitorUtils {
@@ -67,9 +69,7 @@
* Return whether validation is required for private DNS in strict mode.
* @param nc Network capabilities of the network to test.
*/
- public static boolean isPrivateDnsValidationRequired(NetworkCapabilities nc) {
- if (nc == null) return false;
-
+ public static boolean isPrivateDnsValidationRequired(@NonNull final NetworkCapabilities nc) {
final boolean isVcnManaged = SdkLevel.isAtLeastS()
&& !nc.hasCapability(NET_CAPABILITY_NOT_VCN_MANAGED);
final boolean isOemPaid = nc.hasCapability(NET_CAPABILITY_OEM_PAID)
@@ -100,10 +100,15 @@
/**
* Return whether validation is required for a network.
+ * @param config Configuration of the network to test.
* @param nc Network capabilities of the network to test.
*/
- public static boolean isValidationRequired(NetworkCapabilities nc) {
+ public static boolean isValidationRequired(@NonNull final NetworkAgentConfigShim config,
+ @NonNull final NetworkCapabilities nc) {
// TODO: Consider requiring validation for DUN networks.
- return isPrivateDnsValidationRequired(nc) && nc.hasCapability(NET_CAPABILITY_NOT_VPN);
+ if (!nc.hasCapability(NET_CAPABILITY_NOT_VPN)) {
+ return config.isVpnValidationRequired();
+ }
+ return isPrivateDnsValidationRequired(nc);
}
}
diff --git a/src/com/android/server/connectivity/NetworkMonitor.java b/src/com/android/server/connectivity/NetworkMonitor.java
index 301462f..fd566c8 100755
--- a/src/com/android/server/connectivity/NetworkMonitor.java
+++ b/src/com/android/server/connectivity/NetworkMonitor.java
@@ -164,9 +164,11 @@
import com.android.networkstack.NetworkStackNotifier;
import com.android.networkstack.R;
import com.android.networkstack.apishim.CaptivePortalDataShimImpl;
+import com.android.networkstack.apishim.NetworkAgentConfigShimImpl;
import com.android.networkstack.apishim.NetworkInformationShimImpl;
import com.android.networkstack.apishim.api29.ConstantsShim;
import com.android.networkstack.apishim.common.CaptivePortalDataShim;
+import com.android.networkstack.apishim.common.NetworkAgentConfigShim;
import com.android.networkstack.apishim.common.NetworkInformationShim;
import com.android.networkstack.apishim.common.ShimUtils;
import com.android.networkstack.apishim.common.UnsupportedApiLevelException;
@@ -427,6 +429,7 @@
private final INetworkMonitorCallbacks mCallback;
private final int mCallbackVersion;
private final Network mCleartextDnsNetwork;
+ @NonNull
private final Network mNetwork;
private final TelephonyManager mTelephonyManager;
private final WifiManager mWifiManager;
@@ -460,7 +463,11 @@
private final int mEvaluatingBandwidthTimeoutMs;
private final AtomicInteger mNextEvaluatingBandwidthThreadId = new AtomicInteger(1);
+ @NonNull
+ private NetworkAgentConfigShim mNetworkAgentConfig;
+ @NonNull
private NetworkCapabilities mNetworkCapabilities;
+ @NonNull
private LinkProperties mLinkProperties;
@VisibleForTesting
@@ -647,6 +654,7 @@
// even before notifyNetworkConnected.
mLinkProperties = new LinkProperties();
mNetworkCapabilities = new NetworkCapabilities(null);
+ mNetworkAgentConfig = NetworkAgentConfigShimImpl.newInstance(null);
}
/**
@@ -712,7 +720,7 @@
private void updateConnectedNetworkAttributes(Message connectedMsg) {
final NetworkMonitorParameters params = (NetworkMonitorParameters) connectedMsg.obj;
- // TODO : also read the NetworkAgentConfig
+ mNetworkAgentConfig = NetworkAgentConfigShimImpl.newInstance(params.networkAgentConfig);
mLinkProperties = params.linkProperties;
mNetworkCapabilities = params.networkCapabilities;
suppressNotificationIfNetworkRestricted();
@@ -773,7 +781,7 @@
}
private boolean isValidationRequired() {
- return NetworkMonitorUtils.isValidationRequired(mNetworkCapabilities);
+ return NetworkMonitorUtils.isValidationRequired(mNetworkAgentConfig, mNetworkCapabilities);
}
private boolean isPrivateDnsValidationRequired() {