From 6306f6edae447d824cf1d3beacb7b64f0f00d116 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Mon, 14 Jun 2010 08:43:33 -0700 Subject: Add default for traffic limiter This adds: set traffic-policy limiter TL default bandwidth 1mbit --- lib/Vyatta/Qos/TrafficLimiter.pm | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'lib') diff --git a/lib/Vyatta/Qos/TrafficLimiter.pm b/lib/Vyatta/Qos/TrafficLimiter.pm index c48e616..bec2b27 100644 --- a/lib/Vyatta/Qos/TrafficLimiter.pm +++ b/lib/Vyatta/Qos/TrafficLimiter.pm @@ -68,7 +68,12 @@ sub _define { die "$level can not match on both ip and other types\n"; } - foreach my $id ( $config->listNodes("class") ) { + if ($config->exists('default')) { + $config->setLevel("$level default"); + push @classes, new Vyatta::Qos::LimiterClass( $config, 0 ); + } + + foreach my $id ( $config->listNodes('class') ) { $config->setLevel("$level class $id"); push @classes, new Vyatta::Qos::LimiterClass( $config, $id ); } @@ -88,15 +93,25 @@ sub commands { printf "qdisc add dev %s handle %x: prio\n", $dev, $parent; } + # find largest class id (to use for default) + my $maxid = 0; + foreach my $class (@$classes) { + my $id = $class->{id}; + $maxid = $id if ($id > $maxid); + } + foreach my $class (@$classes) { foreach my $match ( $class->matchRules() ) { + my $id = $class->{id}; + $id = $maxid + 1 if ($id == 0); + my $police = " police rate " . $class->{rate} . " action drop burst " . $class->{burst}; - $match->filter( $dev, $parent, $class->{id}, $class->{priority}, - undef, $police ); + $match->filter( $dev, $parent, $id, $class->{priority}, undef, $police ); } } + } 1; -- cgit v1.2.3