mirror of
https://github.com/opnsense/src.git
synced 2026-02-19 02:30:08 -05:00
wpa: ctrl_iface set sendbuf size
In order to avoid running into the default net.local.dgram.maxdgram of 2K currently when calling sendto(2) try to set the sndbuf size to the maximum ctrl message size. While on 14 and 15 this does not actually raise the limit anymore (and be7c095ac99ad29fd72b780c7d58949a38656c66 raised it for syslogd and this), FreeBSD 13 still requires this change and it will work as expected there. In addition we always ensure a large enough send buffer this way independent of kernel defaults. The problem occured, e.g., when the scan_list result had enough BSSIDs so the text output would exceed 2048 bytes. Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: cy, adrian (with previous comment) Differential Revision: https://reviews.freebsd.org/D42558 (cherry picked from commit 1edc20b76953d9ef571b0bcf89b206b98ed13d9b)
This commit is contained in:
parent
19a405d238
commit
64f1df32cf
1 changed files with 20 additions and 0 deletions
|
|
@ -506,6 +506,10 @@ static int wpas_ctrl_iface_open_sock(struct wpa_supplicant *wpa_s,
|
|||
struct group *grp;
|
||||
char *endp;
|
||||
int flags;
|
||||
#if defined(__FreeBSD__)
|
||||
int optval, rc;
|
||||
socklen_t optlen;
|
||||
#endif
|
||||
|
||||
buf = os_strdup(wpa_s->conf->ctrl_interface);
|
||||
if (buf == NULL)
|
||||
|
|
@ -679,6 +683,22 @@ havesock:
|
|||
}
|
||||
}
|
||||
|
||||
#if defined(__FreeBSD__)
|
||||
/* Ensure we can send a full length message atomically. */
|
||||
optval = 0;
|
||||
optlen = sizeof(optval);
|
||||
if (getsockopt(priv->sock, SOL_SOCKET, SO_SNDBUF, &optval, &optlen) == -1) {
|
||||
wpa_printf(MSG_INFO, "failed to get sndbuf for sock=%d: %s",
|
||||
priv->sock, strerror(errno));
|
||||
} else if (optval < CTRL_IFACE_MAX_LEN) {
|
||||
optval = CTRL_IFACE_MAX_LEN;
|
||||
if (setsockopt(priv->sock, SOL_SOCKET, SO_SNDBUF, &optval,
|
||||
sizeof(optval)) == -1)
|
||||
wpa_printf(MSG_ERROR, "failed to set sndbuf for "
|
||||
"sock=%d: %s", priv->sock, strerror(errno));
|
||||
}
|
||||
#endif
|
||||
|
||||
eloop_register_read_sock(priv->sock, wpa_supplicant_ctrl_iface_receive,
|
||||
wpa_s, priv);
|
||||
wpa_msg_register_cb(wpa_supplicant_ctrl_iface_msg_cb);
|
||||
|
|
|
|||
Loading…
Reference in a new issue