Remove next hop location from resolved route
The next hop location should be obtained from host service
Change-Id: I8652e6b8b1367097ffbfcb1651538c34819f67d6
diff --git a/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java b/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
index 39b901b..6be675a 100644
--- a/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
+++ b/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
@@ -29,6 +29,7 @@
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
+import com.google.common.collect.Sets;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -50,6 +51,8 @@
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
+import org.onosproject.net.Host;
+import org.onosproject.net.HostId;
import org.onosproject.net.Link;
import org.onosproject.net.Port;
import org.onosproject.net.PortNumber;
@@ -84,6 +87,7 @@
import org.onosproject.net.packet.PacketService;
import org.onosproject.net.topology.PathService;
import org.onosproject.net.topology.TopologyService;
+import org.onosproject.routeservice.ResolvedRoute;
import org.onosproject.routeservice.RouteEvent;
import org.onosproject.routeservice.RouteListener;
import org.onosproject.routeservice.RouteService;
@@ -696,6 +700,19 @@
}
/**
+ * Returns locations of given resolved route.
+ *
+ * @param resolvedRoute resolved route
+ * @return locations of nexthop. Might be empty if next hop is not found
+ */
+ Set<ConnectPoint> nextHopLocations(ResolvedRoute resolvedRoute) {
+ HostId hostId = HostId.hostId(resolvedRoute.nextHopMac(), resolvedRoute.nextHopVlan());
+ return Optional.ofNullable(hostService.getHost(hostId))
+ .map(Host::locations).orElse(Sets.newHashSet())
+ .stream().map(l -> (ConnectPoint) l).collect(Collectors.toSet());
+ }
+
+ /**
* Returns vlan port map of given device.
*
* @param deviceId device id