Nat464Xlat: clat management cleanup
This patch does some minor refactoring of clat starting/stopping code:
- remove unused LinkProperties arguments in updateClat
- remove unused Context argument in Nat464Xlat ctor
- introduce ensureClatIsStarted and ensureClatIsStopped methods and
simplify updateClat
- add clatd to NetworkAgentInfo toString() method
- clarify some comments
This changes prepare for moving BaseNetworkObserver callbacks to
ConnectivityService.
Bug: 62997041
Bug: 64571917
Test: runtest frameworks-net
manually connected to IPv6 only network and went to test-ipv6.com
Change-Id: Idb204784614cfe700f73255a7a7b78c5e9ee6eca
diff --git a/services/core/java/com/android/server/connectivity/Nat464Xlat.java b/services/core/java/com/android/server/connectivity/Nat464Xlat.java
index b390884..27426d7 100644
--- a/services/core/java/com/android/server/connectivity/Nat464Xlat.java
+++ b/services/core/java/com/android/server/connectivity/Nat464Xlat.java
@@ -18,7 +18,6 @@
import java.net.Inet4Address;
-import android.content.Context;
import android.net.InterfaceConfiguration;
import android.net.ConnectivityManager;
import android.net.LinkAddress;
@@ -35,17 +34,18 @@
import com.android.internal.util.ArrayUtils;
/**
- * @hide
- *
* Class to manage a 464xlat CLAT daemon.
+ *
+ * @hide
*/
public class Nat464Xlat extends BaseNetworkObserver {
- private static final String TAG = "Nat464Xlat";
+ private static final String TAG = Nat464Xlat.class.getSimpleName();
// This must match the interface prefix in clatd.c.
private static final String CLAT_PREFIX = "v4-";
- // The network types we will start clatd on.
+ // The network types we will start clatd on,
+ // allowing clat only on networks for which we can support IPv6-only.
private static final int[] NETWORK_TYPES = {
ConnectivityManager.TYPE_MOBILE,
ConnectivityManager.TYPE_WIFI,
@@ -76,9 +76,7 @@
private String mIface;
private boolean mIsRunning;
- public Nat464Xlat(
- Context context, INetworkManagementService nmService,
- Handler handler, NetworkAgentInfo nai) {
+ public Nat464Xlat(INetworkManagementService nmService, Handler handler, NetworkAgentInfo nai) {
mNMService = nmService;
mHandler = handler;
mNetwork = nai;
@@ -90,13 +88,14 @@
* @return true if the network requires clat, false otherwise.
*/
public static boolean requiresClat(NetworkAgentInfo nai) {
+ // TODO: migrate to NetworkCapabilities.TRANSPORT_*.
final int netType = nai.networkInfo.getType();
+ final boolean supported = ArrayUtils.contains(NETWORK_TYPES, nai.networkInfo.getType());
final boolean connected = nai.networkInfo.isConnected();
+ // We only run clat on networks that don't have a native IPv4 address.
final boolean hasIPv4Address =
- (nai.linkProperties != null) ? nai.linkProperties.hasIPv4Address() : false;
- // Only support clat on mobile and wifi for now, because these are the only IPv6-only
- // networks we can connect to.
- return connected && !hasIPv4Address && ArrayUtils.contains(NETWORK_TYPES, netType);
+ (nai.linkProperties != null) && nai.linkProperties.hasIPv4Address();
+ return supported && connected && !hasIPv4Address;
}
/**
@@ -227,6 +226,7 @@
}
private void maybeSetIpv6NdOffload(String iface, boolean on) {
+ // TODO: migrate to NetworkCapabilities.TRANSPORT_*.
if (mNetwork.networkInfo.getType() != ConnectivityManager.TYPE_WIFI) {
return;
}
@@ -286,4 +286,9 @@
}
}
}
+
+ @Override
+ public String toString() {
+ return "mBaseIface: " + mBaseIface + ", mIface: " + mIface + ", mIsRunning: " + mIsRunning;
+ }
}