mirror of
https://git.rtems.org/rtems-libbsd/
synced 2025-05-13 01:57:43 +08:00
dhcpcd: Don't ignore interface on transient errors.
In case of WPA on a WiFi interface, the interface isn't yet ready when the dhcpcd starts. Sending a packet during that time returns with a ENOBUFS. That caused the interface to be ignored. On the upstream repository of dhcpcd, that transient error (and some others) are already ignored.
This commit is contained in:
parent
e5abb31577
commit
ddd16bcc32
@ -1487,6 +1487,9 @@ send_message(struct interface *iface, int type,
|
|||||||
struct in_addr from, to;
|
struct in_addr from, to;
|
||||||
in_addr_t a = 0;
|
in_addr_t a = 0;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
|
#ifdef __rtems__
|
||||||
|
int errno_save;
|
||||||
|
#endif /* __rtems__ */
|
||||||
|
|
||||||
if (!callback)
|
if (!callback)
|
||||||
syslog(LOG_DEBUG, "%s: sending %s with xid 0x%x",
|
syslog(LOG_DEBUG, "%s: sending %s with xid 0x%x",
|
||||||
@ -1544,6 +1547,9 @@ send_message(struct interface *iface, int type,
|
|||||||
if (len == -1)
|
if (len == -1)
|
||||||
return;
|
return;
|
||||||
r = ipv4_sendrawpacket(iface, ETHERTYPE_IP, udp, len);
|
r = ipv4_sendrawpacket(iface, ETHERTYPE_IP, udp, len);
|
||||||
|
#ifdef __rtems__
|
||||||
|
errno_save = errno;
|
||||||
|
#endif /* __rtems__ */
|
||||||
free(udp);
|
free(udp);
|
||||||
/* If we failed to send a raw packet this normally means
|
/* If we failed to send a raw packet this normally means
|
||||||
* we don't have the ability to work beneath the IP layer
|
* we don't have the ability to work beneath the IP layer
|
||||||
@ -1553,11 +1559,20 @@ send_message(struct interface *iface, int type,
|
|||||||
if (r == -1) {
|
if (r == -1) {
|
||||||
syslog(LOG_ERR, "%s: ipv4_sendrawpacket: %m",
|
syslog(LOG_ERR, "%s: ipv4_sendrawpacket: %m",
|
||||||
iface->name);
|
iface->name);
|
||||||
|
#ifdef __rtems__
|
||||||
|
if (errno_save != ENETDOWN &&
|
||||||
|
errno_save != ENETRESET &&
|
||||||
|
errno_save != ENETUNREACH &&
|
||||||
|
errno_save != ENOBUFS) {
|
||||||
|
#endif /* __rtems__ */
|
||||||
if (!(options & DHCPCD_TEST))
|
if (!(options & DHCPCD_TEST))
|
||||||
dhcp_drop(iface, "FAIL");
|
dhcp_drop(iface, "FAIL");
|
||||||
dhcp_close(iface);
|
dhcp_close(iface);
|
||||||
eloop_timeout_delete(NULL, iface);
|
eloop_timeout_delete(NULL, iface);
|
||||||
callback = NULL;
|
callback = NULL;
|
||||||
|
#ifdef __rtems__
|
||||||
|
}
|
||||||
|
#endif /* __rtems__ */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(dhcp);
|
free(dhcp);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user