diff options
author | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2010-07-19 16:13:28 -0700 |
---|---|---|
committer | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2010-07-19 16:13:28 -0700 |
commit | 410e94afe308549e097137f4ef3241ebcf1d4ed5 (patch) | |
tree | 4d335aa493de8c8c44174f50bbb793d72cd1585d | |
parent | e83b813fe1fba0735db2b080948144de3e337ce5 (diff) | |
download | vyatta-cfg-qos-410e94afe308549e097137f4ef3241ebcf1d4ed5.tar.gz vyatta-cfg-qos-410e94afe308549e097137f4ef3241ebcf1d4ed5.zip |
Add check for random-detect on slow speed class
The calculation of random-detect queue parameters is based on recommended
values from RFC. If allowed bandwidth is too small, the queue will be
too small to be useable. In that case just fail.
-rw-r--r-- | lib/Vyatta/Qos/ShaperClass.pm | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/lib/Vyatta/Qos/ShaperClass.pm b/lib/Vyatta/Qos/ShaperClass.pm index 439e404..6b474e6 100644 --- a/lib/Vyatta/Qos/ShaperClass.pm +++ b/lib/Vyatta/Qos/ShaperClass.pm @@ -117,17 +117,28 @@ sub rateCheck { exit 1; } - my $qlimit = $self->{_limit}; - if (defined($qlimit) && $self->{_qdisc} eq 'random-detect') { + if ($self->{_qdisc} eq 'random-detect') { my $avg = 1024; my $qmax = ( $rate * 100 ) / 8000; - if ($qlimit * $avg < $qmax) { + my $qlimit = $self->{_limit}; + if (defined($qlimit) && $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; } + + # The assumptions about average packet size and allowable latency + # result in limit on available bandwidth + # + # 2 * Avg pkt = (BW * Latency) / 8 bit/byte + # 16K bits = BW * .1 sec + if ($qmax < $avg) { + print STDERR "Configuration error in: $level\n"; + die +"Random-detect queue type requires effective bandwidth of 160 Kbit/sec or greater\n"; + } } } |