simple device provider added
diff --git a/of/api/src/main/java/org/onlab/onos/of/controller/driver/AbstractOpenFlowSwitch.java b/of/api/src/main/java/org/onlab/onos/of/controller/driver/AbstractOpenFlowSwitch.java
index ce6365a..7ba5a5d 100644
--- a/of/api/src/main/java/org/onlab/onos/of/controller/driver/AbstractOpenFlowSwitch.java
+++ b/of/api/src/main/java/org/onlab/onos/of/controller/driver/AbstractOpenFlowSwitch.java
@@ -219,6 +219,7 @@
@Override
public void setRole(RoleState role) {
try {
+ log.info("Sending role {} to switch {}", role, getStringId());
if (this.roleMan.sendRoleRequest(role, RoleRecvStatus.MATCHED_SET_ROLE)) {
this.role = role;
}
diff --git a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/Controller.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/Controller.java
similarity index 98%
rename from of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/Controller.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/Controller.java
index ab9315f..e2cb693 100644
--- a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/Controller.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/Controller.java
@@ -15,7 +15,7 @@
* under the License.
**/
-package org.onlab.onos.of.controller.impl.internal;
+package org.onlab.onos.of.controller.impl;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
@@ -34,7 +34,7 @@
import org.onlab.onos.of.controller.driver.OpenFlowSwitchDriver;
import org.onlab.onos.of.controller.impl.annotations.LogMessageDoc;
import org.onlab.onos.of.controller.impl.annotations.LogMessageDocs;
-import org.onlab.onos.of.drivers.DriverManager;
+import org.onlab.onos.of.drivers.impl.DriverManager;
import org.projectfloodlight.openflow.protocol.OFDescStatsReply;
import org.projectfloodlight.openflow.protocol.OFFactories;
import org.projectfloodlight.openflow.protocol.OFFactory;
diff --git a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/HandshakeTimeoutException.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/HandshakeTimeoutException.java
similarity index 94%
rename from of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/HandshakeTimeoutException.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/HandshakeTimeoutException.java
index c199487..f3eac5f 100644
--- a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/HandshakeTimeoutException.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/HandshakeTimeoutException.java
@@ -15,7 +15,7 @@
* under the License.
**/
-package org.onlab.onos.of.controller.impl.internal;
+package org.onlab.onos.of.controller.impl;
/**
* Exception is thrown when the handshake fails to complete.
diff --git a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/HandshakeTimeoutHandler.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/HandshakeTimeoutHandler.java
similarity index 98%
rename from of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/HandshakeTimeoutHandler.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/HandshakeTimeoutHandler.java
index 10a42ca..de7853a 100644
--- a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/HandshakeTimeoutHandler.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/HandshakeTimeoutHandler.java
@@ -15,7 +15,7 @@
* under the License.
**/
-package org.onlab.onos.of.controller.impl.internal;
+package org.onlab.onos.of.controller.impl;
import java.util.concurrent.TimeUnit;
diff --git a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/IOFSwitchManager.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/IOFSwitchManager.java
similarity index 93%
rename from of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/IOFSwitchManager.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/IOFSwitchManager.java
index 035c4ca..ec12ad5 100644
--- a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/IOFSwitchManager.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/IOFSwitchManager.java
@@ -1,4 +1,4 @@
-package org.onlab.onos.of.controller.impl.internal;
+package org.onlab.onos.of.controller.impl;
import org.onlab.onos.of.controller.driver.AbstractOpenFlowSwitch;
import org.projectfloodlight.openflow.protocol.OFVersion;
diff --git a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OFChannelHandler.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/OFChannelHandler.java
similarity index 99%
rename from of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OFChannelHandler.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/OFChannelHandler.java
index 768362f..66c1e60 100644
--- a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OFChannelHandler.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/OFChannelHandler.java
@@ -1,5 +1,5 @@
//CHECKSTYLE:OFF
-package org.onlab.onos.of.controller.impl.internal;
+package org.onlab.onos.of.controller.impl;
import java.io.IOException;
import java.nio.channels.ClosedChannelException;
@@ -415,17 +415,18 @@
OFDescStatsReply drep = (OFDescStatsReply) m;
// Here is where we differentiate between different kinds of switches
h.sw = h.controller.getOFSwitchInstance(h.thisdpid, drep, h.ofVersion);
+ h.sw.setOFVersion(h.ofVersion);
+ h.sw.setFeaturesReply(h.featuresReply);
+ h.sw.setPortDescReply(h.portDescReply);
+ h.sw.setConnected(true);
+ h.sw.setChannel(h.channel);
boolean success = h.sw.connectSwitch();
if (!success) {
disconnectDuplicate(h);
return;
}
// set switch information
- h.sw.setOFVersion(h.ofVersion);
- h.sw.setFeaturesReply(h.featuresReply);
- h.sw.setPortDescReply(h.portDescReply);
- h.sw.setConnected(true);
- h.sw.setChannel(h.channel);
+
log.info("Switch {} bound to class {}, description {}",
diff --git a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OFMessageDecoder.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/OFMessageDecoder.java
similarity index 97%
rename from of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OFMessageDecoder.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/OFMessageDecoder.java
index 3035103..d310613 100644
--- a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OFMessageDecoder.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/OFMessageDecoder.java
@@ -15,7 +15,7 @@
* under the License.
**/
-package org.onlab.onos.of.controller.impl.internal;
+package org.onlab.onos.of.controller.impl;
import org.jboss.netty.buffer.ChannelBuffer;
diff --git a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OFMessageEncoder.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/OFMessageEncoder.java
similarity index 97%
rename from of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OFMessageEncoder.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/OFMessageEncoder.java
index 14a6db5..35d84b4 100644
--- a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OFMessageEncoder.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/OFMessageEncoder.java
@@ -15,7 +15,7 @@
* under the License.
**/
-package org.onlab.onos.of.controller.impl.internal;
+package org.onlab.onos.of.controller.impl;
import java.util.List;
diff --git a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OpenFlowControllerImpl.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/OpenFlowControllerImpl.java
similarity index 93%
rename from of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OpenFlowControllerImpl.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/OpenFlowControllerImpl.java
index b7ba4c7..ac10021 100644
--- a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OpenFlowControllerImpl.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/OpenFlowControllerImpl.java
@@ -1,4 +1,4 @@
-package org.onlab.onos.of.controller.impl.internal;
+package org.onlab.onos.of.controller.impl;
import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap;
@@ -15,7 +15,6 @@
import org.onlab.onos.of.controller.OpenFlowSwitchListener;
import org.onlab.onos.of.controller.PacketListener;
import org.onlab.onos.of.controller.RoleState;
-import org.onlab.onos.of.controller.driver.AbstractOpenFlowSwitch;
import org.onlab.onos.of.controller.driver.OpenFlowAgent;
import org.projectfloodlight.openflow.protocol.OFMessage;
import org.slf4j.Logger;
@@ -68,17 +67,18 @@
@Override
public OpenFlowSwitch getSwitch(Dpid dpid) {
- return connectedSwitches.get(dpid.value());
+ return connectedSwitches.get(dpid);
}
@Override
public OpenFlowSwitch getMasterSwitch(Dpid dpid) {
- return activeMasterSwitches.get(dpid.value());
+ return activeMasterSwitches.get(dpid);
}
@Override
public OpenFlowSwitch getEqualSwitch(Dpid dpid) {
- return activeEqualSwitches.get(dpid.value()); }
+ return activeEqualSwitches.get(dpid);
+ }
@Override
public void addListener(OpenFlowSwitchListener listener) {
@@ -116,9 +116,15 @@
@Override
public void setRole(Dpid dpid, RoleState role) {
- ((AbstractOpenFlowSwitch) getSwitch(dpid)).setRole(role);
+ getSwitch(dpid).setRole(role);
}
+ /**
+ * Implementation of an OpenFlow Agent which is responsible for
+ * keeping track of connected switches and the state in which
+ * they are.
+ *
+ */
public class OpenFlowSwitchAgent implements OpenFlowAgent {
private final Logger log = LoggerFactory.getLogger(OpenFlowSwitchAgent.class);
@@ -204,6 +210,7 @@
+ "was not found in controller-cache", dpid);
return;
}
+ log.info("Transitioned switch {} to MASTER", dpid);
activeMasterSwitches.put(dpid, sw);
} finally {
switchLock.unlock();
@@ -224,6 +231,7 @@
+ "was not found in controller-cache", dpid);
return;
}
+ log.info("Transitioned switch {} to EQUAL", dpid);
activeEqualSwitches.put(dpid, sw);
} finally {
switchLock.unlock();
diff --git a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OpenflowPipelineFactory.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/OpenflowPipelineFactory.java
similarity index 98%
rename from of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OpenflowPipelineFactory.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/OpenflowPipelineFactory.java
index 02e3520..1e34a3e 100644
--- a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OpenflowPipelineFactory.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/OpenflowPipelineFactory.java
@@ -15,7 +15,7 @@
* under the License.
**/
-package org.onlab.onos.of.controller.impl.internal;
+package org.onlab.onos.of.controller.impl;
import java.util.concurrent.ThreadPoolExecutor;
diff --git a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/RoleManager.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/RoleManager.java
similarity index 99%
rename from of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/RoleManager.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/RoleManager.java
index 235eb61..f82a46c 100644
--- a/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/RoleManager.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/RoleManager.java
@@ -1,4 +1,4 @@
-package org.onlab.onos.of.controller.impl.internal;
+package org.onlab.onos.of.controller.impl;
import java.io.IOException;
import java.util.Collections;
diff --git a/of/ctl/src/main/java/org/onlab/onos/of/drivers/DriverManager.java b/of/ctl/src/main/java/org/onlab/onos/of/drivers/impl/DriverManager.java
similarity index 98%
rename from of/ctl/src/main/java/org/onlab/onos/of/drivers/DriverManager.java
rename to of/ctl/src/main/java/org/onlab/onos/of/drivers/impl/DriverManager.java
index 97f94d3..2c72c17 100644
--- a/of/ctl/src/main/java/org/onlab/onos/of/drivers/DriverManager.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/drivers/impl/DriverManager.java
@@ -1,4 +1,4 @@
-package org.onlab.onos.of.drivers;
+package org.onlab.onos.of.drivers.impl;
diff --git a/of/ctl/src/main/java/org/onlab/onos/of/drivers/OFSwitchImplCPqD13.java b/of/ctl/src/main/java/org/onlab/onos/of/drivers/impl/OFSwitchImplCPqD13.java
similarity index 99%
rename from of/ctl/src/main/java/org/onlab/onos/of/drivers/OFSwitchImplCPqD13.java
rename to of/ctl/src/main/java/org/onlab/onos/of/drivers/impl/OFSwitchImplCPqD13.java
index b2881ba..e80b751 100644
--- a/of/ctl/src/main/java/org/onlab/onos/of/drivers/OFSwitchImplCPqD13.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/drivers/impl/OFSwitchImplCPqD13.java
@@ -1,4 +1,4 @@
-package org.onlab.onos.of.drivers;
+package org.onlab.onos.of.drivers.impl;
import java.io.IOException;
import java.util.ArrayList;
diff --git a/of/ctl/src/main/java/org/onlab/onos/of/drivers/OFSwitchImplOVS10.java b/of/ctl/src/main/java/org/onlab/onos/of/drivers/impl/OFSwitchImplOVS10.java
similarity index 97%
rename from of/ctl/src/main/java/org/onlab/onos/of/drivers/OFSwitchImplOVS10.java
rename to of/ctl/src/main/java/org/onlab/onos/of/drivers/impl/OFSwitchImplOVS10.java
index bc42636..0a311f3 100644
--- a/of/ctl/src/main/java/org/onlab/onos/of/drivers/OFSwitchImplOVS10.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/drivers/impl/OFSwitchImplOVS10.java
@@ -1,4 +1,4 @@
-package org.onlab.onos.of.drivers;
+package org.onlab.onos.of.drivers.impl;
import java.util.List;
diff --git a/of/ctl/src/main/java/org/onlab/onos/of/drivers/OFSwitchImplOVS13.java b/of/ctl/src/main/java/org/onlab/onos/of/drivers/impl/OFSwitchImplOVS13.java
similarity index 98%
rename from of/ctl/src/main/java/org/onlab/onos/of/drivers/OFSwitchImplOVS13.java
rename to of/ctl/src/main/java/org/onlab/onos/of/drivers/impl/OFSwitchImplOVS13.java
index 40750f7..bb6bb23 100644
--- a/of/ctl/src/main/java/org/onlab/onos/of/drivers/OFSwitchImplOVS13.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/drivers/impl/OFSwitchImplOVS13.java
@@ -1,4 +1,4 @@
-package org.onlab.onos.of.drivers;
+package org.onlab.onos.of.drivers.impl;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
diff --git a/providers/of/device/src/main/java/org/onlab/onos/provider/of/device/impl/OpenFlowDeviceProvider.java b/providers/of/device/src/main/java/org/onlab/onos/provider/of/device/impl/OpenFlowDeviceProvider.java
index f63b448..f7e3c95 100644
--- a/providers/of/device/src/main/java/org/onlab/onos/provider/of/device/impl/OpenFlowDeviceProvider.java
+++ b/providers/of/device/src/main/java/org/onlab/onos/provider/of/device/impl/OpenFlowDeviceProvider.java
@@ -1,22 +1,30 @@
package org.onlab.onos.provider.of.device.impl;
+import static org.slf4j.LoggerFactory.getLogger;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
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.onlab.onos.net.Device;
+import org.onlab.onos.net.DeviceId;
import org.onlab.onos.net.MastershipRole;
+import org.onlab.onos.net.device.DeviceDescription;
import org.onlab.onos.net.device.DeviceProvider;
import org.onlab.onos.net.device.DeviceProviderRegistry;
import org.onlab.onos.net.device.DeviceProviderService;
import org.onlab.onos.net.provider.AbstractProvider;
import org.onlab.onos.net.provider.ProviderId;
+import org.onlab.onos.of.controller.Dpid;
import org.onlab.onos.of.controller.OpenFlowController;
+import org.onlab.onos.of.controller.OpenFlowSwitchListener;
+import org.onlab.onos.of.controller.RoleState;
import org.slf4j.Logger;
-import static org.slf4j.LoggerFactory.getLogger;
-
/**
* Provider which uses an OpenFlow controller to detect network
* infrastructure devices.
@@ -44,6 +52,7 @@
@Activate
public void activate() {
providerService = providerRegistry.register(this);
+ controller.addListener(new InternalDeviceProvider());
log.info("Started");
}
@@ -61,7 +70,55 @@
@Override
public void roleChanged(Device device, MastershipRole newRole) {
+ switch (newRole) {
+ case MASTER:
+ controller.setRole(new Dpid(device.id().uri().getSchemeSpecificPart()),
+ RoleState.MASTER);
+ break;
+ case STANDBY:
+ controller.setRole(new Dpid(device.id().uri().getSchemeSpecificPart()),
+ RoleState.EQUAL);
+ case NONE:
+ controller.setRole(new Dpid(device.id().uri().getSchemeSpecificPart()),
+ RoleState.SLAVE);
+ break;
+ default:
+ log.error("Unknown Mastership state : {}", newRole);
+
+ }
log.info("Accepting mastership role change for device {}", device.id());
}
+ private class InternalDeviceProvider implements OpenFlowSwitchListener {
+
+ @Override
+ public void switchAdded(final Dpid dpid) {
+ URI uri = buildURI(dpid);
+ providerService.deviceConnected(new DeviceId(uri), new DeviceDescription() {
+
+ @Override
+ public URI deviceURI() {
+ return buildURI(dpid);
+ }
+ });
+ }
+
+ @Override
+ public void switchRemoved(Dpid dpid) {
+ URI uri = buildURI(dpid);
+ providerService.deviceDisconnected(new DeviceId(uri));
+ }
+
+ private URI buildURI(Dpid dpid) {
+ URI uri = null;
+ try {
+ uri = new URI("of", Long.toHexString(dpid.value()), null);
+ } catch (URISyntaxException e) {
+ log.warn("URI construction for device {} failed.", dpid);
+ }
+ return uri;
+ }
+
+ }
+
}