Carry location of next hop in ResolvedRoute

Change-Id: I64ca6ecc5cfcffc3ed19621053b0ee266c4093ea
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 a362316..4c0f59e 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
@@ -23,8 +23,8 @@
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
 import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
 import org.onosproject.event.ListenerService;
+import org.onosproject.incubator.net.routing.NextHopData;
 import org.onosproject.incubator.net.routing.NextHop;
 import org.onosproject.incubator.net.routing.ResolvedRoute;
 import org.onosproject.incubator.net.routing.Route;
@@ -118,9 +118,12 @@
             routeStore.getRouteTables().forEach(table -> {
                 Collection<Route> routes = routeStore.getRoutes(table);
                 if (routes != null) {
-                    routes.forEach(route ->
-                        l.post(new RouteEvent(RouteEvent.Type.ROUTE_UPDATED,
-                                        new ResolvedRoute(route, routeStore.getNextHop(route.nextHop())))));
+                    routes.forEach(route -> {
+                        NextHopData nextHopData = routeStore.getNextHop(route.nextHop());
+                            l.post(new RouteEvent(RouteEvent.Type.ROUTE_UPDATED,
+                                    new ResolvedRoute(route, nextHopData.mac(),
+                                            nextHopData.location())));
+                    });
                 }
             });
 
@@ -174,7 +177,7 @@
     @Override
     public Set<NextHop> getNextHops() {
         return routeStore.getNextHops().entrySet().stream()
-                .map(entry -> new NextHop(entry.getKey(), entry.getValue()))
+                .map(entry -> new NextHop(entry.getKey(), entry.getValue().mac()))
                 .collect(Collectors.toSet());
     }
 
@@ -203,24 +206,24 @@
         // Monitor the IP address for updates of the MAC address
         hostService.startMonitoringIp(route.nextHop());
 
-        MacAddress nextHopMac = routeStore.getNextHop(route.nextHop());
-        if (nextHopMac == null) {
+        NextHopData nextHopData = routeStore.getNextHop(route.nextHop());
+        if (nextHopData == null) {
             Set<Host> hosts = hostService.getHostsByIp(route.nextHop());
             Optional<Host> host = hosts.stream().findFirst();
             if (host.isPresent()) {
-                nextHopMac = host.get().mac();
+                nextHopData = NextHopData.fromHost(host.get());
             }
         }
 
-        if (nextHopMac != null) {
-            routeStore.updateNextHop(route.nextHop(), nextHopMac);
+        if (nextHopData != null) {
+            routeStore.updateNextHop(route.nextHop(), nextHopData);
         }
     }
 
     private void hostUpdated(Host host) {
         synchronized (this) {
             for (IpAddress ip : host.ipAddresses()) {
-                routeStore.updateNextHop(ip, host.mac());
+                routeStore.updateNextHop(ip, NextHopData.fromHost(host));
             }
         }
     }
@@ -228,7 +231,7 @@
     private void hostRemoved(Host host) {
         synchronized (this) {
             for (IpAddress ip : host.ipAddresses()) {
-                routeStore.removeNextHop(ip, host.mac());
+                routeStore.removeNextHop(ip, NextHopData.fromHost(host));
             }
         }
     }