[Nagiosplug-devel] [PATCH] check_fping and network unreachable
    Roel van Meer 
    roel.vanmeer at bokxing.nl
       
    Fri Mar 22 10:58:26 CET 2013
    
    
  
Hi list,
I ran into a problem where check_fping falsely reports nodes to be OK. This  
happened when no packets could be transmitted due to a prohibiting route.  
This patch fixes that by checking if the number of transmitted packets is  
greater than zero.
Best regards,
Roel
-------------- next part --------------
If a host cannot be contacted due to a prohibiting route, check_fping falsely
reports OK. This patch fixes that by only reporting OK if packet loss is 0 if
the number of transmitted packets is > 0. If the number of transmitted packets
is 0 report CRITICAL and set loss to 100%.
root at polar:~# ip route show | grep 10
prohibit 10.0.0.0/8
root at polar:~# ip route get 10.17.5.1
RTNETLINK answers: Network is unreachable
root at polar:~# ping 10.17.5.1
connect: Network is unreachable
root at polar:~# fping 10.17.5.1
10.17.5.1 error while sending ping: Network is unreachable
10.17.5.1 is unreachable
root at polar:~# fping -b 56 -c 3 10.17.5.1
10.17.5.1 : xmt/rcv/%loss = 0/0/0%
root at polar:~# check_fping 10.17.5.1
FPING OK - 10.17.5.1 (loss=0% )|loss=0%;;;0;100
root at polar:~# fping -v       
fping: Version 2.4b2_to $Date: 2013/03/22 09:57:13 $
fping: comments to noc at zerohype.com
diff -ruN nagios-plugins-1.4.15.a/plugins/check_fping.c nagios-plugins-1.4.15.b/plugins/check_fping.c
--- nagios-plugins-1.4.15.a/plugins/check_fping.c	2010-07-27 22:47:16.000000000 +0200
+++ nagios-plugins-1.4.15.b/plugins/check_fping.c	2013-03-22 10:34:03.469606400 +0100
@@ -146,7 +146,9 @@
 {
   char *rtastr = NULL;
   char *losstr = NULL;
+  char *xmtstr = NULL;
   double loss;
+  double xmt;
   double rta;
   int status = STATE_UNKNOWN;
 
@@ -198,14 +200,20 @@
     losstr = strstr (buf, "=");
     losstr = 1 + strstr (losstr, "/");
     losstr = 1 + strstr (losstr, "/");
+    xmtstr = strstr (buf, "=");
+    xmtstr = 1 + strstr (xmtstr, " ");
     loss = strtod (losstr, NULL);
+    xmt = strtod (xmtstr, NULL);
     if (atoi(losstr) == 100)
       status = STATE_CRITICAL;
     else if (cpl_p == TRUE && loss > cpl)
       status = STATE_CRITICAL;
     else if (wpl_p == TRUE && loss > wpl)
       status = STATE_WARNING;
-    else
+    else if (atoi(losstr) == 0 && atoi(xmtstr) == 0) {
+      status = STATE_CRITICAL;
+      loss = 100;
+    } else
       status = STATE_OK;
     /* loss=%.0f%%;%d;%d;0;100 */
     die (status, _("FPING %s - %s (loss=%.0f%% )|%s\n"),
    
    
More information about the Devel
mailing list