aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/apps/vtn/vtnrsc/src
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/apps/vtn/vtnrsc/src')
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/classifier/ClassifierService.java41
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/classifier/impl/ClassifierManager.java78
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/classifier/impl/package-info.java20
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/classifier/package-info.java20
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/subnet/SubnetCreateCommand.java2
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/subnet/SubnetUpdateCommand.java2
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEvent.java50
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEventFeedback.java133
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/floatingip/impl/FloatingIpManager.java59
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierEvent.java63
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierListener.java25
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierService.java3
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/impl/FlowClassifierManager.java18
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portchain/PortChainEvent.java63
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portchain/PortChainListener.java25
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portchain/PortChainService.java3
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portchain/impl/PortChainManager.java10
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpair/PortPairEvent.java63
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpair/PortPairListener.java25
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpair/PortPairService.java14
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpair/impl/PortPairManager.java22
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/PortPairGroupEvent.java63
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/PortPairGroupListener.java25
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/PortPairGroupService.java14
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/impl/PortPairGroupManager.java22
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/service/VtnRscService.java18
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/service/impl/VtnRscManager.java152
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/VirtualPortService.java10
-rw-r--r--framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/impl/VirtualPortManager.java22
29 files changed, 977 insertions, 88 deletions
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/classifier/ClassifierService.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/classifier/ClassifierService.java
new file mode 100644
index 00000000..a15da3ef
--- /dev/null
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/classifier/ClassifierService.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.vtnrsc.classifier;
+
+import org.onosproject.net.DeviceId;
+
+/**
+ * Provides Services for Classifier.
+ */
+public interface ClassifierService {
+
+ /**
+ * Get Classifier devices for sfc.
+ *
+ * @return list of device id's for classifiers
+ */
+ Iterable<DeviceId> getClassifiers();
+
+ /**
+ * Add Classifier device for sfc.
+ */
+ void addClassifier(DeviceId deviceId);
+
+ /**
+ * Remove Classifier device for sfc.
+ */
+ void removeClassifier(DeviceId deviceId);
+}
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/classifier/impl/ClassifierManager.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/classifier/impl/ClassifierManager.java
new file mode 100644
index 00000000..a12d6221
--- /dev/null
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/classifier/impl/ClassifierManager.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.vtnrsc.classifier.impl;
+
+import static org.slf4j.LoggerFactory.getLogger;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.Service;
+import org.onosproject.net.DeviceId;
+import org.onosproject.store.serializers.KryoNamespaces;
+import org.onosproject.store.service.DistributedSet;
+import org.onosproject.store.service.Serializer;
+import org.onosproject.store.service.StorageService;
+import org.onosproject.vtnrsc.classifier.ClassifierService;
+import org.slf4j.Logger;
+
+import com.google.common.collect.ImmutableList;
+
+/**
+ * Provides implementation of the Classifier Service.
+ */
+@Component(immediate = true)
+@Service
+public class ClassifierManager implements ClassifierService {
+
+ private final Logger log = getLogger(ClassifierManager.class);
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected StorageService storageService;
+
+ private DistributedSet<DeviceId> classifierList;
+
+ @Activate
+ protected void activate() {
+ classifierList = storageService.<DeviceId>setBuilder()
+ .withName("classifier")
+ .withSerializer(Serializer.using(KryoNamespaces.API))
+ .build();
+ log.info("Started");
+ }
+
+ @Deactivate
+ protected void deactivate() {
+ log.info("Stopped");
+ }
+
+ @Override
+ public void addClassifier(DeviceId deviceId) {
+ classifierList.add(deviceId);
+ }
+
+ @Override
+ public Iterable<DeviceId> getClassifiers() {
+ return ImmutableList.copyOf(classifierList);
+ }
+
+ @Override
+ public void removeClassifier(DeviceId deviceId) {
+ classifierList.remove(deviceId);
+ }
+}
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/classifier/impl/package-info.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/classifier/impl/package-info.java
new file mode 100644
index 00000000..dc72e806
--- /dev/null
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/classifier/impl/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Provides implementation of the Classifier service.
+ */
+package org.onosproject.vtnrsc.classifier.impl;
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/classifier/package-info.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/classifier/package-info.java
new file mode 100644
index 00000000..56976d96
--- /dev/null
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/classifier/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Service for interacting with Classifier of SFC.
+ */
+package org.onosproject.vtnrsc.classifier;
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/subnet/SubnetCreateCommand.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/subnet/SubnetCreateCommand.java
index 56236408..de8cfe53 100644
--- a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/subnet/SubnetCreateCommand.java
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/subnet/SubnetCreateCommand.java
@@ -98,7 +98,7 @@ public class SubnetCreateCommand extends AbstractShellCommand {
protected void execute() {
SubnetService service = get(SubnetService.class);
if (id == null || networkId == null || tenantId == null) {
- print(null, "id,networkId,tenantId can not be null");
+ print("id,networkId,tenantId can not be null");
return;
}
Subnet subnet = new DefaultSubnet(SubnetId.subnetId(id), subnetName,
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/subnet/SubnetUpdateCommand.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/subnet/SubnetUpdateCommand.java
index b0578a1e..c76ca5b2 100644
--- a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/subnet/SubnetUpdateCommand.java
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/subnet/SubnetUpdateCommand.java
@@ -98,7 +98,7 @@ public class SubnetUpdateCommand extends AbstractShellCommand {
protected void execute() {
SubnetService service = get(SubnetService.class);
if (id == null || networkId == null || tenantId == null) {
- print(null, "id,networkId,tenantId can not be null");
+ print("id,networkId,tenantId can not be null");
return;
}
Subnet subnet = new DefaultSubnet(SubnetId.subnetId(id), subnetName,
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEvent.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEvent.java
index 3bac158b..ce3faae7 100644
--- a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEvent.java
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEvent.java
@@ -51,7 +51,55 @@ public class VtnRscEvent
/**
* Signifies that router interface has remove.
*/
- ROUTER_INTERFACE_DELETE
+ ROUTER_INTERFACE_DELETE,
+ /**
+ * Signifies that port-pair has add.
+ */
+ PORT_PAIR_PUT,
+ /**
+ * Signifies that port-pair has remove.
+ */
+ PORT_PAIR_DELETE,
+ /**
+ * Signifies that port-pair has update.
+ */
+ PORT_PAIR_UPDATE,
+ /**
+ * Signifies that port-pair-group has add.
+ */
+ PORT_PAIR_GROUP_PUT,
+ /**
+ * Signifies that port-pair-group has remove.
+ */
+ PORT_PAIR_GROUP_DELETE,
+ /**
+ * Signifies that port-pair-group has update.
+ */
+ PORT_PAIR_GROUP_UPDATE,
+ /**
+ * Signifies that flow-classifier has add.
+ */
+ FLOW_CLASSIFIER_PUT,
+ /**
+ * Signifies that flow-classifier has remove.
+ */
+ FLOW_CLASSIFIER_DELETE,
+ /**
+ * Signifies that flow-classifier has update.
+ */
+ FLOW_CLASSIFIER_UPDATE,
+ /**
+ * Signifies that port-chain has add.
+ */
+ PORT_CHAIN_PUT,
+ /**
+ * Signifies that port-chain has remove.
+ */
+ PORT_CHAIN_DELETE,
+ /**
+ * Signifies that port-chain has update.
+ */
+ PORT_CHAIN_UPDATE
}
/**
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEventFeedback.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEventFeedback.java
index 63dcaeee..112c6411 100644
--- a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEventFeedback.java
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEventFeedback.java
@@ -20,6 +20,10 @@ import java.util.Objects;
import org.onosproject.vtnrsc.FloatingIp;
import org.onosproject.vtnrsc.Router;
import org.onosproject.vtnrsc.RouterInterface;
+import org.onosproject.vtnrsc.PortPair;
+import org.onosproject.vtnrsc.PortPairGroup;
+import org.onosproject.vtnrsc.FlowClassifier;
+import org.onosproject.vtnrsc.PortChain;
import static com.google.common.base.MoreObjects.toStringHelper;
import static com.google.common.base.Preconditions.checkNotNull;
@@ -31,6 +35,10 @@ public class VtnRscEventFeedback {
private final FloatingIp floaingtIp;
private final Router router;
private final RouterInterface routerInterface;
+ private final PortPair portPair;
+ private final PortPairGroup portPairGroup;
+ private final FlowClassifier flowClassifier;
+ private final PortChain portChain;
/**
* Creates VtnRscEventFeedback object.
@@ -41,6 +49,10 @@ public class VtnRscEventFeedback {
this.floaingtIp = checkNotNull(floatingIp, "floaintIp cannot be null");
this.router = null;
this.routerInterface = null;
+ this.portPair = null;
+ this.portPairGroup = null;
+ this.flowClassifier = null;
+ this.portChain = null;
}
/**
@@ -52,6 +64,10 @@ public class VtnRscEventFeedback {
this.floaingtIp = null;
this.router = checkNotNull(router, "router cannot be null");
this.routerInterface = null;
+ this.portPair = null;
+ this.portPairGroup = null;
+ this.flowClassifier = null;
+ this.portChain = null;
}
/**
@@ -64,6 +80,74 @@ public class VtnRscEventFeedback {
this.router = null;
this.routerInterface = checkNotNull(routerInterface,
"routerInterface cannot be null");
+ this.portPair = null;
+ this.portPairGroup = null;
+ this.flowClassifier = null;
+ this.portChain = null;
+ }
+
+ /**
+ * Creates VtnRscEventFeedback object.
+ *
+ * @param portPair the Port-Pair
+ */
+ public VtnRscEventFeedback(PortPair portPair) {
+ this.floaingtIp = null;
+ this.router = null;
+ this.routerInterface = null;
+ this.portPair = checkNotNull(portPair,
+ "Port-Pair cannot be null");
+ this.portPairGroup = null;
+ this.flowClassifier = null;
+ this.portChain = null;
+ }
+
+ /**
+ * Creates VtnRscEventFeedback object.
+ *
+ * @param portPairGroup the Port-Pair-Group
+ */
+ public VtnRscEventFeedback(PortPairGroup portPairGroup) {
+ this.floaingtIp = null;
+ this.router = null;
+ this.routerInterface = null;
+ this.portPair = null;
+ this.portPairGroup = checkNotNull(portPairGroup,
+ "Port-Pair-Group cannot be null");
+ this.flowClassifier = null;
+ this.portChain = null;
+ }
+
+ /**
+ * Creates VtnRscEventFeedback object.
+ *
+ * @param flowClassifier the Flow-Classifier
+ */
+ public VtnRscEventFeedback(FlowClassifier flowClassifier) {
+ this.floaingtIp = null;
+ this.router = null;
+ this.routerInterface = null;
+ this.portPair = null;
+ this.portPairGroup = null;
+ this.flowClassifier = checkNotNull(flowClassifier,
+ "Flow-Classifier cannot be null");
+ this.portChain = null;
+ }
+
+ /**
+ * Creates VtnRscEventFeedback object.
+ *
+ * @param portChain the Port-Chain
+ */
+ public VtnRscEventFeedback(PortChain portChain) {
+ this.floaingtIp = null;
+ this.router = null;
+ this.routerInterface = null;
+ this.portPair = null;
+ this.portPairGroup = null;
+ this.flowClassifier = null;
+ this.portChain = checkNotNull(portChain,
+ "Port-Chain cannot be null");
}
/**
@@ -93,9 +177,46 @@ public class VtnRscEventFeedback {
return routerInterface;
}
+ /**
+ * Returns Port-Pair.
+ *
+ * @return portPair the Port-Pair
+ */
+ public PortPair portPair() {
+ return portPair;
+ }
+
+ /**
+ * Returns Port-Pair-Group.
+ *
+ * @return portPairGroup the Port-Pair-Group
+ */
+ public PortPairGroup portPairGroup() {
+ return portPairGroup;
+ }
+
+ /**
+ * Returns Flow-Classifier.
+ *
+ * @return flowClassifier the Flow-Classifier
+ */
+ public FlowClassifier flowClassifier() {
+ return flowClassifier;
+ }
+
+ /**
+ * Returns Port-Chain.
+ *
+ * @return portChain the Port-Chain
+ */
+ public PortChain portChain() {
+ return portChain;
+ }
+
@Override
public int hashCode() {
- return Objects.hash(floaingtIp, router, routerInterface);
+ return Objects.hash(floaingtIp, router, routerInterface, portPair,
+ portPairGroup, flowClassifier, portChain);
}
@Override
@@ -107,7 +228,11 @@ public class VtnRscEventFeedback {
final VtnRscEventFeedback that = (VtnRscEventFeedback) obj;
return Objects.equals(this.floaingtIp, that.floaingtIp)
&& Objects.equals(this.router, that.router)
- && Objects.equals(this.routerInterface, that.routerInterface);
+ && Objects.equals(this.routerInterface, that.routerInterface)
+ && Objects.equals(this.portPair, that.portPair)
+ && Objects.equals(this.portPairGroup, that.portPairGroup)
+ && Objects.equals(this.flowClassifier, that.flowClassifier)
+ && Objects.equals(this.portChain, that.portChain);
}
return false;
}
@@ -118,6 +243,10 @@ public class VtnRscEventFeedback {
.add("router", router)
.add("floaingtIp", floaingtIp)
.add("routerInterface", routerInterface)
+ .add("portPair", portPair)
+ .add("portPairGroup", portPairGroup)
+ .add("flowClassifier", flowClassifier)
+ .add("portChain", portChain)
.toString();
}
}
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/floatingip/impl/FloatingIpManager.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/floatingip/impl/FloatingIpManager.java
index 9f944da1..ce9bb21f 100644
--- a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/floatingip/impl/FloatingIpManager.java
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/floatingip/impl/FloatingIpManager.java
@@ -202,27 +202,24 @@ public class FloatingIpManager implements FloatingIpService {
public boolean updateFloatingIps(Collection<FloatingIp> floatingIps) {
checkNotNull(floatingIps, FLOATINGIP_NOT_NULL);
boolean result = true;
- if (floatingIps != null) {
- for (FloatingIp floatingIp : floatingIps) {
- verifyFloatingIpData(floatingIp);
- if (floatingIp.portId() != null) {
- floatingIpStore.put(floatingIp.id(), floatingIp);
- if (!floatingIpStore.containsKey(floatingIp.id())) {
+ for (FloatingIp floatingIp : floatingIps) {
+ verifyFloatingIpData(floatingIp);
+ if (floatingIp.portId() != null) {
+ floatingIpStore.put(floatingIp.id(), floatingIp);
+ if (!floatingIpStore.containsKey(floatingIp.id())) {
+ log.debug("The floating Ip is updated failed whose identifier is {}",
+ floatingIp.id().toString());
+ result = false;
+ }
+ } else {
+ FloatingIp oldFloatingIp = floatingIpStore.get(floatingIp.id());
+ if (oldFloatingIp != null) {
+ floatingIpStore.remove(floatingIp.id(), oldFloatingIp);
+ if (floatingIpStore.containsKey(floatingIp.id())) {
log.debug("The floating Ip is updated failed whose identifier is {}",
floatingIp.id().toString());
result = false;
}
- } else {
- FloatingIp oldFloatingIp = floatingIpStore.get(floatingIp
- .id());
- if (oldFloatingIp != null) {
- floatingIpStore.remove(floatingIp.id(), oldFloatingIp);
- if (floatingIpStore.containsKey(floatingIp.id())) {
- log.debug("The floating Ip is updated failed whose identifier is {}",
- floatingIp.id().toString());
- result = false;
- }
- }
}
}
}
@@ -233,21 +230,19 @@ public class FloatingIpManager implements FloatingIpService {
public boolean removeFloatingIps(Collection<FloatingIpId> floatingIpIds) {
checkNotNull(floatingIpIds, FLOATINGIP_ID_NOT_NULL);
boolean result = true;
- if (floatingIpIds != null) {
- for (FloatingIpId floatingIpId : floatingIpIds) {
- if (!floatingIpStore.containsKey(floatingIpId)) {
- log.debug("The floatingIp is not exist whose identifier is {}",
- floatingIpId.toString());
- throw new IllegalArgumentException(
- "FloatingIP ID doesn't exist");
- }
- FloatingIp floatingIp = floatingIpStore.get(floatingIpId);
- floatingIpStore.remove(floatingIpId, floatingIp);
- if (floatingIpStore.containsKey(floatingIpId)) {
- log.debug("The floating Ip is deleted failed whose identifier is {}",
- floatingIpId.toString());
- result = false;
- }
+ for (FloatingIpId floatingIpId : floatingIpIds) {
+ if (!floatingIpStore.containsKey(floatingIpId)) {
+ log.debug("The floatingIp is not exist whose identifier is {}",
+ floatingIpId.toString());
+ throw new IllegalArgumentException(
+ "FloatingIP ID doesn't exist");
+ }
+ FloatingIp floatingIp = floatingIpStore.get(floatingIpId);
+ floatingIpStore.remove(floatingIpId, floatingIp);
+ if (floatingIpStore.containsKey(floatingIpId)) {
+ log.debug("The floating Ip is deleted failed whose identifier is {}",
+ floatingIpId.toString());
+ result = false;
}
}
return result;
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierEvent.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierEvent.java
new file mode 100644
index 00000000..d81ab48a
--- /dev/null
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierEvent.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.vtnrsc.flowclassifier;
+
+import org.onosproject.event.AbstractEvent;
+import org.onosproject.vtnrsc.FlowClassifier;
+
+/**
+ * Describes network Flow-Classifier event.
+ */
+public class FlowClassifierEvent extends AbstractEvent<FlowClassifierEvent.Type, FlowClassifier> {
+ /**
+ * Type of flow-classifier events.
+ */
+ public enum Type {
+ /**
+ * Signifies that flow-classifier has been created.
+ */
+ FLOW_CLASSIFIER_PUT,
+ /**
+ * Signifies that flow-classifier has been deleted.
+ */
+ FLOW_CLASSIFIER_DELETE,
+ /**
+ * Signifies that flow-classifier has been updated.
+ */
+ FLOW_CLASSIFIER_UPDATE
+ }
+
+ /**
+ * Creates an event of a given type and for the specified Flow-Classifier.
+ *
+ * @param type Flow-Classifier event type
+ * @param flowClassifier Flow-Classifier subject
+ */
+ public FlowClassifierEvent(Type type, FlowClassifier flowClassifier) {
+ super(type, flowClassifier);
+ }
+
+ /**
+ * Creates an event of a given type and for the specified Flow-Classifier.
+ *
+ * @param type Flow-Classifier event type
+ * @param flowClassifier Flow-Classifier subject
+ * @param time occurrence time
+ */
+ public FlowClassifierEvent(Type type, FlowClassifier flowClassifier, long time) {
+ super(type, flowClassifier, time);
+ }
+}
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierListener.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierListener.java
new file mode 100644
index 00000000..3c0409ad
--- /dev/null
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierListener.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.vtnrsc.flowclassifier;
+
+import org.onosproject.event.EventListener;
+
+/**
+ * Entity capable of Flow-Classifier related events.
+ */
+public interface FlowClassifierListener extends EventListener<FlowClassifierEvent> {
+
+}
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierService.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierService.java
index c5911ff2..48438846 100644
--- a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierService.java
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierService.java
@@ -15,13 +15,14 @@
*/
package org.onosproject.vtnrsc.flowclassifier;
+import org.onosproject.event.ListenerService;
import org.onosproject.vtnrsc.FlowClassifier;
import org.onosproject.vtnrsc.FlowClassifierId;
/**
* Provides Services for Flow Classifier.
*/
-public interface FlowClassifierService {
+public interface FlowClassifierService extends ListenerService<FlowClassifierEvent, FlowClassifierListener> {
/**
* Check whether Flow Classifier is present based on given Flow Classifier
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/impl/FlowClassifierManager.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/impl/FlowClassifierManager.java
index 4a60cd34..18f63b30 100644
--- a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/impl/FlowClassifierManager.java
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/impl/FlowClassifierManager.java
@@ -15,6 +15,9 @@
*/
package org.onosproject.vtnrsc.flowclassifier.impl;
+import static org.slf4j.LoggerFactory.getLogger;
+import static com.google.common.base.Preconditions.checkNotNull;
+
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -22,6 +25,7 @@ import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
import org.onlab.util.KryoNamespace;
+import org.onosproject.event.AbstractListenerManager;
import org.onosproject.store.serializers.KryoNamespaces;
import org.onosproject.store.service.EventuallyConsistentMap;
import org.onosproject.store.service.MultiValuedTimestamp;
@@ -29,12 +33,11 @@ import org.onosproject.store.service.StorageService;
import org.onosproject.store.service.WallClockTimestamp;
import org.onosproject.vtnrsc.FlowClassifierId;
import org.onosproject.vtnrsc.FlowClassifier;
+import org.onosproject.vtnrsc.flowclassifier.FlowClassifierEvent;
+import org.onosproject.vtnrsc.flowclassifier.FlowClassifierListener;
import org.onosproject.vtnrsc.flowclassifier.FlowClassifierService;
import org.slf4j.Logger;
-import static org.slf4j.LoggerFactory.getLogger;
-import static com.google.common.base.Preconditions.checkNotNull;
-
import com.google.common.collect.ImmutableList;
/**
@@ -42,14 +45,17 @@ import com.google.common.collect.ImmutableList;
*/
@Component(immediate = true)
@Service
-public class FlowClassifierManager implements FlowClassifierService {
-
- private final Logger log = getLogger(FlowClassifierManager.class);
+public class FlowClassifierManager extends AbstractListenerManager<FlowClassifierEvent, FlowClassifierListener>
+ implements FlowClassifierService {
private static final String FLOW_CLASSIFIER_NOT_NULL = "Flow Classifier cannot be null";
private static final String FLOW_CLASSIFIER_ID_NOT_NULL = "Flow Classifier Id cannot be null";
+ private static final String LISTENER_NOT_NULL = "Listener cannot be null";
+
+ private final Logger log = getLogger(FlowClassifierManager.class);
private EventuallyConsistentMap<FlowClassifierId, FlowClassifier> flowClassifierStore;
+
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected StorageService storageService;
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portchain/PortChainEvent.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portchain/PortChainEvent.java
new file mode 100644
index 00000000..44a4e8ed
--- /dev/null
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portchain/PortChainEvent.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.vtnrsc.portchain;
+
+import org.onosproject.event.AbstractEvent;
+import org.onosproject.vtnrsc.PortChain;
+
+/**
+ * Describes network Port-Chain event.
+ */
+public class PortChainEvent extends AbstractEvent<PortChainEvent.Type, PortChain> {
+ /**
+ * Type of port-chain events.
+ */
+ public enum Type {
+ /**
+ * Signifies that port-chain has been created.
+ */
+ PORT_CHAIN_PUT,
+ /**
+ * Signifies that port-chain has been deleted.
+ */
+ PORT_CHAIN_DELETE,
+ /**
+ * Signifies that port-chain has been updated.
+ */
+ PORT_CHAIN_UPDATE
+ }
+
+ /**
+ * Creates an event of a given type and for the specified Port-Chain.
+ *
+ * @param type Port-Chain event type
+ * @param portChain Port-Chain subject
+ */
+ public PortChainEvent(Type type, PortChain portChain) {
+ super(type, portChain);
+ }
+
+ /**
+ * Creates an event of a given type and for the specified Port-Chain.
+ *
+ * @param type Port-Chain event type
+ * @param portChain Port-Chain subject
+ * @param time occurrence time
+ */
+ public PortChainEvent(Type type, PortChain portChain, long time) {
+ super(type, portChain, time);
+ }
+}
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portchain/PortChainListener.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portchain/PortChainListener.java
new file mode 100644
index 00000000..27a498b5
--- /dev/null
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portchain/PortChainListener.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.vtnrsc.portchain;
+
+import org.onosproject.event.EventListener;
+
+/**
+ * Entity capable of Port-Chain related events.
+ */
+public interface PortChainListener extends EventListener<PortChainEvent> {
+
+}
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portchain/PortChainService.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portchain/PortChainService.java
index b4ff917e..5b08262b 100644
--- a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portchain/PortChainService.java
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portchain/PortChainService.java
@@ -15,13 +15,14 @@
*/
package org.onosproject.vtnrsc.portchain;
+import org.onosproject.event.ListenerService;
import org.onosproject.vtnrsc.PortChain;
import org.onosproject.vtnrsc.PortChainId;
/**
* Service for interacting with the inventory of port chains.
*/
-public interface PortChainService {
+public interface PortChainService extends ListenerService<PortChainEvent, PortChainListener> {
/**
* Returns if the port chain is existed.
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portchain/impl/PortChainManager.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portchain/impl/PortChainManager.java
index 5201a2ca..0062db48 100644
--- a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portchain/impl/PortChainManager.java
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portchain/impl/PortChainManager.java
@@ -27,6 +27,7 @@ import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
import org.onlab.util.KryoNamespace;
+import org.onosproject.event.AbstractListenerManager;
import org.onosproject.store.serializers.KryoNamespaces;
import org.onosproject.store.service.EventuallyConsistentMap;
import org.onosproject.store.service.MultiValuedTimestamp;
@@ -34,6 +35,8 @@ import org.onosproject.store.service.StorageService;
import org.onosproject.store.service.WallClockTimestamp;
import org.onosproject.vtnrsc.PortChain;
import org.onosproject.vtnrsc.PortChainId;
+import org.onosproject.vtnrsc.portchain.PortChainEvent;
+import org.onosproject.vtnrsc.portchain.PortChainListener;
import org.onosproject.vtnrsc.portchain.PortChainService;
import org.slf4j.Logger;
@@ -42,13 +45,14 @@ import org.slf4j.Logger;
*/
@Component(immediate = true)
@Service
-public class PortChainManager implements PortChainService {
-
- private final Logger log = getLogger(getClass());
+public class PortChainManager extends AbstractListenerManager<PortChainEvent, PortChainListener> implements
+ PortChainService {
private static final String PORT_CHAIN_ID_NULL = "PortChain ID cannot be null";
private static final String PORT_CHAIN_NULL = "PortChain cannot be null";
+ private static final String LISTENER_NOT_NULL = "Listener cannot be null";
+ private final Logger log = getLogger(getClass());
private EventuallyConsistentMap<PortChainId, PortChain> portChainStore;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpair/PortPairEvent.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpair/PortPairEvent.java
new file mode 100644
index 00000000..31ecc737
--- /dev/null
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpair/PortPairEvent.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.vtnrsc.portpair;
+
+import org.onosproject.event.AbstractEvent;
+import org.onosproject.vtnrsc.PortPair;
+
+/**
+ * Describes network Port-Pair event.
+ */
+public class PortPairEvent extends AbstractEvent<PortPairEvent.Type, PortPair> {
+ /**
+ * Type of port-pair events.
+ */
+ public enum Type {
+ /**
+ * Signifies that port-pair has been created.
+ */
+ PORT_PAIR_PUT,
+ /**
+ * Signifies that port-pair has been deleted.
+ */
+ PORT_PAIR_DELETE,
+ /**
+ * Signifies that port-pair has been updated.
+ */
+ PORT_PAIR_UPDATE
+ }
+
+ /**
+ * Creates an event of a given type and for the specified Port-Pair.
+ *
+ * @param type Port-Pair event type
+ * @param portPair Port-Pair subject
+ */
+ public PortPairEvent(Type type, PortPair portPair) {
+ super(type, portPair);
+ }
+
+ /**
+ * Creates an event of a given type and for the specified Port-Pair.
+ *
+ * @param type Port-Pair event type
+ * @param portPair Port-Pair subject
+ * @param time occurrence time
+ */
+ public PortPairEvent(Type type, PortPair portPair, long time) {
+ super(type, portPair, time);
+ }
+}
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpair/PortPairListener.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpair/PortPairListener.java
new file mode 100644
index 00000000..3bdb9e4e
--- /dev/null
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpair/PortPairListener.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.vtnrsc.portpair;
+
+import org.onosproject.event.EventListener;
+
+/**
+ * Entity capable of Port-Pair related events.
+ */
+public interface PortPairListener extends EventListener<PortPairEvent> {
+
+}
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpair/PortPairService.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpair/PortPairService.java
index f99cc2cf..e98a6a20 100644
--- a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpair/PortPairService.java
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpair/PortPairService.java
@@ -77,4 +77,18 @@ public interface PortPairService {
* @return true if the give port pair is deleted successfully.
*/
boolean removePortPair(PortPairId portPairId);
+
+ /**
+ * Adds the specified listener to Port-Pair manager.
+ *
+ * @param listener Port-Pair listener
+ */
+ void addListener(PortPairListener listener);
+
+ /**
+ * Removes the specified listener to Port-Pair manager.
+ *
+ * @param listener Port-Pair listener
+ */
+ void removeListener(PortPairListener listener);
}
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpair/impl/PortPairManager.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpair/impl/PortPairManager.java
index 93c8782a..ad6fd4bb 100644
--- a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpair/impl/PortPairManager.java
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpair/impl/PortPairManager.java
@@ -19,6 +19,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
import static org.slf4j.LoggerFactory.getLogger;
import java.util.Collections;
+import java.util.Set;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
@@ -34,9 +35,12 @@ import org.onosproject.store.service.StorageService;
import org.onosproject.store.service.WallClockTimestamp;
import org.onosproject.vtnrsc.PortPair;
import org.onosproject.vtnrsc.PortPairId;
+import org.onosproject.vtnrsc.portpair.PortPairListener;
import org.onosproject.vtnrsc.portpair.PortPairService;
import org.slf4j.Logger;
+import com.google.common.collect.Sets;
+
/**
* Provides implementation of the portPairService.
*/
@@ -44,11 +48,12 @@ import org.slf4j.Logger;
@Service
public class PortPairManager implements PortPairService {
- private final Logger log = getLogger(getClass());
-
private static final String PORT_PAIR_ID_NULL = "PortPair ID cannot be null";
private static final String PORT_PAIR_NULL = "PortPair cannot be null";
+ private static final String LISTENER_NOT_NULL = "Listener cannot be null";
+ private final Logger log = getLogger(getClass());
+ private final Set<PortPairListener> listeners = Sets.newCopyOnWriteArraySet();
private EventuallyConsistentMap<PortPairId, PortPair> portPairStore;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
@@ -73,6 +78,7 @@ public class PortPairManager implements PortPairService {
@Deactivate
public void deactivate() {
portPairStore.destroy();
+ listeners.clear();
log.info("Stopped");
}
@@ -143,4 +149,16 @@ public class PortPairManager implements PortPairService {
}
return true;
}
+
+ @Override
+ public void addListener(PortPairListener listener) {
+ checkNotNull(listener, LISTENER_NOT_NULL);
+ listeners.add(listener);
+ }
+
+ @Override
+ public void removeListener(PortPairListener listener) {
+ checkNotNull(listener, LISTENER_NOT_NULL);
+ listeners.remove(listener);
+ }
}
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/PortPairGroupEvent.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/PortPairGroupEvent.java
new file mode 100644
index 00000000..88e1d7fb
--- /dev/null
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/PortPairGroupEvent.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.vtnrsc.portpairgroup;
+
+import org.onosproject.event.AbstractEvent;
+import org.onosproject.vtnrsc.PortPairGroup;
+
+/**
+ * Describes network Port-Pair-Group event.
+ */
+public class PortPairGroupEvent extends AbstractEvent<PortPairGroupEvent.Type, PortPairGroup> {
+ /**
+ * Type of port-pair-group events.
+ */
+ public enum Type {
+ /**
+ * Signifies that port-pair-group has been created.
+ */
+ PORT_PAIR_GROUP_PUT,
+ /**
+ * Signifies that port-pair-group has been deleted.
+ */
+ PORT_PAIR_GROUP_DELETE,
+ /**
+ * Signifies that port-pair-group has been updated.
+ */
+ PORT_PAIR_GROUP_UPDATE
+ }
+
+ /**
+ * Creates an event of a given type and for the specified Port-Pair-Group.
+ *
+ * @param type Port-Pair-Group event type
+ * @param portPairGroup Port-Pair-Group subject
+ */
+ public PortPairGroupEvent(Type type, PortPairGroup portPairGroup) {
+ super(type, portPairGroup);
+ }
+
+ /**
+ * Creates an event of a given type and for the specified Port-Pair-Group.
+ *
+ * @param type Port-Pair-Group event type
+ * @param portPairGroup Port-Pair-Group subject
+ * @param time occurrence time
+ */
+ public PortPairGroupEvent(Type type, PortPairGroup portPairGroup, long time) {
+ super(type, portPairGroup, time);
+ }
+}
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/PortPairGroupListener.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/PortPairGroupListener.java
new file mode 100644
index 00000000..637149e3
--- /dev/null
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/PortPairGroupListener.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.vtnrsc.portpairgroup;
+
+import org.onosproject.event.EventListener;
+
+/**
+ * Entity capable of Port-Pair-Group related events.
+ */
+public interface PortPairGroupListener extends EventListener<PortPairGroupEvent> {
+
+}
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/PortPairGroupService.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/PortPairGroupService.java
index 77f483fc..efee0eb9 100644
--- a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/PortPairGroupService.java
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/PortPairGroupService.java
@@ -77,4 +77,18 @@ public interface PortPairGroupService {
* @return true if the give port pair group is deleted successfully.
*/
boolean removePortPairGroup(PortPairGroupId portPairGroupId);
+
+ /**
+ * Adds the specified listener to Port-Pair-Group manager.
+ *
+ * @param listener Port-Pair-Group listener
+ */
+ void addListener(PortPairGroupListener listener);
+
+ /**
+ * Removes the specified listener to Port-Pair-Group manager.
+ *
+ * @param listener Port-Pair-Group listener
+ */
+ void removeListener(PortPairGroupListener listener);
}
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/impl/PortPairGroupManager.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/impl/PortPairGroupManager.java
index 55fb4e43..5f80ef64 100644
--- a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/impl/PortPairGroupManager.java
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/impl/PortPairGroupManager.java
@@ -19,6 +19,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
import static org.slf4j.LoggerFactory.getLogger;
import java.util.Collections;
+import java.util.Set;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
@@ -34,9 +35,12 @@ import org.onosproject.store.service.StorageService;
import org.onosproject.store.service.WallClockTimestamp;
import org.onosproject.vtnrsc.PortPairGroup;
import org.onosproject.vtnrsc.PortPairGroupId;
+import org.onosproject.vtnrsc.portpairgroup.PortPairGroupListener;
import org.onosproject.vtnrsc.portpairgroup.PortPairGroupService;
import org.slf4j.Logger;
+import com.google.common.collect.Sets;
+
/**
* Provides implementation of the portPairGroupService.
*/
@@ -44,11 +48,12 @@ import org.slf4j.Logger;
@Service
public class PortPairGroupManager implements PortPairGroupService {
- private final Logger log = getLogger(getClass());
-
private static final String PORT_PAIR_GROUP_ID_NULL = "PortPairGroup ID cannot be null";
private static final String PORT_PAIR_GROUP_NULL = "PortPairGroup cannot be null";
+ private static final String LISTENER_NOT_NULL = "Listener cannot be null";
+ private final Logger log = getLogger(getClass());
+ private final Set<PortPairGroupListener> listeners = Sets.newCopyOnWriteArraySet();
private EventuallyConsistentMap<PortPairGroupId, PortPairGroup> portPairGroupStore;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
@@ -73,6 +78,7 @@ public class PortPairGroupManager implements PortPairGroupService {
@Deactivate
public void deactivate() {
portPairGroupStore.destroy();
+ listeners.clear();
log.info("Stopped");
}
@@ -143,4 +149,16 @@ public class PortPairGroupManager implements PortPairGroupService {
}
return true;
}
+
+ @Override
+ public void addListener(PortPairGroupListener listener) {
+ checkNotNull(listener, LISTENER_NOT_NULL);
+ listeners.add(listener);
+ }
+
+ @Override
+ public void removeListener(PortPairGroupListener listener) {
+ checkNotNull(listener, LISTENER_NOT_NULL);
+ listeners.remove(listener);
+ }
}
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/service/VtnRscService.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/service/VtnRscService.java
index 21161ba5..bc9f4e68 100644
--- a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/service/VtnRscService.java
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/service/VtnRscService.java
@@ -18,32 +18,20 @@ package org.onosproject.vtnrsc.service;
import java.util.Iterator;
import org.onlab.packet.MacAddress;
+import org.onosproject.event.ListenerService;
import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
import org.onosproject.net.HostId;
import org.onosproject.vtnrsc.SegmentationId;
import org.onosproject.vtnrsc.TenantId;
import org.onosproject.vtnrsc.VirtualPortId;
+import org.onosproject.vtnrsc.event.VtnRscEvent;
import org.onosproject.vtnrsc.event.VtnRscListener;
/**
* Service for interacting with the inventory of Vtn resource.
*/
-public interface VtnRscService {
- /**
- * Adds the specified listener.
- *
- * @param listener VtnRsc listener
- */
- void addListener(VtnRscListener listener);
-
- /**
- * Removes the specified listener.
- *
- * @param listener VtnRsc listener
- */
- void removeListener(VtnRscListener listener);
-
+public interface VtnRscService extends ListenerService<VtnRscEvent, VtnRscListener> {
/**
* Returns the SegmentationId of tenant.
*
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/service/impl/VtnRscManager.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/service/impl/VtnRscManager.java
index ec9ca3ef..b21ad200 100644
--- a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/service/impl/VtnRscManager.java
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/service/impl/VtnRscManager.java
@@ -32,6 +32,7 @@ import org.onlab.packet.IpAddress;
import org.onlab.packet.MacAddress;
import org.onlab.util.KryoNamespace;
import org.onosproject.core.CoreService;
+import org.onosproject.event.AbstractListenerManager;
import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
import org.onosproject.net.Host;
@@ -54,6 +55,11 @@ import org.onosproject.vtnrsc.SubnetId;
import org.onosproject.vtnrsc.TenantId;
import org.onosproject.vtnrsc.VirtualPort;
import org.onosproject.vtnrsc.VirtualPortId;
+import org.onosproject.vtnrsc.PortPair;
+import org.onosproject.vtnrsc.PortPairId;
+import org.onosproject.vtnrsc.PortPairGroup;
+import org.onosproject.vtnrsc.FlowClassifier;
+import org.onosproject.vtnrsc.PortChain;
import org.onosproject.vtnrsc.event.VtnRscEvent;
import org.onosproject.vtnrsc.event.VtnRscEventFeedback;
import org.onosproject.vtnrsc.event.VtnRscListener;
@@ -70,16 +76,27 @@ import org.onosproject.vtnrsc.service.VtnRscService;
import org.onosproject.vtnrsc.subnet.SubnetService;
import org.onosproject.vtnrsc.tenantnetwork.TenantNetworkService;
import org.onosproject.vtnrsc.virtualport.VirtualPortService;
+import org.onosproject.vtnrsc.portpair.PortPairEvent;
+import org.onosproject.vtnrsc.portpair.PortPairListener;
+import org.onosproject.vtnrsc.portpair.PortPairService;
+import org.onosproject.vtnrsc.portpairgroup.PortPairGroupEvent;
+import org.onosproject.vtnrsc.portpairgroup.PortPairGroupListener;
+import org.onosproject.vtnrsc.portpairgroup.PortPairGroupService;
+import org.onosproject.vtnrsc.flowclassifier.FlowClassifierEvent;
+import org.onosproject.vtnrsc.flowclassifier.FlowClassifierListener;
+import org.onosproject.vtnrsc.flowclassifier.FlowClassifierService;
+import org.onosproject.vtnrsc.portchain.PortChainEvent;
+import org.onosproject.vtnrsc.portchain.PortChainListener;
+import org.onosproject.vtnrsc.portchain.PortChainService;
import org.slf4j.Logger;
-import com.google.common.collect.Sets;
-
/**
* Provides implementation of the VtnRsc service.
*/
@Component(immediate = true)
@Service
-public class VtnRscManager implements VtnRscService {
+public class VtnRscManager extends AbstractListenerManager<VtnRscEvent, VtnRscListener>
+ implements VtnRscService {
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected CoreService coreService;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
@@ -88,11 +105,14 @@ public class VtnRscManager implements VtnRscService {
protected LogicalClockService clockService;
private final Logger log = getLogger(getClass());
- private final Set<VtnRscListener> listeners = Sets.newCopyOnWriteArraySet();
private HostListener hostListener = new InnerHostListener();
private FloatingIpListener floatingIpListener = new InnerFloatingIpListener();
private RouterListener routerListener = new InnerRouterListener();
private RouterInterfaceListener routerInterfaceListener = new InnerRouterInterfaceListener();
+ private PortPairListener portPairListener = new InnerPortPairListener();
+ private PortPairGroupListener portPairGroupListener = new InnerPortPairGroupListener();
+ private FlowClassifierListener flowClassifierListener = new InnerFlowClassifierListener();
+ private PortChainListener portChainListener = new InnerPortChainListener();
private EventuallyConsistentMap<TenantId, SegmentationId> l3vniMap;
private EventuallyConsistentMap<TenantId, Set<DeviceId>> classifierOvsMap;
@@ -125,6 +145,14 @@ public class VtnRscManager implements VtnRscService {
protected TenantNetworkService tenantNetworkService;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected DeviceService deviceService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected PortPairService portPairService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected PortPairGroupService portPairGroupService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected FlowClassifierService flowClassifierService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected PortChainService portChainService;
@Activate
public void activate() {
@@ -132,6 +160,10 @@ public class VtnRscManager implements VtnRscService {
floatingIpService.addListener(floatingIpListener);
routerService.addListener(routerListener);
routerInterfaceService.addListener(routerInterfaceListener);
+ portPairService.addListener(portPairListener);
+ portPairGroupService.addListener(portPairGroupListener);
+ flowClassifierService.addListener(flowClassifierListener);
+ portChainService.addListener(portChainListener);
KryoNamespace.Builder serializer = KryoNamespace.newBuilder()
.register(KryoNamespaces.API)
@@ -161,26 +193,18 @@ public class VtnRscManager implements VtnRscService {
floatingIpService.removeListener(floatingIpListener);
routerService.removeListener(routerListener);
routerInterfaceService.removeListener(routerInterfaceListener);
+ portPairService.removeListener(portPairListener);
+ portPairGroupService.removeListener(portPairGroupListener);
+ flowClassifierService.removeListener(flowClassifierListener);
+ portChainService.removeListener(portChainListener);
+
l3vniMap.destroy();
classifierOvsMap.destroy();
sffOvsMap.destroy();
- listeners.clear();
log.info("Stopped");
}
@Override
- public void addListener(VtnRscListener listener) {
- checkNotNull(listener, LISTENER_NOT_NULL);
- listeners.add(listener);
- }
-
- @Override
- public void removeListener(VtnRscListener listener) {
- checkNotNull(listener, LISTENER_NOT_NULL);
- listeners.add(listener);
- }
-
- @Override
public SegmentationId getL3vni(TenantId tenantId) {
checkNotNull(tenantId, "tenantId cannot be null");
SegmentationId l3vni = l3vniMap.get(tenantId);
@@ -282,6 +306,93 @@ public class VtnRscManager implements VtnRscService {
}
}
+ private class InnerPortPairListener implements PortPairListener {
+
+ @Override
+ public void event(PortPairEvent event) {
+ checkNotNull(event, EVENT_NOT_NULL);
+ PortPair portPair = event.subject();
+ if (PortPairEvent.Type.PORT_PAIR_PUT == event.type()) {
+ notifyListeners(new VtnRscEvent(VtnRscEvent.Type.PORT_PAIR_PUT,
+ new VtnRscEventFeedback(portPair)));
+ } else if (PortPairEvent.Type.PORT_PAIR_DELETE == event.type()) {
+ notifyListeners(new VtnRscEvent(
+ VtnRscEvent.Type.PORT_PAIR_DELETE,
+ new VtnRscEventFeedback(portPair)));
+ } else if (PortPairEvent.Type.PORT_PAIR_UPDATE == event.type()) {
+ notifyListeners(new VtnRscEvent(
+ VtnRscEvent.Type.PORT_PAIR_UPDATE,
+ new VtnRscEventFeedback(portPair)));
+ }
+ }
+ }
+
+ private class InnerPortPairGroupListener implements PortPairGroupListener {
+
+ @Override
+ public void event(PortPairGroupEvent event) {
+ checkNotNull(event, EVENT_NOT_NULL);
+ PortPairGroup portPairGroup = event.subject();
+ if (PortPairGroupEvent.Type.PORT_PAIR_GROUP_PUT == event.type()) {
+ notifyListeners(new VtnRscEvent(
+ VtnRscEvent.Type.PORT_PAIR_GROUP_PUT,
+ new VtnRscEventFeedback(portPairGroup)));
+ } else if (PortPairGroupEvent.Type.PORT_PAIR_GROUP_DELETE == event.type()) {
+ notifyListeners(new VtnRscEvent(
+ VtnRscEvent.Type.PORT_PAIR_GROUP_DELETE,
+ new VtnRscEventFeedback(portPairGroup)));
+ } else if (PortPairGroupEvent.Type.PORT_PAIR_GROUP_UPDATE == event.type()) {
+ notifyListeners(new VtnRscEvent(
+ VtnRscEvent.Type.PORT_PAIR_GROUP_UPDATE,
+ new VtnRscEventFeedback(portPairGroup)));
+ }
+ }
+ }
+
+ private class InnerFlowClassifierListener implements FlowClassifierListener {
+
+ @Override
+ public void event(FlowClassifierEvent event) {
+ checkNotNull(event, EVENT_NOT_NULL);
+ FlowClassifier flowClassifier = event.subject();
+ if (FlowClassifierEvent.Type.FLOW_CLASSIFIER_PUT == event.type()) {
+ notifyListeners(new VtnRscEvent(
+ VtnRscEvent.Type.FLOW_CLASSIFIER_PUT,
+ new VtnRscEventFeedback(flowClassifier)));
+ } else if (FlowClassifierEvent.Type.FLOW_CLASSIFIER_DELETE == event.type()) {
+ notifyListeners(new VtnRscEvent(
+ VtnRscEvent.Type.FLOW_CLASSIFIER_DELETE,
+ new VtnRscEventFeedback(flowClassifier)));
+ } else if (FlowClassifierEvent.Type.FLOW_CLASSIFIER_UPDATE == event.type()) {
+ notifyListeners(new VtnRscEvent(
+ VtnRscEvent.Type.FLOW_CLASSIFIER_UPDATE,
+ new VtnRscEventFeedback(flowClassifier)));
+ }
+ }
+ }
+
+ private class InnerPortChainListener implements PortChainListener {
+
+ @Override
+ public void event(PortChainEvent event) {
+ checkNotNull(event, EVENT_NOT_NULL);
+ PortChain portChain = event.subject();
+ if (PortChainEvent.Type.PORT_CHAIN_PUT == event.type()) {
+ notifyListeners(new VtnRscEvent(
+ VtnRscEvent.Type.PORT_CHAIN_PUT,
+ new VtnRscEventFeedback(portChain)));
+ } else if (PortChainEvent.Type.PORT_CHAIN_DELETE == event.type()) {
+ notifyListeners(new VtnRscEvent(
+ VtnRscEvent.Type.PORT_CHAIN_DELETE,
+ new VtnRscEventFeedback(portChain)));
+ } else if (PortChainEvent.Type.PORT_CHAIN_UPDATE == event.type()) {
+ notifyListeners(new VtnRscEvent(
+ VtnRscEvent.Type.PORT_CHAIN_UPDATE,
+ new VtnRscEventFeedback(portChain)));
+ }
+ }
+ }
+
@Override
public Iterator<Device> getClassifierOfTenant(TenantId tenantId) {
checkNotNull(tenantId, TENANTID_NOT_NULL);
@@ -333,8 +444,7 @@ public class VtnRscManager implements VtnRscService {
@Override
public boolean isServiceFunction(VirtualPortId portId) {
- // TODO Auto-generated method stub
- return false;
+ return portPairService.exists(PortPairId.of(portId.portId()));
}
@Override
@@ -343,7 +453,7 @@ public class VtnRscManager implements VtnRscService {
VirtualPort vmPort = virtualPortService.getPort(portId);
Set<Host> hostSet = hostService.getHostsByMac(vmPort.macAddress());
for (Host host : hostSet) {
- if (host.annotations().value(IFACEID).equals(vmPort.portId())) {
+ if (host.annotations().value(IFACEID).equals(vmPort.portId().portId())) {
return host.location().deviceId();
}
}
@@ -467,6 +577,6 @@ public class VtnRscManager implements VtnRscService {
*/
private void notifyListeners(VtnRscEvent event) {
checkNotNull(event, EVENT_NOT_NULL);
- listeners.forEach(listener -> listener.event(event));
+ post(event);
}
}
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/VirtualPortService.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/VirtualPortService.java
index 0a3ea2cd..19548db8 100644
--- a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/VirtualPortService.java
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/VirtualPortService.java
@@ -17,6 +17,7 @@ package org.onosproject.vtnrsc.virtualport;
import java.util.Collection;
+import org.onlab.packet.IpAddress;
import org.onosproject.net.DeviceId;
import org.onosproject.vtnrsc.FixedIp;
import org.onosproject.vtnrsc.TenantId;
@@ -53,6 +54,15 @@ public interface VirtualPortService {
VirtualPort getPort(FixedIp fixedIP);
/**
+ * Returns the virtualPort associated with the networkId and ip.
+ *
+ * @param networkId the TenantNetworkId identifier
+ * @param ip the ip identifier
+ * @return virtualPort.
+ */
+ VirtualPort getPort(TenantNetworkId networkId, IpAddress ip);
+
+ /**
* Returns the collection of the currently known virtualPort.
* @return collection of VirtualPort.
*/
diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/impl/VirtualPortManager.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/impl/VirtualPortManager.java
index daec7839..9639e086 100644
--- a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/impl/VirtualPortManager.java
+++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/impl/VirtualPortManager.java
@@ -72,6 +72,7 @@ public class VirtualPortManager implements VirtualPortService {
private static final String NETWORKID_NOT_NULL = "NetworkId cannot be null";
private static final String DEVICEID_NOT_NULL = "DeviceId cannot be null";
private static final String FIXEDIP_NOT_NULL = "FixedIp cannot be null";
+ private static final String IP_NOT_NULL = "Ip cannot be null";
protected Map<VirtualPortId, VirtualPort> vPortStore;
protected ApplicationId appId;
@@ -148,6 +149,27 @@ public class VirtualPortManager implements VirtualPortService {
}
@Override
+ public VirtualPort getPort(TenantNetworkId networkId, IpAddress ip) {
+ checkNotNull(networkId, NETWORKID_NOT_NULL);
+ checkNotNull(ip, IP_NOT_NULL);
+ List<VirtualPort> vPorts = new ArrayList<>();
+ vPortStore.values().stream().filter(p -> p.networkId().equals(networkId))
+ .forEach(p -> {
+ Iterator<FixedIp> fixedIps = p.fixedIps().iterator();
+ while (fixedIps.hasNext()) {
+ if (fixedIps.next().ip().equals(ip)) {
+ vPorts.add(p);
+ break;
+ }
+ }
+ });
+ if (vPorts.size() == 0) {
+ return null;
+ }
+ return vPorts.get(0);
+ }
+
+ @Override
public Collection<VirtualPort> getPorts() {
return Collections.unmodifiableCollection(vPortStore.values());
}