From 57827f46ecabf0b59c73f4b2bf807b207b8cf442 Mon Sep 17 00:00:00 2001 From: Roger Wang Date: Thu, 26 Sep 2019 11:09:14 +0800 Subject: Add Wifi shell cmd to enable/disable LRWD feature For debugging purpose, add wifi shell cmd to manually enable/disable LRWD feature. Bug: 140862160 Test: run adb root, adb shell cmd wifi set-wifi-watchdog enabled|disabled, adb shell cmd wifi get-wifi-watchdod and verify terminal output Test: frameworks/opt/net/wifi/tests/wifitests/runtests.sh -e class com.android.server.wifi.WifiLastResortWatchdogTest Change-Id: Ic2a0d77dd0032e86babd1f9936aeef93871501b4 --- .../server/wifi/WifiLastResortWatchdog.java | 50 +++++++++++++++++----- .../com/android/server/wifi/WifiShellCommand.java | 27 ++++++++++++ 2 files changed, 66 insertions(+), 11 deletions(-) (limited to 'service') 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 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 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(); } } -- cgit v1.2.3