Use the same logic as tinc 1.0.x for detecting two nodes with the same Name.
This commit is contained in:
parent
2ba61742d4
commit
03ac48ea19
1 changed files with 14 additions and 11 deletions
25
src/net.c
25
src/net.c
|
@ -39,6 +39,7 @@
|
|||
|
||||
int contradicting_add_edge = 0;
|
||||
int contradicting_del_edge = 0;
|
||||
static int sleeptime = 10;
|
||||
|
||||
/* Purge edges and subnets of unreachable nodes. Use carefully. */
|
||||
|
||||
|
@ -190,19 +191,21 @@ static void timeout_handler(int fd, short events, void *event) {
|
|||
}
|
||||
}
|
||||
|
||||
if(contradicting_del_edge && contradicting_add_edge) {
|
||||
logger(LOG_WARNING, "Possible node with same Name as us!");
|
||||
|
||||
if(rand() % 3 == 0) {
|
||||
logger(LOG_ERR, "Shutting down, check configuration of all nodes for duplicate Names!");
|
||||
event_loopexit(NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
event_add(event, &(struct timeval){pingtimeout, 0});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue