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_add_edge = 0;
|
||||||
int contradicting_del_edge = 0;
|
int contradicting_del_edge = 0;
|
||||||
|
static int sleeptime = 10;
|
||||||
|
|
||||||
/* Purge edges and subnets of unreachable nodes. Use carefully. */
|
/* 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) {
|
if(contradicting_del_edge > 100 && contradicting_add_edge > 100) {
|
||||||
logger(LOG_WARNING, "Possible node with same Name as us!");
|
logger(LOG_WARNING, "Possible node with same Name as us! Sleeping %d seconds.", sleeptime);
|
||||||
|
sleep(sleeptime);
|
||||||
if(rand() % 3 == 0) {
|
sleeptime *= 2;
|
||||||
logger(LOG_ERR, "Shutting down, check configuration of all nodes for duplicate Names!");
|
if(sleeptime < 0)
|
||||||
event_loopexit(NULL);
|
sleeptime = 3600;
|
||||||
return;
|
} else {
|
||||||
}
|
sleeptime /= 2;
|
||||||
|
if(sleeptime < 10)
|
||||||
contradicting_add_edge = 0;
|
sleeptime = 10;
|
||||||
contradicting_del_edge = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
contradicting_add_edge = 0;
|
||||||
|
contradicting_del_edge = 0;
|
||||||
|
|
||||||
event_add(event, &(struct timeval){pingtimeout, 0});
|
event_add(event, &(struct timeval){pingtimeout, 0});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue