#!/usr/bin/perl # tc uses following rules for bandwith specification: # # mbps = 1024 kbps = 1024 * 1024 bps => byte/s # mbit = 1024 kbit => kilo bit/s. # mb = 1024 kb = 1024 * 1024 b => byte # mbit = 1024 kbit => kilo bit # # kb = KByte # kbit = kbit # 1Mbit = 1024 Kbit = 1024 * 1024 bps => byte/s # 10kbit up (..KB) => 30kbit down # 20kbit up (5.2KB) => ..kbit down # 100kbit up (KB) => ..kbit down use strict; use warnings; use Getopt::Long; ### User configuration my $interface = 'eth0'; # all following values in kbit (see upper definitions) my %wan = ( downlink => "4000", uplink => "250", latency => "50ms", burst => "1540" ); my %lan = ( uplink => "100000000", ); # Binary Paths my %bin = ( tc => "/sbin/tc", ip => "/sbin/ip", sudo => "/usr/bin/sudo", ethtool => "/usr/sbin/ethtool", ); use vars qw($me $author $regexp $exclude $from_date $to_date $rcs_log $with_date $version $help $reverse @entries); ($me = $0) =~ s!.*/!!; my $result = GetOptions("author=s" => \$author, "text=s" => \$regexp, "exclude=s" => \$exclude, "from-date=s" => \$from_date, "to-date=s" => \$to_date, "rcs-log" => \$rcs_log, "with-date" => \$with_date, "reverse!" => \$reverse, "version" => \$version, "help" => \$help); usage() if ($result == 0 || $help); sub ts_reset { my $null = "2> /dev/null > /dev/null"; qx($bin{'sudo'} $bin{'tc'} qdisc del dev $interface root $null); qx($bin{'sudo'} $bin{'tc'} qdisc del dev $interface ingress $null); } sub ts_start { qx($bin{'sudo'} $bin{'tc'} qdisc add dev $INTERFACE root handle 1: htb default 10); } sub ts_status { print STDOUT "QDISC - $interface\n"; qx($bin{'sudo'} $bin{'tc'} -s qdisc show dev $interface); print STDOUT "CLASS - $interface\n" qx($bin{'sudo'} $bin{'tc'} -s class show dev $interface); print STDOUT "FILTER - $interface\n"; } sub usage { die <