Merge branch 'master' of https://github.com/OPENNETWORKINGLAB/ONOS
diff --git a/src/main/java/net/floodlightcontroller/util/FlowEntry.java b/src/main/java/net/floodlightcontroller/util/FlowEntry.java
index 717be4e..56a1631 100644
--- a/src/main/java/net/floodlightcontroller/util/FlowEntry.java
+++ b/src/main/java/net/floodlightcontroller/util/FlowEntry.java
@@ -13,6 +13,7 @@
 import net.floodlightcontroller.util.MACAddress;
 import net.floodlightcontroller.util.IPv4;
 
+import org.codehaus.jackson.annotate.JsonIgnore;
 import org.codehaus.jackson.annotate.JsonProperty;
 
 /**
@@ -22,6 +23,7 @@
  * support multiple in-ports and multiple out-ports.
  */
 public class FlowEntry {
+	private FlowId flowId;                  //FlowID of flowEntry
     private FlowEntryId flowEntryId;		// The Flow Entry ID
     private FlowEntryMatch flowEntryMatch;	// The Flow Entry Match
     private ArrayList<FlowEntryAction> flowEntryActions; // The Flow Entry Actions
@@ -327,4 +329,19 @@
 
 	return ret;
     }
+
+	/**
+	 * @return the flowId
+	 */
+    @JsonIgnore
+	public FlowId getFlowId() {
+		return flowId;
+	}
+
+	/**
+	 * @param flowId the flowId to set
+	 */
+	public void setFlowId(FlowId flowId) {
+		this.flowId = flowId;
+	}
 }
diff --git a/src/main/java/net/onrc/onos/flow/IFlowManager.java b/src/main/java/net/onrc/onos/flow/IFlowManager.java
new file mode 100644
index 0000000..da6448c
--- /dev/null
+++ b/src/main/java/net/onrc/onos/flow/IFlowManager.java
@@ -0,0 +1,53 @@
+package net.onrc.onos.flow;
+
+import net.floodlightcontroller.core.INetMapTopologyObjects.IPortObject;
+import net.floodlightcontroller.util.FlowEntry;
+import net.floodlightcontroller.util.FlowPath;
+
+public interface IFlowManager {
+	
+	/*
+	 * Generic create Flow from port to port
+	 */
+	public void createFlow(IPortObject src_port, IPortObject dest_port);
+	/*
+	 * get Flows matching a src_port & dest_port
+	 */
+	public Iterable<FlowPath> getFlows(IPortObject src_port, IPortObject dest_port);
+	/*
+	 * get all Flows going out from port
+	 */
+	public Iterable<FlowPath> getFlows(IPortObject port);
+	/*
+	 * Reconcile all flows on inactive port (src port of link which might be broken)
+	 */
+	public void reconcileFlows(IPortObject src_port);
+	/*
+	 * Reconcile flow based on flow
+	 */
+	public void reconcileFlow(IPortObject src_port, IPortObject dest_port);
+	/*
+	 * compute a flow path using src/dest port
+	 */
+	public FlowPath computeFlowPath(IPortObject src_port, IPortObject dest_port);
+	/*
+	 * Get all FlowEntries of a Flow
+	 */
+    public Iterable<FlowEntry> getFlowEntries(FlowPath flow);
+    /*
+     * install a flow entry on switch
+     */
+    public void installFlowEntry(FlowEntry entry);
+    /*
+     * remove a flowEntry from switch
+     */
+    public void removeFlowEntry(FlowEntry entry);
+    /*
+     * install flow entry on remote controller
+     */
+    public void installFlowEntry(String ctrlId, FlowEntry entry);
+    /*
+     * remove flow entry on remote controller
+     */
+    public void removeFlowEntry(String ctrlId, FlowEntry entry);        
+}