Added simple link manager implementation.
Added link admin stuff; unit tests to come.
diff --git a/net/api/src/main/java/org/onlab/onos/net/DefaultDevice.java b/net/api/src/main/java/org/onlab/onos/net/DefaultDevice.java
index 8b4591c..69c10b7 100644
--- a/net/api/src/main/java/org/onlab/onos/net/DefaultDevice.java
+++ b/net/api/src/main/java/org/onlab/onos/net/DefaultDevice.java
@@ -4,7 +4,7 @@
import java.util.Objects;
-import static com.google.common.base.Objects.toStringHelper;
+import static com.google.common.base.MoreObjects.toStringHelper;
/**
* Default infrastructure device model implementation.
diff --git a/net/api/src/main/java/org/onlab/onos/net/DefaultLink.java b/net/api/src/main/java/org/onlab/onos/net/DefaultLink.java
index b21b91c..1f7783c 100644
--- a/net/api/src/main/java/org/onlab/onos/net/DefaultLink.java
+++ b/net/api/src/main/java/org/onlab/onos/net/DefaultLink.java
@@ -1,28 +1,34 @@
package org.onlab.onos.net;
-import org.onlab.onos.net.link.LinkDescription;
+import org.onlab.onos.net.provider.ProviderId;
import java.util.Objects;
-import static com.google.common.base.Objects.toStringHelper;
+import static com.google.common.base.MoreObjects.toStringHelper;
/**
* Default infrastructure link model implementation.
*/
-public class DefaultLink implements LinkDescription {
+public class DefaultLink extends AbstractModel implements Link {
- private ConnectPoint src;
- private ConnectPoint dst;
+ private final ConnectPoint src;
+ private final ConnectPoint dst;
+ private final Type type;
/**
* Creates a link description using the supplied information.
*
- * @param src link source
- * @param dst link destination
+ * @param providerId provider identity
+ * @param src link source
+ * @param dst link destination
+ * @param type link type
*/
- public DefaultLink(ConnectPoint src, ConnectPoint dst) {
+ public DefaultLink(ProviderId providerId, ConnectPoint src, ConnectPoint dst,
+ Type type) {
+ super(providerId);
this.src = src;
this.dst = dst;
+ this.type = type;
}
@Override
@@ -35,18 +41,23 @@
return dst;
}
+ @Override
+ public Type type() {
+ return type;
+ }
@Override
public int hashCode() {
- return Objects.hash(src, dst);
+ return Objects.hash(src, dst, type);
}
@Override
public boolean equals(Object obj) {
- if (obj instanceof DefaultDevice) {
+ if (obj instanceof DefaultLink) {
final DefaultLink other = (DefaultLink) obj;
return Objects.equals(this.src, other.src) &&
- Objects.equals(this.dst, other.dst);
+ Objects.equals(this.dst, other.dst) &&
+ Objects.equals(this.type, other.type);
}
return false;
}
@@ -56,6 +67,7 @@
return toStringHelper(this)
.add("src", src)
.add("dst", dst)
+ .add("type", type)
.toString();
}
diff --git a/net/api/src/main/java/org/onlab/onos/net/DefaultPort.java b/net/api/src/main/java/org/onlab/onos/net/DefaultPort.java
index 56a2979..378cc37 100644
--- a/net/api/src/main/java/org/onlab/onos/net/DefaultPort.java
+++ b/net/api/src/main/java/org/onlab/onos/net/DefaultPort.java
@@ -2,7 +2,7 @@
import java.util.Objects;
-import static com.google.common.base.Objects.toStringHelper;
+import static com.google.common.base.MoreObjects.toStringHelper;
/**
* Default port implementation.
diff --git a/net/api/src/main/java/org/onlab/onos/net/ElementId.java b/net/api/src/main/java/org/onlab/onos/net/ElementId.java
index 9f7dffb..73e1f29 100644
--- a/net/api/src/main/java/org/onlab/onos/net/ElementId.java
+++ b/net/api/src/main/java/org/onlab/onos/net/ElementId.java
@@ -3,7 +3,7 @@
import java.net.URI;
import java.util.Objects;
-import static com.google.common.base.Objects.toStringHelper;
+import static com.google.common.base.MoreObjects.toStringHelper;
/**
* Immutable representation of a network element identity.
diff --git a/net/api/src/main/java/org/onlab/onos/net/Link.java b/net/api/src/main/java/org/onlab/onos/net/Link.java
index e0f46b5..0f4275e 100644
--- a/net/api/src/main/java/org/onlab/onos/net/Link.java
+++ b/net/api/src/main/java/org/onlab/onos/net/Link.java
@@ -37,6 +37,13 @@
*/
ConnectPoint dst();
+ /**
+ * Returns the link type.
+ *
+ * @return link type
+ */
+ Type type();
+
// LinkInfo info(); // Additional link information / decorations
}
diff --git a/net/api/src/main/java/org/onlab/onos/net/device/DefaultDeviceDescription.java b/net/api/src/main/java/org/onlab/onos/net/device/DefaultDeviceDescription.java
index 3d340b2..833625d 100644
--- a/net/api/src/main/java/org/onlab/onos/net/device/DefaultDeviceDescription.java
+++ b/net/api/src/main/java/org/onlab/onos/net/device/DefaultDeviceDescription.java
@@ -2,7 +2,7 @@
import java.net.URI;
-import static com.google.common.base.Objects.toStringHelper;
+import static com.google.common.base.MoreObjects.toStringHelper;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.onlab.onos.net.Device.Type;
diff --git a/net/api/src/main/java/org/onlab/onos/net/link/DefaultLinkDescription.java b/net/api/src/main/java/org/onlab/onos/net/link/DefaultLinkDescription.java
index 3ed7225..952c1dc 100644
--- a/net/api/src/main/java/org/onlab/onos/net/link/DefaultLinkDescription.java
+++ b/net/api/src/main/java/org/onlab/onos/net/link/DefaultLinkDescription.java
@@ -1,24 +1,28 @@
package org.onlab.onos.net.link;
import org.onlab.onos.net.ConnectPoint;
+import org.onlab.onos.net.Link;
/**
* Default implementation of immutable link description entity.
*/
public class DefaultLinkDescription implements LinkDescription {
- private ConnectPoint src;
- private ConnectPoint dst;
+ private final ConnectPoint src;
+ private final ConnectPoint dst;
+ private final Link.Type type;
/**
* Creates a link description using the supplied information.
*
- * @param src link source
- * @param dst link destination
+ * @param src link source
+ * @param dst link destination
+ * @param type link type
*/
- public DefaultLinkDescription(ConnectPoint src, ConnectPoint dst) {
+ public DefaultLinkDescription(ConnectPoint src, ConnectPoint dst, Link.Type type) {
this.src = src;
this.dst = dst;
+ this.type = type;
}
@Override
@@ -31,4 +35,9 @@
return dst;
}
+ @Override
+ public Link.Type type() {
+ return null;
+ }
+
}
diff --git a/net/api/src/main/java/org/onlab/onos/net/link/LinkAdminService.java b/net/api/src/main/java/org/onlab/onos/net/link/LinkAdminService.java
new file mode 100644
index 0000000..228b3c9
--- /dev/null
+++ b/net/api/src/main/java/org/onlab/onos/net/link/LinkAdminService.java
@@ -0,0 +1,27 @@
+package org.onlab.onos.net.link;
+
+import org.onlab.onos.net.ConnectPoint;
+import org.onlab.onos.net.DeviceId;
+
+/**
+ * Service for administering the inventory of infrastructure links.
+ */
+public interface LinkAdminService {
+
+ /**
+ * Removes all infrastructure links leading to and from the
+ * specified connection point.
+ *
+ * @param connectPoint connection point
+ */
+ void removeLinks(ConnectPoint connectPoint);
+
+ /**
+ * Removes all infrastructure links leading to and from the
+ * specified device.
+ *
+ * @param deviceId device identifier
+ */
+ void removeLinks(DeviceId deviceId);
+
+}
diff --git a/net/api/src/main/java/org/onlab/onos/net/link/LinkDescription.java b/net/api/src/main/java/org/onlab/onos/net/link/LinkDescription.java
index 83af07c..b1be82c 100644
--- a/net/api/src/main/java/org/onlab/onos/net/link/LinkDescription.java
+++ b/net/api/src/main/java/org/onlab/onos/net/link/LinkDescription.java
@@ -1,6 +1,7 @@
package org.onlab.onos.net.link;
import org.onlab.onos.net.ConnectPoint;
+import org.onlab.onos.net.Link;
/**
* Describes an infrastructure link.
@@ -21,5 +22,13 @@
*/
ConnectPoint dst();
+ /**
+ * Returns the link type.
+ *
+ * @return link type
+ */
+ Link.Type type();
+
+
// Add further link attributes
}
diff --git a/net/api/src/main/java/org/onlab/onos/net/link/LinkProviderService.java b/net/api/src/main/java/org/onlab/onos/net/link/LinkProviderService.java
index 7969022..7019660 100644
--- a/net/api/src/main/java/org/onlab/onos/net/link/LinkProviderService.java
+++ b/net/api/src/main/java/org/onlab/onos/net/link/LinkProviderService.java
@@ -1,5 +1,7 @@
package org.onlab.onos.net.link;
+import org.onlab.onos.net.ConnectPoint;
+import org.onlab.onos.net.DeviceId;
import org.onlab.onos.net.provider.ProviderService;
/**
@@ -21,4 +23,20 @@
*/
void linkVanished(LinkDescription linkDescription);
+ /**
+ * Signals that infrastructure links associated with the specified
+ * connect point have vanished.
+ *
+ * @param connectPoint connect point
+ */
+ void linksVanished(ConnectPoint connectPoint);
+
+ /**
+ * Signals that infrastructure links associated with the specified
+ * device have vanished.
+ *
+ * @param deviceId device identifier
+ */
+ void linksVanished(DeviceId deviceId);
+
}
diff --git a/net/api/src/main/java/org/onlab/onos/net/link/LinkService.java b/net/api/src/main/java/org/onlab/onos/net/link/LinkService.java
index fadecdb..77afb7a 100644
--- a/net/api/src/main/java/org/onlab/onos/net/link/LinkService.java
+++ b/net/api/src/main/java/org/onlab/onos/net/link/LinkService.java
@@ -1,5 +1,6 @@
package org.onlab.onos.net.link;
+import org.onlab.onos.net.ConnectPoint;
import org.onlab.onos.net.DeviceId;
import org.onlab.onos.net.Link;
@@ -11,6 +12,13 @@
public interface LinkService {
/**
+ * Returns the count of all known infrastructure links.
+ *
+ * @return number of infrastructure links
+ */
+ int getLinkCount();
+
+ /**
* Returns a collection of all known infrastructure links.
*
* @return all infrastructure links
@@ -43,6 +51,43 @@
Set<Link> getDeviceInressLinks(DeviceId deviceId);
/**
+ * Returns set of all infrastructure links leading to and from the
+ * specified connection point.
+ *
+ * @param connectPoint connection point
+ * @return set of links
+ */
+ Set<Link> getLinks(ConnectPoint connectPoint);
+
+ /**
+ * Returns set of all infrastructure links leading from the specified
+ * connection point.
+ *
+ * @param connectPoint connection point
+ * @return set of device egress links
+ */
+ Set<Link> getEgressLinks(ConnectPoint connectPoint);
+
+ /**
+ * Returns set of all infrastructure links leading to the specified
+ * connection point.
+ *
+ * @param connectPoint connection point
+ * @return set of device ingress links
+ */
+ Set<Link> getInressLinks(ConnectPoint connectPoint);
+
+ /**
+ * Returns set of all infrastructure links between the specified source
+ * and destination connection points.
+ *
+ * @param src source connection point
+ * @param dst destination connection point
+ * @return set of links
+ */
+ Set<Link> getLinks(ConnectPoint src, ConnectPoint dst);
+
+ /**
* Adds the specified link listener.
*
* @param listener link listener
diff --git a/net/api/src/main/java/org/onlab/onos/net/provider/ProviderId.java b/net/api/src/main/java/org/onlab/onos/net/provider/ProviderId.java
index 3af20ad..a945354 100644
--- a/net/api/src/main/java/org/onlab/onos/net/provider/ProviderId.java
+++ b/net/api/src/main/java/org/onlab/onos/net/provider/ProviderId.java
@@ -2,7 +2,7 @@
import java.util.Objects;
-import static com.google.common.base.Objects.toStringHelper;
+import static com.google.common.base.MoreObjects.toStringHelper;
/**
* Notion of provider identity.