TrafficTreatment: add support for IP DSCP modifications
Allow modifying IP DSCP field in the headers.
Change-Id: Idd765f40f1baec810273536adcd56bf0e480217f
diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/L3ModificationInstruction.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/L3ModificationInstruction.java
index 9fddf89..cc15360 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/instructions/L3ModificationInstruction.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/L3ModificationInstruction.java
@@ -84,7 +84,12 @@
/**
* Arp operation modification.
*/
- ARP_OP
+ ARP_OP,
+
+ /**
+ * IP DSCP operation modification.
+ */
+ IP_DSCP
}
/**
@@ -380,4 +385,50 @@
return false;
}
}
+
+ /**
+ * Represents a L3 DSCP modification instruction.
+ */
+ public static final class ModDscpInstruction extends L3ModificationInstruction {
+
+ private final L3SubType subtype;
+ private final byte dscp;
+
+ ModDscpInstruction(L3SubType subtype, byte dscp) {
+ this.subtype = subtype;
+ this.dscp = dscp;
+ }
+
+ @Override
+ public L3SubType subtype() {
+ return this.subtype;
+ }
+
+ @Override
+ public String toString() {
+ return subtype().toString() + SEPARATOR + dscp();
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(type(), subtype(), dscp());
+ }
+
+ public byte dscp() {
+ return this.dscp;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof ModDscpInstruction) {
+ ModDscpInstruction that = (ModDscpInstruction) obj;
+ return Objects.equals(this.subtype(), that.subtype()) &&
+ Objects.equals(this.dscp(), that.dscp());
+ }
+ return false;
+ }
+ }
}