summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: b336798)
raw | patch | inline | side by side (parent: b336798)
author | Matthias Eble <psychotrahe@users.sourceforge.net> | |
Thu, 17 Jul 2008 07:06:33 +0000 (07:06 +0000) | ||
committer | Matthias 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 | patch | blob | history | |
plugins-root/check_icmp.c | patch | blob | history |
index 3b95babc7fe754911c00b170268832335b4b85a5..2e33951b66610bef3397ea4f3d5039dff2f430d7 100644 (file)
--- a/NEWS
+++ b/NEWS
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)
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;
/* 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);
}
}
- 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);
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"));