summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Benedict Wong <benedictwong@google.com> 2019-03-15 10:59:21 -0700
committer android-build-merger <android-build-merger@google.com> 2019-03-15 10:59:21 -0700
commite942aafb0ae880db0c2ceb86ec59e983ba218c22 (patch)
treedc65d163f104264f767b601f8520bb6e753b614f
parent11d091f9da96e2299b5b7e1953c6757ca8b1bece (diff)
parent016ac0a9531402e16f6e65c68331064b6b843ec0 (diff)
Merge "Integrate testNetworkService and Manager with Connectivity stack" am: b86c3255fd
am: 016ac0a953 Change-Id: If9efbc3e0b3f0949286a2a5ad8226009ebbcfc07
-rw-r--r--api/test-current.txt1
-rw-r--r--core/java/android/app/SystemServiceRegistry.java26
-rw-r--r--core/java/android/content/Context.java10
-rw-r--r--core/java/android/net/IConnectivityManager.aidl2
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java27
5 files changed, 66 insertions, 0 deletions
diff --git a/api/test-current.txt b/api/test-current.txt
index 3f8aede0cb22..00fe67d6c23f 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -234,6 +234,7 @@ package android.content {
method public android.os.UserHandle getUser();
method public int getUserId();
method public void setAutofillCompatibilityEnabled(boolean);
+ field public static final String TEST_NETWORK_SERVICE = "test_network";
}
}
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java
index e92efde236c4..a3ee8491e6d1 100644
--- a/core/java/android/app/SystemServiceRegistry.java
+++ b/core/java/android/app/SystemServiceRegistry.java
@@ -84,11 +84,13 @@ import android.net.IEthernetManager;
import android.net.IIpMemoryStore;
import android.net.IIpSecService;
import android.net.INetworkPolicyManager;
+import android.net.ITestNetworkManager;
import android.net.IpMemoryStore;
import android.net.IpSecManager;
import android.net.NetworkPolicyManager;
import android.net.NetworkScoreManager;
import android.net.NetworkWatchlistManager;
+import android.net.TestNetworkManager;
import android.net.lowpan.ILowpanManager;
import android.net.lowpan.LowpanManager;
import android.net.nsd.INsdManager;
@@ -126,6 +128,7 @@ import android.os.IUserManager;
import android.os.IncidentManager;
import android.os.PowerManager;
import android.os.RecoverySystem;
+import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.ServiceManager.ServiceNotFoundException;
import android.os.SystemUpdateManager;
@@ -315,6 +318,29 @@ final class SystemServiceRegistry {
return new IpSecManager(ctx, service);
}});
+ registerService(
+ Context.TEST_NETWORK_SERVICE,
+ TestNetworkManager.class,
+ new StaticApplicationContextServiceFetcher<TestNetworkManager>() {
+ @Override
+ public TestNetworkManager createService(Context context)
+ throws ServiceNotFoundException {
+ IBinder csBinder =
+ ServiceManager.getServiceOrThrow(Context.CONNECTIVITY_SERVICE);
+ IConnectivityManager csMgr =
+ IConnectivityManager.Stub.asInterface(csBinder);
+
+ final IBinder tnBinder;
+ try {
+ tnBinder = csMgr.startOrGetTestNetworkService();
+ } catch (RemoteException e) {
+ throw new ServiceNotFoundException(Context.TEST_NETWORK_SERVICE);
+ }
+ ITestNetworkManager tnMgr = ITestNetworkManager.Stub.asInterface(tnBinder);
+ return new TestNetworkManager(context, tnMgr);
+ }
+ });
+
registerService(Context.COUNTRY_DETECTOR, CountryDetector.class,
new StaticServiceFetcher<CountryDetector>() {
@Override
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 136657ff555e..5a75d5df554f 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -3016,6 +3016,7 @@ public abstract class Context {
CONNECTIVITY_SERVICE,
//@hide: IP_MEMORY_STORE_SERVICE,
IPSEC_SERVICE,
+ TEST_NETWORK_SERVICE,
//@hide: UPDATE_LOCK_SERVICE,
//@hide: NETWORKMANAGEMENT_SERVICE,
NETWORK_STATS_SERVICE,
@@ -3539,6 +3540,15 @@ public abstract class Context {
/**
* Use with {@link #getSystemService(String)} to retrieve a {@link
+ * android.net.TestNetworkManager} for building TUNs and limited-use Networks
+ *
+ * @see #getSystemService(String)
+ * @hide
+ */
+ @TestApi public static final String TEST_NETWORK_SERVICE = "test_network";
+
+ /**
+ * Use with {@link #getSystemService(String)} to retrieve a {@link
* android.os.IUpdateLock} for managing runtime sequences that
* must not be interrupted by headless OTA application or similar.
*
diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl
index 540ef89f3a90..24e6a855ffe8 100644
--- a/core/java/android/net/IConnectivityManager.aidl
+++ b/core/java/android/net/IConnectivityManager.aidl
@@ -220,4 +220,6 @@ interface IConnectivityManager
void registerTetheringEventCallback(ITetheringEventCallback callback, String callerPkg);
void unregisterTetheringEventCallback(ITetheringEventCallback callback, String callerPkg);
+
+ IBinder startOrGetTestNetworkService();
}
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index ed704b8bbd81..27fc4c3adc35 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -300,6 +300,15 @@ public class ConnectivityService extends IConnectivityManager.Stub
private INetworkPolicyManager mPolicyManager;
private NetworkPolicyManagerInternal mPolicyManagerInternal;
+ /**
+ * TestNetworkService (lazily) created upon first usage. Locked to prevent creation of multiple
+ * instances.
+ */
+ @GuardedBy("mTNSLock")
+ private TestNetworkService mTNS;
+
+ private final Object mTNSLock = new Object();
+
private String mCurrentTcpBufferSizes;
private static final SparseArray<String> sMagicDecoderRing = MessageUtils.findMessageNames(
@@ -6959,4 +6968,22 @@ public class ConnectivityService extends IConnectivityManager.Stub
return vpn != null && vpn.getLockdown();
}
}
+
+ /**
+ * Returns a IBinder to a TestNetworkService. Will be lazily created as needed.
+ *
+ * <p>The TestNetworkService must be run in the system server due to TUN creation.
+ */
+ @Override
+ public IBinder startOrGetTestNetworkService() {
+ synchronized (mTNSLock) {
+ TestNetworkService.enforceTestNetworkPermissions(mContext);
+
+ if (mTNS == null) {
+ mTNS = new TestNetworkService(mContext, mNMS);
+ }
+
+ return mTNS;
+ }
+ }
}