summaryrefslogtreecommitdiffstats
path: root/src/ipv6.c
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2019-01-06 10:10:59 +0000
committerRoy Marples <roy@marples.name>2019-01-06 10:10:59 +0000
commit12489da256cfd51afb736b278b88510e5e4303e7 (patch)
tree4acf18d0785a17a5d59f857e3ee8525e39d4f06d /src/ipv6.c
parent2f2db8dcf1a3acd87accc71951cae044118edcbf (diff)
downloaddhcpcd-12489da256cfd51afb736b278b88510e5e4303e7.tar.xz
ip6: Install not on link routes with a gateway of the router
This allows a secondary router to broadcast prefixes it controls without being a default router itself.
Diffstat (limited to 'src/ipv6.c')
-rw-r--r--src/ipv6.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/ipv6.c b/src/ipv6.c
index 38cb06d8..1f1e36c0 100644
--- a/src/ipv6.c
+++ b/src/ipv6.c
@@ -2151,13 +2151,11 @@ inet6_makeprefix(struct interface *ifp, const struct ra *rap,
}
/* There is no point in trying to manage a /128 prefix,
- * ones without a lifetime or ones not on link or delegated */
- if (addr->prefix_len == 128 ||
- addr->prefix_vltime == 0 ||
- !(addr->flags & (IPV6_AF_ONLINK | IPV6_AF_DELEGATEDPFX)))
+ * ones without a lifetime. */
+ if (addr->prefix_len == 128 || addr->prefix_vltime == 0)
return NULL;
- /* Don't install a reject route when not creating bigger prefixes */
+ /* Don't install a reject route when not creating bigger prefixes. */
if (addr->flags & IPV6_AF_NOREJECT)
return NULL;
@@ -2189,7 +2187,9 @@ inet6_makeprefix(struct interface *ifp, const struct ra *rap,
#ifndef __linux__
sa_in6_init(&rt->rt_gateway, &in6addr_loopback);
#endif
- } else
+ } else if (!(addr->flags & IPV6_AF_ONLINK))
+ sa_in6_init(&rt->rt_gateway, &rap->from);
+ else
rt->rt_gateway.sa_family = AF_UNSPEC;
sa_in6_init(&rt->rt_ifa, &addr->addr);
return rt;