Make code to detect two nodes with the same Name less triggerhappy.
First of all, if there really are two nodes with the same name, much more than 10 contradicting ADD_EDGE and DEL_EDGE messages will be sent. Also, we forgot to reset the counters when nothing happened. In case there is a ADD_EDGE/DEL_EDGE storm, we do not shut down, but sleep an increasing amount of time, allowing tinc to recover gracefully from temporary failures.
This commit is contained in:
parent
05260f941c
commit
be2fc8b045
1 changed files with 18 additions and 10 deletions
28
src/net.c
28
src/net.c
|
@ -50,6 +50,7 @@ bool graph_dump = false;
|
|||
time_t now = 0;
|
||||
int contradicting_add_edge = 0;
|
||||
int contradicting_del_edge = 0;
|
||||
static int sleeptime = 10;
|
||||
|
||||
/* Purge edges and subnets of unreachable nodes. Use carefully. */
|
||||
|
||||
|
@ -464,18 +465,25 @@ int main_loop(void) {
|
|||
keyexpires = now + keylifetime;
|
||||
}
|
||||
|
||||
if(contradicting_del_edge > 10 && contradicting_add_edge > 10) {
|
||||
logger(LOG_WARNING, "Possible node with same Name as us!");
|
||||
/* Detect ADD_EDGE/DEL_EDGE storms that are caused when
|
||||
* two tinc daemons with the same name are on the VPN.
|
||||
* If so, sleep a while. If this happens multiple times
|
||||
* in a row, sleep longer. */
|
||||
|
||||
if(rand() % 3 == 0) {
|
||||
logger(LOG_ERR, "Shutting down, check configuration of all nodes for duplicate Names!");
|
||||
running = false;
|
||||
break;
|
||||
}
|
||||
|
||||
contradicting_add_edge = 0;
|
||||
contradicting_del_edge = 0;
|
||||
if(contradicting_del_edge > 100 && contradicting_add_edge > 100) {
|
||||
logger(LOG_WARNING, "Possible node with same Name as us! Sleeping %d seconds.", sleeptime);
|
||||
sleep(sleeptime);
|
||||
sleeptime *= 2;
|
||||
if(sleeptime < 0)
|
||||
sleeptime = 3600;
|
||||
} else {
|
||||
sleeptime /= 2;
|
||||
if(sleeptime < 10)
|
||||
sleeptime = 10;
|
||||
}
|
||||
|
||||
contradicting_add_edge = 0;
|
||||
contradicting_del_edge = 0;
|
||||
}
|
||||
|
||||
if(sigalrm) {
|
||||
|
|
Loading…
Reference in a new issue