From 496e4d37cd4acbd3b54822d2fb7fd0f9095e9b1c Mon Sep 17 00:00:00 2001 From: Daniil Baturin Date: Fri, 13 Aug 2021 08:45:16 -0500 Subject: T681: embed human-readable DSCP value definitions in the scripts to make them independent of the current /etc/iproute2/rt_dsfields content --- lib/Vyatta/Qos/Util.pm | 52 +++++++++++++++------- .../class/node.tag/match/node.tag/ip/dscp/node.def | 6 +-- 2 files changed, 40 insertions(+), 18 deletions(-) diff --git a/lib/Vyatta/Qos/Util.pm b/lib/Vyatta/Qos/Util.pm index af18dee..7a9e988 100644 --- a/lib/Vyatta/Qos/Util.pm +++ b/lib/Vyatta/Qos/Util.pm @@ -214,12 +214,43 @@ sub getProtocol { return $proto; } -# Parse /etc/iproute/rt_dsfield -# return a hex string "0x10" or undefined +my %dsfields = ( + "default" => 0x0, + "lowdelay" => 0x10, + "throughput" => 0x08, + "reliability" => 0x04, + "mincost" => 0x02, + "priority" => 0x20, + "immediate" => 0x40, + "flash" => 0x60, + "flash-override" => 0x80, + "critical" => 0x0A, + "internet" => 0xC0, + "network" => 0xE0, + "AF11" => 0x28, + "AF12" => 0x30, + "AF13" => 0x38, + "AF21" => 0x48, + "AF22" => 0x50, + "AF23" => 0x58, + "AF31" => 0x68, + "AF32" => 0x70, + "AF33" => 0x78, + "AF41" => 0x88, + "AF42" => 0x90, + "AF43" => 0x98, + "CS1" => 0x20, + "CS2" => 0x40, + "CS3" => 0x60, + "CS4" => 0x80, + "CS5" => 0xA0, + "CS6" => 0xC0, + "CS7" => 0xE0, + "EF" => 0xB8 +); + sub getDsfield { my ($str) = @_; - my $match = undef; - my $dsFileName = '/etc/iproute2/rt_dsfield'; defined $str or return; @@ -233,17 +264,8 @@ sub getDsfield { return $str << 2; } - open my $ds, '<', $dsFileName || die "Can't open $dsFileName, $!\n"; - while (<$ds>) { - next if /^#/; - chomp; - my ( $value, $name ) = split; - if ( $str eq $name ) { - $match = $value; - last; - } - } - close($ds) or die "read $dsFileName error\n"; + # if it's a text description of the value, we need to look it up + my $match = $dsfields{$str}; ( defined $match ) or die "\"$str\" unknown DSCP value\n"; return $match; diff --git a/templates-skeleton/qos-match-templates/class/node.tag/match/node.tag/ip/dscp/node.def b/templates-skeleton/qos-match-templates/class/node.tag/match/node.tag/ip/dscp/node.def index 224b002..d7cd316 100644 --- a/templates-skeleton/qos-match-templates/class/node.tag/match/node.tag/ip/dscp/node.def +++ b/templates-skeleton/qos-match-templates/class/node.tag/match/node.tag/ip/dscp/node.def @@ -1,9 +1,9 @@ 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 }'