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:
parent
b1421b9190
commit
467397f25d
8 changed files with 27 additions and 3 deletions
|
@ -4,7 +4,7 @@ _tinc() {
|
|||
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||
opts="-c -d -D -K -n -o -L -R -U --config --no-detach --debug --net --option --mlock --logfile --pidfile --chroot --user --help --version"
|
||||
confvars="Address AddressFamily BindToAddress BindToInterface Broadcast BroadcastSubnet Cipher ClampMSS Compression ConnectTo DecrementTTL Device DeviceStandby DeviceType Digest DirectOnly Ed25519PrivateKeyFile Ed25519PublicKey Ed25519PublicKeyFile ExperimentalProtocol Forwarding GraphDumpFile Hostnames IffOneQueue IndirectData Interface KeyExpire ListenAddress LocalDiscovery MACExpire MACLength MaxOutputBufferSize MaxTimeout Mode Name PMTU PMTUDiscovery PingInterval PingTimeout Port PriorityInheritance PrivateKeyFile ProcessPriority Proxy PublicKeyFile ReplayWindow StrictSubnets Subnet TCPOnly TunnelServer UDPDiscovery UDPDiscoveryKeepaliveInterval UDPDiscoveryInterval UDPDiscoveryTimeout UDPRcvBuf UDPSndBuf VDEGroup VDEPort Weight"
|
||||
confvars="Address AddressFamily BindToAddress BindToInterface Broadcast BroadcastSubnet Cipher ClampMSS Compression ConnectTo DecrementTTL Device DeviceStandby DeviceType Digest DirectOnly Ed25519PrivateKeyFile Ed25519PublicKey Ed25519PublicKeyFile ExperimentalProtocol Forwarding GraphDumpFile Hostnames IffOneQueue IndirectData Interface KeyExpire ListenAddress LocalDiscovery MACExpire MACLength MaxOutputBufferSize MaxTimeout Mode Name PMTU PMTUDiscovery PingInterval PingTimeout Port PriorityInheritance PrivateKeyFile ProcessPriority Proxy PublicKeyFile ReplayWindow StrictSubnets Subnet TCPOnly TunnelServer UDPDiscovery UDPDiscoveryKeepaliveInterval UDPDiscoveryInterval UDPDiscoveryTimeout UDPInfoInterval UDPRcvBuf UDPSndBuf VDEGroup VDEPort Weight"
|
||||
commands="add connect debug del disconnect dump edit export export-all generate-ed25519-keys generate-keys generate-rsa-keys get help import info init invite join log network pcap pid purge reload restart retry set start stop top version"
|
||||
|
||||
case ${prev} in
|
||||
|
|
|
@ -500,6 +500,8 @@ The minimum amount of time between sending UDP ping datagrams to try to establis
|
|||
.It Va UDPDiscoveryTimeout Li = Ar seconds Pq 30
|
||||
If tinc doesn't receive any UDP ping replies over the specified interval,
|
||||
it will assume UDP communication is broken and will fall back to TCP.
|
||||
.It Va UDPInfoInterval Li = Ar seconds Pq 5
|
||||
The minimum amount of time between sending periodic updates about UDP addresses, which are mostly useful for UDP hole punching.
|
||||
.It Va UDPRcvBuf Li = Ar bytes Pq OS default
|
||||
Sets the socket receive buffer size for the UDP socket, in bytes.
|
||||
If unset, the default buffer size will be used by the operating system.
|
||||
|
|
|
@ -1253,6 +1253,10 @@ The minimum amount of time between sending UDP ping datagrams to try to establis
|
|||
If tinc doesn't receive any UDP ping replies over the specified interval,
|
||||
it will assume UDP communication is broken and will fall back to TCP.
|
||||
|
||||
@cindex UDPInfoInterval
|
||||
@item UDPInfoInterval = <seconds> (5)
|
||||
The minimum amount of time between sending periodic updates about UDP addresses, which are mostly useful for UDP hole punching.
|
||||
|
||||
@cindex UDPRcvBuf
|
||||
@item UDPRcvBuf = <bytes> (OS default)
|
||||
Sets the socket receive buffer size for the UDP socket, in bytes.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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},
|
||||
|
|
Loading…
Reference in a new issue