Fix more needless spam when an interface departs.
dhcp_drop(ifp, "STOP");
dhcp_close(ifp);
eloop_timeout_delete(NULL, ifp);
+ if (ifp->options->options & DHCPCD_DEPARTED)
+ script_runreason(ifp, "DEPARTED");
free_interface(ifp);
if (!(options & (DHCPCD_MASTER | DHCPCD_TEST)))
exit(EXIT_FAILURE);
handle_link(__unused void *arg)
{
- if (manage_link(linkfd) == -1)
+ if (manage_link(linkfd) == -1 && errno != ENXIO && errno != ENODEV)
syslog(LOG_ERR, "manage_link: %m");
}
if (action == -1) {
ifp = find_interface(ifname);
if (ifp != NULL) {
+ ifp->options->options |= DHCPCD_DEPARTED;
stop_interface(ifp);
- script_runreason(ifp, "DEPARTED");
}
return;
}
#define DHCPCD_STARTED (1ULL << 38)
#define DHCPCD_NOALIAS (1ULL << 39)
#define DHCPCD_IA_FORCED (1ULL << 40)
+#define DHCPCD_DEPARTED (1ULL << 41)
extern const struct option cf_options[];
syslog(LOG_DEBUG, "%s: deleting IP address %s/%d",
iface->name, inet_ntoa(state->addr), inet_ntocidr(state->net));
retval = ipv4_deleteaddress(iface, &state->addr, &state->net);
- if (retval == -1 && errno != EADDRNOTAVAIL && errno != ENXIO)
+ if (retval == -1 && errno != EADDRNOTAVAIL && errno != ENXIO &&
+ errno != ENODEV)
syslog(LOG_ERR, "del_address: %m");
state->addr.s_addr = 0;
state->net.s_addr = 0;