state->state = DHS_REBIND;
eloop_timeout_delete(ifp->ctx->eloop, send_renew, ifp);
state->lease.server.s_addr = 0;
- ifp->options->options &= ~ DHCPCD_CSR_WARNED;
+ ifp->options->options &= ~(DHCPCD_CSR_WARNED |
+ DHCPCD_ROUTER_HOST_ROUTE_WARNED);
send_rebind(ifp);
}
free(state->old);
state->old = NULL;
state->lease.addr.s_addr = 0;
- ifp->options->options &= ~ DHCPCD_CSR_WARNED;
+ ifp->options->options &= ~(DHCPCD_CSR_WARNED |
+ DHCPCD_ROUTER_HOST_ROUTE_WARNED);
}
static void
#define DHCPCD_PFXDLGONLY (1ULL << 52)
#define DHCPCD_PFXDLGMIX (1ULL << 53)
#define DHCPCD_IPV6RA_AUTOCONF (1ULL << 54)
+#define DHCPCD_ROUTER_HOST_ROUTE_WARNED (1ULL << 55)
extern const struct option cf_options[];
{
struct rt *rtp, *rtn;
const char *cp, *cp2, *cp3, *cplim;
+ struct if_options *ifo;
if (rt == NULL) /* earlier malloc failed */
return NULL;
}
if (rtn != rtp)
continue;
+ ifo = ifp->options;
if (ifp->flags & IFF_NOARP) {
- syslog(LOG_WARNING,
- "%s: forcing router %s through interface",
- ifp->name, inet_ntoa(rtp->gate));
+ if (!(ifo->options & DHCPCD_ROUTER_HOST_ROUTE_WARNED)) {
+ ifo->options |= DHCPCD_ROUTER_HOST_ROUTE_WARNED;
+ syslog(LOG_WARNING,
+ "%s: forcing router %s through interface",
+ ifp->name, inet_ntoa(rtp->gate));
+ }
rtp->gate.s_addr = 0;
continue;
}
- syslog(LOG_WARNING, "%s: router %s requires a host route",
- ifp->name, inet_ntoa(rtp->gate));
+ if (!(ifo->options & DHCPCD_ROUTER_HOST_ROUTE_WARNED)) {
+ ifo->options |= DHCPCD_ROUTER_HOST_ROUTE_WARNED;
+ syslog(LOG_WARNING,
+ "%s: router %s requires a host route",
+ ifp->name, inet_ntoa(rtp->gate));
+ }
rtn = malloc(sizeof(*rtn));
if (rtn == NULL) {
syslog(LOG_ERR, "%s: %m", __func__);