diff --git a/apps/flowspec-api/BUCK b/apps/flowspec-api/BUCK
new file mode 100755
index 0000000..01efc7a
--- /dev/null
+++ b/apps/flowspec-api/BUCK
@@ -0,0 +1,11 @@
+BUNDLES = [
+    '//apps/flowspec-api/flowapi:onos-apps-flowspec-api-flowapi',
+
+]
+
+onos_app (
+  title = 'Flowspec API',
+  url = 'http://onosproject.org',
+  included_bundles = BUNDLES,
+  description = 'ONOS framework applications',
+)
diff --git a/apps/flowspec-api/flowapi/BUCK b/apps/flowspec-api/flowapi/BUCK
new file mode 100755
index 0000000..2596ffb
--- /dev/null
+++ b/apps/flowspec-api/flowapi/BUCK
@@ -0,0 +1,18 @@
+COMPILE_DEPS = [
+    '//utils/osgi:onlab-osgi',
+    '//utils/misc:onlab-misc',
+    '//lib:commons-io',
+    '//lib:guava',
+    '//lib:kryo',
+    '//lib:slf4j-api',
+]
+
+TEST_DEPS = [
+    '//lib:TEST_ADAPTERS',
+]
+
+osgi_jar_with_tests (
+    deps = COMPILE_DEPS,
+    test_deps = TEST_DEPS,
+    visibility = ['PUBLIC'],
+)
diff --git a/apps/flowspec-api/flowapi/pom.xml b/apps/flowspec-api/flowapi/pom.xml
new file mode 100755
index 0000000..c5f54767
--- /dev/null
+++ b/apps/flowspec-api/flowapi/pom.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2017-present 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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onosproject</groupId>
+        <artifactId>onos-app-flowspec-api</artifactId>
+        <version>1.9.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>onos-app-flowspec-api-flowapi</artifactId>
+    <packaging>bundle</packaging>
+
+    <description>api bundle to be accessible across the layers</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onlab-misc</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava-testlib</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/apps/flowspec-api/flowapi/src/main/java/org/onosproject/flowapi/ExtFlowContainer.java b/apps/flowspec-api/flowapi/src/main/java/org/onosproject/flowapi/ExtFlowContainer.java
new file mode 100755
index 0000000..9a253c4
--- /dev/null
+++ b/apps/flowspec-api/flowapi/src/main/java/org/onosproject/flowapi/ExtFlowContainer.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2017-present 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.flowapi;
+
+import com.google.common.base.MoreObjects;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Representation of Multi value flow container having custom rules.
+ */
+public final class ExtFlowContainer {
+
+    private List<ExtFlowTypes> container = new ArrayList<>();
+    private String deviceId;
+
+    /**
+     * Creates an object of type ExtFlowContainer.
+     *
+     * @param container flow container
+     */
+    public ExtFlowContainer(List<ExtFlowTypes> container) {
+        this.container = container;
+    }
+
+    /**
+     * Returns the ExtFlowContainer by setting its value.
+     *
+     * @param container flow container
+     * @return object of ExtFlowContainer
+     */
+    public static ExtFlowContainer of(List<ExtFlowTypes> container) {
+        return new ExtFlowContainer(container);
+    }
+
+    /**
+     * Returns the list of  ExtFlowTypes value.
+     *
+     * @return list of ExtFlowTypes
+     */
+    public List<ExtFlowTypes> container() {
+        return container;
+    }
+
+    /**
+     * Returns the device Id.
+     *
+     * @return deviceId
+     */
+    public String deviceId() {
+        return deviceId;
+    }
+
+    /**
+     * Adds the flow type to the container list.
+     *
+     * @param  obj of ExtFlowTypes type
+     */
+    public void add(ExtFlowTypes obj) {
+        container.add(obj);
+    }
+
+    /**
+     * Removes the flow type from the container list.
+     *
+     * @param  obj of ExtFlowTypes type
+     */
+    public void remove(ExtFlowTypes obj) {
+        container.remove(obj);
+    }
+
+    /**
+     * Sets the device Id to this container.
+     *
+     * @param deviceId to be set to this container
+     */
+    public void setDeviceId(String deviceId) {
+        this.deviceId = deviceId;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(container);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (!(obj instanceof ExtFlowContainer)) {
+            return false;
+        }
+        final ExtFlowContainer other = (ExtFlowContainer) obj;
+        return Objects.equals(this.container, other.container)
+                && Objects.equals(this.deviceId, other.deviceId);
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+                .add("container", container)
+                .add("deviceId", deviceId)
+                .toString();
+    }
+}
diff --git a/apps/flowspec-api/flowapi/src/main/java/org/onosproject/flowapi/ExtFlowTypes.java b/apps/flowspec-api/flowapi/src/main/java/org/onosproject/flowapi/ExtFlowTypes.java
new file mode 100755
index 0000000..80434d8
--- /dev/null
+++ b/apps/flowspec-api/flowapi/src/main/java/org/onosproject/flowapi/ExtFlowTypes.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2017-present 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.flowapi;
+
+/**
+ * Representation of BgpFlow container having custom rules.
+ */
+public interface ExtFlowTypes {
+
+    /**
+     * Bgp types.
+     */
+    public enum ExtType {
+
+        /** Extended flow rule key. */
+        EXT_FLOW_RULE_KEY(0),
+
+        /** IPv4 destination address. */
+        IPV4_DST_PFX(1),
+
+        /** IPv4 source address. */
+        IPV4_SRC_PFX(2),
+
+        /** IP protocol list. */
+        IP_PROTO_LIST(3),
+
+        /** Input port list. */
+        IN_PORT_LIST(4),
+
+        /** Destination port list. */
+        DST_PORT_LIST(5),
+
+        /** Source port list. */
+        SRC_PORT_LIST(6),
+
+        /** ICMP type list. */
+        ICMP_TYPE_LIST(7),
+
+        /** ICMP code list. */
+        ICMP_CODE_LIST(8),
+
+        /** TCP flag list. */
+        TCP_FLAG_LIST(9),
+
+        /** Packet length list. */
+        PACKET_LENGTH_LIST(10),
+
+        /** DSCP Value component. */
+        DSCP_VALUE_LIST(11),
+
+        /** Fragment list. */
+        FRAGMENT_LIST(12),
+
+        /** Wide community flags. */
+        WIDE_COMM_FLAGS(13),
+
+        /** Wide community hop count. */
+        WIDE_COMM_HOP_COUNT(14),
+
+        /** Wide community community attribute. */
+        WIDE_COMM_COMMUNITY(15),
+
+        /** Wide community context AS. */
+        WIDE_COMM_CONTEXT_AS(16),
+
+        /** Wide community local AS. */
+        WIDE_COMM_LOCAL_AS(17),
+
+        /** Wide community target prefixes. */
+        WIDE_COMM_TARGET(18),
+
+        /** Wide community extended target prefixes. */
+        WIDE_COMM_EXT_TARGET(19),
+
+        /** Wide community parameter. */
+        WIDE_COMM_PARAMETER(20),
+
+        /** Traffic filtering actions. */
+
+        TRAFFIC_RATE(0x8006),
+        TRAFFIC_ACTION(0x8007),
+        TRAFFIC_REDIRECT(0x8008),
+        TRAFFIC_MARKING(0x8009);
+
+        private int type;
+
+        /**
+         * Creates a new type.
+         *
+         * @param type type code
+         */
+        ExtType(int type) {
+            this.type = type;
+        }
+
+        /**
+         * Returns the type object for this type code.
+         *
+         * @return ExtType object
+         */
+        public int type() {
+            return (type);
+        }
+    }
+
+    ExtType type();
+}
diff --git a/apps/flowspec-api/flowapi/src/main/java/org/onosproject/flowapi/package-info.java b/apps/flowspec-api/flowapi/src/main/java/org/onosproject/flowapi/package-info.java
new file mode 100755
index 0000000..f2999c5
--- /dev/null
+++ b/apps/flowspec-api/flowapi/src/main/java/org/onosproject/flowapi/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2017-present 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.
+ */
+
+/**
+ * API bundle.
+ */
+package org.onosproject.flowapi;
diff --git a/apps/flowspec-api/pom.xml b/apps/flowspec-api/pom.xml
new file mode 100755
index 0000000..f6c9926
--- /dev/null
+++ b/apps/flowspec-api/pom.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2017-present 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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onosproject</groupId>
+        <artifactId>onos-apps</artifactId>
+        <version>1.9.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>onos-app-flowspec-api</artifactId>
+    <packaging>pom</packaging>
+
+    <description>ONOS flow spec applications</description>
+
+    <modules>
+        <module>flowapi</module>
+    </modules>
+    <dependencies>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onlab-junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava-testlib</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.easymock</groupId>
+            <artifactId>easymock</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onlab-osgi</artifactId>
+            <classifier>tests</classifier>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-api</artifactId>
+            <scope>test</scope>
+            <classifier>tests</classifier>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-servlet</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-jetty</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/apps/pom.xml b/apps/pom.xml
index a5c3fe9..497e5cc 100644
--- a/apps/pom.xml
+++ b/apps/pom.xml
@@ -46,6 +46,7 @@
         <module>reactive-routing</module>
         <module>virtualbng</module>
         <module>bgprouter</module>
+        <module>flowspec-api</module>
         <module>test</module>
         <module>segmentrouting</module>
         <module>kafka-integration</module>
diff --git a/core/api/src/main/java/org/onosproject/net/flow/criteria/ExtensionSelectorType.java b/core/api/src/main/java/org/onosproject/net/flow/criteria/ExtensionSelectorType.java
index dd31d54..f65c168 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/criteria/ExtensionSelectorType.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/criteria/ExtensionSelectorType.java
@@ -42,6 +42,7 @@
         OFDPA_MATCH_VLAN_VID(16),
         OFDPA_MATCH_OVID(17),
         OFDPA_MATCH_MPLS_L2_PORT(18),
+        EXT_MATCH_FLOW_TYPE(20),
         BMV2_MATCH_PARAMS(128),
 
         UNRESOLVED_TYPE(200);
diff --git a/drivers/flowspec/BUCK b/drivers/flowspec/BUCK
new file mode 100644
index 0000000..c62d3a3
--- /dev/null
+++ b/drivers/flowspec/BUCK
@@ -0,0 +1,26 @@
+COMPILE_DEPS = [
+    '//lib:CORE_DEPS',
+    '//drivers/default:onos-drivers-default',
+    '//apps/flowspec-api/flowapi:onos-apps-flowspec-api-flowapi',
+]
+
+TEST_DEPS = [
+    '//lib:TEST_ADAPTERS',
+    '//core/api:onos-api-tests',
+]
+
+osgi_jar_with_tests (
+    deps = COMPILE_DEPS,
+    test_deps = TEST_DEPS,
+    resources_root = 'src/main/resources',
+    resources = glob(['src/main/resources/**']),
+)
+
+onos_app (
+    app_name = 'org.onosproject.drivers.flowspec',
+    title = 'Flow specification Device Drivers',
+    category = 'Drivers',
+    url = 'http://onosproject.org',
+    description = 'ONOS flow specification device drivers application.',
+    required_apps = [ 'org.onosproject.drivers'],
+)
diff --git a/drivers/flowspec/pom.xml b/drivers/flowspec/pom.xml
new file mode 100644
index 0000000..5745169
--- /dev/null
+++ b/drivers/flowspec/pom.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2017-present 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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>onos-drivers-general</artifactId>
+        <groupId>org.onosproject</groupId>
+        <version>1.9.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>onos-drivers-flowspec</artifactId>
+    <packaging>bundle</packaging>
+
+    <description>Other flow specification device drivers</description>
+
+    <properties>
+        <onos.app.name>org.onosproject.drivers.flowspec</onos.app.name>
+        <onos.app.origin>ON.Lab</onos.app.origin>
+        <onos.app.category>Drivers</onos.app.category>
+        <onos.app.title>Flow specification Device Drivers</onos.app.title>
+        <onos.app.url>http://onosproject.org</onos.app.url>
+        <onos.app.requires>
+            org.onosproject.drivers
+        </onos.app.requires>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-app-flowspec-api-flowapi</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-drivers</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onlab-misc</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>19.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/drivers/flowspec/src/main/java/org/onosproject/driver/flowspec/extensions/ExtMatchExtension.java b/drivers/flowspec/src/main/java/org/onosproject/driver/flowspec/extensions/ExtMatchExtension.java
new file mode 100644
index 0000000..6cdbd3a
--- /dev/null
+++ b/drivers/flowspec/src/main/java/org/onosproject/driver/flowspec/extensions/ExtMatchExtension.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2017-present 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.driver.flowspec.extensions;
+
+import org.onlab.util.KryoNamespace;
+import org.onosproject.flowapi.ExtFlowContainer;
+import org.onosproject.net.flow.AbstractExtension;
+import org.onosproject.net.flow.criteria.ExtensionSelector;
+import org.onosproject.net.flow.criteria.ExtensionSelectorType;
+
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+ /**
+  * Implementation of extension selector for multi value.
+  */
+ public final class ExtMatchExtension extends AbstractExtension implements ExtensionSelector  {
+     private ExtFlowContainer container;
+     private final KryoNamespace appKryo = new KryoNamespace.Builder().register(ExtMatchExtension.class).build();
+
+     /**
+      * Creates an object of ExtMatchExtension.
+      */
+     public ExtMatchExtension() {
+         this.container = null;
+     }
+     /**
+      * Returns the container.
+      *
+      * @return the container to match
+      */
+     public ExtFlowContainer container() {
+         return container;
+     }
+
+     @Override
+     public ExtensionSelectorType type() {
+         return ExtensionSelectorType.ExtensionSelectorTypes.EXT_MATCH_FLOW_TYPE.type();
+     }
+
+     @Override
+     public byte[] serialize() {
+         return appKryo.serialize(container);
+     }
+
+     @Override
+     public void deserialize(byte[] data) {
+         container = ExtFlowContainer.of(appKryo.deserialize(data));
+     }
+
+     @Override
+     public String toString() {
+         return toStringHelper(type().toString())
+                 .add("container", container)
+                 .toString();
+     }
+
+     @Override
+     public int hashCode() {
+         return Objects.hash(type(), container);
+     }
+
+     @Override
+     public boolean equals(Object obj) {
+         if (this == obj) {
+             return true;
+         }
+         if (obj instanceof ExtMatchExtension) {
+             ExtMatchExtension that = (ExtMatchExtension) obj;
+             return Objects.equals(container, that.container) &&
+                     Objects.equals(this.type(), that.type());
+         }
+         return false;
+     }
+ }
diff --git a/drivers/flowspec/src/main/java/org/onosproject/driver/flowspec/extensions/MultiExtensionSelectorInterpreter.java b/drivers/flowspec/src/main/java/org/onosproject/driver/flowspec/extensions/MultiExtensionSelectorInterpreter.java
new file mode 100644
index 0000000..ee50d01
--- /dev/null
+++ b/drivers/flowspec/src/main/java/org/onosproject/driver/flowspec/extensions/MultiExtensionSelectorInterpreter.java
@@ -0,0 +1,37 @@
+/*
+  * Copyright 2017-present 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.driver.flowspec.extensions;
+
+import org.onosproject.net.behaviour.ExtensionSelectorResolver;
+import org.onosproject.net.driver.AbstractHandlerBehaviour;
+import org.onosproject.net.flow.criteria.ExtensionSelector;
+import org.onosproject.net.flow.criteria.ExtensionSelectorType;
+
+ /**
+  * Interpreter for multi flow rule selector extensions.
+  */
+ public class MultiExtensionSelectorInterpreter
+         extends AbstractHandlerBehaviour
+         implements ExtensionSelectorResolver {
+
+     @Override
+     public ExtensionSelector getExtensionSelector(ExtensionSelectorType type) {
+         if (type.equals(ExtensionSelectorType.ExtensionSelectorTypes.EXT_MATCH_FLOW_TYPE.type())) {
+             return new ExtMatchExtension();
+         }
+         return null;
+     }
+ }
diff --git a/drivers/flowspec/src/main/java/org/onosproject/driver/flowspec/extensions/package-info.java b/drivers/flowspec/src/main/java/org/onosproject/driver/flowspec/extensions/package-info.java
new file mode 100644
index 0000000..fe9ecd0
--- /dev/null
+++ b/drivers/flowspec/src/main/java/org/onosproject/driver/flowspec/extensions/package-info.java
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2017-present 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.
+ */
+/**
+ * Implementations of extension behaviours for legacy devices.
+ */
+package org.onosproject.driver.flowspec.extensions;
diff --git a/drivers/flowspec/src/main/java/org/onosproject/drivers/flowspec/FlowSpecDriversLoader.java b/drivers/flowspec/src/main/java/org/onosproject/drivers/flowspec/FlowSpecDriversLoader.java
new file mode 100644
index 0000000..ba6aca7
--- /dev/null
+++ b/drivers/flowspec/src/main/java/org/onosproject/drivers/flowspec/FlowSpecDriversLoader.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2017-present 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.drivers.flowspec;
+
+import org.apache.felix.scr.annotations.Component;
+import org.onosproject.net.driver.AbstractDriverLoader;
+
+/**
+ * Loader for legacy device drivers.
+ */
+@Component(immediate = true)
+public class FlowSpecDriversLoader extends AbstractDriverLoader {
+
+    public FlowSpecDriversLoader() {
+        super("/flowspec-drivers.xml");
+    }
+}
diff --git a/drivers/flowspec/src/main/java/org/onosproject/drivers/flowspec/package-info.java b/drivers/flowspec/src/main/java/org/onosproject/drivers/flowspec/package-info.java
new file mode 100644
index 0000000..0b6a2cb
--- /dev/null
+++ b/drivers/flowspec/src/main/java/org/onosproject/drivers/flowspec/package-info.java
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2017-present 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 for legacy device drivers.
+ */
+package org.onosproject.drivers.flowspec;
diff --git a/drivers/flowspec/src/main/resources/flowspec-drivers.xml b/drivers/flowspec/src/main/resources/flowspec-drivers.xml
new file mode 100644
index 0000000..17195c2
--- /dev/null
+++ b/drivers/flowspec/src/main/resources/flowspec-drivers.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2017-present 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.
+  -->
+<drivers>
+     <driver name="flowspec" extends="default" manufacturer="" hwVersion="1.0.0" swVersion="1.0.0">
+         <behaviour api="org.onosproject.net.behaviour.ExtensionSelectorResolver"
+                    impl="org.onosproject.driver.flowspec.extensions.MultiExtensionSelectorInterpreter" />
+     </driver>
+</drivers>
+
diff --git a/drivers/flowspec/src/test/java/org/onosproject/drivers/flowspec/FlowSpecDriversLoaderTest.java b/drivers/flowspec/src/test/java/org/onosproject/drivers/flowspec/FlowSpecDriversLoaderTest.java
new file mode 100644
index 0000000..e3e4310
--- /dev/null
+++ b/drivers/flowspec/src/test/java/org/onosproject/drivers/flowspec/FlowSpecDriversLoaderTest.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2017-present 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.drivers.flowspec;
+
+import org.junit.Before;
+import org.onosproject.net.driver.AbstractDriverLoaderTest;
+
+/**
+ * Legacy device drivers loader test.
+ */
+public class FlowSpecDriversLoaderTest extends AbstractDriverLoaderTest {
+
+    @Before
+    public void setUp() {
+        loader = new FlowSpecDriversLoader();
+    }
+}
diff --git a/drivers/pom.xml b/drivers/pom.xml
index 1be923c..5e73f4c 100644
--- a/drivers/pom.xml
+++ b/drivers/pom.xml
@@ -47,6 +47,7 @@
         <module>arista</module>
         <module>juniper</module>
         <module>lisp</module>
+        <module>flowspec</module>
     </modules>
 
     <!--<properties>
diff --git a/modules.defs b/modules.defs
index 61565a9..85a94b4 100644
--- a/modules.defs
+++ b/modules.defs
@@ -94,6 +94,7 @@
     '//drivers/ovsdb:onos-drivers-ovsdb-oar',
     '//drivers/juniper:onos-drivers-juniper-oar',
     '//drivers/lisp:onos-drivers-lisp-oar',
+    '//drivers/flowspec:onos-drivers-flowspec-oar',
 ]
 
 ONOS_PROVIDERS = [
@@ -186,6 +187,7 @@
     '//apps/tenbi/yangmodel:onos-apps-tenbi-yangmodel-feature',
     '//apps/tenbi:onos-apps-tenbi-oar',
     '//protocols/restconf/server:onos-protocols-restconf-server-oar',
+    '//apps/flowspec-api:onos-apps-flowspec-api-oar',
 ]
 
 APP_JARS = [
