diff --git a/README.md b/README.md
index 553c1472c4b9790f89f0963c063375520fb582ae..65316ed46e3108eae9f7372f15f98f1b553847d3 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,449 @@
 QoS Manager
+====
+
+This program implements methods provided by the `qos` object on U-Bus. This is done by calling `libqos` provided by `easy-soc-libs`.
+
+## UCI Config
+
+qosmngr requires a configuration file provide objects over ubus. The configuration file is an uci file `/etc/config/qos`. Sample configuration file is provided below.
+
+````bash
+config queue 'q_0_eth1'
+        option enable '1'
+        option ifname 'eth1'
+        option precedence '0'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_1_eth1'
+        option enable '1'
+        option ifname 'eth1'
+        option precedence '1'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_2_eth1'
+        option enable '1'
+        option ifname 'eth1'
+        option precedence '2'
+        option scheduling 'SP'
+        option rate '0'
+        option weight '1'
+        option burst_size '0'
+
+config queue 'q_3_eth1'
+        option enable '1'
+        option ifname 'eth1'
+        option precedence '3'
+        option scheduling 'SP'
+        option rate '0'
+        option weight '1'
+        option burst_size '0'
+
+config queue 'q_4_eth1'
+        option enable '1'
+        option ifname 'eth1'
+        option precedence '4'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_5_eth1'
+        option enable '1'
+        option ifname 'eth1'
+        option precedence '5'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_6_eth1'
+        option enable '1'
+        option ifname 'eth1'
+        option precedence '6'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_7_eth1'
+        option enable '1'
+        option ifname 'eth1'
+        option precedence '7'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_0_eth2'
+        option enable '1'
+        option ifname 'eth2'
+        option precedence '0'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_1_eth2'
+        option enable '1'
+        option ifname 'eth2'
+        option precedence '1'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_2_eth2'
+        option enable '1'
+        option ifname 'eth2'
+        option precedence '2'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_3_eth2'
+        option enable '1'
+        option ifname 'eth2'
+        option precedence '3'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_4_eth2'
+        option enable '1'
+        option ifname 'eth2'
+        option precedence '4'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_5_eth2'
+        option enable '1'
+        option ifname 'eth2'
+        option precedence '5'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_6_eth2'
+        option enable '1'
+        option ifname 'eth2'
+        option precedence '6'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_7_eth2'
+        option enable '1'
+        option ifname 'eth2'
+        option precedence '7'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_0_eth3'
+        option enable '1'
+        option ifname 'eth3'
+        option precedence '0'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_1_eth3'
+        option enable '1'
+        option ifname 'eth3'
+        option precedence '1'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_2_eth3'
+        option enable '1'
+        option ifname 'eth3'
+        option precedence '2'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_3_eth3'
+        option enable '1'
+        option ifname 'eth3'
+        option precedence '3'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_4_eth3'
+        option enable '1'
+        option ifname 'eth3'
+        option precedence '4'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_5_eth3'
+        option enable '1'
+        option ifname 'eth3'
+        option precedence '5'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_6_eth3'
+        option enable '1'
+        option ifname 'eth3'
+        option precedence '6'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_7_eth3'
+        option enable '1'
+        option ifname 'eth3'
+        option precedence '7'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_0_eth4'
+        option enable '1'
+        option ifname 'eth4'
+        option precedence '0'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_1_eth4'
+        option enable '1'
+        option ifname 'eth4'
+        option precedence '1'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_2_eth4'
+        option enable '1'
+        option ifname 'eth4'
+        option precedence '2'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_3_eth4'
+        option enable '1'
+        option ifname 'eth4'
+        option precedence '3'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_4_eth4'
+        option enable '1'
+        option ifname 'eth4'
+        option precedence '4'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_5_eth4'
+        option enable '1'
+        option ifname 'eth4'
+        option precedence '5'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_6_eth4'
+        option enable '1'
+        option ifname 'eth4'
+        option precedence '6'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_7_eth4'
+        option enable '1'
+        option ifname 'eth4'
+        option precedence '7'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_0_eth0'
+        option enable '1'
+        option ifname 'eth0'
+        option precedence '0'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_1_eth0'
+        option enable '1'
+        option ifname 'eth0'
+        option precedence '1'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_2_eth0'
+        option enable '1'
+        option ifname 'eth0'
+        option precedence '2'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_3_eth0'
+        option enable '1'
+        option ifname 'eth0'
+        option precedence '3'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_4_eth0'
+        option enable '1'
+        option ifname 'eth0'
+        option precedence '4'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_5_eth0'
+        option enable '1'
+        option ifname 'eth0'
+        option precedence '5'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_6_eth0'
+        option enable '1'
+        option ifname 'eth0'
+        option precedence '6'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config queue 'q_7_eth0'
+        option enable '1'
+        option ifname 'eth0'
+        option precedence '7'
+        option scheduling 'SP'
+        option rate '0'
+        option burst_size '0'
+        option weight '1'
+
+config classify 'cfg298143'
+        option enable '1'
+        option src_vendor_class_id '234be'
+        option src_user_class_id '234be'
+        option dst_vendor_class_id '234be'
+        option dst_user_class_id '234be'
+        option dst_client_id '34ab'
+        option src_client_id '34ab'
+        option vid_check '23'
+        option traffic_class '3'
+        option src_port '1'
+        option dest_port '1'
+        option src_port_range '-1'
+        option dest_port_range '-1'
+        option ifname 'eth0'
+        option policer 'cfg2b6c73'
+        option ethertype '0'
+        option dhcp_type '0'
+        option proto '1'
+        option ip_len_min '0'
+        option ip_len_max '0'
+        option dest_ip '1.2.3.4'
+        option src_ip '4.3.2.1'
+        option pcp_check '1'
+        option src_mac 'aa:bb:cc:dd:ee:ff'
+        option dst_mac 'e8:bc:c3:dc:23:f4'
+        option dscp_filter '1'
+        option dscp_mark '1'
+
+config shaper
+        option enable '0'
+        option burst_size '0'
+        option rate '0'
+        option ifname 'eth0'
+
+config policer
+        option enable '1'
+        option committed_rate '0'
+        option committed_burst_size '0'
+        option excess_burst_size '0'
+        option peak_rate '0'
+        option peak_burst_size '0'
+        option meter_type '0'
+        option name 'cfg2b6c73'
+
+````
+
+## Ubus API
+
+`ubusd` has to be running all time, as it exposes the qos functionality over ubus. By default,qosmngr registers below namespace with ubus.
+
+````bash
+root@iopsys:~# ubus -v list | grep qos
+'qos' @e1f3b458
+root@iopsys:~# 
+````
+
+````bash
+root@iopsys:~# ubus -v list qos
+'qos' @e1f3b458
+        "queue_stats":{"ifname":"String","qid":"String"}
+        "reload":{"section":"String"}
+root@iopsys:~# 
+````
+
+````bash
+root@iopsys:~# 
+root@iopsys:~# ubus -S call qos reload
+root@iopsys:~# 
+root@iopsys:~# ubus -S call qos reload '{"section":"classify"}'
+root@iopsys:~# 
+root@iopsys:~# ubus -S call qos reload '{"section":"queues"}'
+root@iopsys:~# 
+root@iopsys:~# ubus -S call qos reload '{"section":"policer"}'
+root@iopsys:~# 
+root@iopsys:~# ubus -S call qos reload '{"section":"shaper"}'
+root@iopsys:~# 
+````
+
diff --git a/docs/functionspec.md b/docs/functionspec.md
new file mode 100644
index 0000000000000000000000000000000000000000..2a6672f0ffd67a555da05996d781b40358300276
--- /dev/null
+++ b/docs/functionspec.md
@@ -0,0 +1,424 @@
+# Function Specification
+
+After ubus starts the qos methods can be invoked to get the queue information
+
+```
+root@iopsys:~# ubus call qos queue_stats '{"ifname":"eth0", "qid": 5}'
+{
+        "queues": [
+                {
+                        "qid": 5,
+                        "iface": "eth0",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                }
+        ]
+}
+```
+
+For all available queue_stats the command can be used without parameters, such as
+
+```
+root@iopsys:~# ubus call qos queue_stats 
+{
+        "queues": [
+                {
+                        "qid": 0,
+                        "iface": "eth1",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 1,
+                        "iface": "eth1",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 2,
+                        "iface": "eth1",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 3,
+                        "iface": "eth1",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 4,
+                        "iface": "eth1",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 5,
+                        "iface": "eth1",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 6,
+                        "iface": "eth1",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 7,
+                        "iface": "eth1",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 0,
+                        "iface": "eth2",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 1,
+                        "iface": "eth2",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 2,
+                        "iface": "eth2",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 3,
+                        "iface": "eth2",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 4,
+                        "iface": "eth2",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 5,
+                        "iface": "eth2",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 6,
+                        "iface": "eth2",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 7,
+                        "iface": "eth2",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 0,
+                        "iface": "eth3",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 1,
+                        "iface": "eth3",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 2,
+                        "iface": "eth3",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 3,
+                        "iface": "eth3",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 4,
+                        "iface": "eth3",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 5,
+                        "iface": "eth3",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 6,
+                        "iface": "eth3",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 7,
+                        "iface": "eth3",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 0,
+                        "iface": "eth4",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 1,
+                        "iface": "eth4",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 2,
+                        "iface": "eth4",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 3,
+                        "iface": "eth4",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 4,
+                        "iface": "eth4",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 5,
+                        "iface": "eth4",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 6,
+                        "iface": "eth4",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 7,
+                        "iface": "eth4",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 0,
+                        "iface": "eth0",
+                        "tx_packets": 624,
+                        "tx_bytes": 165216,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 1,
+                        "iface": "eth0",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 2,
+                        "iface": "eth0",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 3,
+                        "iface": "eth0",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 4,
+                        "iface": "eth0",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 5,
+                        "iface": "eth0",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 6,
+                        "iface": "eth0",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 7,
+                        "iface": "eth0",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                }
+        ]
+}
+```
+
+We can call ubus for specific port such as : 
+
+
+```
+root@iopsys:~# ubus call qos queue_stats '{"ifname":"eth0"}'
+{
+        "queues": [
+                {
+                        "qid": 0,
+                        "iface": "eth0",
+                        "tx_packets": 543,
+                        "tx_bytes": 143418,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 1,
+                        "iface": "eth0",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 2,
+                        "iface": "eth0",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 3,
+                        "iface": "eth0",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 4,
+                        "iface": "eth0",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 5,
+                        "iface": "eth0",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 6,
+                        "iface": "eth0",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                },
+                {
+                        "qid": 7,
+                        "iface": "eth0",
+                        "tx_packets": 0,
+                        "tx_bytes": 0,
+                        "tx_dropped_packets": 0,
+                        "tx_dropped_bytes": 0
+                }
+        ]
+}
+```
diff --git a/docs/qos.md b/docs/qos.md
new file mode 100644
index 0000000000000000000000000000000000000000..596e228ae216f903e5eed423ef9ac3a7d03f2ed7
--- /dev/null
+++ b/docs/qos.md
@@ -0,0 +1,330 @@
+# qos Schema
+
+```
+http://example.com/root.json
+```
+
+| Custom Properties | Additional Properties |
+| ----------------- | --------------------- |
+| Forbidden         | Permitted             |
+
+# qos
+
+| List of Methods             |
+| --------------------------- |
+| [queue_stats](#queue_stats) | Method | qos (this schema) |
+| [reload](#reload)           | Method | qos (this schema) |
+| `*`                         | any | Additional | Yes | this schema _allows_ additional properties |
+
+## queue_stats
+
+`queue_stats`
+
+- type: `Method`
+
+### queue_stats Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type    | Required     |
+| -------- | ------- | ------------ |
+| `ifname` | string  | **Required** |
+| `qid`    | integer | Optional     |
+
+#### ifname
+
+##### Interface
+
+`ifname`
+
+- is **required**
+- type: reference
+
+##### ifname Type
+
+`string`
+
+- minimum length: 1 characters
+- maximum length: 16 characters
+
+#### qid
+
+`qid`
+
+- is optional
+- type: `integer`
+
+##### qid Type
+
+`integer`
+
+- minimum value: `0`
+
+### Ubus CLI Example
+
+```
+ubus call qos queue_stats {"ifname":"irure e","qid":73828543}
+```
+
+### JSONRPC Example
+
+```json
+{
+  "jsonrpc": "2.0",
+  "id": 0,
+  "method": "call",
+  "params": ["<SID>", "qos", "queue_stats", { "ifname": "irure e", "qid": 73828543 }]
+}
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type  | Required     |
+| -------- | ----- | ------------ |
+| `queues` | array | **Required** |
+
+#### queues
+
+`queues`
+
+- is **required**
+- type: `object[]`
+
+##### queues Type
+
+Array type: `object[]`
+
+All items must be of the type: `object` with following properties:
+
+| Property             | Type    | Required     |
+| -------------------- | ------- | ------------ |
+| `iface`              | string  | **Required** |
+| `qid`                | integer | **Required** |
+| `tx_bytes`           | integer | **Required** |
+| `tx_dropped_bytes`   | integer | **Required** |
+| `tx_dropped_packets` | integer | **Required** |
+| `tx_packets`         | integer | **Required** |
+
+#### iface
+
+##### Interface
+
+`iface`
+
+- is **required**
+- type: reference
+
+##### iface Type
+
+`string`
+
+- minimum length: 1 characters
+- maximum length: 16 characters
+
+#### qid
+
+`qid`
+
+- is **required**
+- type: `integer`
+
+##### qid Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_bytes
+
+`tx_bytes`
+
+- is **required**
+- type: `integer`
+
+##### tx_bytes Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_dropped_bytes
+
+`tx_dropped_bytes`
+
+- is **required**
+- type: `integer`
+
+##### tx_dropped_bytes Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_dropped_packets
+
+`tx_dropped_packets`
+
+- is **required**
+- type: `integer`
+
+##### tx_dropped_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_packets
+
+`tx_packets`
+
+- is **required**
+- type: `integer`
+
+##### tx_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+### Output Example
+
+```json
+{
+  "queues": [
+    {
+      "qid": 57381086,
+      "iface": "magna",
+      "tx_packets": 90338294,
+      "tx_bytes": 40910869,
+      "tx_dropped_packets": 87652250,
+      "tx_dropped_bytes": 17334988
+    },
+    {
+      "qid": 87546130,
+      "iface": "eiusm",
+      "tx_packets": 76154668,
+      "tx_bytes": 74709969,
+      "tx_dropped_packets": 17965,
+      "tx_dropped_bytes": 40734824
+    },
+    {
+      "qid": 34430984,
+      "iface": "cupidatat ",
+      "tx_packets": 95305765,
+      "tx_bytes": 97035384,
+      "tx_dropped_packets": 40769776,
+      "tx_dropped_bytes": 44316439
+    },
+    {
+      "qid": 94131182,
+      "iface": "in ",
+      "tx_packets": 14061137,
+      "tx_bytes": 2161147,
+      "tx_dropped_packets": 4207125,
+      "tx_dropped_bytes": 5070078
+    }
+  ]
+}
+```
+
+## reload
+
+`reload`
+
+- type: `Method`
+
+### reload Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property  | Type   | Required     |
+| --------- | ------ | ------------ |
+| `section` | string | **Required** |
+
+#### section
+
+`section`
+
+- is **required**
+- type: `string`
+
+##### section Type
+
+`string`
+
+- minimum length: 1 characters
+- maximum length: 16 characters
+
+### Ubus CLI Example
+
+```
+ubus call qos reload {"section":"aliquip repr"}
+```
+
+### JSONRPC Example
+
+```json
+{ "jsonrpc": "2.0", "id": 0, "method": "call", "params": ["<SID>", "qos", "reload", { "section": "aliquip repr" }] }
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Output Example
+
+```json
+{}
+```
diff --git a/docs/uci.qos.md b/docs/uci.qos.md
new file mode 100644
index 0000000000000000000000000000000000000000..eda54486e76e488f4d4952ed740f27f6d09b09f7
--- /dev/null
+++ b/docs/uci.qos.md
@@ -0,0 +1 @@
+<tbody><tr><td colspan="2"><div style="font-weight: bold">qos</div><table style="width:100%"><tbody><tr><td><div style="font-weight: bold; font-size: 14px">section</div></td><td><div style="font-weight: bold; font-size: 14px">description</div></td><td><div style="font-weight: bold; font-size: 14px">multi</div></td><td><div style="font-weight: bold; font-size: 14px">options</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">classify</div></td><td class="td_row_even"><div class="td_row_even">QoS classification settings</div></td><td class="td_row_even"><div class="td_row_even">true</div></td><td class="td_row_even"><table style="width:100%"><tbody><tr><td><div style="font-weight: bold; font-size: 14px">name</div></td><td><div style="font-weight: bold; font-size: 14px">type</div></td><td><div style="font-weight: bold; font-size: 14px">required</div></td><td><div style="font-weight: bold; font-size: 14px">default</div></td><td><div style="font-weight: bold; font-size: 14px">description</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">enable</div></td><td class="td_row_even"><div class="td_row_even">boolean</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">false</div></td><td class="td_row_even"><div class="td_row_even">Classificaton criteria, Enables or disables this classifier.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">src_vendor_class_id</div></td><td class="td_row_odd"><div class="td_row_odd">string</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">null</div></td><td class="td_row_odd"><div class="td_row_odd">Classificaton criteria, Used to identify one or more LAN devices, value of the DHCPv4 Vendor Class Identifier (Option 60) as defined in [RFC2132].</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">dest_vendor_class_id</div></td><td class="td_row_even"><div class="td_row_even">string</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">null</div></td><td class="td_row_even"><div class="td_row_even">Classificaton criteria, Used to identify one or more LAN devices, value of the DHCPv4 Vendor Class Identifier (Option 60) as defined in [RFC2132].</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">src_user_class_id</div></td><td class="td_row_odd"><div class="td_row_odd">string</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">null</div></td><td class="td_row_odd"><div class="td_row_odd">Classificaton criteria, string used to identify one or more LAN devices, value of the DHCP User Class Identifier. The DHCP User Class Identifier is Option 77 (as defined in [RFC3004]) for DHCPv4, or is Option 15 (as defined in [RFC3315]) for DHCPv6.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">dest_user_class_id</div></td><td class="td_row_even"><div class="td_row_even">string</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">null</div></td><td class="td_row_even"><div class="td_row_even">Classificaton criteria, string used to identify one or more LAN devices, value of the DHCP User Class Identifier. The DHCP User Class Identifier is Option 77 (as defined in [RFC3004]) for DHCPv4, or is Option 15 (as defined in [RFC3315]) for DHCPv6.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">src_client_id</div></td><td class="td_row_odd"><div class="td_row_odd">string</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">null</div></td><td class="td_row_odd"><div class="td_row_odd">Classificaton criteria, string used to identify one or more LAN devices, value of the DHCP Client Identifier. The DHCP Client Identifier is Option 61 (as defined in [RFC2132]) for DHCPv4, or is Option 1 (as defined in [RFC3315]) for DHCPv6.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">dest_client_id</div></td><td class="td_row_even"><div class="td_row_even">string</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">null</div></td><td class="td_row_even"><div class="td_row_even">Classificaton criteria, string used to identify one or more LAN devices, value of the DHCP Client Identifier. The DHCP Client Identifier is Option 61 (as defined in [RFC2132]) for DHCPv4, or is Option 1 (as defined in [RFC3315]) for DHCPv6.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">vid_check</div></td><td class="td_row_odd"><div class="td_row_odd">integer</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">0</div></td><td class="td_row_odd"><div class="td_row_odd">Classification criteria, Current Ethernet VLAN ID as defined in 802.1Q.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">traffic_class</div></td><td class="td_row_even"><div class="td_row_even">integer</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">0</div></td><td class="td_row_even"><div class="td_row_even">Classification action, Identifier of the traffic class associated with traffic that falls in this classification.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">src_port</div></td><td class="td_row_odd"><div class="td_row_odd">integer</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">0</div></td><td class="td_row_odd"><div class="td_row_odd">Classificaton criteria, Source port number.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">dest_port</div></td><td class="td_row_even"><div class="td_row_even">integer</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">0</div></td><td class="td_row_even"><div class="td_row_even">Classificaton criteria, Destination port number.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">src_port_range</div></td><td class="td_row_odd"><div class="td_row_odd">integer</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">0</div></td><td class="td_row_odd"><div class="td_row_odd">Classificaton criteria, Indicates that it is to include the port range from SourcePort through SourcePortRangeMax(inclusive).</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">dst_port_range</div></td><td class="td_row_even"><div class="td_row_even">integer</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">0</div></td><td class="td_row_even"><div class="td_row_even">Classificaton criteria, Indicates that it is to include the port range from DestPort through DestPortRangeMax(inclusive).</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">ifname</div></td><td class="td_row_odd"><div class="td_row_odd">string</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">0</div></td><td class="td_row_odd"><div class="td_row_odd">Classification criteria, Linux interface name of the port associated with this shaper entry.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">policer</div></td><td class="td_row_even"><div class="td_row_even">string</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">0</div></td><td class="td_row_even"><div class="td_row_even">Classification criteria, Indicates the Policer entry for traffic that falls in this classification.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">ethertype</div></td><td class="td_row_odd"><div class="td_row_odd">integer</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">0</div></td><td class="td_row_odd"><div class="td_row_odd">Classificaton criteria, Ethertype as indicated in either the Ethernet or SNAP Type header.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">dhcp_type</div></td><td class="td_row_even"><div class="td_row_even">integer</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">0</div></td><td class="td_row_even"><div class="td_row_even">Classificaton criteria, The DHCP protocol associated with the Classification instance.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">proto</div></td><td class="td_row_odd"><div class="td_row_odd">integer</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">0</div></td><td class="td_row_odd"><div class="td_row_odd">Classificaton criteria, Protocol number.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">src_ip</div></td><td class="td_row_even"><div class="td_row_even">string</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">null</div></td><td class="td_row_even"><div class="td_row_even">Classificaton criteria, Source IP address.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">dest_ip</div></td><td class="td_row_odd"><div class="td_row_odd">string</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">null</div></td><td class="td_row_odd"><div class="td_row_odd">Classificaton criteria, Destination IP address.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">ip_len_min</div></td><td class="td_row_even"><div class="td_row_even">string</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">null</div></td><td class="td_row_even"><div class="td_row_even">Classificaton criteria, Minimum IP Packet Length (including header) in bytes.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">ip_len_max</div></td><td class="td_row_odd"><div class="td_row_odd">string</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">null</div></td><td class="td_row_odd"><div class="td_row_odd">Classificaton criteria, Maximum IP Packet Length (including header) in bytes.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">pcp_check</div></td><td class="td_row_even"><div class="td_row_even">integer</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">0</div></td><td class="td_row_even"><div class="td_row_even">Classificaton criteria, PCP check.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">dscp_filter</div></td><td class="td_row_odd"><div class="td_row_odd">integer</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">0</div></td><td class="td_row_odd"><div class="td_row_odd">Classification criteria, DSCP value in the packet.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">dscp_mark</div></td><td class="td_row_even"><div class="td_row_even">integer</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">0</div></td><td class="td_row_even"><div class="td_row_even">Classification action, DSCP to mark traffic with that falls into this classification entry.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">src_mac</div></td><td class="td_row_odd"><div class="td_row_odd">string</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">0</div></td><td class="td_row_odd"><div class="td_row_odd">Classificaton criteria, Source MAC address.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">dest_mac</div></td><td class="td_row_even"><div class="td_row_even">string</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">null</div></td><td class="td_row_even"><div class="td_row_even">Classificaton criteria, Destination MAC address.</div></td></tr></tbody></table></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">shaper</div></td><td class="td_row_odd"><div class="td_row_odd">Used to shape the egress traffic associated with the interface specified in ifname.</div></td><td class="td_row_odd"><div class="td_row_odd">true</div></td><td class="td_row_odd"><table style="width:100%"><tbody><tr><td><div style="font-weight: bold; font-size: 14px">name</div></td><td><div style="font-weight: bold; font-size: 14px">type</div></td><td><div style="font-weight: bold; font-size: 14px">required</div></td><td><div style="font-weight: bold; font-size: 14px">default</div></td><td><div style="font-weight: bold; font-size: 14px">description</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">enable</div></td><td class="td_row_even"><div class="td_row_even">boolean</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">false</div></td><td class="td_row_even"><div class="td_row_even">Enables or disables this shaper.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">burst_size</div></td><td class="td_row_odd"><div class="td_row_odd">integer</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">0</div></td><td class="td_row_odd"><div class="td_row_odd">Burst size in bytes.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">rate</div></td><td class="td_row_even"><div class="td_row_even">integer</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">0</div></td><td class="td_row_even"><div class="td_row_even">Rate to shape the associated interface connection's egress traffic to.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">ifname</div></td><td class="td_row_odd"><div class="td_row_odd">string</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">0</div></td><td class="td_row_odd"><div class="td_row_odd">Linux interface name of the port associated with this shaper entry.</div></td></tr></tbody></table></td></tr><tr><td class="td_row_even"><div class="td_row_even">policer</div></td><td class="td_row_even"><div class="td_row_even">QoS policy settings</div></td><td class="td_row_even"><div class="td_row_even">true</div></td><td class="td_row_even"><table style="width:100%"><tbody><tr><td><div style="font-weight: bold; font-size: 14px">name</div></td><td><div style="font-weight: bold; font-size: 14px">type</div></td><td><div style="font-weight: bold; font-size: 14px">required</div></td><td><div style="font-weight: bold; font-size: 14px">default</div></td><td><div style="font-weight: bold; font-size: 14px">description</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">enable</div></td><td class="td_row_even"><div class="td_row_even">boolean</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">false</div></td><td class="td_row_even"><div class="td_row_even">Enables or disables this policer.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">committed_rate</div></td><td class="td_row_odd"><div class="td_row_odd">integer</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">0</div></td><td class="td_row_odd"><div class="td_row_odd">Committed rate allowed for this policer in bits per second.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">committed_burst_size</div></td><td class="td_row_even"><div class="td_row_even">integer</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">0</div></td><td class="td_row_even"><div class="td_row_even">Committed Burstsize in bytes.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">excess_burst_size</div></td><td class="td_row_odd"><div class="td_row_odd">integer</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">0</div></td><td class="td_row_odd"><div class="td_row_odd">Excess Burstsize in bytes.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">peak_rate</div></td><td class="td_row_even"><div class="td_row_even">integer</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">0</div></td><td class="td_row_even"><div class="td_row_even">Peak rate allowed for this Meter in bits per second.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">peak_burst_size</div></td><td class="td_row_odd"><div class="td_row_odd">integer</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">0</div></td><td class="td_row_odd"><div class="td_row_odd">Peak Burstsize in bytes.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">meter_type</div></td><td class="td_row_even"><div class="td_row_even">integer</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">0</div></td><td class="td_row_even"><div class="td_row_even">The value MUST be a member of the list reported by the PossibleMeterTypes parameter.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">name</div></td><td class="td_row_odd"><div class="td_row_odd">string</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">cfg2b6c73</div></td><td class="td_row_odd"><div class="td_row_odd">Value is used to identify the policer instance, and associate it with a classification entry</div></td></tr></tbody></table></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">queue</div></td><td class="td_row_odd"><div class="td_row_odd">QoS queue is associated with a port.</div></td><td class="td_row_odd"><div class="td_row_odd">true</div></td><td class="td_row_odd"><table style="width:100%"><tbody><tr><td><div style="font-weight: bold; font-size: 14px">name</div></td><td><div style="font-weight: bold; font-size: 14px">type</div></td><td><div style="font-weight: bold; font-size: 14px">required</div></td><td><div style="font-weight: bold; font-size: 14px">default</div></td><td><div style="font-weight: bold; font-size: 14px">description</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">enable</div></td><td class="td_row_even"><div class="td_row_even">boolean</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">false</div></td><td class="td_row_even"><div class="td_row_even">Enables or disables this queue.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">ifname</div></td><td class="td_row_odd"><div class="td_row_odd">string</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">null</div></td><td class="td_row_odd"><div class="td_row_odd">Specifies the port with which the specified queue exist.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">precedence</div></td><td class="td_row_even"><div class="td_row_even">varies</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">0</div></td><td class="td_row_even"><div class="td_row_even">Precedence of this queue relative to others. Lower numbers imply greater precedence.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">scheduling</div></td><td class="td_row_odd"><div class="td_row_odd">string</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">null</div></td><td class="td_row_odd"><div class="td_row_odd">Scheduling algorithm used for the queue.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">rate</div></td><td class="td_row_even"><div class="td_row_even">integer</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">0</div></td><td class="td_row_even"><div class="td_row_even">Rate to shape this queue's traffic to.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">burst_size</div></td><td class="td_row_odd"><div class="td_row_odd">integer</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">-1</div></td><td class="td_row_odd"><div class="td_row_odd">Port shaping burst size in bytes. A value of -1 disables the threshold.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">weight</div></td><td class="td_row_even"><div class="td_row_even">integer</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">1</div></td><td class="td_row_even"><div class="td_row_even">Specified the weight of the queue in case the WRR algorithm is used.</div></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody>
\ No newline at end of file
diff --git a/schemas/ubus/qos.json b/schemas/ubus/qos.json
new file mode 100644
index 0000000000000000000000000000000000000000..453c232c979206ad14cee9def4bbadee25e587d5
--- /dev/null
+++ b/schemas/ubus/qos.json
@@ -0,0 +1,107 @@
+{
+    "definitions": {
+        "iface_t": {
+            "title": "Interface",
+            "type": "string",
+            "minLength": 1,
+            "maxLength": 16
+        }
+    },
+    "$schema": "http://json-schema.org/draft-07/schema#",
+    "$id": "http://example.com/root.json",
+    "type": "object",
+    "title": "qos",
+    "object": "qos",
+	"properties": {
+	"reload": {
+	    "type": "object",
+	    "properties": {
+		"input": {
+		    "type": "object",
+		    "required": [
+			"section"
+		    ],
+		    "properties": {
+		    	"section": {
+			    "type": "string",
+			    "minLength": 1,
+			    "maxLength": 16			    
+			}
+		    }
+		},
+		"output": {
+		    "type": "object",
+		    "required": [],
+		    "properties": {}
+		}
+	    }
+	},
+        "queue_stats": {
+            "type": "object",
+            "properties": {
+                "input": {
+                    "type": "object",
+                    "required": [
+                        "ifname"
+                    ],
+                    "properties": {
+                        "ifname": {
+                            "$ref": "#/definitions/iface_t"
+                        },
+                        "qid": {
+                            "type": "integer",
+                            "minimum": 0
+                        }
+                    }
+                },
+                "output": {
+                    "type": "object",
+                    "required": [
+                        "queues"
+                    ],
+                    "properties": {
+                        "queues": {
+                            "type": "array",
+                            "items": {
+                                "type": "object",
+                                "required": [
+                                    "qid",
+                                    "iface",
+                                    "tx_packets",
+                                    "tx_bytes",
+                                    "tx_dropped_packets",
+                                    "tx_dropped_bytes"
+                                ],
+                                "properties": {
+                                    "qid": {
+                                        "type": "integer",
+                                        "minimum": 0
+                                    },
+                                    "iface": {
+                                        "$ref": "#/definitions/iface_t"
+                                    },
+                                    "tx_packets": {
+                                        "type": "integer",
+                                        "minimum": 0
+                                    },
+                                    "tx_bytes": {
+                                        "type": "integer",
+                                        "minimum": 0
+                                    },
+                                    "tx_dropped_packets": {
+                                        "type": "integer",
+                                        "minimum": 0
+                                    },
+                                    "tx_dropped_bytes": {
+                                        "type": "integer",
+                                        "minimum": 0
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/schemas/uci/qos.json b/schemas/uci/qos.json
new file mode 100644
index 0000000000000000000000000000000000000000..6bf1a7a9a4c67d91a5f7414c4eb704f44954d5ab
--- /dev/null
+++ b/schemas/uci/qos.json
@@ -0,0 +1,314 @@
+{
+    "qos":
+    [
+	{
+	    "section": "classify",
+	    "description": "QoS classification settings",
+	    "multi": "true",
+	    "options": [
+	    	{
+                    "name": "enable",
+                    "type": "boolean",
+                    "required": "no",
+                    "default": "false",
+                    "description": "Classificaton criteria, Enables or disables this classifier."
+		},{
+                    "name": "src_vendor_class_id",
+                    "type": "string",
+                    "required": "no",
+                    "default": null,
+                    "description": "Classificaton criteria, Used to identify one or more LAN devices, value of the DHCPv4 Vendor Class Identifier (Option 60) as defined in [RFC2132]."
+		},{
+                    "name": "dest_vendor_class_id",
+                    "type": "string",
+                    "required": "no",
+                    "default": null,
+                    "description": "Classificaton criteria, Used to identify one or more LAN devices, value of the DHCPv4 Vendor Class Identifier (Option 60) as defined in [RFC2132]."
+		},{
+                    "name": "src_user_class_id",
+                    "type": "string",
+                    "required": "no",
+                    "default": null,
+                    "description": "Classificaton criteria, string used to identify one or more LAN devices, value of the DHCP User Class Identifier. The DHCP User Class Identifier is Option 77 (as defined in [RFC3004]) for DHCPv4, or is Option 15 (as defined in [RFC3315]) for DHCPv6."
+		},{
+                    "name": "dest_user_class_id",
+                    "type": "string",
+                    "required": "no",
+                    "default": null,
+                    "description": "Classificaton criteria, string used to identify one or more LAN devices, value of the DHCP User Class Identifier. The DHCP User Class Identifier is Option 77 (as defined in [RFC3004]) for DHCPv4, or is Option 15 (as defined in [RFC3315]) for DHCPv6."
+		},{
+                    "name": "src_client_id",
+                    "type": "string",
+                    "required": "no",
+                    "default": null,
+                    "description": "Classificaton criteria, string used to identify one or more LAN devices, value of the DHCP Client Identifier. The DHCP Client Identifier is Option 61 (as defined in [RFC2132]) for DHCPv4, or is Option 1 (as defined in [RFC3315]) for DHCPv6."
+		},{
+                    "name": "dest_client_id",
+                    "type": "string",
+                    "required": "no",
+                    "default": null,
+                    "description": "Classificaton criteria, string used to identify one or more LAN devices, value of the DHCP Client Identifier. The DHCP Client Identifier is Option 61 (as defined in [RFC2132]) for DHCPv4, or is Option 1 (as defined in [RFC3315]) for DHCPv6."
+		},{
+                    "name": "vid_check",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Classification criteria, Current Ethernet VLAN ID as defined in 802.1Q."
+		},{
+                    "name": "traffic_class",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Classification action, Identifier of the traffic class associated with traffic that falls in this classification."
+		},{
+                    "name": "src_port",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Classificaton criteria, Source port number."
+		},{
+                    "name": "dest_port",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Classificaton criteria, Destination port number."
+		},{
+                    "name": "src_port_range",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Classificaton criteria, Indicates that it is to include the port range from SourcePort through SourcePortRangeMax(inclusive)."
+		},{
+                    "name": "dst_port_range",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Classificaton criteria, Indicates that it is to include the port range from DestPort through DestPortRangeMax(inclusive)."
+		},{
+                    "name": "ifname",
+                    "type": "string",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Classification criteria, Linux interface name of the port associated with this shaper entry."
+		},{
+                    "name": "policer",
+                    "type": "string",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Classification criteria, Indicates the Policer entry for traffic that falls in this classification."
+		},{
+                    "name": "ethertype",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Classificaton criteria, Ethertype as indicated in either the Ethernet or SNAP Type header."
+		},{
+                    "name": "dhcp_type",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Classificaton criteria, The DHCP protocol associated with the Classification instance."
+		},{
+                    "name": "proto",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Classificaton criteria, Protocol number."
+		},{
+                    "name": "src_ip",
+                    "type": "string",
+                    "required": "no",
+                    "default": null,
+                    "description": "Classificaton criteria, Source IP address."
+		},{
+                    "name": "dest_ip",
+                    "type": "string",
+                    "required": "no",
+                    "default": null,
+                    "description": "Classificaton criteria, Destination IP address."
+		},{
+                    "name": "ip_len_min",
+                    "type": "string",
+                    "required": "no",
+                    "default": null,
+                    "description": "Classificaton criteria, Minimum IP Packet Length (including header) in bytes."
+		},{
+                    "name": "ip_len_max",
+                    "type": "string",
+                    "required": "no",
+                    "default": null,
+                    "description": "Classificaton criteria, Maximum IP Packet Length (including header) in bytes."
+		},{
+                    "name": "pcp_check",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Classificaton criteria, PCP check."
+		},{
+                    "name": "dscp_filter",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Classification criteria, DSCP value in the packet."
+		},{
+                    "name": "dscp_mark",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Classification action, DSCP to mark traffic with that falls into this classification entry."
+		},{
+                    "name": "src_mac",
+                    "type": "string",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Classificaton criteria, Source MAC address."
+		},{
+                    "name": "dest_mac",
+                    "type": "string",
+                    "required": "no",
+                    "default": null,
+                    "description": "Classificaton criteria, Destination MAC address."
+		}
+	    ]
+	},{
+	    "section": "shaper",
+	    "description": "Used to shape the egress traffic associated with the interface specified in ifname.",
+	    "multi": "true",
+	    "options": [
+	    	{
+                    "name": "enable",
+                    "type": "boolean",
+                    "required": "no",
+                    "default": "false",
+                    "description": "Enables or disables this shaper."
+		},{
+                    "name": "burst_size",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Burst size in bytes."
+		},{
+                    "name": "rate",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Rate to shape the associated interface connection's egress traffic to."
+		},{
+                    "name": "ifname",
+                    "type": "string",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Linux interface name of the port associated with this shaper entry."
+		}
+	    ]
+	},{
+	    "section": "policer",
+	    "description": "QoS policy settings",
+	    "multi": "true",
+	    "options": [
+	    	{
+                    "name": "enable",
+                    "type": "boolean",
+                    "required": "no",
+                    "default": "false",
+                    "description": "Enables or disables this policer."
+		},{
+                    "name": "committed_rate",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Committed rate allowed for this policer in bits per second."
+		},{
+                    "name": "committed_burst_size",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Committed Burstsize in bytes."
+		},{
+                    "name": "excess_burst_size",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Excess Burstsize in bytes."
+		},{
+                    "name": "peak_rate",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Peak rate allowed for this Meter in bits per second."
+		},{
+                    "name": "peak_burst_size",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Peak Burstsize in bytes."
+		},{
+                    "name": "meter_type",
+                    "type": "integer",
+                    "required": "no",
+                    "default": 0,
+                    "description": "The value MUST be a member of the list reported by the PossibleMeterTypes parameter."
+		},{
+                    "name": "name",
+                    "type": "string",
+                    "required": "no",
+                    "default": "cfg2b6c73",
+                    "description": "Value is used to identify the policer instance, and associate it with a classification entry"
+		}
+	    ]
+	},
+        {
+            "section": "queue",
+            "description": "QoS queue is associated with a port.",
+            "multi": true,
+            "options":
+            [
+                {
+                    "name": "enable",
+                    "type": "boolean",
+                    "required": "no",
+                    "default": "false",
+                    "description": "Enables or disables this queue."
+                },
+                {
+                    "name": "ifname",
+                    "type": "string",
+                    "required": "no",
+                    "default": null,
+                    "description": "Specifies the port with which the specified queue exist."
+                },
+                {
+                    "name": "precedence",
+                    "type": "varies",
+                    "required": "no",
+                    "default": 0,
+                    "description": "Precedence of this queue relative to others. Lower numbers imply greater precedence."
+                },
+                {
+                    "name": "scheduling",
+                    "type": "string",
+                    "default": null,
+                    "description": "Scheduling algorithm used for the queue."
+                },
+                {
+                    "name": "rate",
+                    "type": "integer",
+                    "default": 0,
+                    "description": "Rate to shape this queue's traffic to."
+                },
+                {
+                    "name": "burst_size",
+                    "default": -1,
+                    "description": "Port shaping burst size in bytes. A value of -1 disables the threshold.",
+                    "type": "integer"
+                },
+                {
+                    "name": "weight",
+                    "default": 1,
+                    "description": "Specified the weight of the queue in case the WRR algorithm is used.",
+                    "type": "integer"
+                }
+            ]
+        }
+    ]
+}