Hi,
below u will find a simple perl script to draw a TC CLASS tree.
At the moment only 3 formatings are available, but u can easly add more(look
cformat)
The formating option can be chained with ''-''.
Example usage :
tc class show dev eth1 | ./tctree.pl
tc class show dev eth1 | ./tctree.pl -f pure
tc class show dev eth1 | ./tctree.pl -f bitps
tc class show dev eth1 | ./tctree.pl -f rate
tc class show dev eth1 | ./tctree.pl -f rate-bitps
Good for diplayng ppl scenarios.
==========================OUTPUT====================================================
[root@qos tcng]# tc class show dev eth1 | ./tctree.pl
class htb 2:1 root rate 125000bps ceil 125000bps burst 2849b cburst 2849b
|_class htb 2:2 parent 2:1 rate 12500bps ceil 12500bps burst 1724b cburst 1724b
|_class htb 2:3 parent 2:2 rate 8750bps ceil 12500bps burst 1686b cburst 1724b
|_class htb 2:4 parent 2:3 prio 0 rate 125bps ceil 9625bps burst 1600b
cburst 1695b
|_class htb 2:5 parent 2:3 prio 0 rate 2400bps ceil 2400bps burst 1623b
cburst 1623b
|_class htb 2:6 parent 2:2 prio 0 rate 3750bps ceil 12500bps burst 1636b
cburst 1724b
|_class htb 2:7 parent 2:1 rate 6250bps ceil 6250bps burst 1661b cburst
1661b
|_class htb 2:8 parent 2:7 prio 0 rate 125bps ceil 9625bps burst 1600b
cburst 1695b
|_class htb 2:9 parent 2:7 prio 0 rate 2400bps ceil 2400bps burst
1623b cburst 1623b
[root@qos tcng]# tc class show dev eth1 | ./tctree.pl -f rate-bitps
rate 1000000bs
|_rate 100000bs
|_rate 70000bs
|_rate 1000bs
|_rate 19200bs
|_rate 30000bs
|_rate 50000bs
|_rate 1000bs
|_rate 19200bs
[root@qos tcng]# tc class show dev eth1 | ./tctree.pl -f pure
htb 2:1
|_htb 2:2
|_htb 2:3
|_htb 2:4
|_htb 2:5
|_htb 2:6
|_htb 2:7
|_htb 2:8
|_htb 2:9
[root@qos tcng]#
======================================SCRIPT===============================================================#!/usr/bin/perl
use strict;
use vars qw(%o);
use Getopt::Std;
getopts(''f:'',\%o);
open FILE, ''-'' or die ''hmmm... : $!'';
my @in = <FILE>;
close FILE;
#formats - pure
sub cformat {
my ($line, $formats) = @_;
my $res;
for my $f (split /-/, $formats) {
$line =~ s/class (\w+? \d+:\d+).+$/$1/ if $f eq
''pure'';
$line =~ s/^.+(rate \d+\w+).+$/$1/ if $f eq ''rate'';
$line =~ s!(\d+)bps!($1*8).''bs''!eg if $f eq
''bitps'';
};
return $line
}
my $tab = ''|_'';
my $prev = shift @in;
my ($prevParent) = $prev =~ /(\d+:\d+)/;
for my $i ( 0 .. $#in ) {
my ($classID, $parent) = $in[$i] =~
/class\D+(\d+:\d+)\D+parent\D+(\d+:\d+)/;
$tab =~ s/^(.+)$/('' '' x
length($1)).''|_''/e unless $parent eq $prevParent;
$in[$i] = "$tab" . cformat($in[$i], $o{f});
$prevParent = $parent;
};
print cformat($prev,$o{f}),@in;
_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/