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/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);
+ }
+ }
+
+
+
+
}