diff --git a/core/api/src/main/java/org/onosproject/net/flow/criteria/Criteria.java b/core/api/src/main/java/org/onosproject/net/flow/criteria/Criteria.java index 7ee17fdb25..be4b90da10 100644 --- a/core/api/src/main/java/org/onosproject/net/flow/criteria/Criteria.java +++ b/core/api/src/main/java/org/onosproject/net/flow/criteria/Criteria.java @@ -15,6 +15,7 @@ */ package org.onosproject.net.flow.criteria; +import org.onosproject.net.IndexedLambda; import org.onosproject.net.Lambda; import org.onosproject.net.OchSignal; import org.onosproject.net.PortNumber; @@ -359,6 +360,7 @@ public final class Criteria { * @param lambda lambda to match on (16 bits unsigned integer) * @return match criterion */ + @Deprecated public static Criterion matchLambda(int lambda) { return new LambdaCriterion(lambda, Type.OCH_SIGID); } @@ -370,7 +372,9 @@ public final class Criteria { * @return match criterion */ public static Criterion matchLambda(Lambda lambda) { - if (lambda instanceof OchSignal) { + if (lambda instanceof IndexedLambda) { + return new IndexedLambdaCriterion((IndexedLambda) lambda); + } else if (lambda instanceof OchSignal) { return new OchSignalCriterion((OchSignal) lambda); } else { throw new UnsupportedOperationException(String.format("Unsupported type of Lambda: %s", lambda)); diff --git a/core/api/src/main/java/org/onosproject/net/flow/criteria/IndexedLambdaCriterion.java b/core/api/src/main/java/org/onosproject/net/flow/criteria/IndexedLambdaCriterion.java new file mode 100644 index 0000000000..824e00ea12 --- /dev/null +++ b/core/api/src/main/java/org/onosproject/net/flow/criteria/IndexedLambdaCriterion.java @@ -0,0 +1,80 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onosproject.net.flow.criteria; + +import com.google.common.base.MoreObjects; +import org.onosproject.net.IndexedLambda; + +import java.util.Objects; + +import static com.google.common.base.Preconditions.checkNotNull; + +/** + * Implementation of indexed lambda criterion. + */ +public class IndexedLambdaCriterion implements Criterion { + + private final IndexedLambda lambda; + + /** + * Creates a criterion with the specified value. + * + * @param lambda lambda index number + */ + IndexedLambdaCriterion(IndexedLambda lambda) { + this.lambda = checkNotNull(lambda); + } + + @Override + public Type type() { + // TODO: consider defining a new specific type + // Now OCH_SIGID is used due to compatibility concerns + return Type.OCH_SIGID; + } + + /** + * Returns the indexed lambda to match. + * + * @return the indexed lambda to match + */ + public IndexedLambda lambda() { + return lambda; + } + + @Override + public int hashCode() { + return Objects.hash(lambda); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof IndexedLambdaCriterion)) { + return false; + } + final IndexedLambdaCriterion that = (IndexedLambdaCriterion) obj; + return Objects.equals(this.lambda, that.lambda); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("lambda", lambda) + .toString(); + } +} diff --git a/core/api/src/test/java/org/onosproject/net/flow/criteria/CriteriaTest.java b/core/api/src/test/java/org/onosproject/net/flow/criteria/CriteriaTest.java index 724edc55d2..97badd3c81 100644 --- a/core/api/src/test/java/org/onosproject/net/flow/criteria/CriteriaTest.java +++ b/core/api/src/test/java/org/onosproject/net/flow/criteria/CriteriaTest.java @@ -220,6 +220,10 @@ public class CriteriaTest { Criterion sameAsMatchLambda1 = Criteria.matchLambda(lambda1); Criterion matchLambda2 = Criteria.matchLambda(lambda2); + Criterion matchIndexedLambda1 = Criteria.matchLambda(Lambda.indexedLambda(1)); + Criterion sameAsMatchIndexedLambda1 = Criteria.matchLambda(Lambda.indexedLambda(1)); + Criterion matchIndexedLambda2 = Criteria.matchLambda(Lambda.indexedLambda(2)); + short signalLambda1 = 1; short signalLambda2 = 2; Criterion matchSignalLambda1 = Criteria.matchOpticalSignalType(signalLambda1); @@ -1037,6 +1041,14 @@ public class CriteriaTest { .testEquals(); } + @Test + public void testIndexedLambdaCriterionEquals() { + new EqualsTester() + .addEqualityGroup(matchIndexedLambda1, sameAsMatchIndexedLambda1) + .addEqualityGroup(matchIndexedLambda2) + .testEquals(); + } + @Test public void testOchSignalCriterionEquals() { new EqualsTester() diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java index 4f4748f02a..a4892c33d1 100644 --- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java +++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java @@ -97,6 +97,7 @@ import org.onosproject.net.flow.criteria.IcmpCodeCriterion; import org.onosproject.net.flow.criteria.IcmpTypeCriterion; import org.onosproject.net.flow.criteria.Icmpv6CodeCriterion; import org.onosproject.net.flow.criteria.Icmpv6TypeCriterion; +import org.onosproject.net.flow.criteria.IndexedLambdaCriterion; import org.onosproject.net.flow.criteria.LambdaCriterion; import org.onosproject.net.flow.criteria.MetadataCriterion; import org.onosproject.net.flow.criteria.MplsCriterion; @@ -291,6 +292,7 @@ public final class KryoNamespaces { MplsCriterion.class, IPv6ExthdrFlagsCriterion.class, LambdaCriterion.class, + IndexedLambdaCriterion.class, OchSignalCriterion.class, OpticalSignalTypeCriterion.class, Criterion.class,