summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau2025-10-18 19:58:45 +0000
committerFelix Fietkau2025-10-18 19:59:36 +0000
commit0535d615f6992f1ebe9b0f368cacdb5d5c59301a (patch)
tree496f2447c92b878ac40b8dc8cec029e4a3bb7d8e
parent9d531c0c5b4aeda92d711d373c96385325de04ce (diff)
downloadopenwrt-0535d615f6992f1ebe9b0f368cacdb5d5c59301a.tar.gz
hostapd: increase netlink buffer size
When lots of events are waiting to be received, the default buffer size is not enough, and hostapd can run into "No buffer space available" on recvmsg. This will cause the netdev state tracking to go out of sync. Signed-off-by: Felix Fietkau <nbd@nbd.name>
-rw-r--r--package/network/services/hostapd/patches/070-netlink-increase-buffer-size.patch31
1 files changed, 31 insertions, 0 deletions
diff --git a/package/network/services/hostapd/patches/070-netlink-increase-buffer-size.patch b/package/network/services/hostapd/patches/070-netlink-increase-buffer-size.patch
new file mode 100644
index 0000000000..3f1952f1e3
--- /dev/null
+++ b/package/network/services/hostapd/patches/070-netlink-increase-buffer-size.patch
@@ -0,0 +1,31 @@
+From: Felix Fietkau <nbd@nbd.name>
+Date: Sat, 18 Oct 2025 21:55:44 +0200
+Subject: [PATCH] netlink: increase buffer size
+
+When lots of events are waiting to be received, the default buffer size
+is not enough, and hostapd can run into "No buffer space available" on
+recvmsg. This will cause the netdev state tracking to go out of sync.
+
+Signed-off-by: Felix Fietkau <nbd@nbd.name>
+---
+
+--- a/src/drivers/netlink.c
++++ b/src/drivers/netlink.c
+@@ -92,6 +92,7 @@ struct netlink_data * netlink_init(struc
+ {
+ struct netlink_data *netlink;
+ struct sockaddr_nl local;
++ int size = 262144;
+
+ netlink = os_zalloc(sizeof(*netlink));
+ if (netlink == NULL)
+@@ -105,6 +106,9 @@ struct netlink_data * netlink_init(struc
+ return NULL;
+ }
+
++ setsockopt(netlink->sock, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size));
++ setsockopt(netlink->sock, SOL_SOCKET, SO_SNDBUF, &size, sizeof(size));
++
+ os_memset(&local, 0, sizeof(local));
+ local.nl_family = AF_NETLINK;
+ local.nl_groups = RTMGRP_LINK;