[ONOS-5565]Implementation of QosConfig and QueueConfig

Change-Id: I6a367b53cfca2e85e8aaa6cddb541d7b3ffccbc0
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();
+    }
+}