}
}
#endif
+
if (state->options & DHCPCD_LINK) {
open_link_socket(iface);
- if (carrier_status(iface->name) == 0) {
- if (state->options & DHCPCD_DAEMONISE &&
- !(state->options & DHCPCD_BACKGROUND))
- logger(LOG_INFO, "waiting for carrier");
+ if (carrier_status(iface->name) == 0)
state->carrier = LINK_DOWN;
- }
}
if (options->timeout > 0 &&
if (iface->addr.s_addr != 0 &&
!(state->options & DHCPCD_INFORM))
logger(LOG_ERR, "lost lease");
- else
+ else if (state->carrier != LINK_DOWN ||
+ !(state->options & DHCPCD_DAEMONISED))
logger(LOG_ERR, "timed out");
}
do_socket(state, SOCKET_CLOSED);
}
#endif
+ if (timerisset(&state->stop)) {
+ get_time(&tv);
+ if (timercmp(&tv, &state->stop, >))
+ return handle_timeout_fail(state, options);
+ }
timerclear(&tv);
+
switch (state->state) {
case STATE_BOUND: /* FALLTHROUGH */
case STATE_RENEW_REQUESTED:
state->nakoff = 1;
iface->start_uptime = uptime();
break;
- default:
- if (!timerisset(&state->stop))
- break;
- get_time(&tv);
- if (timercmp(&tv, &state->stop, >))
- return handle_timeout_fail(state, options);
- break;
}
switch(state->state) {
if (daemonise(state, options) == -1)
goto eexit;
+ if (state->carrier == LINK_DOWN)
+ logger(LOG_INFO, "waiting for carrier");
+
for (;;) {
/* We should always handle our signals first */
if ((sig = (signal_read(state->signal_fd))) != -1) {