mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-06 06:21:31 +00:00
tipc: change socket buffer overflow control to respect sk_rcvbuf
As per feedback from the netdev community, we change the buffer overflow protection algorithm in receiving sockets so that it always respects the nominal upper limit set in sk_rcvbuf. Instead of scaling up from a small sk_rcvbuf value, which leads to violation of the configured sk_rcvbuf limit, we now calculate the weighted per-message limit by scaling down from a much bigger value, still in the same field, according to the importance priority of the received message. To allow for administrative tunability of the socket receive buffer size, we create a tipc_rmem sysctl variable to allow the user to configure an even bigger value via sysctl command. It is a size of three (min/default/max) to be consistent with things like tcp_rmem. By default, the value initialized in tipc_rmem[1] is equal to the receive socket size needed by a TIPC_CRITICAL_IMPORTANCE message. This value is also set as the default value of sk_rcvbuf. Originally-by: Jon Maloy <jon.maloy@ericsson.com> Cc: Neil Horman <nhorman@tuxdriver.com> Cc: Jon Maloy <jon.maloy@ericsson.com> [Ying: added sysctl variation to Jon's original patch] Signed-off-by: Ying Xue <ying.xue@windriver.com> [PG: don't compile sysctl.c if not config'd; add Documentation] Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8941bbcd57
commit
cc79dd1ba9
7 changed files with 112 additions and 12 deletions
|
@ -80,6 +80,7 @@ extern u32 tipc_own_addr __read_mostly;
|
|||
extern int tipc_max_ports __read_mostly;
|
||||
extern int tipc_net_id __read_mostly;
|
||||
extern int tipc_remote_management __read_mostly;
|
||||
extern int sysctl_tipc_rmem[3] __read_mostly;
|
||||
|
||||
/*
|
||||
* Other global variables
|
||||
|
@ -97,6 +98,14 @@ extern void tipc_netlink_stop(void);
|
|||
extern int tipc_socket_init(void);
|
||||
extern void tipc_socket_stop(void);
|
||||
|
||||
#ifdef CONFIG_SYSCTL
|
||||
extern int tipc_register_sysctl(void);
|
||||
extern void tipc_unregister_sysctl(void);
|
||||
#else
|
||||
#define tipc_register_sysctl() 0
|
||||
#define tipc_unregister_sysctl()
|
||||
#endif
|
||||
|
||||
/*
|
||||
* TIPC timer and signal code
|
||||
*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue