diff options
| author | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2008-07-15 09:01:10 -0700 | 
|---|---|---|
| committer | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2008-07-15 09:01:10 -0700 | 
| commit | 3dd93c5175de9a4d32cadb7bb0c4f832fb14312d (patch) | |
| tree | fad3292cb82c2f49408ecfd1a8bec6467b2095e9 | |
| parent | b23c4faf070e8e5dc0eacee19c1dc379a0e9bcf5 (diff) | |
| parent | 9a25dee29ff200647e6b0f6b6dc58b0aade39a52 (diff) | |
| download | vyatta-cfg-qos-3dd93c5175de9a4d32cadb7bb0c4f832fb14312d.tar.gz vyatta-cfg-qos-3dd93c5175de9a4d32cadb7bb0c4f832fb14312d.zip | |
Merge branch 'hollywood' of suva.vyatta.com:/git/vyatta-cfg-qos into hollywood
| -rw-r--r-- | scripts/VyattaQosTrafficShaper.pm | 18 | ||||
| -rw-r--r-- | scripts/VyattaQosUtil.pm | 15 | 
2 files changed, 31 insertions, 2 deletions
| diff --git a/scripts/VyattaQosTrafficShaper.pm b/scripts/VyattaQosTrafficShaper.pm index 5ba60dd..f321e9b 100644 --- a/scripts/VyattaQosTrafficShaper.pm +++ b/scripts/VyattaQosTrafficShaper.pm @@ -253,9 +253,27 @@ sub new {      bless $self, $class;      $self->_define($config); +    $self->_validate($config); +      return $self;  } +sub _validate { +    my $self = shift; + +    if ( $self->{_rate} ne "auto" ) { +	my $classes = $self->{_classes}; +	my $default = shift @$classes; +	my $rate = VyattaQosUtil::getRate($self->{_rate}); + +	$default->rateCheck($rate, "$self->{_level} default"); + +	foreach my $class (@$classes) { +	    $class->rateCheck($rate, "$self->{_level} class $class->{id}"); +	} +    } +} +  # Rate can be something like "auto" or "10.2mbit"  sub _getAutoRate {      my ($rate, $dev) = @_; diff --git a/scripts/VyattaQosUtil.pm b/scripts/VyattaQosUtil.pm index f847116..eca0ca3 100644 --- a/scripts/VyattaQosUtil.pm +++ b/scripts/VyattaQosUtil.pm @@ -220,17 +220,28 @@ sub getIfIndex {  # return result in bits per second  sub interfaceRate {      my ($interface) = @_; +    my $speed;      my $config = new VyattaConfig;      $config->setLevel("interfaces ethernet");      if ($config->exists("$interface")) { -	my $speed  = $config->returnValue("$interface speed"); +	$speed  = $config->returnValue("$interface speed");  	if (defined($speed) && $speed ne "auto") {  	    return $speed * 1000000;  	}      }  -    return ethtoolRate($interface); +    # During boot it may take time for auto-negotiation +    for (my $retries = 0; $retries < 5; $retries++) { +	$speed = ethtoolRate($interface); +	if (defined $speed) { +	    return $speed; +	} +	sleep 1; +    } + +    warn "Could not determine speed for $interface, assuming 100mbit\n"; +    return 100 * 1000000;  }  ## ethtoolRate("eth0") | 
