Brian Stanke
Committed by Gerrit Code Review

ONOS-2184 Adding VirtualHost support in Virtual Networks.

Change-Id: I1318f20a9b14f1f99dc8eb48b9660a208165bac1
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;
18 +
19 +import org.onlab.packet.IpAddress;
20 +import org.onlab.packet.MacAddress;
21 +import org.onlab.packet.VlanId;
22 +import org.onosproject.net.DefaultAnnotations;
23 +import org.onosproject.net.DefaultHost;
24 +import org.onosproject.net.HostId;
25 +import org.onosproject.net.HostLocation;
26 +import org.onosproject.net.provider.ProviderId;
27 +
28 +import java.util.Objects;
29 +import java.util.Set;
30 +
31 +import static com.google.common.base.MoreObjects.toStringHelper;
32 +
33 +/**
34 + * Default representation of a virtual host.
35 + */
36 +public final class DefaultVirtualHost extends DefaultHost implements VirtualHost {
37 +
38 + private static final String VIRTUAL = "virtual";
39 + private static final ProviderId PID = new ProviderId(VIRTUAL, VIRTUAL);
40 +
41 + private final NetworkId networkId;
42 +
43 + /**
44 + * Creates a virtual host attributed to the specified provider.
45 + *
46 + * @param networkId network identifier
47 + * @param id host identifier
48 + * @param mac host MAC address
49 + * @param vlan host VLAN identifier
50 + * @param location host location
51 + * @param ips host IP addresses
52 + */
53 + public DefaultVirtualHost(NetworkId networkId, HostId id, MacAddress mac,
54 + VlanId vlan, HostLocation location, Set<IpAddress> ips) {
55 + super(PID, id, mac, vlan, location, ips, DefaultAnnotations.builder().build());
56 + this.networkId = networkId;
57 + }
58 +
59 + @Override
60 + public NetworkId networkId() {
61 + return networkId;
62 + }
63 +
64 + @Override
65 + public int hashCode() {
66 + return Objects.hash(networkId);
67 + }
68 +
69 + @Override
70 + public boolean equals(Object obj) {
71 + if (this == obj) {
72 + return true;
73 + }
74 + if (obj instanceof DefaultVirtualHost) {
75 + DefaultVirtualHost that = (DefaultVirtualHost) obj;
76 + return super.equals(that) && Objects.equals(this.networkId, that.networkId);
77 + }
78 + return false;
79 + }
80 +
81 + @Override
82 + public String toString() {
83 + return toStringHelper(this).add("networkId", networkId).toString();
84 + }
85 +}
...@@ -16,8 +16,13 @@ ...@@ -16,8 +16,13 @@
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.onlab.packet.IpAddress;
20 +import org.onlab.packet.MacAddress;
21 +import org.onlab.packet.VlanId;
19 import org.onosproject.net.ConnectPoint; 22 import org.onosproject.net.ConnectPoint;
20 import org.onosproject.net.DeviceId; 23 import org.onosproject.net.DeviceId;
24 +import org.onosproject.net.HostId;
25 +import org.onosproject.net.HostLocation;
21 import org.onosproject.net.Port; 26 import org.onosproject.net.Port;
22 import org.onosproject.net.PortNumber; 27 import org.onosproject.net.PortNumber;
23 28
...@@ -74,7 +79,7 @@ public interface VirtualNetworkAdminService extends VirtualNetworkService { ...@@ -74,7 +79,7 @@ public interface VirtualNetworkAdminService extends VirtualNetworkService {
74 * 79 *
75 * @param networkId network identifier 80 * @param networkId network identifier
76 * @param deviceId device identifier 81 * @param deviceId device identifier
77 - * @return newly created device 82 + * @return newly created virtual device
78 * @throws org.onlab.util.ItemNotFoundException if no such network found 83 * @throws org.onlab.util.ItemNotFoundException if no such network found
79 */ 84 */
80 VirtualDevice createVirtualDevice(NetworkId networkId, DeviceId deviceId); 85 VirtualDevice createVirtualDevice(NetworkId networkId, DeviceId deviceId);
...@@ -88,6 +93,30 @@ public interface VirtualNetworkAdminService extends VirtualNetworkService { ...@@ -88,6 +93,30 @@ public interface VirtualNetworkAdminService extends VirtualNetworkService {
88 */ 93 */
89 void removeVirtualDevice(NetworkId networkId, DeviceId deviceId); 94 void removeVirtualDevice(NetworkId networkId, DeviceId deviceId);
90 95
96 + /**
97 + * Creates a new virtual host within the specified network. The host id
98 + * must be unique within the bounds of the network.
99 + *
100 + * @param networkId network identifier
101 + * @param hostId host identifier
102 + * @param mac mac address
103 + * @param vlan vlan identifier
104 + * @param location host location
105 + * @param ips set of ip addresses
106 + * @return newly created virtual host
107 + * @throws org.onlab.util.ItemNotFoundException if no such network found
108 + */
109 + VirtualHost createVirtualHost(NetworkId networkId, HostId hostId, MacAddress mac,
110 + VlanId vlan, HostLocation location, Set<IpAddress> ips);
111 +
112 + /**
113 + * Removes the specified virtual host.
114 + *
115 + * @param networkId network identifier
116 + * @param hostId host identifier
117 + * @throws org.onlab.util.ItemNotFoundException if no such network or host found
118 + */
119 + void removeVirtualHost(NetworkId networkId, HostId hostId);
91 120
92 /** 121 /**
93 * Creates a new virtual link within the specified network. 122 * Creates a new virtual link within the specified network.
......
...@@ -51,6 +51,15 @@ public interface VirtualNetworkService { ...@@ -51,6 +51,15 @@ public interface VirtualNetworkService {
51 Set<VirtualDevice> getVirtualDevices(NetworkId networkId); 51 Set<VirtualDevice> getVirtualDevices(NetworkId networkId);
52 52
53 /** 53 /**
54 + * Returns a collection of all virtual hosts in the specified network.
55 + *
56 + * @param networkId network identifier
57 + * @return collection of hosts
58 + * @throws org.onlab.util.ItemNotFoundException if no such network found
59 + */
60 + Set<VirtualHost> getVirtualHosts(NetworkId networkId);
61 +
62 + /**
54 * Returns collection of all virtual links in the specified network. 63 * Returns collection of all virtual links in the specified network.
55 * 64 *
56 * @param networkId network identifier 65 * @param networkId network identifier
......
...@@ -15,9 +15,14 @@ ...@@ -15,9 +15,14 @@
15 */ 15 */
16 package org.onosproject.incubator.net.virtual; 16 package org.onosproject.incubator.net.virtual;
17 17
18 +import org.onlab.packet.IpAddress;
19 +import org.onlab.packet.MacAddress;
20 +import org.onlab.packet.VlanId;
18 import org.onosproject.incubator.net.tunnel.TunnelId; 21 import org.onosproject.incubator.net.tunnel.TunnelId;
19 import org.onosproject.net.ConnectPoint; 22 import org.onosproject.net.ConnectPoint;
20 import org.onosproject.net.DeviceId; 23 import org.onosproject.net.DeviceId;
24 +import org.onosproject.net.HostId;
25 +import org.onosproject.net.HostLocation;
21 import org.onosproject.net.Link; 26 import org.onosproject.net.Link;
22 import org.onosproject.net.Port; 27 import org.onosproject.net.Port;
23 import org.onosproject.net.PortNumber; 28 import org.onosproject.net.PortNumber;
...@@ -77,7 +82,7 @@ public interface VirtualNetworkStore ...@@ -77,7 +82,7 @@ public interface VirtualNetworkStore
77 VirtualDevice addDevice(NetworkId networkId, DeviceId deviceId); 82 VirtualDevice addDevice(NetworkId networkId, DeviceId deviceId);
78 83
79 /** 84 /**
80 - * Renmoves the specified virtual device from the given network. 85 + * Removes the specified virtual device from the given network.
81 * 86 *
82 * @param networkId network identifier 87 * @param networkId network identifier
83 * @param deviceId device identifier 88 * @param deviceId device identifier
...@@ -85,6 +90,28 @@ public interface VirtualNetworkStore ...@@ -85,6 +90,28 @@ public interface VirtualNetworkStore
85 void removeDevice(NetworkId networkId, DeviceId deviceId); 90 void removeDevice(NetworkId networkId, DeviceId deviceId);
86 91
87 /** 92 /**
93 + * Adds a new virtual host to the store.
94 + *
95 + * @param networkId network identifier
96 + * @param hostId host identifier
97 + * @param mac mac address
98 + * @param vlan vlan identifier
99 + * @param location host location
100 + * @param ips set of ip addresses
101 + * @return the virtual host
102 + */
103 + VirtualHost addHost(NetworkId networkId, HostId hostId, MacAddress mac,
104 + VlanId vlan, HostLocation location, Set<IpAddress> ips);
105 +
106 + /**
107 + * Removes the specified virtual host from the store.
108 + *
109 + * @param networkId network identifier
110 + * @param hostId host identifier
111 + */
112 + void removeHost(NetworkId networkId, HostId hostId);
113 +
114 + /**
88 * Adds a new virtual link. 115 * Adds a new virtual link.
89 * 116 *
90 * @param networkId network identifier 117 * @param networkId network identifier
...@@ -161,6 +188,14 @@ public interface VirtualNetworkStore ...@@ -161,6 +188,14 @@ public interface VirtualNetworkStore
161 Set<VirtualDevice> getDevices(NetworkId networkId); 188 Set<VirtualDevice> getDevices(NetworkId networkId);
162 189
163 /** 190 /**
191 + * Returns the list of hosts in the specified virtual network.
192 + *
193 + * @param networkId network identifier
194 + * @return set of virtual hosts
195 + */
196 + Set<VirtualHost> getHosts(NetworkId networkId);
197 +
198 + /**
164 * Returns the list of virtual links in the specified virtual network. 199 * Returns the list of virtual links in the specified virtual network.
165 * 200 *
166 * @param networkId network identifier 201 * @param networkId network identifier
......
...@@ -18,16 +18,14 @@ package org.onosproject.incubator.net.virtual; ...@@ -18,16 +18,14 @@ package org.onosproject.incubator.net.virtual;
18 18
19 import com.google.common.testing.EqualsTester; 19 import com.google.common.testing.EqualsTester;
20 import org.junit.Test; 20 import org.junit.Test;
21 -import org.onosproject.net.DeviceId; 21 +import org.onosproject.net.TestDeviceParams;
22 22
23 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable; 23 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
24 24
25 /** 25 /**
26 * Test of the default virtual device model entity. 26 * Test of the default virtual device model entity.
27 */ 27 */
28 -public class DefaultVirtualDeviceTest { 28 +public class DefaultVirtualDeviceTest extends TestDeviceParams {
29 - final String deviceIdValue1 = "DEVICE_ID1";
30 - final String deviceIdValue2 = "DEVICE_ID2";
31 29
32 /** 30 /**
33 * Checks that the DefaultVirtualDevice class is immutable. 31 * Checks that the DefaultVirtualDevice class is immutable.
...@@ -40,13 +38,13 @@ public class DefaultVirtualDeviceTest { ...@@ -40,13 +38,13 @@ public class DefaultVirtualDeviceTest {
40 @Test 38 @Test
41 public void testEquality() { 39 public void testEquality() {
42 DefaultVirtualDevice device1 = 40 DefaultVirtualDevice device1 =
43 - new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue1)); 41 + new DefaultVirtualDevice(NetworkId.networkId(0), DID1);
44 DefaultVirtualDevice device2 = 42 DefaultVirtualDevice device2 =
45 - new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue1)); 43 + new DefaultVirtualDevice(NetworkId.networkId(0), DID1);
46 DefaultVirtualDevice device3 = 44 DefaultVirtualDevice device3 =
47 - new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue2)); 45 + new DefaultVirtualDevice(NetworkId.networkId(0), DID2);
48 DefaultVirtualDevice device4 = 46 DefaultVirtualDevice device4 =
49 - new DefaultVirtualDevice(NetworkId.networkId(1), DeviceId.deviceId(deviceIdValue1)); 47 + new DefaultVirtualDevice(NetworkId.networkId(1), DID1);
50 48
51 new EqualsTester().addEqualityGroup(device1, device2).addEqualityGroup(device3) 49 new EqualsTester().addEqualityGroup(device1, device2).addEqualityGroup(device3)
52 .addEqualityGroup(device4).testEquals(); 50 .addEqualityGroup(device4).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;
18 +
19 +import com.google.common.testing.EqualsTester;
20 +import org.junit.Test;
21 +import org.onosproject.net.TestDeviceParams;
22 +
23 +import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
24 +
25 +/**
26 + * Test of the default virtual host model entity.
27 + */
28 +public class DefaultVirtualHostTest extends TestDeviceParams {
29 +
30 + /**
31 + * Checks that the DefaultVirtualHost class is immutable.
32 + */
33 + @Test
34 + public void testImmutability() {
35 + assertThatClassIsImmutable(DefaultVirtualHost.class);
36 + }
37 +
38 + /**
39 + * Tests the DefaultVirtualHost equality method.
40 + */
41 + @Test
42 + public void testEquality() {
43 + DefaultVirtualHost host1 =
44 + new DefaultVirtualHost(NetworkId.networkId(0), HID1, MAC1, VLAN1, LOC1, IPSET1);
45 + DefaultVirtualHost host2 =
46 + new DefaultVirtualHost(NetworkId.networkId(0), HID1, MAC1, VLAN1, LOC1, IPSET1);
47 + DefaultVirtualHost host3 =
48 + new DefaultVirtualHost(NetworkId.networkId(0), HID2, MAC1, VLAN1, LOC1, IPSET1);
49 + DefaultVirtualHost host4 =
50 + new DefaultVirtualHost(NetworkId.networkId(1), HID2, MAC1, VLAN1, LOC1, IPSET1);
51 +
52 + new EqualsTester().addEqualityGroup(host1, host2).addEqualityGroup(host3)
53 + .addEqualityGroup(host4).testEquals();
54 + }
55 +}
...@@ -20,17 +20,15 @@ import com.google.common.testing.EqualsTester; ...@@ -20,17 +20,15 @@ import com.google.common.testing.EqualsTester;
20 import org.junit.Test; 20 import org.junit.Test;
21 import org.onosproject.incubator.net.tunnel.TunnelId; 21 import org.onosproject.incubator.net.tunnel.TunnelId;
22 import org.onosproject.net.ConnectPoint; 22 import org.onosproject.net.ConnectPoint;
23 -import org.onosproject.net.DeviceId;
24 import org.onosproject.net.PortNumber; 23 import org.onosproject.net.PortNumber;
24 +import org.onosproject.net.TestDeviceParams;
25 25
26 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable; 26 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
27 27
28 /** 28 /**
29 * Test of the default virtual link model entity. 29 * Test of the default virtual link model entity.
30 */ 30 */
31 -public class DefaultVirtualLinkTest { 31 +public class DefaultVirtualLinkTest extends TestDeviceParams {
32 - final String deviceIdValue1 = "DEVICE_ID1";
33 - final String deviceIdValue2 = "DEVICE_ID2";
34 32
35 /** 33 /**
36 * Checks that the DefaultVirtualLink class is immutable. 34 * Checks that the DefaultVirtualLink class is immutable.
...@@ -46,9 +44,9 @@ public class DefaultVirtualLinkTest { ...@@ -46,9 +44,9 @@ public class DefaultVirtualLinkTest {
46 @Test(expected = NullPointerException.class) 44 @Test(expected = NullPointerException.class)
47 public void testBuilderNullSrc() { 45 public void testBuilderNullSrc() {
48 DefaultVirtualDevice device1 = 46 DefaultVirtualDevice device1 =
49 - new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue1)); 47 + new DefaultVirtualDevice(NetworkId.networkId(0), DID1);
50 DefaultVirtualDevice device2 = 48 DefaultVirtualDevice device2 =
51 - new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue2)); 49 + new DefaultVirtualDevice(NetworkId.networkId(0), DID2);
52 ConnectPoint src = new ConnectPoint(device1.id(), PortNumber.portNumber(1)); 50 ConnectPoint src = new ConnectPoint(device1.id(), PortNumber.portNumber(1));
53 ConnectPoint dst = new ConnectPoint(device2.id(), PortNumber.portNumber(2)); 51 ConnectPoint dst = new ConnectPoint(device2.id(), PortNumber.portNumber(2));
54 52
...@@ -63,9 +61,9 @@ public class DefaultVirtualLinkTest { ...@@ -63,9 +61,9 @@ public class DefaultVirtualLinkTest {
63 @Test(expected = NullPointerException.class) 61 @Test(expected = NullPointerException.class)
64 public void testBuilderNullDst() { 62 public void testBuilderNullDst() {
65 DefaultVirtualDevice device1 = 63 DefaultVirtualDevice device1 =
66 - new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue1)); 64 + new DefaultVirtualDevice(NetworkId.networkId(0), DID1);
67 DefaultVirtualDevice device2 = 65 DefaultVirtualDevice device2 =
68 - new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue2)); 66 + new DefaultVirtualDevice(NetworkId.networkId(0), DID2);
69 ConnectPoint src = new ConnectPoint(device1.id(), PortNumber.portNumber(1)); 67 ConnectPoint src = new ConnectPoint(device1.id(), PortNumber.portNumber(1));
70 ConnectPoint dst = new ConnectPoint(device2.id(), PortNumber.portNumber(2)); 68 ConnectPoint dst = new ConnectPoint(device2.id(), PortNumber.portNumber(2));
71 69
...@@ -80,9 +78,9 @@ public class DefaultVirtualLinkTest { ...@@ -80,9 +78,9 @@ public class DefaultVirtualLinkTest {
80 @Test(expected = NullPointerException.class) 78 @Test(expected = NullPointerException.class)
81 public void testBuilderNullNetworkId() { 79 public void testBuilderNullNetworkId() {
82 DefaultVirtualDevice device1 = 80 DefaultVirtualDevice device1 =
83 - new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue1)); 81 + new DefaultVirtualDevice(NetworkId.networkId(0), DID1);
84 DefaultVirtualDevice device2 = 82 DefaultVirtualDevice device2 =
85 - new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue2)); 83 + new DefaultVirtualDevice(NetworkId.networkId(0), DID2);
86 ConnectPoint src = new ConnectPoint(device1.id(), PortNumber.portNumber(1)); 84 ConnectPoint src = new ConnectPoint(device1.id(), PortNumber.portNumber(1));
87 ConnectPoint dst = new ConnectPoint(device2.id(), PortNumber.portNumber(2)); 85 ConnectPoint dst = new ConnectPoint(device2.id(), PortNumber.portNumber(2));
88 86
...@@ -97,9 +95,9 @@ public class DefaultVirtualLinkTest { ...@@ -97,9 +95,9 @@ public class DefaultVirtualLinkTest {
97 @Test 95 @Test
98 public void testEquality() { 96 public void testEquality() {
99 DefaultVirtualDevice device1 = 97 DefaultVirtualDevice device1 =
100 - new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue1)); 98 + new DefaultVirtualDevice(NetworkId.networkId(0), DID1);
101 DefaultVirtualDevice device2 = 99 DefaultVirtualDevice device2 =
102 - new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue2)); 100 + new DefaultVirtualDevice(NetworkId.networkId(0), DID2);
103 ConnectPoint src = new ConnectPoint(device1.id(), PortNumber.portNumber(1)); 101 ConnectPoint src = new ConnectPoint(device1.id(), PortNumber.portNumber(1));
104 ConnectPoint dst = new ConnectPoint(device2.id(), PortNumber.portNumber(2)); 102 ConnectPoint dst = new ConnectPoint(device2.id(), PortNumber.portNumber(2));
105 103
......
...@@ -19,18 +19,16 @@ package org.onosproject.incubator.net.virtual; ...@@ -19,18 +19,16 @@ package org.onosproject.incubator.net.virtual;
19 import com.google.common.testing.EqualsTester; 19 import com.google.common.testing.EqualsTester;
20 import org.junit.Test; 20 import org.junit.Test;
21 import org.onosproject.net.DefaultPort; 21 import org.onosproject.net.DefaultPort;
22 -import org.onosproject.net.DeviceId;
23 import org.onosproject.net.Port; 22 import org.onosproject.net.Port;
24 import org.onosproject.net.PortNumber; 23 import org.onosproject.net.PortNumber;
24 +import org.onosproject.net.TestDeviceParams;
25 25
26 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable; 26 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
27 27
28 /** 28 /**
29 * Test of the default virtual port model entity. 29 * Test of the default virtual port model entity.
30 */ 30 */
31 -public class DefaultVirtualPortTest { 31 +public class DefaultVirtualPortTest extends TestDeviceParams {
32 - final String deviceIdValue1 = "DEVICE_ID1";
33 - final String deviceIdValue2 = "DEVICE_ID2";
34 32
35 /** 33 /**
36 * Checks that the DefaultVirtualPort class is immutable. 34 * Checks that the DefaultVirtualPort class is immutable.
...@@ -43,9 +41,9 @@ public class DefaultVirtualPortTest { ...@@ -43,9 +41,9 @@ public class DefaultVirtualPortTest {
43 @Test 41 @Test
44 public void testEquality() { 42 public void testEquality() {
45 DefaultVirtualDevice device1 = 43 DefaultVirtualDevice device1 =
46 - new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue1)); 44 + new DefaultVirtualDevice(NetworkId.networkId(0), DID1);
47 DefaultVirtualDevice device2 = 45 DefaultVirtualDevice device2 =
48 - new DefaultVirtualDevice(NetworkId.networkId(0), DeviceId.deviceId(deviceIdValue2)); 46 + new DefaultVirtualDevice(NetworkId.networkId(0), DID2);
49 47
50 Port portA = new DefaultPort(device1, PortNumber.portNumber(1), true); 48 Port portA = new DefaultPort(device1, PortNumber.portNumber(1), true);
51 Port portB = new DefaultPort(device1, PortNumber.portNumber(2), true); 49 Port portB = new DefaultPort(device1, PortNumber.portNumber(2), true);
......
...@@ -22,10 +22,14 @@ import org.apache.felix.scr.annotations.Deactivate; ...@@ -22,10 +22,14 @@ import org.apache.felix.scr.annotations.Deactivate;
22 import org.apache.felix.scr.annotations.Reference; 22 import org.apache.felix.scr.annotations.Reference;
23 import org.apache.felix.scr.annotations.ReferenceCardinality; 23 import org.apache.felix.scr.annotations.ReferenceCardinality;
24 import org.apache.felix.scr.annotations.Service; 24 import org.apache.felix.scr.annotations.Service;
25 +import org.onlab.packet.IpAddress;
26 +import org.onlab.packet.MacAddress;
27 +import org.onlab.packet.VlanId;
25 import org.onosproject.incubator.net.tunnel.TunnelId; 28 import org.onosproject.incubator.net.tunnel.TunnelId;
26 import org.onosproject.incubator.net.virtual.NetworkId; 29 import org.onosproject.incubator.net.virtual.NetworkId;
27 import org.onosproject.incubator.net.virtual.TenantId; 30 import org.onosproject.incubator.net.virtual.TenantId;
28 import org.onosproject.incubator.net.virtual.VirtualDevice; 31 import org.onosproject.incubator.net.virtual.VirtualDevice;
32 +import org.onosproject.incubator.net.virtual.VirtualHost;
29 import org.onosproject.incubator.net.virtual.VirtualLink; 33 import org.onosproject.incubator.net.virtual.VirtualLink;
30 import org.onosproject.incubator.net.virtual.VirtualNetwork; 34 import org.onosproject.incubator.net.virtual.VirtualNetwork;
31 import org.onosproject.incubator.net.virtual.VirtualNetworkAdminService; 35 import org.onosproject.incubator.net.virtual.VirtualNetworkAdminService;
...@@ -40,6 +44,8 @@ import org.onosproject.incubator.net.virtual.VirtualNetworkStoreDelegate; ...@@ -40,6 +44,8 @@ import org.onosproject.incubator.net.virtual.VirtualNetworkStoreDelegate;
40 import org.onosproject.incubator.net.virtual.VirtualPort; 44 import org.onosproject.incubator.net.virtual.VirtualPort;
41 import org.onosproject.net.ConnectPoint; 45 import org.onosproject.net.ConnectPoint;
42 import org.onosproject.net.DeviceId; 46 import org.onosproject.net.DeviceId;
47 +import org.onosproject.net.HostId;
48 +import org.onosproject.net.HostLocation;
43 import org.onosproject.net.Link; 49 import org.onosproject.net.Link;
44 import org.onosproject.net.Port; 50 import org.onosproject.net.Port;
45 import org.onosproject.net.PortNumber; 51 import org.onosproject.net.PortNumber;
...@@ -141,6 +147,21 @@ public class VirtualNetworkManager ...@@ -141,6 +147,21 @@ public class VirtualNetworkManager
141 } 147 }
142 148
143 @Override 149 @Override
150 + public VirtualHost createVirtualHost(NetworkId networkId, HostId hostId, MacAddress mac,
151 + VlanId vlan, HostLocation location, Set<IpAddress> ips) {
152 + checkNotNull(networkId, NETWORK_NULL);
153 + checkNotNull(hostId, DEVICE_NULL);
154 + return store.addHost(networkId, hostId, mac, vlan, location, ips);
155 + }
156 +
157 + @Override
158 + public void removeVirtualHost(NetworkId networkId, HostId hostId) {
159 + checkNotNull(networkId, NETWORK_NULL);
160 + checkNotNull(hostId, DEVICE_NULL);
161 + store.removeHost(networkId, hostId);
162 + }
163 +
164 + @Override
144 public VirtualLink createVirtualLink(NetworkId networkId, 165 public VirtualLink createVirtualLink(NetworkId networkId,
145 ConnectPoint src, ConnectPoint dst) { 166 ConnectPoint src, ConnectPoint dst) {
146 checkNotNull(networkId, NETWORK_NULL); 167 checkNotNull(networkId, NETWORK_NULL);
...@@ -248,6 +269,12 @@ public class VirtualNetworkManager ...@@ -248,6 +269,12 @@ public class VirtualNetworkManager
248 } 269 }
249 270
250 @Override 271 @Override
272 + public Set<VirtualHost> getVirtualHosts(NetworkId networkId) {
273 + checkNotNull(networkId, NETWORK_NULL);
274 + return store.getHosts(networkId);
275 + }
276 +
277 + @Override
251 public Set<VirtualLink> getVirtualLinks(NetworkId networkId) { 278 public Set<VirtualLink> getVirtualLinks(NetworkId networkId) {
252 checkNotNull(networkId, NETWORK_NULL); 279 checkNotNull(networkId, NETWORK_NULL);
253 return store.getLinks(networkId); 280 return store.getLinks(networkId);
......
...@@ -31,6 +31,7 @@ import org.onosproject.incubator.net.virtual.DefaultVirtualNetwork; ...@@ -31,6 +31,7 @@ import org.onosproject.incubator.net.virtual.DefaultVirtualNetwork;
31 import org.onosproject.incubator.net.virtual.NetworkId; 31 import org.onosproject.incubator.net.virtual.NetworkId;
32 import org.onosproject.incubator.net.virtual.TenantId; 32 import org.onosproject.incubator.net.virtual.TenantId;
33 import org.onosproject.incubator.net.virtual.VirtualDevice; 33 import org.onosproject.incubator.net.virtual.VirtualDevice;
34 +import org.onosproject.incubator.net.virtual.VirtualHost;
34 import org.onosproject.incubator.net.virtual.VirtualLink; 35 import org.onosproject.incubator.net.virtual.VirtualLink;
35 import org.onosproject.incubator.net.virtual.VirtualNetwork; 36 import org.onosproject.incubator.net.virtual.VirtualNetwork;
36 import org.onosproject.incubator.net.virtual.VirtualNetworkEvent; 37 import org.onosproject.incubator.net.virtual.VirtualNetworkEvent;
...@@ -44,6 +45,7 @@ import org.onosproject.net.DeviceId; ...@@ -44,6 +45,7 @@ import org.onosproject.net.DeviceId;
44 import org.onosproject.net.NetTestTools; 45 import org.onosproject.net.NetTestTools;
45 import org.onosproject.net.Port; 46 import org.onosproject.net.Port;
46 import org.onosproject.net.PortNumber; 47 import org.onosproject.net.PortNumber;
48 +import org.onosproject.net.TestDeviceParams;
47 import org.onosproject.store.service.TestStorageService; 49 import org.onosproject.store.service.TestStorageService;
48 50
49 import java.util.Collection; 51 import java.util.Collection;
...@@ -56,17 +58,15 @@ import static org.junit.Assert.*; ...@@ -56,17 +58,15 @@ import static org.junit.Assert.*;
56 /** 58 /**
57 * Junit tests for VirtualNetworkManager. 59 * Junit tests for VirtualNetworkManager.
58 */ 60 */
59 -public class VirtualNetworkManagerTest { 61 +public class VirtualNetworkManagerTest extends TestDeviceParams {
60 private final String tenantIdValue1 = "TENANT_ID1"; 62 private final String tenantIdValue1 = "TENANT_ID1";
61 private final String tenantIdValue2 = "TENANT_ID2"; 63 private final String tenantIdValue2 = "TENANT_ID2";
62 - private final String deviceIdValue1 = "DEVICE_ID1";
63 - private final String deviceIdValue2 = "DEVICE_ID2";
64 64
65 private VirtualNetworkManager manager; 65 private VirtualNetworkManager manager;
66 private VirtualNetworkService virtualNetworkManagerService; 66 private VirtualNetworkService virtualNetworkManagerService;
67 private DistributedVirtualNetworkStore virtualNetworkManagerStore; 67 private DistributedVirtualNetworkStore virtualNetworkManagerStore;
68 private CoreService coreService; 68 private CoreService coreService;
69 - protected TestListener listener = new TestListener(); 69 + private TestListener listener = new TestListener();
70 70
71 @Before 71 @Before
72 public void setUp() throws Exception { 72 public void setUp() throws Exception {
...@@ -84,7 +84,6 @@ public class VirtualNetworkManagerTest { ...@@ -84,7 +84,6 @@ public class VirtualNetworkManagerTest {
84 NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher()); 84 NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
85 manager.activate(); 85 manager.activate();
86 virtualNetworkManagerService = manager; 86 virtualNetworkManagerService = manager;
87 -
88 } 87 }
89 88
90 @After 89 @After
...@@ -191,7 +190,7 @@ public class VirtualNetworkManagerTest { ...@@ -191,7 +190,7 @@ public class VirtualNetworkManagerTest {
191 manager.registerTenantId(TenantId.tenantId(tenantIdValue1)); 190 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
192 VirtualNetwork virtualNetwork = new DefaultVirtualNetwork(NetworkId.NONE, TenantId.tenantId(tenantIdValue1)); 191 VirtualNetwork virtualNetwork = new DefaultVirtualNetwork(NetworkId.NONE, TenantId.tenantId(tenantIdValue1));
193 192
194 - manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue1)); 193 + manager.createVirtualDevice(virtualNetwork.id(), DID1);
195 } 194 }
196 195
197 /** 196 /**
...@@ -202,8 +201,8 @@ public class VirtualNetworkManagerTest { ...@@ -202,8 +201,8 @@ public class VirtualNetworkManagerTest {
202 manager.registerTenantId(TenantId.tenantId(tenantIdValue1)); 201 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
203 VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1)); 202 VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
204 VirtualNetwork virtualNetwork2 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1)); 203 VirtualNetwork virtualNetwork2 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
205 - manager.createVirtualDevice(virtualNetwork1.id(), DeviceId.deviceId(deviceIdValue1)); 204 + manager.createVirtualDevice(virtualNetwork1.id(), DID1);
206 - manager.createVirtualDevice(virtualNetwork2.id(), DeviceId.deviceId(deviceIdValue2)); 205 + manager.createVirtualDevice(virtualNetwork2.id(), DID2);
207 206
208 Set<VirtualDevice> virtualDevices1 = manager.getVirtualDevices(virtualNetwork1.id()); 207 Set<VirtualDevice> virtualDevices1 = manager.getVirtualDevices(virtualNetwork1.id());
209 assertNotNull("The virtual device set should not be null", virtualDevices1); 208 assertNotNull("The virtual device set should not be null", virtualDevices1);
...@@ -222,8 +221,7 @@ public class VirtualNetworkManagerTest { ...@@ -222,8 +221,7 @@ public class VirtualNetworkManagerTest {
222 assertTrue("The virtual device set should be empty.", virtualDevices1.isEmpty()); 221 assertTrue("The virtual device set should be empty.", virtualDevices1.isEmpty());
223 222
224 // Add/remove the virtual device again. 223 // Add/remove the virtual device again.
225 - VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork1.id(), 224 + VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork1.id(), DID1);
226 - DeviceId.deviceId(deviceIdValue1));
227 manager.removeVirtualDevice(virtualDevice.networkId(), virtualDevice.id()); 225 manager.removeVirtualDevice(virtualDevice.networkId(), virtualDevice.id());
228 virtualDevices1 = manager.getVirtualDevices(virtualNetwork1.id()); 226 virtualDevices1 = manager.getVirtualDevices(virtualNetwork1.id());
229 assertTrue("The virtual device set should be empty.", virtualDevices1.isEmpty()); 227 assertTrue("The virtual device set should be empty.", virtualDevices1.isEmpty());
...@@ -234,6 +232,62 @@ public class VirtualNetworkManagerTest { ...@@ -234,6 +232,62 @@ public class VirtualNetworkManagerTest {
234 } 232 }
235 233
236 /** 234 /**
235 + * Tests adding a null virtual host.
236 + */
237 + @Test(expected = NullPointerException.class)
238 + public void testCreateNullVirtualHost() {
239 + manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
240 + VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
241 +
242 + manager.createVirtualHost(virtualNetwork.id(), null, null, null, null, null);
243 + }
244 +
245 + /**
246 + * Tests adding a virtual host where no virtual network exists.
247 + */
248 + @Test(expected = IllegalStateException.class)
249 + public void testCreateVirtualHostWithNoNetwork() {
250 + manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
251 + VirtualNetwork virtualNetwork = new DefaultVirtualNetwork(NetworkId.NONE, TenantId.tenantId(tenantIdValue1));
252 +
253 + manager.createVirtualHost(virtualNetwork.id(), HID1, null, null, null, null);
254 + }
255 +
256 + /**
257 + * Tests add and remove of virtual hosts.
258 + */
259 + @Test
260 + public void testAddRemoveVirtualHost() {
261 + manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
262 + VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
263 + VirtualNetwork virtualNetwork2 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
264 + manager.createVirtualHost(virtualNetwork1.id(), HID1, MAC1, VLAN1, LOC1, IPSET1);
265 + manager.createVirtualHost(virtualNetwork2.id(), HID2, MAC2, VLAN2, LOC2, IPSET2);
266 +
267 + Set<VirtualHost> virtualHosts1 = manager.getVirtualHosts(virtualNetwork1.id());
268 + assertNotNull("The virtual host set should not be null", virtualHosts1);
269 + assertEquals("The virtual host set size did not match.", 1, virtualHosts1.size());
270 +
271 + Set<VirtualHost> virtualHosts2 = manager.getVirtualHosts(virtualNetwork2.id());
272 + assertNotNull("The virtual host set should not be null", virtualHosts2);
273 + assertEquals("The virtual host set size did not match.", 1, virtualHosts2.size());
274 +
275 + for (VirtualHost virtualHost : virtualHosts1) {
276 + manager.removeVirtualHost(virtualNetwork1.id(), virtualHost.id());
277 + // attempt to remove the same virtual host again.
278 + manager.removeVirtualHost(virtualNetwork1.id(), virtualHost.id());
279 + }
280 + virtualHosts1 = manager.getVirtualHosts(virtualNetwork1.id());
281 + assertTrue("The virtual host set should be empty.", virtualHosts1.isEmpty());
282 +
283 + // Add/remove the virtual host again.
284 + VirtualHost virtualHost = manager.createVirtualHost(virtualNetwork1.id(), HID1, MAC1, VLAN1, LOC1, IPSET1);
285 + manager.removeVirtualHost(virtualHost.networkId(), virtualHost.id());
286 + virtualHosts1 = manager.getVirtualHosts(virtualNetwork1.id());
287 + assertTrue("The virtual host set should be empty.", virtualHosts1.isEmpty());
288 + }
289 +
290 + /**
237 * Tests add and remove of virtual links. 291 * Tests add and remove of virtual links.
238 */ 292 */
239 @Test 293 @Test
...@@ -241,9 +295,9 @@ public class VirtualNetworkManagerTest { ...@@ -241,9 +295,9 @@ public class VirtualNetworkManagerTest {
241 manager.registerTenantId(TenantId.tenantId(tenantIdValue1)); 295 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
242 VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1)); 296 VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
243 VirtualDevice srcVirtualDevice = 297 VirtualDevice srcVirtualDevice =
244 - manager.createVirtualDevice(virtualNetwork1.id(), DeviceId.deviceId(deviceIdValue1)); 298 + manager.createVirtualDevice(virtualNetwork1.id(), DID1);
245 VirtualDevice dstVirtualDevice = 299 VirtualDevice dstVirtualDevice =
246 - manager.createVirtualDevice(virtualNetwork1.id(), DeviceId.deviceId(deviceIdValue2)); 300 + manager.createVirtualDevice(virtualNetwork1.id(), DID2);
247 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1)); 301 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
248 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2)); 302 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
249 manager.createVirtualLink(virtualNetwork1.id(), src, dst); 303 manager.createVirtualLink(virtualNetwork1.id(), src, dst);
...@@ -276,9 +330,9 @@ public class VirtualNetworkManagerTest { ...@@ -276,9 +330,9 @@ public class VirtualNetworkManagerTest {
276 manager.registerTenantId(TenantId.tenantId(tenantIdValue1)); 330 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
277 VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1)); 331 VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
278 VirtualDevice srcVirtualDevice = 332 VirtualDevice srcVirtualDevice =
279 - manager.createVirtualDevice(virtualNetwork1.id(), DeviceId.deviceId(deviceIdValue1)); 333 + manager.createVirtualDevice(virtualNetwork1.id(), DID1);
280 VirtualDevice dstVirtualDevice = 334 VirtualDevice dstVirtualDevice =
281 - manager.createVirtualDevice(virtualNetwork1.id(), DeviceId.deviceId(deviceIdValue2)); 335 + manager.createVirtualDevice(virtualNetwork1.id(), DID2);
282 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1)); 336 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
283 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2)); 337 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
284 manager.createVirtualLink(virtualNetwork1.id(), src, dst); 338 manager.createVirtualLink(virtualNetwork1.id(), src, dst);
...@@ -293,7 +347,7 @@ public class VirtualNetworkManagerTest { ...@@ -293,7 +347,7 @@ public class VirtualNetworkManagerTest {
293 manager.registerTenantId(TenantId.tenantId(tenantIdValue1)); 347 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
294 VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1)); 348 VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
295 VirtualDevice virtualDevice = 349 VirtualDevice virtualDevice =
296 - manager.createVirtualDevice(virtualNetwork1.id(), DeviceId.deviceId(deviceIdValue1)); 350 + manager.createVirtualDevice(virtualNetwork1.id(), DID1);
297 Port port = new DefaultPort(virtualDevice, PortNumber.portNumber(1), true); 351 Port port = new DefaultPort(virtualDevice, PortNumber.portNumber(1), true);
298 352
299 manager.createVirtualPort(virtualNetwork1.id(), virtualDevice.id(), PortNumber.portNumber(1), port); 353 manager.createVirtualPort(virtualNetwork1.id(), virtualDevice.id(), PortNumber.portNumber(1), port);
...@@ -345,7 +399,7 @@ public class VirtualNetworkManagerTest { ...@@ -345,7 +399,7 @@ public class VirtualNetworkManagerTest {
345 */ 399 */
346 private static class TestListener implements VirtualNetworkListener { 400 private static class TestListener implements VirtualNetworkListener {
347 401
348 - protected List<VirtualNetworkEvent> events = Lists.newArrayList(); 402 + private List<VirtualNetworkEvent> events = Lists.newArrayList();
349 403
350 @Override 404 @Override
351 public void event(VirtualNetworkEvent event) { 405 public void event(VirtualNetworkEvent event) {
......
...@@ -23,17 +23,22 @@ import org.apache.felix.scr.annotations.Deactivate; ...@@ -23,17 +23,22 @@ import org.apache.felix.scr.annotations.Deactivate;
23 import org.apache.felix.scr.annotations.Reference; 23 import org.apache.felix.scr.annotations.Reference;
24 import org.apache.felix.scr.annotations.ReferenceCardinality; 24 import org.apache.felix.scr.annotations.ReferenceCardinality;
25 import org.apache.felix.scr.annotations.Service; 25 import org.apache.felix.scr.annotations.Service;
26 +import org.onlab.packet.IpAddress;
27 +import org.onlab.packet.MacAddress;
28 +import org.onlab.packet.VlanId;
26 import org.onlab.util.KryoNamespace; 29 import org.onlab.util.KryoNamespace;
27 import org.onosproject.core.CoreService; 30 import org.onosproject.core.CoreService;
28 import org.onosproject.core.IdGenerator; 31 import org.onosproject.core.IdGenerator;
29 import org.onosproject.incubator.net.tunnel.TunnelId; 32 import org.onosproject.incubator.net.tunnel.TunnelId;
30 import org.onosproject.incubator.net.virtual.DefaultVirtualDevice; 33 import org.onosproject.incubator.net.virtual.DefaultVirtualDevice;
34 +import org.onosproject.incubator.net.virtual.DefaultVirtualHost;
31 import org.onosproject.incubator.net.virtual.DefaultVirtualLink; 35 import org.onosproject.incubator.net.virtual.DefaultVirtualLink;
32 import org.onosproject.incubator.net.virtual.DefaultVirtualNetwork; 36 import org.onosproject.incubator.net.virtual.DefaultVirtualNetwork;
33 import org.onosproject.incubator.net.virtual.DefaultVirtualPort; 37 import org.onosproject.incubator.net.virtual.DefaultVirtualPort;
34 import org.onosproject.incubator.net.virtual.NetworkId; 38 import org.onosproject.incubator.net.virtual.NetworkId;
35 import org.onosproject.incubator.net.virtual.TenantId; 39 import org.onosproject.incubator.net.virtual.TenantId;
36 import org.onosproject.incubator.net.virtual.VirtualDevice; 40 import org.onosproject.incubator.net.virtual.VirtualDevice;
41 +import org.onosproject.incubator.net.virtual.VirtualHost;
37 import org.onosproject.incubator.net.virtual.VirtualLink; 42 import org.onosproject.incubator.net.virtual.VirtualLink;
38 import org.onosproject.incubator.net.virtual.VirtualNetwork; 43 import org.onosproject.incubator.net.virtual.VirtualNetwork;
39 import org.onosproject.incubator.net.virtual.VirtualNetworkEvent; 44 import org.onosproject.incubator.net.virtual.VirtualNetworkEvent;
...@@ -44,6 +49,8 @@ import org.onosproject.incubator.net.virtual.VirtualPort; ...@@ -44,6 +49,8 @@ import org.onosproject.incubator.net.virtual.VirtualPort;
44 import org.onosproject.net.ConnectPoint; 49 import org.onosproject.net.ConnectPoint;
45 import org.onosproject.net.Device; 50 import org.onosproject.net.Device;
46 import org.onosproject.net.DeviceId; 51 import org.onosproject.net.DeviceId;
52 +import org.onosproject.net.HostId;
53 +import org.onosproject.net.HostLocation;
47 import org.onosproject.net.Link; 54 import org.onosproject.net.Link;
48 import org.onosproject.net.Port; 55 import org.onosproject.net.Port;
49 import org.onosproject.net.PortNumber; 56 import org.onosproject.net.PortNumber;
...@@ -111,6 +118,14 @@ public class DistributedVirtualNetworkStore ...@@ -111,6 +118,14 @@ public class DistributedVirtualNetworkStore
111 private ConsistentMap<NetworkId, Set<DeviceId>> networkIdDeviceIdSetConsistentMap; 118 private ConsistentMap<NetworkId, Set<DeviceId>> networkIdDeviceIdSetConsistentMap;
112 private Map<NetworkId, Set<DeviceId>> networkIdDeviceIdSetMap; 119 private Map<NetworkId, Set<DeviceId>> networkIdDeviceIdSetMap;
113 120
121 + // Track virtual hosts by host Id
122 + private ConsistentMap<HostId, VirtualHost> hostIdVirtualHostConsistentMap;
123 + private Map<HostId, VirtualHost> hostIdVirtualHostMap;
124 +
125 + // Track host IDs by network Id
126 + private ConsistentMap<NetworkId, Set<HostId>> networkIdHostIdSetConsistentMap;
127 + private Map<NetworkId, Set<HostId>> networkIdHostIdSetMap;
128 +
114 // Track virtual links by network Id 129 // Track virtual links by network Id
115 private ConsistentMap<NetworkId, Set<VirtualLink>> networkIdVirtualLinkSetConsistentMap; 130 private ConsistentMap<NetworkId, Set<VirtualLink>> networkIdVirtualLinkSetConsistentMap;
116 private Map<NetworkId, Set<VirtualLink>> networkIdVirtualLinkSetMap; 131 private Map<NetworkId, Set<VirtualLink>> networkIdVirtualLinkSetMap;
...@@ -127,6 +142,8 @@ public class DistributedVirtualNetworkStore ...@@ -127,6 +142,8 @@ public class DistributedVirtualNetworkStore
127 .register(DefaultVirtualNetwork.class) 142 .register(DefaultVirtualNetwork.class)
128 .register(VirtualDevice.class) 143 .register(VirtualDevice.class)
129 .register(DefaultVirtualDevice.class) 144 .register(DefaultVirtualDevice.class)
145 + .register(VirtualHost.class)
146 + .register(DefaultVirtualHost.class)
130 .register(VirtualLink.class) 147 .register(VirtualLink.class)
131 .register(DefaultVirtualLink.class) 148 .register(DefaultVirtualLink.class)
132 .register(VirtualPort.class) 149 .register(VirtualPort.class)
...@@ -180,6 +197,20 @@ public class DistributedVirtualNetworkStore ...@@ -180,6 +197,20 @@ public class DistributedVirtualNetworkStore
180 .build(); 197 .build();
181 networkIdDeviceIdSetMap = networkIdDeviceIdSetConsistentMap.asJavaMap(); 198 networkIdDeviceIdSetMap = networkIdDeviceIdSetConsistentMap.asJavaMap();
182 199
200 + hostIdVirtualHostConsistentMap = storageService.<HostId, VirtualHost>consistentMapBuilder()
201 + .withSerializer(SERIALIZER)
202 + .withName("onos-hostId-virtualhost")
203 + .withRelaxedReadConsistency()
204 + .build();
205 + hostIdVirtualHostMap = hostIdVirtualHostConsistentMap.asJavaMap();
206 +
207 + networkIdHostIdSetConsistentMap = storageService.<NetworkId, Set<HostId>>consistentMapBuilder()
208 + .withSerializer(SERIALIZER)
209 + .withName("onos-networkId-hostIds")
210 + .withRelaxedReadConsistency()
211 + .build();
212 + networkIdHostIdSetMap = networkIdHostIdSetConsistentMap.asJavaMap();
213 +
183 networkIdVirtualLinkSetConsistentMap = storageService.<NetworkId, Set<VirtualLink>>consistentMapBuilder() 214 networkIdVirtualLinkSetConsistentMap = storageService.<NetworkId, Set<VirtualLink>>consistentMapBuilder()
184 .withSerializer(SERIALIZER) 215 .withSerializer(SERIALIZER)
185 .withName("onos-networkId-virtuallinks") 216 .withName("onos-networkId-virtuallinks")
...@@ -342,6 +373,48 @@ public class DistributedVirtualNetworkStore ...@@ -342,6 +373,48 @@ public class DistributedVirtualNetworkStore
342 373
343 deviceIdVirtualDeviceMap.remove(deviceId); 374 deviceIdVirtualDeviceMap.remove(deviceId);
344 } 375 }
376 + //TODO remove virtual links and ports when removing the virtual device
377 + }
378 +
379 + @Override
380 + public VirtualHost addHost(NetworkId networkId, HostId hostId, MacAddress mac,
381 + VlanId vlan, HostLocation location, Set<IpAddress> ips) {
382 + checkState(networkExists(networkId), "The network has not been added.");
383 + Set<HostId> hostIdSet = networkIdHostIdSetMap.get(networkId);
384 + if (hostIdSet == null) {
385 + hostIdSet = new HashSet<>();
386 + }
387 + VirtualHost virtualhost = new DefaultVirtualHost(networkId, hostId, mac, vlan, location, ips);
388 + //TODO update both maps in one transaction.
389 + hostIdVirtualHostMap.put(hostId, virtualhost);
390 + hostIdSet.add(hostId);
391 + networkIdHostIdSetMap.put(networkId, hostIdSet);
392 + return virtualhost;
393 + }
394 +
395 + @Override
396 + public void removeHost(NetworkId networkId, HostId hostId) {
397 + checkState(networkExists(networkId), "The network has not been added.");
398 + //TODO update both maps in one transaction.
399 +
400 + Set<HostId> hostIdSet = new HashSet<>();
401 + networkIdHostIdSetMap.get(networkId).forEach(hostId1 -> {
402 + if (hostId1.equals(hostId)) {
403 + hostIdSet.add(hostId1);
404 + }
405 + });
406 +
407 + if (hostIdSet != null) {
408 + networkIdHostIdSetMap.compute(networkId, (id, existingHostIds) -> {
409 + if (existingHostIds == null || existingHostIds.isEmpty()) {
410 + return new HashSet<>();
411 + } else {
412 + return new HashSet<>(Sets.difference(existingHostIds, hostIdSet));
413 + }
414 + });
415 +
416 + hostIdVirtualHostMap.remove(hostId);
417 + }
345 } 418 }
346 419
347 @Override 420 @Override
...@@ -476,6 +549,17 @@ public class DistributedVirtualNetworkStore ...@@ -476,6 +549,17 @@ public class DistributedVirtualNetworkStore
476 } 549 }
477 550
478 @Override 551 @Override
552 + public Set<VirtualHost> getHosts(NetworkId networkId) {
553 + checkState(networkExists(networkId), "The network has not been added.");
554 + Set<HostId> hostIdSet = networkIdHostIdSetMap.get(networkId);
555 + Set<VirtualHost> virtualHostSet = new HashSet<>();
556 + if (hostIdSet != null) {
557 + hostIdSet.forEach(hostId -> virtualHostSet.add(hostIdVirtualHostMap.get(hostId)));
558 + }
559 + return ImmutableSet.copyOf(virtualHostSet);
560 + }
561 +
562 + @Override
479 public Set<VirtualLink> getLinks(NetworkId networkId) { 563 public Set<VirtualLink> getLinks(NetworkId networkId) {
480 checkState(networkExists(networkId), "The network has not been added."); 564 checkState(networkExists(networkId), "The network has not been added.");
481 Set<VirtualLink> virtualLinkSet = networkIdVirtualLinkSetMap.get(networkId); 565 Set<VirtualLink> virtualLinkSet = networkIdVirtualLinkSetMap.get(networkId);
......