Use LinkTuple as identifier.
- Use LinkTuple as Identifier for
- Link, LinkEvent
- Register LinkTuple to KryoFactory
- Fix mocked Link to return LinkTuple
Change-Id: Ie58f31d4b2c906bc2343e2414d06190828e7e5c9
diff --git a/src/main/java/net/onrc/onos/core/topology/Link.java b/src/main/java/net/onrc/onos/core/topology/Link.java
index f54ff51..80d450e 100644
--- a/src/main/java/net/onrc/onos/core/topology/Link.java
+++ b/src/main/java/net/onrc/onos/core/topology/Link.java
@@ -1,7 +1,7 @@
package net.onrc.onos.core.topology;
import net.onrc.onos.core.topology.web.serializers.LinkSerializer;
-
+import net.onrc.onos.core.util.LinkTuple;
import org.codehaus.jackson.map.annotate.JsonSerialize;
// TODO Everything returned by these interfaces must be either Unmodifiable view,
@@ -11,6 +11,14 @@
*/
@JsonSerialize(using = LinkSerializer.class)
public interface Link extends ITopologyElement, StringAttributes {
+
+ /**
+ * Gets a {@link LinkTuple} that identifies this link.
+ *
+ * @return a LinkTuple representing the Port
+ */
+ public LinkTuple getLinkTuple();
+
/**
* Gets the source switch for the link.
*
diff --git a/src/main/java/net/onrc/onos/core/topology/LinkEvent.java b/src/main/java/net/onrc/onos/core/topology/LinkEvent.java
index 01b4efe..dadf3c6 100644
--- a/src/main/java/net/onrc/onos/core/topology/LinkEvent.java
+++ b/src/main/java/net/onrc/onos/core/topology/LinkEvent.java
@@ -5,6 +5,7 @@
import net.onrc.onos.core.topology.web.serializers.LinkEventSerializer;
import net.onrc.onos.core.util.Dpid;
+import net.onrc.onos.core.util.LinkTuple;
import net.onrc.onos.core.util.PortNumber;
import net.onrc.onos.core.util.SwitchPort;
@@ -22,8 +23,7 @@
@JsonSerialize(using = LinkEventSerializer.class)
public class LinkEvent extends TopologyElement<LinkEvent> {
- private final SwitchPort src;
- private final SwitchPort dst;
+ private final LinkTuple id;
// TODO add LastSeenTime, Capacity if appropriate
/**
@@ -31,8 +31,18 @@
*/
@Deprecated
protected LinkEvent() {
- src = null;
- dst = null;
+ id = null;
+ }
+
+ /**
+ * Creates the Link object.
+ *
+ * @param id link tuple to identify this link
+ */
+ public LinkEvent(LinkTuple id) {
+ Validate.notNull(id);
+
+ this.id = id;
}
/**
@@ -42,11 +52,7 @@
* @param dst destination SwitchPort
*/
public LinkEvent(SwitchPort src, SwitchPort dst) {
- Validate.notNull(src);
- Validate.notNull(dst);
-
- this.src = src;
- this.dst = dst;
+ this(new LinkTuple(src, dst));
}
/**
@@ -56,16 +62,14 @@
*/
public LinkEvent(LinkEvent original) {
super(original);
- this.src = original.src;
- this.dst = original.dst;
+ Validate.isTrue(Objects.equals(this.id, original.id));
+
+ this.id = original.id;
}
// TODO probably want to remove this
public LinkEvent(Link link) {
- src = new SwitchPort(link.getSrcSwitch().getDpid(),
- link.getSrcPort().getNumber());
- dst = new SwitchPort(link.getDstSwitch().getDpid(),
- link.getDstPort().getNumber());
+ this(link.getLinkTuple());
// FIXME losing attributes here
}
@@ -79,8 +83,16 @@
*/
public LinkEvent(Dpid srcDpid, PortNumber srcPortNo,
Dpid dstDpid, PortNumber dstPortNo) {
- src = new SwitchPort(srcDpid, srcPortNo);
- dst = new SwitchPort(dstDpid, dstPortNo);
+ this(new LinkTuple(srcDpid, srcPortNo, dstDpid, dstPortNo));
+ }
+
+ /**
+ * Gets a {@link LinkTuple} that identifies this link.
+ *
+ * @return a LinkTuple representing the Port
+ */
+ public LinkTuple getLinkTuple() {
+ return id;
}
/**
@@ -89,7 +101,7 @@
* @return source SwitchPort.
*/
public SwitchPort getSrc() {
- return src;
+ return getLinkTuple().getSrc();
}
/**
@@ -98,12 +110,12 @@
* @return destination SwitchPort.
*/
public SwitchPort getDst() {
- return dst;
+ return getLinkTuple().getDst();
}
@Override
public String toString() {
- return "[LinkEvent " + src + "->" + dst + "]";
+ return "[LinkEvent " + getSrc() + "->" + getDst() + "]";
}
public static final int LINKID_BYTES = 2 + PortEvent.PORTID_BYTES * 2;
@@ -127,16 +139,15 @@
}
public ByteBuffer getIDasByteBuffer() {
- return getLinkID(src.getDpid(), src.getPortNumber(),
- dst.getDpid(), dst.getPortNumber());
+ return getLinkID(getSrc().getDpid(), getSrc().getPortNumber(),
+ getDst().getDpid(), getDst().getPortNumber());
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
- result = prime * result + ((dst == null) ? 0 : dst.hashCode());
- result = prime * result + ((src == null) ? 0 : src.hashCode());
+ result = prime * result + Objects.hashCode(id);
return result;
}
@@ -160,7 +171,6 @@
return false;
}
- return Objects.equals(this.src, other.src) &&
- Objects.equals(this.dst, other.dst);
+ return Objects.equals(this.id, other.id);
}
}
diff --git a/src/main/java/net/onrc/onos/core/topology/LinkImpl.java b/src/main/java/net/onrc/onos/core/topology/LinkImpl.java
index 26c260a..a573540 100644
--- a/src/main/java/net/onrc/onos/core/topology/LinkImpl.java
+++ b/src/main/java/net/onrc/onos/core/topology/LinkImpl.java
@@ -2,6 +2,8 @@
import java.util.Map;
+import net.onrc.onos.core.util.LinkTuple;
+
import org.apache.commons.lang.Validate;
/**
@@ -62,6 +64,11 @@
}
@Override
+ public LinkTuple getLinkTuple() {
+ return linkObj.getLinkTuple();
+ }
+
+ @Override
public Switch getSrcSwitch() {
topology.acquireReadLock();
try {
diff --git a/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java b/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java
index ae1fdb9..07efbbe 100644
--- a/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java
+++ b/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java
@@ -51,6 +51,7 @@
import net.onrc.onos.core.util.IPv4Net;
import net.onrc.onos.core.util.IPv6;
import net.onrc.onos.core.util.IPv6Net;
+import net.onrc.onos.core.util.LinkTuple;
import net.onrc.onos.core.util.PortNumber;
import net.onrc.onos.core.util.Switch;
import net.onrc.onos.core.util.SwitchPort;
@@ -193,6 +194,7 @@
kryo.register(PortNumber.class);
kryo.register(Switch.class);
kryo.register(SwitchPort.class);
+ kryo.register(LinkTuple.class);
// New data model-related classes
kryo.register(DeviceEvent.class);