[ONOS-3116] Flow classifier for service function chain.

Change-Id: Iad6f548c190a96a0b2a79a2bd9b90d0a96f3c179
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FlowClassifier.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FlowClassifier.java
new file mode 100644
index 0000000..7b4108d
--- /dev/null
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FlowClassifier.java
@@ -0,0 +1,259 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.vtnrsc;
+
+import org.onlab.packet.IpPrefix;
+
+/**
+ * Abstraction of an entity which provides flow classifier for service function chain.
+ * FlowClassifier classify the traffic based on the criteria defined in the request.
+ * The classification can be based on port range or source and destination IP address or
+ * other flow classifier elements.
+ */
+public interface FlowClassifier {
+
+    /**
+     * Returns flow classifier ID.
+     *
+     * @return flow classifier id
+     */
+    FlowClassifierId flowClassifierId();
+
+    /**
+     * Returns Tenant ID.
+     *
+     * @return tenant Id
+     */
+    TenantId tenantId();
+
+    /**
+     * Returns flow classifier name.
+     *
+     * @return flow classifier name
+     */
+    String name();
+
+    /**
+     * Returns flow classifier description.
+     *
+     * @return flow classifier description
+     */
+    String description();
+
+    /**
+     * Returns EtherType.
+     *
+     * @return EtherType
+     */
+    String etherType();
+
+    /**
+     * Returns IP Protocol.
+     *
+     * @return IP protocol
+     */
+    String protocol();
+
+    /**
+     * Returns minimum source port range.
+     *
+     * @return minimum source port range
+     */
+    int minSrcPortRange();
+
+    /**
+     * Returns maximum source port range.
+     *
+     * @return maximum source port range
+     */
+    int maxSrcPortRange();
+
+    /**
+     * Returns minimum destination port range.
+     *
+     * @return minimum destination port range
+     */
+    int minDstPortRange();
+
+    /**
+     * Returns maximum destination port range.
+     *
+     * @return maximum destination port range.
+     */
+    int maxDstPortRange();
+
+    /**
+     * Returns Source IP prefix.
+     *
+     * @return Source IP prefix
+     */
+    IpPrefix srcIpPrefix();
+
+    /**
+     * Returns Destination IP prefix.
+     *
+     * @return Destination IP prefix
+     */
+    IpPrefix dstIpPrefix();
+
+    /**
+     * Returns Source virtual port.
+     *
+     * @return Source virtual port
+     */
+    VirtualPortId srcPort();
+
+    /**
+     * Returns Destination virtual port.
+     *
+     * @return Destination virtual port
+     */
+    VirtualPortId dstPort();
+
+    /**
+     * Returns whether this Flow classifier is an exact match to the
+     * Flow classifier given in the argument.
+     *
+     * @param flowClassifier other flowClassifier to match against
+     * @return true if the flowClassifiers are an exact match, otherwise false
+     */
+    boolean exactMatch(FlowClassifier flowClassifier);
+
+    /**
+     * Builder for flow Classifier.
+     */
+    interface Builder {
+
+        /**
+         * Returns Flow Classifier.
+         *
+         * @return flow classifier.
+         */
+        FlowClassifier build();
+
+        /**
+         * Sets Flow Classifier ID.
+         *
+         * @param flowClassifierId flow classifier id.
+         * @return Builder object by setting flow classifier Id.
+         */
+        Builder setFlowClassifierId(FlowClassifierId flowClassifierId);
+
+        /**
+         * Sets Tenant ID.
+         *
+         * @param tenantId tenant id.
+         * @return Builder object by setting Tenant ID.
+         */
+        Builder setTenantId(TenantId tenantId);
+
+        /**
+         * Sets Flow classifier name.
+         *
+         * @param name flow classifier name
+         * @return builder object by setting flow classifier name
+         */
+        Builder setName(String name);
+
+        /**
+         * Sets flow classifier description.
+         *
+         * @param description flow classifier description
+         * @return flow classifier description
+         */
+        Builder setDescription(String description);
+
+        /**
+         * Sets EtherType.
+         *
+         * @param etherType EtherType
+         * @return EtherType
+         */
+        Builder setEtherType(String etherType);
+
+        /**
+         * Sets IP protocol.
+         *
+         * @param protocol IP protocol
+         * @return builder object by setting IP protocol
+         */
+        Builder setProtocol(String protocol);
+
+        /**
+         * Set minimum source port range.
+         *
+         * @param minRange minimum source port range
+         * @return builder object by setting minimum source port range
+         */
+        Builder setMinSrcPortRange(int minRange);
+
+        /**
+         * Sets maximum source port range.
+         *
+         * @param maxRange maximum source port range
+         * @return builder object by setting maximum source port range
+         */
+        Builder setMaxSrcPortRange(int maxRange);
+
+        /**
+         * Sets minimum destination port range.
+         *
+         * @param minRange minimum destination port range
+         * @return builder object by setting minimum destination port range
+         */
+        Builder setMinDstPortRange(int minRange);
+
+        /**
+         * Sets maximum destination port range.
+         *
+         * @param maxRange maximum destination port range.
+         * @return builder object by setting maximum destination port range.
+         */
+        Builder setMaxDstPortRange(int maxRange);
+
+        /**
+         * Sets Source IP prefix.
+         *
+         * @param srcIpPrefix Source IP prefix
+         * @return builder object by setting Source IP prefix
+         */
+        Builder setSrcIpPrefix(IpPrefix srcIpPrefix);
+
+        /**
+         * Sets Destination IP prefix.
+         *
+         * @param dstIpPrefix Destination IP prefix
+         * @return builder object by setting Destination IP prefix
+         */
+        Builder setDstIpPrefix(IpPrefix dstIpPrefix);
+
+        /**
+         * Sets Source virtual port.
+         *
+         * @param srcPort Source virtual port
+         * @return builder object by setting Source virtual port
+         */
+        Builder setSrcPort(VirtualPortId srcPort);
+
+        /**
+         * Sets Destination virtual port.
+         *
+         * @param dstPort Destination virtual port
+         * @return builder object by setting Destination virtual port
+         */
+        Builder setDstPort(VirtualPortId dstPort);
+    }
+}