qos-stat 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #!/bin/sh
  2. # Copyright (C) 2011 OpenWrt.org
  3. . /lib/functions.sh
  4. include /lib/network
  5. get_ifname() {
  6. local interface="$1"
  7. local cfgt
  8. scan_interfaces
  9. config_get cfgt "$interface" TYPE
  10. [ "$cfgt" = "interface" ] && config_get "$interface" ifname
  11. }
  12. qos_set_device() {
  13. config_get TYPE "$1" TYPE
  14. [ "interface" = "$TYPE" ] && {
  15. config_get device "$1" ifname
  16. [ -z "$device" ] && device="$(get_ifname $1)"
  17. config_set "$1" device "$device"
  18. }
  19. }
  20. config_load qos
  21. config_foreach qos_set_device
  22. print_comments() {
  23. echo ''
  24. echo '# Interface: '"$1"
  25. echo '# Direction: '"$2"
  26. echo '# Stats: '"$3"
  27. echo ''
  28. }
  29. get_device() {
  30. ( config_load network; scan_interfaces; config_get "$1" ifname )
  31. }
  32. interface_stats() {
  33. local interface="$1"
  34. local device
  35. device="$(get_device "$interface")"
  36. [ -z "$device" ] && config_get device "$interface" device
  37. config_get_bool enabled "$interface" enabled 1
  38. [ -z "$device" -o 1 -ne "$enabled" ] && {
  39. return 1
  40. }
  41. config_get_bool halfduplex "$interface" halfduplex 0
  42. if [ 1 -ne "$halfduplex" ]; then
  43. unset halfduplex
  44. print_comments "$interface" "Egress" "Start"
  45. tc -s class show dev "$device"
  46. print_comments "$interface" "Egress" "End"
  47. id="root"
  48. else
  49. id=""
  50. fi
  51. print_comments "$interface" "Ingress${halfduplex:+/Egress}" "Start"
  52. tc -s class show dev "$(tc filter show dev $device $id | grep mirred | sed -e 's,.*\(ifb.*\)).*,\1,')"
  53. print_comments "$interface" "Ingress${halfduplex:+/Egress}" "End"
  54. }
  55. [ -z "$1" ] && config_foreach interface_stats interface || interface_stats "$1"