Construct GraphDescription with online/active Device/Link only
Change-Id: I9312c0c8ae190bf0200bd040823b6f7a3e7a15e1
diff --git a/core/api/src/main/java/org/onlab/onos/net/device/DeviceService.java b/core/api/src/main/java/org/onlab/onos/net/device/DeviceService.java
index d35b1af..7d2a0dd 100644
--- a/core/api/src/main/java/org/onlab/onos/net/device/DeviceService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/device/DeviceService.java
@@ -44,6 +44,14 @@
Iterable<Device> getDevices();
/**
+ * Returns an iterable collection of all devices
+ * currently available to the system.
+ *
+ * @return device collection
+ */
+ Iterable<Device> getAvailableDevices();
+
+ /**
* Returns the device with the specified identifier.
*
* @param deviceId device identifier
diff --git a/core/api/src/main/java/org/onlab/onos/net/device/DeviceStore.java b/core/api/src/main/java/org/onlab/onos/net/device/DeviceStore.java
index bc0b5c1..ed86881 100644
--- a/core/api/src/main/java/org/onlab/onos/net/device/DeviceStore.java
+++ b/core/api/src/main/java/org/onlab/onos/net/device/DeviceStore.java
@@ -44,6 +44,15 @@
Iterable<Device> getDevices();
/**
+ * Returns an iterable collection of all devices currently available to the system.
+ *
+ * @return device collection
+ */
+ Iterable<Device> getAvailableDevices();
+
+
+
+ /**
* Returns the device with the specified identifier.
*
* @param deviceId device identifier
diff --git a/core/api/src/main/java/org/onlab/onos/net/link/LinkService.java b/core/api/src/main/java/org/onlab/onos/net/link/LinkService.java
index 2039aa5..58b01bf 100644
--- a/core/api/src/main/java/org/onlab/onos/net/link/LinkService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/link/LinkService.java
@@ -41,6 +41,13 @@
Iterable<Link> getLinks();
/**
+ * Returns a collection of all active infrastructure links.
+ *
+ * @return all infrastructure links
+ */
+ Iterable<Link> getActiveLinks();
+
+ /**
* Returns set of all infrastructure links leading to and from the
* specified device.
*
diff --git a/core/api/src/test/java/org/onlab/onos/net/device/DeviceServiceAdapter.java b/core/api/src/test/java/org/onlab/onos/net/device/DeviceServiceAdapter.java
index 6b4ed3b..3d2d74f 100644
--- a/core/api/src/test/java/org/onlab/onos/net/device/DeviceServiceAdapter.java
+++ b/core/api/src/test/java/org/onlab/onos/net/device/DeviceServiceAdapter.java
@@ -21,6 +21,9 @@
import org.onlab.onos.net.Port;
import org.onlab.onos.net.PortNumber;
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
+
import java.util.List;
/**
@@ -38,6 +41,18 @@
}
@Override
+ public Iterable<Device> getAvailableDevices() {
+ return FluentIterable.from(getDevices())
+ .filter(new Predicate<Device>() {
+
+ @Override
+ public boolean apply(Device input) {
+ return isAvailable(input.id());
+ }
+ });
+ }
+
+ @Override
public Device getDevice(DeviceId deviceId) {
return null;
}
diff --git a/core/api/src/test/java/org/onlab/onos/net/link/LinkServiceAdapter.java b/core/api/src/test/java/org/onlab/onos/net/link/LinkServiceAdapter.java
index 0e25e2a..b22f0a5 100644
--- a/core/api/src/test/java/org/onlab/onos/net/link/LinkServiceAdapter.java
+++ b/core/api/src/test/java/org/onlab/onos/net/link/LinkServiceAdapter.java
@@ -20,6 +20,10 @@
import org.onlab.onos.net.ConnectPoint;
import org.onlab.onos.net.DeviceId;
import org.onlab.onos.net.Link;
+import org.onlab.onos.net.Link.State;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
/**
* Test adapter for link service.
@@ -36,6 +40,18 @@
}
@Override
+ public Iterable<Link> getActiveLinks() {
+ return FluentIterable.from(getLinks())
+ .filter(new Predicate<Link>() {
+
+ @Override
+ public boolean apply(Link input) {
+ return input.state() == State.ACTIVE;
+ }
+ });
+ }
+
+ @Override
public Set<Link> getDeviceLinks(DeviceId deviceId) {
return null;
}
diff --git a/core/net/src/main/java/org/onlab/onos/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onlab/onos/net/device/impl/DeviceManager.java
index 95723b3..b00b993 100644
--- a/core/net/src/main/java/org/onlab/onos/net/device/impl/DeviceManager.java
+++ b/core/net/src/main/java/org/onlab/onos/net/device/impl/DeviceManager.java
@@ -149,6 +149,11 @@
}
@Override
+ public Iterable<Device> getAvailableDevices() {
+ return store.getAvailableDevices();
+ }
+
+ @Override
public Device getDevice(DeviceId deviceId) {
checkNotNull(deviceId, DEVICE_ID_NULL);
return store.getDevice(deviceId);
diff --git a/core/net/src/main/java/org/onlab/onos/net/link/impl/LinkManager.java b/core/net/src/main/java/org/onlab/onos/net/link/impl/LinkManager.java
index 76ce64a..52b56c5 100644
--- a/core/net/src/main/java/org/onlab/onos/net/link/impl/LinkManager.java
+++ b/core/net/src/main/java/org/onlab/onos/net/link/impl/LinkManager.java
@@ -31,6 +31,7 @@
import org.onlab.onos.net.ConnectPoint;
import org.onlab.onos.net.DeviceId;
import org.onlab.onos.net.Link;
+import org.onlab.onos.net.Link.State;
import org.onlab.onos.net.MastershipRole;
import org.onlab.onos.net.device.DeviceEvent;
import org.onlab.onos.net.device.DeviceListener;
@@ -49,6 +50,8 @@
import org.onlab.onos.net.provider.AbstractProviderService;
import org.slf4j.Logger;
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
import com.google.common.collect.Sets;
/**
@@ -109,6 +112,18 @@
}
@Override
+ public Iterable<Link> getActiveLinks() {
+ return FluentIterable.from(getLinks())
+ .filter(new Predicate<Link>() {
+
+ @Override
+ public boolean apply(Link input) {
+ return input.state() == State.ACTIVE;
+ }
+ });
+ }
+
+ @Override
public Set<Link> getDeviceLinks(DeviceId deviceId) {
checkNotNull(deviceId, DEVICE_ID_NULL);
return Sets.union(store.getDeviceEgressLinks(deviceId),
diff --git a/core/net/src/main/java/org/onlab/onos/net/topology/impl/DefaultTopologyProvider.java b/core/net/src/main/java/org/onlab/onos/net/topology/impl/DefaultTopologyProvider.java
index a5d2c5a..44aa9f7 100644
--- a/core/net/src/main/java/org/onlab/onos/net/topology/impl/DefaultTopologyProvider.java
+++ b/core/net/src/main/java/org/onlab/onos/net/topology/impl/DefaultTopologyProvider.java
@@ -16,6 +16,7 @@
package org.onlab.onos.net.topology.impl;
import com.google.common.collect.ImmutableList;
+
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -209,8 +210,8 @@
if (isStarted) {
GraphDescription desc =
new DefaultGraphDescription(System.nanoTime(),
- deviceService.getDevices(),
- linkService.getLinks());
+ deviceService.getAvailableDevices(),
+ linkService.getActiveLinks());
providerService.topologyChanged(desc, reasons);
}
}
diff --git a/core/net/src/test/java/org/onlab/onos/net/flow/impl/FlowRuleManagerTest.java b/core/net/src/test/java/org/onlab/onos/net/flow/impl/FlowRuleManagerTest.java
index f67d992..175a299 100644
--- a/core/net/src/test/java/org/onlab/onos/net/flow/impl/FlowRuleManagerTest.java
+++ b/core/net/src/test/java/org/onlab/onos/net/flow/impl/FlowRuleManagerTest.java
@@ -20,6 +20,7 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.google.common.util.concurrent.ListenableFuture;
+
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -34,7 +35,7 @@
import org.onlab.onos.net.Port;
import org.onlab.onos.net.PortNumber;
import org.onlab.onos.net.device.DeviceListener;
-import org.onlab.onos.net.device.DeviceService;
+import org.onlab.onos.net.device.DeviceServiceAdapter;
import org.onlab.onos.net.flow.BatchOperation;
import org.onlab.onos.net.flow.CompletedBatchOperation;
import org.onlab.onos.net.flow.DefaultFlowEntry;
@@ -461,7 +462,7 @@
}
}
- private static class TestDeviceService implements DeviceService {
+ private static class TestDeviceService extends DeviceServiceAdapter {
@Override
public int getDeviceCount() {
diff --git a/core/net/src/test/java/org/onlab/onos/net/host/impl/HostMonitorTest.java b/core/net/src/test/java/org/onlab/onos/net/host/impl/HostMonitorTest.java
index a8febd7..e397d16 100644
--- a/core/net/src/test/java/org/onlab/onos/net/host/impl/HostMonitorTest.java
+++ b/core/net/src/test/java/org/onlab/onos/net/host/impl/HostMonitorTest.java
@@ -39,7 +39,7 @@
import org.onlab.onos.net.Port;
import org.onlab.onos.net.PortNumber;
import org.onlab.onos.net.device.DeviceListener;
-import org.onlab.onos.net.device.DeviceService;
+import org.onlab.onos.net.device.DeviceServiceAdapter;
import org.onlab.onos.net.flow.instructions.Instruction;
import org.onlab.onos.net.flow.instructions.Instructions.OutputInstruction;
import org.onlab.onos.net.host.HostProvider;
@@ -189,7 +189,7 @@
}
}
- class TestDeviceService implements DeviceService {
+ class TestDeviceService extends DeviceServiceAdapter {
List<Device> devices = Lists.newArrayList();
Multimap<DeviceId, Port> devicePorts = HashMultimap.create();
diff --git a/core/net/src/test/java/org/onlab/onos/net/topology/impl/DefaultTopologyProviderTest.java b/core/net/src/test/java/org/onlab/onos/net/topology/impl/DefaultTopologyProviderTest.java
index 56594233..7e67c6d 100644
--- a/core/net/src/test/java/org/onlab/onos/net/topology/impl/DefaultTopologyProviderTest.java
+++ b/core/net/src/test/java/org/onlab/onos/net/topology/impl/DefaultTopologyProviderTest.java
@@ -154,6 +154,11 @@
device("e"), device("f"));
}
+ @Override
+ public Iterable<Device> getAvailableDevices() {
+ return getDevices();
+ }
+
void post(DeviceEvent event) {
eventDispatcher.post(event);
}
@@ -174,6 +179,11 @@
link("e", 1, "f", 1), link("f", 1, "e", 1));
}
+ @Override
+ public Iterable<Link> getActiveLinks() {
+ return getLinks();
+ }
+
void post(LinkEvent event) {
eventDispatcher.post(event);
}
diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/device/impl/GossipDeviceStore.java b/core/store/dist/src/main/java/org/onlab/onos/store/device/impl/GossipDeviceStore.java
index 78838d0..03c0cb6 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/device/impl/GossipDeviceStore.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/device/impl/GossipDeviceStore.java
@@ -16,6 +16,7 @@
package org.onlab.onos.store.device.impl;
import com.google.common.base.Function;
+import com.google.common.base.Predicate;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Maps;
@@ -231,6 +232,18 @@
}
@Override
+ public Iterable<Device> getAvailableDevices() {
+ return FluentIterable.from(getDevices())
+ .filter(new Predicate<Device>() {
+
+ @Override
+ public boolean apply(Device input) {
+ return isAvailable(input.id());
+ }
+ });
+ }
+
+ @Override
public Device getDevice(DeviceId deviceId) {
return devices.get(deviceId);
}
diff --git a/core/store/trivial/src/main/java/org/onlab/onos/store/trivial/impl/SimpleDeviceStore.java b/core/store/trivial/src/main/java/org/onlab/onos/store/trivial/impl/SimpleDeviceStore.java
index df6ed3c..647b657 100644
--- a/core/store/trivial/src/main/java/org/onlab/onos/store/trivial/impl/SimpleDeviceStore.java
+++ b/core/store/trivial/src/main/java/org/onlab/onos/store/trivial/impl/SimpleDeviceStore.java
@@ -15,6 +15,7 @@
*/
package org.onlab.onos.store.trivial.impl;
+import com.google.common.base.Predicate;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Maps;
@@ -123,6 +124,18 @@
}
@Override
+ public Iterable<Device> getAvailableDevices() {
+ return FluentIterable.from(getDevices())
+ .filter(new Predicate<Device>() {
+
+ @Override
+ public boolean apply(Device input) {
+ return isAvailable(input.id());
+ }
+ });
+ }
+
+ @Override
public Device getDevice(DeviceId deviceId) {
return devices.get(deviceId);
}
diff --git a/providers/lldp/pom.xml b/providers/lldp/pom.xml
index 521f5fe..7d5edbe 100644
--- a/providers/lldp/pom.xml
+++ b/providers/lldp/pom.xml
@@ -32,4 +32,12 @@
<description>ONOS LLDP Link Discovery</description>
+ <dependencies>
+ <dependency>
+ <groupId>org.onlab.onos</groupId>
+ <artifactId>onos-api</artifactId>
+ <classifier>tests</classifier>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
</project>
diff --git a/providers/lldp/src/test/java/org/onlab/onos/provider/lldp/impl/LLDPLinkProviderTest.java b/providers/lldp/src/test/java/org/onlab/onos/provider/lldp/impl/LLDPLinkProviderTest.java
index 4311bb4..3416da3 100644
--- a/providers/lldp/src/test/java/org/onlab/onos/provider/lldp/impl/LLDPLinkProviderTest.java
+++ b/providers/lldp/src/test/java/org/onlab/onos/provider/lldp/impl/LLDPLinkProviderTest.java
@@ -37,7 +37,7 @@
import org.onlab.onos.net.PortNumber;
import org.onlab.onos.net.device.DeviceEvent;
import org.onlab.onos.net.device.DeviceListener;
-import org.onlab.onos.net.device.DeviceService;
+import org.onlab.onos.net.device.DeviceServiceAdapter;
import org.onlab.onos.net.flow.TrafficTreatment;
import org.onlab.onos.net.link.LinkDescription;
import org.onlab.onos.net.link.LinkProvider;
@@ -376,7 +376,7 @@
}
}
- private class TestDeviceService implements DeviceService {
+ private class TestDeviceService extends DeviceServiceAdapter {
private Map<DeviceId, Device> devices = new HashMap<>();
private final ArrayListMultimap<DeviceId, Port> ports =
@@ -408,7 +408,7 @@
@Override
public Iterable<Device> getDevices() {
- return Collections.EMPTY_LIST;
+ return Collections.emptyList();
}
@Override