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