]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Reject routes on Linux don't use a gateway.
authorRoy Marples <roy@marples.name>
Tue, 8 Nov 2016 22:43:13 +0000 (22:43 +0000)
committerRoy Marples <roy@marples.name>
Tue, 8 Nov 2016 22:43:13 +0000 (22:43 +0000)
if-linux.c
ipv6.c

index 4d0f61bdda66b1dde0d07903b670381806957137..8edc94ba4e29b72b31630e29d3729b5af31d18e9 100644 (file)
@@ -1165,7 +1165,10 @@ if_route(unsigned char cmd, const struct rt *rt)
                        nlm.rt.rtm_scope = RT_SCOPE_LINK;
                else
                        nlm.rt.rtm_scope = RT_SCOPE_UNIVERSE;
-               nlm.rt.rtm_type = RTN_UNICAST;
+               if (rt->rt_flags & RTF_REJECT)
+                       nlm.rt.rtm_type = RTN_UNREACHABLE;
+               else
+                       nlm.rt.rtm_type = RTN_UNICAST;
        }
 
 #define ADDSA(type, sa)                                                        \
diff --git a/ipv6.c b/ipv6.c
index 4514bb98f9add3fbf0308f7c1ea25c5d8b75823b..3ed0526330dac82859ce761d2f72d610ce6ae4e2 100644 (file)
--- a/ipv6.c
+++ b/ipv6.c
@@ -2161,7 +2161,10 @@ inet6_makeprefix(struct interface *ifp, const struct ra *rap,
        sa_in6_init(&rt->rt_netmask, &netmask);
        if (addr->flags & IPV6_AF_DELEGATEDPFX) {
                rt->rt_flags |= RTF_REJECT;
+               /* Linux does not like a gateway for a reject route. */
+#ifndef __linux__
                sa_in6_init(&rt->rt_gateway, &in6addr_loopback);
+#endif
        } else
                rt->rt_gateway.sa_family = AF_UNSPEC;
        sa_in6_init(&rt->rt_ifa, &addr->addr);