ONOS-6604 More criterion translators for PiFlowRuleTranslationService

Change-Id: I9399f75fe467971d6d012ddad47a72c58df02d69
diff --git a/core/net/src/main/java/org/onosproject/net/pi/impl/CriterionTranslatorHelper.java b/core/net/src/main/java/org/onosproject/net/pi/impl/CriterionTranslatorHelper.java
index 47c944a..5d9d792 100644
--- a/core/net/src/main/java/org/onosproject/net/pi/impl/CriterionTranslatorHelper.java
+++ b/core/net/src/main/java/org/onosproject/net/pi/impl/CriterionTranslatorHelper.java
@@ -55,6 +55,8 @@
 import org.onosproject.net.flow.criteria.ArpHaCriterion;
 import org.onosproject.net.flow.criteria.ArpOpCriterion;
 import org.onosproject.net.flow.criteria.ArpPaCriterion;
+import org.onosproject.net.flow.criteria.IPEcnCriterion;
+import org.onosproject.net.flow.criteria.MetadataCriterion;
 
 import org.onosproject.net.pi.impl.CriterionTranslators.EthCriterionTranslator;
 import org.onosproject.net.pi.impl.CriterionTranslators.EthTypeCriterionTranslator;
@@ -91,6 +93,8 @@
 import org.onosproject.net.pi.impl.CriterionTranslators.ArpHaCriterionTranslator;
 import org.onosproject.net.pi.impl.CriterionTranslators.ArpOpCriterionTranslator;
 import org.onosproject.net.pi.impl.CriterionTranslators.ArpPaCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.IPEcnCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.MetadataCriterionTranslator;
 
 import org.onosproject.net.pi.model.PiMatchType;
 import org.onosproject.net.pi.runtime.PiExactFieldMatch;
@@ -148,6 +152,8 @@
                     .put(ArpHaCriterion.class, new ArpHaCriterionTranslator())
                     .put(ArpOpCriterion.class, new ArpOpCriterionTranslator())
                     .put(ArpPaCriterion.class, new ArpPaCriterionTranslator())
+                    .put(IPEcnCriterion.class, new IPEcnCriterionTranslator())
+                    .put(MetadataCriterion.class, new MetadataCriterionTranslator())
                     .build();
 
     private CriterionTranslatorHelper() {
diff --git a/core/net/src/main/java/org/onosproject/net/pi/impl/CriterionTranslators.java b/core/net/src/main/java/org/onosproject/net/pi/impl/CriterionTranslators.java
index 11153cc..30a3c28 100644
--- a/core/net/src/main/java/org/onosproject/net/pi/impl/CriterionTranslators.java
+++ b/core/net/src/main/java/org/onosproject/net/pi/impl/CriterionTranslators.java
@@ -54,6 +54,7 @@
 import org.onosproject.net.flow.criteria.ArpPaCriterion;
 import org.onosproject.net.flow.criteria.IPv6NDLinkLayerAddressCriterion;
 import org.onosproject.net.flow.criteria.IPv6NDTargetAddressCriterion;
+import org.onosproject.net.flow.criteria.IPEcnCriterion;
 
 import static org.onlab.util.ImmutableByteSequence.ByteSequenceTrimException;
 import static org.onlab.util.ImmutableByteSequence.copyFrom;
@@ -487,7 +488,14 @@
         }
     }
 
-
-
-
+    /**
+     * Translator of IPEcnCriterion.
+     */
+    static final class IPEcnCriterionTranslator extends AbstractCriterionTranslator {
+        @Override
+        public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+            IPEcnCriterion c = (IPEcnCriterion) criterion;
+            initAsExactMatch(copyFrom(c.ipEcn()), bitWidth);
+        }
+    }
 }