MPLS label selector and treatment
Change-Id: Id1fba1e04155e6d97de4c8fd95573641537f1b7a
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criteria.java b/core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criteria.java
index 61fe54d..83ade8b 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criteria.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criteria.java
@@ -149,6 +149,16 @@
}
/**
+ * Creates a match on MPLS label.
+ * @param mplsLabel MPLS label
+ * @return match criterion
+ */
+
+ public static Criterion matchMplsLabel(Integer mplsLabel) {
+ return new MplsCriterion(mplsLabel);
+ }
+
+ /**
* Creates a match on lambda field using the specified value.
*
* @param lambda lamda to match on
@@ -541,6 +551,52 @@
}
}
+ public static final class MplsCriterion implements Criterion {
+
+ private final Integer mplsLabel;
+
+ public MplsCriterion(Integer mplsLabel) {
+ this.mplsLabel = mplsLabel;
+ }
+
+ @Override
+ public Type type() {
+ return Type.MPLS_LABEL;
+ }
+
+ public Integer label() {
+ return mplsLabel;
+ }
+
+ @Override
+ public String toString() {
+ return toStringHelper(type().toString())
+ .add("mpls", mplsLabel.intValue()).toString();
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(mplsLabel, type());
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof MplsCriterion) {
+ MplsCriterion that = (MplsCriterion) obj;
+ return Objects.equals(mplsLabel, that.mplsLabel) &&
+ Objects.equals(this.type(), that.type());
+
+
+ }
+ return false;
+ }
+
+ }
+
+
public static final class LambdaCriterion implements Criterion {
private final short lambda;