From 200fb453f43a3f0406c14b9003ca5a1e6f7587f4 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Fri, 5 Sep 2008 15:03:30 -0700 Subject: Workaround CLI regex problem Recent CLI changes seem to have broken working templates that do regex matching. Workaround this by doing the syntax checking all in the perl script Bugfix: 3553 --- scripts/VyattaQosUtil.pm | 19 ++++++++++++++++++- scripts/vyatta-qos-util.pl | 15 ++++++++++++++- .../node.tag/class/node.tag/bandwidth/node.def | 3 +-- .../node.tag/class/node.tag/ceiling/node.def | 3 +-- .../node.tag/default/bandwidth/node.def | 3 +-- .../traffic-shaper/node.tag/default/ceiling/node.def | 3 +-- 6 files changed, 36 insertions(+), 10 deletions(-) diff --git a/scripts/VyattaQosUtil.pm b/scripts/VyattaQosUtil.pm index 668f5c1..82dfd6b 100644 --- a/scripts/VyattaQosUtil.pm +++ b/scripts/VyattaQosUtil.pm @@ -17,7 +17,7 @@ package VyattaQosUtil; require Exporter; -@EXPORT = qw/getRate getBurstSize getProtocol getDsfield getIfIndex interfaceRate/; +@EXPORT = qw/getRate getPercent getBurstSize getProtocol getDsfield getIfIndex interfaceRate/; use strict; sub get_num { @@ -84,6 +84,23 @@ sub getRate { } } +sub getPercent { + my $percent = shift; + my ($num, $suffix) = get_num($percent); + + ($suffix eq '%') + or die "$percent incorrect suffix (expect %)\n"; + defined $num + or die "$percent is not a valid percent bandwidth (not a number)\n"; + ($num >= 0) + or die "$percent is not a acceptable percent bandwidth (negative value)\n"; + ($num <= 100) + or die "$percent is not a acceptable percent bandwidth (greater than 100%)\n"; + + return $num; +} + + # Default time units for tc are usec. my %timeunits = ( 's' => 1000000, diff --git a/scripts/vyatta-qos-util.pl b/scripts/vyatta-qos-util.pl index 1e842b8..8c3bafd 100755 --- a/scripts/vyatta-qos-util.pl +++ b/scripts/vyatta-qos-util.pl @@ -22,7 +22,10 @@ use lib "/opt/vyatta/share/perl5/"; use VyattaQosUtil; use Getopt::Long; +my ($percent, $rate, $burst, $protocol, $dsfield, $time); + GetOptions( + "percent-or-rate=s" => \$percent, "rate=s" => \$rate, "burst=s" => \$burst, "protocol=s" => \$protocol, @@ -31,6 +34,15 @@ GetOptions( "time=s" => \$time, ); +if ( defined $percent ) { + if ($percent =~ /%$/) { + my $p = VyattaQosUtil::getPercent($percent); + } else { + my $r = VyattaQosUtil::getRate($percent); + } + exit 0; +} + if ( defined $rate ) { my $r = VyattaQosUtil::getRate($rate); exit 0; @@ -57,7 +69,8 @@ if ( defined $time ) { } print < Bandwidth in Kbps %% Percentage of overall rate (default 100%%) diff --git a/templates/qos-policy/traffic-shaper/node.tag/class/node.tag/ceiling/node.def b/templates/qos-policy/traffic-shaper/node.tag/class/node.tag/ceiling/node.def index 82c5ff0..11bf6b9 100644 --- a/templates/qos-policy/traffic-shaper/node.tag/class/node.tag/ceiling/node.def +++ b/templates/qos-policy/traffic-shaper/node.tag/class/node.tag/ceiling/node.def @@ -1,7 +1,6 @@ type: txt help: Set the bandwidth limit for this class -syntax:expression: exec "[[ \"$VAR(@)\" =~ '^[0-9]+(\.[0-9]*)?%$' ]] || \ - /opt/vyatta/sbin/vyatta-qos-util.pl --rate \"$VAR(@)\"" +syntax:expression: exec "/opt/vyatta/sbin/vyatta-qos-util.pl --percent-or-rate \"$VAR(@)\"" comp_help: Allowed values: Limit in Kbps %% Percentage of overall rate diff --git a/templates/qos-policy/traffic-shaper/node.tag/default/bandwidth/node.def b/templates/qos-policy/traffic-shaper/node.tag/default/bandwidth/node.def index 21b6e88..4d454d4 100644 --- a/templates/qos-policy/traffic-shaper/node.tag/default/bandwidth/node.def +++ b/templates/qos-policy/traffic-shaper/node.tag/default/bandwidth/node.def @@ -1,7 +1,6 @@ type: txt help: Set the bandwidth used for default traffic -syntax:expression: exec "[[ \"$VAR(@)\" =~ '^[0-9]+(\.[0-9]*)?%$' ]] || \ - /opt/vyatta/sbin/vyatta-qos-util.pl --rate \"$VAR(@)\"" +syntax:expression: exec "/opt/vyatta/sbin/vyatta-qos-util.pl --percent-or-rate \"$VAR(@)\"" comp_help: Allowed values: Bandwidth in Kbps per second %% Percentage of overall rate diff --git a/templates/qos-policy/traffic-shaper/node.tag/default/ceiling/node.def b/templates/qos-policy/traffic-shaper/node.tag/default/ceiling/node.def index 9b3c855..463c6bb 100644 --- a/templates/qos-policy/traffic-shaper/node.tag/default/ceiling/node.def +++ b/templates/qos-policy/traffic-shaper/node.tag/default/ceiling/node.def @@ -1,8 +1,7 @@ type: txt help: Set the bandwidth limit for default traffic default: "100%" -syntax:expression: exec "[[ \"$VAR(@)\" =~ '^[0-9]+(\.[0-9]*)?%$' ]] || \ - /opt/vyatta/sbin/vyatta-qos-util.pl --rate \"$VAR(@)\"" +syntax:expression: exec "/opt/vyatta/sbin/vyatta-qos-util.pl --percent-or-rate \"$VAR(@)\"" comp_help: Allowed values: Limit in Kbps %% Percentage of overall rate (default 100%%) -- cgit v1.2.3