ONOS-3633 - Implementation of virtual network point to point intent provider.
Change-Id: Ie2c1e5ac278bc0dd6259479c44dd92b9b625e90b
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelId.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelId.java
index a06ab3a..74a3029 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelId.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelId.java
@@ -23,39 +23,35 @@
* Representation of a Tunnel Id.
*/
@Beta
-public final class TunnelId extends Identifier<Long> {
+public final class TunnelId extends Identifier<String> {
/**
* Creates an tunnel identifier from the specified tunnel.
*
- * @param value long value
+ * @param value string value
* @return tunnel identifier
*/
- public static TunnelId valueOf(long value) {
- return new TunnelId(value);
- }
-
public static TunnelId valueOf(String value) {
- return new TunnelId(Long.parseLong(value));
+ return new TunnelId(value);
}
/**
* Constructor for serializer.
*/
TunnelId() {
- super(0L);
+ super("0");
}
/**
- * Constructs the ID corresponding to a given long value.
+ * Constructs the ID corresponding to a given string value.
*
* @param value the underlying value of this ID
*/
- TunnelId(long value) {
+ TunnelId(String value) {
super(value);
}
@Override
public String toString() {
- return "0x" + Long.toHexString(identifier);
+ return id();
}
}
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/DefaultVirtualLink.java b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/DefaultVirtualLink.java
index 2b86e98..ff42dcd 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/DefaultVirtualLink.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/DefaultVirtualLink.java
@@ -25,27 +25,28 @@
import java.util.Objects;
import static com.google.common.base.MoreObjects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
/**
* Default representation of a virtual link.
*/
public final class DefaultVirtualLink extends DefaultLink implements VirtualLink {
- private static final String VIRTUAL = "virtual";
- private static final ProviderId PID = new ProviderId(VIRTUAL, VIRTUAL);
+ private static final String VIRTUAL = "virtualLink";
+ public static final ProviderId PID = new ProviderId(VIRTUAL, VIRTUAL);
private final NetworkId networkId;
private final TunnelId tunnelId;
/**
- * Constructor for a default virtual link.
+ * Private constructor for a default virtual link.
*
* @param networkId network identifier
* @param src source connection point
* @param dst destination connection point
* @param tunnelId tunnel identifier
*/
- public DefaultVirtualLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst, TunnelId tunnelId) {
+ private DefaultVirtualLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst, TunnelId tunnelId) {
super(PID, src, dst, Type.VIRTUAL, DefaultAnnotations.builder().build());
this.networkId = networkId;
this.tunnelId = tunnelId;
@@ -88,4 +89,84 @@
public String toString() {
return toStringHelper(this).add("networkId", networkId).add("tunnelId", tunnelId).toString();
}
+
+ /**
+ * Creates a new default virtual link builder.
+ *
+ * @return default virtual link builder
+ */
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ /**
+ * Builder for DefaultVirtualLink objects.
+ */
+ public static final class Builder extends DefaultLink.Builder {
+ private NetworkId networkId;
+ private ConnectPoint src;
+ private ConnectPoint dst;
+ private TunnelId tunnelId;
+
+ private Builder() {
+ // Hide constructor
+ }
+
+ /**
+ * Sets the network identifier to be used by the builder.
+ *
+ * @param networkId network identifier
+ * @return self
+ */
+ public Builder networkId(NetworkId networkId) {
+ this.networkId = networkId;
+ return this;
+ }
+
+ /**
+ * Sets the source connect point to be used by the builder.
+ *
+ * @param src source connect point
+ * @return self
+ */
+ public Builder src(ConnectPoint src) {
+ this.src = src;
+ return this;
+ }
+
+ /**
+ * Sets the destination connect point to be used by the builder.
+ *
+ * @param dst new destination connect point
+ * @return self
+ */
+ public Builder dst(ConnectPoint dst) {
+ this.dst = dst;
+ return this;
+ }
+
+ /**
+ * Sets the tunnel identifier to be used by the builder.
+ *
+ * @param tunnelId tunnel identifier
+ * @return self
+ */
+ public Builder tunnelId(TunnelId tunnelId) {
+ this.tunnelId = tunnelId;
+ return this;
+ }
+
+ /**
+ * Builds a default virtual link object from the accumulated parameters.
+ *
+ * @return default virtual link object
+ */
+ public DefaultVirtualLink build() {
+ checkNotNull(src, "Source connect point cannot be null");
+ checkNotNull(dst, "Destination connect point cannot be null");
+ checkNotNull(networkId, "Network Id cannot be null");
+
+ return new DefaultVirtualLink(networkId, src, dst, tunnelId);
+ }
+ }
}
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualLink.java b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualLink.java
index ddccb1b..10177a7 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualLink.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualLink.java
@@ -16,6 +16,7 @@
package org.onosproject.incubator.net.virtual;
import com.google.common.annotations.Beta;
+import org.onosproject.incubator.net.tunnel.TunnelId;
import org.onosproject.net.Link;
/**
@@ -23,4 +24,10 @@
*/
@Beta
public interface VirtualLink extends VirtualElement, Link {
+ /**
+ * Returns the tunnel identifier to which this virtual link belongs.
+ *
+ * @return tunnel identifier
+ */
+ TunnelId tunnelId();
}
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkAdminService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkAdminService.java
index ef22644..c903e61 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkAdminService.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkAdminService.java
@@ -16,7 +16,6 @@
package org.onosproject.incubator.net.virtual;
import com.google.common.annotations.Beta;
-import org.onosproject.incubator.net.tunnel.TunnelId;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DeviceId;
import org.onosproject.net.Port;
@@ -96,13 +95,11 @@
* @param networkId network identifier
* @param src source connection point
* @param dst destination connection point
- * @param realizedBy identifier of the tunnel using which this link is realized
* @return newly created virtual link
* @throws org.onlab.util.ItemNotFoundException if no such network found
*/
VirtualLink createVirtualLink(NetworkId networkId,
- ConnectPoint src, ConnectPoint dst,
- TunnelId realizedBy);
+ ConnectPoint src, ConnectPoint dst);
// TODO: Discuss whether we should provide an alternate createVirtualLink
// which is backed by a Path instead; I'm leaning towards not doing that.
@@ -121,11 +118,11 @@
* Creates a new virtual port on the specified device.
*
* @param networkId network identifier
- * @param deviceId device identifier
- * @param portNumber port number
- * @param realizedBy underlying port using which this virtual port is realized
+ * @param deviceId virtual device identifier
+ * @param portNumber virtual port number
+ * @param realizedBy underlying physical port using which this virtual port is realized
* @return newly created port
- * @throws org.onlab.util.ItemNotFoundException if no such network or device found
+ * @throws org.onlab.util.ItemNotFoundException if no such network or device is found
*/
VirtualPort createVirtualPort(NetworkId networkId, DeviceId deviceId,
PortNumber portNumber, Port realizedBy);
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkStore.java b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkStore.java
index 218c77d..35fb0c3 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkStore.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkStore.java
@@ -89,11 +89,18 @@
* @param networkId network identifier
* @param src source end-point of the link
* @param dst destination end-point of the link
- * @param realizedBy underlying tunnel using which this link is realized
+ * @param realizedBy underlying tunnel identifier using which this link is realized
* @return the virtual link
*/
- VirtualLink addLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst,
- TunnelId realizedBy);
+ VirtualLink addLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst, TunnelId realizedBy);
+
+ /**
+ * Updates the tunnelId in the virtual link.
+ *
+ * @param virtualLink virtual link
+ * @param tunnelId tunnel identifier
+ */
+ void updateLink(VirtualLink virtualLink, TunnelId tunnelId);
/**
* Removes the specified link from the store.
@@ -101,8 +108,9 @@
* @param networkId network identifier
* @param src source connection point
* @param dst destination connection point
+ * @return the virtual link
*/
- void removeLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst);
+ VirtualLink removeLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst);
/**
* Adds a new virtual port to the network.
diff --git a/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/DefaultTunnelTest.java b/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/DefaultTunnelTest.java
index 2f5a570..e9aa30c 100644
--- a/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/DefaultTunnelTest.java
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/DefaultTunnelTest.java
@@ -44,7 +44,7 @@
.valueOf(32421));
DefaultGroupId groupId = new DefaultGroupId(92034);
TunnelName tunnelName = TunnelName.tunnelName("TunnelName");
- TunnelId tunnelId = TunnelId.valueOf(41654654);
+ TunnelId tunnelId = TunnelId.valueOf("41654654");
ProviderId producerName1 = new ProviderId("producer1", "13");
ProviderId producerName2 = new ProviderId("producer2", "13");
Tunnel p1 = new DefaultTunnel(producerName1, src, dst, Tunnel.Type.VXLAN,
diff --git a/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelEventTest.java b/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelEventTest.java
index 307dc50..c38f755 100644
--- a/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelEventTest.java
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelEventTest.java
@@ -48,7 +48,7 @@
.valueOf(32421));
DefaultGroupId groupId = new DefaultGroupId(92034);
TunnelName tunnelName = TunnelName.tunnelName("TunnelName");
- TunnelId tunnelId = TunnelId.valueOf(41654654);
+ TunnelId tunnelId = TunnelId.valueOf("41654654");
ProviderId producerName1 = new ProviderId("producer1", "13");
Tunnel p1 = new DefaultTunnel(producerName1, src, dst, Tunnel.Type.VXLAN,
Tunnel.State.ACTIVE, groupId, tunnelId,
diff --git a/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelIdTest.java b/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelIdTest.java
index d5159fc..22fac69 100644
--- a/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelIdTest.java
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelIdTest.java
@@ -30,9 +30,9 @@
*/
public class TunnelIdTest {
- final TunnelId tunnelId1 = TunnelId.valueOf(1);
- final TunnelId sameAstunnelId1 = TunnelId.valueOf(1);
- final TunnelId tunnelId2 = TunnelId.valueOf(2);
+ final TunnelId tunnelId1 = TunnelId.valueOf("1");
+ final TunnelId sameAstunnelId1 = TunnelId.valueOf("1");
+ final TunnelId tunnelId2 = TunnelId.valueOf("2");
/**
* Checks that the TunnelId class is immutable.
@@ -58,7 +58,7 @@
*/
@Test
public void testConstruction() {
- final long tunnelIdValue = 7777L;
+ final String tunnelIdValue = "7777";
final TunnelId tunnelId = TunnelId.valueOf(tunnelIdValue);
assertThat(tunnelId, is(notNullValue()));
assertThat(tunnelId.id(), is(tunnelIdValue));
diff --git a/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelSubscriptionTest.java b/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelSubscriptionTest.java
index 6d69ea745..fc4d04c 100644
--- a/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelSubscriptionTest.java
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelSubscriptionTest.java
@@ -45,7 +45,7 @@
TunnelEndPoint dst = IpTunnelEndPoint.ipTunnelPoint(IpAddress.valueOf(32421));
ApplicationId appId = new DefaultApplicationId(243, "test");
ApplicationId appId2 = new DefaultApplicationId(2431, "test1");
- TunnelId tunnelId = TunnelId.valueOf(41654654);
+ TunnelId tunnelId = TunnelId.valueOf("41654654");
TunnelSubscription p1 = new TunnelSubscription(appId, src, dst, tunnelId, Tunnel.Type.VXLAN,
null);
TunnelSubscription p2 = new TunnelSubscription(appId, src, dst, tunnelId, Tunnel.Type.VXLAN,
diff --git a/incubator/api/src/test/java/org/onosproject/incubator/net/virtual/DefaultVirtualLinkTest.java b/incubator/api/src/test/java/org/onosproject/incubator/net/virtual/DefaultVirtualLinkTest.java
index f522293..71e214a 100644
--- a/incubator/api/src/test/java/org/onosproject/incubator/net/virtual/DefaultVirtualLinkTest.java
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/virtual/DefaultVirtualLinkTest.java
@@ -40,6 +40,60 @@
assertThatClassIsImmutable(DefaultVirtualLink.class);
}
+ /**
+ * Tests the DefaultVirtualLink Builder to ensure that the src cannot be null.
+ */
+ @Test(expected = NullPointerException.class)
+ public void testBuilderNullSrc() {
+ DefaultVirtualDevice device1 =
+ new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue1));
+ DefaultVirtualDevice device2 =
+ new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue2));
+ ConnectPoint src = new ConnectPoint(device1.id(), PortNumber.portNumber(1));
+ ConnectPoint dst = new ConnectPoint(device2.id(), PortNumber.portNumber(2));
+
+ DefaultVirtualLink.builder()
+ .src(null)
+ .build();
+ }
+
+ /**
+ * Tests the DefaultVirtualLink Builder to ensure that the dst cannot be null.
+ */
+ @Test(expected = NullPointerException.class)
+ public void testBuilderNullDst() {
+ DefaultVirtualDevice device1 =
+ new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue1));
+ DefaultVirtualDevice device2 =
+ new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue2));
+ ConnectPoint src = new ConnectPoint(device1.id(), PortNumber.portNumber(1));
+ ConnectPoint dst = new ConnectPoint(device2.id(), PortNumber.portNumber(2));
+
+ DefaultVirtualLink.builder()
+ .dst(null)
+ .build();
+ }
+
+ /**
+ * Tests the DefaultVirtualLink Builder to ensure that the networkId cannot be null.
+ */
+ @Test(expected = NullPointerException.class)
+ public void testBuilderNullNetworkId() {
+ DefaultVirtualDevice device1 =
+ new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue1));
+ DefaultVirtualDevice device2 =
+ new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue2));
+ ConnectPoint src = new ConnectPoint(device1.id(), PortNumber.portNumber(1));
+ ConnectPoint dst = new ConnectPoint(device2.id(), PortNumber.portNumber(2));
+
+ DefaultVirtualLink.builder()
+ .networkId(null)
+ .build();
+ }
+
+ /**
+ * Tests the DefaultVirtualLink equality method.
+ */
@Test
public void testEquality() {
DefaultVirtualDevice device1 =
@@ -49,10 +103,30 @@
ConnectPoint src = new ConnectPoint(device1.id(), PortNumber.portNumber(1));
ConnectPoint dst = new ConnectPoint(device2.id(), PortNumber.portNumber(2));
- DefaultVirtualLink link1 = new DefaultVirtualLink(NetworkId.networkId(0), src, dst, TunnelId.valueOf(0));
- DefaultVirtualLink link2 = new DefaultVirtualLink(NetworkId.networkId(0), src, dst, TunnelId.valueOf(0));
- DefaultVirtualLink link3 = new DefaultVirtualLink(NetworkId.networkId(0), src, dst, TunnelId.valueOf(1));
- DefaultVirtualLink link4 = new DefaultVirtualLink(NetworkId.networkId(1), src, dst, TunnelId.valueOf(0));
+ VirtualLink link1 = DefaultVirtualLink.builder()
+ .networkId(NetworkId.networkId(0))
+ .src(src)
+ .dst(dst)
+ .tunnelId(TunnelId.valueOf("1"))
+ .build();
+ VirtualLink link2 = DefaultVirtualLink.builder()
+ .networkId(NetworkId.networkId(0))
+ .src(src)
+ .dst(dst)
+ .tunnelId(TunnelId.valueOf("1"))
+ .build();
+ VirtualLink link3 = DefaultVirtualLink.builder()
+ .networkId(NetworkId.networkId(0))
+ .src(src)
+ .dst(dst)
+ .tunnelId(TunnelId.valueOf("2"))
+ .build();
+ VirtualLink link4 = DefaultVirtualLink.builder()
+ .networkId(NetworkId.networkId(1))
+ .src(src)
+ .dst(dst)
+ .tunnelId(TunnelId.valueOf("3"))
+ .build();
new EqualsTester().addEqualityGroup(link1, link2).addEqualityGroup(link3)
.addEqualityGroup(link4).testEquals();