summaryrefslogtreecommitdiffstats
path: root/plugins-scripts/check_ifstatus.pl
diff options
context:
space:
mode:
authorNick Peelman <nick@peelman.us>2013-05-13 09:30:09 -0400
committerHolger Weiss <holger@zedat.fu-berlin.de>2014-09-10 20:39:00 +0200
commit9a4771b09fb7d802a38abfeba0c8e0b52bab29af (patch)
tree34318830e1cf00b4e74e6dabe6d3e18fd9ce5ea4 /plugins-scripts/check_ifstatus.pl
parent57fb03cea59c266a0930c3a368cbed40bbc66169 (diff)
downloadmonitoring-plugins-9a4771b09fb7d802a38abfeba0c8e0b52bab29af.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.
Diffstat (limited to 'plugins-scripts/check_ifstatus.pl')
-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 709ad174..9aa25151 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);