From: Christian Mauderer <christian.maude...@embedded-brains.de> 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. --- dhcpcd/dhcp.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/dhcpcd/dhcp.c b/dhcpcd/dhcp.c index 1641f44cc6d..5a061726d67 100644 --- a/dhcpcd/dhcp.c +++ b/dhcpcd/dhcp.c @@ -1487,6 +1487,9 @@ send_message(struct interface *iface, int type, struct in_addr from, to; in_addr_t a = 0; struct timeval tv; +#ifdef __rtems__ + int errno_save; +#endif /* __rtems__ */ if (!callback) syslog(LOG_DEBUG, "%s: sending %s with xid 0x%x", @@ -1544,6 +1547,9 @@ send_message(struct interface *iface, int type, if (len == -1) return; r = ipv4_sendrawpacket(iface, ETHERTYPE_IP, udp, len); +#ifdef __rtems__ + errno_save = errno; +#endif /* __rtems__ */ free(udp); /* If we failed to send a raw packet this normally means * 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) { syslog(LOG_ERR, "%s: ipv4_sendrawpacket: %m", iface->name); +#ifdef __rtems__ + if (errno_save != ENETDOWN && + errno_save != ENETRESET && + errno_save != ENETUNREACH && + errno_save != ENOBUFS) { +#endif /* __rtems__ */ if (!(options & DHCPCD_TEST)) dhcp_drop(iface, "FAIL"); dhcp_close(iface); eloop_timeout_delete(NULL, iface); callback = NULL; +#ifdef __rtems__ + } +#endif /* __rtems__ */ } } free(dhcp); -- 2.12.3 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel