On Mon, Oct 24, 2016 at 12:04:37PM +0900, YASUOKA Masahiko wrote:
> FYI.  I just commited regress tests on regress/netinet/carp/ .
> carp_4.sh demostrates the problem which the diff fixes.

root@ot1:.../carp# make
ksh /usr/src/regress/sys/netinet/carp/carp_1.sh -R "11 12" -I "11 12"
ksh /usr/src/regress/sys/netinet/carp/carp_2.sh -R "11 12" -I "11 12"
ksh /usr/src/regress/sys/netinet/carp/carp_3.sh -R "11 12" -I "11 12"
ksh /usr/src/regress/sys/netinet/carp/carp_4.sh -R "11 12" -I "11 12"
*** Error 1 in . (Makefile:13 'carp_4')
FAILED
*** Error 1 in target 'regress' (ignored)

A test that does not print a reason when it fails is hard to debug.
Even with -v it becomes not clear why it fails.  You may want to
print the failed condition when you do FAILS=$((FAILS + 1)).

> On Tue, 18 Oct 2016 19:33:01 +0900 (JST)
> YASUOKA Masahiko <yasu...@openbsd.org> wrote:
> > Currenlty when carppeer + "real mac-address" are used at once,
> > changing MASTER by carpdemote causes "MASTER-MASTER" problem, BACKUP
> > is to become MASTER but the present MASTER also will keep its state.
> > 
> > The diff following will fix this problem.
> > 
> > ok?

I cannot see a downside of accepting such a packet.

OK bluhm@

> > 
> > Accept CARP advertisement packets whose destination is not for multicast.
> > When both "carppeer" and "real mac-address" are used at once and the
> > BACKUP is to take over the new MASTER, the present MASTER receives
> > such packets.
> > 
> > found by and diff from nagasaka at iij
> > 
> > diff --git a/sys/netinet/ip_carp.c b/sys/netinet/ip_carp.c
> > index 9eb5552..bfbf430 100644
> > --- a/sys/netinet/ip_carp.c
> > +++ b/sys/netinet/ip_carp.c
> > @@ -453,7 +453,7 @@ carp_proto_input_if(struct ifnet *ifp, struct mbuf *m, 
> > int hlen)
> >     ismulti = IN_MULTICAST(ip->ip_dst.s_addr);
> >  
> >     /* check if received on a valid carp interface */
> > -   if (!((ifp->if_type == IFT_CARP && ismulti) ||
> > +   if (!(ifp->if_type == IFT_CARP ||
> >         (ifp->if_type != IFT_CARP && !ismulti && ifp->if_carp != NULL))) {
> >             carpstats.carps_badif++;
> >             CARP_LOG(LOG_INFO, sc,
> > 

Reply via email to