From a98c957eb5976d01dde80b0f8286fd7f7359da26 Mon Sep 17 00:00:00 2001
From: Vasilis Tsiligiannis <acinonyx@openwrt.gr>
Date: Thu, 20 Jan 2011 17:33:41 +0000
Subject: [PATCH] qos-scripts: Rework qos-stat script

SVN-Revision: 25052
---
 package/qos-scripts/Makefile               |  4 +-
 package/qos-scripts/files/usr/bin/qos-stat | 73 +++++++++++++++++-----
 2 files changed, 60 insertions(+), 17 deletions(-)

diff --git a/package/qos-scripts/Makefile b/package/qos-scripts/Makefile
index 7a374697e5..c999e7e679 100644
--- a/package/qos-scripts/Makefile
+++ b/package/qos-scripts/Makefile
@@ -1,5 +1,5 @@
 # 
-# Copyright (C) 2006-2010 OpenWrt.org
+# Copyright (C) 2006-2011 OpenWrt.org
 #
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=qos-scripts
 PKG_VERSION:=1.2.1
-PKG_RELEASE:=3
+PKG_RELEASE:=4
 
 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
 
diff --git a/package/qos-scripts/files/usr/bin/qos-stat b/package/qos-scripts/files/usr/bin/qos-stat
index fc940a8218..d7858d7a11 100755
--- a/package/qos-scripts/files/usr/bin/qos-stat
+++ b/package/qos-scripts/files/usr/bin/qos-stat
@@ -1,16 +1,59 @@
 #!/bin/sh
-echo '#################'
-echo '# EGRESS STATUS #'
-echo '#################'
-echo
-for iface in $(tc qdisc show | grep hfsc | awk '{print $5}' | grep -v imq); do
-	tc -s class show dev "$iface"
-done
-
-echo '##################'
-echo '# INGRESS STATUS #'
-echo '##################'
-echo
-for iface in $(tc qdisc show | grep hfsc | awk '{print $5}' | grep imq); do
-	tc -s class show dev "$iface"
-done
+# Copyright (C) 2011 OpenWrt.org
+
+. /etc/functions.sh
+
+include /lib/network
+
+get_ifname() {
+	local interface="$1"
+	local cfgt
+
+	scan_interfaces
+	config_get cfgt "$interface" TYPE
+	[ "$cfgt" == "interface" ] && config_get "$interface" ifname
+}
+
+config_cb() {
+	config_get TYPE "$CONFIG_SECTION" TYPE
+	[ "interface" == "$TYPE" ] && {
+		config_get device "$CONFIG_SECTION" ifname
+		[ -z "$device" ] && device="$(get_ifname ${CONFIG_SECTION})"
+		config_set "$CONFIG_SECTION" device "$device"
+	}
+}
+
+config_load qos
+
+print_comments() {
+	echo ''
+	echo '# Interface: '"$1"
+	echo '# Direction: '"$2"
+	echo '# Stats:     '"$3"
+	echo ''
+}	
+
+interface_stats() {
+	local interface="$1"
+	local device
+
+	config_get device "$interface" device
+	config_get_bool enabled "$interface" enabled 1
+	[ -z "$device" -o 1 -ne "$enabled" ] && {
+		return 1
+	}
+	config_get_bool halfduplex "$interface" halfduplex
+
+	[ 1 -ne "$halfduplex" ] && {
+		unset halfduplex
+		print_comments "$interface" "Egress" "Start"
+		tc -s class show dev "$device"
+		print_comments "$interface" "Egress" "End"
+	}
+
+	print_comments "$interface" "Ingress${halfduplex:+/Egress}" "Start"
+	tc -s class show dev "$(iptables -v -L PREROUTING -t mangle | awk '/IMQ: todev .*$/ && $6 ~ /'$device'/ {print "imq"$12}')"
+	print_comments "$interface" "Ingress${halfduplex:+/Egress}" "End"
+}
+
+[ -z "$1" ] && config_foreach interface_stats interface || interface_stats "$1"
-- 
2.30.2