From owner-freebsd-net@FreeBSD.ORG Fri Sep 8 09:09:09 2006 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id A73DD16A4DA for ; Fri, 8 Sep 2006 09:09:09 +0000 (UTC) (envelope-from oleg@lath.rinet.ru) Received: from lath.rinet.ru (lath.rinet.ru [195.54.192.90]) by mx1.FreeBSD.org (Postfix) with ESMTP id 0548D43D45 for ; Fri, 8 Sep 2006 09:09:08 +0000 (GMT) (envelope-from oleg@lath.rinet.ru) Received: from lath.rinet.ru (localhost [127.0.0.1]) by lath.rinet.ru (8.13.6/8.13.6) with ESMTP id k8898jKb015283 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 8 Sep 2006 13:08:45 +0400 (MSD) (envelope-from oleg@lath.rinet.ru) Received: (from oleg@localhost) by lath.rinet.ru (8.13.6/8.13.6/Submit) id k8898jDC015282; Fri, 8 Sep 2006 13:08:45 +0400 (MSD) (envelope-from oleg) Date: Fri, 8 Sep 2006 13:08:44 +0400 From: Oleg Bulyzhin To: Doug Ambrisko Message-ID: <20060908090844.GB14414@lath.rinet.ru> References: <200609071830.k87IUt5a034480@ambrisko.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200609071830.k87IUt5a034480@ambrisko.com> User-Agent: Mutt/1.5.11 Cc: freebsd-net@freebsd.org Subject: Re: patch to not route on down interfaces X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Sep 2006 09:09:09 -0000 On Thu, Sep 07, 2006 at 11:30:55AM -0700, Doug Ambrisko wrote: > Hi guys, > > We "hack" a feature to have 2 NIC's configured with the same IP and > netmask. We down one and up the other to bounce between then. We > also set the MAC's to be the same. This fixes a few routing problems > in which the route would be tied to the down interface and not the > up one :-( > > --- ../src/sys/net/if.c Tue Feb 14 19:37:15 2006 > +++ ./sys/net/if.c Tue Sep 5 12:21:46 2006 > @@ -986,7 +986,9 @@ ifa_ifwithaddr(struct sockaddr *addr) > struct ifaddr *ifa; > > IFNET_RLOCK(); > - TAILQ_FOREACH(ifp, &ifnet, if_link) > + TAILQ_FOREACH(ifp, &ifnet, if_link) { > + if (!ifp->if_flags & IFF_UP) > + continue; > TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) { > if (ifa->ifa_addr->sa_family != addr->sa_family) > continue; > @@ -999,6 +1001,7 @@ ifa_ifwithaddr(struct sockaddr *addr) > sa_equal(ifa->ifa_broadaddr, addr)) > goto done; > } > + } > ifa = NULL; > done: > IFNET_RUNLOCK(); > @@ -1017,6 +1020,8 @@ ifa_ifwithdstaddr(struct sockaddr *addr) > > IFNET_RLOCK(); > TAILQ_FOREACH(ifp, &ifnet, if_link) { > + if (!ifp->if_flags & IFF_UP) > + continue; > if ((ifp->if_flags & IFF_POINTOPOINT) == 0) > continue; > TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) { > @@ -1062,6 +1067,8 @@ ifa_ifwithnet(struct sockaddr *addr) > */ > IFNET_RLOCK(); > TAILQ_FOREACH(ifp, &ifnet, if_link) { > + if (!ifp->if_flags & IFF_UP) > + continue; > TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) { > char *cp, *cp2, *cp3; > > --- ../src/sys/netinet/in.c Tue Jan 31 08:11:37 2006 > +++ ./sys/netinet/in.c Tue Sep 5 16:09:00 2006 > @@ -870,6 +871,8 @@ in_scrubprefix(target) > } > > TAILQ_FOREACH(ia, &in_ifaddrhead, ia_link) { > + if (ia->ia_ifp && !(ia->ia_ifp->if_flags & IFF_UP)) > + continue; > if (rtinitflags(ia)) > p = ia->ia_dstaddr.sin_addr; > else { > > Thanks, > > Doug A. > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" I guess this one is wrong: > + if (!ifp->if_flags & IFF_UP) it would lead to ((!ifp->if_flags) & IFF_UP), whereas it should be: (!(ifp->if_flags & IFF_UP)) -- Oleg.