--- arpwatch.c.orig 2004-01-22 22:18:20 UTC +++ arpwatch.c @@ -107,6 +107,8 @@ struct rtentry; char *prog; +char *Watcher = NULL; + int can_checkpoint; int swapped; int nobogons; @@ -170,7 +172,7 @@ main(int argc, char **argv) interface = NULL; rfilename = NULL; pd = NULL; - while ((op = getopt(argc, argv, "df:i:n:Nr:")) != EOF) + while ((op = getopt(argc, argv, "dzf:i:m:n:Nr:")) != EOF) switch (op) { case 'd': @@ -202,6 +204,16 @@ main(int argc, char **argv) rfilename = optarg; break; + case 'm': + Watcher = optarg; + break; + case 'v': + vrrpflag = 1; + break; + case 'z': + zeroflag = 1; + break; + default: usage(); } @@ -321,7 +333,6 @@ main(int argc, char **argv) (void)setsignal(SIGINT, die); (void)setsignal(SIGTERM, die); - (void)setsignal(SIGHUP, die); if (rfilename == NULL) { (void)setsignal(SIGQUIT, checkpoint); (void)setsignal(SIGALRM, checkpoint); @@ -391,6 +402,12 @@ process_ether(register u_char *u, regist return; } + /* Check for CARP-generated ARP replies and ignore them */ + if (vrrpflag == 1 && MEMCMP(sha, vrrp_prefix, 5) == 0) { + /* do nothing */ + return; + } + /* Double check ethernet addresses */ if (MEMCMP(sea, sha, 6) != 0) { dosyslog(LOG_INFO, "ethernet mismatch", sia, sea, sha); @@ -751,6 +768,6 @@ usage(void) (void)fprintf(stderr, "Version %s\n", version); (void)fprintf(stderr, "usage: %s [-dN] [-f datafile] [-i interface]" - " [-n net[/width]] [-r file]\n", prog); + " [-m email] [-n net[/width]] [-r file]\n", prog); exit(1); }