Author: qingli
Date: Sat Sep  5 20:35:18 2009
New Revision: 196872
URL: http://svn.freebsd.org/changeset/base/196872

Log:
  MFC   r196871
  
  The addresses that are assigned to the loopback interface
  should be part of the kernel routing table.
  
  Reviewed by:  bz
  Approved by:  re

Modified:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)
  stable/8/sys/net/if_llatbl.c
  stable/8/sys/netinet6/in6.c

Modified: stable/8/sys/net/if_llatbl.c
==============================================================================
--- stable/8/sys/net/if_llatbl.c        Sat Sep  5 20:24:37 2009        
(r196871)
+++ stable/8/sys/net/if_llatbl.c        Sat Sep  5 20:35:18 2009        
(r196872)
@@ -263,15 +263,6 @@ lla_rt_output(struct rt_msghdr *rtm, str
                    __func__, dl->sdl_index);
                return EINVAL;
        }
-       if (ifp->if_flags & IFF_LOOPBACK) {
-               struct ifaddr *ia;
-               ia = ifa_ifwithaddr(dst);
-               if (ia != NULL) {
-                       ifp = ia->ifa_ifp;
-                       ifa_free(ia);
-               } else 
-                       return EINVAL;
-       }
 
        switch (rtm->rtm_type) {
        case RTM_ADD:

Modified: stable/8/sys/netinet6/in6.c
==============================================================================
--- stable/8/sys/netinet6/in6.c Sat Sep  5 20:24:37 2009        (r196871)
+++ stable/8/sys/netinet6/in6.c Sat Sep  5 20:35:18 2009        (r196872)
@@ -1192,9 +1192,10 @@ in6_purgeaddr(struct ifaddr *ifa)
 
        /*
         * Remove the loopback route to the interface address.
-        * The check for the current setting of "nd6_useloopback" is not needed.
+        * The check for the current setting of "nd6_useloopback" 
+        * is not needed.
         */
-       if (!(ia->ia_ifp->if_flags & IFF_LOOPBACK)) {
+       {
                struct rt_addrinfo info;
                struct sockaddr_dl null_sdl;
 
@@ -1767,7 +1768,9 @@ in6_ifinit(struct ifnet *ifp, struct in6
        /*
         * add a loopback route to self
         */
-       if (V_nd6_useloopback && !(ifp->if_flags & IFF_LOOPBACK)) {
+       if (!(ia->ia_flags & IFA_ROUTE)
+           && (V_nd6_useloopback
+               || (ifp->if_flags & IFF_LOOPBACK))) {
                struct rt_addrinfo info;
                struct rtentry *rt = NULL;
                static struct sockaddr_dl null_sdl = {sizeof(null_sdl), 
AF_LINK};
@@ -1788,7 +1791,7 @@ in6_ifinit(struct ifnet *ifp, struct in6
                        RT_REMREF(rt);
                        RT_UNLOCK(rt);
                } else if (error != 0)
-                       log(LOG_INFO, "in6_ifinit: insertion failed\n");
+                       log(LOG_INFO, "in6_ifinit: error = %d, insertion 
failed\n", error);
        }
 
        /* Add ownaddr as loopback rtentry, if necessary (ex. on p2p link). */
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to