Brian Stanke
Committed by Gerrit Code Review

ONOS-3633 - Implementation of virtual network point to point intent provider.

Change-Id: Ie2c1e5ac278bc0dd6259479c44dd92b9b625e90b
Showing 29 changed files with 818 additions and 151 deletions
...@@ -20,7 +20,6 @@ import org.apache.karaf.shell.commands.Argument; ...@@ -20,7 +20,6 @@ import org.apache.karaf.shell.commands.Argument;
20 import org.apache.karaf.shell.commands.Command; 20 import org.apache.karaf.shell.commands.Command;
21 import org.apache.karaf.shell.commands.Option; 21 import org.apache.karaf.shell.commands.Option;
22 import org.onosproject.cli.AbstractShellCommand; 22 import org.onosproject.cli.AbstractShellCommand;
23 -import org.onosproject.incubator.net.tunnel.TunnelId;
24 import org.onosproject.incubator.net.virtual.NetworkId; 23 import org.onosproject.incubator.net.virtual.NetworkId;
25 import org.onosproject.incubator.net.virtual.VirtualNetworkAdminService; 24 import org.onosproject.incubator.net.virtual.VirtualNetworkAdminService;
26 import org.onosproject.net.ConnectPoint; 25 import org.onosproject.net.ConnectPoint;
...@@ -65,12 +64,10 @@ public class VirtualLinkCreateCommand extends AbstractShellCommand { ...@@ -65,12 +64,10 @@ public class VirtualLinkCreateCommand extends AbstractShellCommand {
65 VirtualNetworkAdminService service = get(VirtualNetworkAdminService.class); 64 VirtualNetworkAdminService service = get(VirtualNetworkAdminService.class);
66 ConnectPoint src = new ConnectPoint(DeviceId.deviceId(srcDeviceId), PortNumber.portNumber(srcPortNum)); 65 ConnectPoint src = new ConnectPoint(DeviceId.deviceId(srcDeviceId), PortNumber.portNumber(srcPortNum));
67 ConnectPoint dst = new ConnectPoint(DeviceId.deviceId(dstDeviceId), PortNumber.portNumber(dstPortNum)); 66 ConnectPoint dst = new ConnectPoint(DeviceId.deviceId(dstDeviceId), PortNumber.portNumber(dstPortNum));
68 - //TODO use a real/valid tunnel ID
69 - TunnelId tunnelId = TunnelId.valueOf(0);
70 67
71 - service.createVirtualLink(NetworkId.networkId(networkId), src, dst, tunnelId); 68 + service.createVirtualLink(NetworkId.networkId(networkId), src, dst);
72 if (bidirectional) { 69 if (bidirectional) {
73 - service.createVirtualLink(NetworkId.networkId(networkId), dst, src, tunnelId); 70 + service.createVirtualLink(NetworkId.networkId(networkId), dst, src);
74 } 71 }
75 print("Virtual link successfully created."); 72 print("Virtual link successfully created.");
76 } 73 }
......
...@@ -34,7 +34,7 @@ import java.util.List; ...@@ -34,7 +34,7 @@ import java.util.List;
34 public class VirtualLinkListCommand extends AbstractShellCommand { 34 public class VirtualLinkListCommand extends AbstractShellCommand {
35 35
36 private static final String FMT_VIRTUAL_LINK = 36 private static final String FMT_VIRTUAL_LINK =
37 - "src=%s, dst=%s"; 37 + "src=%s, dst=%s, tunnelId=%s";
38 38
39 @Argument(index = 0, name = "networkId", description = "Network ID", 39 @Argument(index = 0, name = "networkId", description = "Network ID",
40 required = true, multiValued = false) 40 required = true, multiValued = false)
...@@ -65,6 +65,7 @@ public class VirtualLinkListCommand extends AbstractShellCommand { ...@@ -65,6 +65,7 @@ public class VirtualLinkListCommand extends AbstractShellCommand {
65 * @param virtualLink virtual link 65 * @param virtualLink virtual link
66 */ 66 */
67 private void printVirtualLink(VirtualLink virtualLink) { 67 private void printVirtualLink(VirtualLink virtualLink) {
68 - print(FMT_VIRTUAL_LINK, virtualLink.src().toString(), virtualLink.dst().toString()); 68 + print(FMT_VIRTUAL_LINK, virtualLink.src().toString(), virtualLink.dst().toString(),
69 + virtualLink.tunnelId() == null ? null : virtualLink.tunnelId().toString());
69 } 70 }
70 } 71 }
......
...@@ -148,7 +148,7 @@ public class DefaultLink extends AbstractProjectableModel implements Link { ...@@ -148,7 +148,7 @@ public class DefaultLink extends AbstractProjectableModel implements Link {
148 /** 148 /**
149 * Builder for DefaultLink objects. 149 * Builder for DefaultLink objects.
150 */ 150 */
151 - public static final class Builder { 151 + public static class Builder {
152 private ProviderId providerId; 152 private ProviderId providerId;
153 private Annotations annotations = EMPTY; 153 private Annotations annotations = EMPTY;
154 private ConnectPoint src; 154 private ConnectPoint src;
...@@ -157,7 +157,7 @@ public class DefaultLink extends AbstractProjectableModel implements Link { ...@@ -157,7 +157,7 @@ public class DefaultLink extends AbstractProjectableModel implements Link {
157 private State state = ACTIVE; 157 private State state = ACTIVE;
158 private boolean isExpected = false; 158 private boolean isExpected = false;
159 159
160 - private Builder() { 160 + protected Builder() {
161 // Hide constructor 161 // Hide constructor
162 } 162 }
163 163
......
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
1 package org.onosproject.codec.impl; 17 package org.onosproject.codec.impl;
2 18
3 import com.fasterxml.jackson.databind.node.ObjectNode; 19 import com.fasterxml.jackson.databind.node.ObjectNode;
4 import org.onosproject.codec.CodecContext; 20 import org.onosproject.codec.CodecContext;
5 import org.onosproject.codec.JsonCodec; 21 import org.onosproject.codec.JsonCodec;
6 -import org.onosproject.incubator.net.tunnel.TunnelId;
7 import org.onosproject.incubator.net.virtual.DefaultVirtualLink; 22 import org.onosproject.incubator.net.virtual.DefaultVirtualLink;
8 import org.onosproject.incubator.net.virtual.NetworkId; 23 import org.onosproject.incubator.net.virtual.NetworkId;
9 import org.onosproject.incubator.net.virtual.VirtualLink; 24 import org.onosproject.incubator.net.virtual.VirtualLink;
...@@ -19,7 +34,6 @@ public class VirtualLinkCodec extends JsonCodec<VirtualLink> { ...@@ -19,7 +34,6 @@ public class VirtualLinkCodec extends JsonCodec<VirtualLink> {
19 34
20 // JSON field names 35 // JSON field names
21 private static final String NETWORK_ID = "networkId"; 36 private static final String NETWORK_ID = "networkId";
22 - private static final String TUNNEL_ID = "tunnelId";
23 37
24 private static final String NULL_OBJECT_MSG = "VirtualLink cannot be null"; 38 private static final String NULL_OBJECT_MSG = "VirtualLink cannot be null";
25 private static final String MISSING_MEMBER_MSG = " member is required in VirtualLink"; 39 private static final String MISSING_MEMBER_MSG = " member is required in VirtualLink";
...@@ -31,10 +45,6 @@ public class VirtualLinkCodec extends JsonCodec<VirtualLink> { ...@@ -31,10 +45,6 @@ public class VirtualLinkCodec extends JsonCodec<VirtualLink> {
31 JsonCodec<Link> codec = context.codec(Link.class); 45 JsonCodec<Link> codec = context.codec(Link.class);
32 ObjectNode result = codec.encode(vLink, context); 46 ObjectNode result = codec.encode(vLink, context);
33 result.put(NETWORK_ID, vLink.networkId().toString()); 47 result.put(NETWORK_ID, vLink.networkId().toString());
34 - // TODO check if tunnelId needs to be part of VirtualLink interface.
35 - if (vLink instanceof DefaultVirtualLink) {
36 - result.put(TUNNEL_ID, ((DefaultVirtualLink) vLink).tunnelId().toString());
37 - }
38 return result; 48 return result;
39 } 49 }
40 50
...@@ -46,16 +56,17 @@ public class VirtualLinkCodec extends JsonCodec<VirtualLink> { ...@@ -46,16 +56,17 @@ public class VirtualLinkCodec extends JsonCodec<VirtualLink> {
46 JsonCodec<Link> codec = context.codec(Link.class); 56 JsonCodec<Link> codec = context.codec(Link.class);
47 Link link = codec.decode(json, context); 57 Link link = codec.decode(json, context);
48 NetworkId nId = NetworkId.networkId(Long.parseLong(extractMember(NETWORK_ID, json))); 58 NetworkId nId = NetworkId.networkId(Long.parseLong(extractMember(NETWORK_ID, json)));
49 - String tunnelIdStr = json.path(TUNNEL_ID).asText(); 59 + return DefaultVirtualLink.builder()
50 - TunnelId tunnelId = tunnelIdStr != null ? TunnelId.valueOf(tunnelIdStr) 60 + .networkId(nId)
51 - : TunnelId.valueOf(0); 61 + .src(link.src())
52 - return new DefaultVirtualLink(nId, link.src(), link.dst(), tunnelId); 62 + .dst(link.dst())
63 + .build();
53 } 64 }
54 65
55 /** 66 /**
56 * Extract member from JSON ObjectNode. 67 * Extract member from JSON ObjectNode.
57 * 68 *
58 - * @param key key for which value is needed 69 + * @param key key for which value is needed
59 * @param json JSON ObjectNode 70 * @param json JSON ObjectNode
60 * @return member value 71 * @return member value
61 */ 72 */
......
...@@ -23,39 +23,35 @@ import org.onlab.util.Identifier; ...@@ -23,39 +23,35 @@ import org.onlab.util.Identifier;
23 * Representation of a Tunnel Id. 23 * Representation of a Tunnel Id.
24 */ 24 */
25 @Beta 25 @Beta
26 -public final class TunnelId extends Identifier<Long> { 26 +public final class TunnelId extends Identifier<String> {
27 /** 27 /**
28 * Creates an tunnel identifier from the specified tunnel. 28 * Creates an tunnel identifier from the specified tunnel.
29 * 29 *
30 - * @param value long value 30 + * @param value string value
31 * @return tunnel identifier 31 * @return tunnel identifier
32 */ 32 */
33 - public static TunnelId valueOf(long value) {
34 - return new TunnelId(value);
35 - }
36 -
37 public static TunnelId valueOf(String value) { 33 public static TunnelId valueOf(String value) {
38 - return new TunnelId(Long.parseLong(value)); 34 + return new TunnelId(value);
39 } 35 }
40 36
41 /** 37 /**
42 * Constructor for serializer. 38 * Constructor for serializer.
43 */ 39 */
44 TunnelId() { 40 TunnelId() {
45 - super(0L); 41 + super("0");
46 } 42 }
47 43
48 /** 44 /**
49 - * Constructs the ID corresponding to a given long value. 45 + * Constructs the ID corresponding to a given string value.
50 * 46 *
51 * @param value the underlying value of this ID 47 * @param value the underlying value of this ID
52 */ 48 */
53 - TunnelId(long value) { 49 + TunnelId(String value) {
54 super(value); 50 super(value);
55 } 51 }
56 52
57 @Override 53 @Override
58 public String toString() { 54 public String toString() {
59 - return "0x" + Long.toHexString(identifier); 55 + return id();
60 } 56 }
61 } 57 }
......
...@@ -25,27 +25,28 @@ import org.onosproject.net.provider.ProviderId; ...@@ -25,27 +25,28 @@ import org.onosproject.net.provider.ProviderId;
25 import java.util.Objects; 25 import java.util.Objects;
26 26
27 import static com.google.common.base.MoreObjects.toStringHelper; 27 import static com.google.common.base.MoreObjects.toStringHelper;
28 +import static com.google.common.base.Preconditions.checkNotNull;
28 29
29 /** 30 /**
30 * Default representation of a virtual link. 31 * Default representation of a virtual link.
31 */ 32 */
32 public final class DefaultVirtualLink extends DefaultLink implements VirtualLink { 33 public final class DefaultVirtualLink extends DefaultLink implements VirtualLink {
33 34
34 - private static final String VIRTUAL = "virtual"; 35 + private static final String VIRTUAL = "virtualLink";
35 - private static final ProviderId PID = new ProviderId(VIRTUAL, VIRTUAL); 36 + public static final ProviderId PID = new ProviderId(VIRTUAL, VIRTUAL);
36 37
37 private final NetworkId networkId; 38 private final NetworkId networkId;
38 private final TunnelId tunnelId; 39 private final TunnelId tunnelId;
39 40
40 /** 41 /**
41 - * Constructor for a default virtual link. 42 + * Private constructor for a default virtual link.
42 * 43 *
43 * @param networkId network identifier 44 * @param networkId network identifier
44 * @param src source connection point 45 * @param src source connection point
45 * @param dst destination connection point 46 * @param dst destination connection point
46 * @param tunnelId tunnel identifier 47 * @param tunnelId tunnel identifier
47 */ 48 */
48 - public DefaultVirtualLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst, TunnelId tunnelId) { 49 + private DefaultVirtualLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst, TunnelId tunnelId) {
49 super(PID, src, dst, Type.VIRTUAL, DefaultAnnotations.builder().build()); 50 super(PID, src, dst, Type.VIRTUAL, DefaultAnnotations.builder().build());
50 this.networkId = networkId; 51 this.networkId = networkId;
51 this.tunnelId = tunnelId; 52 this.tunnelId = tunnelId;
...@@ -88,4 +89,84 @@ public final class DefaultVirtualLink extends DefaultLink implements VirtualLink ...@@ -88,4 +89,84 @@ public final class DefaultVirtualLink extends DefaultLink implements VirtualLink
88 public String toString() { 89 public String toString() {
89 return toStringHelper(this).add("networkId", networkId).add("tunnelId", tunnelId).toString(); 90 return toStringHelper(this).add("networkId", networkId).add("tunnelId", tunnelId).toString();
90 } 91 }
92 +
93 + /**
94 + * Creates a new default virtual link builder.
95 + *
96 + * @return default virtual link builder
97 + */
98 + public static Builder builder() {
99 + return new Builder();
100 + }
101 +
102 + /**
103 + * Builder for DefaultVirtualLink objects.
104 + */
105 + public static final class Builder extends DefaultLink.Builder {
106 + private NetworkId networkId;
107 + private ConnectPoint src;
108 + private ConnectPoint dst;
109 + private TunnelId tunnelId;
110 +
111 + private Builder() {
112 + // Hide constructor
113 + }
114 +
115 + /**
116 + * Sets the network identifier to be used by the builder.
117 + *
118 + * @param networkId network identifier
119 + * @return self
120 + */
121 + public Builder networkId(NetworkId networkId) {
122 + this.networkId = networkId;
123 + return this;
124 + }
125 +
126 + /**
127 + * Sets the source connect point to be used by the builder.
128 + *
129 + * @param src source connect point
130 + * @return self
131 + */
132 + public Builder src(ConnectPoint src) {
133 + this.src = src;
134 + return this;
135 + }
136 +
137 + /**
138 + * Sets the destination connect point to be used by the builder.
139 + *
140 + * @param dst new destination connect point
141 + * @return self
142 + */
143 + public Builder dst(ConnectPoint dst) {
144 + this.dst = dst;
145 + return this;
146 + }
147 +
148 + /**
149 + * Sets the tunnel identifier to be used by the builder.
150 + *
151 + * @param tunnelId tunnel identifier
152 + * @return self
153 + */
154 + public Builder tunnelId(TunnelId tunnelId) {
155 + this.tunnelId = tunnelId;
156 + return this;
157 + }
158 +
159 + /**
160 + * Builds a default virtual link object from the accumulated parameters.
161 + *
162 + * @return default virtual link object
163 + */
164 + public DefaultVirtualLink build() {
165 + checkNotNull(src, "Source connect point cannot be null");
166 + checkNotNull(dst, "Destination connect point cannot be null");
167 + checkNotNull(networkId, "Network Id cannot be null");
168 +
169 + return new DefaultVirtualLink(networkId, src, dst, tunnelId);
170 + }
171 + }
91 } 172 }
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
16 package org.onosproject.incubator.net.virtual; 16 package org.onosproject.incubator.net.virtual;
17 17
18 import com.google.common.annotations.Beta; 18 import com.google.common.annotations.Beta;
19 +import org.onosproject.incubator.net.tunnel.TunnelId;
19 import org.onosproject.net.Link; 20 import org.onosproject.net.Link;
20 21
21 /** 22 /**
...@@ -23,4 +24,10 @@ import org.onosproject.net.Link; ...@@ -23,4 +24,10 @@ import org.onosproject.net.Link;
23 */ 24 */
24 @Beta 25 @Beta
25 public interface VirtualLink extends VirtualElement, Link { 26 public interface VirtualLink extends VirtualElement, Link {
27 + /**
28 + * Returns the tunnel identifier to which this virtual link belongs.
29 + *
30 + * @return tunnel identifier
31 + */
32 + TunnelId tunnelId();
26 } 33 }
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
16 package org.onosproject.incubator.net.virtual; 16 package org.onosproject.incubator.net.virtual;
17 17
18 import com.google.common.annotations.Beta; 18 import com.google.common.annotations.Beta;
19 -import org.onosproject.incubator.net.tunnel.TunnelId;
20 import org.onosproject.net.ConnectPoint; 19 import org.onosproject.net.ConnectPoint;
21 import org.onosproject.net.DeviceId; 20 import org.onosproject.net.DeviceId;
22 import org.onosproject.net.Port; 21 import org.onosproject.net.Port;
...@@ -96,13 +95,11 @@ public interface VirtualNetworkAdminService extends VirtualNetworkService { ...@@ -96,13 +95,11 @@ public interface VirtualNetworkAdminService extends VirtualNetworkService {
96 * @param networkId network identifier 95 * @param networkId network identifier
97 * @param src source connection point 96 * @param src source connection point
98 * @param dst destination connection point 97 * @param dst destination connection point
99 - * @param realizedBy identifier of the tunnel using which this link is realized
100 * @return newly created virtual link 98 * @return newly created virtual link
101 * @throws org.onlab.util.ItemNotFoundException if no such network found 99 * @throws org.onlab.util.ItemNotFoundException if no such network found
102 */ 100 */
103 VirtualLink createVirtualLink(NetworkId networkId, 101 VirtualLink createVirtualLink(NetworkId networkId,
104 - ConnectPoint src, ConnectPoint dst, 102 + ConnectPoint src, ConnectPoint dst);
105 - TunnelId realizedBy);
106 103
107 // TODO: Discuss whether we should provide an alternate createVirtualLink 104 // TODO: Discuss whether we should provide an alternate createVirtualLink
108 // which is backed by a Path instead; I'm leaning towards not doing that. 105 // which is backed by a Path instead; I'm leaning towards not doing that.
...@@ -121,11 +118,11 @@ public interface VirtualNetworkAdminService extends VirtualNetworkService { ...@@ -121,11 +118,11 @@ public interface VirtualNetworkAdminService extends VirtualNetworkService {
121 * Creates a new virtual port on the specified device. 118 * Creates a new virtual port on the specified device.
122 * 119 *
123 * @param networkId network identifier 120 * @param networkId network identifier
124 - * @param deviceId device identifier 121 + * @param deviceId virtual device identifier
125 - * @param portNumber port number 122 + * @param portNumber virtual port number
126 - * @param realizedBy underlying port using which this virtual port is realized 123 + * @param realizedBy underlying physical port using which this virtual port is realized
127 * @return newly created port 124 * @return newly created port
128 - * @throws org.onlab.util.ItemNotFoundException if no such network or device found 125 + * @throws org.onlab.util.ItemNotFoundException if no such network or device is found
129 */ 126 */
130 VirtualPort createVirtualPort(NetworkId networkId, DeviceId deviceId, 127 VirtualPort createVirtualPort(NetworkId networkId, DeviceId deviceId,
131 PortNumber portNumber, Port realizedBy); 128 PortNumber portNumber, Port realizedBy);
......
...@@ -89,11 +89,18 @@ public interface VirtualNetworkStore ...@@ -89,11 +89,18 @@ public interface VirtualNetworkStore
89 * @param networkId network identifier 89 * @param networkId network identifier
90 * @param src source end-point of the link 90 * @param src source end-point of the link
91 * @param dst destination end-point of the link 91 * @param dst destination end-point of the link
92 - * @param realizedBy underlying tunnel using which this link is realized 92 + * @param realizedBy underlying tunnel identifier using which this link is realized
93 * @return the virtual link 93 * @return the virtual link
94 */ 94 */
95 - VirtualLink addLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst, 95 + VirtualLink addLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst, TunnelId realizedBy);
96 - TunnelId realizedBy); 96 +
97 + /**
98 + * Updates the tunnelId in the virtual link.
99 + *
100 + * @param virtualLink virtual link
101 + * @param tunnelId tunnel identifier
102 + */
103 + void updateLink(VirtualLink virtualLink, TunnelId tunnelId);
97 104
98 /** 105 /**
99 * Removes the specified link from the store. 106 * Removes the specified link from the store.
...@@ -101,8 +108,9 @@ public interface VirtualNetworkStore ...@@ -101,8 +108,9 @@ public interface VirtualNetworkStore
101 * @param networkId network identifier 108 * @param networkId network identifier
102 * @param src source connection point 109 * @param src source connection point
103 * @param dst destination connection point 110 * @param dst destination connection point
111 + * @return the virtual link
104 */ 112 */
105 - void removeLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst); 113 + VirtualLink removeLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst);
106 114
107 /** 115 /**
108 * Adds a new virtual port to the network. 116 * Adds a new virtual port to the network.
......
...@@ -44,7 +44,7 @@ public class DefaultTunnelTest { ...@@ -44,7 +44,7 @@ public class DefaultTunnelTest {
44 .valueOf(32421)); 44 .valueOf(32421));
45 DefaultGroupId groupId = new DefaultGroupId(92034); 45 DefaultGroupId groupId = new DefaultGroupId(92034);
46 TunnelName tunnelName = TunnelName.tunnelName("TunnelName"); 46 TunnelName tunnelName = TunnelName.tunnelName("TunnelName");
47 - TunnelId tunnelId = TunnelId.valueOf(41654654); 47 + TunnelId tunnelId = TunnelId.valueOf("41654654");
48 ProviderId producerName1 = new ProviderId("producer1", "13"); 48 ProviderId producerName1 = new ProviderId("producer1", "13");
49 ProviderId producerName2 = new ProviderId("producer2", "13"); 49 ProviderId producerName2 = new ProviderId("producer2", "13");
50 Tunnel p1 = new DefaultTunnel(producerName1, src, dst, Tunnel.Type.VXLAN, 50 Tunnel p1 = new DefaultTunnel(producerName1, src, dst, Tunnel.Type.VXLAN,
......
...@@ -48,7 +48,7 @@ public class TunnelEventTest { ...@@ -48,7 +48,7 @@ public class TunnelEventTest {
48 .valueOf(32421)); 48 .valueOf(32421));
49 DefaultGroupId groupId = new DefaultGroupId(92034); 49 DefaultGroupId groupId = new DefaultGroupId(92034);
50 TunnelName tunnelName = TunnelName.tunnelName("TunnelName"); 50 TunnelName tunnelName = TunnelName.tunnelName("TunnelName");
51 - TunnelId tunnelId = TunnelId.valueOf(41654654); 51 + TunnelId tunnelId = TunnelId.valueOf("41654654");
52 ProviderId producerName1 = new ProviderId("producer1", "13"); 52 ProviderId producerName1 = new ProviderId("producer1", "13");
53 Tunnel p1 = new DefaultTunnel(producerName1, src, dst, Tunnel.Type.VXLAN, 53 Tunnel p1 = new DefaultTunnel(producerName1, src, dst, Tunnel.Type.VXLAN,
54 Tunnel.State.ACTIVE, groupId, tunnelId, 54 Tunnel.State.ACTIVE, groupId, tunnelId,
......
...@@ -30,9 +30,9 @@ import com.google.common.testing.EqualsTester; ...@@ -30,9 +30,9 @@ import com.google.common.testing.EqualsTester;
30 */ 30 */
31 public class TunnelIdTest { 31 public class TunnelIdTest {
32 32
33 - final TunnelId tunnelId1 = TunnelId.valueOf(1); 33 + final TunnelId tunnelId1 = TunnelId.valueOf("1");
34 - final TunnelId sameAstunnelId1 = TunnelId.valueOf(1); 34 + final TunnelId sameAstunnelId1 = TunnelId.valueOf("1");
35 - final TunnelId tunnelId2 = TunnelId.valueOf(2); 35 + final TunnelId tunnelId2 = TunnelId.valueOf("2");
36 36
37 /** 37 /**
38 * Checks that the TunnelId class is immutable. 38 * Checks that the TunnelId class is immutable.
...@@ -58,7 +58,7 @@ public class TunnelIdTest { ...@@ -58,7 +58,7 @@ public class TunnelIdTest {
58 */ 58 */
59 @Test 59 @Test
60 public void testConstruction() { 60 public void testConstruction() {
61 - final long tunnelIdValue = 7777L; 61 + final String tunnelIdValue = "7777";
62 final TunnelId tunnelId = TunnelId.valueOf(tunnelIdValue); 62 final TunnelId tunnelId = TunnelId.valueOf(tunnelIdValue);
63 assertThat(tunnelId, is(notNullValue())); 63 assertThat(tunnelId, is(notNullValue()));
64 assertThat(tunnelId.id(), is(tunnelIdValue)); 64 assertThat(tunnelId.id(), is(tunnelIdValue));
......
...@@ -45,7 +45,7 @@ public class TunnelSubscriptionTest { ...@@ -45,7 +45,7 @@ public class TunnelSubscriptionTest {
45 TunnelEndPoint dst = IpTunnelEndPoint.ipTunnelPoint(IpAddress.valueOf(32421)); 45 TunnelEndPoint dst = IpTunnelEndPoint.ipTunnelPoint(IpAddress.valueOf(32421));
46 ApplicationId appId = new DefaultApplicationId(243, "test"); 46 ApplicationId appId = new DefaultApplicationId(243, "test");
47 ApplicationId appId2 = new DefaultApplicationId(2431, "test1"); 47 ApplicationId appId2 = new DefaultApplicationId(2431, "test1");
48 - TunnelId tunnelId = TunnelId.valueOf(41654654); 48 + TunnelId tunnelId = TunnelId.valueOf("41654654");
49 TunnelSubscription p1 = new TunnelSubscription(appId, src, dst, tunnelId, Tunnel.Type.VXLAN, 49 TunnelSubscription p1 = new TunnelSubscription(appId, src, dst, tunnelId, Tunnel.Type.VXLAN,
50 null); 50 null);
51 TunnelSubscription p2 = new TunnelSubscription(appId, src, dst, tunnelId, Tunnel.Type.VXLAN, 51 TunnelSubscription p2 = new TunnelSubscription(appId, src, dst, tunnelId, Tunnel.Type.VXLAN,
......
...@@ -40,6 +40,60 @@ public class DefaultVirtualLinkTest { ...@@ -40,6 +40,60 @@ public class DefaultVirtualLinkTest {
40 assertThatClassIsImmutable(DefaultVirtualLink.class); 40 assertThatClassIsImmutable(DefaultVirtualLink.class);
41 } 41 }
42 42
43 + /**
44 + * Tests the DefaultVirtualLink Builder to ensure that the src cannot be null.
45 + */
46 + @Test(expected = NullPointerException.class)
47 + public void testBuilderNullSrc() {
48 + DefaultVirtualDevice device1 =
49 + new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue1));
50 + DefaultVirtualDevice device2 =
51 + new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue2));
52 + ConnectPoint src = new ConnectPoint(device1.id(), PortNumber.portNumber(1));
53 + ConnectPoint dst = new ConnectPoint(device2.id(), PortNumber.portNumber(2));
54 +
55 + DefaultVirtualLink.builder()
56 + .src(null)
57 + .build();
58 + }
59 +
60 + /**
61 + * Tests the DefaultVirtualLink Builder to ensure that the dst cannot be null.
62 + */
63 + @Test(expected = NullPointerException.class)
64 + public void testBuilderNullDst() {
65 + DefaultVirtualDevice device1 =
66 + new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue1));
67 + DefaultVirtualDevice device2 =
68 + new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue2));
69 + ConnectPoint src = new ConnectPoint(device1.id(), PortNumber.portNumber(1));
70 + ConnectPoint dst = new ConnectPoint(device2.id(), PortNumber.portNumber(2));
71 +
72 + DefaultVirtualLink.builder()
73 + .dst(null)
74 + .build();
75 + }
76 +
77 + /**
78 + * Tests the DefaultVirtualLink Builder to ensure that the networkId cannot be null.
79 + */
80 + @Test(expected = NullPointerException.class)
81 + public void testBuilderNullNetworkId() {
82 + DefaultVirtualDevice device1 =
83 + new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue1));
84 + DefaultVirtualDevice device2 =
85 + new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue2));
86 + ConnectPoint src = new ConnectPoint(device1.id(), PortNumber.portNumber(1));
87 + ConnectPoint dst = new ConnectPoint(device2.id(), PortNumber.portNumber(2));
88 +
89 + DefaultVirtualLink.builder()
90 + .networkId(null)
91 + .build();
92 + }
93 +
94 + /**
95 + * Tests the DefaultVirtualLink equality method.
96 + */
43 @Test 97 @Test
44 public void testEquality() { 98 public void testEquality() {
45 DefaultVirtualDevice device1 = 99 DefaultVirtualDevice device1 =
...@@ -49,10 +103,30 @@ public class DefaultVirtualLinkTest { ...@@ -49,10 +103,30 @@ public class DefaultVirtualLinkTest {
49 ConnectPoint src = new ConnectPoint(device1.id(), PortNumber.portNumber(1)); 103 ConnectPoint src = new ConnectPoint(device1.id(), PortNumber.portNumber(1));
50 ConnectPoint dst = new ConnectPoint(device2.id(), PortNumber.portNumber(2)); 104 ConnectPoint dst = new ConnectPoint(device2.id(), PortNumber.portNumber(2));
51 105
52 - DefaultVirtualLink link1 = new DefaultVirtualLink(NetworkId.networkId(0), src, dst, TunnelId.valueOf(0)); 106 + VirtualLink link1 = DefaultVirtualLink.builder()
53 - DefaultVirtualLink link2 = new DefaultVirtualLink(NetworkId.networkId(0), src, dst, TunnelId.valueOf(0)); 107 + .networkId(NetworkId.networkId(0))
54 - DefaultVirtualLink link3 = new DefaultVirtualLink(NetworkId.networkId(0), src, dst, TunnelId.valueOf(1)); 108 + .src(src)
55 - DefaultVirtualLink link4 = new DefaultVirtualLink(NetworkId.networkId(1), src, dst, TunnelId.valueOf(0)); 109 + .dst(dst)
110 + .tunnelId(TunnelId.valueOf("1"))
111 + .build();
112 + VirtualLink link2 = DefaultVirtualLink.builder()
113 + .networkId(NetworkId.networkId(0))
114 + .src(src)
115 + .dst(dst)
116 + .tunnelId(TunnelId.valueOf("1"))
117 + .build();
118 + VirtualLink link3 = DefaultVirtualLink.builder()
119 + .networkId(NetworkId.networkId(0))
120 + .src(src)
121 + .dst(dst)
122 + .tunnelId(TunnelId.valueOf("2"))
123 + .build();
124 + VirtualLink link4 = DefaultVirtualLink.builder()
125 + .networkId(NetworkId.networkId(1))
126 + .src(src)
127 + .dst(dst)
128 + .tunnelId(TunnelId.valueOf("3"))
129 + .build();
56 130
57 new EqualsTester().addEqualityGroup(link1, link2).addEqualityGroup(link3) 131 new EqualsTester().addEqualityGroup(link1, link2).addEqualityGroup(link3)
58 .addEqualityGroup(link4).testEquals(); 132 .addEqualityGroup(link4).testEquals();
......
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.incubator.net.virtual.impl;
18 +
19 +
20 +import org.apache.felix.scr.annotations.Activate;
21 +import org.apache.felix.scr.annotations.Component;
22 +import org.apache.felix.scr.annotations.Deactivate;
23 +import org.apache.felix.scr.annotations.Reference;
24 +import org.apache.felix.scr.annotations.ReferenceCardinality;
25 +import org.apache.felix.scr.annotations.Service;
26 +import org.onosproject.core.ApplicationId;
27 +import org.onosproject.core.CoreService;
28 +import org.onosproject.incubator.net.tunnel.TunnelId;
29 +import org.onosproject.incubator.net.virtual.DefaultVirtualLink;
30 +import org.onosproject.incubator.net.virtual.NetworkId;
31 +import org.onosproject.incubator.net.virtual.VirtualNetworkProvider;
32 +import org.onosproject.incubator.net.virtual.VirtualNetworkProviderRegistry;
33 +import org.onosproject.incubator.net.virtual.VirtualNetworkProviderService;
34 +import org.onosproject.net.ConnectPoint;
35 +import org.onosproject.net.EncapsulationType;
36 +import org.onosproject.net.intent.Constraint;
37 +import org.onosproject.net.intent.Intent;
38 +import org.onosproject.net.intent.IntentService;
39 +import org.onosproject.net.intent.IntentState;
40 +import org.onosproject.net.intent.Key;
41 +import org.onosproject.net.intent.PointToPointIntent;
42 +import org.onosproject.net.intent.constraint.EncapsulationConstraint;
43 +import org.onosproject.net.provider.AbstractProvider;
44 +import org.slf4j.Logger;
45 +
46 +import java.util.ArrayList;
47 +import java.util.List;
48 +
49 +import static com.google.common.base.Preconditions.checkNotNull;
50 +import static java.lang.Thread.sleep;
51 +import static org.slf4j.LoggerFactory.getLogger;
52 +
53 +/**
54 + * Point to point intent VirtualNetworkProvider implementation.
55 + */
56 +@Component(immediate = true)
57 +@Service
58 +public class PtToPtIntentVirtualNetworkProvider extends AbstractProvider implements VirtualNetworkProvider {
59 +
60 + private final Logger log = getLogger(PtToPtIntentVirtualNetworkProvider.class);
61 + private static final String NETWORK_ID_NULL = "Network ID cannot be null";
62 + private static final String CONNECT_POINT_NULL = "Connect Point cannot be null";
63 + private static final String INTENT_NULL = "Intent cannot be null";
64 + protected static final String KEY_FORMAT = "networkId=%s src=%s dst=%s";
65 + private static final int MAX_WAIT_COUNT = 30;
66 +
67 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
68 + protected VirtualNetworkProviderRegistry providerRegistry;
69 +
70 + private VirtualNetworkProviderService providerService;
71 +
72 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
73 + protected IntentService intentService;
74 +
75 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
76 + protected CoreService coreService;
77 +
78 + protected static final String PTPT_INTENT_APPID = "org.onosproject.vnet.intent";
79 + private ApplicationId appId;
80 +
81 + /**
82 + * Default constructor.
83 + */
84 + public PtToPtIntentVirtualNetworkProvider() {
85 + super(DefaultVirtualLink.PID);
86 + }
87 +
88 + @Activate
89 + public void activate() {
90 + providerService = providerRegistry.register(this);
91 + appId = coreService.registerApplication(PTPT_INTENT_APPID);
92 +
93 + log.info("Started");
94 + }
95 +
96 + @Deactivate
97 + public void deactivate() {
98 + providerRegistry.unregister(this);
99 + providerService = null;
100 + log.info("Stopped");
101 + }
102 +
103 + @Override
104 + public TunnelId createTunnel(NetworkId networkId, ConnectPoint src, ConnectPoint dst) {
105 + checkNotNull(NETWORK_ID_NULL, networkId);
106 + checkNotNull(CONNECT_POINT_NULL, src);
107 + checkNotNull(CONNECT_POINT_NULL, dst);
108 + String key = String.format(KEY_FORMAT, networkId.toString(), src.toString(), dst.toString());
109 + Key intentKey = Key.of(key, appId);
110 +
111 + List<Constraint> constraints = new ArrayList<>();
112 + constraints.add(new EncapsulationConstraint(EncapsulationType.VLAN));
113 +
114 + // TODO Currently there can only be one tunnel/intent between the src and dst across
115 + // all virtual networks. We may want to support multiple intents between the same src/dst pairs.
116 + PointToPointIntent intent = PointToPointIntent.builder()
117 + .key(intentKey)
118 + .appId(appId)
119 + .ingressPoint(src)
120 + .egressPoint(dst)
121 + .constraints(constraints)
122 + .build();
123 + intentService.submit(intent);
124 +
125 + // construct tunnelId from the key
126 + return TunnelId.valueOf(key);
127 + }
128 +
129 + @Override
130 + public void destroyTunnel(NetworkId networkId, TunnelId tunnelId) {
131 + String key = tunnelId.id();
132 + Key intentKey = Key.of(key, appId);
133 + Intent intent = intentService.getIntent(intentKey);
134 + checkNotNull(intent, INTENT_NULL);
135 + intentService.withdraw(intent);
136 + try {
137 + int count = 0;
138 + // Loop waiting for the intent to go into a withdrawn or failed state
139 + // before attempting to purge it.
140 + while (++count <= MAX_WAIT_COUNT) {
141 + IntentState state = intentService.getIntentState(intentKey);
142 + if ((state == IntentState.FAILED) || (state == IntentState.WITHDRAWN)) {
143 + intentService.purge(intent);
144 + break;
145 + }
146 + sleep(1000);
147 + }
148 + } catch (Exception e) {
149 + log.error("Exception: " + e);
150 + }
151 + }
152 +}
153 +
...@@ -66,6 +66,7 @@ public class VirtualNetworkManager ...@@ -66,6 +66,7 @@ public class VirtualNetworkManager
66 private static final String NETWORK_NULL = "Network ID cannot be null"; 66 private static final String NETWORK_NULL = "Network ID cannot be null";
67 private static final String DEVICE_NULL = "Device ID cannot be null"; 67 private static final String DEVICE_NULL = "Device ID cannot be null";
68 private static final String LINK_POINT_NULL = "Link end-point cannot be null"; 68 private static final String LINK_POINT_NULL = "Link end-point cannot be null";
69 + private static final String VIRTUAL_LINK_NULL = "Virtual Link cannot be null";
69 70
70 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 71 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
71 protected VirtualNetworkStore store; 72 protected VirtualNetworkStore store;
...@@ -135,13 +136,41 @@ public class VirtualNetworkManager ...@@ -135,13 +136,41 @@ public class VirtualNetworkManager
135 136
136 @Override 137 @Override
137 public VirtualLink createVirtualLink(NetworkId networkId, 138 public VirtualLink createVirtualLink(NetworkId networkId,
138 - ConnectPoint src, ConnectPoint dst, 139 + ConnectPoint src, ConnectPoint dst) {
139 - TunnelId realizedBy) {
140 checkNotNull(networkId, NETWORK_NULL); 140 checkNotNull(networkId, NETWORK_NULL);
141 checkNotNull(src, LINK_POINT_NULL); 141 checkNotNull(src, LINK_POINT_NULL);
142 checkNotNull(dst, LINK_POINT_NULL); 142 checkNotNull(dst, LINK_POINT_NULL);
143 - checkNotNull(realizedBy, "Tunnel ID cannot be null"); 143 + VirtualLink virtualLink = store.addLink(networkId, src, dst, null);
144 - return store.addLink(networkId, src, dst, realizedBy); 144 + checkNotNull(virtualLink, VIRTUAL_LINK_NULL);
145 +
146 + if (virtualLink.providerId() != null) {
147 + VirtualNetworkProvider provider = getProvider(virtualLink.providerId());
148 + if (provider != null) {
149 + TunnelId tunnelId = provider.createTunnel(networkId, mapVirtualToPhysicalPort(networkId, src),
150 + mapVirtualToPhysicalPort(networkId, dst));
151 + store.updateLink(virtualLink, tunnelId);
152 + }
153 + }
154 + return virtualLink;
155 + }
156 +
157 + /**
158 + * Maps the virtual connect point to a physical connect point.
159 + *
160 + * @param networkId network identifier
161 + * @param virtualCp virtual connect point
162 + * @return physical connect point
163 + */
164 + private ConnectPoint mapVirtualToPhysicalPort(NetworkId networkId,
165 + ConnectPoint virtualCp) {
166 + Set<VirtualPort> ports = store.getPorts(networkId, virtualCp.deviceId());
167 + for (VirtualPort port : ports) {
168 + if (port.element().id().equals(virtualCp.elementId()) &&
169 + port.number().equals(virtualCp.port())) {
170 + return new ConnectPoint(port.realizedBy().element().id(), port.realizedBy().number());
171 + }
172 + }
173 + return null;
145 } 174 }
146 175
147 @Override 176 @Override
...@@ -149,7 +178,14 @@ public class VirtualNetworkManager ...@@ -149,7 +178,14 @@ public class VirtualNetworkManager
149 checkNotNull(networkId, NETWORK_NULL); 178 checkNotNull(networkId, NETWORK_NULL);
150 checkNotNull(src, LINK_POINT_NULL); 179 checkNotNull(src, LINK_POINT_NULL);
151 checkNotNull(dst, LINK_POINT_NULL); 180 checkNotNull(dst, LINK_POINT_NULL);
152 - store.removeLink(networkId, src, dst); 181 + VirtualLink virtualLink = store.removeLink(networkId, src, dst);
182 +
183 + if (virtualLink != null && virtualLink.providerId() != null) {
184 + VirtualNetworkProvider provider = getProvider(virtualLink.providerId());
185 + if (provider != null) {
186 + provider.destroyTunnel(networkId, virtualLink.tunnelId());
187 + }
188 + }
153 } 189 }
154 190
155 @Override 191 @Override
......
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.incubator.net.virtual.impl;
18 +
19 +import com.google.common.collect.Sets;
20 +import org.junit.After;
21 +import org.junit.Before;
22 +import org.junit.Test;
23 +import org.onosproject.TestApplicationId;
24 +import org.onosproject.core.ApplicationId;
25 +import org.onosproject.core.CoreService;
26 +import org.onosproject.core.CoreServiceAdapter;
27 +import org.onosproject.core.IdGenerator;
28 +import org.onosproject.incubator.net.tunnel.TunnelId;
29 +import org.onosproject.incubator.net.virtual.NetworkId;
30 +import org.onosproject.incubator.net.virtual.VirtualNetworkProvider;
31 +import org.onosproject.incubator.net.virtual.VirtualNetworkProviderRegistry;
32 +import org.onosproject.incubator.net.virtual.VirtualNetworkProviderService;
33 +import org.onosproject.net.ConnectPoint;
34 +import org.onosproject.net.DeviceId;
35 +import org.onosproject.net.PortNumber;
36 +import org.onosproject.net.intent.Intent;
37 +import org.onosproject.net.intent.IntentService;
38 +import org.onosproject.net.intent.IntentServiceAdapter;
39 +import org.onosproject.net.intent.IntentState;
40 +import org.onosproject.net.intent.Key;
41 +import org.onosproject.net.intent.MockIdGenerator;
42 +import org.onosproject.net.provider.AbstractProviderService;
43 +import org.onosproject.net.provider.ProviderId;
44 +
45 +import java.util.Set;
46 +import java.util.concurrent.atomic.AtomicLong;
47 +
48 +import static org.easymock.EasyMock.*;
49 +import static org.junit.Assert.assertEquals;
50 +import static org.junit.Assert.assertNotNull;
51 +
52 +/**
53 + * Junit tests for PtToPtIntentVirtualNetworkProvider.
54 + */
55 +public class PtToPtIntentVirtualNetworkProviderTest {
56 +
57 + private PtToPtIntentVirtualNetworkProvider provider;
58 + private VirtualNetworkProviderRegistry providerRegistry;
59 +
60 + private final VirtualNetworkRegistryAdapter virtualNetworkRegistry = new VirtualNetworkRegistryAdapter();
61 + private IntentService intentService;
62 +
63 + private static final ApplicationId APP_ID =
64 + TestApplicationId.create(PtToPtIntentVirtualNetworkProvider.PTPT_INTENT_APPID);
65 +
66 + private IdGenerator idGenerator = new MockIdGenerator();
67 +
68 + @Before
69 + public void setUp() {
70 + provider = new PtToPtIntentVirtualNetworkProvider();
71 + provider.providerRegistry = virtualNetworkRegistry;
72 + final CoreService mockCoreService = createMock(CoreService.class);
73 + provider.coreService = mockCoreService;
74 + expect(mockCoreService.registerApplication(PtToPtIntentVirtualNetworkProvider.PTPT_INTENT_APPID))
75 + .andReturn(APP_ID).anyTimes();
76 + replay(mockCoreService);
77 + Intent.unbindIdGenerator(idGenerator);
78 + Intent.bindIdGenerator(idGenerator);
79 +
80 + intentService = new TestIntentService();
81 + provider.intentService = intentService;
82 + provider.activate();
83 + }
84 +
85 + @After
86 + public void tearDown() {
87 + provider.deactivate();
88 + provider.providerRegistry = null;
89 + provider.coreService = null;
90 + provider.intentService = null;
91 + Intent.unbindIdGenerator(idGenerator);
92 + }
93 +
94 + @Test
95 + public void basics() {
96 + assertNotNull("registration expected", provider);
97 + }
98 +
99 + /**
100 + * Test a null network identifier.
101 + */
102 + @Test(expected = NullPointerException.class)
103 + public void testCreateTunnelNullNetworkId() {
104 + provider.createTunnel(null, null, null);
105 + }
106 +
107 + /**
108 + * Test a null source connect point.
109 + */
110 + @Test(expected = NullPointerException.class)
111 + public void testCreateTunnelNullSrc() {
112 + ConnectPoint dst = new ConnectPoint(DeviceId.deviceId("device2"), PortNumber.portNumber(2));
113 +
114 + provider.createTunnel(NetworkId.networkId(0), null, dst);
115 + }
116 +
117 + /**
118 + * Test a null destination connect point.
119 + */
120 + @Test(expected = NullPointerException.class)
121 + public void testCreateTunnelNullDst() {
122 + ConnectPoint src = new ConnectPoint(DeviceId.deviceId("device1"), PortNumber.portNumber(1));
123 +
124 + provider.createTunnel(NetworkId.networkId(0), src, null);
125 + }
126 +
127 + /**
128 + * Test creating/destroying a valid tunnel.
129 + */
130 + @Test
131 + public void testCreateRemoveTunnel() {
132 + NetworkId networkId = NetworkId.networkId(0);
133 + ConnectPoint src = new ConnectPoint(DeviceId.deviceId("device1"), PortNumber.portNumber(1));
134 + ConnectPoint dst = new ConnectPoint(DeviceId.deviceId("device2"), PortNumber.portNumber(2));
135 +
136 + TunnelId tunnelId = provider.createTunnel(networkId, src, dst);
137 + String key = String.format(PtToPtIntentVirtualNetworkProvider.KEY_FORMAT,
138 + networkId.toString(), src.toString(), dst.toString());
139 +
140 + assertEquals("TunnelId does not match as expected.", key, tunnelId.toString());
141 + provider.destroyTunnel(networkId, tunnelId);
142 + }
143 +
144 + /**
145 + * Virtual network registry implementation for this test class.
146 + */
147 + private class VirtualNetworkRegistryAdapter implements VirtualNetworkProviderRegistry {
148 + private VirtualNetworkProvider provider;
149 +
150 + @Override
151 + public VirtualNetworkProviderService register(VirtualNetworkProvider theProvider) {
152 + this.provider = theProvider;
153 + return new TestVirtualNetworkProviderService(theProvider);
154 + }
155 +
156 + @Override
157 + public void unregister(VirtualNetworkProvider theProvider) {
158 + this.provider = null;
159 + }
160 +
161 + @Override
162 + public Set<ProviderId> getProviders() {
163 + return null;
164 + }
165 + }
166 +
167 + /**
168 + * Virtual network provider service implementation for this test class.
169 + */
170 + private class TestVirtualNetworkProviderService
171 + extends AbstractProviderService<VirtualNetworkProvider>
172 + implements VirtualNetworkProviderService {
173 +
174 + protected TestVirtualNetworkProviderService(VirtualNetworkProvider provider) {
175 + super(provider);
176 + }
177 + }
178 +
179 +
180 + /**
181 + * Core service test class.
182 + */
183 + private class TestCoreService extends CoreServiceAdapter {
184 +
185 + @Override
186 + public IdGenerator getIdGenerator(String topic) {
187 + return new IdGenerator() {
188 + private AtomicLong counter = new AtomicLong(0);
189 +
190 + @Override
191 + public long getNewId() {
192 + return counter.getAndIncrement();
193 + }
194 + };
195 + }
196 + }
197 +
198 + /**
199 + * Represents a fake IntentService class that easily allows to store and
200 + * retrieve intents without implementing the IntentService logic.
201 + */
202 + private class TestIntentService extends IntentServiceAdapter {
203 +
204 + private Set<Intent> intents;
205 +
206 + public TestIntentService() {
207 + intents = Sets.newHashSet();
208 + }
209 +
210 + @Override
211 + public void submit(Intent intent) {
212 + intents.add(intent);
213 + }
214 +
215 + @Override
216 + public void withdraw(Intent intent) {
217 + }
218 +
219 + @Override
220 + public IntentState getIntentState(Key intentKey) {
221 + return IntentState.WITHDRAWN;
222 + }
223 +
224 + @Override
225 + public void purge(Intent intent) {
226 + intents.remove(intent);
227 + }
228 +
229 + @Override
230 + public long getIntentCount() {
231 + return intents.size();
232 + }
233 +
234 + @Override
235 + public Iterable<Intent> getIntents() {
236 + return intents;
237 + }
238 +
239 + @Override
240 + public Intent getIntent(Key intentKey) {
241 + for (Intent intent : intents) {
242 + if (intent.key().equals(intentKey)) {
243 + return intent;
244 + }
245 + }
246 + return null;
247 + }
248 + }
249 +}
...@@ -27,7 +27,6 @@ import org.onosproject.core.CoreService; ...@@ -27,7 +27,6 @@ import org.onosproject.core.CoreService;
27 import org.onosproject.core.CoreServiceAdapter; 27 import org.onosproject.core.CoreServiceAdapter;
28 import org.onosproject.core.IdGenerator; 28 import org.onosproject.core.IdGenerator;
29 import org.onosproject.event.Event; 29 import org.onosproject.event.Event;
30 -import org.onosproject.incubator.net.tunnel.TunnelId;
31 import org.onosproject.incubator.net.virtual.DefaultVirtualNetwork; 30 import org.onosproject.incubator.net.virtual.DefaultVirtualNetwork;
32 import org.onosproject.incubator.net.virtual.NetworkId; 31 import org.onosproject.incubator.net.virtual.NetworkId;
33 import org.onosproject.incubator.net.virtual.TenantId; 32 import org.onosproject.incubator.net.virtual.TenantId;
...@@ -247,8 +246,8 @@ public class VirtualNetworkManagerTest { ...@@ -247,8 +246,8 @@ public class VirtualNetworkManagerTest {
247 manager.createVirtualDevice(virtualNetwork1.id(), DeviceId.deviceId(deviceIdValue2)); 246 manager.createVirtualDevice(virtualNetwork1.id(), DeviceId.deviceId(deviceIdValue2));
248 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1)); 247 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
249 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2)); 248 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
250 - manager.createVirtualLink(virtualNetwork1.id(), src, dst, TunnelId.valueOf(0)); 249 + manager.createVirtualLink(virtualNetwork1.id(), src, dst);
251 - manager.createVirtualLink(virtualNetwork1.id(), dst, src, TunnelId.valueOf(1)); 250 + manager.createVirtualLink(virtualNetwork1.id(), dst, src);
252 251
253 Set<VirtualLink> virtualLinks = manager.getVirtualLinks(virtualNetwork1.id()); 252 Set<VirtualLink> virtualLinks = manager.getVirtualLinks(virtualNetwork1.id());
254 assertNotNull("The virtual link set should not be null", virtualLinks); 253 assertNotNull("The virtual link set should not be null", virtualLinks);
...@@ -263,13 +262,30 @@ public class VirtualNetworkManagerTest { ...@@ -263,13 +262,30 @@ public class VirtualNetworkManagerTest {
263 assertTrue("The virtual link set should be empty.", virtualLinks.isEmpty()); 262 assertTrue("The virtual link set should be empty.", virtualLinks.isEmpty());
264 263
265 // Add/remove the virtual link again. 264 // Add/remove the virtual link again.
266 - VirtualLink virtualLink = manager.createVirtualLink(virtualNetwork1.id(), src, dst, TunnelId.valueOf(0)); 265 + VirtualLink virtualLink = manager.createVirtualLink(virtualNetwork1.id(), src, dst);
267 manager.removeVirtualLink(virtualLink.networkId(), virtualLink.src(), virtualLink.dst()); 266 manager.removeVirtualLink(virtualLink.networkId(), virtualLink.src(), virtualLink.dst());
268 virtualLinks = manager.getVirtualLinks(virtualNetwork1.id()); 267 virtualLinks = manager.getVirtualLinks(virtualNetwork1.id());
269 assertTrue("The virtual link set should be empty.", virtualLinks.isEmpty()); 268 assertTrue("The virtual link set should be empty.", virtualLinks.isEmpty());
270 } 269 }
271 270
272 /** 271 /**
272 + * Tests adding the same virtual link twice.
273 + */
274 + @Test(expected = IllegalStateException.class)
275 + public void testAddSameVirtualLink() {
276 + manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
277 + VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
278 + VirtualDevice srcVirtualDevice =
279 + manager.createVirtualDevice(virtualNetwork1.id(), DeviceId.deviceId(deviceIdValue1));
280 + VirtualDevice dstVirtualDevice =
281 + manager.createVirtualDevice(virtualNetwork1.id(), DeviceId.deviceId(deviceIdValue2));
282 + ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
283 + ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
284 + manager.createVirtualLink(virtualNetwork1.id(), src, dst);
285 + manager.createVirtualLink(virtualNetwork1.id(), src, dst);
286 + }
287 +
288 + /**
273 * Tests add and remove of virtual ports. 289 * Tests add and remove of virtual ports.
274 */ 290 */
275 @Test 291 @Test
......
...@@ -180,7 +180,7 @@ public class DistributedTunnelStore ...@@ -180,7 +180,7 @@ public class DistributedTunnelStore
180 notifyDelegate(event); 180 notifyDelegate(event);
181 return tunnel.tunnelId(); 181 return tunnel.tunnelId();
182 } else { 182 } else {
183 - TunnelId tunnelId = TunnelId.valueOf(idGenerator.getNewId()); 183 + TunnelId tunnelId = TunnelId.valueOf(String.valueOf(idGenerator.getNewId()));
184 State tunnelState = (state != null) ? state : tunnel.state(); 184 State tunnelState = (state != null) ? state : tunnel.state();
185 Tunnel newT = new DefaultTunnel(tunnel.providerId(), tunnel.src(), 185 Tunnel newT = new DefaultTunnel(tunnel.providerId(), tunnel.src(),
186 tunnel.dst(), tunnel.type(), 186 tunnel.dst(), tunnel.type(),
......
...@@ -134,9 +134,9 @@ public class DistributedVirtualNetworkStore ...@@ -134,9 +134,9 @@ public class DistributedVirtualNetworkStore
134 .register(DefaultVirtualPort.class) 134 .register(DefaultVirtualPort.class)
135 .register(DeviceId.class) 135 .register(DeviceId.class)
136 .register(Device.class) 136 .register(Device.class)
137 - .register(TunnelId.class)
138 .register(DefaultDevice.class) 137 .register(DefaultDevice.class)
139 .register(DefaultPort.class) 138 .register(DefaultPort.class)
139 + .register(TunnelId.class)
140 .nextId(KryoNamespaces.BEGIN_USER_CUSTOM_ID).build()); 140 .nextId(KryoNamespaces.BEGIN_USER_CUSTOM_ID).build());
141 141
142 /** 142 /**
...@@ -349,22 +349,51 @@ public class DistributedVirtualNetworkStore ...@@ -349,22 +349,51 @@ public class DistributedVirtualNetworkStore
349 if (virtualLinkSet == null) { 349 if (virtualLinkSet == null) {
350 virtualLinkSet = new HashSet<>(); 350 virtualLinkSet = new HashSet<>();
351 } 351 }
352 - VirtualLink virtualLink = new DefaultVirtualLink(networkId, src, dst, realizedBy); 352 + // validate that the link does not already exist in this network
353 + checkState(getLink(networkId, src, dst) == null, "The virtual link already exists");
354 +
355 + VirtualLink virtualLink = DefaultVirtualLink.builder()
356 + .networkId(networkId)
357 + .src(src)
358 + .dst(dst)
359 + .tunnelId(realizedBy)
360 + .build();
361 +
353 virtualLinkSet.add(virtualLink); 362 virtualLinkSet.add(virtualLink);
354 networkIdVirtualLinkSetMap.put(networkId, virtualLinkSet); 363 networkIdVirtualLinkSetMap.put(networkId, virtualLinkSet);
355 return virtualLink; 364 return virtualLink;
356 } 365 }
357 366
358 @Override 367 @Override
359 - public void removeLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst) { 368 + public void updateLink(VirtualLink virtualLink, TunnelId tunnelId) {
369 + checkState(networkExists(virtualLink.networkId()), "The network has not been added.");
370 + Set<VirtualLink> virtualLinkSet = networkIdVirtualLinkSetMap.get(virtualLink.networkId());
371 + if (virtualLinkSet == null) {
372 + virtualLinkSet = new HashSet<>();
373 + }
374 + virtualLinkSet.remove(virtualLink);
375 +
376 + VirtualLink newVirtualLink = DefaultVirtualLink.builder()
377 + .networkId(virtualLink.networkId())
378 + .src(virtualLink.src())
379 + .dst(virtualLink.dst())
380 + .tunnelId(tunnelId)
381 + .build();
382 +
383 + virtualLinkSet.add(newVirtualLink);
384 + networkIdVirtualLinkSetMap.put(newVirtualLink.networkId(), virtualLinkSet);
385 + }
386 +
387 + @Override
388 + public VirtualLink removeLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst) {
360 checkState(networkExists(networkId), "The network has not been added."); 389 checkState(networkExists(networkId), "The network has not been added.");
361 390
391 + final VirtualLink virtualLink = getLink(networkId, src, dst);
392 + if (virtualLink == null) {
393 + return null;
394 + }
362 Set<VirtualLink> virtualLinkSet = new HashSet<>(); 395 Set<VirtualLink> virtualLinkSet = new HashSet<>();
363 - networkIdVirtualLinkSetMap.get(networkId).forEach(link -> { 396 + virtualLinkSet.add(virtualLink);
364 - if (link.src().equals(src) && link.dst().equals(dst)) {
365 - virtualLinkSet.add(link);
366 - }
367 - });
368 397
369 if (virtualLinkSet != null) { 398 if (virtualLinkSet != null) {
370 networkIdVirtualLinkSetMap.compute(networkId, (id, existingVirtualLinks) -> { 399 networkIdVirtualLinkSetMap.compute(networkId, (id, existingVirtualLinks) -> {
...@@ -375,6 +404,7 @@ public class DistributedVirtualNetworkStore ...@@ -375,6 +404,7 @@ public class DistributedVirtualNetworkStore
375 } 404 }
376 }); 405 });
377 } 406 }
407 + return virtualLink;
378 } 408 }
379 409
380 @Override 410 @Override
...@@ -445,6 +475,31 @@ public class DistributedVirtualNetworkStore ...@@ -445,6 +475,31 @@ public class DistributedVirtualNetworkStore
445 return ImmutableSet.copyOf(virtualLinkSet); 475 return ImmutableSet.copyOf(virtualLinkSet);
446 } 476 }
447 477
478 + /**
479 + * Returns the virtual link matching the network identifier, source connect point,
480 + * and destination connect point.
481 + *
482 + * @param networkId network identifier
483 + * @param src source connect point
484 + * @param dst destination connect point
485 + * @return virtual link
486 + */
487 + private VirtualLink getLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst) {
488 + Set<VirtualLink> virtualLinkSet = networkIdVirtualLinkSetMap.get(networkId);
489 + if (virtualLinkSet == null) {
490 + return null;
491 + }
492 +
493 + VirtualLink virtualLink = null;
494 + for (VirtualLink link : virtualLinkSet) {
495 + if (link.src().equals(src) && link.dst().equals(dst)) {
496 + virtualLink = link;
497 + break;
498 + }
499 + }
500 + return virtualLink;
501 + }
502 +
448 @Override 503 @Override
449 public Set<VirtualPort> getPorts(NetworkId networkId, DeviceId deviceId) { 504 public Set<VirtualPort> getPorts(NetworkId networkId, DeviceId deviceId) {
450 checkState(networkExists(networkId), "The network has not been added."); 505 checkState(networkExists(networkId), "The network has not been added.");
......
...@@ -152,7 +152,7 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid ...@@ -152,7 +152,7 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid
152 152
153 HashMap<String, TunnelId> tunnelMap = new HashMap<String, TunnelId>(); 153 HashMap<String, TunnelId> tunnelMap = new HashMap<String, TunnelId>();
154 HashMap<TunnelId, TunnelStatistics> tunnelStatisticsMap = new HashMap<>(); 154 HashMap<TunnelId, TunnelStatistics> tunnelStatisticsMap = new HashMap<>();
155 - private HashMap<Long, TunnelStatsCollector> collectors = Maps.newHashMap(); 155 + private HashMap<String, TunnelStatsCollector> collectors = Maps.newHashMap();
156 156
157 private InnerTunnelProvider listener = new InnerTunnelProvider(); 157 private InnerTunnelProvider listener = new InnerTunnelProvider();
158 158
......
...@@ -51,7 +51,7 @@ import org.onosproject.pcepio.types.StatefulIPv4LspIdentidiersTlv; ...@@ -51,7 +51,7 @@ import org.onosproject.pcepio.types.StatefulIPv4LspIdentidiersTlv;
51 */ 51 */
52 public class PcepReleaseTunnelProviderTest { 52 public class PcepReleaseTunnelProviderTest {
53 53
54 - public static final String PROVIDER_ID = "org.onosproject.provider.tunnel.pcep"; 54 + private static final String PROVIDER_ID = "org.onosproject.provider.tunnel.pcep";
55 private PcepTunnelProvider tunnelProvider = new PcepTunnelProvider(); 55 private PcepTunnelProvider tunnelProvider = new PcepTunnelProvider();
56 private final TunnelProviderRegistryAdapter registry = new TunnelProviderRegistryAdapter(); 56 private final TunnelProviderRegistryAdapter registry = new TunnelProviderRegistryAdapter();
57 private final PcepClientControllerAdapter controller = new PcepClientControllerAdapter(); 57 private final PcepClientControllerAdapter controller = new PcepClientControllerAdapter();
...@@ -104,7 +104,7 @@ public class PcepReleaseTunnelProviderTest { ...@@ -104,7 +104,7 @@ public class PcepReleaseTunnelProviderTest {
104 path = new DefaultPath(pid, links, 20, EMPTY); 104 path = new DefaultPath(pid, links, 20, EMPTY);
105 105
106 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS, 106 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
107 - new DefaultGroupId(0), TunnelId.valueOf(1), TunnelName.tunnelName("T123"), 107 + new DefaultGroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"),
108 path, EMPTY); 108 path, EMPTY);
109 109
110 // for releasing tunnel tunnel should exist in db 110 // for releasing tunnel tunnel should exist in db
...@@ -154,7 +154,7 @@ public class PcepReleaseTunnelProviderTest { ...@@ -154,7 +154,7 @@ public class PcepReleaseTunnelProviderTest {
154 path = new DefaultPath(pid, links, 20, EMPTY); 154 path = new DefaultPath(pid, links, 20, EMPTY);
155 155
156 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS, 156 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
157 - new DefaultGroupId(0), TunnelId.valueOf(1), TunnelName.tunnelName("T123"), 157 + new DefaultGroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"),
158 path, EMPTY); 158 path, EMPTY);
159 159
160 // for releasing tunnel tunnel should exist in db 160 // for releasing tunnel tunnel should exist in db
......
...@@ -50,7 +50,7 @@ import org.onosproject.net.provider.ProviderId; ...@@ -50,7 +50,7 @@ import org.onosproject.net.provider.ProviderId;
50 */ 50 */
51 public class PcepSetupTunnelProviderTest { 51 public class PcepSetupTunnelProviderTest {
52 52
53 - public static final String PROVIDER_ID = "org.onosproject.provider.tunnel.pcep"; 53 + private static final String PROVIDER_ID = "org.onosproject.provider.tunnel.pcep";
54 private PcepTunnelProvider tunnelProvider = new PcepTunnelProvider(); 54 private PcepTunnelProvider tunnelProvider = new PcepTunnelProvider();
55 private final TunnelProviderRegistryAdapter registry = new TunnelProviderRegistryAdapter(); 55 private final TunnelProviderRegistryAdapter registry = new TunnelProviderRegistryAdapter();
56 private final PcepClientControllerAdapter controller = new PcepClientControllerAdapter(); 56 private final PcepClientControllerAdapter controller = new PcepClientControllerAdapter();
...@@ -99,7 +99,7 @@ public class PcepSetupTunnelProviderTest { ...@@ -99,7 +99,7 @@ public class PcepSetupTunnelProviderTest {
99 path = new DefaultPath(pid, links, 10, EMPTY); 99 path = new DefaultPath(pid, links, 10, EMPTY);
100 100
101 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS, 101 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
102 - new DefaultGroupId(0), TunnelId.valueOf(1), TunnelName.tunnelName("T123"), 102 + new DefaultGroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"),
103 path, EMPTY); 103 path, EMPTY);
104 104
105 tunnelProvider.setupTunnel(tunnel, path); 105 tunnelProvider.setupTunnel(tunnel, path);
...@@ -138,7 +138,7 @@ public class PcepSetupTunnelProviderTest { ...@@ -138,7 +138,7 @@ public class PcepSetupTunnelProviderTest {
138 path = new DefaultPath(pid, links, 10, EMPTY); 138 path = new DefaultPath(pid, links, 10, EMPTY);
139 139
140 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS, 140 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
141 - new DefaultGroupId(0), TunnelId.valueOf(1), TunnelName.tunnelName("T123"), 141 + new DefaultGroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"),
142 path, EMPTY); 142 path, EMPTY);
143 143
144 tunnelProvider.setupTunnel(tunnel, path); 144 tunnelProvider.setupTunnel(tunnel, path);
......
...@@ -42,7 +42,7 @@ import org.onosproject.cfg.ComponentConfigAdapter; ...@@ -42,7 +42,7 @@ import org.onosproject.cfg.ComponentConfigAdapter;
42 42
43 public class PcepTunnelProviderTest { 43 public class PcepTunnelProviderTest {
44 44
45 - public static final String PROVIDER_ID = "org.onosproject.provider.tunnel.pcep"; 45 + private static final String PROVIDER_ID = "org.onosproject.provider.tunnel.pcep";
46 private PcepTunnelProvider tunnelProvider = new PcepTunnelProvider(); 46 private PcepTunnelProvider tunnelProvider = new PcepTunnelProvider();
47 private final TunnelProviderRegistryAdapter registry = new TunnelProviderRegistryAdapter(); 47 private final TunnelProviderRegistryAdapter registry = new TunnelProviderRegistryAdapter();
48 private final PcepClientControllerAdapter controller = new PcepClientControllerAdapter(); 48 private final PcepClientControllerAdapter controller = new PcepClientControllerAdapter();
...@@ -86,7 +86,7 @@ public class PcepTunnelProviderTest { ...@@ -86,7 +86,7 @@ public class PcepTunnelProviderTest {
86 path = new DefaultPath(pid, links, 10, EMPTY); 86 path = new DefaultPath(pid, links, 10, EMPTY);
87 87
88 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS, 88 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
89 - new DefaultGroupId(0), TunnelId.valueOf(1), TunnelName.tunnelName("T123"), 89 + new DefaultGroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"),
90 path, EMPTY); 90 path, EMPTY);
91 91
92 tunnelProvider.setupTunnel(tunnel, path); 92 tunnelProvider.setupTunnel(tunnel, path);
......
...@@ -51,7 +51,7 @@ import org.onosproject.pcepio.types.StatefulIPv4LspIdentidiersTlv; ...@@ -51,7 +51,7 @@ import org.onosproject.pcepio.types.StatefulIPv4LspIdentidiersTlv;
51 */ 51 */
52 public class PcepUpdateTunnelProviderTest { 52 public class PcepUpdateTunnelProviderTest {
53 53
54 - public static final String PROVIDER_ID = "org.onosproject.provider.tunnel.pcep"; 54 + private static final String PROVIDER_ID = "org.onosproject.provider.tunnel.pcep";
55 private PcepTunnelProvider tunnelProvider = new PcepTunnelProvider(); 55 private PcepTunnelProvider tunnelProvider = new PcepTunnelProvider();
56 private final TunnelProviderRegistryAdapter registry = new TunnelProviderRegistryAdapter(); 56 private final TunnelProviderRegistryAdapter registry = new TunnelProviderRegistryAdapter();
57 private final PcepClientControllerAdapter controller = new PcepClientControllerAdapter(); 57 private final PcepClientControllerAdapter controller = new PcepClientControllerAdapter();
...@@ -102,7 +102,7 @@ public class PcepUpdateTunnelProviderTest { ...@@ -102,7 +102,7 @@ public class PcepUpdateTunnelProviderTest {
102 path = new DefaultPath(pid, links, 20, EMPTY); 102 path = new DefaultPath(pid, links, 20, EMPTY);
103 103
104 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS, 104 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
105 - new DefaultGroupId(0), TunnelId.valueOf(1), TunnelName.tunnelName("T123"), 105 + new DefaultGroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"),
106 path, EMPTY); 106 path, EMPTY);
107 107
108 // for updating tunnel tunnel should exist in db 108 // for updating tunnel tunnel should exist in db
...@@ -150,7 +150,7 @@ public class PcepUpdateTunnelProviderTest { ...@@ -150,7 +150,7 @@ public class PcepUpdateTunnelProviderTest {
150 path = new DefaultPath(pid, links, 20, EMPTY); 150 path = new DefaultPath(pid, links, 20, EMPTY);
151 151
152 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS, 152 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
153 - new DefaultGroupId(0), TunnelId.valueOf(1), TunnelName.tunnelName("T123"), 153 + new DefaultGroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"),
154 path, EMPTY); 154 path, EMPTY);
155 155
156 // for updating tunnel tunnel should exist in db 156 // for updating tunnel tunnel should exist in db
......
...@@ -18,8 +18,6 @@ package org.onosproject.rest.resources; ...@@ -18,8 +18,6 @@ package org.onosproject.rest.resources;
18 18
19 import com.fasterxml.jackson.databind.JsonNode; 19 import com.fasterxml.jackson.databind.JsonNode;
20 import com.fasterxml.jackson.databind.node.ObjectNode; 20 import com.fasterxml.jackson.databind.node.ObjectNode;
21 -import org.onosproject.incubator.net.tunnel.TunnelId;
22 -import org.onosproject.incubator.net.virtual.DefaultVirtualLink;
23 import org.onosproject.incubator.net.virtual.NetworkId; 21 import org.onosproject.incubator.net.virtual.NetworkId;
24 import org.onosproject.incubator.net.virtual.TenantId; 22 import org.onosproject.incubator.net.virtual.TenantId;
25 import org.onosproject.incubator.net.virtual.VirtualDevice; 23 import org.onosproject.incubator.net.virtual.VirtualDevice;
...@@ -100,7 +98,7 @@ public class VirtualNetworkWebResource extends AbstractWebResource { ...@@ -100,7 +98,7 @@ public class VirtualNetworkWebResource extends AbstractWebResource {
100 @Path("{tenantId}") 98 @Path("{tenantId}")
101 public Response getVirtualNetworkById(@PathParam("tenantId") String tenantId) { 99 public Response getVirtualNetworkById(@PathParam("tenantId") String tenantId) {
102 final TenantId existingTid = TenantWebResource.getExistingTenantId(vnetAdminService, 100 final TenantId existingTid = TenantWebResource.getExistingTenantId(vnetAdminService,
103 - TenantId.tenantId(tenantId)); 101 + TenantId.tenantId(tenantId));
104 Set<VirtualNetwork> vnets = vnetService.getVirtualNetworks(existingTid); 102 Set<VirtualNetwork> vnets = vnetService.getVirtualNetworks(existingTid);
105 return ok(encodeArray(VirtualNetwork.class, "vnets", vnets)).build(); 103 return ok(encodeArray(VirtualNetwork.class, "vnets", vnets)).build();
106 } 104 }
...@@ -158,7 +156,7 @@ public class VirtualNetworkWebResource extends AbstractWebResource { ...@@ -158,7 +156,7 @@ public class VirtualNetworkWebResource extends AbstractWebResource {
158 @Path("{networkId}/devices") 156 @Path("{networkId}/devices")
159 public Response getVirtualDevices(@PathParam("networkId") long networkId) { 157 public Response getVirtualDevices(@PathParam("networkId") long networkId) {
160 NetworkId nid = NetworkId.networkId(networkId); 158 NetworkId nid = NetworkId.networkId(networkId);
161 - Set<VirtualDevice> vdevs = vnetService.getVirtualDevices(nid); 159 + Set<VirtualDevice> vdevs = vnetService.getVirtualDevices(nid);
162 return ok(encodeArray(VirtualDevice.class, "devices", vdevs)).build(); 160 return ok(encodeArray(VirtualDevice.class, "devices", vdevs)).build();
163 } 161 }
164 162
...@@ -166,7 +164,7 @@ public class VirtualNetworkWebResource extends AbstractWebResource { ...@@ -166,7 +164,7 @@ public class VirtualNetworkWebResource extends AbstractWebResource {
166 * Creates a virtual device from the JSON input stream. 164 * Creates a virtual device from the JSON input stream.
167 * 165 *
168 * @param networkId network identifier 166 * @param networkId network identifier
169 - * @param stream Virtual device JSON stream 167 + * @param stream Virtual device JSON stream
170 * @return status of the request - CREATED if the JSON is correct, 168 * @return status of the request - CREATED if the JSON is correct,
171 * BAD_REQUEST if the JSON is invalid 169 * BAD_REQUEST if the JSON is invalid
172 * @onos.rsModel VirtualDevice 170 * @onos.rsModel VirtualDevice
...@@ -201,13 +199,13 @@ public class VirtualNetworkWebResource extends AbstractWebResource { ...@@ -201,13 +199,13 @@ public class VirtualNetworkWebResource extends AbstractWebResource {
201 * Removes the virtual network device from the virtual network. 199 * Removes the virtual network device from the virtual network.
202 * 200 *
203 * @param networkId network identifier 201 * @param networkId network identifier
204 - * @param deviceId device identifier 202 + * @param deviceId device identifier
205 * @return 200 OK, 404 not found 203 * @return 200 OK, 404 not found
206 */ 204 */
207 @DELETE 205 @DELETE
208 @Path("{networkId}/devices/{deviceId}") 206 @Path("{networkId}/devices/{deviceId}")
209 public Response removeVirtualDevice(@PathParam("networkId") long networkId, 207 public Response removeVirtualDevice(@PathParam("networkId") long networkId,
210 - @PathParam("deviceId") String deviceId) { 208 + @PathParam("deviceId") String deviceId) {
211 NetworkId nid = NetworkId.networkId(networkId); 209 NetworkId nid = NetworkId.networkId(networkId);
212 DeviceId did = DeviceId.deviceId(deviceId); 210 DeviceId did = DeviceId.deviceId(deviceId);
213 vnetAdminService.removeVirtualDevice(nid, did); 211 vnetAdminService.removeVirtualDevice(nid, did);
...@@ -220,25 +218,25 @@ public class VirtualNetworkWebResource extends AbstractWebResource { ...@@ -220,25 +218,25 @@ public class VirtualNetworkWebResource extends AbstractWebResource {
220 * Returns all virtual network ports in a virtual device in a virtual network. 218 * Returns all virtual network ports in a virtual device in a virtual network.
221 * 219 *
222 * @param networkId network identifier 220 * @param networkId network identifier
223 - * @param deviceId virtual device identifier 221 + * @param deviceId virtual device identifier
224 * @return 200 OK 222 * @return 200 OK
225 */ 223 */
226 @GET 224 @GET
227 @Produces(MediaType.APPLICATION_JSON) 225 @Produces(MediaType.APPLICATION_JSON)
228 @Path("{networkId}/devices/{deviceId}/ports") 226 @Path("{networkId}/devices/{deviceId}/ports")
229 public Response getVirtualPorts(@PathParam("networkId") long networkId, 227 public Response getVirtualPorts(@PathParam("networkId") long networkId,
230 - @PathParam("deviceId") String deviceId) { 228 + @PathParam("deviceId") String deviceId) {
231 NetworkId nid = NetworkId.networkId(networkId); 229 NetworkId nid = NetworkId.networkId(networkId);
232 - Iterable<VirtualPort> vports = vnetService.getVirtualPorts(nid, DeviceId.deviceId(deviceId)); 230 + Iterable<VirtualPort> vports = vnetService.getVirtualPorts(nid, DeviceId.deviceId(deviceId));
233 return ok(encodeArray(VirtualPort.class, "ports", vports)).build(); 231 return ok(encodeArray(VirtualPort.class, "ports", vports)).build();
234 } 232 }
235 233
236 /** 234 /**
237 * Creates a virtual network port in a virtual device in a virtual network. 235 * Creates a virtual network port in a virtual device in a virtual network.
238 * 236 *
239 - * @param networkId network identifier 237 + * @param networkId network identifier
240 * @param virtDeviceId virtual device identifier 238 * @param virtDeviceId virtual device identifier
241 - * @param stream Virtual device JSON stream 239 + * @param stream Virtual device JSON stream
242 * @return status of the request - CREATED if the JSON is correct, 240 * @return status of the request - CREATED if the JSON is correct,
243 * BAD_REQUEST if the JSON is invalid 241 * BAD_REQUEST if the JSON is invalid
244 * @onos.rsModel VirtualPort 242 * @onos.rsModel VirtualPort
...@@ -248,8 +246,8 @@ public class VirtualNetworkWebResource extends AbstractWebResource { ...@@ -248,8 +246,8 @@ public class VirtualNetworkWebResource extends AbstractWebResource {
248 @Produces(MediaType.APPLICATION_JSON) 246 @Produces(MediaType.APPLICATION_JSON)
249 @Path("{networkId}/devices/{deviceId}/ports") 247 @Path("{networkId}/devices/{deviceId}/ports")
250 public Response createVirtualPort(@PathParam("networkId") long networkId, 248 public Response createVirtualPort(@PathParam("networkId") long networkId,
251 - @PathParam("deviceId") String virtDeviceId, 249 + @PathParam("deviceId") String virtDeviceId,
252 - InputStream stream) { 250 + InputStream stream) {
253 try { 251 try {
254 ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream); 252 ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
255 // final VirtualPort vportReq = codec(VirtualPort.class).decode(jsonTree, this); 253 // final VirtualPort vportReq = codec(VirtualPort.class).decode(jsonTree, this);
...@@ -268,11 +266,11 @@ public class VirtualNetworkWebResource extends AbstractWebResource { ...@@ -268,11 +266,11 @@ public class VirtualNetworkWebResource extends AbstractWebResource {
268 DeviceId vdevId = DeviceId.deviceId(virtDeviceId); 266 DeviceId vdevId = DeviceId.deviceId(virtDeviceId);
269 DefaultAnnotations annotations = DefaultAnnotations.builder().build(); 267 DefaultAnnotations annotations = DefaultAnnotations.builder().build();
270 Device physDevice = new DefaultDevice(null, DeviceId.deviceId(specifiedPhysDeviceId.asText()), 268 Device physDevice = new DefaultDevice(null, DeviceId.deviceId(specifiedPhysDeviceId.asText()),
271 - null, null, null, null, null, null, annotations); 269 + null, null, null, null, null, null, annotations);
272 Port realizedBy = new DefaultPort(physDevice, 270 Port realizedBy = new DefaultPort(physDevice,
273 - PortNumber.portNumber(specifiedPhysPortNum.asText()), true); 271 + PortNumber.portNumber(specifiedPhysPortNum.asText()), true);
274 VirtualPort vport = vnetAdminService.createVirtualPort(nid, vdevId, 272 VirtualPort vport = vnetAdminService.createVirtualPort(nid, vdevId,
275 - PortNumber.portNumber(specifiedPortNum.asText()), realizedBy); 273 + PortNumber.portNumber(specifiedPortNum.asText()), realizedBy);
276 UriBuilder locationBuilder = uriInfo.getBaseUriBuilder() 274 UriBuilder locationBuilder = uriInfo.getBaseUriBuilder()
277 .path("vnets").path(specifiedNetworkId.asText()) 275 .path("vnets").path(specifiedNetworkId.asText())
278 .path("devices").path(specifiedDeviceId.asText()) 276 .path("devices").path(specifiedDeviceId.asText())
...@@ -289,18 +287,18 @@ public class VirtualNetworkWebResource extends AbstractWebResource { ...@@ -289,18 +287,18 @@ public class VirtualNetworkWebResource extends AbstractWebResource {
289 * Removes the virtual network port from the virtual device in a virtual network. 287 * Removes the virtual network port from the virtual device in a virtual network.
290 * 288 *
291 * @param networkId network identifier 289 * @param networkId network identifier
292 - * @param deviceId virtual device identifier 290 + * @param deviceId virtual device identifier
293 - * @param portNum virtual port number 291 + * @param portNum virtual port number
294 * @return 200 OK, 404 not found 292 * @return 200 OK, 404 not found
295 */ 293 */
296 @DELETE 294 @DELETE
297 @Path("{networkId}/devices/{deviceId}/ports/{portNum}") 295 @Path("{networkId}/devices/{deviceId}/ports/{portNum}")
298 public Response removeVirtualPort(@PathParam("networkId") long networkId, 296 public Response removeVirtualPort(@PathParam("networkId") long networkId,
299 - @PathParam("deviceId") String deviceId, 297 + @PathParam("deviceId") String deviceId,
300 - @PathParam("portNum") long portNum) { 298 + @PathParam("portNum") long portNum) {
301 NetworkId nid = NetworkId.networkId(networkId); 299 NetworkId nid = NetworkId.networkId(networkId);
302 vnetAdminService.removeVirtualPort(nid, DeviceId.deviceId(deviceId), 300 vnetAdminService.removeVirtualPort(nid, DeviceId.deviceId(deviceId),
303 - PortNumber.portNumber(portNum)); 301 + PortNumber.portNumber(portNum));
304 return Response.ok().build(); 302 return Response.ok().build();
305 } 303 }
306 304
...@@ -317,15 +315,15 @@ public class VirtualNetworkWebResource extends AbstractWebResource { ...@@ -317,15 +315,15 @@ public class VirtualNetworkWebResource extends AbstractWebResource {
317 @Path("{networkId}/links") 315 @Path("{networkId}/links")
318 public Response getVirtualLinks(@PathParam("networkId") long networkId) { 316 public Response getVirtualLinks(@PathParam("networkId") long networkId) {
319 NetworkId nid = NetworkId.networkId(networkId); 317 NetworkId nid = NetworkId.networkId(networkId);
320 - Set<VirtualLink> vlinks = vnetService.getVirtualLinks(nid); 318 + Set<VirtualLink> vlinks = vnetService.getVirtualLinks(nid);
321 return ok(encodeArray(VirtualLink.class, "links", vlinks)).build(); 319 return ok(encodeArray(VirtualLink.class, "links", vlinks)).build();
322 } 320 }
323 321
324 - /** 322 + /**
325 * Creates a virtual network link from the JSON input stream. 323 * Creates a virtual network link from the JSON input stream.
326 * 324 *
327 * @param networkId network identifier 325 * @param networkId network identifier
328 - * @param stream Virtual device JSON stream 326 + * @param stream Virtual device JSON stream
329 * @return status of the request - CREATED if the JSON is correct, 327 * @return status of the request - CREATED if the JSON is correct,
330 * BAD_REQUEST if the JSON is invalid 328 * BAD_REQUEST if the JSON is invalid
331 * @onos.rsModel VirtualLink 329 * @onos.rsModel VirtualLink
...@@ -343,12 +341,8 @@ public class VirtualNetworkWebResource extends AbstractWebResource { ...@@ -343,12 +341,8 @@ public class VirtualNetworkWebResource extends AbstractWebResource {
343 throw new IllegalArgumentException(INVALID_FIELD + "networkId"); 341 throw new IllegalArgumentException(INVALID_FIELD + "networkId");
344 } 342 }
345 final VirtualLink vlinkReq = codec(VirtualLink.class).decode(jsonTree, this); 343 final VirtualLink vlinkReq = codec(VirtualLink.class).decode(jsonTree, this);
346 - TunnelId tunnelId = TunnelId.valueOf(0);
347 - if (vlinkReq instanceof DefaultVirtualLink) {
348 - tunnelId = ((DefaultVirtualLink) vlinkReq).tunnelId();
349 - }
350 vnetAdminService.createVirtualLink(vlinkReq.networkId(), 344 vnetAdminService.createVirtualLink(vlinkReq.networkId(),
351 - vlinkReq.src(), vlinkReq.dst(), tunnelId); 345 + vlinkReq.src(), vlinkReq.dst());
352 UriBuilder locationBuilder = uriInfo.getBaseUriBuilder() 346 UriBuilder locationBuilder = uriInfo.getBaseUriBuilder()
353 .path("vnets").path(specifiedNetworkId.asText()) 347 .path("vnets").path(specifiedNetworkId.asText())
354 .path("links"); 348 .path("links");
...@@ -364,7 +358,7 @@ public class VirtualNetworkWebResource extends AbstractWebResource { ...@@ -364,7 +358,7 @@ public class VirtualNetworkWebResource extends AbstractWebResource {
364 * Removes the virtual network link from the JSON input stream. 358 * Removes the virtual network link from the JSON input stream.
365 * 359 *
366 * @param networkId network identifier 360 * @param networkId network identifier
367 - * @param stream deviceIds JSON stream 361 + * @param stream deviceIds JSON stream
368 * @return 200 OK, 404 not found 362 * @return 200 OK, 404 not found
369 * @onos.rsModel VirtualLink 363 * @onos.rsModel VirtualLink
370 */ 364 */
...@@ -372,7 +366,7 @@ public class VirtualNetworkWebResource extends AbstractWebResource { ...@@ -372,7 +366,7 @@ public class VirtualNetworkWebResource extends AbstractWebResource {
372 @Path("{networkId}/links") 366 @Path("{networkId}/links")
373 @Consumes(MediaType.APPLICATION_JSON) 367 @Consumes(MediaType.APPLICATION_JSON)
374 public Response removeVirtualLink(@PathParam("networkId") long networkId, 368 public Response removeVirtualLink(@PathParam("networkId") long networkId,
375 - InputStream stream) { 369 + InputStream stream) {
376 try { 370 try {
377 ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream); 371 ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
378 JsonNode specifiedNetworkId = jsonTree.get("networkId"); 372 JsonNode specifiedNetworkId = jsonTree.get("networkId");
...@@ -382,7 +376,7 @@ public class VirtualNetworkWebResource extends AbstractWebResource { ...@@ -382,7 +376,7 @@ public class VirtualNetworkWebResource extends AbstractWebResource {
382 } 376 }
383 final VirtualLink vlinkReq = codec(VirtualLink.class).decode(jsonTree, this); 377 final VirtualLink vlinkReq = codec(VirtualLink.class).decode(jsonTree, this);
384 vnetAdminService.removeVirtualLink(vlinkReq.networkId(), 378 vnetAdminService.removeVirtualLink(vlinkReq.networkId(),
385 - vlinkReq.src(), vlinkReq.dst()); 379 + vlinkReq.src(), vlinkReq.dst());
386 } catch (IOException e) { 380 } catch (IOException e) {
387 throw new IllegalArgumentException(e); 381 throw new IllegalArgumentException(e);
388 } 382 }
...@@ -393,7 +387,7 @@ public class VirtualNetworkWebResource extends AbstractWebResource { ...@@ -393,7 +387,7 @@ public class VirtualNetworkWebResource extends AbstractWebResource {
393 /** 387 /**
394 * Get the tenant identifier from the JSON stream. 388 * Get the tenant identifier from the JSON stream.
395 * 389 *
396 - * @param stream TenantId JSON stream 390 + * @param stream TenantId JSON stream
397 * @param jsonFieldName field name 391 * @param jsonFieldName field name
398 * @return JsonNode 392 * @return JsonNode
399 * @throws IOException if unable to parse the request 393 * @throws IOException if unable to parse the request
......
...@@ -56,10 +56,6 @@ ...@@ -56,10 +56,6 @@
56 "state": { 56 "state": {
57 "type": "string", 57 "type": "string",
58 "example": "ACTIVE" 58 "example": "ACTIVE"
59 - },
60 - "tunnelId": {
61 - "type": "int64",
62 - "example": "Tunnel identifier"
63 } 59 }
64 } 60 }
65 } 61 }
......
...@@ -32,7 +32,6 @@ import org.onlab.osgi.TestServiceDirectory; ...@@ -32,7 +32,6 @@ import org.onlab.osgi.TestServiceDirectory;
32 import org.onlab.rest.BaseResource; 32 import org.onlab.rest.BaseResource;
33 import org.onosproject.codec.CodecService; 33 import org.onosproject.codec.CodecService;
34 import org.onosproject.codec.impl.CodecManager; 34 import org.onosproject.codec.impl.CodecManager;
35 -import org.onosproject.incubator.net.tunnel.TunnelId;
36 import org.onosproject.incubator.net.virtual.DefaultVirtualDevice; 35 import org.onosproject.incubator.net.virtual.DefaultVirtualDevice;
37 import org.onosproject.incubator.net.virtual.DefaultVirtualLink; 36 import org.onosproject.incubator.net.virtual.DefaultVirtualLink;
38 import org.onosproject.incubator.net.virtual.DefaultVirtualNetwork; 37 import org.onosproject.incubator.net.virtual.DefaultVirtualNetwork;
...@@ -104,7 +103,6 @@ public class VirtualNetworkWebResourceTest extends ResourceTest { ...@@ -104,7 +103,6 @@ public class VirtualNetworkWebResourceTest extends ResourceTest {
104 private static final String PORT_NUM = "portNum"; 103 private static final String PORT_NUM = "portNum";
105 private static final String PHYS_DEVICE_ID = "physDeviceId"; 104 private static final String PHYS_DEVICE_ID = "physDeviceId";
106 private static final String PHYS_PORT_NUM = "physPortNum"; 105 private static final String PHYS_PORT_NUM = "physPortNum";
107 - private static final String TUNNEL_ID = "tunnelId";
108 106
109 private final TenantId tenantId1 = TenantId.tenantId("TenantId1"); 107 private final TenantId tenantId1 = TenantId.tenantId("TenantId1");
110 private final TenantId tenantId2 = TenantId.tenantId("TenantId2"); 108 private final TenantId tenantId2 = TenantId.tenantId("TenantId2");
...@@ -137,18 +135,26 @@ public class VirtualNetworkWebResourceTest extends ResourceTest { ...@@ -137,18 +135,26 @@ public class VirtualNetworkWebResourceTest extends ResourceTest {
137 Port port2 = new DefaultPort(dev2, portNumber(2), true); 135 Port port2 = new DefaultPort(dev2, portNumber(2), true);
138 136
139 private final VirtualPort vport22 = new DefaultVirtualPort(networkId3, 137 private final VirtualPort vport22 = new DefaultVirtualPort(networkId3,
140 - dev22, portNumber(22), port1); 138 + dev22, portNumber(22), port1);
141 private final VirtualPort vport23 = new DefaultVirtualPort(networkId3, 139 private final VirtualPort vport23 = new DefaultVirtualPort(networkId3,
142 - dev22, portNumber(23), port2); 140 + dev22, portNumber(23), port2);
143 141
144 private final ConnectPoint cp11 = NetTestTools.connectPoint(devId1.toString(), 21); 142 private final ConnectPoint cp11 = NetTestTools.connectPoint(devId1.toString(), 21);
145 private final ConnectPoint cp21 = NetTestTools.connectPoint(devId2.toString(), 22); 143 private final ConnectPoint cp21 = NetTestTools.connectPoint(devId2.toString(), 22);
146 private final ConnectPoint cp12 = NetTestTools.connectPoint(devId1.toString(), 2); 144 private final ConnectPoint cp12 = NetTestTools.connectPoint(devId1.toString(), 2);
147 private final ConnectPoint cp22 = NetTestTools.connectPoint(devId2.toString(), 22); 145 private final ConnectPoint cp22 = NetTestTools.connectPoint(devId2.toString(), 22);
148 146
149 - private final TunnelId tunnelId = TunnelId.valueOf(31); 147 + private final VirtualLink vlink1 = DefaultVirtualLink.builder()
150 - private final VirtualLink vlink1 = new DefaultVirtualLink(networkId3, cp22, cp11, tunnelId); 148 + .networkId(networkId3)
151 - private final VirtualLink vlink2 = new DefaultVirtualLink(networkId3, cp12, cp21, tunnelId); 149 + .src(cp22)
150 + .dst(cp11)
151 + .build();
152 +
153 + private final VirtualLink vlink2 = DefaultVirtualLink.builder()
154 + .networkId(networkId3)
155 + .src(cp12)
156 + .dst(cp21)
157 + .build();
152 158
153 /** 159 /**
154 * Sets up the global values for all the tests. 160 * Sets up the global values for all the tests.
...@@ -217,14 +223,14 @@ public class VirtualNetworkWebResourceTest extends ResourceTest { ...@@ -217,14 +223,14 @@ public class VirtualNetworkWebResourceTest extends ResourceTest {
217 /** 223 /**
218 * Factory to allocate a virtual network entity matcher. 224 * Factory to allocate a virtual network entity matcher.
219 * 225 *
220 - * @param obj virtual network object we are looking for 226 + * @param obj virtual network object we are looking for
221 * @param jsonFieldNames JSON field names to check against 227 * @param jsonFieldNames JSON field names to check against
222 - * @param getValue function to retrieve value from virtual network object 228 + * @param getValue function to retrieve value from virtual network object
223 * @param <T> 229 * @param <T>
224 * @return JsonObjectMatcher 230 * @return JsonObjectMatcher
225 */ 231 */
226 private static <T> JsonObjectMatcher matchesVnetEntity(T obj, List<String> jsonFieldNames, 232 private static <T> JsonObjectMatcher matchesVnetEntity(T obj, List<String> jsonFieldNames,
227 - BiFunction<T, String, String> getValue) { 233 + BiFunction<T, String, String> getValue) {
228 return new JsonObjectMatcher(obj, jsonFieldNames, getValue); 234 return new JsonObjectMatcher(obj, jsonFieldNames, getValue);
229 } 235 }
230 236
...@@ -710,7 +716,7 @@ public class VirtualNetworkWebResourceTest extends ResourceTest { ...@@ -710,7 +716,7 @@ public class VirtualNetworkWebResourceTest extends ResourceTest {
710 final JsonArray vnetJsonArray = result.get("ports").asArray(); 716 final JsonArray vnetJsonArray = result.get("ports").asArray();
711 assertThat(vnetJsonArray, notNullValue()); 717 assertThat(vnetJsonArray, notNullValue());
712 assertEquals("Virtual ports array is not the correct size.", 718 assertEquals("Virtual ports array is not the correct size.",
713 - vportSet.size(), vnetJsonArray.size()); 719 + vportSet.size(), vnetJsonArray.size());
714 720
715 vportSet.forEach(vport -> assertThat(vnetJsonArray, hasVport(vport))); 721 vportSet.forEach(vport -> assertThat(vnetJsonArray, hasVport(vport)));
716 722
...@@ -759,7 +765,7 @@ public class VirtualNetworkWebResourceTest extends ResourceTest { ...@@ -759,7 +765,7 @@ public class VirtualNetworkWebResourceTest extends ResourceTest {
759 DeviceId deviceId = devId22; 765 DeviceId deviceId = devId22;
760 DefaultAnnotations annotations = DefaultAnnotations.builder().build(); 766 DefaultAnnotations annotations = DefaultAnnotations.builder().build();
761 Device physDevice = new DefaultDevice(null, DeviceId.deviceId("dev1"), 767 Device physDevice = new DefaultDevice(null, DeviceId.deviceId("dev1"),
762 - null, null, null, null, null, null, annotations); 768 + null, null, null, null, null, null, annotations);
763 Port port1 = new DefaultPort(physDevice, portNumber(1), true); 769 Port port1 = new DefaultPort(physDevice, portNumber(1), true);
764 expect(mockVnetAdminService.createVirtualPort(networkId, deviceId, portNumber(22), port1)) 770 expect(mockVnetAdminService.createVirtualPort(networkId, deviceId, portNumber(22), port1))
765 .andReturn(vport22); 771 .andReturn(vport22);
...@@ -817,7 +823,7 @@ public class VirtualNetworkWebResourceTest extends ResourceTest { ...@@ -817,7 +823,7 @@ public class VirtualNetworkWebResourceTest extends ResourceTest {
817 WebTarget wt = target() 823 WebTarget wt = target()
818 .property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true); 824 .property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true);
819 String reqLocation = "vnets/" + networkId.toString() 825 String reqLocation = "vnets/" + networkId.toString()
820 - + "/devices/" + deviceId.toString() + "/ports/" + portNum.toLong(); 826 + + "/devices/" + deviceId.toString() + "/ports/" + portNum.toLong();
821 Response response = wt.path(reqLocation) 827 Response response = wt.path(reqLocation)
822 .request(MediaType.APPLICATION_JSON_TYPE) 828 .request(MediaType.APPLICATION_JSON_TYPE)
823 .delete(); 829 .delete();
...@@ -902,15 +908,6 @@ public class VirtualNetworkWebResourceTest extends ResourceTest { ...@@ -902,15 +908,6 @@ public class VirtualNetworkWebResourceTest extends ResourceTest {
902 reason = ID + " was " + jsonNetworkId; 908 reason = ID + " was " + jsonNetworkId;
903 return false; 909 return false;
904 } 910 }
905 - // check TunnelId
906 - String jsonTunnelId = jsonLink.get(TUNNEL_ID).asString();
907 - if (jsonTunnelId != null && vlink instanceof DefaultVirtualLink) {
908 - String tunnelId = ((DefaultVirtualLink) vlink).tunnelId().toString();
909 - if (!jsonTunnelId.equals(tunnelId)) {
910 - reason = TUNNEL_ID + " was " + jsonTunnelId;
911 - return false;
912 - }
913 - }
914 return true; 911 return true;
915 } 912 }
916 913
...@@ -980,7 +977,7 @@ public class VirtualNetworkWebResourceTest extends ResourceTest { ...@@ -980,7 +977,7 @@ public class VirtualNetworkWebResourceTest extends ResourceTest {
980 @Test 977 @Test
981 public void testPostVirtualLink() { 978 public void testPostVirtualLink() {
982 NetworkId networkId = networkId3; 979 NetworkId networkId = networkId3;
983 - expect(mockVnetAdminService.createVirtualLink(networkId, cp22, cp11, tunnelId)) 980 + expect(mockVnetAdminService.createVirtualLink(networkId, cp22, cp11))
984 .andReturn(vlink1); 981 .andReturn(vlink1);
985 replay(mockVnetAdminService); 982 replay(mockVnetAdminService);
986 983
......
...@@ -9,6 +9,5 @@ ...@@ -9,6 +9,5 @@
9 "port": "21" 9 "port": "21"
10 }, 10 },
11 "type": "VIRTUAL", 11 "type": "VIRTUAL",
12 - "state": "ACTIVE", 12 + "state": "ACTIVE"
13 - "tunnelId": "31"
14 } 13 }
......