Date: Sat, 01 Oct 2011 11:04:07 +0200 From: johan Hendriks <joh.hendriks@gmail.com> To: Damien Fleuriot <ml@my.gd>, freebsd-stable@freebsd.org Subject: Re: CARP interfaces and mastership issue Message-ID: <4E86D787.9050207@gmail.com> In-Reply-To: <4E848592.5050300@my.gd> References: <4E71C059.5060404@hi-media.com> <4E84627B.2050609@my.gd> <CAE63ME71mXfHeV7hxvtkv8q-m0rVQ8-z7aNfF61Cb0poVJCpRQ@mail.gmail.com> <4E848592.5050300@my.gd>
next in thread | previous in thread | raw e-mail | index | archive | help
Op 29-09-11 16:49, Damien Fleuriot schreef: >> >> >> Quick follow-up again. >> >> This is the code for sys/netinet/ip_carp.c on FreeBSD 8.2, OpenBSD >> 3.8, OpenBSD 3.9 in function carp_setrun(struct carp_softc *sc, >> sa_family_t af) >> >> >> >> FREEBSD 8.2-PRERELEASE with init + preempt => auto MASTER bug >> Function starts at line 1371. >> --- >> switch (sc->sc_state) { >> case INIT: >> if (carp_opts[CARPCTL_PREEMPT]&& !carp_suppress_preempt) { >> carp_send_ad_locked(sc); >> carp_send_arp(sc); >> #ifdef INET6 >> carp_send_na(sc); >> #endif /* INET6 */ >> CARP_LOG("%s: INIT -> MASTER (preempting)\n", >> SC2IFP(sc)->if_xname); >> carp_set_state(sc, MASTER); >> carp_setroute(sc, RTM_ADD); >> } else { >> CARP_LOG("%s: INIT -> BACKUP\n", SC2IFP(sc)->if_xname); >> carp_set_state(sc, BACKUP); >> carp_setroute(sc, RTM_DELETE); >> carp_setrun(sc, 0); >> } >> break; >> --- >> >> OPENBSD 3.8 with init + preempt => auto MASTER bug >> Function starts at line 1293. >> --- >> case INIT: >> if (carp_opts[CARPCTL_PREEMPT]&& !carp_suppress_preempt) { >> carp_set_state(sc, MASTER); >> carp_setroute(sc, RTM_ADD); >> carp_send_ad(sc); >> carp_send_arp(sc); >> #ifdef INET6 >> carp_send_na(sc); >> #endif /* INET6 */ >> } else { >> carp_set_state(sc, BACKUP); >> carp_setroute(sc, RTM_DELETE); >> carp_setrun(sc, 0); >> } >> break; >> --- >> >> >> >> OPENBSD 3.9 with bug fixed >> Function starts at line 1348. >> --- >> switch (sc->sc_state) { >> case INIT: >> carp_set_state(sc, BACKUP); >> carp_setroute(sc, RTM_DELETE); >> carp_setrun(sc, 0); >> break; >> --- >> >> >> It looks like the root cause is there. >> >> I'll rebuild and test, keep you updated. > > > > Find below my test results with the OpenBSD39 implementation which > forces an INIT -> BACKUP transition regardless of preempt. > > > > > > > # sysctl net.inet.carp.preempt > net.inet.carp.preempt: 1 > > # sysctl net.inet.carp.suppress_preempt > net.inet.carp.suppress_preempt: 0 > > # ifconfig carp17 > carp17: flags=8<LOOPBACK> metric 0 mtu 1500 > inet 46.182.[snip] netmask 0xffffffff > inet 46.182.[snip] netmask 0xffffffff > inet 46.182.[snip] netmask 0xffffffff > inet 46.182.[snip] netmask 0xffffffff > inet 46.182.[snip] netmask 0xffffffff > carp: INIT vhid 117 advbase 1 advskew 200 > > # ifconfig carp17 up; ./check_carp17_status.sh > count: 0 carp: BACKUP vhid 117 advbase 1 advskew 200 > count: 1 carp: BACKUP vhid 117 advbase 1 advskew 200 > count: 2 carp: BACKUP vhid 117 advbase 1 advskew 200 > count: 3 carp: BACKUP vhid 117 advbase 1 advskew 200 > count: 4 carp: BACKUP vhid 117 advbase 1 advskew 200 > count: 5 carp: BACKUP vhid 117 advbase 1 advskew 200 > count: 6 carp: BACKUP vhid 117 advbase 1 advskew 200 > count: 7 carp: BACKUP vhid 117 advbase 1 advskew 200 > count: 8 carp: BACKUP vhid 117 advbase 1 advskew 200 > count: 9 carp: BACKUP vhid 117 advbase 1 advskew 200 > count: 10 carp: BACKUP vhid 117 advbase 1 advskew 200 > > # dmesg > carp17: INIT -> BACKUP > carp17: link state changed to DOWN > > > > Looks like it works. > > I'm afraid I cannot test actual preemption by shutting down a physical > interface on the MASTER, because they're actually used in production and > I've got users logged in to their VPN on pf1. > > I see no reason this should break anything however, it only forces the > CARP interface to assume a BACKUP state right after INIT, as it normally > should, regardless of preemption. > > I'm filling a PR + patch. > _______________________________________________ > freebsd-stable@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-stable > To unsubscribe, send any mail to "freebsd-stable-unsubscribe@freebsd.org" Do you have the PR number for me and the patch, i have the same problem and like it to be fixed. regards Johan Hendriks
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4E86D787.9050207>