summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2016-11-08 22:42:34 +0000
committerRoy Marples <roy@marples.name>2016-11-08 22:42:34 +0000
commit9474a3840620f37714d7de205cb422d4ea1141da (patch)
tree28771b5c1805108e76dc10b01004566eda9b682c
parentcd6391c6508f54e0eb0bd2200b6328599ce89588 (diff)
downloaddhcpcd-9474a3840620f37714d7de205cb422d4ea1141da.tar.xz
Fix working with REJECT routes.
-rw-r--r--route.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/route.c b/route.c
index 1ad29afe..11407c0e 100644
--- a/route.c
+++ b/route.c
@@ -90,11 +90,15 @@ rt_desc(const char *cmd, const struct rt *rt)
logger(ctx, LOG_INFO, "%s: %s default route via %s",
ifname, cmd, gateway);
} else if (gateway_unspec)
- logger(ctx, LOG_INFO, "%s: %s route to %s/%d",
- ifname, cmd, dest, prefix);
+ logger(ctx, LOG_INFO, "%s: %s%s route to %s/%d",
+ ifname, cmd,
+ rt->rt_flags & RTF_REJECT ? " reject" : "",
+ dest, prefix);
else
- logger(ctx, LOG_INFO, "%s: %s route to %s/%d via %s",
- ifname, cmd, dest, prefix, gateway);
+ logger(ctx, LOG_INFO, "%s: %s%s route to %s/%d via %s",
+ ifname, cmd,
+ rt->rt_flags & RTF_REJECT ? " reject" : "",
+ dest, prefix, gateway);
}
void
@@ -270,12 +274,15 @@ rt_add(struct rt *nrt, struct rt *ort)
{
struct dhcpcd_ctx *ctx;
bool change;
+ unsigned long long options;
assert(nrt != NULL);
ctx = nrt->rt_ifp->ctx;
/* Don't set default routes if not asked to */
- if (!(nrt->rt_ifp->options->options & DHCPCD_GATEWAY) &&
+ options = nrt->rt_ifp->options == NULL ?
+ ctx->options : nrt->rt_ifp->options->options;
+ if (!(options & DHCPCD_GATEWAY) &&
sa_is_unspecified(&nrt->rt_dest) &&
sa_is_unspecified(&nrt->rt_netmask))
return false;
@@ -309,7 +316,7 @@ rt_add(struct rt *nrt, struct rt *ort)
sa_cmp(&ort->rt_gateway, &nrt->rt_gateway) == 0)
{
if (ort->rt_mtu == nrt->rt_mtu)
- return 0;
+ return true;
change = true;
}