This is now needed to make sure local addresses can be used even if the
interface their are configured on is down.

ok?

Index: net/route.c
===================================================================
RCS file: /cvs/src/sys/net/route.c,v
retrieving revision 1.242
diff -u -p -r1.242 route.c
--- net/route.c 23 Sep 2015 08:49:46 -0000      1.242
+++ net/route.c 24 Sep 2015 11:32:15 -0000
@@ -1743,6 +1743,12 @@ rt_if_linkstate_change(struct rtentry *r
            (rt->rt_ifa == NULL || rt->rt_ifa->ifa_ifp != ifp))
                return (0);
 
+       /* Local routes are always usable. */
+       if (rt->rt_flags & RTF_LOCAL) {
+               rt->rt_flags |= RTF_UP;
+               return (0);
+       }
+
        if (LINK_STATE_IS_UP(ifp->if_link_state) && ifp->if_flags & IFF_UP) {
                if (!(rt->rt_flags & RTF_UP)) {
                        /* bring route up */
Index: netinet/ip_input.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_input.c,v
retrieving revision 1.255
diff -u -p -r1.255 ip_input.c
--- netinet/ip_input.c  11 Sep 2015 19:34:20 -0000      1.255
+++ netinet/ip_input.c  24 Sep 2015 11:31:38 -0000
@@ -725,7 +725,7 @@ in_ouraddr(struct mbuf *m, struct ifnet 
                        m->m_flags |= M_BCAST;
        }
 
-       return (ISSET(ia->ia_ifp->if_flags, IFF_UP));
+       return (1);
 }
 
 /*

Reply via email to