A set of fixes to ensure that the FlowRuleManager can correctly account for flows
from the dataplane in a multi-table pipeline scenario
Change-Id: I9ca3ef9a77781f126a13538647c824b27f77101c
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java
index 0b9b0cd..f0e4f84 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java
@@ -34,6 +34,7 @@
import org.onosproject.net.flow.FlowEntry;
import org.onosproject.net.flow.FlowEntry.FlowEntryState;
import org.onosproject.net.flow.FlowRule;
+import org.onosproject.net.flow.FlowRule.Type;
import org.onosproject.net.flow.TrafficSelector;
import org.onosproject.net.flow.TrafficTreatment;
import org.onosproject.openflow.controller.Dpid;
@@ -87,6 +88,7 @@
public enum FlowType { STAT, REMOVED, MOD }
private final FlowType type;
+ private Type tableType = FlowRule.Type.DEFAULT;
public FlowEntryBuilder(Dpid dpid, OFFlowStatsEntry entry) {
@@ -99,6 +101,17 @@
this.type = FlowType.STAT;
}
+ public FlowEntryBuilder(Dpid dpid, OFFlowStatsEntry entry, Type tableType) {
+ this.stat = entry;
+ this.match = entry.getMatch();
+ this.actions = getActions(entry);
+ this.dpid = dpid;
+ this.removed = null;
+ this.flowMod = null;
+ this.type = FlowType.STAT;
+ this.tableType = tableType;
+ }
+
public FlowEntryBuilder(Dpid dpid, OFFlowRemoved removed) {
this.match = removed.getMatch();
this.removed = removed;
@@ -127,7 +140,8 @@
case STAT:
rule = new DefaultFlowRule(DeviceId.deviceId(Dpid.uri(dpid)),
buildSelector(), buildTreatment(), stat.getPriority(),
- stat.getCookie().getValue(), stat.getIdleTimeout(), false);
+ stat.getCookie().getValue(), stat.getIdleTimeout(), false,
+ tableType);
return new DefaultFlowEntry(rule, FlowEntryState.ADDED,
stat.getDurationSec(), stat.getPacketCount().getValue(),
stat.getByteCount().getValue());