diff options
author | Remi NGUYEN VAN <reminv@google.com> | 2018-12-27 16:43:56 +0900 |
---|---|---|
committer | Remi NGUYEN VAN <reminv@google.com> | 2019-01-11 09:59:11 +0900 |
commit | 5daa3703cc174ab7764b7fd568e68688fd96fe32 (patch) | |
tree | 943f7a0184d8376f0c67c56b40a8b019d3c8a429 /src/com/android/server/NetworkStackService.java | |
parent | 057bf20e86b62e744f823818c2741f659106e04d (diff) |
Move NetworkMonitor to NetworkStack
Bug: b/112869080
Test: atest FrameworksNetTests NetworkStackTests
Change-Id: I1b8b6a3f4390adbabf92fb9e48da61c47b08b2ec
Diffstat (limited to 'src/com/android/server/NetworkStackService.java')
-rw-r--r-- | src/com/android/server/NetworkStackService.java | 138 |
1 files changed, 133 insertions, 5 deletions
diff --git a/src/com/android/server/NetworkStackService.java b/src/com/android/server/NetworkStackService.java index 7fea1e0..057012d 100644 --- a/src/com/android/server/NetworkStackService.java +++ b/src/com/android/server/NetworkStackService.java @@ -25,18 +25,31 @@ import static com.android.server.util.PermissionUtil.checkNetworkStackCallingPer import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Service; +import android.content.Context; import android.content.Intent; +import android.net.ConnectivityManager; +import android.net.INetworkMonitor; +import android.net.INetworkMonitorCallbacks; import android.net.INetworkStackConnector; +import android.net.Network; +import android.net.NetworkRequest; +import android.net.PrivateDnsConfigParcel; import android.net.dhcp.DhcpServer; import android.net.dhcp.DhcpServingParams; import android.net.dhcp.DhcpServingParamsParcel; import android.net.dhcp.IDhcpServerCallbacks; +import android.net.shared.PrivateDnsConfig; import android.net.util.SharedLog; import android.os.IBinder; import android.os.RemoteException; +import com.android.internal.annotations.GuardedBy; +import com.android.internal.util.IndentingPrintWriter; +import com.android.server.connectivity.NetworkMonitor; + import java.io.FileDescriptor; import java.io.PrintWriter; +import java.util.ArrayDeque; /** * Android service used to start the network stack when bound to via an intent. @@ -52,17 +65,41 @@ public class NetworkStackService extends Service { * <p>On platforms where the network stack runs in the system server process, this method may * be called directly instead of obtaining the connector by binding to the service. */ - public static IBinder makeConnector() { - return new NetworkStackConnector(); + public static IBinder makeConnector(Context context) { + return new NetworkStackConnector(context); } @NonNull @Override public IBinder onBind(Intent intent) { - return makeConnector(); + return makeConnector(this); } private static class NetworkStackConnector extends INetworkStackConnector.Stub { + private static final int NUM_VALIDATION_LOG_LINES = 20; + private final Context mContext; + private final ConnectivityManager mCm; + + private static final int MAX_VALIDATION_LOGS = 10; + @GuardedBy("mValidationLogs") + private final ArrayDeque<SharedLog> mValidationLogs = new ArrayDeque<>(MAX_VALIDATION_LOGS); + + private SharedLog addValidationLogs(Network network, String name) { + final SharedLog log = new SharedLog(NUM_VALIDATION_LOG_LINES, network + " - " + name); + synchronized (mValidationLogs) { + while (mValidationLogs.size() >= MAX_VALIDATION_LOGS) { + mValidationLogs.removeLast(); + } + mValidationLogs.addFirst(log); + } + return log; + } + + NetworkStackConnector(Context context) { + mContext = context; + mCm = context.getSystemService(ConnectivityManager.class); + } + @NonNull private final SharedLog mLog = new SharedLog(TAG); @@ -89,11 +126,102 @@ public class NetworkStackService extends Service { } @Override + public void makeNetworkMonitor(int netId, String name, INetworkMonitorCallbacks cb) + throws RemoteException { + final Network network = new Network(netId, false /* privateDnsBypass */); + final NetworkRequest defaultRequest = mCm.getDefaultRequest(); + final SharedLog log = addValidationLogs(network, name); + final NetworkMonitor nm = new NetworkMonitor( + mContext, cb, network, defaultRequest, log); + cb.onNetworkMonitorCreated(new NetworkMonitorImpl(nm)); + } + + @Override protected void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter fout, @Nullable String[] args) { checkNetworkStackCallingPermission(); - fout.println("NetworkStack logs:"); - mLog.dump(fd, fout, args); + final IndentingPrintWriter pw = new IndentingPrintWriter(fout, " "); + pw.println("NetworkStack logs:"); + mLog.dump(fd, pw, args); + + pw.println(); + pw.println("Validation logs (most recent first):"); + synchronized (mValidationLogs) { + for (SharedLog p : mValidationLogs) { + pw.println(p.getTag()); + pw.increaseIndent(); + p.dump(fd, pw, args); + pw.decreaseIndent(); + } + } + } + } + + private static class NetworkMonitorImpl extends INetworkMonitor.Stub { + private final NetworkMonitor mNm; + + NetworkMonitorImpl(NetworkMonitor nm) { + mNm = nm; + } + + @Override + public void start() { + checkNetworkStackCallingPermission(); + mNm.start(); + } + + @Override + public void launchCaptivePortalApp() { + checkNetworkStackCallingPermission(); + mNm.launchCaptivePortalApp(); + } + + @Override + public void forceReevaluation(int uid) { + checkNetworkStackCallingPermission(); + mNm.forceReevaluation(uid); + } + + @Override + public void notifyPrivateDnsChanged(PrivateDnsConfigParcel config) { + checkNetworkStackCallingPermission(); + mNm.notifyPrivateDnsSettingsChanged(PrivateDnsConfig.fromParcel(config)); + } + + @Override + public void notifyDnsResponse(int returnCode) { + checkNetworkStackCallingPermission(); + mNm.notifyDnsResponse(returnCode); + } + + @Override + public void notifySystemReady() { + checkNetworkStackCallingPermission(); + mNm.notifySystemReady(); + } + + @Override + public void notifyNetworkConnected() { + checkNetworkStackCallingPermission(); + mNm.notifyNetworkConnected(); + } + + @Override + public void notifyNetworkDisconnected() { + checkNetworkStackCallingPermission(); + mNm.notifyNetworkDisconnected(); + } + + @Override + public void notifyLinkPropertiesChanged() { + checkNetworkStackCallingPermission(); + mNm.notifyLinkPropertiesChanged(); + } + + @Override + public void notifyNetworkCapabilitiesChanged() { + checkNetworkStackCallingPermission(); + mNm.notifyNetworkCapabilitiesChanged(); } } } |