* Added initial support for add/get/delete Flow state to the Network MAP via the REST API
NOTE: The "add" REST API can't be used as-is.
* Added initial support for reading the Flow state from the Network MAP by the Controller
and sending it to the switches.
Currently, the Controller reads periodically the Flow entries (every 3 seconds)
NOTE: The writing of the OpenFlow state to the switches is not tested.
The Python scripts for to add/delete/get flows are intentionally omitted until
the "add" REST API issue is resolved.
NOTE: Two new keys have been added to the database: "flow_id" and "flow_entry_id".
This requires that the older database should be deleted, because Cassandra
doesn't allow adding new keys to an existing database.
diff --git a/src/main/java/net/floodlightcontroller/core/INetMapTopologyObjects.java b/src/main/java/net/floodlightcontroller/core/INetMapTopologyObjects.java
index 4af1deb..8788aa7 100644
--- a/src/main/java/net/floodlightcontroller/core/INetMapTopologyObjects.java
+++ b/src/main/java/net/floodlightcontroller/core/INetMapTopologyObjects.java
@@ -132,4 +132,101 @@
@GremlinGroovy("_().in('host').in('on').path(){it.number}{it.dpid}")
public Iterable<SwitchPort> getAttachmentPoints();*/
}
+
+public interface IFlowPath extends IBaseObject {
+ @Property("flow_id")
+ public String getFlowId();
+
+ @Property("flow_id")
+ public void setFlowId(String flowId);
+
+ @Property("installer_id")
+ public String getInstallerId();
+
+ @Property("installer_id")
+ public void setInstallerId(String installerId);
+
+ @Property("src_switch")
+ public String getSrcSwitch();
+
+ @Property("src_switch")
+ public void setSrcSwitch(String srcSwitch);
+
+ @Property("src_port")
+ public Short getSrcPort();
+
+ @Property("src_port")
+ public void setSrcPort(Short srcPort);
+
+ @Property("dst_switch")
+ public String getDstSwitch();
+
+ @Property("dst_switch")
+ public void setDstSwitch(String dstSwitch);
+
+ @Property("dst_port")
+ public Short getDstPort();
+
+ @Property("dst_port")
+ public void setDstPort(Short dstPort);
+
+ @Adjacency(label="flow", direction=Direction.IN)
+ public Iterable<IFlowEntry> getFlowEntries();
+
+ @Adjacency(label="flow", direction=Direction.IN)
+ public void addFlowEntry(final IFlowEntry flowEntry);
+
+ @Adjacency(label="flow", direction=Direction.IN)
+ public void removeFlowEntry(final IFlowEntry flowEntry);
+ }
+
+public interface IFlowEntry extends IBaseObject {
+ @Property("flow_entry_id")
+ public String getFlowEntryId();
+
+ @Property("flow_entry_id")
+ public void setFlowEntryId(String flowEntryId);
+
+ @Property("switch_dpid")
+ public String getSwitchDpid();
+
+ @Property("switch_dpid")
+ public void setSwitchDpid(String switchDpid);
+
+ @Property("in_port")
+ public Short getInPort();
+
+ @Property("in_port")
+ public void setInPort(Short inPort);
+
+ @Property("out_port")
+ public Short getOutPort();
+
+ @Property("out_port")
+ public void setOutPort(Short outPort);
+
+ @Property("user_state")
+ public String getUserState();
+
+ @Property("user_state")
+ public void setUserState(String userState);
+
+ @Property("switch_state")
+ public String getSwitchState();
+
+ @Property("switch_state")
+ public void setSwitchState(String switchState);
+
+ @Property("error_state_type")
+ public String getErrorStateType();
+
+ @Property("error_state_type")
+ public void setErrorStateType(String errorStateType);
+
+ @Property("error_state_code")
+ public String getErrorStateCode();
+
+ @Property("error_state_code")
+ public void setErrorStateCode(String errorStateCode);
+ }
}