Code

Add support for packet size modification (-b)
authorMatthias Eble <psychotrahe@users.sourceforge.net>
Thu, 17 Jul 2008 07:06:33 +0000 (07:06 +0000)
committerMatthias Eble <psychotrahe@users.sourceforge.net>
Thu, 17 Jul 2008 07:06:33 +0000 (07:06 +0000)
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@2026 f882894a-f735-0410-b71e-b25c423dba1c

NEWS
plugins-root/check_icmp.c

diff --git a/NEWS b/NEWS
index 3b95babc7fe754911c00b170268832335b4b85a5..2e33951b66610bef3397ea4f3d5039dff2f430d7 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -8,6 +8,7 @@ This file documents the major additions and syntax changes between releases.
        check_dig now returns CRITICAL instead of WARNING when no answer section is found
        check_procs now captures stderr in external command and adds to plugin output
        check_snmp now only prints perfdata for non numeric values (#1867716)
+       check_icmp now supports packet size modification
 
 1.4.12 27th May 2008
        Added ./check_nt -v INSTANCES to count number of instances (Alessandro Ren)
index f3e5f0d3242414dda9779794df0d442aebdb5a1d..5fb9c364a56c08892927db3370f026126cb06ac0 100644 (file)
@@ -203,7 +203,9 @@ extern char **environ;
 static struct rta_host **table, *cursor, *list;
 static threshold crit = {80, 500000}, warn = {40, 200000};
 static int mode, protocols, sockets, debug = 0, timeout = 10;
-static unsigned short icmp_pkt_size, icmp_data_size = DEFAULT_PING_DATA_SIZE;
+static unsigned short icmp_data_size = DEFAULT_PING_DATA_SIZE;
+static unsigned short icmp_pkt_size = DEFAULT_PING_DATA_SIZE + ICMP_MINLEN;
+
 static unsigned int icmp_sent = 0, icmp_recv = 0, icmp_lost = 0;
 #define icmp_pkts_en_route (icmp_sent - (icmp_recv + icmp_lost))
 static unsigned short targets_down = 0, targets = 0, packets = 0;
@@ -453,12 +455,22 @@ main(int argc, char **argv)
        /* parse the arguments */
        for(i = 1; i < argc; i++) {
                while((arg = getopt(argc, argv, "vhVw:c:n:p:t:H:s:i:b:I:l:m:")) != EOF) {
+                       long size;
                        switch(arg) {
                        case 'v':
                                debug++;
                                break;
                        case 'b':
-                               /* silently ignored for now */
+                               size = strtol(optarg,NULL,0);
+                               if (size >= (sizeof(struct icmp) + sizeof(struct icmp_ping_data)) &&
+                                   size <= MAX_PING_DATA + ICMP_MINLEN) {
+                                       icmp_pkt_size = size;
+                                       icmp_data_size = icmp_pkt_size - ICMP_MINLEN;
+                               } else
+                                       usage_va("ICMP packet size must be between: %d and %d",
+                                                sizeof(struct icmp) + sizeof(struct icmp_ping_data),
+                                                MAX_PING_DATA + ICMP_MINLEN);
+
                                break;
                        case 'i':
                                pkt_interval = get_timevar(optarg);
@@ -587,13 +599,6 @@ main(int argc, char **argv)
                }
        }
 
-       icmp_pkt_size = icmp_data_size + ICMP_MINLEN;
-       if(debug > 2) printf("icmp_pkt_size = %u\n", icmp_pkt_size);
-       if(icmp_pkt_size < sizeof(struct icmp) + sizeof(struct icmp_ping_data)) {
-               icmp_pkt_size = sizeof(struct icmp) + sizeof(struct icmp_ping_data);
-       }
-       if(debug > 2) printf("icmp_pkt_size = %u\n", icmp_pkt_size);
-
        if(debug) {
                printf("crit = {%u, %u%%}, warn = {%u, %u%%}\n",
                           crit.rta, crit.pl, warn.rta, warn.pl);
@@ -1296,7 +1301,8 @@ print_help(void)
   printf ("    %s",_("timeout value (seconds, currently  "));
   printf ("%u)\n", timeout);
   printf (" %s\n", "-b");
-  printf ("    %s\n", _("icmp packet size (currenly ignored)"));
+  printf ("    %s", _("icmp packet size (bytes, currently "));
+  printf ("%u)\n", icmp_pkt_size);
   printf (" %s\n", "-v");
   printf ("    %s\n", _("verbose"));