/* globals */
static struct monitor_host ** hosts = NULL;
-static int isVerbose = 0;
+static bool verbose = false;
static int keepBanging = 0;
-static unsigned short ident;
static int send_delay = 1;
/*
if (now.tv_sec > (p->max_delay + p->ping_interval)) {
if ((p->hostup) || keepBanging) {
- if (isVerbose) printf("INFO: Host %s stopped responding. Executing DOWN command.\n", p->name);
+ if (verbose) printf("INFO: Host %s stopped responding. Executing DOWN command.\n", p->name);
p->hostup = false;
if (!fork()) {
system(p->downcmd);
icp->icmp_code = 0;
icp->icmp_cksum = 0;
icp->icmp_seq = p->socket;
- icp->icmp_id = ident;
+ icp->icmp_id = getpid() & 0xFFFF;
- if (isVerbose) printf("INFO: Sending ICMP packet to %s.\n", p->name);
+ if (verbose) printf("INFO: Sending ICMP packet to %s.\n", p->name);
gettimeofday((struct timeval *) &outpack[8], (struct timezone *) NULL);
return;
}
- if (icmp->icmp_type == ICMP_ECHOREPLY && icmp->icmp_id == ident && icmp->icmp_seq == p->socket) {
+ if (icmp->icmp_type == ICMP_ECHOREPLY && icmp->icmp_id == (getpid() & 0xFFFF) && icmp->icmp_seq == p->socket) {
p->recvdpackets++;
memcpy(&p->last_ping_received, &tv, sizeof(tv));
tvsub(&tv, (struct timeval *) &icmp->icmp_data[0]);
delay = tv.tv_sec * 1000 + (tv.tv_usec / 1000);
- if (isVerbose) printf("INFO: Got ICMP reply from %s in %d ms.\n", p->name, delay);
+ if (verbose) printf("INFO: Got ICMP reply from %s in %d ms.\n", p->name, delay);
if (!p->hostup) {
- if (isVerbose) printf("INFO: Host %s started responding. Executing UP command.\n", p->name);
+ if (verbose) printf("INFO: Host %s started responding. Executing UP command.\n", p->name);
p->hostup = true;
if (!fork()) {
system(p->upcmd);
while ((param = getopt(argc, argv, "rvf:")) != -1) {
switch(param) {
case 'v':
- isVerbose = 1;
+ verbose = true;
break;
case 'r':
keepBanging = 1;
init_hosts();
- ident = getpid() & 0xFFFF;
-
signal(SIGALRM, pinger);
alarm(send_delay);