Implement some of the missing Selector and Match Conditions
Work toward ONOS-509
The following match conditions are added/implemented:
- IPV6_EXTHDR
Also, fixed the match criteria for the optical signal type
to represent unsigned 8 bits integer (per spec).
Change-Id: I925db19cb43c5d9f589c1f090b6a75faabe0a19b
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 3c32dea..34893a4 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
@@ -62,7 +62,7 @@
* @param metadata metadata value (64 bits data)
* @return match criterion
*/
- public static Criterion matchMetadata(Long metadata) {
+ public static Criterion matchMetadata(long metadata) {
return new MetadataCriterion(metadata);
}
@@ -338,11 +338,22 @@
* @param mplsLabel MPLS label (20 bits)
* @return match criterion
*/
- public static Criterion matchMplsLabel(Integer mplsLabel) {
+ public static Criterion matchMplsLabel(int mplsLabel) {
return new MplsCriterion(mplsLabel);
}
/**
+ * Creates a match on IPv6 Extension Header pseudo-field fiags.
+ * Those are defined in Criterion.IPv6ExthdrFlags.
+ *
+ * @param exthdrFlags IPv6 Extension Header pseudo-field flags (16 bits)
+ * @return match criterion
+ */
+ public static Criterion matchIPv6ExthdrFlags(int exthdrFlags) {
+ return new IPv6ExthdrFlagsCriterion(exthdrFlags);
+ }
+
+ /**
* Creates a match on lambda field using the specified value.
*
* @param lambda lambda to match on (16 bits unsigned integer)
@@ -355,10 +366,10 @@
/**
* Creates a match on optical signal type using the specified value.
*
- * @param sigType optical signal type (16 bits unsigned integer)
+ * @param sigType optical signal type (8 bits unsigned integer)
* @return match criterion
*/
- public static Criterion matchOpticalSignalType(int sigType) {
+ public static Criterion matchOpticalSignalType(short sigType) {
return new OpticalSignalTypeCriterion(sigType, Type.OCH_SIGTYPE);
}
@@ -1550,6 +1561,64 @@
}
/**
+ * Implementation of IPv6 Extension Header pseudo-field criterion
+ * (16 bits). Those are defined in Criterion.IPv6ExthdrFlags.
+ */
+ public static final class IPv6ExthdrFlagsCriterion implements Criterion {
+ private static final int MASK = 0xffff;
+ private final int exthdrFlags; // IPv6 Exthdr flags: 16 bits
+
+ /**
+ * Constructor.
+ *
+ * @param exthdrFlags the IPv6 Extension Header pseudo-field flags
+ * to match (16 bits). Those are defined in Criterion.IPv6ExthdrFlags
+ */
+ public IPv6ExthdrFlagsCriterion(int exthdrFlags) {
+ this.exthdrFlags = exthdrFlags & MASK;
+ }
+
+ @Override
+ public Type type() {
+ return Type.IPV6_EXTHDR;
+ }
+
+ /**
+ * Gets the IPv6 Extension Header pseudo-field flags to match.
+ *
+ * @return the IPv6 Extension Header pseudo-field flags to match
+ * (16 bits). Those are defined in Criterion.IPv6ExthdrFlags
+ */
+ public int exthdrFlags() {
+ return exthdrFlags;
+ }
+
+ @Override
+ public String toString() {
+ return toStringHelper(type().toString())
+ .add("exthdrFlags", Long.toHexString(exthdrFlags)).toString();
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(type(), exthdrFlags);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof IPv6ExthdrFlagsCriterion) {
+ IPv6ExthdrFlagsCriterion that = (IPv6ExthdrFlagsCriterion) obj;
+ return Objects.equals(exthdrFlags, that.exthdrFlags) &&
+ Objects.equals(this.type(), that.type());
+ }
+ return false;
+ }
+ }
+
+ /**
* Implementation of lambda (wavelength) criterion (16 bits unsigned
* integer).
*/
@@ -1610,23 +1679,23 @@
}
/**
- * Implementation of optical signal type criterion (16 bits unsigned
+ * Implementation of optical signal type criterion (8 bits unsigned
* integer).
*/
public static final class OpticalSignalTypeCriterion implements Criterion {
- private static final int MASK = 0xffff;
- private final int signalType; // Signal type value: 16 bits
+ private static final short MASK = 0xff;
+ private final short signalType; // Signal type value: 8 bits
private final Type type;
/**
* Constructor.
*
- * @param signalType the optical signal type to match (16 bits unsigned
+ * @param signalType the optical signal type to match (8 bits unsigned
* integer)
* @param type the match type. Should be Type.OCH_SIGTYPE
*/
- public OpticalSignalTypeCriterion(int signalType, Type type) {
- this.signalType = signalType & MASK;
+ public OpticalSignalTypeCriterion(short signalType, Type type) {
+ this.signalType = (short) (signalType & MASK);
this.type = type;
}
@@ -1638,9 +1707,9 @@
/**
* Gets the optical signal type to match.
*
- * @return the optical signal type to match
+ * @return the optical signal type to match (8 bits unsigned integer)
*/
- public int signalType() {
+ public short signalType() {
return signalType;
}