summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2019-10-01 17:40:31 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-10-01 17:40:31 +0000
commit21e635b6c601c1851692a9849b006a33aede9486 (patch)
tree75837befeac9d848fcbfe12d3ff32cc81b0b6f5e /service
parentaf6af0261f4d6435fe3146a0245b9680edbdad8a (diff)
parent57827f46ecabf0b59c73f4b2bf807b207b8cf442 (diff)
Merge "Add Wifi shell cmd to enable/disable LRWD feature"
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/WifiLastResortWatchdog.java50
-rw-r--r--service/java/com/android/server/wifi/WifiShellCommand.java27
2 files changed, 66 insertions, 11 deletions
diff --git a/service/java/com/android/server/wifi/WifiLastResortWatchdog.java b/service/java/com/android/server/wifi/WifiLastResortWatchdog.java
index be45921a7..18f447aac 100644
--- a/service/java/com/android/server/wifi/WifiLastResortWatchdog.java
+++ b/service/java/com/android/server/wifi/WifiLastResortWatchdog.java
@@ -119,6 +119,8 @@ public class WifiLastResortWatchdog {
private Handler mHandler;
private final WifiThreadRunner mWifiThreadRunner;
+ private boolean mWatchdogFeatureEnabled = true;
+
/**
* Local log used for debugging any WifiLastResortWatchdog issues.
*/
@@ -308,16 +310,23 @@ public class WifiLastResortWatchdog {
Log.v(TAG, "isRestartNeeded = " + isRestartNeeded);
}
if (isRestartNeeded) {
- // Stop the watchdog from triggering until re-enabled
- localLog("noteConnectionFailureAndTriggerIfNeeded: setWatchdogTriggerEnabled to false");
- setWatchdogTriggerEnabled(false);
- mWatchdogFixedWifi = true;
- loge("Watchdog triggering recovery");
- mSsidLastTrigger = ssid;
- mTimeLastTrigger = mClock.getElapsedSinceBootMillis();
- localLog(toString());
- mWifiInjector.getSelfRecovery().trigger(SelfRecovery.REASON_LAST_RESORT_WATCHDOG);
- incrementWifiMetricsTriggerCounts();
+ if (mWatchdogFeatureEnabled) {
+ // Stop the watchdog from triggering until re-enabled
+ localLog("Trigger recovery: setWatchdogTriggerEnabled to false");
+ setWatchdogTriggerEnabled(false);
+ mWatchdogFixedWifi = true;
+ loge("Watchdog triggering recovery");
+ mSsidLastTrigger = ssid;
+ mTimeLastTrigger = mClock.getElapsedSinceBootMillis();
+ localLog(toString());
+ mWifiInjector.getSelfRecovery().trigger(SelfRecovery.REASON_LAST_RESORT_WATCHDOG);
+ incrementWifiMetricsTriggerCounts();
+ } else {
+ // auto bugreport if issue happens
+ loge("bugreport notification");
+ setWatchdogTriggerEnabled(false);
+ takeBugReportWithCurrentProbability("Wifi Watchdog bite");
+ }
}
return isRestartNeeded;
}
@@ -335,6 +344,7 @@ public class WifiLastResortWatchdog {
return;
}
if (!mWatchdogAllowedToTrigger && mWatchdogFixedWifi
+ && mWatchdogFeatureEnabled
&& checkIfAtleastOneNetworkHasEverConnected()
&& checkIfConnectedBackToSameSsid()
&& checkIfConnectedBssidHasEverFailed()) {
@@ -623,7 +633,8 @@ public class WifiLastResortWatchdog {
*/
public String toString() {
StringBuilder sb = new StringBuilder();
- sb.append("mWatchdogAllowedToTrigger: ").append(mWatchdogAllowedToTrigger);
+ sb.append("mWatchdogFeatureEnabled: ").append(mWatchdogFeatureEnabled);
+ sb.append("\nmWatchdogAllowedToTrigger: ").append(mWatchdogAllowedToTrigger);
sb.append("\nmWifiIsConnected: ").append(mWifiIsConnected);
sb.append("\nmRecentAvailableNetworks: ").append(mRecentAvailableNetworks.size());
for (Map.Entry<String, AvailableNetworkFailureCount> entry
@@ -682,6 +693,23 @@ public class WifiLastResortWatchdog {
}
}
+ /**
+ * Sets whether wifi watchdog should trigger recovery
+ */
+ public void setWifiWatchdogFeature(boolean enable) {
+ logv("setWifiWatchdogFeature: " + enable);
+ mWatchdogFeatureEnabled = enable;
+ // for debugging purpose, reset mWatchdogAllowedToTrigger as well
+ setWatchdogTriggerEnabled(true);
+ }
+
+ /**
+ * Returns whether wifi watchdog should trigger recovery.
+ */
+ public boolean getWifiWatchdogFeature() {
+ return mWatchdogFeatureEnabled;
+ }
+
protected void enableVerboseLogging(int verbose) {
if (verbose > 0) {
mVerboseLoggingEnabled = true;
diff --git a/service/java/com/android/server/wifi/WifiShellCommand.java b/service/java/com/android/server/wifi/WifiShellCommand.java
index b2289a832..76fa4407b 100644
--- a/service/java/com/android/server/wifi/WifiShellCommand.java
+++ b/service/java/com/android/server/wifi/WifiShellCommand.java
@@ -54,6 +54,7 @@ public class WifiShellCommand extends ShellCommand {
private final WifiNative mWifiNative;
private final HostapdHal mHostapdHal;
private final WifiCountryCode mWifiCountryCode;
+ private final WifiLastResortWatchdog mWifiLastResortWatchdog;
WifiShellCommand(WifiInjector wifiInjector) {
mClientModeImpl = wifiInjector.getClientModeImpl();
@@ -64,6 +65,7 @@ public class WifiShellCommand extends ShellCommand {
mHostapdHal = wifiInjector.getHostapdHal();
mWifiNative = wifiInjector.getWifiNative();
mWifiCountryCode = wifiInjector.getWifiCountryCode();
+ mWifiLastResortWatchdog = wifiInjector.getWifiLastResortWatchdog();
}
@Override
@@ -245,6 +247,27 @@ public class WifiShellCommand extends ShellCommand {
+ mWifiCountryCode.getCountryCode());
return 0;
}
+ case "set-wifi-watchdog": {
+ boolean enabled;
+ String nextArg = getNextArgRequired();
+ if ("enabled".equals(nextArg)) {
+ enabled = true;
+ } else if ("disabled".equals(nextArg)) {
+ enabled = false;
+ } else {
+ pw.println(
+ "Invalid argument to 'set-wifi-watchdog' - must be 'enabled'"
+ + " or 'disabled'");
+ return -1;
+ }
+ mWifiLastResortWatchdog.setWifiWatchdogFeature(enabled);
+ return 0;
+ }
+ case "get-wifi-watchdog": {
+ pw.println("wifi watchdog state is "
+ + mWifiLastResortWatchdog.getWifiWatchdogFeature());
+ return 0;
+ }
default:
return handleDefaultCommands(cmd);
}
@@ -344,6 +367,10 @@ public class WifiShellCommand extends ShellCommand {
pw.println(" Sets country code to <two-letter code> or left for normal value");
pw.println(" get-country-code");
pw.println(" Gets country code as a two-letter string");
+ pw.println(" set-wifi-watchdog enabled|disabled");
+ pw.println(" Sets whether wifi watchdog should trigger recovery");
+ pw.println(" get-wifi-watchdog");
+ pw.println(" Gets setting of wifi watchdog trigger recovery.");
pw.println();
}
}