My iwn(4) interface on FreeBSD11 and 12 struggles to associate.
A side effect of this is running out of buffer until it does, but we need
dhcpcd to continue once association is made and the buffers have emptied.
} else {
size_t ulen;
- r = 0;
udp = dhcp_makeudppacket(&ulen, (uint8_t *)bootp, len, from,to);
if (udp == NULL) {
logger(ifp->ctx, LOG_ERR, "dhcp_makeudppacket: %m");
+ r = 0;
} else {
r = if_sendraw(ifp, state->raw_fd,
ETHERTYPE_IP, (uint8_t *)udp, ulen);
case ENETDOWN:
case ENETRESET:
case ENETUNREACH:
+ case ENOBUFS:
break;
default:
if (!(ifp->ctx->options & DHCPCD_TEST))
if (sendmsg(ctx->dhcp6_fd, &ctx->sndhdr, 0) == -1) {
logger(ifp->ctx, LOG_ERR,
"%s: %s: sendmsg: %m", ifp->name, __func__);
- ifp->options->options &= ~DHCPCD_IPV6;
- dhcp6_drop(ifp, "EXPIRE6");
- return -1;
+ /* Allow DHCPv6 to continue .... the errors
+ * would be rate limited by the protocol.
+ * Generally the error is ENOBUFS when struggling to
+ * associate with an access point. */
}
state->RTC++;
if (sendmsg(ctx->nd_fd, &ctx->sndhdr, 0) == -1) {
logger(ifp->ctx, LOG_ERR,
"%s: %s: sendmsg: %m", ifp->name, __func__);
- ipv6nd_drop(ifp);
- ifp->options->options &= ~(DHCPCD_IPV6 | DHCPCD_IPV6RS);
- return;
+ /* Allow IPv6ND to continue .... at most a few errors
+ * would be logged.
+ * Generally the error is ENOBUFS when struggling to
+ * associate with an access point. */
}
if (state->rsprobes++ < MAX_RTR_SOLICITATIONS)