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 ++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) (limited to 'scripts') 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 <