From e83b813fe1fba0735db2b080948144de3e337ce5 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Mon, 19 Jul 2010 15:37:28 -0700 Subject: Add sanity checks for shaper random-detect queue type Bug 5872 Don't allow stupidly small queue limit, and round up the minimum queue value to be at least one packet. --- lib/Vyatta/Qos/ShaperClass.pm | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/Vyatta/Qos/ShaperClass.pm b/lib/Vyatta/Qos/ShaperClass.pm index 361eb57..439e404 100644 --- a/lib/Vyatta/Qos/ShaperClass.pm +++ b/lib/Vyatta/Qos/ShaperClass.pm @@ -116,6 +116,19 @@ sub rateCheck { $rate / 1000; exit 1; } + + my $qlimit = $self->{_limit}; + if (defined($qlimit) && $self->{_qdisc} eq 'random-detect') { + my $avg = 1024; + my $qmax = ( $rate * 100 ) / 8000; + if ($qlimit * $avg < $qmax) { + print STDERR "Configuration error in: $level\n"; + printf STDERR +"The queue limit (%d) is too small, must be greater than %d when using random-detect\n", + $level, $qmax / $avg; + exit 1; + } + } } sub prioQdisc { @@ -171,6 +184,8 @@ sub redQdisc { my $avg = 1024; my $qmax = (defined $rate) ? (( $rate * 100 ) / 8000) : (18 * $avg); my $qmin = $qmax / 3; + $qmin = $avg if $qmin < $avg; + my $burst = ( 2 * $qmin + $qmax ) / (3 * $avg); my $limit = $self->{_limit}; my $qlimit = (defined $limit) ? ($limit * $avg) : (4 * $qmax); -- cgit v1.2.3