ONOS-6604 Translation of all criterion types in PiFlowRuleTranslationService
Change-Id: I62d34c1f5d4718c4865933bf60eb4f1266125232
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 3069e27..47c944a 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
@@ -24,10 +24,74 @@
import org.onosproject.net.flow.criteria.EthTypeCriterion;
import org.onosproject.net.flow.criteria.IPCriterion;
import org.onosproject.net.flow.criteria.PortCriterion;
+import org.onosproject.net.flow.criteria.VlanIdCriterion;
+import org.onosproject.net.flow.criteria.UdpPortCriterion;
+import org.onosproject.net.flow.criteria.ExtensionCriterion;
+import org.onosproject.net.flow.criteria.IPDscpCriterion;
+import org.onosproject.net.flow.criteria.IPProtocolCriterion;
+import org.onosproject.net.flow.criteria.IPv6ExthdrFlagsCriterion;
+import org.onosproject.net.flow.criteria.IPv6FlowLabelCriterion;
+import org.onosproject.net.flow.criteria.IPv6NDLinkLayerAddressCriterion;
+import org.onosproject.net.flow.criteria.IPv6NDTargetAddressCriterion;
+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.LambdaCriterion;
+import org.onosproject.net.flow.criteria.MplsBosCriterion;
+import org.onosproject.net.flow.criteria.MplsCriterion;
+import org.onosproject.net.flow.criteria.MplsTcCriterion;
+import org.onosproject.net.flow.criteria.OchSignalCriterion;
+import org.onosproject.net.flow.criteria.OchSignalTypeCriterion;
+import org.onosproject.net.flow.criteria.OduSignalIdCriterion;
+import org.onosproject.net.flow.criteria.OduSignalTypeCriterion;
+import org.onosproject.net.flow.criteria.PbbIsidCriterion;
+import org.onosproject.net.flow.criteria.PiCriterion;
+import org.onosproject.net.flow.criteria.SctpPortCriterion;
+import org.onosproject.net.flow.criteria.TcpFlagsCriterion;
+import org.onosproject.net.flow.criteria.TcpPortCriterion;
+import org.onosproject.net.flow.criteria.TunnelIdCriterion;
+import org.onosproject.net.flow.criteria.VlanPcpCriterion;
+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.pi.impl.CriterionTranslators.EthCriterionTranslator;
import org.onosproject.net.pi.impl.CriterionTranslators.EthTypeCriterionTranslator;
import org.onosproject.net.pi.impl.CriterionTranslators.IpCriterionTranslator;
import org.onosproject.net.pi.impl.CriterionTranslators.PortCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.VlanIdCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.UdpPortCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.ExtensionCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.IPDscpCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.IPProtocolCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.IPv6ExthdrFlagsCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.IPv6FlowLabelCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.IPv6NDLinkLayerAddressCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.IPv6NDTargetAddressCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.IcmpCodeCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.IcmpTypeCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.Icmpv6CodeCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.Icmpv6TypeCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.LambdaCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.MplsBosCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.MplsCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.MplsTcCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.OchSignalCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.OchSignalTypeCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.OduSignalIdCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.OduSignalTypeCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.PbbIsidCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.PiCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.SctpPortCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.TcpFlagsCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.TcpPortCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.TunnelIdCriterionTranslator;
+import org.onosproject.net.pi.impl.CriterionTranslators.VlanPcpCriterionTranslator;
+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.model.PiMatchType;
import org.onosproject.net.pi.runtime.PiExactFieldMatch;
import org.onosproject.net.pi.runtime.PiFieldMatch;
@@ -46,7 +110,6 @@
* Helper class to translate criterion instances to PI field matches.
*/
final class CriterionTranslatorHelper {
-
private static final Map<Class<? extends Criterion>, CriterionTranslator> TRANSLATORS =
// Add here new CriterionTranslator implementations.
new ImmutableMap.Builder<Class<? extends Criterion>, CriterionTranslator>()
@@ -54,6 +117,37 @@
.put(EthCriterion.class, new EthCriterionTranslator())
.put(EthTypeCriterion.class, new EthTypeCriterionTranslator())
.put(IPCriterion.class, new IpCriterionTranslator())
+ .put(VlanIdCriterion.class, new VlanIdCriterionTranslator())
+ .put(UdpPortCriterion.class, new UdpPortCriterionTranslator())
+ .put(ExtensionCriterion.class, new ExtensionCriterionTranslator())
+ .put(IPDscpCriterion.class, new IPDscpCriterionTranslator())
+ .put(IPProtocolCriterion.class, new IPProtocolCriterionTranslator())
+ .put(IPv6ExthdrFlagsCriterion.class, new IPv6ExthdrFlagsCriterionTranslator())
+ .put(IPv6FlowLabelCriterion.class, new IPv6FlowLabelCriterionTranslator())
+ .put(IPv6NDLinkLayerAddressCriterion.class, new IPv6NDLinkLayerAddressCriterionTranslator())
+ .put(IPv6NDTargetAddressCriterion.class, new IPv6NDTargetAddressCriterionTranslator())
+ .put(IcmpCodeCriterion.class, new IcmpCodeCriterionTranslator())
+ .put(IcmpTypeCriterion.class, new IcmpTypeCriterionTranslator())
+ .put(Icmpv6CodeCriterion.class, new Icmpv6CodeCriterionTranslator())
+ .put(Icmpv6TypeCriterion.class, new Icmpv6TypeCriterionTranslator())
+ .put(LambdaCriterion.class, new LambdaCriterionTranslator())
+ .put(MplsBosCriterion.class, new MplsBosCriterionTranslator())
+ .put(MplsCriterion.class, new MplsCriterionTranslator())
+ .put(MplsTcCriterion.class, new MplsTcCriterionTranslator())
+ .put(OchSignalCriterion.class, new OchSignalCriterionTranslator())
+ .put(OchSignalTypeCriterion.class, new OchSignalTypeCriterionTranslator())
+ .put(OduSignalIdCriterion.class, new OduSignalIdCriterionTranslator())
+ .put(OduSignalTypeCriterion.class, new OduSignalTypeCriterionTranslator())
+ .put(PbbIsidCriterion.class, new PbbIsidCriterionTranslator())
+ .put(PiCriterion.class, new PiCriterionTranslator())
+ .put(SctpPortCriterion.class, new SctpPortCriterionTranslator())
+ .put(TcpFlagsCriterion.class, new TcpFlagsCriterionTranslator())
+ .put(TcpPortCriterion.class, new TcpPortCriterionTranslator())
+ .put(TunnelIdCriterion.class, new TunnelIdCriterionTranslator())
+ .put(VlanPcpCriterion.class, new VlanPcpCriterionTranslator())
+ .put(ArpHaCriterion.class, new ArpHaCriterionTranslator())
+ .put(ArpOpCriterion.class, new ArpOpCriterionTranslator())
+ .put(ArpPaCriterion.class, new ArpPaCriterionTranslator())
.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 089f80a..11153cc 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
@@ -22,6 +22,38 @@
import org.onosproject.net.flow.criteria.EthTypeCriterion;
import org.onosproject.net.flow.criteria.IPCriterion;
import org.onosproject.net.flow.criteria.PortCriterion;
+import org.onosproject.net.flow.criteria.VlanIdCriterion;
+import org.onosproject.net.flow.criteria.UdpPortCriterion;
+import org.onosproject.net.flow.criteria.ExtensionCriterion;
+import org.onosproject.net.flow.criteria.IPDscpCriterion;
+import org.onosproject.net.flow.criteria.IPProtocolCriterion;
+import org.onosproject.net.flow.criteria.IPv6ExthdrFlagsCriterion;
+import org.onosproject.net.flow.criteria.IPv6FlowLabelCriterion;
+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.LambdaCriterion;
+import org.onosproject.net.flow.criteria.MetadataCriterion;
+import org.onosproject.net.flow.criteria.MplsBosCriterion;
+import org.onosproject.net.flow.criteria.MplsCriterion;
+import org.onosproject.net.flow.criteria.MplsTcCriterion;
+import org.onosproject.net.flow.criteria.OchSignalCriterion;
+import org.onosproject.net.flow.criteria.OchSignalTypeCriterion;
+import org.onosproject.net.flow.criteria.OduSignalIdCriterion;
+import org.onosproject.net.flow.criteria.OduSignalTypeCriterion;
+import org.onosproject.net.flow.criteria.PbbIsidCriterion;
+import org.onosproject.net.flow.criteria.PiCriterion;
+import org.onosproject.net.flow.criteria.SctpPortCriterion;
+import org.onosproject.net.flow.criteria.TcpFlagsCriterion;
+import org.onosproject.net.flow.criteria.TcpPortCriterion;
+import org.onosproject.net.flow.criteria.TunnelIdCriterion;
+import org.onosproject.net.flow.criteria.VlanPcpCriterion;
+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.IPv6NDLinkLayerAddressCriterion;
+import org.onosproject.net.flow.criteria.IPv6NDTargetAddressCriterion;
import static org.onlab.util.ImmutableByteSequence.ByteSequenceTrimException;
import static org.onlab.util.ImmutableByteSequence.copyFrom;
@@ -74,9 +106,388 @@
* Translator of IpCriterion.
*/
static final class IpCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
IPCriterion c = (IPCriterion) criterion;
initAsLpm(copyFrom(c.ip().address().toOctets()), c.ip().prefixLength(), bitWidth);
}
}
+
+ /**
+ * Translator of VlanIdCriterion.
+ */
+ static final class VlanIdCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ VlanIdCriterion c = (VlanIdCriterion) criterion;
+ initAsExactMatch(copyFrom(c.vlanId().toShort()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of UdpPortCriterion.
+ */
+ static final class UdpPortCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ UdpPortCriterion c = (UdpPortCriterion) criterion;
+ ImmutableByteSequence value = copyFrom(c.udpPort().toInt());
+ if (c.mask() == null) {
+ initAsExactMatch(value, bitWidth);
+ } else {
+ ImmutableByteSequence mask = copyFrom(c.mask().toInt());
+ initAsTernaryMatch(value, mask, bitWidth);
+ }
+ }
+ }
+
+ /**
+ * Translator of ExtensionCriterion.
+ */
+ static final class ExtensionCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ ExtensionCriterion c = (ExtensionCriterion) criterion;
+ initAsExactMatch(copyFrom(c.extensionSelector().type().toInt()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of IPDscpCriterion.
+ */
+ static final class IPDscpCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ IPDscpCriterion c = (IPDscpCriterion) criterion;
+ ImmutableByteSequence value = copyFrom(c.ipDscp());
+ initAsExactMatch(value, bitWidth);
+ }
+ }
+
+ /**
+ * Translator of IPProtocolCriterion.
+ */
+ static final class IPProtocolCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ IPProtocolCriterion c = (IPProtocolCriterion) criterion;
+ initAsExactMatch(copyFrom(c.protocol()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of IPv6ExthdrFlagsCriterion.
+ */
+ static final class IPv6ExthdrFlagsCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ IPv6ExthdrFlagsCriterion c = (IPv6ExthdrFlagsCriterion) criterion;
+ initAsExactMatch(copyFrom(c.exthdrFlags()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of IPv6FlowLabelCriterion.
+ */
+ static final class IPv6FlowLabelCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ IPv6FlowLabelCriterion c = (IPv6FlowLabelCriterion) criterion;
+ initAsExactMatch(copyFrom(c.flowLabel()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of IPv6NDLinkLayerAddressCriterion.
+ */
+ static final class IPv6NDLinkLayerAddressCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ IPv6NDLinkLayerAddressCriterion c = (IPv6NDLinkLayerAddressCriterion) criterion;
+ initAsExactMatch(copyFrom(c.mac().toLong()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of IPv6NDTargetAddressCriterion.
+ */
+ static final class IPv6NDTargetAddressCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ IPv6NDTargetAddressCriterion c = (IPv6NDTargetAddressCriterion) criterion;
+ initAsExactMatch(copyFrom(c.targetAddress().getIp6Address().toOctets()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of IcmpCodeCriterion.
+ */
+ static final class IcmpCodeCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ IcmpCodeCriterion c = (IcmpCodeCriterion) criterion;
+ initAsExactMatch(copyFrom(c.icmpCode()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of IcmpTypeCriterion.
+ */
+ static final class IcmpTypeCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ IcmpTypeCriterion c = (IcmpTypeCriterion) criterion;
+ initAsExactMatch(copyFrom(c.icmpType()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of Icmpv6CodeCriterion.
+ */
+ static final class Icmpv6CodeCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ Icmpv6CodeCriterion c = (Icmpv6CodeCriterion) criterion;
+ initAsExactMatch(copyFrom(c.icmpv6Code()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of Icmpv6TypeCriterion.
+ */
+ static final class Icmpv6TypeCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ Icmpv6TypeCriterion c = (Icmpv6TypeCriterion) criterion;
+ initAsExactMatch(copyFrom(c.icmpv6Type()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of LambdaCriterion.
+ */
+ static final class LambdaCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ LambdaCriterion c = (LambdaCriterion) criterion;
+ initAsExactMatch(copyFrom(c.lambda()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of MetadataCriterion.
+ */
+ static final class MetadataCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ MetadataCriterion c = (MetadataCriterion) criterion;
+ initAsExactMatch(copyFrom(c.metadata()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of MplsBosCriterion.
+ */
+ static final class MplsBosCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ MplsBosCriterion c = (MplsBosCriterion) criterion;
+ int iMplsBos = c.mplsBos() ? 0 : 1;
+ initAsExactMatch(copyFrom(iMplsBos), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of MplsCriterion.
+ */
+ static final class MplsCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ MplsCriterion c = (MplsCriterion) criterion;
+ initAsExactMatch(copyFrom(c.label().toInt()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of MplsTcCriterion.
+ */
+ static final class MplsTcCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ MplsTcCriterion c = (MplsTcCriterion) criterion;
+ initAsExactMatch(copyFrom(c.tc()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of OchSignalCriterion.
+ */
+ static final class OchSignalCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ OchSignalCriterion c = (OchSignalCriterion) criterion;
+ initAsExactMatch(copyFrom(c.lambda().slotGranularity()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of OchSignalTypeCriterion.
+ */
+ static final class OchSignalTypeCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ OchSignalTypeCriterion c = (OchSignalTypeCriterion) criterion;
+ initAsExactMatch(copyFrom(c.signalType().ordinal()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of OduSignalIdCriterion.
+ */
+ static final class OduSignalIdCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ OduSignalIdCriterion c = (OduSignalIdCriterion) criterion;
+ initAsExactMatch(copyFrom(c.oduSignalId().tributaryPortNumber()), bitWidth);
+ }
+ }
+
+
+ /**
+ * Translator of OduSignalTypeCriterion.
+ */
+ static final class OduSignalTypeCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ OduSignalTypeCriterion c = (OduSignalTypeCriterion) criterion;
+ initAsExactMatch(copyFrom(c.signalType().bitRate()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of PbbIsidCriterion.
+ */
+ static final class PbbIsidCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ PbbIsidCriterion c = (PbbIsidCriterion) criterion;
+ initAsExactMatch(copyFrom(c.pbbIsid()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of PiCriterion.
+ */
+ static final class PiCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ PiCriterion c = (PiCriterion) criterion;
+ initAsExactMatch(copyFrom(c.fieldMatches().size()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of SctpPortCriterion.
+ */
+ static final class SctpPortCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ SctpPortCriterion c = (SctpPortCriterion) criterion;
+ ImmutableByteSequence value = copyFrom(c.sctpPort().toInt());
+ if (c.mask() == null) {
+ initAsExactMatch(value, bitWidth);
+ } else {
+ ImmutableByteSequence mask = copyFrom(c.mask().toInt());
+ initAsTernaryMatch(value, mask, bitWidth);
+ }
+ }
+ }
+
+ /**
+ * Translator of TcpFlagsCriterion.
+ */
+ static final class TcpFlagsCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ TcpFlagsCriterion c = (TcpFlagsCriterion) criterion;
+ initAsExactMatch(copyFrom(c.flags()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of TcpPortCriterion.
+ */
+ static final class TcpPortCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ TcpPortCriterion c = (TcpPortCriterion) criterion;
+ ImmutableByteSequence value = copyFrom(c.tcpPort().toInt());
+ if (c.mask() == null) {
+ initAsExactMatch(value, bitWidth);
+ } else {
+ ImmutableByteSequence mask = copyFrom(c.mask().toInt());
+ initAsTernaryMatch(value, mask, bitWidth);
+ }
+
+ }
+ }
+
+ /**
+ * Translator of TunnelIdCriterion.
+ */
+ static final class TunnelIdCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ TunnelIdCriterion c = (TunnelIdCriterion) criterion;
+ initAsExactMatch(copyFrom(c.tunnelId()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of VlanPcpCriterion.
+ */
+ static final class VlanPcpCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ VlanPcpCriterion c = (VlanPcpCriterion) criterion;
+ initAsExactMatch(copyFrom(c.priority()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of ArpHaCriterion.
+ */
+ static final class ArpHaCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ ArpHaCriterion c = (ArpHaCriterion) criterion;
+ initAsExactMatch(copyFrom(c.mac().toLong()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of ArpOpCriterion.
+ */
+ static final class ArpOpCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ ArpOpCriterion c = (ArpOpCriterion) criterion;
+ initAsExactMatch(copyFrom(c.arpOp()), bitWidth);
+ }
+ }
+
+ /**
+ * Translator of ArpPaCriterion.
+ */
+ static final class ArpPaCriterionTranslator extends AbstractCriterionTranslator {
+ @Override
+ public void init(Criterion criterion, int bitWidth) throws ByteSequenceTrimException {
+ ArpPaCriterion c = (ArpPaCriterion) criterion;
+ initAsExactMatch(copyFrom(c.ip().toInt()), bitWidth);
+ }
+ }
+
+
+
+
}