diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/QueueDescription.java b/core/api/src/main/java/org/onosproject/net/behaviour/QueueDescription.java
new file mode 100644
index 0000000..43cb0a0
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/QueueDescription.java
@@ -0,0 +1,172 @@
+/*
+ * 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.net.behaviour;
+
+import com.google.common.annotations.Beta;
+import org.onlab.util.Bandwidth;
+import org.onosproject.net.Annotated;
+import org.onosproject.net.Description;
+
+import java.util.EnumSet;
+import java.util.Optional;
+
+/**
+ * Default implementation of immutable Queue description.
+ */
+@Beta
+public interface QueueDescription extends Description, Annotated {
+
+    /**
+     * Denotes the type of the Queue.
+     */
+    enum Type {
+        /**
+         * Support min rate.
+         */
+        MIN,
+
+        /**
+         * Support max rate.
+         */
+        MAX,
+
+        /**
+         * Support priority.
+         */
+        PRIORITY,
+
+        /**
+         * Support burst.
+         */
+        BURST
+    }
+
+    /**
+     * Returns queue identifier.
+     *
+     * @return queue identifier
+     */
+    QueueId queueId();
+
+    /**
+     * Returns dscp in range 0 to 63.
+     *
+     * @return dscp
+     */
+    Optional<Integer> dscp();
+
+    /**
+     * Returns type.
+     *
+     * @return type
+     */
+    EnumSet<Type> type();
+
+    /**
+     * Returns max rate, Valid only in specific type.
+     *
+     * @return Maximum allowed bandwidth, in bit/s.
+     */
+    Optional<Bandwidth> maxRate();
+
+    /**
+     * Returns min rate, Valid only in specific type.
+     *
+     * @return Minimum guaranteed bandwidth, in bit/s.
+     */
+    Optional<Bandwidth> minRate();
+
+    /**
+     * Returns burst, Valid only in specific type.
+     *
+     * @return Burst size, in bits
+     */
+    Optional<Long> burst();
+
+    /**
+     * Returns priority, Valid only in specific type.
+     * small number have higher priority, in range 0 to 0xFFFFFFFF
+     * @return priority
+     */
+    Optional<Long> priority();
+
+
+
+    interface Builder {
+
+        /**
+         * Returns queue description builder with given name.
+         *
+         * @param queueId queue identifier
+         * @return queue description builder
+         */
+        Builder queueId(QueueId queueId);
+
+        /**
+         * Returns queue description builder with given dscp.
+         *
+         * @param dscp dscp
+         * @return queue description builder
+         */
+        Builder dscp(Integer dscp);
+
+        /**
+         * Returns queue description builder with given type.
+         *
+         * @param type type
+         * @return queue description builder
+         */
+        Builder type(EnumSet<Type> type);
+
+        /**
+         * Returns queue description builder with max rate.
+         * @param maxRate Maximum allowed bandwidth
+         * @return queue description builder
+         */
+        Builder maxRate(Bandwidth maxRate);
+
+        /**
+         * Returns queue description builder with a given min rate.
+         *
+         * @param minRate Minimum guaranteed bandwidth
+         * @return queue description builder
+         */
+        Builder minRate(Bandwidth minRate);
+
+        /**
+         * Returns queue description builder with a given burst.
+         *
+         * @param burst burst size
+         * @return queue description builder
+         */
+        Builder burst(Long burst);
+
+        /**
+         * Returns queue description builder with a given priority.
+         * small number have higher priority, in range 0 to 0xFFFFFFFF
+         * @param priority priority
+         * @return queue description builder
+         */
+        Builder priority(Long priority);
+
+        /**
+         * Builds an immutable bridge description.
+         *
+         * @return queue description
+         */
+        QueueDescription build();
+    }
+}
