diff options
author | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2008-03-31 11:53:20 -0700 |
---|---|---|
committer | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2008-03-31 11:53:20 -0700 |
commit | 254f894a9ae414529b88bc4d248a1b9633ef87fe (patch) | |
tree | 82e03afebea652e86c617ba3ad8fbf4a8c07eb5f | |
parent | c6c4dc093fdb4f6c6088b7af5682c654e73fbe0a (diff) | |
download | vyatta-cfg-qos-254f894a9ae414529b88bc4d248a1b9633ef87fe.tar.gz vyatta-cfg-qos-254f894a9ae414529b88bc4d248a1b9633ef87fe.zip |
bandwidth problems should be nonfatal
If the customer has incorrectly assigned bandwidth and
rate ceilings for QOS, the problem can not be detected until
commit. At that point (possibly during boot), it is better to
print a warning rather than failing.
This addresses Bug 2919.
-rw-r--r-- | scripts/VyattaQosTrafficShaper.pm | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/scripts/VyattaQosTrafficShaper.pm b/scripts/VyattaQosTrafficShaper.pm index 8ecb6db..0f4d34c 100644 --- a/scripts/VyattaQosTrafficShaper.pm +++ b/scripts/VyattaQosTrafficShaper.pm @@ -102,24 +102,21 @@ } sub rateCheck { - my ($self, $speed) = @_; - my $rate = _getPercentRate($self->{_rate}, $speed); - my $ceil = _getPercentRate($self->{_ceiling}, $speed); + my ($self, $limit, $level) = @_; - if ($rate > $speed) { - printf "policy bandwidth %dKbps < class bandwidth %dKbps\n", - $speed / 1000, $rate / 1000; - return undef; + my $rate = _getPercentRate($self->{_rate}, $limit); + if ($rate > $limit) { + printf STDERR + "Warning: $level\nbandwidth %dKbps > overall bandwidth %dKbps\n", + $rate / 1000, $limit / 1000; } - # create the class + my $ceil = _getPercentRate($self->{_ceiling}, $limit); if (defined $ceil && $ceil < $rate) { - printf "ceiling %dKbps < bandwidth %dKbps\n", + printf STDERR + "Warning: $level\nceiling %dKbps < class bandwidth %dKbps\n", $ceil / 1000, $rate / 1000; - return undef; } - - return !0; } sub prioQdisc { @@ -317,15 +314,10 @@ sub commands { my $default = shift @$classes; my $maxid = 1; - if (! $default->rateCheck($rate) ) { - die "$self->{_level} default : invalid parameter\n"; - } + $default->rateCheck($rate, "$self->{_level} default"); foreach my $class (@$classes) { - # rate constraints - if (! $class->rateCheck($rate) ) { - die "$self->{_level} class $class->{id} : invalid parameter\n"; - } + $class->rateCheck($rate, "$self->{_level} class $class->{id}"); # find largest class id if (defined $class->{id} && $class->{id} > $maxid) { |