summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Peelman <nick@peelman.us>2013-05-13 13:30:09 (GMT)
committerHolger Weiss <holger@zedat.fu-berlin.de>2014-09-10 18:39:00 (GMT)
commit9a4771b09fb7d802a38abfeba0c8e0b52bab29af (patch)
tree34318830e1cf00b4e74e6dabe6d3e18fd9ce5ea4
parent57fb03cea59c266a0930c3a368cbed40bbc66169 (diff)
downloadmonitoring-plugins-9a4771b.tar.gz
Add check_ifstatus option to ignore interfaces by name
Ignoring by index is not always an option, as the index can change on chassis switches as blade configurations change.
-rwxr-xr-xplugins-scripts/check_ifstatus.pl57
1 files changed, 38 insertions, 19 deletions
diff --git a/plugins-scripts/check_ifstatus.pl b/plugins-scripts/check_ifstatus.pl
index 709ad17..9aa2515 100755
--- a/plugins-scripts/check_ifstatus.pl
+++ b/plugins-scripts/check_ifstatus.pl
@@ -9,6 +9,7 @@
9# Added -u option (4/2003) 9# Added -u option (4/2003)
10# Added -M option (10/2003) 10# Added -M option (10/2003)
11# Added SNMPv3 support (10/2003) 11# Added SNMPv3 support (10/2003)
12# Added -n option (07/2014)
12# 13#
13# This program is free software; you can redistribute it and/or 14# This program is free software; you can redistribute it and/or
14# modify it under the terms of the GNU General Public License 15# modify it under the terms of the GNU General Public License
@@ -95,8 +96,10 @@ my $ifXTable;
95my $opt_h ; 96my $opt_h ;
96my $opt_V ; 97my $opt_V ;
97my $opt_u; 98my $opt_u;
99my $opt_n;
98my $opt_x ; 100my $opt_x ;
99my %excluded ; 101my %excluded ;
102my %unused_names ;
100my @unused_ports ; 103my @unused_ports ;
101my %session_opts; 104my %session_opts;
102 105
@@ -171,27 +174,30 @@ alarm(0);
171foreach $key (keys %ifStatus) { 174foreach $key (keys %ifStatus) {
172 175
173 # skip unused interfaces 176 # skip unused interfaces
174 if (!defined($ifStatus{$key}{'notInUse'})) { 177 my $ifName = $ifStatus{$key}{$snmpIfDescr};
178
179 if (!defined($ifStatus{$key}{'notInUse'}) || !grep(/^${ifName}/, @unused_ports )) {
175 # check only if interface is administratively up 180 # check only if interface is administratively up
176 if ($ifStatus{$key}{$snmpIfAdminStatus} == 1 ) { 181 if ($ifStatus{$key}{$snmpIfAdminStatus} == 1 ) {
177 182 #check only if interface is not excluded
178 # check only if interface type is not listed in %excluded 183 if (!defined $unused_names{$ifStatus{$key}{$snmpIfDescr}} ) {
179 if (!defined $excluded{$ifStatus{$key}{$snmpIfType}} ) { 184 # check only if interface type is not listed in %excluded
180 if ($ifStatus{$key}{$snmpIfOperStatus} == 1 ) { $ifup++ ;} 185 if (!defined $excluded{$ifStatus{$key}{$snmpIfType}} ) {
181 if ($ifStatus{$key}{$snmpIfOperStatus} == 2 ) { 186 if ($ifStatus{$key}{$snmpIfOperStatus} == 1 ) { $ifup++ ; }
182 $ifdown++ ; 187 if ($ifStatus{$key}{$snmpIfOperStatus} == 2 ) {
183 if (defined $ifXTable) { 188 $ifdown++ ;
184 $ifmessage .= sprintf("%s: down -> %s<BR>", 189 if (defined $ifXTable) {
185 $ifStatus{$key}{$snmpIfName}, 190 $ifmessage .= sprintf("%s: down -> %s<BR>\n", $ifStatus{$key}{$snmpIfName}, $ifStatus{$key}{$snmpIfAlias});
186 $ifStatus{$key}{$snmpIfAlias}); 191 }else{
187 }else{ 192 $ifmessage .= sprintf("%s: down <BR>\n",$ifStatus{$key}{$snmpIfDescr});
188 $ifmessage .= sprintf("%s: down <BR>", 193 }
189 $ifStatus{$key}{$snmpIfDescr}); 194 }
190 } 195 if ($ifStatus{$key}{$snmpIfOperStatus} == 5 ) { $ifdormant++ ;}
196 } else {
197 $ifexclude++;
191 } 198 }
192 if ($ifStatus{$key}{$snmpIfOperStatus} == 5 ) { $ifdormant++ ;} 199 } else {
193 }else{ 200 $ifunused++;
194 $ifexclude++;
195 } 201 }
196 202
197 } 203 }
@@ -259,6 +265,8 @@ sub print_help() {
259 printf " the descriptive name. Do not use if you don't know what this is. \n"; 265 printf " the descriptive name. Do not use if you don't know what this is. \n";
260 printf " -x (--exclude) A comma separated list of ifType values that should be excluded \n"; 266 printf " -x (--exclude) A comma separated list of ifType values that should be excluded \n";
261 printf " from the report (default for an empty list is PPP(23).\n"; 267 printf " from the report (default for an empty list is PPP(23).\n";
268 printf " -n (--unused_ports_by_name) A comma separated list of ifDescr values that should be excluded \n";
269 printf " from the report (default is an empty exclusion list).\n";
262 printf " -u (--unused_ports) A comma separated list of ifIndex values that should be excluded \n"; 270 printf " -u (--unused_ports) A comma separated list of ifIndex values that should be excluded \n";
263 printf " from the report (default is an empty exclusion list).\n"; 271 printf " from the report (default is an empty exclusion list).\n";
264 printf " See the IANAifType-MIB for a list of interface types.\n"; 272 printf " See the IANAifType-MIB for a list of interface types.\n";
@@ -299,6 +307,7 @@ sub process_arguments() {
299 "I" => \$ifXTable, "ifmib" => \$ifXTable, 307 "I" => \$ifXTable, "ifmib" => \$ifXTable,
300 "x:s" => \$opt_x, "exclude:s" => \$opt_x, 308 "x:s" => \$opt_x, "exclude:s" => \$opt_x,
301 "u=s" => \$opt_u, "unused_ports=s" => \$opt_u, 309 "u=s" => \$opt_u, "unused_ports=s" => \$opt_u,
310 "n=s" => \$opt_n, "unused_ports_by_name=s" => \$opt_n,
302 "M=i" => \$maxmsgsize, "maxmsgsize=i" => \$maxmsgsize, 311 "M=i" => \$maxmsgsize, "maxmsgsize=i" => \$maxmsgsize,
303 "t=i" => \$timeout, "timeout=i" => \$timeout, 312 "t=i" => \$timeout, "timeout=i" => \$timeout,
304 ); 313 );
@@ -406,6 +415,16 @@ sub process_arguments() {
406 } 415 }
407 } 416 }
408 417
418 # Excluded interface descriptors
419 if (defined $opt_n) {
420 my @unused = split(/,/,$opt_n);
421 if ( @unused ) {
422 foreach $key (@unused) {
423 $unused_names{$key} = 1;
424 }
425 }
426 }
427
409 # Excluded interface ports (ifIndex) - management reasons 428 # Excluded interface ports (ifIndex) - management reasons
410 if ($opt_u) { 429 if ($opt_u) {
411 @unused_ports = split(/,/,$opt_u); 430 @unused_ports = split(/,/,$opt_u);