summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xplugins-scripts/check_ifstatus.pl73
1 files changed, 45 insertions, 28 deletions
diff --git a/plugins-scripts/check_ifstatus.pl b/plugins-scripts/check_ifstatus.pl
index cb8b5d00..cc9cccfa 100755
--- a/plugins-scripts/check_ifstatus.pl
+++ b/plugins-scripts/check_ifstatus.pl
@@ -5,6 +5,8 @@
5# 5#
6# Copyright (C) 2000 Christoph Kron 6# Copyright (C) 2000 Christoph Kron
7# Modified 5/2002 to conform to updated Nagios Plugin Guidelines (S. Ghosh) 7# Modified 5/2002 to conform to updated Nagios Plugin Guidelines (S. Ghosh)
8# Added -x option (4/2003)
9# Added -u option (4/2003)
8# 10#
9# This program is free software; you can redistribute it and/or 11# This program is free software; you can redistribute it and/or
10# modify it under the terms of the GNU General Public License 12# modify it under the terms of the GNU General Public License
@@ -70,14 +72,17 @@ my %ifStatus;
70my $ifup =0 ; 72my $ifup =0 ;
71my $ifdown =0; 73my $ifdown =0;
72my $ifdormant = 0; 74my $ifdormant = 0;
73my $ifexclude =0 ; 75my $ifexclude = 0 ;
76my $ifunused = 0;
74my $ifmessage = ""; 77my $ifmessage = "";
75my $snmp_version = 1; 78my $snmp_version = 1;
76my $ifXTable; 79my $ifXTable;
77my $opt_h ; 80my $opt_h ;
78my $opt_V ; 81my $opt_V ;
82my $opt_u;
79my $opt_x ; 83my $opt_x ;
80my %excluded ; 84my %excluded ;
85my @unused_ports ;
81 86
82 87
83 88
@@ -101,7 +106,8 @@ $status = GetOptions(
101 "p=i" =>\$port, "port=i" => \$port, 106 "p=i" =>\$port, "port=i" => \$port,
102 "H=s" => \$hostname, "hostname=s" => \$hostname, 107 "H=s" => \$hostname, "hostname=s" => \$hostname,
103 "I" => \$ifXTable, "ifmib" => \$ifXTable, 108 "I" => \$ifXTable, "ifmib" => \$ifXTable,
104 "x:s" => \$opt_x, "exclude:s" => \$opt_x); 109 "x:s" => \$opt_x, "exclude:s" => \$opt_x,
110 "u=s" => \$opt_u, "unused_ports=s" => \$opt_u);
105 111
106if ($status == 0) 112if ($status == 0)
107{ 113{
@@ -122,11 +128,10 @@ if ($opt_h) {
122 128
123 129
124if (defined $opt_x) { 130if (defined $opt_x) {
125 my @x = split(",", $opt_x); 131 my @x = split(/,/, $opt_x);
126 my $x;
127 if ( @x) { 132 if ( @x) {
128 foreach $x (@x){ 133 foreach $key (@x){
129 $excluded{$x} = 1; 134 $excluded{$key} = 1;
130 } 135 }
131 }else{ 136 }else{
132 $excluded{23} = 1; # default PPP(23) if empty list - note (AIX seems to think PPP is 22 according to a post) 137 $excluded{23} = 1; # default PPP(23) if empty list - note (AIX seems to think PPP is 22 according to a post)
@@ -136,6 +141,13 @@ if (defined $opt_x) {
136 # { print "key = $x val = $excluded{$x}\n";} 141 # { print "key = $x val = $excluded{$x}\n";}
137} 142}
138 143
144if ($opt_u) {
145 @unused_ports = split(/,/,$opt_u);
146 foreach $key (@unused_ports) {
147 $ifStatus{$key}{'notInUse'}++ ;
148 }
149}
150
139if (! utils::is_hostname($hostname)){ 151if (! utils::is_hostname($hostname)){
140 usage(); 152 usage();
141 exit $ERRORS{"UNKNOWN"}; 153 exit $ERRORS{"UNKNOWN"};
@@ -210,53 +222,58 @@ $session->close;
210 222
211foreach $key (keys %ifStatus) { 223foreach $key (keys %ifStatus) {
212 224
213 # check only if interface is administratively up 225 # skip unused interfaces
226 if (!defined($ifStatus{$key}{'notInUse'})) {
227 # check only if interface is administratively up
214 if ($ifStatus{$key}{$snmpIfAdminStatus} == 1 ) { 228 if ($ifStatus{$key}{$snmpIfAdminStatus} == 1 ) {
215 229
216 # check only if interface type is not listed in %excluded 230 # check only if interface type is not listed in %excluded
217 231 if (!defined $excluded{$ifStatus{$key}{$snmpIfType}} ) {
218 if (!defined $excluded{$ifStatus{$key}{$snmpIfType}} ) { 232 if ($ifStatus{$key}{$snmpIfOperStatus} == 1 ) { $ifup++ ;}
219 if ($ifStatus{$key}{$snmpIfOperStatus} == 1 ) { $ifup++ ;} 233 if ($ifStatus{$key}{$snmpIfOperStatus} == 2 ) {
220 if ($ifStatus{$key}{$snmpIfOperStatus} == 2 ) { 234 $ifdown++ ;
221 $ifdown++ ; 235 if (defined $ifXTable) {
222 if (defined $ifXTable) { 236 $ifmessage .= sprintf("%s: down -> %s<BR>",
223 $ifmessage .= sprintf("%s: down -> %s<BR>",
224 $ifStatus{$key}{$snmpIfName}, 237 $ifStatus{$key}{$snmpIfName},
225 $ifStatus{$key}{$snmpIfAlias}); 238 $ifStatus{$key}{$snmpIfAlias});
226 }else{ 239 }else{
227 $ifmessage .= sprintf("%s: down <BR>", 240 $ifmessage .= sprintf("%s: down <BR>",
228 $ifStatus{$key}{$snmpIfDescr}); 241 $ifStatus{$key}{$snmpIfDescr});
229 } 242 }
243 }
244 if ($ifStatus{$key}{$snmpIfOperStatus} == 5 ) { $ifdormant++ ;}
245 }else{
246 $ifexclude++;
230 } 247 }
231 if ($ifStatus{$key}{$snmpIfOperStatus} == 5 ) { $ifdormant++ ;}
232 }else{
233 $ifexclude++;
234 }
235 248
249 }
250 }else{
251 $ifunused++;
236 } 252 }
237
238} 253}
239 254
240 if ($ifdown > 0) { 255 if ($ifdown > 0) {
241 $state = 'CRITICAL'; 256 $state = 'CRITICAL';
242 $answer = sprintf("host '%s', interfaces up: %d, down: %d, dormant: %d, excluded: %d<BR>", 257 $answer = sprintf("host '%s', interfaces up: %d, down: %d, dormant: %d, excluded: %d, unused: %d<BR>",
243 $hostname, 258 $hostname,
244 $ifup, 259 $ifup,
245 $ifdown, 260 $ifdown,
246 $ifdormant, 261 $ifdormant,
247 $ifexclude); 262 $ifexclude,
263 $ifunused);
248 $answer = $answer . $ifmessage . "\n"; 264 $answer = $answer . $ifmessage . "\n";
249 } 265 }
250 else { 266 else {
251 $state = 'OK'; 267 $state = 'OK';
252 $answer = sprintf("host '%s', interfaces up: %d, down: %d, dormant: %d, excluded: %d", 268 $answer = sprintf("host '%s', interfaces up: %d, down: %d, dormant: %d, excluded: %d, unused: %d",
253 $hostname, 269 $hostname,
254 $ifup, 270 $ifup,
255 $ifdown, 271 $ifdown,
256 $ifdormant, 272 $ifdormant,
257 $ifexclude); 273 $ifexclude,
274 $ifunused);
258 } 275 }
259my $perfdata = sprintf("up:%d,down:%d,dormant:%d,excluded:%d",$ifup,$ifdown,$ifdormant,$ifexclude); 276my $perfdata = sprintf("up:%d,down:%d,dormant:%d,excluded:%d,unused:%d",$ifup,$ifdown,$ifdormant,$ifexclude,$ifunused);
260print ("$state: $answer |$perfdata\n"); 277print ("$state: $answer |$perfdata\n");
261exit $ERRORS{$state}; 278exit $ERRORS{$state};
262 279