diff options
author | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2009-05-23 08:57:19 -0700 |
---|---|---|
committer | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2009-05-23 15:19:54 -0700 |
commit | 87794a3d5ddb55af9cc298ec97b2892918e657d4 (patch) | |
tree | da72c22470325ba2b891350e7c435a0bad2a2960 | |
parent | a7ec99d913b0169b987a4ebdf2d26a36670b20bb (diff) | |
download | vyatta-cfg-qos-87794a3d5ddb55af9cc298ec97b2892918e657d4.tar.gz vyatta-cfg-qos-87794a3d5ddb55af9cc298ec97b2892918e657d4.zip |
Reimplementation of WRED
Make a simpler version of WRED that acts more like Cisco.
Use Diffserv on Linux paper for example of how to use DSMARK and GRED
to achieve similar result.
50 files changed, 186 insertions, 414 deletions
diff --git a/Makefile.am b/Makefile.am index 705c247..af0d69e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -16,7 +16,7 @@ share_perl5_DATA += lib/Vyatta/Qos/TrafficLimiter.pm share_perl5_DATA += lib/Vyatta/Qos/LimiterClass.pm share_perl5_DATA += lib/Vyatta/Qos/RoundRobin.pm share_perl5_DATA += lib/Vyatta/Qos/NetworkEmulator.pm -share_perl5_DATA += lib/Vyatta/Qos/WeightedRandom.pm +share_perl5_DATA += lib/Vyatta/Qos/RandomDetect.pm etcdir = /etc etc_SCRIPTS = diff --git a/lib/Vyatta/Qos/RandomDetect.pm b/lib/Vyatta/Qos/RandomDetect.pm new file mode 100644 index 0000000..155b669 --- /dev/null +++ b/lib/Vyatta/Qos/RandomDetect.pm @@ -0,0 +1,143 @@ +# Random Detect +# +# This Qos module uses DSMARK and GRED to provide a policy +# similar to Cisco Weighted Random Detect. +# +# See Almesberger, Werner; Hadi Salim, Jamal; Kuznetsov, Alexey +# "Differentiated Services on Linux" +# http://www.almesberger.net/cv/papers/18270721.pdf +# +# **** License **** +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# This code was originally developed by Vyatta, Inc. +# Portions created by Vyatta are Copyright (C) 2008 Vyatta, Inc. +# All Rights Reserved. +# **** End License **** + +package Vyatta::Qos::RandomDetect; +use strict; +use warnings; + +require Vyatta::Config; +use Vyatta::Qos::Util qw/getRate getAutoRate getTime/; + +# default values for different precedence levels +my @default_fields = ( + { 'min-threshold' => 9, 'max-threshold' => 18, 'mark-probability' => 1/2 }, + { 'min-threshold' => 10, 'max-threshold' => 18, 'mark-probability' => 5/9 }, + { 'min-threshold' => 11, 'max-threshold' => 18, 'mark-probability' => .1 }, + { 'min-threshold' => 12, 'max-threshold' => 18, 'mark-probability' => 2/3 }, + { 'min-threshold' => 13, 'max-threshold' => 18, 'mark-probability' => .1 }, + { 'min-threshold' => 14, 'max-threshold' => 18, 'mark-probability' => 7/9 }, + { 'min-threshold' => 15, 'max-threshold' => 18, 'mark-probability' => 5/6 }, + { 'min-threshold' => 16, 'max-threshold' => 18, 'mark-probability' => 8/9 }, +); + +# Create a new instance based on config information +sub new { + my ( $that, $config, $name ) = @_; + my $level = $config->setLevel(); + + my $rate = $config->returnValue("bandwidth"); + die "$level bandwidth configuration missing" unless $rate; + my @precedence = getPrecedence( $level ); + + my $self = {}; + my $class = ref($that) || $that; + bless $self, $class; + + $self->{_rate} = $rate; + $self->{_precedence} = \@precedence; + + return $self; +} + +sub getPrecedence { + my ( $level ) = @_; + my $config = new Vyatta::Config; + my @precedence; + + for ( my $i = 0 ; $i <= 7 ; $i++ ) { + my $defaults = $default_fields[$i]; + my %param; + + $config->setLevel("$level precedence $i"); + foreach my $field (keys %$defaults) { + my $val = $config->returnValue($field); + + if ( !defined $val ) { + $param{$field} = $defaults->{$field}; + } elsif ( $field eq 'mark-probability' ) { + $param{$field} = 1 / $val; + } else { + $param{$field} = $val; + } + } + $precedence[$i] = \%param; + } + + return @precedence; +} + +sub commands { + my ( $self, $dev ) = @_; + my $root = 1; + my $precedence = $self->{_precedence}; + my $rate = getAutoRate( $self->{_rate}, $dev ); + + # 1. setup DSMARK to convert DSCP to tc_index + print "qdisc add dev eth0 root handle $root: dsmark indices 1 set_tc_index\n"; + + # 2. use tcindex filter to convert tc_index to precedence + print + "filter add dev $dev parent $root: protocol ip prio 1 tcindex mask 0xe0 shift 5\n"; + + print "qdisc add dev $dev parent $root: gred setup DPs 8 default 7\n"; + + # set VQ parameters + for ( my $i = 0 ; $i <= 7 ; $i++ ) { + my $param = $precedence->[$i]; + my $qmin = $param->{'min-threshold'}; + my $qmax = $param->{'max-threshold'}; + my $prob = $param->{'mark-probability'}; + + print "qdisc change dev $dev parent $root:$i gred"; + printf " limit %dK min %dK max %dK avpkt 1K", 4 * $qmax, $qmin, $qmax; + printf " burst %d bandwidth %d DP %d probability %f\n", + ( 2 * $qmin + $qmax ) / 3, $rate, $i, $prob; + } +} + +# Walk configuration tree and look for changed nodes +# The configuration system should do this but doesn't do it right +sub isChanged { + my ( $self, $name ) = @_; + my $config = new Vyatta::Config; + + $config->setLevel("qos-policy random-detect $name"); + + return 'bandwidth' if ( $config->isChanged('bandwidth') ); + + my %precedenceNodes = $config->listNodeStatus('precedence'); + while ( my ( $pred, $status ) = each %precedenceNodes ) { + return "precedence $pred" if ( $status ne 'static' ); + + my $defaults = $default_fields[0]; + foreach my $attr (keys %$defaults) { + return "precedence $pred $attr" + if ( $config->isChanged("precedence $pred $attr") ); + } + } + + return; # false +} + +1; diff --git a/lib/Vyatta/Qos/ShaperClass.pm b/lib/Vyatta/Qos/ShaperClass.pm index c3fae16..4e0ada1 100644 --- a/lib/Vyatta/Qos/ShaperClass.pm +++ b/lib/Vyatta/Qos/ShaperClass.pm @@ -21,7 +21,7 @@ use warnings; require Vyatta::Config; use Vyatta::Qos::Match; -use Vyatta::Qos::Util qw/getDsfield getRate RedParam/; +use Vyatta::Qos::Util qw/getDsfield getRate/; sub new { @@ -153,11 +153,27 @@ sub fifoQdisc { # make some assumptions to make this sane (based on LARTC) # average size = 1000 bytes # latency = 100ms +# +# Bandwidth (bits/sec) * Latency (ms) +# Maximum Threshold = -------------------------------------- +# (bytes) 8 bits/byte * 1000000 us/sec +# +# Minimum Threshold = Maximum Threshold / 3 +# Avpkt = Average Packet Length +# Burst = ( 2 * MinThreshold + MaxThreshold) / ( 3 * Avpkt ) +# Limit = 4 * MaxThreshold +# +# These are based on Sally Floyd's recommendations: +# http://www.icir.org/floyd/REDparameters.txt +# sub redQdisc { my ( $self, $dev, $rate ) = @_; my $avg = 1000; my $latency = 100000; - my ($qmin, $qmax, $burst, $maxp) = RedParam($rate, $latency, $avg); + my $qmax = ( $rate * $latency ) / 8000000; + my $qmin = $qmax / 3; + my $burst = ( 2 * $qmin + $qmax ) / ( 3 * $avg ); + my $maxp = 0.1; my $limit = $self->{_limit}; my $qlimit; @@ -169,7 +185,7 @@ sub redQdisc { printf "red limit %d min %d max %d avpkt %d", $qlimit, $qmin, $qmax, $avg; printf " burst %d probability %f bandwidth %d ecn\n", - $prob, $burst, $maxp, $rate / 1000; + $burst, $maxp, $rate / 1000; } my %qdiscOptions = ( diff --git a/lib/Vyatta/Qos/Util.pm b/lib/Vyatta/Qos/Util.pm index ee1b722..7f5454d 100644 --- a/lib/Vyatta/Qos/Util.pm +++ b/lib/Vyatta/Qos/Util.pm @@ -21,7 +21,7 @@ use warnings; our @EXPORT = qw(getRate getPercent getBurstSize getProtocol getDsfield getTime getAutoRate); -our @EXPORT_OK = qw(getIfIndex RedParam); +our @EXPORT_OK = qw(getIfIndex); use base qw(Exporter); sub get_num { @@ -319,26 +319,4 @@ sub ethtoolRate { return $rate; } -# Compute parameters for RED algorithim based on bandwidth and latency -# -# Bandwidth (bits/sec) * Latency (ms) -# Maximum Threshold = -------------------------------------- -# (bytes) 8 bits/byte * 1000000 us/sec -# -# Minimum Threshold = Maximum Threshold / 3 -# Avpkt = Average Packet Length -# Burst = ( 2 * MinThreshold + MaxThreshold) / ( 3 * Avpkt ) -# Limit = 4 * MaxThreshold -# -# These are based on Sally Floyd's recommendations: -# http://www.icir.org/floyd/REDparameters.txt -sub RedParam { - my ( $bandwidth, $latency, $avgpkt ) = @_; - my $qmax = ( $bandwidth * $latency ) / 8000000; - my $qmin = $qmax / 3; - my $burst = ( 2 * $qmin + $qmax ) / ( 3 * $avgpkt ); - - return ($qmin, $qmax, $burst, 0.1); -} - 1; diff --git a/lib/Vyatta/Qos/WeightedRandom.pm b/lib/Vyatta/Qos/WeightedRandom.pm deleted file mode 100644 index 0b1dc37..0000000 --- a/lib/Vyatta/Qos/WeightedRandom.pm +++ /dev/null @@ -1,185 +0,0 @@ -# Weighted Random i.e. GRED (Generic Random Early Detect) -# -# **** License **** -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# This code was originally developed by Vyatta, Inc. -# Portions created by Vyatta are Copyright (C) 2008 Vyatta, Inc. -# All Rights Reserved. -# **** End License **** - -package Vyatta::Qos::WeightedRandom; -use strict; -use warnings; - -require Vyatta::Config; -require Vyatta::Qos::ShaperClass; -use Vyatta::Qos::Util qw/getRate getAutoRate getTime RedParam/; - -my $wred = 'weighted-random'; - -# Create a new instance based on config information -sub new { - my ( $that, $config, $name ) = @_; - my $level = $config->setLevel(); - my $rate = $config->returnValue("bandwidth"); - die "$level bandwidth configuration missing" unless $rate; - - my @classes = _getClasses($level); - - _checkClasses( $level, $rate, @classes ); - - my $self = {}; - my $class = ref($that) || $that; - bless $self, $class; - $self->{_rate} = $rate; - $self->{_level} = $level; - $self->{_classes} = \@classes; - - return $self; -} - -sub _getClasses { - my $level = shift; - my @classes; - my $config = new Vyatta::Config; - - $config->setLevel($level); - $config->exists("default") - or die "$level configuration not complete: missing default class\n"; - - $config->setLevel("$level default"); - push @classes, new Vyatta::Qos::ShaperClass($config); - $config->setLevel($level); - - foreach my $id ( $config->listNodes("class") ) { - $config->setLevel("$level class $id"); - push @classes, new Vyatta::Qos::ShaperClass( $config, $id ); - } - - return @classes; -} - -# Check constraints on class bandwidth values -sub _checkClasses { - my $level = shift; - my $rate = shift; - my $default = shift; - - # if auto, can't check at create must wait for policy to be applied - $rate = ( $rate eq "auto" ) ? undef : getRate($rate); - $default->rateCheck( $rate, "$level default" ) if $rate; - - foreach my $class (@_) { - die "$class->{level} bandwidth not defined\n" unless $class->{_rate}; - $class->rateCheck( $rate, "$level class $class->{id}" ) if $rate; - } -} - -sub commands { - my ( $self, $dev ) = @_; - my $rate = getAutoRate( $self->{_rate}, $dev ); - my $classes = $self->{_classes}; - my $default = shift @$classes; - my $maxid = 1; - - $default->rateCheck( $rate, "$self->{_level} default" ); - foreach my $class (@$classes) { - $class->rateCheck( $rate, "$self->{_level} class $class->{id}" ); - - # find largest class id - if ( defined $class->{id} && $class->{id} > $maxid ) { - $maxid = $class->{id}; - } - } - - # fill in id of default - $default->{id} = ++$maxid; - push @$classes, $default; - - print "qdisc add dev $dev handle 1: root gred"; - printf " setup DPs %d default %d\n", $maxid+1, $maxid; - - foreach my $class (@$classes) { - my $classbw = $class->get_rate($rate); - my $avg = $class->{_avgpkt}; - my $latency = getTime( $class->{_latency} ); - - my ( $qmin, $qmax, $burst, $maxp ) - = RedParam( $classbw, $latency, $avg ); - - print "qdisc change dev $dev root gred"; - printf " prio %d", $class->{_priority} if $class->{_priority}; - printf " limit %d min %d max %d avpkt %d probability %f", - 4 * $qmax, $qmin, $qmax, $avg, $maxp; - printf " burst %d bandwidth %d DP %d", - $burst, $rate, $class->{id}; - print " probability 0.1\n"; - - foreach my $match ( $class->matchRules() ) { - $match->filter( $dev, 1, $class->{_priority} ); - printf " flowid :%x\n", $class->{id}; - } - } -} - -# Walk configuration tree and look for changed nodes -# The configuration system should do this but doesn't do it right -sub isChanged { - my ( $self, $name ) = @_; - my $config = new Vyatta::Config; - my @attributes = - qw(bandwidth burst latency packet-length priority queue-limit); - - $config->setLevel("qos-policy $wred $name"); - - return 'bandwidth' if ( $config->isChanged('bandwidth') ); - - foreach my $attr (@attributes) { - return "default $attr" if ( $config->isChanged("default $attr") ); - } - - my %classNodes = $config->listNodeStatus('class'); - while ( my ( $class, $status ) = each %classNodes ) { - return "class $class" if ( $status ne 'static' ); - - foreach my $attr (@attributes) { - return "class $class $attr" - if ( $config->isChanged("class $class $attr") ); - } - - my %matchNodes = $config->listNodeStatus("class $class match"); - while ( my ( $match, $status ) = each %matchNodes ) { - my $level = "class $class match $match"; - return $level if ( $status ne 'static' ); - - foreach my $parm ( - 'vif', - 'ether destination', - 'ether source', - 'ether protocol', - 'interface', - 'ip dscp', - 'ip protocol', - 'ip source address', - 'ip destination address', - 'ip source port', - 'ip destination port' - ) - { - return "$level $parm" if ( $config->isChanged("$level $parm") ); - } - } - } - - return; # false -} - -1; diff --git a/scripts/vyatta-qos.pl b/scripts/vyatta-qos.pl index 9d13b59..693da36 100755 --- a/scripts/vyatta-qos.pl +++ b/scripts/vyatta-qos.pl @@ -34,7 +34,7 @@ my %policies = ( 'network-emulator' => 'NetworkEmulator', 'round-robin' => 'RoundRobin', 'priority-queue' => 'Priority', - 'weighted-random' => 'WeightedRandom', + 'random-detect' => 'RandomDetect', }, 'in' => { 'traffic-limiter' => 'TrafficLimiter', } ); diff --git a/templates/qos-policy/weighted-random/node.def b/templates/qos-policy/random-detect/node.def index 02911a1..02911a1 100644 --- a/templates/qos-policy/weighted-random/node.def +++ b/templates/qos-policy/random-detect/node.def diff --git a/templates/qos-policy/weighted-random/node.tag/bandwidth/node.def b/templates/qos-policy/random-detect/node.tag/bandwidth/node.def index 76fa6e2..76fa6e2 100644 --- a/templates/qos-policy/weighted-random/node.tag/bandwidth/node.def +++ b/templates/qos-policy/random-detect/node.tag/bandwidth/node.def diff --git a/templates/qos-policy/weighted-random/node.tag/description/node.def b/templates/qos-policy/random-detect/node.tag/description/node.def index 1e8e64f..1e8e64f 100644 --- a/templates/qos-policy/weighted-random/node.tag/description/node.def +++ b/templates/qos-policy/random-detect/node.tag/description/node.def diff --git a/templates/qos-policy/random-detect/node.tag/precedence/node.def b/templates/qos-policy/random-detect/node.tag/precedence/node.def new file mode 100644 index 0000000..ac63dd6 --- /dev/null +++ b/templates/qos-policy/random-detect/node.tag/precedence/node.def @@ -0,0 +1,6 @@ +tag: +type: u32 +help: Set precedence values +syntax:expression: $VAR(@) >= 0 && $VAR(@) < 8; "IP precedence value must be between 0 and 7" +comp_help: possible completions + <0-7> IP precedence number diff --git a/templates/qos-policy/random-detect/node.tag/precedence/node.tag/mark-probability/node.def b/templates/qos-policy/random-detect/node.tag/precedence/node.tag/mark-probability/node.def new file mode 100644 index 0000000..8ce98a6 --- /dev/null +++ b/templates/qos-policy/random-detect/node.tag/precedence/node.tag/mark-probability/node.def @@ -0,0 +1,5 @@ +type: u32 +help: Set the mark probability for this precedence +syntax:expression: $VAR(@) >= 0 ; "Mark probability must be greater than 0" +comp_help: Allowed values: + <number> Numeric value ( 1 / N ) diff --git a/templates/qos-policy/random-detect/node.tag/precedence/node.tag/maximum-threshold/node.def b/templates/qos-policy/random-detect/node.tag/precedence/node.tag/maximum-threshold/node.def new file mode 100644 index 0000000..3032d80 --- /dev/null +++ b/templates/qos-policy/random-detect/node.tag/precedence/node.tag/maximum-threshold/node.def @@ -0,0 +1,5 @@ +type: u32 +help: Set the maximum threshold for random detection +syntax:expression: $VAR(@) >= 0 && $VAR(@) <= 4096; "Threshold must be between 0 and 4096" +comp_help: Allowed values: + <number> Threshold in packets diff --git a/templates/qos-policy/random-detect/node.tag/precedence/node.tag/minimum-threshold/node.def b/templates/qos-policy/random-detect/node.tag/precedence/node.tag/minimum-threshold/node.def new file mode 100644 index 0000000..fe86423 --- /dev/null +++ b/templates/qos-policy/random-detect/node.tag/precedence/node.tag/minimum-threshold/node.def @@ -0,0 +1,5 @@ +type: u32 +help: Set the minimum threshold for random detection +syntax:expression: $VAR(@) >= 0 && $VAR(@) <= 4096; "Threshold must be between 0 and 4096" +comp_help: Allowed values: + <number> Threshold in packets diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.def deleted file mode 100644 index ae4177d..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.def +++ /dev/null @@ -1,6 +0,0 @@ -tag: -type: u32 -help: Set class handle -syntax:expression: $VAR(@) >= 1 && $VAR(@) < 16; "Class identifier must be between 1 and 15" -comp_help: possible completions - <1-15> Class ID diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/bandwidth/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/bandwidth/node.def deleted file mode 100644 index 6f15037..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/bandwidth/node.def +++ /dev/null @@ -1,10 +0,0 @@ -type: txt -default: "100%" -help: Set the bandwidth used for this class -syntax:expression: exec "/opt/vyatta/sbin/vyatta-qos-util.pl --percent-or-rate \"$VAR(@)\"" -comp_help: Allowed values: - <number> Bandwidth in Kbps - <number>%% Percentage of overall rate (default 100%%) - <number><suffix> Value with scaling suffix - bits per sec (kbit, mbit, gbit) - bytes per sec (kbps, mbps, gbps) diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/burst/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/burst/node.def deleted file mode 100644 index 54ae4f3..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/burst/node.def +++ /dev/null @@ -1,7 +0,0 @@ -type: txt -help: Set the burst size for this class (default: 15kb) -default: "15k" -syntax:expression: exec "/opt/vyatta/sbin/vyatta-qos-util.pl --burst \"$VAR(@)\"" -comp_help: Allowed values: - <number> Burst size in bytes - <number><suffix> Size with scaling suffix (kb, mb, gb) diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/description/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/description/node.def deleted file mode 100644 index d4241e7..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/description/node.def +++ /dev/null @@ -1,2 +0,0 @@ -type: txt -help: Set description for this traffic class diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/latency/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/latency/node.def deleted file mode 100644 index 97501c5..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/latency/node.def +++ /dev/null @@ -1,8 +0,0 @@ -type: txt -help: Set maximum desired latency -default: "100ms" -syntax:expression: exec "/opt/vyatta/sbin/vyatta-qos-util.pl --time \"$VAR(@)\"" -comp_help: Define maximum desired latency in milliseconds - <number> Latency in milliseconds - <number><suffix> Time with suffx (secs, ms, us) - diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.def deleted file mode 100644 index 2a5d021..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.def +++ /dev/null @@ -1,4 +0,0 @@ -tag: -type: txt -syntax:expression: pattern $VAR(@) "^[^-]" ; "Match queue name cannot start with \"-\"" -help: Set class matching rule name diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/description/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/description/node.def deleted file mode 100644 index a56c59c..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/description/node.def +++ /dev/null @@ -1,2 +0,0 @@ -type: txt -help: Set description for this match diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ether/destination/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ether/destination/node.def deleted file mode 100644 index e8be347..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ether/destination/node.def +++ /dev/null @@ -1,2 +0,0 @@ -type: macaddr -help: Set the Ethernet destination address for this match diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ether/protocol/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ether/protocol/node.def deleted file mode 100644 index 05d6511..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ether/protocol/node.def +++ /dev/null @@ -1,3 +0,0 @@ -type: u32 -help: Set Ethernet protocol for this match -syntax:expression: ($VAR(@) >= 0 && $VAR(@) < 65536) ; "protocol must be between 0 and 65535" diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ether/source/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ether/source/node.def deleted file mode 100644 index b993af6..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ether/source/node.def +++ /dev/null @@ -1,2 +0,0 @@ -type: macaddr -help: Set the Ethernet source address for this match diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/interface/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/interface/node.def deleted file mode 100644 index bb0c1e3..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/interface/node.def +++ /dev/null @@ -1,7 +0,0 @@ -type: txt -help: Set interface name for this match -syntax:expression: exec "[ -f /sys/class/net/$VAR(@)/ifindex ]" ; "Interface must already exist" -allowed: local -a array - array=( /sys/class/net/* ) - echo -n ${array[@]##*/} - diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/destination/address/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/destination/address/node.def deleted file mode 100644 index ccd2d14..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/destination/address/node.def +++ /dev/null @@ -1,2 +0,0 @@ -type: ipv4net -help: Set IP destination address for this match diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/destination/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/destination/node.def deleted file mode 100644 index 54eef5b..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/destination/node.def +++ /dev/null @@ -1 +0,0 @@ -help: Match on destination port or address diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/destination/port/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/destination/port/node.def deleted file mode 100644 index 561899c..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/destination/port/node.def +++ /dev/null @@ -1,3 +0,0 @@ -type: u32 -help: Set IP destination port for this match -syntax:expression: ($VAR(@) > 0 && $VAR(@) < 65536) ; "port must be between 1 and 65535" diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/dscp/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/dscp/node.def deleted file mode 100644 index 4f3f18e..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/dscp/node.def +++ /dev/null @@ -1,18 +0,0 @@ -type: txt -help: Match on Differentiated Services Codepoint (DSCP) -syntax:expression: exec "/opt/vyatta/sbin/vyatta-qos-util.pl --dscp \"$VAR(@)\"" -allowed: awk ' - /^#/ { next } - { printf "%s ", $2 }' </etc/iproute2/rt_dsfield -comp_help: <0-63> Differentiated Services Codepoint (DSCP) value - default match DSCP (000000) - reliability match DSCP (000001) - throughput match DSCP (000010) - lowdelay match DSCP (000100) - priority match DSCP (001000) - immediate match DSCP (010000) - flash match DSCP (011000) - flash-override match DSCP (100000) - critical match DSCP (101000) - internet match DSCP (110000) - network match DSCP (111000) diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/protocol/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/protocol/node.def deleted file mode 100644 index 1938d04..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/protocol/node.def +++ /dev/null @@ -1,17 +0,0 @@ -type: txt -help: Match IP protocol name or number -syntax:expression: exec "/opt/vyatta/sbin/vyatta-qos-util.pl --protocol \"$VAR(@)\"" -allowed: awk ' - /^#/ { next } - { printf "%s ", $1 }' </etc/protocols -comp_help: <0-255> IP protocol value or name -Common names: - icmp Internet Control Message Protocol - igmp Internet Group Management Protocol - ggp Gateway-Gateway protocol - tcp Transmission Control Protocol - egp Exterior Gateway Protocol - udp User Datagram Protocol - gre General Routing Encapsulation - ospf Open Shortest Path First IGP - sctp Stream Control Transmission Protocol diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/source/address/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/source/address/node.def deleted file mode 100644 index 0bc690a..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/source/address/node.def +++ /dev/null @@ -1,2 +0,0 @@ -type: ipv4net -help: Set IP source address for this match diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/source/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/source/node.def deleted file mode 100644 index 4271b94..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/source/node.def +++ /dev/null @@ -1 +0,0 @@ -help: Match on source port or address diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/source/port/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/source/port/node.def deleted file mode 100644 index ecd96ab..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ip/source/port/node.def +++ /dev/null @@ -1,3 +0,0 @@ -type: u32 -help: Set IP source port for this match -syntax:expression: ($VAR(@) > 0 && $VAR(@) < 65536) ; "port must be between 1 and 65535" diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/destination/address/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/destination/address/node.def deleted file mode 100644 index 2f608f8..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/destination/address/node.def +++ /dev/null @@ -1,2 +0,0 @@ -type: ipv6net -help: Set IP destination address for this match diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/destination/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/destination/node.def deleted file mode 100644 index 54eef5b..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/destination/node.def +++ /dev/null @@ -1 +0,0 @@ -help: Match on destination port or address diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/destination/port/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/destination/port/node.def deleted file mode 100644 index 561899c..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/destination/port/node.def +++ /dev/null @@ -1,3 +0,0 @@ -type: u32 -help: Set IP destination port for this match -syntax:expression: ($VAR(@) > 0 && $VAR(@) < 65536) ; "port must be between 1 and 65535" diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/dscp/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/dscp/node.def deleted file mode 100644 index 4f3f18e..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/dscp/node.def +++ /dev/null @@ -1,18 +0,0 @@ -type: txt -help: Match on Differentiated Services Codepoint (DSCP) -syntax:expression: exec "/opt/vyatta/sbin/vyatta-qos-util.pl --dscp \"$VAR(@)\"" -allowed: awk ' - /^#/ { next } - { printf "%s ", $2 }' </etc/iproute2/rt_dsfield -comp_help: <0-63> Differentiated Services Codepoint (DSCP) value - default match DSCP (000000) - reliability match DSCP (000001) - throughput match DSCP (000010) - lowdelay match DSCP (000100) - priority match DSCP (001000) - immediate match DSCP (010000) - flash match DSCP (011000) - flash-override match DSCP (100000) - critical match DSCP (101000) - internet match DSCP (110000) - network match DSCP (111000) diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/protocol/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/protocol/node.def deleted file mode 100644 index 1938d04..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/protocol/node.def +++ /dev/null @@ -1,17 +0,0 @@ -type: txt -help: Match IP protocol name or number -syntax:expression: exec "/opt/vyatta/sbin/vyatta-qos-util.pl --protocol \"$VAR(@)\"" -allowed: awk ' - /^#/ { next } - { printf "%s ", $1 }' </etc/protocols -comp_help: <0-255> IP protocol value or name -Common names: - icmp Internet Control Message Protocol - igmp Internet Group Management Protocol - ggp Gateway-Gateway protocol - tcp Transmission Control Protocol - egp Exterior Gateway Protocol - udp User Datagram Protocol - gre General Routing Encapsulation - ospf Open Shortest Path First IGP - sctp Stream Control Transmission Protocol diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/source/address/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/source/address/node.def deleted file mode 100644 index 23c96c2..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/source/address/node.def +++ /dev/null @@ -1,2 +0,0 @@ -type: ipv6net -help: Set IP source address for this match diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/source/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/source/node.def deleted file mode 100644 index 4271b94..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/source/node.def +++ /dev/null @@ -1 +0,0 @@ -help: Match on source port or address diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/source/port/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/source/port/node.def deleted file mode 100644 index ecd96ab..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/ipv6/source/port/node.def +++ /dev/null @@ -1,3 +0,0 @@ -type: u32 -help: Set IP source port for this match -syntax:expression: ($VAR(@) > 0 && $VAR(@) < 65536) ; "port must be between 1 and 65535" diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/vif/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/vif/node.def deleted file mode 100644 index e22250d..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/match/node.tag/vif/node.def +++ /dev/null @@ -1,5 +0,0 @@ -type: u32 -help: Set Virtual Local Area Network (VLAN) ID for this match -syntax:expression: $VAR(@) >= 0 && $VAR(@) <= 4095; "VLAN ID must be between 0 and 4095" -comp_help: possible completions: - <0-4095> Set VLAN ID diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/packet-length/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/packet-length/node.def deleted file mode 100644 index 60e4f35..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/packet-length/node.def +++ /dev/null @@ -1,5 +0,0 @@ -type: u32 -help: Set average packet length -default: 1024 -comp_help: Define average packet length in bytes for bandwidth calculation - (default 1024) diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/priority/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/priority/node.def deleted file mode 100644 index db3f1ec..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/priority/node.def +++ /dev/null @@ -1,5 +0,0 @@ -type: u32 -help: Set priority -syntax:expression: $VAR(@) >= 0 && $VAR(@) < 8 ; "priority must be between 0 than 7" -comp_help: Priority - <0-7> (default 0) diff --git a/templates/qos-policy/weighted-random/node.tag/class/node.tag/queue-limit/node.def b/templates/qos-policy/weighted-random/node.tag/class/node.tag/queue-limit/node.def deleted file mode 100644 index 49c47b4..0000000 --- a/templates/qos-policy/weighted-random/node.tag/class/node.tag/queue-limit/node.def +++ /dev/null @@ -1,2 +0,0 @@ -type: u32 -help: Set maximum queue size (packets) diff --git a/templates/qos-policy/weighted-random/node.tag/default/bandwidth/node.def b/templates/qos-policy/weighted-random/node.tag/default/bandwidth/node.def deleted file mode 100644 index 4d454d4..0000000 --- a/templates/qos-policy/weighted-random/node.tag/default/bandwidth/node.def +++ /dev/null @@ -1,10 +0,0 @@ -type: txt -help: Set the bandwidth used for default traffic -syntax:expression: exec "/opt/vyatta/sbin/vyatta-qos-util.pl --percent-or-rate \"$VAR(@)\"" -comp_help: Allowed values: - <number> Bandwidth in Kbps per second - <number>%% Percentage of overall rate - <number><suffix> Value with scaling suffix - bits per sec (kbit, mbit, gbit) - bytes per sec (kbps, mbps, gbps) - diff --git a/templates/qos-policy/weighted-random/node.tag/default/burst/node.def b/templates/qos-policy/weighted-random/node.tag/default/burst/node.def deleted file mode 100644 index 81e468a..0000000 --- a/templates/qos-policy/weighted-random/node.tag/default/burst/node.def +++ /dev/null @@ -1,7 +0,0 @@ -type: txt -help: Set the burst size for default traffic -default: "15k" -syntax:expression: exec "/opt/vyatta/sbin/vyatta-qos-util.pl --burst \"$VAR(@)\"" -comp_help: Allowed values: - <number> Burst size in bytes - <number><suffix> Size with scaling suffix (kb, mb, gb) diff --git a/templates/qos-policy/weighted-random/node.tag/default/latency/node.def b/templates/qos-policy/weighted-random/node.tag/default/latency/node.def deleted file mode 100644 index 97501c5..0000000 --- a/templates/qos-policy/weighted-random/node.tag/default/latency/node.def +++ /dev/null @@ -1,8 +0,0 @@ -type: txt -help: Set maximum desired latency -default: "100ms" -syntax:expression: exec "/opt/vyatta/sbin/vyatta-qos-util.pl --time \"$VAR(@)\"" -comp_help: Define maximum desired latency in milliseconds - <number> Latency in milliseconds - <number><suffix> Time with suffx (secs, ms, us) - diff --git a/templates/qos-policy/weighted-random/node.tag/default/packet-length/node.def b/templates/qos-policy/weighted-random/node.tag/default/packet-length/node.def deleted file mode 100644 index 60e4f35..0000000 --- a/templates/qos-policy/weighted-random/node.tag/default/packet-length/node.def +++ /dev/null @@ -1,5 +0,0 @@ -type: u32 -help: Set average packet length -default: 1024 -comp_help: Define average packet length in bytes for bandwidth calculation - (default 1024) diff --git a/templates/qos-policy/weighted-random/node.tag/default/priority/node.def b/templates/qos-policy/weighted-random/node.tag/default/priority/node.def deleted file mode 100644 index db3f1ec..0000000 --- a/templates/qos-policy/weighted-random/node.tag/default/priority/node.def +++ /dev/null @@ -1,5 +0,0 @@ -type: u32 -help: Set priority -syntax:expression: $VAR(@) >= 0 && $VAR(@) < 8 ; "priority must be between 0 than 7" -comp_help: Priority - <0-7> (default 0) diff --git a/templates/qos-policy/weighted-random/node.tag/default/queue-limit/node.def b/templates/qos-policy/weighted-random/node.tag/default/queue-limit/node.def deleted file mode 100644 index 49c47b4..0000000 --- a/templates/qos-policy/weighted-random/node.tag/default/queue-limit/node.def +++ /dev/null @@ -1,2 +0,0 @@ -type: u32 -help: Set maximum queue size (packets) |