shill: WiFi: Add LinkMonitor

Use new wpa_supplicant DBus interface call "Reassociate" when
the LinkMonitor indicates failure.

CQ-DEPENDS=Ic9fa6c577808e3d753175d8cba8acbe3463eb1ee
BUG=chromium-os:32600
TEST=Unit tests; manual: With verbosity turned up I can see the
link monitor successfully receiving ARP replies and adding
response samples.  Both failures and samples appear in
chrome://histograms.

Change-Id: I059b8dc5ebb6cfec4dd715090a8bddb8daf86eae
Reviewed-on: https://gerrit.chromium.org/gerrit/29794
Commit-Ready: Paul Stewart <pstew@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/supplicant_interface_proxy.cc b/supplicant_interface_proxy.cc
index 4367070..807ccf0 100644
--- a/supplicant_interface_proxy.cc
+++ b/supplicant_interface_proxy.cc
@@ -68,6 +68,16 @@
   }
 }
 
+void SupplicantInterfaceProxy::Reassociate() {
+  SLOG(DBus, 2) << __func__;
+  try {
+    return proxy_.Reassociate();
+  } catch (const DBus::Error &e) {
+    LOG(ERROR) << "DBus exception: " << e.name() << ": " << e.what();
+    throw;  // Re-throw the exception.
+  }
+}
+
 void SupplicantInterfaceProxy::RemoveAllNetworks() {
   SLOG(DBus, 2) << __func__;
   try {