[cisco-stats] Added option include_vlan/exclude_vlan to generate_cisco_port_configura...
authorMaximilian Wilhelm <max@rfc2324.org>
Sun, 6 Jan 2008 03:17:52 +0000 (04:17 +0100)
committerMaximilian Wilhelm <max@rfc2324.org>
Sun, 6 Jan 2008 03:17:52 +0000 (04:17 +0100)
  generate_cisco_port_configuration_overview does now accept two new options
   --include_vlan vlan1[,vlan2[...]]
   --exclude_vlan vlan1[,vlan2[...]]

  The former option --include is now called --include_interfaces
  to clearify things.

Signed-off-by: Maximilian Wilhelm <max@rfc2324.org>

cisco-stats/generate_cisco_port_configuration_overview

index 470aed3..fcc937b 100755 (executable)
@@ -25,7 +25,9 @@ my $opt = {};
 Getopt::Long::Configure ("bundling");
 GetOptions (
        "file|f=s"      => \$opt->{filename},
-       "include|i=s"   => \$opt->{include},
+       "include_interface|i=s" => \$opt->{include_interface},
+       "include_vlan=s"        => \$opt->{include_vlan},
+       "exclude_vlan=s"        => \$opt->{exclude_vlan},
        "ignore_shutdown_interfaces" => \$opt->{ignore_shutdown_interfaces},
        "help|h"        => \$opt->{help},
 );
@@ -36,9 +38,9 @@ GetOptions (
 my $device_name = undef;
 
 #
-# Hash with ports to be included
+# Hash with ports to be included only
 #  By default all ports shall be included, therefore no list -> undef
-my $include_ports = undef;
+my $include_interfaces = undef;
 
 #
 # Hash with interfaces
@@ -59,7 +61,9 @@ if (! defined $opt->{filename} || defined $opt->{help}) {
        print STDERR "Usage: $0\n";
        print STDERR "\t--file filename | -f\n";
        print STDERR "\t[--help | -h]\n";
-       print STDERR "\t[--include int1[,int2[...]] | -i]\n";
+       print STDERR "\t[--include_interface int1[,int2[...]] | -i]\n";
+       print STDERR "\t[--include_vlan vlan1[,vlan2[...]]\n";
+       print STDERR "\t[--exclude_vlan vlan1[,vlan2[...]]\n";
        print STDERR "\t[--ignore_shutdown_interfaces]\n";
        exit 1;
 }
@@ -74,18 +78,18 @@ open (RUNNING_CONFIG, "< $opt->{filename}")
 
 #
 # Limit output to listed interfaces?
-if (defined $opt->{include}) { # {{{
-       $include_ports = {};
+if (defined $opt->{include_interface}) { # {{{
+       $include_interfaces = {};
 
        # Just put all given ports into the hash
        # No input validation as garbage won't harm us here.
        # If there is an invalid string in the hash, it just won't match anything
-       foreach my $port (split (/,/, $opt->{include})) {
+       foreach my $port (split (/,/, $opt->{include_interface})) {
                # Expand short forms
                $port =~ s/^Fa([0-9]+\/)/FastEthernet$1/;
                $port =~ s/^Gi([0-9]+\/)/GigabitEthernet$1/;
 
-               $include_ports->{$port} = 42;
+               $include_interfaces->{$port} = 42;
        }
 } # }}}
 
@@ -109,8 +113,8 @@ while (my $line = <RUNNING_CONFIG>) { # Read device configuration {{{
        if ($line =~ /^interface (.+)$/) { # {{{
                my $port_name = $1;
 
-               # Honor include_ports list if set
-               if (defined $include_ports && ! defined $include_ports->{$port_name}) {
+               # Honor include_interfaces list if set
+               if (defined $include_interfaces && ! defined $include_interfaces->{$port_name}) {
                        next;
                }
 
@@ -293,6 +297,36 @@ if (! defined $device_name) {
        $device_name = "unknown device";
 }
 
+
+#
+# Check for and handle include_vlan / exclude_vlan options
+# {{{
+#
+if ($opt->{exclude_vlan}) {
+       foreach my $vlan (split (/,/, $opt->{exclude_vlan})) {
+               if (exists $vlans->{$vlan}) {
+                       delete $vlans->{$vlan};
+               }
+       }
+}
+
+# If only selected vlans should be included, remove all other from $vlans
+if ($opt->{include_vlan}) {
+       my $include_vlans = {};
+       foreach my $vlan (split (/,/, $opt->{include_vlan})) {
+               $include_vlans->{$vlan} = 42;
+       }
+
+       foreach my $vlan (keys %{$vlans}) {
+               if (! exists $include_vlans->{$vlan}) {
+                       delete $vlans->{$vlan};
+               }
+       }
+
+       undef $include_vlans;
+}
+# }}}
+
 #
 # Sort vlans ID numerically to be able to check them in the same order for every interface
 my @vlan_list = sort { $a <=> $b } keys %{$vlans};