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));
}
}
}
diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/routing/impl/RouteManagerTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/routing/impl/RouteManagerTest.java
index 9393062..86ba6f6 100644
--- a/incubator/net/src/test/java/org/onosproject/incubator/net/routing/impl/RouteManagerTest.java
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/routing/impl/RouteManagerTest.java
@@ -178,12 +178,12 @@
@Test
public void testRouteAdd() {
Route route = new Route(Route.Source.STATIC, V4_PREFIX1, V4_NEXT_HOP1);
- ResolvedRoute resolvedRoute = new ResolvedRoute(route, MAC1);
+ ResolvedRoute resolvedRoute = new ResolvedRoute(route, MAC1, CP1);
verifyRouteAdd(route, resolvedRoute);
route = new Route(Route.Source.STATIC, V6_PREFIX1, V6_NEXT_HOP1);
- resolvedRoute = new ResolvedRoute(route, MAC3);
+ resolvedRoute = new ResolvedRoute(route, MAC3, CP1);
verifyRouteAdd(route, resolvedRoute);
}
@@ -215,7 +215,7 @@
public void testRouteUpdate() {
Route route = new Route(Route.Source.STATIC, V4_PREFIX1, V4_NEXT_HOP1);
Route updatedRoute = new Route(Route.Source.STATIC, V4_PREFIX1, V4_NEXT_HOP2);
- ResolvedRoute updatedResolvedRoute = new ResolvedRoute(updatedRoute, MAC2);
+ ResolvedRoute updatedResolvedRoute = new ResolvedRoute(updatedRoute, MAC2, CP1);
verifyRouteRemoveThenAdd(route, updatedRoute, updatedResolvedRoute);
@@ -223,13 +223,13 @@
// In this case we expect to receive a ROUTE_UPDATED event.
route = new Route(Route.Source.STATIC, V4_PREFIX2, V4_NEXT_HOP1);
updatedRoute = new Route(Route.Source.STATIC, V4_PREFIX2, V4_NEXT_HOP2);
- updatedResolvedRoute = new ResolvedRoute(updatedRoute, MAC2);
+ updatedResolvedRoute = new ResolvedRoute(updatedRoute, MAC2, CP1);
verifyRouteUpdated(route, updatedRoute, updatedResolvedRoute);
route = new Route(Route.Source.STATIC, V6_PREFIX1, V6_NEXT_HOP1);
updatedRoute = new Route(Route.Source.STATIC, V6_PREFIX1, V6_NEXT_HOP2);
- updatedResolvedRoute = new ResolvedRoute(updatedRoute, MAC4);
+ updatedResolvedRoute = new ResolvedRoute(updatedRoute, MAC4, CP1);
verifyRouteRemoveThenAdd(route, updatedRoute, updatedResolvedRoute);
}
@@ -248,7 +248,8 @@
// First add the original route
addRoute(original);
- routeListener.event(new RouteEvent(RouteEvent.Type.ROUTE_REMOVED, new ResolvedRoute(original, null)));
+ routeListener.event(new RouteEvent(RouteEvent.Type.ROUTE_REMOVED,
+ new ResolvedRoute(original, null, null)));
expectLastCall().once();
routeListener.event(new RouteEvent(RouteEvent.Type.ROUTE_ADDED, updatedResolvedRoute));
expectLastCall().once();
@@ -308,7 +309,7 @@
addRoute(route);
RouteEvent withdrawRouteEvent = new RouteEvent(RouteEvent.Type.ROUTE_REMOVED,
- new ResolvedRoute(route, null));
+ new ResolvedRoute(route, null, null));
reset(routeListener);
routeListener.event(withdrawRouteEvent);
@@ -346,7 +347,7 @@
// Now when we send the event, we expect the FIB update to be sent
reset(routeListener);
routeListener.event(new RouteEvent(RouteEvent.Type.ROUTE_ADDED,
- new ResolvedRoute(route, MAC1)));
+ new ResolvedRoute(route, MAC1, CP1)));
replay(routeListener);
// Send in the host event