tctree

Linux Advanced Routing and Traffic Control

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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/

[Index of Archives]     [LARTC Home Page]     [Netfilter]     [Netfilter Development]     [Network Development]     [Bugtraq]     [GCC Help]     [Yosemite News]     [Linux Kernel]     [Fedora Users]
  Powered by Linux