Clean up routes when the ONOS node they were sourced from goes down

Change-Id: I1b70e087b64404bf92e6251d18f3c85791e30583
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/routing/impl/RouteManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/routing/impl/RouteManager.java
index 6ab1f03..267bb69 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/routing/impl/RouteManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/routing/impl/RouteManager.java
@@ -24,6 +24,7 @@
 import org.apache.felix.scr.annotations.Service;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.IpPrefix;
+import org.onosproject.cluster.ClusterService;
 import org.onosproject.incubator.net.routing.InternalRouteEvent;
 import org.onosproject.incubator.net.routing.NextHop;
 import org.onosproject.incubator.net.routing.ResolvedRoute;
@@ -41,6 +42,7 @@
 import org.onosproject.net.host.HostEvent;
 import org.onosproject.net.host.HostListener;
 import org.onosproject.net.host.HostService;
+import org.onosproject.store.service.StorageService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -81,8 +83,16 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected HostService hostService;
 
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected ClusterService clusterService;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected StorageService storageService;
+
     private ResolvedRouteStore resolvedRouteStore;
 
+    private RouteMonitor routeMonitor;
+
     @GuardedBy(value = "this")
     private Map<RouteListener, ListenerQueue> listeners = new HashMap<>();
 
@@ -90,6 +100,7 @@
 
     @Activate
     protected void activate() {
+        routeMonitor = new RouteMonitor(this, clusterService, storageService);
         threadFactory = groupedThreads("onos/route", "listener-%d", log);
 
         resolvedRouteStore = new DefaultResolvedRouteStore();
@@ -104,6 +115,7 @@
 
     @Deactivate
     protected void deactivate() {
+        routeMonitor.shutdown();
         listeners.values().forEach(ListenerQueue::stop);
 
         routeStore.unsetDelegate(delegate);