Use the same logic as tinc 1.0.x for detecting two nodes with the same Name.

This commit is contained in:
Guus Sliepen 2011-07-16 15:21:37 +02:00
parent 2ba61742d4
commit 03ac48ea19

View file

@ -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});
}