qos |
Subversion Repositories: |
Compare with Previous - Blame - Download
#!/usr/bin/perl
# Show classes on selected device
#
# author: Dzus
# version: 1.0.0
#
# Changelog:
# 09/11/07 [simandl] prejmenovano
# 22/09/03 [dzus] Doplnen changelog a cislo verze - skript uvolnen pro verejnost
# 13/09/03 [dzus] Vytvoreni zakladni verze skriptu
#
# ToDo:
# * barevny vystup
# * moznost nastaveni udaju co se budou zobrazovat parametry na prikazove radce
#
$IFACE=$ARGV[0];
$CLASSINFOFILENAME='classinfo';
if (!defined ($IFACE)) {
$IFACE = "ath0";
print "Default device selected ($IFACE)\n";
}
#$TC = `which tc`;
$TC = "/sbin/tc";
$TC =~ tr/\n/ /;
foreach $row (`$TC -s class show dev $IFACE`) {
if ($row =~ /^class\s+\w+\s+(\d+:\d+)\s+(root)?(parent\s+(\d+:\d+))?.*rate\s+(\w+).*ceil\s+(\w+).*burst\s+(\w+).*$/) {
$id = $1;
@classinfo = ($4,$5,$6,$7);
$classlist{$id}=[ @classinfo ];
if (defined($2)) {
$rootclassid = $id;
}
}
elsif ($row =~ /^\s*Sent\s+(\d+).*\s+(\d+)\s+pkt.*dropped\s+(\d+).*overlimits\s+(\d+)/) {
$classlist{$id}[4]=$1;
$classlist{$id}[5]=$2;
$classlist{$id}[6]=$3;
$classlist{$id}[7]=$4;
}
}
if (open (classinfofile,$CLASSINFOFILENAME)) {
while ($row = <classinfofile>) {
if ($row =~ /^\s*interface\s+$IFACE\s+{\s*$/) {
$infofound='yes';
}
elsif (($infofound=~/yes/) and ($row =~ /^\s*(\d+:\d+)\s+\'(.*)\'\s*$/)) {
$classinfo{$1} = $2;
}
elsif (($infofound=~/yes/) and ($row =~ /^\s*}\s*$/)) {
break;
}
}
}
if ($rootclassid) {
print "Classes for device $IFACE\n";
print_class($rootclassid,1);
}
sub print_class {
my ($myclsid,$clsid,$level,$i);
$myclsid = shift;
$level = shift;
for ($i = 0; $i<$level; ++$i) { print "-"; }
print " $myclsid";
if (($infofound =~ /yes/) and $classinfo{$myclsid}) {
print " - $classinfo{$myclsid}\n";
}
else {
print "\n";
}
for ($i = 0; $i<$level; ++$i) { print "-"; }
print " rate $classlist{$myclsid}[1] ceil $classlist{$myclsid}[2] burst $classlist{$myclsid}[3]\n";
for ($i = 0; $i<$level; ++$i) { print "-"; }
print " sent $classlist{$myclsid}[4]B $classlist{$myclsid}[5]pkts (dropped $classlist{$myclsid}[6] overlimits $classlist{$myclsid}[7])\n";
foreach $clsid (sort class_sort keys %classlist) {
if ($classlist{$clsid}[0] =~ /^$myclsid$/) {
print_class ($clsid,$level+1);
}
}
}
sub class_sort {
my ($tmp);
$a =~ /\d+:(\d+)/;
$tmp = $1;
$b =~ /\d+:(\d+)/;
$tmp <=> $1;
}