From e475a086f6b53d8bb57117d1ef1ea00d72fa9dba Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Mon, 30 Mar 2009 08:28:35 -0700 Subject: Generate QoS interface templates Similar process to firewall and quagga parameters --- .gitignore | 1 + Makefile.am | 9 ++ gen-interface-templates.pl | 112 +++++++++++++++++++++ .../node.tag/bridged-ethernet/qos-policy/node.def | 1 - .../bridged-ethernet/qos-policy/out/node.def | 5 - .../node.tag/classical-ipoa/qos-policy/node.def | 1 - .../classical-ipoa/qos-policy/out/node.def | 5 - .../node.tag/pppoa/node.tag/qos-policy/node.def | 1 - .../pppoa/node.tag/qos-policy/out/node.def | 5 - .../node.tag/pppoe/node.tag/qos-policy/node.def | 1 - .../pppoe/node.tag/qos-policy/out/node.def | 5 - .../bonding/node.tag/qos-policy/node.def | 1 - .../bonding/node.tag/qos-policy/out/node.def | 5 - .../node.tag/vif/node.tag/qos-policy/node.def | 1 - .../node.tag/vif/node.tag/qos-policy/out/node.def | 7 -- .../node.tag/pppoe/node.tag/qos-policy/in/node.def | 9 -- .../node.tag/pppoe/node.tag/qos-policy/node.def | 1 - .../pppoe/node.tag/qos-policy/out/node.def | 9 -- .../ethernet/node.tag/qos-policy/in/node.def | 5 - .../ethernet/node.tag/qos-policy/node.def | 1 - .../ethernet/node.tag/qos-policy/out/node.def | 5 - .../node.tag/pppoe/node.tag/qos-policy/in/node.def | 9 -- .../node.tag/pppoe/node.tag/qos-policy/node.def | 1 - .../pppoe/node.tag/qos-policy/out/node.def | 9 -- .../node.tag/vif/node.tag/qos-policy/node.def | 1 - .../node.tag/vif/node.tag/qos-policy/out/node.def | 7 -- .../vif/node.tag/qos-policy/out/node.def | 8 -- .../vif/node.tag/qos-policy/out/node.def | 7 -- .../ppp/vif/node.tag/qos-policy/out/node.def | 7 -- .../serial/node.tag/qos-policy/in/node.def | 5 - .../interfaces/serial/node.tag/qos-policy/node.def | 1 - .../serial/node.tag/qos-policy/out/node.def | 5 - .../interfaces/tunnel/node.tag/qos-policy/node.def | 1 - .../tunnel/node.tag/qos-policy/out/node.def | 5 - 34 files changed, 122 insertions(+), 134 deletions(-) create mode 100755 gen-interface-templates.pl delete mode 100644 templates/interfaces/adsl/node.tag/pvc/node.tag/bridged-ethernet/qos-policy/node.def delete mode 100644 templates/interfaces/adsl/node.tag/pvc/node.tag/bridged-ethernet/qos-policy/out/node.def delete mode 100644 templates/interfaces/adsl/node.tag/pvc/node.tag/classical-ipoa/qos-policy/node.def delete mode 100644 templates/interfaces/adsl/node.tag/pvc/node.tag/classical-ipoa/qos-policy/out/node.def delete mode 100644 templates/interfaces/adsl/node.tag/pvc/node.tag/pppoa/node.tag/qos-policy/node.def delete mode 100644 templates/interfaces/adsl/node.tag/pvc/node.tag/pppoa/node.tag/qos-policy/out/node.def delete mode 100644 templates/interfaces/adsl/node.tag/pvc/node.tag/pppoe/node.tag/qos-policy/node.def delete mode 100644 templates/interfaces/adsl/node.tag/pvc/node.tag/pppoe/node.tag/qos-policy/out/node.def delete mode 100644 templates/interfaces/bonding/node.tag/qos-policy/node.def delete mode 100644 templates/interfaces/bonding/node.tag/qos-policy/out/node.def delete mode 100644 templates/interfaces/bonding/node.tag/vif/node.tag/qos-policy/node.def delete mode 100644 templates/interfaces/bonding/node.tag/vif/node.tag/qos-policy/out/node.def delete mode 100644 templates/interfaces/ethernet/node.tag/pppoe/node.tag/qos-policy/in/node.def delete mode 100644 templates/interfaces/ethernet/node.tag/pppoe/node.tag/qos-policy/node.def delete mode 100644 templates/interfaces/ethernet/node.tag/pppoe/node.tag/qos-policy/out/node.def delete mode 100644 templates/interfaces/ethernet/node.tag/qos-policy/in/node.def delete mode 100644 templates/interfaces/ethernet/node.tag/qos-policy/node.def delete mode 100644 templates/interfaces/ethernet/node.tag/qos-policy/out/node.def delete mode 100644 templates/interfaces/ethernet/node.tag/vif/node.tag/pppoe/node.tag/qos-policy/in/node.def delete mode 100644 templates/interfaces/ethernet/node.tag/vif/node.tag/pppoe/node.tag/qos-policy/node.def delete mode 100644 templates/interfaces/ethernet/node.tag/vif/node.tag/pppoe/node.tag/qos-policy/out/node.def delete mode 100644 templates/interfaces/ethernet/node.tag/vif/node.tag/qos-policy/node.def delete mode 100644 templates/interfaces/ethernet/node.tag/vif/node.tag/qos-policy/out/node.def delete mode 100644 templates/interfaces/serial/node.tag/cisco-hdlc/vif/node.tag/qos-policy/out/node.def delete mode 100644 templates/interfaces/serial/node.tag/frame-relay/vif/node.tag/qos-policy/out/node.def delete mode 100644 templates/interfaces/serial/node.tag/ppp/vif/node.tag/qos-policy/out/node.def delete mode 100644 templates/interfaces/serial/node.tag/qos-policy/in/node.def delete mode 100644 templates/interfaces/serial/node.tag/qos-policy/node.def delete mode 100644 templates/interfaces/serial/node.tag/qos-policy/out/node.def delete mode 100644 templates/interfaces/tunnel/node.tag/qos-policy/node.def delete mode 100644 templates/interfaces/tunnel/node.tag/qos-policy/out/node.def diff --git a/.gitignore b/.gitignore index eb55765..297cfa3 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ /Makefile /scripts/install-system +generated-templates diff --git a/Makefile.am b/Makefile.am index bdd9e11..21b5a63 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,5 @@ cfgdir = $(datadir)/vyatta-cfg/templates +gentmpdir = generated-templates share_perl5dir = /opt/vyatta/share/perl5/Vyatta/Qos sbin_SCRIPTS = scripts/vyatta-qos.pl @@ -20,8 +21,16 @@ etc_SCRIPTS = cpiop = find . ! -regex '\(.*~\|.*\.bak\|.*\.swp\|.*\#.*\#\)' -print0 | \ cpio -0pd +all-local: + rm -rf $(gentmpdir) + ./gen-interface-templates.pl $(gentmpdir) + +clean-local: + rm -rf $(gentmpdir) + install-exec-hook: mkdir -p $(DESTDIR)$(cfgdir) mkdir -p $(DESTDIR)/etc/ppp/ip-up.d cd templates; $(cpiop) $(DESTDIR)$(cfgdir) + cd $(gentmpdir); $(cpiop) $(DESTDIR)$(cfgdir) diff --git a/gen-interface-templates.pl b/gen-interface-templates.pl new file mode 100755 index 0000000..996455f --- /dev/null +++ b/gen-interface-templates.pl @@ -0,0 +1,112 @@ +#!/usr/bin/perl +# +# **** 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) 2009 Vyatta, Inc. +# All Rights Reserved. +# +# Author: Stephen Hemminger +# Date: March 2009 +# Description: Script to automatically generate per-interface qos templates. +# +# **** End License **** + +use strict; +use warnings; + +# set DEBUG in environment to test script +my $debug = $ENV{'DEBUG'}; + +# Mapping from configuration level to ifname used AT THAT LEVEL +my %interface_hash = ( + 'loopback/node.tag' => '$VAR(@)', + 'ethernet/node.tag' => '$VAR(@)', + 'ethernet/node.tag/pppoe/node.tag' => 'pppoe$VAR(@)', + 'ethernet/node.tag/vif/node.tag' => '$VAR(../@).$VAR(@)', + 'ethernet/node.tag/vif/node.tag/pppoe/node.tag' => 'pppoe$VAR(@)', + 'bonding/node.tag' => '$VAR(@)', + 'bonding/node.tag/vif/node.tag' => '$VAR(../@).$VAR(@)', + 'tunnel/node.tag' => '$VAR(@)', + 'bridge/node.tag' => '$VAR(@)', + 'openvpn/node.tag' => '$VAR(@)', + 'wirelessmodem/node.tag' => '$VAR(@)', + 'multilink/node.tag/vif/node.tag' => '$VAR(../@)', + + 'adsl/node.tag/pvc/node.tag/bridged-ethernet' => '$VAR(../../@)', + 'adsl/node.tag/pvc/node.tag/classical-ipoa' => '$VAR(../../@)', + 'adsl/node.tag/pvc/node.tag/pppoa/node.tag' => '$VAR(../../@)', + 'adsl/node.tag/pvc/node.tag/pppoe/node.tag' => '$VAR(../../@)', + + 'serial/node.tag/cisco-hdlc/vif/node.tag' => '$VAR(../../@).$VAR(@)', + 'serial/node.tag/frame-relay/vif/node.tag' => '$VAR(../../@).$VAR(@)', + 'serial/node.tag/ppp/vif/node.tag' => '$VAR(../../@).$VAR(@)', +); + +sub gen_template { + my ( $outpath, $ifname ) = @_; + $ifname =~ s#@\)#..\/..\/@\)#g; + + print $outpath, "\n" if ($debug); + $outpath .= "/qos-policy"; + mkdir $outpath + or die "Can't mkdir $outpath: $!"; + + open my $node, '>', "$outpath/node.def" + or die "Can't open $outpath/node.def: $!"; + print $node "help: Set Quality of Service (QOS) policy for interface\n"; + close $node + or die "Can't write $outpath/node.def: $!"; + + foreach my $dir qw(in out) { + my $path = "$outpath/$dir"; + + mkdir $path + or die "Can't create directory: $path: $!"; + open my $node, '>', "$path/node.def" + or die "Can't open $path/node.def: $!"; + select $node; + print <