Once on the server with Quagga after adding several thousand network interfaces, I noticed a message in the logs /var/log/zebra.log:
ZEBRA: netlink-listen recvmsg overrun: No buffer space available
Looked at the current values (I everywhere was 212992):
cat /proc/sys/net/core/rmem_default
cat /proc/sys/net/core/rmem_max
cat /proc/sys/net/core/wmem_default
cat /proc/sys/net/core/wmem_max
To solve the problem, I increased the maximum data receive buffer for all connections by 16 megabytes (16777216 byte = 16Mb):
sudo -i
echo 16777216 > /proc/sys/net/core/rmem_max
echo 16777216 > /proc/sys/net/core/wmem_max
And also so that when restarting the system, the value is not reset, added to sysctl.conf:
sudo nano /etc/sysctl.conf
net.core.rmem_max=16777216
net.core.wmem_max=16777216
Also in the /etc/quagga/debian.conf file, add “nl-bufsize”:
zebra_options=" --daemon -A 127.0.0.1 --nl-bufsize 16777216"
And restart quagga to apply the changes:
sudo /etc/init.d/quagga restart
On Ubuntu Server 18.04, I specified in another file:
nano /lib/systemd/system/zebra.service
nano /etc/systemd/system/multi-user.target.wants/zebra.service
ExecStart=/usr/sbin/zebra -d -A 127.0.0.1 -s 16777216 -f /etc/quagga/zebra.conf
See also my articles:
Setting up BGP in Quagga
How to enable or disable Proxy ARP on Linux
The zebra manpage says:
“Note that kernel < 2.6.14 doesn't allow to increase it over maximum value defined in /proc/sys/net/core/rmem_max. If you want to do it, you have to increase maximum before starting zebra."
Does that mean using a kernel newer than 2.6.14 does not require increasing kernel limits at all?