diff options
| author | 2019-03-15 10:59:21 -0700 | |
|---|---|---|
| committer | 2019-03-15 10:59:21 -0700 | |
| commit | e942aafb0ae880db0c2ceb86ec59e983ba218c22 (patch) | |
| tree | dc65d163f104264f767b601f8520bb6e753b614f | |
| parent | 11d091f9da96e2299b5b7e1953c6757ca8b1bece (diff) | |
| parent | 016ac0a9531402e16f6e65c68331064b6b843ec0 (diff) | |
Merge "Integrate testNetworkService and Manager with Connectivity stack" am: b86c3255fd
am: 016ac0a953
Change-Id: If9efbc3e0b3f0949286a2a5ad8226009ebbcfc07
| -rw-r--r-- | api/test-current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/app/SystemServiceRegistry.java | 26 | ||||
| -rw-r--r-- | core/java/android/content/Context.java | 10 | ||||
| -rw-r--r-- | core/java/android/net/IConnectivityManager.aidl | 2 | ||||
| -rw-r--r-- | services/core/java/com/android/server/ConnectivityService.java | 27 |
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; + } + } } |