Added getFactory() method to IOFSwitch to get a message factory appropriate
for the switch's OpenFlow version.
This prevents users of the switch having to discriminate what factory to use
based on the switch OpenFlow version.
Change-Id: Iac0454856e35f4429649a6f116da34f4c048f25d
diff --git a/src/main/java/net/floodlightcontroller/core/internal/Controller.java b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
index e80311b..b47962f 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/Controller.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
@@ -35,7 +35,6 @@
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
@@ -938,12 +937,21 @@
// }
// }
- @Override
+
+ /**
+ * Gets an OpenFlow message factory for version 1.0.
+ *
+ * @return an OpenFlow 1.0 message factory
+ */
public OFFactory getOFMessageFactory_10() {
return factory10;
}
- @Override
+ /**
+ * Gets an OpenFlow message factory for version 1.3.
+ *
+ * @return an OpenFlow 1.3 message factory
+ */
public OFFactory getOFMessageFactory_13() {
return factory13;
}
diff --git a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java
index c3d6e63..1b2b0cf 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java
@@ -62,6 +62,8 @@
import org.projectfloodlight.openflow.protocol.OFActionType;
import org.projectfloodlight.openflow.protocol.OFCapabilities;
import org.projectfloodlight.openflow.protocol.OFDescStatsReply;
+import org.projectfloodlight.openflow.protocol.OFFactories;
+import org.projectfloodlight.openflow.protocol.OFFactory;
import org.projectfloodlight.openflow.protocol.OFFeaturesReply;
import org.projectfloodlight.openflow.protocol.OFMessage;
import org.projectfloodlight.openflow.protocol.OFPortConfig;
@@ -269,14 +271,19 @@
return stringId;
}
- /** Retrieve the openflow version (eg. OF1.0, OF1.3) for this switch
- */
- public OFVersion getOFVersion() {
- return ofversion;
+ @Override
+ public OFFactory getFactory() {
+ return OFFactories.getFactory(ofversion);
}
+ @Override
+ public OFVersion getOFVersion() {
+ return ofversion;
+ }
+
+ @Override
public void setOFVersion(OFVersion ofv) {
- ofversion = ofv;
+ ofversion = ofv;
}
/**
@@ -1223,10 +1230,10 @@
public void clearAllFlowMods() {
// Delete all pre-existing flows
- // by default if match is not specified, then an empty list of matches
- // is sent, resulting in a wildcard-all flows
- // XXX fix this later
- OFMessage fm = floodlightProvider.getOFMessageFactory_13()
+ // by default if match is not specified, then an empty list of matches
+ // is sent, resulting in a wildcard-all flows
+ // XXX fix this later to be sure it works for both 1.0 and 1.3
+ OFMessage fm = getFactory()
.buildFlowDelete()
.setOutPort(OFPort.ANY)
.setOutGroup(OFGroup.ANY)