[ONOS-5833] (vCore) Refactor vnet services
to enable event delivery mechanism
Changes
1. Abstact Vnet Listener Manager is added
2. Refactor Vnet services to use it
Change-Id: I178342bfc882c0739f216960358a281903e1385a
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkDeviceManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkDeviceManager.java
index 4b9221e..5f8f433 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkDeviceManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkDeviceManager.java
@@ -17,12 +17,11 @@
package org.onosproject.incubator.net.virtual.impl;
import com.google.common.collect.ImmutableList;
-import org.onosproject.event.AbstractListenerManager;
+import org.onosproject.incubator.net.virtual.NetworkId;
import org.onosproject.incubator.net.virtual.VirtualDevice;
-import org.onosproject.incubator.net.virtual.VirtualNetwork;
import org.onosproject.incubator.net.virtual.VirtualNetworkService;
import org.onosproject.incubator.net.virtual.VirtualPort;
-import org.onosproject.incubator.net.virtual.VnetService;
+import org.onosproject.incubator.net.virtual.event.AbstractVirtualListenerManager;
import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
import org.onosproject.net.MastershipRole;
@@ -43,45 +42,39 @@
* Device service implementation built on the virtual network service.
*/
public class VirtualNetworkDeviceManager
- extends AbstractListenerManager<DeviceEvent, DeviceListener>
- implements DeviceService, VnetService {
+ extends AbstractVirtualListenerManager<DeviceEvent, DeviceListener>
+ implements DeviceService {
- private static final String NETWORK_NULL = "Network ID cannot be null";
private static final String TYPE_NULL = "Type cannot be null";
private static final String DEVICE_NULL = "Device cannot be null";
private static final String PORT_NUMBER_NULL = "PortNumber cannot be null";
- private final VirtualNetwork network;
- private final VirtualNetworkService manager;
-
/**
* Creates a new VirtualNetworkDeviceService object.
*
* @param virtualNetworkManager virtual network manager service
- * @param network virtual network
+ * @param networkId a virtual network identifier
*/
public VirtualNetworkDeviceManager(VirtualNetworkService virtualNetworkManager,
- VirtualNetwork network) {
- checkNotNull(network, NETWORK_NULL);
- this.network = network;
- this.manager = virtualNetworkManager;
+ NetworkId networkId) {
+ super(virtualNetworkManager, networkId);
}
@Override
public int getDeviceCount() {
- return manager.getVirtualDevices(this.network.id()).size();
+ return manager.getVirtualDevices(this.networkId).size();
}
@Override
public Iterable<Device> getDevices() {
return manager.getVirtualDevices(
- this.network.id()).stream().collect(Collectors.toSet());
+ this.networkId).stream().collect(Collectors.toSet());
}
@Override
public Iterable<Device> getDevices(Device.Type type) {
checkNotNull(type, TYPE_NULL);
- return manager.getVirtualDevices(this.network.id())
+ return manager.getVirtualDevices(this.networkId)
.stream()
.filter(device -> type.equals(device.type()))
.collect(Collectors.toSet());
@@ -101,7 +94,7 @@
public Device getDevice(DeviceId deviceId) {
checkNotNull(deviceId, DEVICE_NULL);
Optional<VirtualDevice> foundDevice =
- manager.getVirtualDevices(this.network.id())
+ manager.getVirtualDevices(this.networkId)
.stream()
.filter(device -> deviceId.equals(device.id()))
.findFirst();
@@ -121,7 +114,7 @@
@Override
public List<Port> getPorts(DeviceId deviceId) {
checkNotNull(deviceId, DEVICE_NULL);
- return manager.getVirtualPorts(this.network.id(), deviceId)
+ return manager.getVirtualPorts(this.networkId, deviceId)
.stream()
.collect(Collectors.toList());
}
@@ -163,7 +156,7 @@
checkNotNull(deviceId, DEVICE_NULL);
Optional<VirtualPort> foundPort =
- manager.getVirtualPorts(this.network.id(), deviceId)
+ manager.getVirtualPorts(this.networkId, deviceId)
.stream()
.filter(port -> port.number().equals(portNumber))
.findFirst();
@@ -179,11 +172,6 @@
}
@Override
- public VirtualNetwork network() {
- return network;
- }
-
- @Override
public String localStatus(DeviceId deviceId) {
// TODO not supported at this time
return null;
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowRuleManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowRuleManager.java
index b7dd1cb..0ac256e 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowRuleManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowRuleManager.java
@@ -22,15 +22,13 @@
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import com.google.common.collect.Sets;
-import org.onlab.osgi.ServiceDirectory;
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
import org.onosproject.core.IdGenerator;
-import org.onosproject.event.AbstractListenerManager;
-import org.onosproject.incubator.net.virtual.VirtualNetwork;
-import org.onosproject.incubator.net.virtual.VirtualNetworkAdminService;
+import org.onosproject.incubator.net.virtual.NetworkId;
import org.onosproject.incubator.net.virtual.VirtualNetworkFlowRuleStore;
-import org.onosproject.incubator.net.virtual.VnetService;
+import org.onosproject.incubator.net.virtual.VirtualNetworkService;
+import org.onosproject.incubator.net.virtual.event.AbstractVirtualListenerManager;
import org.onosproject.incubator.net.virtual.provider.AbstractVirtualProviderService;
import org.onosproject.incubator.net.virtual.provider.VirtualFlowRuleProvider;
import org.onosproject.incubator.net.virtual.provider.VirtualFlowRuleProviderService;
@@ -71,10 +69,9 @@
* Flow rule service implementation built on the virtual network service.
*/
public class VirtualNetworkFlowRuleManager
- extends AbstractListenerManager<FlowRuleEvent, FlowRuleListener>
- implements FlowRuleService, VnetService {
+ extends AbstractVirtualListenerManager<FlowRuleEvent, FlowRuleListener>
+ implements FlowRuleService {
- private static final String NETWORK_NULL = "Network ID cannot be null";
private static final String VIRTUAL_FLOW_OP_TOPIC = "virtual-flow-ops-ids";
private static final String THREAD_GROUP_NAME = "onos/virtual-flowservice";
private static final String DEVICE_INSTALLER_PATTERN = "device-installer-%d";
@@ -83,8 +80,6 @@
private final Logger log = LoggerFactory.getLogger(getClass());
- private final VirtualNetwork network;
- private final VirtualNetworkAdminService manager;
private final VirtualNetworkFlowRuleStore store;
private final DeviceService deviceService;
@@ -103,42 +98,35 @@
private VirtualProviderRegistryService providerRegistryService = null;
private InternalFlowRuleProviderService innerProviderService = null;
-
-
/**
* Creates a new VirtualNetworkFlowRuleService object.
*
* @param virtualNetworkManager virtual network manager service
- * @param network virtual network
- * @param serviceDirectory service directory
+ * @param networkId a virtual network identifier
*/
- public VirtualNetworkFlowRuleManager(VirtualNetworkAdminService virtualNetworkManager,
- VirtualNetwork network,
- ServiceDirectory serviceDirectory) {
- checkNotNull(network, NETWORK_NULL);
- this.network = network;
+ public VirtualNetworkFlowRuleManager(VirtualNetworkService virtualNetworkManager,
+ NetworkId networkId) {
+ super(virtualNetworkManager, networkId);
- manager = virtualNetworkManager;
store = serviceDirectory.get(VirtualNetworkFlowRuleStore.class);
idGenerator = serviceDirectory.get(CoreService.class)
- .getIdGenerator(VIRTUAL_FLOW_OP_TOPIC + network.id().toString());
-
+ .getIdGenerator(VIRTUAL_FLOW_OP_TOPIC + networkId().toString());
providerRegistryService =
serviceDirectory.get(VirtualProviderRegistryService.class);
innerProviderService = new InternalFlowRuleProviderService();
- providerRegistryService.registerProviderService(network.id(), innerProviderService);
+ providerRegistryService.registerProviderService(networkId(), innerProviderService);
- this.deviceService = manager.get(network.id(), DeviceService.class);
+ this.deviceService = manager.get(networkId(), DeviceService.class);
}
@Override
public int getFlowRuleCount() {
- return store.getFlowRuleCount(network.id());
+ return store.getFlowRuleCount(networkId());
}
@Override
public Iterable<FlowEntry> getFlowEntries(DeviceId deviceId) {
- return store.getFlowEntries(network.id(), deviceId);
+ return store.getFlowEntries(networkId(), deviceId);
}
@Override
@@ -152,7 +140,7 @@
@Override
public void purgeFlowRules(DeviceId deviceId) {
- store.purgeFlowRule(network.id(), deviceId);
+ store.purgeFlowRule(networkId(), deviceId);
}
@Override
@@ -171,11 +159,11 @@
@Override
public Iterable<FlowRule> getFlowRulesById(ApplicationId id) {
- DeviceService deviceService = manager.get(network.id(), DeviceService.class);
+ DeviceService deviceService = manager.get(networkId(), DeviceService.class);
Set<FlowRule> flowEntries = Sets.newHashSet();
for (Device d : deviceService.getDevices()) {
- for (FlowEntry flowEntry : store.getFlowEntries(network.id(), d.id())) {
+ for (FlowEntry flowEntry : store.getFlowEntries(networkId(), d.id())) {
if (flowEntry.appId() == id.id()) {
flowEntries.add(flowEntry);
}
@@ -186,11 +174,11 @@
@Override
public Iterable<FlowEntry> getFlowEntriesById(ApplicationId id) {
- DeviceService deviceService = manager.get(network.id(), DeviceService.class);
+ DeviceService deviceService = manager.get(networkId(), DeviceService.class);
Set<FlowEntry> flowEntries = Sets.newHashSet();
for (Device d : deviceService.getDevices()) {
- for (FlowEntry flowEntry : store.getFlowEntries(network.id(), d.id())) {
+ for (FlowEntry flowEntry : store.getFlowEntries(networkId(), d.id())) {
if (flowEntry.appId() == id.id()) {
flowEntries.add(flowEntry);
}
@@ -201,12 +189,12 @@
@Override
public Iterable<FlowRule> getFlowRulesByGroupId(ApplicationId appId, short groupId) {
- DeviceService deviceService = manager.get(network.id(), DeviceService.class);
+ DeviceService deviceService = manager.get(networkId(), DeviceService.class);
Set<FlowRule> matches = Sets.newHashSet();
long toLookUp = ((long) appId.id() << 16) | groupId;
for (Device d : deviceService.getDevices()) {
- for (FlowEntry flowEntry : store.getFlowEntries(network.id(), d.id())) {
+ for (FlowEntry flowEntry : store.getFlowEntries(networkId(), d.id())) {
if ((flowEntry.id().value() >>> 32) == toLookUp) {
matches.add(flowEntry);
}
@@ -222,7 +210,7 @@
@Override
public Iterable<TableStatisticsEntry> getFlowTableStatistics(DeviceId deviceId) {
- return store.getTableStatistics(network.id(), deviceId);
+ return store.getTableStatistics(networkId(), deviceId);
}
private static FlowRuleBatchEntry.FlowRuleOperation mapOperationType(FlowRuleOperation.Type input) {
@@ -238,11 +226,6 @@
}
}
- @Override
- public VirtualNetwork network() {
- return this.network;
- }
-
private class FlowOperationsProcessor implements Runnable {
// Immutable
private final FlowRuleOperations fops;
@@ -280,7 +263,7 @@
final FlowRuleBatchOperation b = new FlowRuleBatchOperation(perDeviceBatches.get(deviceId),
deviceId, id);
pendingFlowOperations.put(id, this);
- deviceInstallers.execute(() -> store.storeBatch(network.id(), b));
+ deviceInstallers.execute(() -> store.storeBatch(networkId(), b));
}
}
@@ -319,7 +302,7 @@
lastSeen.remove(flowEntry);
firstSeen.remove(flowEntry);
- FlowEntry stored = store.getFlowEntry(network.id(), flowEntry);
+ FlowEntry stored = store.getFlowEntry(networkId(), flowEntry);
if (stored == null) {
log.debug("Rule already evicted from store: {}", flowEntry);
return;
@@ -334,11 +317,11 @@
switch (stored.state()) {
case ADDED:
case PENDING_ADD:
- provider().applyFlowRule(network.id(), stored);
+ provider().applyFlowRule(networkId(), stored);
break;
case PENDING_REMOVE:
case REMOVED:
- event = store.removeFlowRule(network.id(), stored);
+ event = store.removeFlowRule(networkId(), stored);
break;
default:
break;
@@ -359,13 +342,13 @@
switch (flowRule.state()) {
case PENDING_REMOVE:
case REMOVED:
- event = store.removeFlowRule(network.id(), flowRule);
+ event = store.removeFlowRule(networkId(), flowRule);
break;
case ADDED:
case PENDING_ADD:
- event = store.pendingFlowRule(network.id(), flowRule);
+ event = store.pendingFlowRule(networkId(), flowRule);
try {
- provider().applyFlowRule(network.id(), flowRule);
+ provider().applyFlowRule(networkId(), flowRule);
} catch (UnsupportedOperationException e) {
log.warn(e.getMessage());
if (flowRule instanceof DefaultFlowEntry) {
@@ -388,15 +371,15 @@
checkNotNull(flowRule, FLOW_RULE_NULL);
checkValidity();
- provider().removeFlowRule(network.id(), flowRule);
+ provider().removeFlowRule(networkId(), flowRule);
log.debug("Flow {} is on switch but not in store.", flowRule);
}
private void flowAdded(FlowEntry flowEntry) {
checkNotNull(flowEntry, FLOW_RULE_NULL);
- if (checkRuleLiveness(flowEntry, store.getFlowEntry(network.id(), flowEntry))) {
- FlowRuleEvent event = store.addOrUpdateFlowRule(network.id(), flowEntry);
+ if (checkRuleLiveness(flowEntry, store.getFlowEntry(networkId(), flowEntry))) {
+ FlowRuleEvent event = store.addOrUpdateFlowRule(networkId(), flowEntry);
if (event == null) {
log.debug("No flow store event generated.");
} else {
@@ -463,7 +446,7 @@
private void pushFlowMetricsInternal(DeviceId deviceId, Iterable<FlowEntry> flowEntries,
boolean useMissingFlow) {
Map<FlowEntry, FlowEntry> storedRules = Maps.newHashMap();
- store.getFlowEntries(network.id(), deviceId).forEach(f -> storedRules.put(f, f));
+ store.getFlowEntries(networkId(), deviceId).forEach(f -> storedRules.put(f, f));
for (FlowEntry rule : flowEntries) {
try {
@@ -499,7 +482,7 @@
}
public void batchOperationCompleted(long batchId, CompletedBatchOperation operation) {
- store.batchOperationComplete(network.id(), FlowRuleBatchEvent.completed(
+ store.batchOperationComplete(networkId(), FlowRuleBatchEvent.completed(
new FlowRuleBatchRequest(batchId, Collections.emptySet()),
operation
));
@@ -508,7 +491,7 @@
@Override
public void pushTableStatistics(DeviceId deviceId,
List<TableStatisticsEntry> tableStats) {
- store.updateTableStatistics(network.id(), deviceId, tableStats);
+ store.updateTableStatistics(networkId(), deviceId, tableStats);
}
}
}
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkHostManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkHostManager.java
index 92c165f7..216a76b 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkHostManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkHostManager.java
@@ -19,11 +19,10 @@
import org.onlab.packet.IpAddress;
import org.onlab.packet.MacAddress;
import org.onlab.packet.VlanId;
-import org.onosproject.event.AbstractListenerManager;
+import org.onosproject.incubator.net.virtual.NetworkId;
import org.onosproject.incubator.net.virtual.VirtualHost;
-import org.onosproject.incubator.net.virtual.VirtualNetwork;
import org.onosproject.incubator.net.virtual.VirtualNetworkService;
-import org.onosproject.incubator.net.virtual.VnetService;
+import org.onosproject.incubator.net.virtual.event.AbstractVirtualListenerManager;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DeviceId;
import org.onosproject.net.Host;
@@ -45,32 +44,26 @@
* Host service implementation built on the virtual network service.
*/
public class VirtualNetworkHostManager
- extends AbstractListenerManager<HostEvent, HostListener>
- implements HostService, VnetService {
+ extends AbstractVirtualListenerManager<HostEvent, HostListener>
+ implements HostService {
- private static final String NETWORK_NULL = "Network ID cannot be null";
private static final String HOST_NULL = "Host ID cannot be null";
- private final VirtualNetwork network;
- private final VirtualNetworkService manager;
-
/**
* Creates a new virtual network host service object.
*
* @param virtualNetworkManager virtual network manager service
- * @param network virtual network
+ * @param networkId a virtual network identifier
*/
public VirtualNetworkHostManager(VirtualNetworkService virtualNetworkManager,
- VirtualNetwork network) {
- checkNotNull(network, NETWORK_NULL);
- this.network = network;
- this.manager = virtualNetworkManager;
+ NetworkId networkId) {
+ super(virtualNetworkManager, networkId);
}
@Override
public int getHostCount() {
- return manager.getVirtualHosts(this.network.id()).size();
+ return manager.getVirtualHosts(this.networkId()).size();
}
@Override
@@ -82,7 +75,7 @@
public Host getHost(HostId hostId) {
checkNotNull(hostId, HOST_NULL);
Optional<VirtualHost> foundHost =
- manager.getVirtualHosts(this.network.id())
+ manager.getVirtualHosts(this.networkId())
.stream()
.filter(host -> hostId.equals(host.id()))
.findFirst();
@@ -98,7 +91,7 @@
* @return collection of virtual hosts.
*/
private Collection<Host> getHostsColl() {
- return manager.getVirtualHosts(this.network.id())
+ return manager.getVirtualHosts(this.networkId())
.stream().collect(Collectors.toSet());
}
@@ -157,9 +150,4 @@
public void requestMac(IpAddress ip) {
//TODO check what needs to be done here
}
-
- @Override
- public VirtualNetwork network() {
- return network;
- }
}
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkIntentManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkIntentManager.java
index 7b00e1d..4026cb5 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkIntentManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkIntentManager.java
@@ -17,14 +17,13 @@
package org.onosproject.incubator.net.virtual.impl;
import com.google.common.collect.Iterators;
-import org.onlab.osgi.ServiceDirectory;
-import org.onosproject.event.AbstractListenerManager;
-import org.onosproject.incubator.net.virtual.VirtualNetwork;
+import org.onosproject.incubator.net.virtual.NetworkId;
import org.onosproject.incubator.net.virtual.VirtualNetworkIntent;
import org.onosproject.incubator.net.virtual.VirtualNetworkService;
import org.onosproject.incubator.net.virtual.VirtualNetworkStore;
import org.onosproject.incubator.net.virtual.VirtualPort;
import org.onosproject.incubator.net.virtual.VnetService;
+import org.onosproject.incubator.net.virtual.event.AbstractVirtualListenerManager;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DeviceId;
import org.onosproject.net.Port;
@@ -50,12 +49,11 @@
* Intent service implementation built on the virtual network service.
*/
public class VirtualNetworkIntentManager
- extends AbstractListenerManager<IntentEvent, IntentListener>
+ extends AbstractVirtualListenerManager<IntentEvent, IntentListener>
implements IntentService, VnetService {
private final Logger log = LoggerFactory.getLogger(getClass());
- private static final String NETWORK_NULL = "Network cannot be null";
private static final String NETWORK_ID_NULL = "Network ID cannot be null";
private static final String DEVICE_NULL = "Device cannot be null";
private static final String INTENT_NULL = "Intent cannot be null";
@@ -68,22 +66,17 @@
protected VirtualNetworkStore store;
protected WorkPartitionService partitionService;
- private final VirtualNetwork network;
- private final VirtualNetworkService manager;
-
/**
* Creates a new VirtualNetworkIntentService object.
*
* @param virtualNetworkManager virtual network manager service
- * @param network virtual network
- * @param serviceDirectory service directory
+ * @param networkId a virtual network identifier
*/
public VirtualNetworkIntentManager(VirtualNetworkService virtualNetworkManager,
- VirtualNetwork network,
- ServiceDirectory serviceDirectory) {
- checkNotNull(network, NETWORK_NULL);
- this.network = network;
- this.manager = virtualNetworkManager;
+ NetworkId networkId) {
+
+ super(virtualNetworkManager, networkId);
+
this.store = serviceDirectory.get(VirtualNetworkStore.class);
this.intentService = serviceDirectory.get(IntentService.class);
this.partitionService = serviceDirectory.get(WorkPartitionService.class);
@@ -137,7 +130,7 @@
private Port getPort(DeviceId deviceId, PortNumber portNumber) {
checkNotNull(deviceId, DEVICE_NULL);
- Optional<VirtualPort> foundPort = manager.getVirtualPorts(this.network.id(), deviceId)
+ Optional<VirtualPort> foundPort = manager.getVirtualPorts(this.networkId(), deviceId)
.stream()
.filter(port -> port.number().equals(portNumber))
.findFirst();
@@ -240,10 +233,4 @@
public Iterable<Intent> getPending() {
return null;
}
-
-
- @Override
- public VirtualNetwork network() {
- return network;
- }
}
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkLinkManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkLinkManager.java
index b89a06f..3a93e3c 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkLinkManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkLinkManager.java
@@ -16,11 +16,10 @@
package org.onosproject.incubator.net.virtual.impl;
-import org.onosproject.event.AbstractListenerManager;
+import org.onosproject.incubator.net.virtual.NetworkId;
import org.onosproject.incubator.net.virtual.VirtualLink;
-import org.onosproject.incubator.net.virtual.VirtualNetwork;
import org.onosproject.incubator.net.virtual.VirtualNetworkService;
-import org.onosproject.incubator.net.virtual.VnetService;
+import org.onosproject.incubator.net.virtual.event.AbstractVirtualListenerManager;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DeviceId;
import org.onosproject.net.Link;
@@ -38,49 +37,38 @@
* Link service implementation built on the virtual network service.
*/
public class VirtualNetworkLinkManager
- extends AbstractListenerManager<LinkEvent, LinkListener>
- implements LinkService, VnetService {
+ extends AbstractVirtualListenerManager<LinkEvent, LinkListener>
+ implements LinkService {
- private static final String NETWORK_NULL = "Network ID cannot be null";
private static final String DEVICE_NULL = "Device cannot be null";
private static final String CONNECT_POINT_NULL = "Connect point cannot be null";
- private final VirtualNetwork network;
- private final VirtualNetworkService manager;
-
/**
* Creates a new VirtualNetworkLinkService object.
*
* @param virtualNetworkManager virtual network manager service
- * @param network virtual network
+ * @param networkId a virtual networkIdentifier
*/
public VirtualNetworkLinkManager(VirtualNetworkService virtualNetworkManager,
- VirtualNetwork network) {
- checkNotNull(network, NETWORK_NULL);
- this.network = network;
- this.manager = virtualNetworkManager;
- }
-
- @Override
- public VirtualNetwork network() {
- return network;
+ NetworkId networkId) {
+ super(virtualNetworkManager, networkId);
}
@Override
public int getLinkCount() {
- return manager.getVirtualLinks(this.network.id()).size();
+ return manager.getVirtualLinks(this.networkId()).size();
}
@Override
public Iterable<Link> getLinks() {
- return manager.getVirtualLinks(this.network.id())
+ return manager.getVirtualLinks(this.networkId())
.stream().collect(Collectors.toSet());
}
@Override
public Iterable<Link> getActiveLinks() {
- return manager.getVirtualLinks(this.network.id())
+ return manager.getVirtualLinks(this.networkId())
.stream()
.filter(link -> (link.state().equals(Link.State.ACTIVE)))
.collect(Collectors.toSet());
@@ -89,7 +77,7 @@
@Override
public Set<Link> getDeviceLinks(DeviceId deviceId) {
checkNotNull(deviceId, DEVICE_NULL);
- return manager.getVirtualLinks(this.network.id())
+ return manager.getVirtualLinks(this.networkId())
.stream()
.filter(link -> (deviceId.equals(link.src().elementId()) ||
deviceId.equals(link.dst().elementId())))
@@ -99,7 +87,7 @@
@Override
public Set<Link> getDeviceEgressLinks(DeviceId deviceId) {
checkNotNull(deviceId, DEVICE_NULL);
- return manager.getVirtualLinks(this.network.id())
+ return manager.getVirtualLinks(this.networkId())
.stream()
.filter(link -> (deviceId.equals(link.dst().elementId())))
.collect(Collectors.toSet());
@@ -108,7 +96,7 @@
@Override
public Set<Link> getDeviceIngressLinks(DeviceId deviceId) {
checkNotNull(deviceId, DEVICE_NULL);
- return manager.getVirtualLinks(this.network.id())
+ return manager.getVirtualLinks(this.networkId())
.stream()
.filter(link -> (deviceId.equals(link.src().elementId())))
.collect(Collectors.toSet());
@@ -117,7 +105,7 @@
@Override
public Set<Link> getLinks(ConnectPoint connectPoint) {
checkNotNull(connectPoint, CONNECT_POINT_NULL);
- return manager.getVirtualLinks(this.network.id())
+ return manager.getVirtualLinks(this.networkId())
.stream()
.filter(link -> (connectPoint.equals(link.src()) ||
connectPoint.equals(link.dst())))
@@ -127,7 +115,7 @@
@Override
public Set<Link> getEgressLinks(ConnectPoint connectPoint) {
checkNotNull(connectPoint, CONNECT_POINT_NULL);
- return manager.getVirtualLinks(this.network.id())
+ return manager.getVirtualLinks(this.networkId())
.stream()
.filter(link -> (connectPoint.equals(link.dst())))
.collect(Collectors.toSet());
@@ -136,7 +124,7 @@
@Override
public Set<Link> getIngressLinks(ConnectPoint connectPoint) {
checkNotNull(connectPoint, CONNECT_POINT_NULL);
- return manager.getVirtualLinks(this.network.id())
+ return manager.getVirtualLinks(this.networkId())
.stream()
.filter(link -> (connectPoint.equals(link.src())))
.collect(Collectors.toSet());
@@ -146,7 +134,7 @@
public Link getLink(ConnectPoint src, ConnectPoint dst) {
checkNotNull(src, CONNECT_POINT_NULL);
checkNotNull(dst, CONNECT_POINT_NULL);
- Optional<VirtualLink> foundLink = manager.getVirtualLinks(this.network.id())
+ Optional<VirtualLink> foundLink = manager.getVirtualLinks(this.networkId())
.stream()
.filter(link -> (src.equals(link.src()) &&
dst.equals(link.dst())))
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManager.java
index f3c7281..2665641 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManager.java
@@ -23,6 +23,7 @@
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
import org.onlab.osgi.DefaultServiceDirectory;
+import org.onlab.osgi.ServiceDirectory;
import org.onlab.packet.IpAddress;
import org.onlab.packet.MacAddress;
import org.onlab.packet.VlanId;
@@ -101,6 +102,8 @@
private VirtualNetworkStoreDelegate delegate = this::post;
+ private ServiceDirectory serviceDirectory = new DefaultServiceDirectory();
+
// TODO: figure out how to coordinate "implementation" of a virtual network in a cluster
/**
@@ -294,6 +297,11 @@
}
@Override
+ public ServiceDirectory getServiceDirectory() {
+ return serviceDirectory;
+ }
+
+ @Override
public Set<VirtualNetwork> getVirtualNetworks(TenantId tenantId) {
checkNotNull(tenantId, TENANT_NULL);
return store.getNetworks(tenantId);
@@ -379,23 +387,22 @@
private VnetService create(ServiceKey serviceKey) {
VirtualNetwork network = getVirtualNetwork(serviceKey.networkId());
checkNotNull(network, NETWORK_NULL);
+
VnetService service;
if (serviceKey.serviceClass.equals(DeviceService.class)) {
- service = new VirtualNetworkDeviceManager(this, network);
+ service = new VirtualNetworkDeviceManager(this, network.id());
} else if (serviceKey.serviceClass.equals(LinkService.class)) {
- service = new VirtualNetworkLinkManager(this, network);
+ service = new VirtualNetworkLinkManager(this, network.id());
} else if (serviceKey.serviceClass.equals(TopologyService.class)) {
- service = new VirtualNetworkTopologyManager(this, network);
+ service = new VirtualNetworkTopologyManager(this, network.id());
} else if (serviceKey.serviceClass.equals(IntentService.class)) {
- service = new VirtualNetworkIntentManager(
- this, network, new DefaultServiceDirectory());
+ service = new VirtualNetworkIntentManager(this, network.id());
} else if (serviceKey.serviceClass.equals(HostService.class)) {
- service = new VirtualNetworkHostManager(this, network);
+ service = new VirtualNetworkHostManager(this, network.id());
} else if (serviceKey.serviceClass.equals(PathService.class)) {
- service = new VirtualNetworkPathManager(this, network);
+ service = new VirtualNetworkPathManager(this, network.id());
} else if (serviceKey.serviceClass.equals(FlowRuleService.class)) {
- service = new VirtualNetworkFlowRuleManager(this, network,
- new DefaultServiceDirectory());
+ service = new VirtualNetworkFlowRuleManager(this, network.id());
} else {
return null;
}
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkPathManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkPathManager.java
index ad81141..7d6555a 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkPathManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkPathManager.java
@@ -15,7 +15,7 @@
*/
package org.onosproject.incubator.net.virtual.impl;
-import org.onosproject.incubator.net.virtual.VirtualNetwork;
+import org.onosproject.incubator.net.virtual.NetworkId;
import org.onosproject.incubator.net.virtual.VirtualNetworkService;
import org.onosproject.incubator.net.virtual.VnetService;
import org.onosproject.net.DisjointPath;
@@ -31,8 +31,6 @@
import java.util.Map;
import java.util.Set;
-import static com.google.common.base.Preconditions.checkNotNull;
-
/**
* Path service implementation built on the virtual network service.
*/
@@ -40,23 +38,21 @@
extends AbstractPathService
implements PathService, VnetService {
- private static final String NETWORK_NULL = "Network ID cannot be null";
-
- private final VirtualNetwork network;
+ private final NetworkId networkId;
/**
* Creates a new virtual network path service object.
*
* @param virtualNetworkManager virtual network manager service
- * @param network virtual network
+ * @param networkId a virtual network identifier
*/
public VirtualNetworkPathManager(VirtualNetworkService virtualNetworkManager,
- VirtualNetwork network) {
- checkNotNull(network, NETWORK_NULL);
- this.network = network;
- topologyService = virtualNetworkManager.get(network.id(), TopologyService.class);
- hostService = virtualNetworkManager.get(network.id(), HostService.class);
+ NetworkId networkId) {
+ this.networkId = networkId;
+
+ topologyService = virtualNetworkManager.get(networkId(), TopologyService.class);
+ hostService = virtualNetworkManager.get(networkId(), HostService.class);
}
@Override
@@ -76,7 +72,7 @@
}
@Override
- public VirtualNetwork network() {
- return network;
+ public NetworkId networkId() {
+ return this.networkId;
}
}
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkTopologyManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkTopologyManager.java
index e49fa6f..e361a3b 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkTopologyManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkTopologyManager.java
@@ -17,10 +17,9 @@
package org.onosproject.incubator.net.virtual.impl;
import org.onosproject.common.DefaultTopology;
-import org.onosproject.event.AbstractListenerManager;
-import org.onosproject.incubator.net.virtual.VirtualNetwork;
+import org.onosproject.incubator.net.virtual.NetworkId;
import org.onosproject.incubator.net.virtual.VirtualNetworkService;
-import org.onosproject.incubator.net.virtual.VnetService;
+import org.onosproject.incubator.net.virtual.event.AbstractVirtualListenerManager;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
@@ -49,10 +48,9 @@
* Topology service implementation built on the virtual network service.
*/
public class VirtualNetworkTopologyManager
- extends AbstractListenerManager<TopologyEvent, TopologyListener>
- implements TopologyService, VnetService {
+ extends AbstractVirtualListenerManager<TopologyEvent, TopologyListener>
+ implements TopologyService {
- private static final String NETWORK_NULL = "Network ID cannot be null";
private static final String TOPOLOGY_NULL = "Topology cannot be null";
private static final String DEVICE_ID_NULL = "Device ID cannot be null";
private static final String CLUSTER_ID_NULL = "Cluster ID cannot be null";
@@ -60,28 +58,23 @@
private static final String CONNECTION_POINT_NULL = "Connection point cannot be null";
private static final String LINK_WEIGHT_NULL = "Link weight cannot be null";
- private final VirtualNetwork network;
- private final VirtualNetworkService manager;
-
/**
* Creates a new VirtualNetworkTopologyService object.
*
* @param virtualNetworkManager virtual network manager service
- * @param network virtual network
+ * @param networkId a virtual network identifier
*/
public VirtualNetworkTopologyManager(VirtualNetworkService virtualNetworkManager,
- VirtualNetwork network) {
- checkNotNull(network, NETWORK_NULL);
- this.network = network;
- this.manager = virtualNetworkManager;
+ NetworkId networkId) {
+ super(virtualNetworkManager, networkId);
}
@Override
public Topology currentTopology() {
- Iterable<Device> devices = manager.getVirtualDevices(network().id())
+ Iterable<Device> devices = manager.getVirtualDevices(networkId())
.stream()
.collect(Collectors.toSet());
- Iterable<Link> links = manager.getVirtualLinks(network().id())
+ Iterable<Link> links = manager.getVirtualLinks(networkId())
.stream()
.collect(Collectors.toSet());
@@ -194,9 +187,4 @@
checkNotNull(connectPoint, CONNECTION_POINT_NULL);
return defaultTopology(topology).isBroadcastPoint(connectPoint);
}
-
- @Override
- public VirtualNetwork network() {
- return network;
- }
}