summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Hemminger <stephen.hemminger@vyatta.com>2008-03-31 11:53:20 -0700
committerStephen Hemminger <stephen.hemminger@vyatta.com>2008-03-31 11:53:20 -0700
commit254f894a9ae414529b88bc4d248a1b9633ef87fe (patch)
tree82e03afebea652e86c617ba3ad8fbf4a8c07eb5f
parentc6c4dc093fdb4f6c6088b7af5682c654e73fbe0a (diff)
downloadvyatta-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.pm30
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) {