Throttle the rate of UDP_INFO messages.

This makes sure UDP_INFO messages are only sent at the maximum rate of
5 per second (by default). As usual with these "probe" mechanisms, the
rate of these messages cannot be higher than the rate of data packets
themselves, since they are sent from the RX path.
This commit is contained in:
Etienne Dechamps 2015-03-08 19:54:44 +00:00
parent b1421b9190
commit 467397f25d
8 changed files with 27 additions and 3 deletions

View file

@ -143,6 +143,8 @@ extern int udp_discovery_keepalive_interval;
extern int udp_discovery_interval;
extern int udp_discovery_timeout;
extern int udp_info_interval;
extern listen_socket_t listen_socket[MAXSOCKETS];
extern int listen_sockets;
extern io_t unix_socket;

View file

@ -518,6 +518,8 @@ bool setup_myself_reloadable(void) {
get_config_int(lookup_config(config_tree, "UDPDiscoveryInterval"), &udp_discovery_interval);
get_config_int(lookup_config(config_tree, "UDPDiscoveryTimeout"), &udp_discovery_timeout);
get_config_int(lookup_config(config_tree, "UDPInfoInterval"), &udp_info_interval);
get_config_bool(lookup_config(config_tree, "DirectOnly"), &directonly);
get_config_bool(lookup_config(config_tree, "LocalDiscovery"), &localdiscovery);

View file

@ -95,6 +95,8 @@ typedef struct node_t {
struct timeval mtu_ping_sent; /* Last time a MTU probe was sent */
struct timeval udp_info_sent; /* Last time a UDP_INFO message was sent */
length_t maxrecentlen; /* Maximum size of recently received packets */
length_t mtu; /* Maximum size of packets to send to this node */

View file

@ -31,6 +31,7 @@
#include "xalloc.h"
int maxoutbufsize = 0;
int udp_info_interval = 5;
/* Status and error notification routines */
@ -167,8 +168,15 @@ bool send_udp_info(node_t *from, node_t *to) {
if(!to->status.reachable)
return true;
if(from == myself && to->connection)
return true;
if(from == myself) {
if(to->connection)
return true;
struct timeval elapsed;
timersub(&now, &to->udp_info_sent, &elapsed);
if(elapsed.tv_sec < udp_info_interval)
return true;
}
if((myself->options | from->options | to->options) & OPTION_TCPONLY)
return true;
@ -188,6 +196,9 @@ bool send_udp_info(node_t *from, node_t *to) {
free(from_address);
free(from_port);
if(from == myself)
to->udp_info_sent = now;
return x;
}

View file

@ -1371,6 +1371,7 @@ const var_t variables[] = {
{"UDPDiscoveryKeepaliveInterval", VAR_SERVER},
{"UDPDiscoveryInterval", VAR_SERVER},
{"UDPDiscoveryTimeout", VAR_SERVER},
{"UDPInfoInterval", VAR_SERVER},
{"UDPRcvBuf", VAR_SERVER},
{"UDPSndBuf", VAR_SERVER},
{"VDEGroup", VAR_SERVER},