kernel: fq_codel: dont reinit flow state
[openwrt/openwrt.git] / package / qos-scripts / files / usr / bin / qos-stat
index fc940a82183ef3211aef3d02d6f197d44af0b825..78d163888b3e9410e72899221a159b8453e0c226 100755 (executable)
@@ -1,16 +1,67 @@
 #!/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
+
+. /lib/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 ''
+}      
+
+get_device() {
+       ( config_load network; scan_interfaces; config_get "$1" ifname )
+}
+
+interface_stats() {
+       local interface="$1"
+       local device
+
+       device="$(get_device "$interface")"
+       [ -z "$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 0
+
+       if [ 1 -ne "$halfduplex" ]; then
+               unset halfduplex
+               print_comments "$interface" "Egress" "Start"
+               tc -s class show dev "$device"
+               print_comments "$interface" "Egress" "End"
+               id="root"
+       else
+               id=""
+       fi
+
+       print_comments "$interface" "Ingress${halfduplex:+/Egress}" "Start"
+       tc -s class show dev "$(tc filter show dev $device $id | grep mirred | sed -e 's,.*\(ifb.*\)).*,\1,')"
+       print_comments "$interface" "Ingress${halfduplex:+/Egress}" "End"
+}
+
+[ -z "$1" ] && config_foreach interface_stats interface || interface_stats "$1"