shill: vpn: Claim interface from DeviceInfo

Maintain a list in the VPNProvider of all services created by it.
When DeviceInfo alerts it of a new tunnel interface, VPNProvider
will find a service->driver() to accept this interface.  If not
found, delete the interface (cleaning up after crash).  Also,
in OpenVPNDriver, create a tunnel device and hold enough state
to be able to claim it later.

BUG=chromium-os:26841,chromium-os:27156,chromium-os:27158
TEST=New unit tests.  Manual: Ensure tunnel devices get cleaned up on a
real system.

Change-Id: Iaaa44dc26830a2e8bf5dfea00d165ab8c034e6e9
Reviewed-on: https://gerrit.chromium.org/gerrit/17191
Reviewed-by: Darin Petkov <petkov@chromium.org>
Commit-Ready: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/device_info.h b/device_info.h
index 3911a75..7bae36f 100644
--- a/device_info.h
+++ b/device_info.h
@@ -68,8 +68,8 @@
   virtual bool GetAddresses(int interface_index,
                             std::vector<AddressData> *addresses) const;
   virtual void FlushAddresses(int interface_index) const;
-  virtual bool CreateTunnelInterface(std::string *interface_name);
-  virtual bool DeleteInterface(int interface_index);
+  virtual bool CreateTunnelInterface(std::string *interface_name) const;
+  virtual bool DeleteInterface(int interface_index) const;
 
  private:
   friend class DeviceInfoTest;