summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRebecca Silberstein <silberst@google.com>2016-05-26 15:05:13 -0700
committerRebecca Silberstein <silberst@google.com>2016-05-27 14:59:57 -0700
commit11ad3437e833ead2c7c235f173824db16ee4ea02 (patch)
treee90ffb1832ff527c77edf9fc00040b996e375caf
parentddd09bbe798f9fb257bb9c73649bee3bd77fb469 (diff)
downloadwifi-11ad3437e833ead2c7c235f173824db16ee4ea02.tar.gz
WifiLastResortWatchdog: reset wifi on trigger
Added wifi reset on WifiLastResortTrigger. The reset is implemented by sending the CMD_RESTART_WIFI message to WifiController. BUG: 27856267 Change-Id: Icb7c3a211afcd234cfcd25a42665aed03c33f5e1
-rw-r--r--service/java/com/android/server/wifi/WifiLastResortWatchdog.java26
-rw-r--r--service/java/com/android/server/wifi/WifiServiceImpl.java2
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiLastResortWatchdogTest.java10
3 files changed, 33 insertions, 5 deletions
diff --git a/service/java/com/android/server/wifi/WifiLastResortWatchdog.java b/service/java/com/android/server/wifi/WifiLastResortWatchdog.java
index 896c1c816..558b50ef1 100644
--- a/service/java/com/android/server/wifi/WifiLastResortWatchdog.java
+++ b/service/java/com/android/server/wifi/WifiLastResortWatchdog.java
@@ -80,6 +80,8 @@ public class WifiLastResortWatchdog {
private WifiMetrics mWifiMetrics;
+ private WifiController mWifiController = null;
+
WifiLastResortWatchdog(WifiMetrics wifiMetrics) {
mWifiMetrics = wifiMetrics;
}
@@ -324,13 +326,21 @@ public class WifiLastResortWatchdog {
}
/**
- * Restart Supplicant, Driver & return WifiStateMachine to InitialState
+ * Trigger a restart of the wifi stack.
*/
private void restartWifiStack() {
if (VDBG) Log.v(TAG, "restartWifiStack.");
- Log.i(TAG, "Triggered.");
+
+ // First verify that we can send the trigger message.
+ if (mWifiController == null) {
+ Log.e(TAG, "WifiLastResortWatchdog unable to trigger: WifiController is null");
+ return;
+ }
+
if (DBG) Log.d(TAG, toString());
- // <TODO>
+
+ mWifiController.sendMessage(WifiController.CMD_RESTART_WIFI);
+ Log.i(TAG, "Triggered WiFi stack restart.");
}
/**
@@ -537,4 +547,14 @@ public class WifiLastResortWatchdog {
+ ", Age: " + age;
}
}
+
+ /**
+ * Method used to set the WifiController for the this watchdog.
+ *
+ * The WifiController is used to send the restart wifi command to carry out the wifi restart.
+ * @param wifiController WifiController instance that will be sent the CMD_RESTART_WIFI message.
+ */
+ public void setWifiController(WifiController wifiController) {
+ mWifiController = wifiController;
+ }
}
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index a169c9ba3..c562ce781 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -343,6 +343,8 @@ public class WifiServiceImpl extends IWifiManager.Stub {
mWifiStateMachineHandler = new WifiStateMachineHandler(wifiThread.getLooper());
mWifiController = new WifiController(mContext, mWifiStateMachine,
mSettingsStore, mWifiLockManager, wifiThread.getLooper(), facade);
+ // Set the WifiController for WifiLastResortWatchdog
+ mWifiInjector.getWifiLastResortWatchdog().setWifiController(mWifiController);
}
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiLastResortWatchdogTest.java b/tests/wifitests/src/com/android/server/wifi/WifiLastResortWatchdogTest.java
index 64f1ce0fd..237fc666d 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiLastResortWatchdogTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiLastResortWatchdogTest.java
@@ -19,6 +19,7 @@ package com.android.server.wifi;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.*;
+import static org.mockito.MockitoAnnotations.*;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiSsid;
@@ -27,6 +28,7 @@ import android.util.Pair;
import org.junit.Before;
import org.junit.Test;
+import org.mockito.Mock;
import java.util.ArrayList;
import java.util.Arrays;
@@ -38,7 +40,8 @@ import java.util.List;
@SmallTest
public class WifiLastResortWatchdogTest {
WifiLastResortWatchdog mLastResortWatchdog;
- WifiMetrics mWifiMetrics;
+ @Mock WifiMetrics mWifiMetrics;
+ @Mock WifiController mWifiController;
private String[] mSsids = {"\"test1\"", "\"test2\"", "\"test3\"", "\"test4\""};
private String[] mBssids = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4", "de:ad:ba:b1:e5:55",
"c0:ff:ee:ee:e3:ee"};
@@ -51,8 +54,9 @@ public class WifiLastResortWatchdogTest {
@Before
public void setUp() throws Exception {
- mWifiMetrics = mock(WifiMetrics.class);
+ initMocks(this);
mLastResortWatchdog = new WifiLastResortWatchdog(mWifiMetrics);
+ mLastResortWatchdog.setWifiController(mWifiController);
}
private List<Pair<ScanDetail, WifiConfiguration>> createFilteredQnsCandidates(String[] ssids,
@@ -1276,6 +1280,8 @@ public class WifiLastResortWatchdogTest {
ssids[ssids.length - 1], bssids[ssids.length - 1],
WifiLastResortWatchdog.FAILURE_CODE_ASSOCIATION);
assertEquals(true, watchdogTriggered);
+ verify(mWifiController).sendMessage(WifiController.CMD_RESTART_WIFI);
+ reset(mWifiController);
}
/**