Make network connectivity nonblocking for boot.
This brings auto to VIRTUAL_DEVICE_BOOT_COMPLETED even with both RIL and
wifi missing. VIRTUAL_DEVICE_MOBILE_NETWORK_CONNECTED comes up when the
mobile network is present. On auto, the mobile network connected message
still only comes up after the setup flow is completed.
Bug: 110720387
Test: Ran cuttlefish auto target locally.
Change-Id: I8bcee212f68db809fcffbba2ac16dd4628edf3ca
Merged-In: I8bcee212f68db809fcffbba2ac16dd4628edf3ca
(cherry picked from commit 5bbc22c14abc7d34e52b2e32af9d2c192671818a)
diff --git a/guest/monitoring/vsoc_service/java/com/android/google/gce/gceservice/ConnectivityChecker.java b/guest/monitoring/vsoc_service/java/com/android/google/gce/gceservice/ConnectivityChecker.java
index dfa23d6..1354021 100644
--- a/guest/monitoring/vsoc_service/java/com/android/google/gce/gceservice/ConnectivityChecker.java
+++ b/guest/monitoring/vsoc_service/java/com/android/google/gce/gceservice/ConnectivityChecker.java
@@ -17,6 +17,8 @@
import android.content.Context;
import android.net.ConnectivityManager;
+import android.net.Network;
+import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.util.Log;
@@ -24,37 +26,42 @@
public class ConnectivityChecker extends JobBase {
private static final String LOG_TAG = "GceConnChecker";
+ private static final String MOBILE_NETWORK_CONNECTED_MESSAGE =
+ "VIRTUAL_DEVICE_NETWORK_MOBILE_CONNECTED";
private final Context mContext;
+ private final BootReporter mBootReporter;
private final GceFuture<Boolean> mConnected = new GceFuture<Boolean>("Connectivity");
+ // TODO(schuffelen): Figure out why this has to be static in order to not report 3 times.
+ private static boolean reportedMobileConnectivity = false;
-
- public ConnectivityChecker(Context context) {
+ public ConnectivityChecker(Context context, BootReporter bootReporter) {
super(LOG_TAG);
mContext = context;
+ mBootReporter = bootReporter;
}
@Override
public int execute() {
ConnectivityManager connManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
- if (mConnected.isDone()) return 0;
-
- NetworkInfo[] networks = connManager.getAllNetworkInfo();
- ArrayList<String> connected = new ArrayList<String>();
- ArrayList<String> disconnected = new ArrayList<String>();
-
- for (NetworkInfo network : networks) {
- if (network.isConnected()) {
- connected.add(network.getTypeName());
- mConnected.set(true);
- break;
- } else {
- disconnected.add(network.getTypeName());
- }
+ if (mConnected.isDone()) {
+ return 0;
}
- Log.i(LOG_TAG, "Connectivity status: connected:" + connected + ", disconnected:" + disconnected);
+ Network[] networks = connManager.getAllNetworks();
+ for (Network network : networks) {
+ NetworkInfo info = connManager.getNetworkInfo(network);
+ if (info.isConnected()) {
+ NetworkCapabilities capabilities = connManager.getNetworkCapabilities(network);
+ if (capabilities != null
+ && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
+ && !reportedMobileConnectivity) {
+ mBootReporter.reportMessage(MOBILE_NETWORK_CONNECTED_MESSAGE);
+ reportedMobileConnectivity = true;
+ }
+ }
+ }
return 0;
}
diff --git a/guest/monitoring/vsoc_service/java/com/android/google/gce/gceservice/GceService.java b/guest/monitoring/vsoc_service/java/com/android/google/gce/gceservice/GceService.java
index 9517e57..6e8b842 100644
--- a/guest/monitoring/vsoc_service/java/com/android/google/gce/gceservice/GceService.java
+++ b/guest/monitoring/vsoc_service/java/com/android/google/gce/gceservice/GceService.java
@@ -41,7 +41,6 @@
private static final int NETWORK_OR_BOOT_TIMEOUT = 30;
private final JobExecutor mExecutor = new JobExecutor();
- private final ConnectivityChecker mConnChecker = new ConnectivityChecker(this);
private final LocationServicesManager mLocationServices = new LocationServicesManager(this);
private final PackageVerifierManager mPackageVerifier = new PackageVerifierManager(this);
private final PackageVerificationConsentEnforcer mConsentEnforcer = new PackageVerificationConsentEnforcer(this);
@@ -50,6 +49,7 @@
private final BluetoothChecker mBluetoothChecker = new BluetoothChecker();
private final TombstoneChecker mTombstoneChecker = new TombstoneChecker();
+ private ConnectivityChecker mConnChecker;
private GceWifiManager mWifiManager = null;
private String mMostRecentAction = null;
@@ -63,6 +63,7 @@
mBootReporter.reportBootStarted();
registerBroadcastReceivers();
+ mConnChecker = new ConnectivityChecker(this, mBootReporter);
mWifiManager = new GceWifiManager(this, mBootReporter, mExecutor);
mExecutor.schedule(mLocationServices);
@@ -70,6 +71,7 @@
mExecutor.schedule(mConsentEnforcer);
mExecutor.schedule(mWifiManager);
mExecutor.schedule(mBluetoothChecker);
+ mExecutor.schedule(mConnChecker);
// TODO(ender): TombstoneChecker is disabled, because we no longer have the code that
// produces /ts_snap.txt file. We need to rethink how TombstoneChecker should work.
// mExecutor.schedule(mTombstoneChecker);
@@ -77,7 +79,6 @@
mExecutor.schedule(mBootReporter,
mLocationServices.getLocationServicesReady(),
mPackageVerifier.getPackageVerifierReady(),
- mConnChecker.getConnected(),
mBluetoothChecker.getEnabled()
// mTombstoneChecker.getTombstoneResult()
);
diff --git a/host/libs/monitor/kernel_log_server.cpp b/host/libs/monitor/kernel_log_server.cpp
index dcf8bce..8896b98 100644
--- a/host/libs/monitor/kernel_log_server.cpp
+++ b/host/libs/monitor/kernel_log_server.cpp
@@ -27,6 +27,7 @@
"VIRTUAL_DEVICE_BOOT_STARTED",
"VIRTUAL_DEVICE_BOOT_COMPLETED",
"VIRTUAL_DEVICE_BOOT_FAILED",
+ "VIRTUAL_DEVICE_NETWORK_MOBILE_CONNECTED",
"VIRTUAL_DEVICE_NETWORK_WIFI_CONNECTED",
};
} // namespace