summaryrefslogtreecommitdiffstats
path: root/plugins-root/check_icmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins-root/check_icmp.c')
-rw-r--r--plugins-root/check_icmp.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/plugins-root/check_icmp.c b/plugins-root/check_icmp.c
index f3e5f0d3..5fb9c364 100644
--- a/plugins-root/check_icmp.c
+++ b/plugins-root/check_icmp.c
@@ -203,7 +203,9 @@ extern char **environ;
203static struct rta_host **table, *cursor, *list; 203static struct rta_host **table, *cursor, *list;
204static threshold crit = {80, 500000}, warn = {40, 200000}; 204static threshold crit = {80, 500000}, warn = {40, 200000};
205static int mode, protocols, sockets, debug = 0, timeout = 10; 205static int mode, protocols, sockets, debug = 0, timeout = 10;
206static unsigned short icmp_pkt_size, icmp_data_size = DEFAULT_PING_DATA_SIZE; 206static unsigned short icmp_data_size = DEFAULT_PING_DATA_SIZE;
207static unsigned short icmp_pkt_size = DEFAULT_PING_DATA_SIZE + ICMP_MINLEN;
208
207static unsigned int icmp_sent = 0, icmp_recv = 0, icmp_lost = 0; 209static unsigned int icmp_sent = 0, icmp_recv = 0, icmp_lost = 0;
208#define icmp_pkts_en_route (icmp_sent - (icmp_recv + icmp_lost)) 210#define icmp_pkts_en_route (icmp_sent - (icmp_recv + icmp_lost))
209static unsigned short targets_down = 0, targets = 0, packets = 0; 211static unsigned short targets_down = 0, targets = 0, packets = 0;
@@ -453,12 +455,22 @@ main(int argc, char **argv)
453 /* parse the arguments */ 455 /* parse the arguments */
454 for(i = 1; i < argc; i++) { 456 for(i = 1; i < argc; i++) {
455 while((arg = getopt(argc, argv, "vhVw:c:n:p:t:H:s:i:b:I:l:m:")) != EOF) { 457 while((arg = getopt(argc, argv, "vhVw:c:n:p:t:H:s:i:b:I:l:m:")) != EOF) {
458 long size;
456 switch(arg) { 459 switch(arg) {
457 case 'v': 460 case 'v':
458 debug++; 461 debug++;
459 break; 462 break;
460 case 'b': 463 case 'b':
461 /* silently ignored for now */ 464 size = strtol(optarg,NULL,0);
465 if (size >= (sizeof(struct icmp) + sizeof(struct icmp_ping_data)) &&
466 size <= MAX_PING_DATA + ICMP_MINLEN) {
467 icmp_pkt_size = size;
468 icmp_data_size = icmp_pkt_size - ICMP_MINLEN;
469 } else
470 usage_va("ICMP packet size must be between: %d and %d",
471 sizeof(struct icmp) + sizeof(struct icmp_ping_data),
472 MAX_PING_DATA + ICMP_MINLEN);
473
462 break; 474 break;
463 case 'i': 475 case 'i':
464 pkt_interval = get_timevar(optarg); 476 pkt_interval = get_timevar(optarg);
@@ -587,13 +599,6 @@ main(int argc, char **argv)
587 } 599 }
588 } 600 }
589 601
590 icmp_pkt_size = icmp_data_size + ICMP_MINLEN;
591 if(debug > 2) printf("icmp_pkt_size = %u\n", icmp_pkt_size);
592 if(icmp_pkt_size < sizeof(struct icmp) + sizeof(struct icmp_ping_data)) {
593 icmp_pkt_size = sizeof(struct icmp) + sizeof(struct icmp_ping_data);
594 }
595 if(debug > 2) printf("icmp_pkt_size = %u\n", icmp_pkt_size);
596
597 if(debug) { 602 if(debug) {
598 printf("crit = {%u, %u%%}, warn = {%u, %u%%}\n", 603 printf("crit = {%u, %u%%}, warn = {%u, %u%%}\n",
599 crit.rta, crit.pl, warn.rta, warn.pl); 604 crit.rta, crit.pl, warn.rta, warn.pl);
@@ -1296,7 +1301,8 @@ print_help(void)
1296 printf (" %s",_("timeout value (seconds, currently ")); 1301 printf (" %s",_("timeout value (seconds, currently "));
1297 printf ("%u)\n", timeout); 1302 printf ("%u)\n", timeout);
1298 printf (" %s\n", "-b"); 1303 printf (" %s\n", "-b");
1299 printf (" %s\n", _("icmp packet size (currenly ignored)")); 1304 printf (" %s", _("icmp packet size (bytes, currently "));
1305 printf ("%u)\n", icmp_pkt_size);
1300 printf (" %s\n", "-v"); 1306 printf (" %s\n", "-v");
1301 printf (" %s\n", _("verbose")); 1307 printf (" %s\n", _("verbose"));
1302 1308