From 1f3727b1c665c5a22e6d461b052f0c2ffc76d810 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Mon, 10 Nov 2008 18:12:54 -0800 Subject: Change input rate limiting to use token bucket There are two ways to input rate limit. One uses the generic rate estimator which is supposed to measure average rate, the other is to use a token bucket based packet counter. Well the generic rate estimator doesn't work correctly in current kernels (no effect), so switch to using rate and burst. Bugfix 3881 --- scripts/VyattaQosTrafficLimiter.pm | 13 ++++++------- .../traffic-limiter/node.tag/class/node.tag/burst/node.def | 7 +++++++ 2 files changed, 13 insertions(+), 7 deletions(-) create mode 100644 templates/qos-policy/traffic-limiter/node.tag/class/node.tag/burst/node.def diff --git a/scripts/VyattaQosTrafficLimiter.pm b/scripts/VyattaQosTrafficLimiter.pm index 2907590..649fb17 100644 --- a/scripts/VyattaQosTrafficLimiter.pm +++ b/scripts/VyattaQosTrafficLimiter.pm @@ -26,6 +26,7 @@ my %fields = ( id => undef, priority => undef, + burst => undef, rate => undef, _match => undef, ); @@ -51,7 +52,8 @@ defined $rate or die "bandwidth must be defined for $level\n"; $self->{rate} = VyattaQosUtil::getRate($rate); - + $self->{burst} = $config->returnValue("burst"); + defined $self->{burst} or die "burst must be defined for $level\n"; $self->{priority} = $config->returnValue("priority"); foreach my $match ( $config->listNodes("match") ) { @@ -134,13 +136,10 @@ sub commands { printf {$out} "qdisc add dev %s handle %x: ingress\n", $dev, $parent; foreach my $class (@$classes) { - my $id = $class->{id}; - my $rate = $class->{rate}; - my $priority = $class->{priority}; - foreach my $match ( $class->matchRules() ) { - $match->filter( $out, $dev, $parent, $priority ); - printf {$out} " police avrate %s drop flowid :%x\n", $rate, $id; + $match->filter( $out, $dev, $parent, $class->{priority} ); + printf {$out} " police rate %s burst %s drop flowid :%x\n", + $class->{rate}, $class->{burst}, $class->{id}; } } } diff --git a/templates/qos-policy/traffic-limiter/node.tag/class/node.tag/burst/node.def b/templates/qos-policy/traffic-limiter/node.tag/class/node.tag/burst/node.def new file mode 100644 index 0000000..54ae4f3 --- /dev/null +++ b/templates/qos-policy/traffic-limiter/node.tag/class/node.tag/burst/node.def @@ -0,0 +1,7 @@ +type: txt +help: Set the burst size for this class (default: 15kb) +default: "15k" +syntax:expression: exec "/opt/vyatta/sbin/vyatta-qos-util.pl --burst \"$VAR(@)\"" +comp_help: Allowed values: + Burst size in bytes + Size with scaling suffix (kb, mb, gb) -- cgit v1.2.3