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