shill: Ethernet: Create shared credentials provider

Share a single service instance for all Ethernet devices to use
for EAP credentials.  This service instance is only used for EAP
authentication, so other parameters such as Static IP paramters
are still retrieved from the per-device Ethernet service.  Provide
a method for all Ethernet devices connected to an EAP
authenticator to be notified when the EAP credentials for this
shared service have been changed.  Use both facilities in the
Ethernet device.

CQ-DEPEND=CL:48162
BUG=chromium:227433
TEST=New unit tests; revised version of network_8021xWiredAuthentication
(see co-dependent CL)

Change-Id: I5b19723dddfa2d793090128adb6429f31174b276
Reviewed-on: https://gerrit.chromium.org/gerrit/48138
Reviewed-by: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
Commit-Queue: Paul Stewart <pstew@chromium.org>
diff --git a/manager.h b/manager.h
index e832b4b..2c3c127 100644
--- a/manager.h
+++ b/manager.h
@@ -39,6 +39,7 @@
 class DBusManager;
 class DefaultProfile;
 class Error;
+class EthernetEapProvider;
 class EventDispatcher;
 class ManagerAdaptorInterface;
 class Resolver;
@@ -249,6 +250,9 @@
   virtual DeviceInfo *device_info() { return &device_info_; }
   virtual ModemInfo *modem_info() { return &modem_info_; }
   PowerManager *power_manager() const { return power_manager_.get(); }
+  virtual EthernetEapProvider *ethernet_eap_provider() const {
+    return ethernet_eap_provider_.get();
+  }
   VPNProvider *vpn_provider() const { return vpn_provider_.get(); }
   WiFiProvider *wifi_provider() const { return wifi_provider_.get(); }
   virtual WiMaxProvider *wimax_provider() { return &wimax_provider_; }
@@ -495,6 +499,7 @@
   scoped_ptr<DBusManager> dbus_manager_;
   DeviceInfo device_info_;
   ModemInfo modem_info_;
+  scoped_ptr<EthernetEapProvider> ethernet_eap_provider_;
   scoped_ptr<VPNProvider> vpn_provider_;
   scoped_ptr<WiFiProvider> wifi_provider_;
   WiMaxProvider wimax_provider_;