Re: iproute uses too small of a receive buffer
From: Patrick McHardy <hidden>
Date: 2009-10-28 20:07:40
Ben Greear wrote:
On 10/28/2009 12:50 PM, Patrick McHardy wrote:quoted
quoted
And, even 1MB may not be enough for some scenarios. So, probably best to let users over-ride the initial setting on cmd-line. If not, then use a large value to start with.How about this? It uses 1MB as receive buf limit by default (without increasing /proc/sys/net/core/rmem_max it will be limited by less however) and allows to specify the size manually using "-rcvbuf X" (-r is already used, so you need to specify at least -rc). Additionally rtnl_listen() continues on ENOBUFS after printing the error message.Looks good..except: If rmem_max is smaller than 1M, will that cause setsocktopt to fail and thus fail early out of rtnl_open_byproto?
No, the kernel takes the value as a hint and only uses the maximum allowable value: case SO_RCVBUF: /* Don't error on this BSD doesn't and if you think about it this is right. Otherwise apps have to play 'guess the biggest size' games. RCVBUF/SNDBUF are treated in BSD as hints */ if (val > sysctl_rmem_max) val = sysctl_rmem_max;
Maybe we should only print errors but not return in that method when setsockopt fails? In another project, I ended up trying ever smaller values until one worked in order to get near what the user wanted even if rmem_max was configured smaller. Not sure if that is worth doing here or not.
I think it should be fine this way.