Multiple meter support added and meter action added for OF1.5
MeterFeaturesFlag added for OF1.5
Change-Id: I84d2785f37ea51b08244de9c54effe5224af9531
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/TrafficTreatmentCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/TrafficTreatmentCodec.java
index 0003318..4a2bc92 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/TrafficTreatmentCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/TrafficTreatmentCodec.java
@@ -23,6 +23,7 @@
import org.onosproject.net.flow.DefaultTrafficTreatment;
import org.onosproject.net.flow.TrafficTreatment;
import org.onosproject.net.flow.instructions.Instruction;
+import org.onosproject.net.flow.instructions.Instructions;
import java.util.stream.IntStream;
@@ -51,7 +52,9 @@
}
if (treatment.metered() != null) {
- jsonInstructions.add(instructionCodec.encode(treatment.metered(), context));
+ for (Instructions.MeterInstruction instruction : treatment.meters()) {
+ jsonInstructions.add(instructionCodec.encode(instruction, context));
+ }
}
if (treatment.tableTransition() != null) {
jsonInstructions.add(instructionCodec.encode(treatment.tableTransition(), context));
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/TrafficTreatmentCodecTest.java b/core/common/src/test/java/org/onosproject/codec/impl/TrafficTreatmentCodecTest.java
index ed87ce0..b014bcf 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/TrafficTreatmentCodecTest.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/TrafficTreatmentCodecTest.java
@@ -35,6 +35,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
+import java.util.Optional;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
@@ -163,9 +164,11 @@
// check metered
JsonNode meterNode = getInstNode(jsonInstructions, "METER");
String jsonMeterId = meterNode != null ? meterNode.get("meterId").asText() : null;
- if (trafficTreatment.metered() != null) {
- String meterId = trafficTreatment.metered().meterId().toString();
- if (!StringUtils.equals(jsonMeterId, meterId)) {
+ if (trafficTreatment.metered() != null && !trafficTreatment.meters().isEmpty()) {
+ Optional<Instructions.MeterInstruction> optional = trafficTreatment.meters().stream().filter(
+ meterInstruction -> StringUtils.equals(jsonMeterId, meterInstruction.meterId().toString()))
+ .findAny();
+ if (!optional.isPresent()) {
description.appendText("meter id was " + jsonMeterId);
return false;
}