aboutsummaryrefslogtreecommitdiff
path: root/plugins/check_icmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/check_icmp.c')
-rw-r--r--plugins/check_icmp.c166
1 files changed, 103 insertions, 63 deletions
diff --git a/plugins/check_icmp.c b/plugins/check_icmp.c
index 361e924e..cbd68642 100644
--- a/plugins/check_icmp.c
+++ b/plugins/check_icmp.c
@@ -21,6 +21,15 @@
* The fping website can be found at http://www.fping.com
*/
+const char *progname = "check_icmp";
+const char *revision = "$Revision$";
+const char *copyright = "2004";
+const char *email = "nagiosplug-devel@lists.sourceforge.net";
+
+#include "common.h"
+#include "netutils.h"
+#include "utils.h"
+
#include <stdio.h>
#include <errno.h>
#include <time.h>
@@ -66,8 +75,8 @@ extern char *optarg;
extern int optind, opterr;
/*** Constants ***/
-#define EMAIL "ae@op5.se"
-#define VERSION "0.8.1"
+//#define EMAIL "ae@op5.se"
+//#define VERSION "0.8.1"
#ifndef INADDR_NONE
# define INADDR_NONE 0xffffffU
@@ -219,9 +228,9 @@ int num_pingsent = 0; /* total pings sent */
int num_pingreceived = 0; /* total pings received */
int num_othericmprcvd = 0; /* total non-echo-reply ICMP received */
-struct timeval current_time; /* current time (pseudo) */
-struct timeval start_time;
-struct timeval end_time;
+struct timeval current_time; /* current time (pseudo) */
+struct timeval my_start_time; /* conflict with utils.c 33, but not found ?? */
+struct timeval my_end_time; /* conflict with utils.c 33, but not found ?? */
struct timeval last_send_time; /* time last ping was sent */
struct timezone tz;
@@ -245,23 +254,29 @@ int recvfrom_wto(int, char *, int, struct sockaddr *, int);
void remove_job(HOST_ENTRY *);
void send_ping(int, HOST_ENTRY *);
long timeval_diff(struct timeval *, struct timeval *);
-void usage(void);
+//void usage(void);
int wait_for_reply(int);
void finish(void);
int handle_random_icmp(struct icmp *, struct sockaddr_in *);
char *sprint_tm(int);
int get_threshold(char *, threshold *);
+/* common functions */
+void print_help (void);
+void print_usage (void);
+
/*** the various exit-states */
-enum {
+/*enum {
STATE_OK = 0,
STATE_WARNING,
STATE_CRITICAL,
STATE_UNKNOWN,
STATE_DEPENDANT,
STATE_OOB
-};
+};*/
+
/* the strings that correspond to them */
+/*
char *status_string[STATE_OOB] = {
"OK",
"WARNING",
@@ -269,6 +284,7 @@ char *status_string[STATE_OOB] = {
"UNKNOWN",
"DEPENDANT"
};
+*/
int status = STATE_OK;
int fin_stat = STATE_OK;
@@ -288,6 +304,10 @@ int main(int argc, char **argv)
if(strchr(argv[0], '/')) prog = strrchr(argv[0], '/') + 1;
else prog = argv[0];
+ setlocale (LC_ALL, "");
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+
/* check if we are root */
if(geteuid()) {
printf("Root access needed (for raw sockets)\n");
@@ -309,7 +329,7 @@ int main(int argc, char **argv)
seteuid(uid);
}
- if(argc < 2) usage();
+ if(argc < 2) print_usage();
ident = getpid() & 0xFFFF;
@@ -356,35 +376,35 @@ int main(int argc, char **argv)
case 'w':
if(get_threshold(optarg, &warn)) {
printf("Illegal threshold pair specified for -%c", c);
- usage();
+ print_usage();
}
break;
case 'c':
if(get_threshold(optarg, &crit)) {
printf("Illegal threshold pair specified for -%c", c);
- usage();
+ print_usage();
}
break;
case 't':
if(!(timeout = (u_int) strtoul(optarg, NULL, 0) * 100)) {
printf("option -%c requires integer argument\n", c);
- usage();
+ print_usage();
}
break;
case 'r':
if(!(retry = (u_int) strtoul(optarg, NULL, 0))) {
printf("option -%c requires integer argument\n", c);
- usage();
+ print_usage();
}
break;
case 'i':
if(!(interval = (u_int) strtoul(optarg, NULL, 0) * 100)) {
printf("option -%c requires positive non-zero integer argument\n", c);
- usage();
+ print_usage();
}
break;
@@ -392,19 +412,19 @@ int main(int argc, char **argv)
case 'n':
if(!(count = (u_int) strtoul(optarg, NULL, 0))) {
printf("option -%c requires positive non-zero integer argument\n", c);
- usage();
+ print_usage();
}
break;
case 'b':
if(!(ping_data_size = (u_int) strtoul(optarg, NULL, 0))) {
printf("option -%c requires integer argument\n", c);
- usage();
+ print_usage();
}
break;
case 'h':
- usage();
+ print_usage();
break;
case 'e':
@@ -437,7 +457,7 @@ int main(int argc, char **argv)
case 'v':
printf("%s: Version %s $Date$\n", prog, VERSION);
- printf("%s: comments to %s\n", prog, EMAIL);
+ printf("%s: comments to %s\n", prog, email);
exit(STATE_OK);
case 'g':
@@ -448,7 +468,7 @@ int main(int argc, char **argv)
default:
printf("option flag -%c specified, but not recognized\n", c);
- usage();
+ print_usage();
break;
}
}
@@ -479,27 +499,27 @@ int main(int argc, char **argv)
prog, MIN_INTERVAL, MAX_RETRY);
printf("Current settings; i = %d, r = %d\n",
interval / 100, retry);
- usage();
+ print_usage();
}
if((ping_data_size > MAX_PING_DATA) || (ping_data_size < MIN_PING_DATA)) {
printf("%s: data size %u not valid, must be between %u and %u\n",
prog, ping_data_size, MIN_PING_DATA, MAX_PING_DATA);
- usage();
+ print_usage();
}
if((backoff > MAX_BACKOFF_FACTOR) || (backoff < MIN_BACKOFF_FACTOR)) {
printf("%s: backoff factor %.1f not valid, must be between %.1f and %.1f\n",
prog, backoff, MIN_BACKOFF_FACTOR, MAX_BACKOFF_FACTOR);
- usage();
+ print_usage();
}
if(count > MAX_COUNT) {
printf("%s: count %u not valid, must be less than %u\n",
prog, count, MAX_COUNT);
- usage();
+ print_usage();
}
if(count_flag) {
@@ -517,7 +537,7 @@ int main(int argc, char **argv)
/* generate requires command line parameters beyond the switches */
if(generate_flag && !*argv) {
printf("generate flag requires command line parameters beyond switches\n");
- usage();
+ print_usage();
}
if(*argv && !generate_flag) {
@@ -546,7 +566,7 @@ int main(int argc, char **argv)
if(!num_hosts) {
printf("No hosts to work with!\n\n");
- usage();
+ print_usage();
}
/* allocate array to hold outstanding ping requests */
@@ -566,8 +586,8 @@ int main(int argc, char **argv)
signal(SIGINT, (void *)finish);
- gettimeofday(&start_time, &tz);
- current_time = start_time;
+ gettimeofday(&my_start_time, &tz);
+ current_time = my_start_time;
last_send_time.tv_sec = current_time.tv_sec - 10000;
@@ -666,7 +686,7 @@ void finish()
int i;
HOST_ENTRY *h;
- gettimeofday(&end_time, &tz);
+ gettimeofday(&my_end_time, &tz);
/* tot up unreachables */
for(i=0; i<num_hosts; i++) {
@@ -712,7 +732,7 @@ void finish()
if(num_hosts == 1 || status != STATE_OK) {
printf("%s - %s: rta %s ms, lost %d%%",
- status_string[status], h->host,
+ state_text(status), h->host,
sprint_tm(h->total_time / h->num_recv),
h->num_sent > 0 ? ((h->num_sent - h->num_recv) * 100) / h->num_sent : 0
);
@@ -735,7 +755,7 @@ void finish()
if(num_noaddress) {
printf("No hostaddress specified.\n");
- usage();
+ print_usage();
}
else if(num_alive != num_hosts) {
/* for future multi-check support */
@@ -1340,37 +1360,57 @@ int get_threshold(char *str, threshold *th)
return 0;
}
-/* make a blahblah */
-void usage(void)
+void
+print_help (void)
{
- printf("\nUsage: %s [options] [targets]\n", prog);
- printf(" -H host target host\n");
- printf(" -b n ping packet size in bytes (default %d)\n", ping_data_size);
- printf(" -n|p n number of pings to send to each target (default %d)\n", count);
- printf(" -r n number of retries (default %d)\n", retry);
- printf(" -t n timeout value (in msec) (default %d)\n", timeout / 100);
- printf(" -i n packet interval (in msec) (default %d)\n", DEFAULT_INTERVAL);
-/* XXX - possibly on todo-list
- printf(" -m ping multiple interfaces on target host\n");
- printf(" -a show targets that are alive\n");
- printf(" -d show dead targets\n");
-*/ printf(" -v show version\n");
- printf(" -D increase debug output level\n");
- printf(" -w warning threshold pair, given as RTA[ums],PL[%%]\n");
- printf(" -c critical threshold pair, given as RTA[ums],PL[%%]\n");
- printf("\n");
- printf("Note:\n");
- printf("* This program requires root privileges to run properly.\n");
- printf(" If it is run as setuid root it will halt with an error if;\n");
- printf(" interval < 25 || retries > 5\n\n");
- printf("* Threshold pairs are given as such;\n");
- printf(" 100,40%%\n");
- printf(" to set a threshold value pair of 100 milliseconds and 40%% packetloss\n");
- printf(" The '%%' sign is optional, and if rta value is suffixed by;\n");
- printf(" s, rta time is set in seconds\n");
- printf(" m, rta time will be set in milliseconds (this is default)\n");
- printf(" u, rta time will be set in microseconds\n");
- printf(" Decimal points are silently ignored for sideways compatibility.\n");
- printf("\n");
- exit(3);
-} /* usage() */
+ print_revision (progname, revision);
+
+ printf ("Copyright (c) 2004 Andreas Ericsson <ae@op5.se>\n");
+ printf (COPYRIGHT, copyright, email);
+
+ printf (_("This plugin will check hosts sending icmp pings\n\n"));
+
+ print_usage ();
+
+ printf (_(UT_HELP_VRSN));
+
+ printf (_("\
+ -H, \n\
+ Host name argument for servers\n\
+ -b \n\
+ ping packet size in bytes (default %d)\n\
+ -n \n\
+ number of pings to send to each target (default %d)\n\
+ -r \n\
+ number of retries (default %d)\n\
+ -t \n\
+ timeout value (in msec) (default %d)\n\
+ -i \n\
+ packet interval (in msec) (default %d)\n\
+ -w \n\
+ warning threshold pair, given as RTA[ums],PL[%%]\n\
+ -c \n\
+ critical threshold pair, given as RTA[ums],PL[%%]\n\
+ -D \n\
+ increase debug output level\n\n"),ping_data_size,count,retry,(timeout / 100),DEFAULT_INTERVAL);
+
+ printf (_(UT_WARN_CRIT));
+
+ printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT);
+
+ printf (_(UT_VERBOSE));
+
+// printf (_("This plugin will check hosts sending icmp pings\n"));
+
+ printf (_(UT_SUPPORT));
+}
+
+void
+print_usage (void)
+{
+ printf ("\
+Usage: %s -H <vhost> | [-b <ping packet size in bytes>] [-n <number of pings>]\n\
+ [-r <number of retries>] [-t <timeout>] [-i packet interval]\n\
+ [-w <warning threshold>] [-c <critical threshold>]\n\
+ [-D <debug>] \n", progname);
+}