patchpanel-client: Add device changed signal handling

BUG=b:174432555
TEST=dbus-monitor --system \
"type=signal,interface='org.chromium.PatchPanel'"
and then log in and see 2 signals corresponding to arc_eth0 and
arc_wlan0 being added; then unplug eth0 and see signal corresponding to
removal, then plug back in and see that signal.

Change-Id: I5ab9a979a15c35cc96e8cc5ccb38e64bf62562b7
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2566855
Tested-by: Garrick Evans <garrick@chromium.org>
Commit-Queue: Garrick Evans <garrick@chromium.org>
Reviewed-by: Hugo Benichi <hugobenichi@google.com>
diff --git a/patchpanel/dbus/client.h b/patchpanel/dbus/client.h
index 1e06cb5..78ce19f 100644
--- a/patchpanel/dbus/client.h
+++ b/patchpanel/dbus/client.h
@@ -30,6 +30,8 @@
       base::OnceCallback<void(const std::vector<TrafficCounter>&)>;
   using NeighborReachabilityEventHandler =
       base::RepeatingCallback<void(const NeighborReachabilityEventSignal&)>;
+  using NetworkDeviceChangedSignalHandler =
+      base::RepeatingCallback<void(const NetworkDeviceChangedSignal&)>;
 
   static std::unique_ptr<Client> New();
 
@@ -100,6 +102,11 @@
   // Obtains a list of NetworkDevices currently managed by patchpanel.
   virtual std::vector<NetworkDevice> GetDevices() = 0;
 
+  // Registers a handler that will be called upon receiving a signal indicating
+  // that a network device managed by patchpanel was added or removed.
+  virtual void RegisterNetworkDeviceChangedSignalHandler(
+      NetworkDeviceChangedSignalHandler handler) = 0;
+
   // Registers a handler that will be called on receiving a neighbor
   // reachability event. Currently these events are generated only for WiFi
   // devices. The handler is registered for as long as this patchpanel::Client