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 "[EMAIL PROTECTED]"

Reply via email to