Multiple meter support added and meter action added for OF1.5
MeterFeaturesFlag added for OF1.5
Change-Id: I84d2785f37ea51b08244de9c54effe5224af9531
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer15.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer15.java
index 7ba893a..7f5a099 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer15.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer15.java
@@ -172,9 +172,11 @@
List<OFAction> actions = new LinkedList<>();
//Meter action handling
- if (null != treatment.metered() && immediateActions) {
- OFAction meterAction = buildMultipleMeterAction(treatment.metered());
- actions.add(meterAction);
+ if (null != treatment.meters() && immediateActions) {
+ treatment.meters().forEach(meterInstruction -> {
+ OFAction meterAction = buildMeterAction(meterInstruction);
+ actions.add(meterAction);
+ });
}
for (Instruction i : treatments) {
@@ -287,7 +289,7 @@
* @param meterInstruction meter instruction
* @return meter action
*/
- protected OFAction buildMultipleMeterAction(Instructions.MeterInstruction meterInstruction) {
+ protected OFAction buildMeterAction(Instructions.MeterInstruction meterInstruction) {
OFActionMeter.Builder meterBuilder = factory().actions().buildMeter()
.setMeterId(meterInstruction.meterId().id());
return meterBuilder.build();
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/util/FlowEntryBuilder.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/util/FlowEntryBuilder.java
index c16c34f..dee9455 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/util/FlowEntryBuilder.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/util/FlowEntryBuilder.java
@@ -49,6 +49,7 @@
import org.onosproject.net.flow.TrafficTreatment;
import org.onosproject.net.flow.criteria.ExtensionSelectorType.ExtensionSelectorTypes;
import org.onosproject.net.flow.instructions.Instructions;
+import org.onosproject.net.meter.MeterId;
import org.onosproject.openflow.controller.ExtensionSelectorInterpreter;
import org.onosproject.openflow.controller.ExtensionTreatmentInterpreter;
import org.onosproject.provider.of.flow.impl.NewAdaptiveFlowStatsCollector;
@@ -66,6 +67,7 @@
import org.projectfloodlight.openflow.protocol.action.OFActionEnqueue;
import org.projectfloodlight.openflow.protocol.action.OFActionExperimenter;
import org.projectfloodlight.openflow.protocol.action.OFActionGroup;
+import org.projectfloodlight.openflow.protocol.action.OFActionMeter;
import org.projectfloodlight.openflow.protocol.action.OFActionOutput;
import org.projectfloodlight.openflow.protocol.action.OFActionPopMpls;
import org.projectfloodlight.openflow.protocol.action.OFActionPushVlan;
@@ -605,6 +607,10 @@
OFActionPushVlan pushVlan = (OFActionPushVlan) act;
builder.pushVlan(new EthType((short) pushVlan.getEthertype().getValue()));
break;
+ case METER:
+ OFActionMeter actionMeter = (OFActionMeter) act;
+ builder.meter(MeterId.meterId(actionMeter.getMeterId()));
+ break;
case SET_TP_DST:
case SET_TP_SRC:
case POP_PBB: