]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Fix adding static routes via a gateway on BSD.
authorRoy Marples <roy@marples.name>
Wed, 18 Nov 2015 22:57:48 +0000 (22:57 +0000)
committerRoy Marples <roy@marples.name>
Wed, 18 Nov 2015 22:57:48 +0000 (22:57 +0000)
if-bsd.c

index 069195044747f813d93a6f1fe8c2980590d820d0..c0c806939b8802045ad76873ccbc23eb84ad0e5f 100644 (file)
--- a/if-bsd.c
+++ b/if-bsd.c
@@ -592,6 +592,8 @@ if_route(unsigned char cmd, const struct rt *rt)
                rtm.hdr.rtm_addrs |= RTA_NETMASK;
                if (rtm.hdr.rtm_flags & RTF_STATIC)
                        rtm.hdr.rtm_flags |= RTF_GATEWAY;
+               if (rt->net.s_addr == htonl(INADDR_BROADCAST))
+                       rtm.hdr.rtm_flags |= RTF_HOST;
        }
        if ((cmd == RTM_ADD || cmd == RTM_CHANGE) &&
            !(rtm.hdr.rtm_flags & RTF_GATEWAY))
@@ -599,12 +601,11 @@ if_route(unsigned char cmd, const struct rt *rt)
 
        ADDADDR(&rt->dest);
        if (rtm.hdr.rtm_addrs & RTA_GATEWAY) {
-#ifdef RTF_CLONING
-               if ((rtm.hdr.rtm_flags & (RTF_HOST | RTF_CLONING) &&
-#else
                if ((rtm.hdr.rtm_flags & RTF_HOST &&
+                   rt->gate.s_addr == htonl(INADDR_ANY)) ||
+#ifdef RTF_CLONING
+                   rtm.hdr.rtm_flags & RTF_CLONING ||
 #endif
-                   rt->gate.s_addr != htonl(INADDR_LOOPBACK)) ||
                    !(rtm.hdr.rtm_flags & RTF_STATIC))
                {
                        if_linkaddr(&su.sdl, rt->iface);