I'm still having trouble applying this patch. Could I ask you to resend it as an attachment?
Thanks. On Fri, Jan 13, 2006 at 10:35:52PM -0600, Mosemann, Russell muttered these words: > > There is a minor formatting problem in the first hunk from a bad cut and > paste. This should correct it. > > Russell Mosemann, Ph.D. > Associate Profesor of Computer Science > Concordia University, Nebraska > > > diff -Naur ucarp-1.1/README ucarp-1.1-3/README > --- ucarp-1.1/README 2004-09-02 17:07:42.000000000 -0500 > +++ ucarp-1.1-3/README 2006-01-13 20:21:02.000000000 -0600 > @@ -126,10 +126,23 @@ > > Please note that by default, and if everything's ok, a master will stay > a master as long as possible. If you want a "preferred" master to > immediately > -become a master even if the other host is: > +become a master even if another host is already the master, > - add the --preempt (or -P) switch to *all* hosts > - use a lower skew or a lower base for the "preferred" one. > > +When ucarp first runs, it starts as a backup and listens to the network > > +to determine if it should become the master. When it enters the backup > +state, it normally runs the downscript. That can be useful to remove > +old temporary files or clean up an interface that is in an unknown > +state. In some circumstances, however, it is undesirable to run the > +downscript if the service was not already up. In that case, use the > +--neutral (-n) switch for ucarp to not run the downscript when it > +enters the backup state the first time. All changes from the master > +state to the backup state after that will run the downscript. > + > +--shutdown (-z) will run the downscript at exit, unless ucarp is > +already in the backup state. > + > The "dead ratio" (--deadratio=...) knob basically changes how long a > backup server will wait for an unresponsive master before considering > it as dead, and becoming the new master. In the original protocol, the > ratio is 3. This is diff -Naur ucarp-1.1/src/carp.c > ucarp-1.1-3/src/carp.c > --- ucarp-1.1/src/carp.c 2004-08-28 11:30:02.000000000 -0500 > +++ ucarp-1.1-3/src/carp.c 2006-01-13 20:27:03.000000000 -0600 > @@ -59,7 +59,8 @@ > break; > case BACKUP: > logfile(LOG_WARNING, _("Switching to state: BACKUP")); > - (void) spawn_handler(dev_desc_fd, downscript); > + if ((sc->sc_state != INIT) || (neutral != 1)) > + (void) spawn_handler(dev_desc_fd, downscript); > gratuitous_arp(dev_desc_fd, 0); > break; > case MASTER: > @@ -313,17 +314,8 @@ > #endif > switch (sc->sc_state) { > case INIT: > - if (preempt != 0 && carp_suppress_preempt == 0) { > - carp_send_ad(sc); > - gratuitous_arp(dev_desc_fd, 1); > -#ifdef INET6 > - carp_send_na(sc); > -#endif /* INET6 */ > - carp_set_state(sc, MASTER); > - } else { > - carp_set_state(sc, BACKUP); > - carp_setrun(sc, 0); > - } > + carp_set_state(sc, BACKUP); > + carp_setrun(sc, 0); > break; > case BACKUP: > sc->sc_ad_tmo.tv_sec = 0; > @@ -607,7 +599,8 @@ > logfile(LOG_DEBUG, "sighandler_exit(): Calling [%s] and exiting", > downscript); > #endif > - (void) spawn_handler(dev_desc_fd, downscript); > + if (sc->sc_state != BACKUP) > + (void) spawn_handler(dev_desc_fd, downscript); > _exit(EXIT_SUCCESS); > } > > @@ -687,14 +680,18 @@ > pfds[0].fd = dev_desc_fd; > pfds[0].events = POLLIN | POLLERR | POLLHUP | POLLNVAL; > > - carp_setrun(&sc, 0); > - > if (shutdown_at_exit != 0) { > (void) signal(SIGINT, sighandler_exit); > (void) signal(SIGQUIT, sighandler_exit); > (void) signal(SIGTERM, sighandler_exit); > } > > + if (gettimeofday(&now, NULL) != 0) { > + logfile(LOG_WARNING, "initializing now to gettimeofday() > failed: %s", > + strerror(errno)); > + } > + carp_setrun(&sc, 0); > + > for (;;) { > nfds = poll(pfds, (nfds_t) 1, sc.sc_advbase * 1000); > if (nfds == -1 || > diff -Naur ucarp-1.1/src/globals.h ucarp-1.1-3/src/globals.h > --- ucarp-1.1/src/globals.h 2004-06-20 14:35:22.000000000 -0500 > +++ ucarp-1.1-3/src/globals.h 2006-01-13 19:05:29.000000000 -0600 > @@ -20,6 +20,7 @@ > GLOBAL0(char *upscript); > GLOBAL0(char *downscript); > GLOBAL0(signed char preempt); > +GLOBAL0(signed char neutral); > GLOBAL0(signed char shutdown_at_exit); > GLOBAL0(unsigned char hwaddr[6]); > GLOBAL0(signed char no_syslog); > diff -Naur ucarp-1.1/src/ucarp.c ucarp-1.1-3/src/ucarp.c > --- ucarp-1.1/src/ucarp.c 2004-08-28 11:04:05.000000000 -0500 > +++ ucarp-1.1-3/src/ucarp.c 2006-01-13 19:03:06.000000000 -0600 > @@ -28,6 +28,7 @@ > "--vhid=<id> (-v <id>): virtual IP identifier (1-255)\n" > "--pass=<pass> (-p <pass>): password\n" > "--preempt (-P): becomes a master as soon as possible\n" > + "--neutral (-n): do not run downscript at start if backup\n" > "--addr=<ip> (-a <ip>): virtual shared IP address\n" > "--help (-h): summary of command-line options\n" > "--advbase=<seconds> (-b <seconds>): advertisement > frequency\n" > @@ -127,6 +128,10 @@ > preempt = 1; > break; > } > + case 'n': { > + neutral = 1; > + break; > + } > case 'a': { > if (inet_pton(AF_INET, optarg, &vaddr) == 0) { > logfile(LOG_ERR, _("Invalid address: [%s]"), optarg); > diff -Naur ucarp-1.1/src/ucarp_p.h ucarp-1.1-3/src/ucarp_p.h > --- ucarp-1.1/src/ucarp_p.h 2004-08-28 11:02:51.000000000 -0500 > +++ ucarp-1.1-3/src/ucarp_p.h 2006-01-13 19:03:33.000000000 -0600 > @@ -1,7 +1,7 @@ > #ifndef __CARP_P_H__ > #define __CARP_P_H__ 1 > > -static const char *GETOPT_OPTIONS = "i:s:v:p:Pa:hb:k:u:d:r:zf:B"; > +static const char *GETOPT_OPTIONS = "i:s:v:p:Pna:hb:k:u:d:r:zf:B"; > > static struct option long_options[] = { > { "interface", 1, NULL, 'i' }, > @@ -9,6 +9,7 @@ > { "vhid", 1, NULL, 'v' }, > { "pass", 1, NULL, 'p' }, > { "preempt", 0, NULL, 'P' }, > + { "neutral", 0, NULL, 'n' }, > { "addr", 1, NULL, 'a' }, > { "help", 0, NULL, 'h' }, > { "advbase", 1, NULL, 'b' }, -- Eric Evans [EMAIL PROTECTED]
signature.asc
Description: Digital signature