Implement some of the missing Selector and Match Conditions
Work toward ONOS-509
The following match conditions are added/implemented:
- IN_PHY_PORT
- IP_DSCP
- IP_ECN
- METADATA
Change-Id: I6f529ee90b2b9e0d5046f83c034e8be3faf86d8b
diff --git a/web/api/src/main/java/org/onosproject/codec/impl/CriterionCodec.java b/web/api/src/main/java/org/onosproject/codec/impl/CriterionCodec.java
index 9d714b0..3c6d4d7 100644
--- a/web/api/src/main/java/org/onosproject/codec/impl/CriterionCodec.java
+++ b/web/api/src/main/java/org/onosproject/codec/impl/CriterionCodec.java
@@ -43,10 +43,17 @@
switch (criterion.type()) {
case IN_PORT:
+ case IN_PHY_PORT:
final Criteria.PortCriterion portCriterion = (Criteria.PortCriterion) criterion;
result.put("port", portCriterion.port().toLong());
break;
+ case METADATA:
+ final Criteria.MetadataCriterion metadataCriterion =
+ (Criteria.MetadataCriterion) criterion;
+ result.put("metadata", metadataCriterion.metadata());
+ break;
+
case ETH_DST:
case ETH_SRC:
final Criteria.EthCriterion ethCriterion = (Criteria.EthCriterion) criterion;
@@ -71,6 +78,18 @@
result.put("priority", vlanPcpCriterion.priority());
break;
+ case IP_DSCP:
+ final Criteria.IPDscpCriterion ipDscpCriterion =
+ (Criteria.IPDscpCriterion) criterion;
+ result.put("ipDscp", ipDscpCriterion.ipDscp());
+ break;
+
+ case IP_ECN:
+ final Criteria.IPEcnCriterion ipEcnCriterion =
+ (Criteria.IPEcnCriterion) criterion;
+ result.put("ipEcn", ipEcnCriterion.ipEcn());
+ break;
+
case IP_PROTO:
final Criteria.IPProtocolCriterion iPProtocolCriterion =
(Criteria.IPProtocolCriterion) criterion;
diff --git a/web/api/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java b/web/api/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java
index b8c430c..8032ee5 100644
--- a/web/api/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java
+++ b/web/api/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java
@@ -35,7 +35,8 @@
// CHECKSTYLE IGNORE MethodLength FOR NEXT 300 LINES
@Override
- public boolean matchesSafely(JsonNode jsonCriterion, Description description) {
+ public boolean matchesSafely(JsonNode jsonCriterion,
+ Description description) {
final String type = criterion.type().name();
final String jsonType = jsonCriterion.get("type").asText();
if (!type.equals(jsonType)) {
@@ -46,7 +47,9 @@
switch (criterion.type()) {
case IN_PORT:
- final Criteria.PortCriterion portCriterion = (Criteria.PortCriterion) criterion;
+ case IN_PHY_PORT:
+ final Criteria.PortCriterion portCriterion =
+ (Criteria.PortCriterion) criterion;
final long port = portCriterion.port().toLong();
final long jsonPort = jsonCriterion.get("port").asLong();
if (port != jsonPort) {
@@ -55,9 +58,21 @@
}
break;
+ case METADATA:
+ final Criteria.MetadataCriterion metadataCriterion =
+ (Criteria.MetadataCriterion) criterion;
+ final long metadata = metadataCriterion.metadata();
+ final long jsonMetadata = jsonCriterion.get("metadata").asLong();
+ if (metadata != jsonMetadata) {
+ description.appendText("metadata was " + Long.toString(jsonMetadata));
+ return false;
+ }
+ break;
+
case ETH_DST:
case ETH_SRC:
- final Criteria.EthCriterion ethCriterion = (Criteria.EthCriterion) criterion;
+ final Criteria.EthCriterion ethCriterion =
+ (Criteria.EthCriterion) criterion;
final String mac = ethCriterion.mac().toString();
final String jsonMac = jsonCriterion.get("mac").textValue();
if (!mac.equals(jsonMac)) {
@@ -99,6 +114,28 @@
}
break;
+ case IP_DSCP:
+ final Criteria.IPDscpCriterion ipDscpCriterion =
+ (Criteria.IPDscpCriterion) criterion;
+ final byte ipDscp = ipDscpCriterion.ipDscp();
+ final byte jsonIpDscp = (byte) jsonCriterion.get("ipDscp").shortValue();
+ if (ipDscp != jsonIpDscp) {
+ description.appendText("IP DSCP was " + Byte.toString(jsonIpDscp));
+ return false;
+ }
+ break;
+
+ case IP_ECN:
+ final Criteria.IPEcnCriterion ipEcnCriterion =
+ (Criteria.IPEcnCriterion) criterion;
+ final byte ipEcn = ipEcnCriterion.ipEcn();
+ final byte jsonIpEcn = (byte) jsonCriterion.get("ipEcn").shortValue();
+ if (ipEcn != jsonIpEcn) {
+ description.appendText("IP ECN was " + Byte.toString(jsonIpEcn));
+ return false;
+ }
+ break;
+
case IP_PROTO:
final Criteria.IPProtocolCriterion iPProtocolCriterion =
(Criteria.IPProtocolCriterion) criterion;
@@ -114,7 +151,8 @@
case IPV4_DST:
case IPV6_SRC:
case IPV6_DST:
- final Criteria.IPCriterion ipCriterion = (Criteria.IPCriterion) criterion;
+ final Criteria.IPCriterion ipCriterion =
+ (Criteria.IPCriterion) criterion;
final String ip = ipCriterion.ip().toString();
final String jsonIp = jsonCriterion.get("ip").textValue();
if (!ip.equals(jsonIp)) {
@@ -217,7 +255,7 @@
case IPV6_ND_TARGET:
final Criteria.IPv6NDTargetAddressCriterion
ipv6NDTargetAddressCriterion =
- (Criteria.IPv6NDTargetAddressCriterion) criterion;
+ (Criteria.IPv6NDTargetAddressCriterion) criterion;
final String targetAddress =
ipv6NDTargetAddressCriterion.targetAddress().toString();
final String jsonTargetAddress =
@@ -233,7 +271,7 @@
case IPV6_ND_TLL:
final Criteria.IPv6NDLinkLayerAddressCriterion
ipv6NDLinkLayerAddressCriterion =
- (Criteria.IPv6NDLinkLayerAddressCriterion) criterion;
+ (Criteria.IPv6NDLinkLayerAddressCriterion) criterion;
final String llAddress =
ipv6NDLinkLayerAddressCriterion.mac().toString();
final String jsonLlAddress =